{"version":3,"sources":["serviceWorker.ts","reducers/contextState.ts","reducers/supportModeState.ts","pages/Login/reducers/state.ts","utils/configurations.ts","utils/commonHelpers.ts","pages/FleetOverview2/reducers/state.ts","pages/FleetOverview2/reducers/fleetOverviewReducer.ts","pages/FleetOverview2/reducers/index.js","pages/Users/reducers/state.ts","pages/Users/reducers/usersReducer.ts","pages/Users/reducers/index.js","pages/Roles/reducers/state.ts","pages/Roles/reducers/index.js","pages/Roles/reducers/rolesReducer.ts","pages/Orgs/reducers/state.ts","pages/Orgs/reducers/orgsReducer.ts","pages/Orgs/reducers/index.js","pages/Countries/reducers/state.ts","pages/OrgSelector/reducers/state.ts","pages/OrgSelector/reducers/orgSelectorReducer.ts","pages/OrgSelector/reducers/index.js","pages/Assets/reducers/state.ts","pages/Assets/reducers/assetsReducer.ts","pages/Assets/reducers/index.js","pages/Controllers/reducers/state.ts","pages/Controllers/reducers/index.js","pages/Controllers/reducers/userControllersReducer.ts","pages/Alerts/reducers/state.ts","pages/Alerts/reducers/index.js","pages/Alerts/reducers/alertsReducer.ts","pages/Templates/reducers/state.ts","pages/Templates/reducers/index.js","pages/Templates/reducers/templatesReducer.ts","pages/TemplateDetails/reducers/state.ts","pages/TemplateDetails/reducers/templateDetailsReducer.ts","pages/TemplateDetails/reducers/index.js","reducers/reportState.ts","reducers/dashboardState.ts","reducers/userOrgAccessState.ts","reducers/permissionsState.ts","pages/Operators/reducers/state.ts","pages/Operators/reducers/index.js","pages/Operators/reducers/oprReducer.ts","pages/ReportSchedules/reducers/state.ts","pages/ReportSchedules/reducers/index.ts","pages/ReportSchedules/reducers/reportSchedulesReducer.ts","pages/GeoFences/reducers/state.ts","pages/GeoFences/reducers/index.js","pages/GeoFences/reducers/geofencesReducer.ts","pages/ServiceTrucks/reducers/state.ts","pages/ServiceTrucks/reducers/index.js","pages/ServiceTrucks/reducers/serviceTruckReducer.ts","pages/Help/VideoTutorials/reducers/state.ts","pages/Help/VideoTutorials/reducers/index.js","pages/Help/VideoTutorials/reducers/videotutorialsReducer.ts","pages/Admin/Contracts/reducers/state.ts","pages/Admin/Contracts/reducers/index.js","pages/Admin/Contracts/reducers/contractsReducer.ts","pages/Admin/Controllers/reducers/state.ts","pages/Admin/Controllers/reducers/index.js","pages/Admin/Controllers/reducers/controllersReducer.ts","pages/Admin/Applications/reducers/state.ts","pages/Admin/Applications/reducers/index.js","pages/Admin/Applications/reducers/applicationsReducer.ts","pages/Iqanopen/Softwares/reducers/state.ts","pages/Iqanopen/Softwares/reducers/index.js","pages/Iqanopen/Softwares/reducers/softwaresReducers.ts","pages/Iqanopen/UpdateDeviceSoftware/reducers/state.ts","pages/Iqanopen/UpdateDeviceSoftware/reducers/index.ts","pages/Iqanopen/UpdateDeviceSoftware/reducers/DeviceReducer.ts","pages/CSU/reducers/state.ts","pages/CSU/reducers/index.js","pages/CSU/reducers/csuReducer.ts","pages/Help/ReleaseNotes/reducers/state.ts","pages/Help/ReleaseNotes/reducers/index.js","pages/Help/ReleaseNotes/reducers/releasenotesReducer.ts","pages/Help/UserGuide/reducers/state.ts","pages/Help/UserGuide/reducers/index.js","pages/Help/UserGuide/reducers/userguideReducer.ts","pages/TaylorAccess/OperatorManagement/reducers/state.ts","pages/TaylorAccess/OperatorManagement/reducers/index.js","pages/TaylorAccess/OperatorManagement/reducers/taylorOprReducer.ts","pages/TaylorAccess/QuestionManagement/reducers/state.ts","pages/TaylorAccess/QuestionManagement/reducers/index.js","pages/TaylorAccess/QuestionManagement/reducers/questionsReducer.ts","pages/Dana/reducers/state.ts","pages/Dana/reducers/index.ts","pages/Dana/reducers/danaReportReducer.ts","pages/Reports/reducers/state.ts","pages/Reports/reducers/index.ts","pages/Reports/reducers/ReportReducer.ts","reducers/index.ts","reducers/contextReducer.ts","reducers/supportModeReducer.ts","pages/Login/reducers/index.ts","pages/Countries/reducers/index.ts","reducers/dashboardReducer.ts","reducers/reportReducer.ts","reducers/userOrgAccessReducer.ts","reducers/permissionsReducer.ts","utils/history.ts","utils/apiHelpers/apiHelpers.ts","actions/context.ts","actions/supportMode.ts","actions/dashboard.ts","actions/report.ts","actions/userOrgAccess.ts","pages/FleetOverview2/actions/fleetOverview.ts","pages/TaylorAccess/QuestionManagement/actions/questions.ts","pages/TaylorAccess/QuestionManagement/actions/questionsMaintInfo.ts","utils/apiHelpers/formHelpers.ts","utils/Components/formAlerts.tsx","pages/TaylorAccess/QuestionManagement/QuestionBankMaintInfo/AddQuestion.tsx","pages/TaylorAccess/QuestionManagement/QuestionBankMaintInfo/QuestionBankMaintInfo.tsx","pages/TaylorAccess/QuestionManagement/QuestionBankMaint.tsx","pages/TaylorAccess/QuestionManagement/QuestionBank.tsx","utils/Components/BackNavigation.tsx","pages/TaylorAccess/OperatorManagement/actions/operators.ts","pages/TaylorAccess/OperatorManagement/actions/oprMaintInfo.ts","pages/TaylorAccess/OperatorManagement/OprMaintInfo/OprMaintInfo.tsx","pages/TaylorAccess/OperatorManagement/oprMaint.tsx","pages/TaylorAccess/OperatorManagement/Operators.tsx","pages/TaylorAccess/OperatorManagement/OperatorsHistory.tsx","pages/GeoFences/actions/ShapeInfo.ts","pages/GeoFences/actions/FenceListDrawer.ts","pages/GeoFences/actions/FenceAssets.ts","pages/GeoFences/actions/geofences.ts","pages/OrgSelector/actions/orgSelector.ts","pages/OrgSelector/actions/orgSelectorHeader.ts","pages/OrgSelector/actions/orgSelectorList.ts","pages/OrgSelector/actions/orgSelectorTree.ts","pages/OrgSelector/OrgSelectorHeader.tsx","pages/OrgSelector/OrgSelectorList.tsx","pages/OrgSelector/OrgSelectorTree.tsx","pages/OrgSelector/OrgSelector.tsx","pages/Users/actions/users.ts","utils/emailNotification/apiEmailnotification.ts","pages/Users/actions/userMaintInfo.ts","pages/Users/actions/userMaintSubscriptions.ts","pages/Users/actions/userMaintOrgs.ts","pages/Users/actions/roleMaintInfo.ts","pages/Users/actions/activityMaintSubscription.ts","pages/Users/userMaintInfo/UserHomeOrg.tsx","pages/Users/userMaintInfo/UserMaintInfo.tsx","pages/Users/userMaintOrgs/UserMaintOrgs.tsx","pages/Users/userMaintSubscriptions/UserMaintSubscriptions.tsx","pages/Users/activityMaintSubscription/activityMaintSubscription.tsx","pages/Users/UserMaint.tsx","pages/Terms/actions/index.ts","pages/Terms/Terms.tsx","assets/images/filter-remove.svg","layouts/TimeOutHandler.tsx","layouts/TopHeader.tsx","assets/images/add-device.svg","assets/images/add-software.svg","assets/images/aiot.svg","assets/images/bell.svg","assets/images/contracts.svg","assets/images/komatsu.svg","assets/images/map-pin.svg","assets/images/operator.svg","assets/images/organization.svg","assets/images/settings-admin.svg","assets/images/support.svg","assets/images/tractor.svg","assets/images/update-software.svg","assets/images/users.svg","assets/images/vehicle-icons/maintenance/035-motor.svg","assets/images/vehicle-icons/maintenance/tools-measures-service-mechanic-repair.svg","layouts/LeftSider.tsx","assets/images/tractor-black.svg","assets/images/geofenceIcon.svg","assets/images/move-geofence.svg","assets/images/move-geofence-active.svg","assets/images/marker.svg","assets/images/markerActive.svg","assets/images/maximize.svg","assets/images/service-truck.svg","assets/images/service-truck-active.svg","assets/images/komatsu-black.svg","assets/images/map-status/critical.svg","assets/images/map-status/warning.svg","assets/images/map-status/information.svg","assets/images/map-status/online.svg","assets/images/map-status/offline.svg","assets/images/map-status/engine.svg","assets/images/vehicle-icons/maintenance/car_repair_service_purple.svg","pages/FleetOverview2/icons.tsx","pages/FleetOverview2/overlays/filtersBar/FiltersBar.tsx","pages/FleetOverview2/overlays/filtersBar/asset-filters.ts","pages/FleetOverview2/overlays/filtersBar/filter-assets.ts","pages/FleetOverview2/overlays/assetList/AssetList.tsx","pages/ServiceTrucks/actions/serviceTrucks.ts","pages/FleetOverview2/overlays/clusterInfo/ClusterInfo.tsx","pages/FleetOverview2/overlays/assetSearch/AssetSearch.tsx","pages/FleetOverview2/overlays/AssetDrawer.tsx","pages/FleetOverview2/overlays/filterPanel/FilterPanel.tsx","pages/FleetOverview2/overlays/MarkerTooltip.tsx","pages/FleetOverview2/map-pins.ts","sharedComponents/GoogleMap/cluster-styles.ts","sharedComponents/GoogleMap/MarkerManager.ts","lib/script-cache.ts","sharedComponents/GoogleMap/use-google-maps-lib.ts","lib/use-dom-node.ts","sharedComponents/GoogleMap/PolyLine.ts","pages/GeoFences/geofenceHelper.ts","sharedComponents/GoogleMap/DrawingManager.ts","pages/FleetOverview2/MapContext.ts","sharedComponents/GoogleMap/Map.tsx","pages/GeoFences/FenceAssets.tsx","pages/GeoFences/GeofenceMaint.tsx","pages/GeoFences/FenceListDrawer.tsx","sharedComponents/GoogleMap/geofenceStyle.ts","pages/ServiceTrucks/ServiceTrucksListDrawer.tsx","pages/ServiceTrucks/ServiceTrucksMaint.tsx","assets/images/vehicle-icons/vehicles/aeroplane.svg","assets/images/vehicle-icons/vehicles/Aircraft.svg","assets/images/vehicle-icons/vehicles/ambulance.svg","assets/images/vehicle-icons/vehicles/Ambulance1.svg","assets/images/vehicle-icons/vehicles/AmbulanceCar.svg","assets/images/vehicle-icons/vehicles/ATV.svg","assets/images/vehicle-icons/vehicles/bicycle.svg","assets/images/vehicle-icons/vehicles/Boat.svg","assets/images/vehicle-icons/vehicles/bulldozerWheels.svg","assets/images/vehicle-icons/vehicles/bus.svg","assets/images/vehicle-icons/vehicles/bus1.svg","assets/images/vehicle-icons/vehicles/Bus2.svg","assets/images/vehicle-icons/vehicles/Bus3.svg","assets/images/vehicle-icons/vehicles/CableCar.svg","assets/images/vehicle-icons/vehicles/CabrioletCar.svg","assets/images/vehicle-icons/vehicles/camper.svg","assets/images/vehicle-icons/vehicles/car_1.svg","assets/images/vehicle-icons/vehicles/car_2.svg","assets/images/vehicle-icons/vehicles/car_3.svg","assets/images/vehicle-icons/vehicles/car_4.svg","assets/images/vehicle-icons/vehicles/car.svg","assets/images/vehicle-icons/vehicles/CargoShip.svg","assets/images/vehicle-icons/vehicles/CargoShip1.svg","assets/images/vehicle-icons/vehicles/CoupeCar.svg","assets/images/vehicle-icons/vehicles/crane.svg","assets/images/vehicle-icons/vehicles/Crane1.svg","assets/images/vehicle-icons/vehicles/CrossoverCar.svg","assets/images/vehicle-icons/vehicles/deliveryTruck.svg","assets/images/vehicle-icons/vehicles/DoubleBus.svg","assets/images/vehicle-icons/vehicles/Escavator.svg","assets/images/map-status/cloud.svg","pages/FleetOverview2/VehicleIcons.ts","pages/FleetOverview2/MapToolTip.tsx","pages/ServiceTrucks/serviceTrucksHelper.ts","pages/FleetOverview2/OverlayViewContainer.tsx","pages/FleetOverview2/FleetOverview.tsx","lib/use-polling.ts","pages/Dashboard/AssetApiResp.ts","pages/Dashboard/widgets/common.ts","pages/Dashboard/WidgetFilterForm/FilterApi.ts","pages/Dashboard/api.ts","pages/Dashboard/models.ts","pages/Dashboard/state.ts","pages/Dashboard/widgets/LineChart/LineChart.ts","pages/Dashboard/widgets/LineChart/Widget.tsx","lib/event.ts","pages/Dashboard/WidgetEditForm/Container.tsx","pages/Dashboard/WidgetEditForm/validation-messages.ts","pages/Dashboard/WidgetEditForm/EditFormContainer.tsx","pages/Dashboard/widgets/index.tsx","pages/Dashboard/WidgetEditForm/WidgetEditDrawer.tsx","pages/Dashboard/WidgetEditForm/SelectorList.tsx","pages/Dashboard/WidgetEditForm/WidgetTitleFormField.tsx","pages/Dashboard/WidgetEditForm/SignalSelectorList.tsx","pages/Dashboard/WidgetEditForm/index.tsx","pages/Dashboard/widgets/LineChart/RightAxisSignals.tsx","pages/Dashboard/widgets/LineChart/EditForm.tsx","pages/Dashboard/widgets/BarChart/BarChart.ts","pages/Dashboard/widgets/BarChart/BarChartEditForm.tsx","pages/Dashboard/widgets/BarChart/index.tsx","pages/Dashboard/widgets/BooleanWidget/EditForm.tsx","sharedComponents/Dot.tsx","pages/Dashboard/widgets/BooleanWidget/BooleanWidget.tsx","pages/Dashboard/widgets/TextWidget/Widget.tsx","pages/Dashboard/widgets/TextWidget/EditForm.tsx","pages/Dashboard/widgets/TrackerWidget/TrackerChart.ts","pages/Dashboard/widgets/TrackerWidget/Widget.tsx","pages/Dashboard/widgets/TrackerWidget/TrackerSignalSelectorList.tsx","pages/Dashboard/widgets/TrackerWidget/EditForm.tsx","pages/Dashboard/widgets/GaugeWidget/Gauge.ts","pages/Dashboard/widgets/GaugeWidget/GaugeWidget.tsx","pages/Dashboard/widgets/GaugeWidget/Editform.tsx","pages/Dashboard/widgets/LocationWidget/Tooltip.tsx","pages/Dashboard/widgets/LocationWidget/Widget.tsx","pages/Dashboard/widgets/LocationWidget/LocationSignalSelectorList.tsx","pages/Dashboard/widgets/LocationWidget/EditForm.tsx","pages/Dashboard/widgets/ClusterBar/ClusterBarChart.ts","pages/Dashboard/widgets/ClusterBar/Widget.tsx","pages/Dashboard/widgets/ClusterBar/ClusterBarChartEditForm.tsx","pages/Dashboard/widgets/GaugeWidget/index.ts","pages/Dashboard/widgets/LineChart/index.tsx","pages/Dashboard/widgets/TextWidget/index.tsx","pages/Dashboard/widgets/TrackerWidget/index.tsx","pages/Dashboard/widgets/LocationWidget/index.tsx","pages/Dashboard/widgets/ClusterBar/index.tsx","pages/Dashboard/WidgetContainer.tsx","pages/Dashboard/widgets/widgetapi.ts","pages/Dashboard/useAssetStatus.ts","webpack:///./src/assets/images/map-pins/offline-pin.svg?bd15","webpack:///./src/assets/images/map-pins/online-pin.svg?265c","pages/Dashboard/AssetStatus.tsx","pages/Dashboard/Header.tsx","pages/Dashboard/WidgetFilterForm/FilterForm.tsx","pages/Dashboard/WidgetFilterForm/FilterFormContainer.tsx","pages/Dashboard/WidgetFilterForm/WidgetFilterDrawer.tsx","pages/Dashboard/WidgetExportForm/ExportForm.tsx","pages/Dashboard/WidgetExportForm/ExportFormContainer.tsx","pages/Dashboard/WidgetExportForm/WidgetExportDrawer.tsx","pages/Dashboard/WidgetExportForm/exportApi.ts","pages/Dashboard/WidgetExportForm/formatExportApiResp.ts","webpack:///./src/assets/images/map-pins/dm1-pin.svg?685b","pages/Dashboard/PageHeaderExtra.tsx","pages/Dashboard/AssetDashboard.tsx","pages/Dashboard/WidgetExportForm/useExport.ts","pages/Dashboard/Dashboard.tsx","pages/Dashboard/index.tsx","pages/Dashboard2/AssetApiResp.ts","pages/Dashboard2/widgets/common.ts","pages/Dashboard2/WidgetFilterForm/FilterApi.ts","pages/Dashboard2/api.ts","pages/Dashboard2/WidgetExportForm/useExportGPSEvents.ts","pages/Dashboard2/widgets/BarChart/BarChartClass.ts","pages/Dashboard2/widgets/BarChart/Widget.tsx","pages/Dashboard2/WidgetEditForm/Container.tsx","pages/Dashboard2/WidgetEditForm/validation-messages.ts","pages/Dashboard2/WidgetEditForm/EditFormContainer.tsx","pages/Dashboard2/widgets/index.tsx","pages/Dashboard2/WidgetEditForm/SelectorList.tsx","pages/Dashboard2/WidgetEditForm/WidgetTitleFormField.tsx","pages/Dashboard2/WidgetEditForm/ColorSelectorList.tsx","pages/Dashboard2/WidgetEditForm/BooleanSelectorList.tsx","pages/Dashboard2/WidgetEditForm/SignalSelectorList.tsx","pages/Dashboard2/widgets/LineChart/RightAxisSignals.tsx","pages/Dashboard2/WidgetEditForm/index.tsx","pages/Dashboard2/WidgetEditForm/WidgetEditDrawer.tsx","pages/Dashboard2/widgets/BarChart/BarChartEditForm.tsx","pages/Dashboard2/widgets/BooleanWidget/EditForm.tsx","pages/Dashboard2/widgets/BooleanWidget/BooleanWidget.tsx","pages/Dashboard2/widgets/Chat/EditForm.tsx","pages/Dashboard2/widgets/Chat/Widget.tsx","pages/Dashboard2/widgets/ClusterBar/ClusterBarChart.ts","pages/Dashboard2/widgets/ClusterBar/Widget.tsx","pages/Dashboard2/widgets/ClusterBar/ClusterBarChartEditForm.tsx","pages/Dashboard2/widgets/CommandWidget/EditForm.tsx","pages/Dashboard2/models.ts","pages/Dashboard2/state.ts","pages/Dashboard2/widgets/CommandWidget/CommandControl.tsx","pages/Dashboard2/widgets/CommandWidget/Widget.tsx","pages/Dashboard2/widgets/CommandWidget-new/EditForm.tsx","pages/Dashboard2/widgets/CommandWidget-new/CommandControl.tsx","pages/Dashboard2/widgets/CommandWidget-new/Widget.tsx","pages/Dashboard2/widgets/EventsLocationWidget/Tooltip.tsx","pages/Dashboard2/widgets/LocationWidget/Tooltip.tsx","pages/Dashboard2/widgets/EventsLocationWidget/MapMenuOptions.tsx","pages/Dashboard2/widgets/EventsLocationWidget/Widget.tsx","pages/Dashboard2/widgets/EventsLocationWidget/EventsLocationSignalSelectorList.tsx","pages/Dashboard2/widgets/EventsLocationWidget/EditForm.tsx","pages/Dashboard2/widgets/GaugeWidget/Gauge.ts","pages/Dashboard2/widgets/GaugeWidget/GaugeWidget.tsx","pages/Dashboard2/widgets/GaugeWidget/Editform.tsx","pages/Dashboard2/widgets/InformationWidget/Widget.tsx","pages/Dashboard2/widgets/InformationWidget/EditForm.tsx","pages/Dashboard2/widgets/LineChart/LineChart.ts","pages/Dashboard2/widgets/LineChart/Widget.tsx","pages/Dashboard2/widgets/LineChart/EditForm.tsx","pages/Dashboard2/widgets/LocationWidget/Widget.tsx","pages/Dashboard2/widgets/LocationWidget/LocationSignalSelectorList.tsx","pages/Dashboard2/widgets/LocationWidget/EditForm.tsx","pages/Dashboard2/widgets/TextWidget/Widget.tsx","pages/Dashboard2/widgets/TextWidget/EditForm.tsx","pages/Dashboard2/widgets/TrackerWidget/TrackerChart.ts","pages/Dashboard2/widgets/TrackerWidget/Widget.tsx","pages/Dashboard2/widgets/TrackerWidget/TrackerSignalSelectorList.tsx","pages/Dashboard2/widgets/TrackerWidget/EditForm.tsx","pages/Dashboard2/widgets/BarChart/index.ts","pages/Dashboard2/widgets/GaugeWidget/index.ts","pages/Dashboard2/widgets/LineChart/index.tsx","pages/Dashboard2/widgets/Chat/index.tsx","pages/Dashboard2/widgets/TextWidget/index.tsx","pages/Dashboard2/widgets/CommandWidget/index.tsx","pages/Dashboard2/widgets/CommandWidget-new/index.tsx","pages/Dashboard2/widgets/TrackerWidget/index.tsx","pages/Dashboard2/widgets/LocationWidget/index.tsx","pages/Dashboard2/widgets/EventsLocationWidget/index.tsx","pages/Dashboard2/widgets/ClusterBar/index.tsx","pages/Dashboard2/widgets/InformationWidget/index.tsx","pages/Dashboard2/WidgetHeaderNew.tsx","pages/Dashboard2/WidgetContainer.tsx","pages/Dashboard2/widgets/widgetapi.ts","pages/Dashboard2/useAssetStatus.ts","pages/Dashboard2/WidgetFilterForm/FilterForm.tsx","pages/Dashboard2/WidgetFilterForm/FilterFormContainer.tsx","pages/Dashboard2/WidgetFilterForm/WidgetFilterDrawer.tsx","pages/Dashboard2/WidgetExportForm/ExportForm.tsx","pages/Dashboard2/WidgetExportForm/ExportFormContainer.tsx","pages/Dashboard2/WidgetExportForm/WidgetExportDrawer.tsx","pages/Dashboard2/WidgetExportForm/exportApi.ts","pages/Dashboard2/WidgetExportForm/formatExportApiResp.ts","webpack:///./src/assets/images/map-pins/asset_down.svg?6919","pages/Dashboard2/DashboardHeader/DashboardHeader.tsx","assets/images/chat.svg","pages/Dashboard2/DashboardHeader/DashboardHeaderExtra.tsx","pages/Dashboard2/DashboardHeader/DashboardTitleText.tsx","pages/Dashboard2/DashboardHeader/DashboardClosing.tsx","pages/Dashboard2/AssetDashboard.tsx","pages/Dashboard2/WidgetExportForm/useExport.ts","pages/Dashboard2/DashboardExtra/DashboardExtra.tsx","pages/Dashboard2/Permission/DashboardRolePermissions.tsx","pages/Dashboard2/Permission/PermissionDrawer.tsx","pages/Dashboard2/Permission/api.ts","pages/Dashboard2/Permission/common.ts","pages/Dashboard2/AssetNotes.tsx","pages/Dashboard2/InitDashboard.tsx","pages/Dashboard2/DashboardApi.ts","pages/Dashboard2/Dashboard.tsx","pages/Dashboard2/index.tsx","pages/Orgs/actions/orgs.ts","pages/Orgs/actions/orgMaintInfo.ts","pages/Orgs/actions/orgMaintAdmins.ts","pages/Orgs/actions/orgMaintGlobalSubscription.ts","pages/Orgs/orgMaintInfo/OrgLogo.tsx","pages/Orgs/orgMaintInfo/OrgLoginLogo.tsx","pages/Orgs/orgMaintInfo/OrgLoginBackground.tsx","pages/Orgs/orgMaintInfo/OrgMaintInfo.tsx","pages/Orgs/orgMaintAdmins/OrgMaintAdmins.tsx","pages/Orgs/orgMaintGlobalSubscription/OrgMaintGlobalSubscription.tsx","pages/OrgMaintSettings/OrgMaintSettings.tsx","pages/Admin/Contracts/actions/contracts.ts","pages/Orgs/orgContractsDetails/OrgContractsDetails.tsx","pages/Orgs/orgMaintNotes/OrgMaintNotes.tsx","pages/Orgs/OrgMaint.tsx","pages/Orgs/Orgs.tsx","pages/Users/roleMaintInfo/RoleMaintInfo.tsx","pages/Users/RoleMaint.tsx","pages/Users/Users.tsx","pages/Roles/actions/roles.ts","pages/Roles/actions/roleMaintInfo.ts","pages/Roles/common.ts","pages/Roles/roleMaintInfo/RoleMaintInfo.tsx","pages/Roles/roleMaintInfo/RoleCopyMaintInfo.tsx","pages/Roles/roleMaintInfo/RoleViewMaintInfo.tsx","pages/Roles/roleMaintInfo/RolePermissionMaintInfo.tsx","pages/Roles/RoleMaint.tsx","pages/Roles/RolePermissionMaint.tsx","pages/Roles/Roles.tsx","pages/Alerts/actions/alerts.ts","utils/api/download.ts","pages/Alerts/Export.tsx","pages/Alerts/Timespan.tsx","pages/Alerts/AlertsSignalsFilters.tsx","pages/Alerts/AlertsSignals.tsx","pages/Alerts/AlertsDm1Filters.tsx","pages/Alerts/CumminsResponseView.tsx","pages/Alerts/AlertsDm1.tsx","pages/Alerts/AlertsCmdHistoryFilters.tsx","pages/Alerts/AlertsCmdHistory.tsx","pages/Alerts/ActivityAlerts.tsx","pages/Alerts/Alerts.tsx","pages/Assets/actions/assets.ts","pages/Assets/actions/assetMaintInfo.ts","pages/Assets/actions/assetMaintSubscriptions.ts","pages/Assets/assetMaintInfo/AssetHistory.tsx","pages/Assets/assetMaintInfo/AssetMaintInfo.tsx","pages/Assets/assetMaintSubscriptions/AssetMaintSubscriptions.tsx","pages/Assets/assetMaintControllerInfo/AssetMaintControllerInfo.tsx","pages/Assets/assetGatewaySettings/WiFiConnect.tsx","pages/Assets/assetGatewaySettings/AssetGatewaySettings.tsx","pages/Assets/AssetContractsDetails/AssetContractsDetails.tsx","pages/Assets/AssetMaint.tsx","pages/Assets/liteAssets/LiteAssets.tsx","pages/Assets/Assets.tsx","pages/Controllers/actions/userControllers.ts","pages/Controllers/AppMaintInstallation.tsx","pages/Controllers/AppInstallationProgress.tsx","pages/Controllers/UsersControllers.tsx","pages/Templates/actions/templates.ts","pages/Templates/actions/templateMaintInfo.ts","pages/Templates/actions/templateDuplicate.ts","pages/Templates/actions/templateCopyCollection.ts","pages/Templates/templateMaintInfo/TemplateMaintInfoOrg.tsx","pages/Templates/templateMaintInfo/TemplateMaintInfo.tsx","pages/Templates/templateDuplicate/TemplateDuplicateOrg.tsx","pages/Templates/templateDuplicate/TemplateDuplicate.tsx","pages/Templates/templateCopyCollection/TemplateCopyCollection.tsx","pages/Templates/TemplateMaint.tsx","pages/Templates/Templates.tsx","pages/TemplateDetails/actions/templateDetails.ts","pages/TemplateDetails/actions/signalCollections.ts","pages/TemplateDetails/actions/signalCollectionMaint.ts","pages/TemplateDetails/actions/signals.ts","pages/TemplateDetails/actions/signalMaint.ts","pages/TemplateDetails/actions/signalList.ts","pages/TemplateDetails/actions/dm1Faults.ts","pages/TemplateDetails/actions/iqanFileUpload.ts","pages/TemplateDetails/actions/pinnedSignals.ts","pages/TemplateDetails/actions/operatorSignals.ts","pages/TemplateDetails/actions/quotasApplied.ts","pages/TemplateDetails/signals/SignalList.tsx","pages/TemplateDetails/signals/Signals.tsx","pages/TemplateDetails/signalMaint/SignalRule.tsx","pages/TemplateDetails/signalMaint/SignalMaintInfo.tsx","pages/TemplateDetails/signalMaint/SignalMaint.tsx","pages/TemplateDetails/iqanFileUpload/IqanFileUpload.tsx","pages/TemplateDetails/signalCollections/SignalCollections.tsx","pages/TemplateDetails/dm1Faults/Dm1Messaging.tsx","pages/TemplateDetails/dm1Faults/Dm1UploadFile.tsx","pages/TemplateDetails/dm1Faults/Dm1Lists.tsx","pages/TemplateDetails/dm1Faults/Dm1Faults.tsx","pages/TemplateDetails/pinnedSignals/signalTree.tsx","pages/TemplateDetails/pinnedSignals/formatPinnedSignals.ts","pages/TemplateDetails/pinnedSignals/pinnedSignals.tsx","pages/TemplateDetails/collectionMaint/CollectionMaintInfo.tsx","pages/TemplateDetails/collectionMaint/CollectionMaint.tsx","pages/TemplateDetails/operatorSignals/signalTree.tsx","pages/TemplateDetails/operatorSignals/formatOperatorSignals.ts","pages/TemplateDetails/operatorSignals/OperatorSignals.tsx","pages/TemplateDetails/quotasApplied/quotasApplied.tsx","pages/TemplateDetails/TemplateDetails.tsx","pages/NotFound404/NotFound404.tsx","pages/Operators/actions/oprs.ts","pages/Operators/actions/oprMaintInfo.ts","pages/Operators/OprMaintInfo/OprHomeOrg.tsx","pages/Operators/OprMaintInfo/OprMaintInfo.tsx","pages/Operators/oprMaint.tsx","pages/Operators/Oprs.tsx","pages/Help/Tutorials/actions/tutorials.ts","pages/Help/Tutorials/Tutorials.tsx","pages/Admin/Contracts/ContractMaint.tsx","pages/Admin/Contracts/ServicePlanTab.tsx","pages/Admin/Contracts/Contracts.tsx","pages/Admin/Applications/actions/applications.ts","pages/Admin/Applications/ApplicationMaint.tsx","pages/Admin/Applications/Applications.tsx","pages/Admin/AIOT.tsx","pages/Iqanopen/Controllers/actions/controllers.ts","pages/Iqanopen/Controllers/DeviceMaint.tsx","pages/Iqanopen/Controllers/Devices.tsx","pages/Iqanopen/Softwares/actions/softwares.ts","pages/Iqanopen/Softwares/SoftwareMaint.tsx","pages/Iqanopen/Softwares/Softwares.tsx","pages/Iqanopen/UpdateDeviceSoftware/actions/updatedevice.ts","pages/Iqanopen/UpdateDeviceSoftware/SoftwareInstallation.tsx","pages/Iqanopen/UpdateDeviceSoftware/DeviceDiscovery.tsx","pages/Iqanopen/UpdateDeviceSoftware/DeviceStatus.tsx","pages/Iqanopen/UpdateDeviceSoftware/DeviceHistory.tsx","pages/Iqanopen/UpdateDeviceSoftware/SoftwareInstallationProgress.tsx","pages/Iqanopen/UpdateDeviceSoftware/UDS.tsx","pages/ReportSchedules/actions/reportSchedules.ts","pages/ReportSchedules/actions/scheduleMaintInfo.ts","pages/ReportSchedules/scheduleMaintInfo/scheduleMaintInfoOrg.tsx","pages/ReportSchedules/scheduleMaintInfo/scheduleMaintInfoUsers.tsx","pages/ReportSchedules/scheduleMaintInfo/ScheduleMaintInfo.tsx","pages/ReportSchedules/SchedulesMaint.tsx","pages/ReportSchedules/Schedules.tsx","pages/FleetOverview2/FleetStatsOverview.tsx","pages/FleetOverview2/NotificationsOverview.tsx","pages/CSU/actions/csu.ts","pages/CSU/CSUInfo.tsx","pages/CSU/CalibrationMaint.tsx","pages/CSU/CSU.tsx","pages/CSU/CSUHistory.tsx","pages/CSU/OTA.tsx","pages/Help/VideoTutorials/actions/videotutorials.ts","pages/Help/VideoTutorials/VideoTutorials.tsx","pages/Help/ReleaseNotes/actions/releasenotes.ts","pages/Help/ReleaseNotes/ReleaseNotes.tsx","pages/Help/UserGuide/actions/userguide.ts","pages/Help/UserGuide/UserGuide.tsx","pages/Dana/actions/danareports.ts","pages/Dana/Danareports.tsx","pages/Reports/actions/orgreports.ts","pages/Reports/reports.tsx","App.tsx","utils/cookieHelpers.ts","pages/Login/actions/login.ts","pages/Login/LoginFooter.tsx","pages/Login/LoginError.tsx","pages/Login/ForgotPassword.tsx","pages/Login/config.ts","pages/Login/MaintenancePage.tsx","pages/Login/Login.tsx","VersionNumber.tsx","index.tsx","assets/images/map-status/offline.png","assets/images/map-status/online.png","assets/images/map-status/critical.png","assets/images/map-status/warning.png","assets/images/map-status/info.png","assets/images/map-status/dm1.png","assets/images/map-pins/asset_down.svg","assets/images/map-pin.png","assets/images/map-pins/critical-pin.svg","assets/images/map-pins/dm1-pin.svg","assets/images/map-pins/warning-pin.svg","assets/images/map-pins/info-pin.svg","assets/images/map-pins/online-pin.svg","assets/images/map-pins/offline-pin.svg","assets/images/widgets/chat_history_widget.jpg","assets/images/reset.png","assets/images/map-pins/servicetruck-pin.svg","assets/images/widgets/bar_widget.jpg","assets/images/widgets/boolean_widget.jpg","assets/images/widgets/cluster_widget.jpg","assets/images/widgets/command_widget.jpg","assets/images/widgets/gauge_widget.jpg","assets/images/widgets/gps_event_widget.jpg","assets/images/widgets/information_widget.jpg","assets/images/widgets/line_widget.jpg","assets/images/widgets/location_widget.jpg","assets/images/widgets/text_widget.jpg","assets/images/widgets/tracker_widget.jpg","assets/images/cummins_logo.png","assets/images/stopnow.png","assets/images/servicenow.png","assets/images/servicesoon.png","assets/images/information.png","assets/images/inactive.png","assets/images/settings.png"],"names":["Boolean","window","location","hostname","match","initialState","context","initialized","appContext","mode","orgId","userId","roleLevel","roleName","roleId","httpRequest","contentType","host","token","instance","type","value","orgSettings","headerColor","fleetMapDefaultView","logo","user","active","avatarUploadAllowed","avatarUploadId","avatarUploadSrc","contextUserIsAdmin","contextUserIsParkerAdmin","contextUserIsSuperUser","email","firstName","fullName","homeOrg","name","orgIdParent","orgTree","lastName","locale","orgHomeRoleId","oktaUserId","phoneNumber","termsAndConditions","data","alert_settings","asset_widgets","assets","dm1_settings","global_view","iqan_key","master_tag","my_notifications","my_profile","org_options","org_settings","reports","role_settings","share_orgs","support_mode","templates","user_notifications","user_profile","users","timeout_settings","map","stats","loading","visible","timestamp","Date","dm1DailyCount","dm1HeatMapData","assetsWithDm1","notifications","signalRData","enabled","SignalRInitialData","maxCommandPermissionValue","gpsCoordinates","latitude","longitude","orgName","isSupportMode","logoUrl","backgroundUrl","languageIsoCode2","languageIsoCode2Default","languages","appConfigs","app","title","versionMajor","versionMinor","login","en","copyrightText","termsAndConditionsLinkText","alerts","exportMaxPages","fleetOverview","mapDataPoolingRate","mapGeoTabDataPoolingRate","assetSearchKeystrokeDelay","assetSearchGlobalKeystrokeDelay","assetOverview","widgetscreensizefortoggle","minsignalsformapwidgets","connectdisconnectdatapointid","deviceconnectedtext","datapointlimits","alertsInterval","maxdatapointlimit","maxapilimit","startdateenddatedaysdiff","exportstartdateenddatedaysdiff","autoRefreshPollingRate","PermissionDrawerTitle","cosmosdataretentiondays","subTitle","offlineHavingNoDateText","onlineText","pinnedSignals","maxSignalsSelection","operatorSignals","assetTags","maxAssetTags","maxAllowCharactersPerTags","orgTags","maxOrgTags","enableDashboard2","config","ENABLE_DASHBOARD2","enableGeoFencing","ENABLE_GEOFENCING","enableSchedule","ENABLE_SCHEDULE","enableCumminsDiagnostics","ENABLE_CUMMINS_DIAGNOSTICS","enableGatewaySettings","ENABLE_GATEWAY_SETTINGS","enableCumminsUI","ENABLE_CMNS_UI","enableCommandSignalFakeTesting","COMMAND_SIGNAL_FAKE_TESTING","defaultIP","DEFAULT_IP","enableMaintenanceMode","MAINTENANCE_MODE","server","URL","API_ENDPOINT","deploymentServerURL","UI_DOMAIN","reportServerURL","REPORT_ENDPOINT","claytonServerURL","CLAYTON_URL","hoistServerURL","HOIST_URL","toyotaServerURL","TOYOTA_URL","okta","oidc","issuer","OKTA_ISSUER","clientId","OKTA_CLIENT_ID","scopes","pkce","disableHttpsCheck","parkerUserRegstrationUrl","errors","api","defaultErrorMessage","fieldErrors","valueRequired","atLeastTwoCharacters","invalidEmail","signalR","code","SIGNALR_TOKEN","url","SIGNALR_URL","settings","form","successTitle","successDefaultMessage","errorTitle","warningTitle","submitButtonText","settingStyleForm","saveButtonText","cancleButtonText","formReset","message","okText","cancelText","formLayout","mainLayout","labelCol","span","wrapperCol","tailLayout","offset","drawers","defaultWidth","xlWidth","closeButtonText","cancelButtonText","messages","usersPhoneTooltip","headerColorTooltip","companyLogoTooltip","companyLoginUrlTooltip","companyLoginLogoTooltip","companyLoginBackgroundTooltip","dm1FaultsUploadTooltip","iqanTelematicSignalFileTooltip","tables","pageSize","j1939PageSize","commandPgnPageSize","defaultCurrent","defaultTotal","showSizeChanger","showQuickJumper","hideOnSinglePage","responsive","showLessItems","emailNotifyLogicApps","logic_app_url","EMAIL_LOGIC_APP_URL","email_subject","parker_AD_Password","colorCodes","colorCodesLineChart","accessTypes","getDrawerWidth","Math","min","innerWidth","getLoginUrl","loginUrl","localStorage","getItem","trim","setHeaderUserName","items","document","querySelectorAll","i","length","innerHTML","setHeaderColor","style","borderLeft","startsWith","setLogo","src","reloadPage","href","loadPage","refreshPage","history","refreshUri","pathname","replace","setTimeout","loadingIndicatorStart","body","classList","add","loadingIndicatorEnd","remove","uuidv4","faviconUrl","c","r","random","toString","stringToUrlString","aString","toLowerCase","scrollToElement","elementSelector","scrollIntoView","behavior","block","closePopover","documentElement","dispatchEvent","MouseEvent","bubbles","view","clientStorageClear","assetTableFiltersString","clear","sessionStorage","setItem","messageExists","messageText","getSegmentFromUrl","position","split","localizeUtcDate","date","dateFormatOptions","toLocaleString","undefined","setElementDisplay","selectorQuery","displayValue","display","isSilentRequest","formatGps","latitudeString","toFixed","longitudeString","formatSignals","signals","formattedSignals","ltlngArray","filter","s","forEach","ltlng","index","formatLatLngSignal","signalArray","reduce","acc","curSignal","currentIndex","units","newunits","newvalue","indexOf","includes","hexToString","formatOtherSignals","numberZeroPositive","concat","getPermissions","permission","result","binaryResult","unshift","floor","push","getPermissionsList","permissionsList","tableData","permissions","permissionLevel","permissionId","bynaryData","j","permissionList","convertBinaryToValue","binaryString","reverse","join","parseInt","id","formatTagsForPosting","tagArray","newTags","tagArrayNew","tag","JSON","stringify","Object","assign","sortAlphabetically","a","b","fa","tagName","toUpperCase","fb","rolespermissionsList","permission_level","matchWords","stringToSearch","words","regexMetachars","regex","RegExp","getGPSEventsWidgetIconDetails","point1","point2","severity","color","angleDegrees","google","maps","geometry","spherical","computeHeading","path","SymbolPath","FORWARD_CLOSED_ARROW","fillColor","fillOpacity","rotation","strokeColor","strokeWeight","scale","CIRCLE","rad","x","PI","getDistance","p1","p2","dLat","lat","dLong","lng","sin","cos","atan2","sqrt","numberWithCommas","getPercentageChange","oldNumber","newNumber","decreaseValue","groupObjsByValue","objectArray","property","obj","key","getToken","oktaStorage","oktaStorageJson","parse","idToken","setAssetTableFilters","newAssetTableFilters","getAssetTableFilters","assetTableExistingFilters","page","status","searchText","sortColumn","sortDirection","alertInterval","listMode","filters","tags","resetAssetTableFilters","isAssetTableFiltersSet","assetTableFilters","hexString","bytesArray","bytePair","TextDecoder","decode","Uint8Array","childNodes","_id","label","createTreeStructure","collection","children","values","getAvailableGranularity","DataSearchRange","timeRangeValueLocal","applyLimits","AvailableGranularity","differenceInMinutes","moment","duration","diff","asMinutes","checkObjectKeyValuesNotEmpty","mapMode","assetDrawer","show","width","cluster","filteredAssets","zoomTo","assetSearch","fleet","assetSearchValue","assetSearchFilters","critical","warning","info","dm1","online","offline","asset_down","preSearchAssetList","showFilterPanel","filterEnabled","filterCounts","preferedSignals","assetId","tooltip","visibility","overlay","marker","gmarker","asset","resetFilters","state","draft","updateFilter","filterName","recentCriticalCount","recentWarningCount","recentInfoCount","recentDm1Count","updateFilterCounts","fleetOverviewReducers","combineReducers","fleetOverviewState","action","immerProduce","mastertag","ids","tagsSorted","mapActions","zoomToFit","originator","mapFilters","preferences","payload","filterZoomTofit","usersList","userMaint","record","pageName","activeTab","administeredOrgs","tabs","disabled","countries","userCopy","tableConfig","pagination","current","total","onChange","showTotal","range","refreshOnUpdate","roleList","roleMaint","selectonHeader","currentView","orgRoles","roles","roleCopy","updateOrgUser","updatedRecord","orgUserId","updateAsset","notification","alert","alertSms","incAlertSms","offlineAlertSms","alertEmail","incAlertEmail","offlineAlertEmail","assetSmsIndeterminate","assetSmsChecked","assetEmailIndeterminate","assetEmailChecked","updateAssetAlerts","checkedCount","alertSmsIn","alertSmsOut","alertEmailIn","alertEmailOut","alertCount","updateActivitySubscriptions","activity","smsChecked","smsIndeterminate","emailChecked","emailIndeterminate","usersReducers","usersState","onPaginationChange","totalRecords","keys","instances","element","tab","ele","ind","findIndex","elem","gatewayId","groupsTotal","scope","successData","onFinishTab","orgs","isSubmitButton","tableRolesData","tableRolesConfig","tableOrgData","tableOrgConfig","rolePermissionList","rolePermissionMaint","customerOrgPermissions","rolesReducer","rolesState","orgRolePermissions","res","orgsList","orgMaint","selectedTag","states","phoneCountries","allCapabilities","usersAdministered","globalSubscriptions","globalNotes","updateGlobal","global","updateGlobalAlerts","orgsReducers","orgsState","orgSelector","orgSelection","updated","includeSuborgs","list","refreshOnEntry","showHeader","tree","selectedOrgId","treeData","treeDataFlat","treeDataChecked","treeDataExpanded","restrictedOrgs","restrictedOrgsExpansion","restrictedFeatures","isExpanded","loadListIntoTree","flatData","parentOrgId","findFlatParent","tempChild","item","parentId","Array","isArray","base","addChildren","child","properties","disableFeatures","updateListDataChecked","checked","updateTreeDataChecked","removeHeaderTag","orgIndex","splice","orgSelectorReducers","orgSelectorState","viewName","selected","expandedKeys","checkedKeys","err","console","log","updateState","assetsList","assetMaint","iqanConnectKey","wifipassword","tutorials","tutorialsList","assetsEligible","enableWiFi","enableHotspot","enableEthernet","ssidList","connected_SSID","ethernetIPAddress","allowViewSleepMode","allowChangeSleepMode","enableSleepMode","sleepCycleInSeconds","sleepCycleApplied","nextWakeUpTime","attachedControllersTableData","controllersList","billingNRenewalHistory","filterTags","liteAssets","updateUser","userSmsIndeterminate","userSmsChecked","userEmailIndeterminate","userEmailChecked","updateUserAlerts","assetsReducer","assetsState","controllers","controllersModification","loadingControllersList","selectedControllerList","submittingControllerList","applications","appVersions","selectedController","controllerMaintOptions","info_visible","installationHistory","controllerMaint","columnsFilters","userControllersReducers","userControllersState","versions","tabNumber","controller","filedName","year","month","day","hour","minute","second","hour12","appliedFilters","timespanFrom","timespanTo","nickname","sa","spn","fmi","command","operator","dm1CumminsRecommendations","alertsReducer","alertsState","templatesList","selectedTemplateDetails","templateMaint","modes","templatesReducers","templatesState","templateRecord","signalCollectionMaint","signalCollectionId","signalCollectionName","quotasApplied","signalCollectionType","signalList","signalMaint","j1939s","commandPgns","commandControllers","collectionType","dm1FaultsAdd","listIndex","newRecord","recordFound","dm1FaultsUploadProcessing","dm1Id","dm1FaultsSetFieldValue","fieldName","fieldValue","templateDetailsReducers","templateDetailsState","editMode","orgAccess","assetNotes","notes","pinned","all","userOrgAccess","IsCreate","IsRead","IsUpdate","IsDelete","oprList","oprMaint","operatorOrgs","orgUsers","orgAssets","orgAccessTypes","rfidValue","oprReducers","oprState","operatorIdValue","scheduledList","scheduledMaint","selectedOrgTag","scheduleAddEdit","scheduleId","frequency","subscribers","dayOfMonth","dayOfWeek","timeZone","timeZoneOffset","clientScheduledTime","scheduledTime","reportSchedulesReducers","reportScheduledState","geofencesList","fenceList","fenceListLoaded","rawDataList","geoFenceMaint","fenceName","fenceColor","description","geoCoordinates","mastertags","gatewayIds","changeInGateways","curShape","fenceAssets","gatewaysData","fenceListDrawerVisible","fenceTableList","drawingManager","markerManager","showingGeofences","geofencesReducer","geofencesState","arr","shape","geofenceShape","filterFunc","gateways","latestPositionStatuses","geofence","gatewayName","latest_position_status","setMap","searchValue","searchVal","setOptions","newOptions","serviceTruckList","serviceTruckMaint","serviceTruckListDrawerVisible","serviceTruckMintDrawerVisible","serviceTruckReducer","serviceTruckState","geoTabData","serviceTrucks","geoTab","serviceTruck","isAfter","ServiceTruck","refreshedList","params","VIN","vin","tutorialsReducers","tutorialsState","contracts","contractsModification","loadingAssetsList","selectedContractList","submittingContractList","renewalTool","selectedRenewalList","submittingRenewalList","billableCustomers","servicePlansList","customerBucketDetails","contractMaintOptions","contractsList","contactMaint","contractsReducers","contractsState","servicePlanTmp","servicePlanBalance","servicePlan","total_available_quantity","partNumberBucketEntries","bucketEntry","partNumber","availableQuantity","contract","renewal","some","masterTag","tmp","contract_id","contractId","gateway_id","gatewayID","contract_start_date","contractStartDate","contract_end_date","contractEndDate","old_gateway_status","gatewayStatus","old_sim_status","simStatus","old_iothub_status","iothubStatus","new_gateway_status","new_sim_status","new_iothub_status","iccid","justification","billing_contract_history","billingContractHistory","renewal_contract_history","renewalContractHistory","customerNumber","pts_customer_number","billToName","customer_name","orderNumber","customerPO","orgID","renewal_packages","renewalPackages","controllersReducers","controllersState","applicationsModification","applicationsList","loadingApplicationsList","selectedApplicationList","submittingApplicationList","applicationMaintOptions","applicationMaint","applicationsReducers","applicationsState","application","softwares","softwaresModification","softwaresList","loadingSoftwaresList","selectedSoftwareList","submittingSoftwareList","softwareMaintOptions","devicemodel","softwaretype","softwareMaint","softwaresReducers","softwaresState","software","csus","csuModification","csuList","loadingCsusList","selectedCsuList","submittingCsuList","selectedCsu","csuMaintOptions","csuMaint","discovery","systemstatus","systemhistory","DeviceReducers","DeviceState","csu","calibrationMaint","search","csuReducer","csuState","releasenotes","releasenotesList","releasenotesReducers","releasenotesState","userguide","userguideList","userguideReducer","userguideState","operatorHistoryTableData","oprHistory","taylorOprReducers","questionBankList","qbMaint","questionsReducer","questionState","questionBankName","reportList","reportMaint","danaReportReducer","danaReportState","orgReportList","orgReportMappingList","accessToken","ReportReducer","ReportState","rootReducer","contextReducer","uiPreferences","coordinates","mapDefaultView","dailyDm1Count","assetDmDailyCount","liveData","dashboardUpdatedSignals","SignalID","hasOwnProperty","baseTime","bt","dataPoint","dashboardSignals","bn","signalId","v","time","t","n","supportModeReducer","supportMode","supportModeJson","loginReducer","countriesReducer","dashboardReducer","pinnedNotes","notesList","note","isPinned","allNotes","newNotes","reportReducer","reportAccessData","reportAccessJson","userOrgAccessReducer","userOrgAccessData","permissionsReducer","createBrowserHistory","successResponse","me","setState","formSuccess","formSuccessMessage","formError","formErrorMessage","formCommit","formWarning","formWarningMessage","warningResponse","errorResponse","error","formContext","errorStatus","response","generalError","formErrors","fieldError","field","reference","formRef","setFields","resetFormErrors","getFieldsError","contextGet","callbackSuccessFn","callbackErrorFn","dispatch","Axios","get","responseType","headers","then","selections","catch","contextUpdateGPSCoordinates","contextUpdateMapDefaultView","permissionsGet","maxCommandPermissionValueGet","getQuickStats","quickStats","fleetStatsVisibility","notificationVisibility","updateDm1DailyCount","dailyCountGetFailure","assetDailyDm1Count","updateDm1HeatMap","getFailure","getAssetsWithDMs","getFailureMessage","fleetStatsInitialization","notificationInitialization","notificationsLoading","fleetStatsLoading","enableSignalRData","disableSignalRData","updateSignalRData","resetSignalRData","supportModeInit","callbackFn","supportModeSet","supportModeUnSet","onAssetNotesDrawerToggle","getAssetNotes","getAssetGlobalNotes","addNewNote","noteBody","post","Mode","pinMessage","noteId","pinnedStatus","reportAccessGet","userOrgAccessGet","mapsAssetDrawerClusterOpen","mapsAssetDrawerAssetSearchOpen","mapsAssetDrawerClose","clusterInfoSearch","assetSearchSearch","assetSearchReset","filtersToggle","filtersReset","toggleMarkerToolTip","updateToolTipMarkerDetails","updateToolTipAssetDetails","updateToolTipOverlay","submitAssetDown","callbackFnSuccess","callbackFnFailure","customFieldId","clearDownStatus","assetDownCategory","assetName","getFleetOverview","getPreferedSignals","preference","filterPreferences","isResetEnabled","isTimezoneChanged","assetZoomToFitFilter","setAssetSearchValue","setAssetSearchFilters","setPreSearchAssetsList","setFleetOverviewMap","getQbList","sortOrder","qbId","questionBanks","qbMaintOpen","qbMaintClose","qbSetSearch","qbSetPagination","questionsList","allowEvenForWrongAnswers","entries","device","assetsAssigned","questions","questionBank","qbDelete","callbackFailureFn","questionBankId","delete","getAssetsToAssignQuestionbank","formInit","SuccessAlert","props","showIcon","WarningAlert","listErrors","ErrorAlert","connect","React","createRef","actions","gutter","Item","shouldUpdate","rules","required","placeholder","maxLength","question","onClick","e","RemoveQuestion","currentTarget","icon","MinusOutlined","Option","Select","QuestionBankMaintInfo","initialValues","isOveridePanelDisplay","overrideErrorMessage","onFinish","onFinishSuccess","onFinishFailure","componentUpdate","handleChange","onAllowAlwaysChange","initialData","AddQuestion","getFieldValue","len","resetFields","setFieldsValue","deletedIndex","this","prevProps","assetData","mastertagData","assetTag","setInitialValues","data-id","ref","className","initialValue","labelInValue","showSearch","showArrow","allowClear","serialNumber","margin","orientation","plain","fontSize","marginLeft","PlusOutlined","Component","TabPane","Tabs","QuestionBankMaint","onDrawerClose","closeCollapsed","click","onClose","destroyOnClose","footer","size","float","htmlType","activeKey","Search","Input","QuestionBank","csvData","csvFileName","isOperator","drawerWidth","getQbSuccess","getQbFail","qbMaintOpenDo","onAction","preventDefault","qbDeleteSucess","success","contextUser","isUpdate","isDelete","content","EditOutlined","confirmDeletion","trigger","EllipsisOutlined","onConfirm","DeleteOutlined","onSearch","onSearchChange","target","operator_support","tableColumns","dataIndex","sortDirections","sorter","render","text","createdAt","align","xs","lg","enterButton","rowKey","columns","dataSource","column","order","withRouter","CaretLeftOutlined","goBack","getOprs","operatorId","operators","getOperatorsHistory","operatorsHistory","getOpr","oprMaintOpen","oprMaintClose","oprSetSearch","oprHistorySetSearch","oprSetPagination","operatorOrgUsersGet","administered","getAssets","operatorDelete","OprMaintInfo","accessType","pinValue","isExistingUser","isOverrideRFID","errMsg","onOverrideSubmit","submit","cancelOverride","onAccessTypeChange","handleUserTypeChange","onInputRfidChange","accessCardValue","accessCardId","pin","mac","height","backgroundColor","pattern","optionFilterProp","TaylorOperators","csvLink","getValuesFromPath","getStateFromHistory","getOprSuccess","oprMaintOpenDo","operatorDeleteSucess","confirmStatus","onCancel","UserAddOutlined","UserDeleteOutlined","onExport","oprExportSuccess","link","beforeUpload","file","fileType","primaryKey","operatorsHistoryId","BackNavigation","OperatorsHistory","sortOperatorsHistoryTable","dataSource1","accessDate","ExportOutlined","recordNo","qandaExportSuccess","operatorHistory","answers","ws","XLSX","json_to_sheet","sheet_add_aoa","wb","Sheets","SheetNames","excelBuffer","bookType","Blob","FileSaver","closeDrawer","setName","setColor","setDescription","setAssetsList","getGeoFences","geofences","setChangeInGateways","setFenceListLoaded","setShapeGateways","resetChangeGateways","removeShapeFromMap","updateShape","updateShapeOnMap","addShapeSubmit","removeShape","removeShapesFromMap","addShapesToMap","openFenceListDrawer","closeFenceListDrawer","changeOnSearch","openFenceAssetsDrawer","closeFenceAssetsDrawer","setFenceMastertags","openDrawer","setCurShape","setDrawingManager","setMarkerManager","getAllAssetsList","addShape","clearGeoFencesState","orgSelectorOpen","orgSelectorClose","orgSelectorSetView","orgSelectorUserOrgSelectionGet","orgSelectorHeaderTagRemove","orgSelectorHeaderSetDisplay","orgSelectorRemoveSelections","orgSelectorIncludeSuborgs","put","orgSelectorListSetPagination","orgSelectorListSetCurentPage","orgSelectorListSetOrgTree","orgSelectorListSetSearch","orgSelectorListSetDisplay","orgSelectorListOrgGet","org","orgSelectorListOrgsGet","includeTree","orgSelectorListMaint","includeSubOrgs","orgSelectorTreeExpand","orgSelectorTreeCheck","orgSelectorTreeSelection","orgSelectorTreeOrgsGet","orgSelectorTreeMaint","OrgSelectorHeader","onTagCloseAll","setDisplay","onTagClose","onTagCloseSuccess","onSuborgsChange","count","marginBottom","checkedChildren","unCheckedChildren","extra","closable","OrgSelectorList","orgSelectorList","drillIn","drillInSuccess","onCheckChange","onCheckChangeSuccess","onCheckChangeFailure","statsGetSuccess","statsGetFailure","supportModeSetSuccess","viewChange","logoDisplay","alt","subOrgCount","issupportmode","RightOutlined","md","Group","Button","UnorderedListOutlined","ApartmentOutlined","separator","rootActions","orgSelectorActions","DirectoryTree","Tree","OrgSelectorTree","arrayDiff","arr1","arr2","k","onSelect","selectedKeys","onExpand","orgSelectorTree","getParentKey","node","loadingIndicator","self","getExpandedKeys","selection","orgFound","find","pathArray","pathId","pop","defaultSelection","checkable","onCheck","checkStrictly","getTreeData","beforeStr","substr","afterStr","string","OrgSelector","findOrgNameById","supportmode","suborgs","sub_orgs","iscreate","isread","isupdate","issuborgsread","SwapOutlined","geofenceActions","usersSetPagination","usersSetSearch","userMaintRefreshInstance","getUser","getUsers","sorterAndFilter","administeredOrgsGet","userStatus","usersListRefreshOnUpdate","userMaintOpen","userMaintClose","userMaintTabChange","userMaintTabsEnable","roleMaintOpen","roleMaintClose","getOrgRoles","roleItem","getRolePermissions","setOktaLastLogin","getOrgUserRoles","userRole","userRoleData","dat","ispermission","otherRolePermission","Number","userRolePermission","getEmailTemplate","emailCategory","emailAddress","sendEmail","userEmailId","emailSubject","emailBody","userAvatarMaint","callbackFileSuccess","callbackFileFailure","formData","avatar","uploadId","usersCopySearchUsers","textExtra","orgHomeName","usersCopyMaint","copyFromUserId","copyToUserId","copyOrganizations","copySubscriptions","getCountries","sendUserCreationNotification","propagateError","responseObject","orgIdHome","oktaTempPassword","emailTemplate","emailTemplateBody","orgLogo","orgNameAndLoginUrl","tempPassword","subject","userName","organdurl","CDN_URL","replacedBody","userSubscriptionsSetPagination","userSubscriptionsSetSearch","userSubscriptionsGet","userSubscriptions","userSubscriptionsMaint","userOrgsSetPagination","userOrgsGet","role","allData","userOrgsRole","userOrgsRemove","userOrgsMaint","applyAll","activitySubscriptionsGet","activitySubscriptions","activitySubscriptionsMaint","UserHomeOrg","onOrgIdChange","orgHomeRole","componentUpdateDo","isRoleAdmin","isSameUser","isEnabled","rolerecord","Paragraph","Typography","UserMaintInfo","recordOld","recordNew","prevState","phoneNumberIsoCode2","superUser","superUserLabel","placement","QuestionCircleOutlined","tempPasswordLabel","valuePropName","objectAdmin","copyable","Panel","Collapse","UserMaintOrgs","addOrgs","addOrgsSuccess","resetOrgs","isAdminAutoChange","adminAutoChange","adminAutoChangeSuccess","roleChange","roleChangeSuccess","removeOrg","removeOrgSuccess","parentOrgPath","orgIdHomePath","header","paddingLeft","tablecolumns","city","zipCode","country","recordrole","role_name","isHomeOrg","HomeOutlined","contextUserIsOrgAdmin","contextUserCanSetOrgUser","CloseCircleOutlined","bordered","defaultActiveKey","layout","marginTop","UserMaintSubscriptions","closeExpandedRows","isLiteAsset","minCollectionFreq","returnAlertSmsBySeverity","returnAlertEmailBySeverity","returnSeverity","indeterminate","PhoneOutlined","MailOutlined","marginRight","ActivityMaintSubscription","expandedKey","onActivitySuccess","expandKeys","expanded","handleExpand","expandable","expandedRowKeys","UserMaint","onTabChange","isdelete","acceptTermsAndConditions","templateId","templateOrgId","Terms","acceptButtonDisabled","acceptCheckboxDisabled","setModal","mask","addEventListener","trackScrolling","cleanModal","removeEventListener","accept","acceptTermsAndConditionsSuccess","reject","loginPage","isBottom","acceptCheckbox","bodyHeight","scrollHeight","offsetHeight","scrollTop","wrapClassName","dangerouslySetInnerHTML","__html","_extends","arguments","source","prototype","call","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","createElement","fillRule","clipRule","d","_ref","svgRef","y","viewBox","enableBackground","xmlSpace","ForwardRef","forwardRef","authConfig","redirectUri","origin","withOktaAuth","authClient","OktaAuth","useState","showExpiredModal","setExipredModal","showNotExpiredModal","setNotExipredModal","seconds","setSecs","isLastMinute","setLastMinute","minutes","setMin","setLoad","events","timer","cantimeoutRead","startTimer","clearInterval","setInterval","expirationTime","expiresAt","now","getTime","diffMin","diffSecs","sign","slice","renewToken","getWithoutPrompt","tokens","tokenManager","setTokens","setOktaLastLoginSuccess","setOktaLastLoginFailure","resetSessionProps","deleteRefreshFlags","useEffect","subscribeEvents","unsubscribeEvents","setRefreshFlags","event","resetTimer","eventName","eventType","removeItem","authService","logout","Header","Layout","TopHeader","orgSelectionVisible","myProfile","myProfileShow","orgSelectorRemoveSelectionsSuccess","orgSelectorIncludeSuborgsSuccess","supportModeUnSetSuccess","bind","listen","contextInitialized","showBanner","userMenu","UserOutlined","Divider","LogoutOutlined","orgSelectorMenu","AppstoreAddOutlined","FormOutlined","flex","SettingOutlined","backgroundImage","expiredGateways","expiringSoon","BellOutlined","Icon","component","filterRemove","fontWeight","textAlign","WarningOutlined","whiteSpace","overflowWrap","textDecoration","rel","DownOutlined","usersActions","fill","verticalAlign","overflow","stroke","strokeWidth","strokeLinecap","strokeLinejoin","_ref13","_ref14","_ref15","_ref16","_ref17","transform","preserveAspectRatio","cx","cy","fontFamily","x1","y1","x2","y2","Sider","SubMenu","Menu","LeftSider","collapsed","onCollapse","goToReport","reportURL","win","open","focus","finalPathname","contractsUsersList","systemSettings","sysSetting","settingName","controllersUsersList","aiotUsersList","applicationsUsersList","contractsOrgsList","applicationsOrgsList","aiotOrgsList","controllersOrgsList","iqanopenOrgsList","iqanopenUsersList","orgReportAccess","isAdmin","reportPermissions","assetPermissions","userPermissions","rolePermissions","templatePermissions","orgPermissions","alertPermissions","oprPermission","reportAccess","supportModeString","showHelp","left","breakpoint","collapsible","MenuUnfoldOutlined","MenuFoldOutlined","to","theme","MapIcon","BellIcon","Komatsu","TractorIcon","replaceAll","ControllerIcon","OrganizationIcon","UsersIcon","CloudServerOutlined","BarChartOutlined","FundProjectionScreenOutlined","FieldTimeOutlined","FundOutlined","OperatorIcon","SupportIcon","AdminSettingsIcon","AddDeviceIcon","AddSoftwareIcon","UpdateSoftwareIcon","IdcardOutlined","ContractsIcon","AppsIcon","AIOTIcon","SnippetsOutlined","PlayCircleOutlined","textIndent","lineHeight","textTransform","blockProgression","InkscapeFontSpecification","baseProfile","customIcon","Svg","OnlineIcon","OnlineSvg","OfflineIcon","OfflineSvg","CriticalIcon","CriticalSvg","WarningIcon","WarningSvg","InfoIcon","InfoSvg","DM1Icon","EngineSvg","AssetDown","AssetDownSvg","FilterButton","opacity","FiltersBar","toggleFilter","f","toggleFilters","justify","filterStatus","acceptAll","onlineFilter","connectionStatus","offlineFilter","filterAssets","connFilter","connectionFilter","statFilter","conditions","statusFilter","useBreakpoint","TextArea","Grid","AssetName","assetDrawerClose","goToAsset","AssetStatusBody","AssetStatus","alertType","goToAlerts","AssetList","deviceSize","pageCurrent","setPageCurrent","setSearchText","setFilters","componentMounted","useRef","ZoomInOutlined","focusAsset","xl","xxl","onlineIcon","offlineIcon","criticalIcon","warningIcon","infoIcon","dm1Icon","image","Empty","PRESENTED_IMAGE_SIMPLE","openServiceTruckDrawer","closeServiceTruckDrawer","openServiceTruckMaintDrawer","closeServiceTruckMaintDrawer","setServiceTruckMap","getServiceTrucks","updateServiceTrucksDetails","getState","operatorName","container","setContainer","typingTimeout","setTypingTimeout","setLoading","isMounted","offsetTop","assetCount","clearTimeout","assetsAll","SyncOutlined","spin","AssetSearch","allAssets","setStartPage","globalSearch","defaultValue","suffix","setZoom","getZoom","bounds","LatLngBounds","extend","LatLng","fitBounds","maximizeIcon","cursor","memo","AssetDrawer","onZoom","CloseOutlined","FilterSwitch","toggle","filterData","MarkerTooltip","geotabAssets","getPin","CriticalPin","Dm1Pin","WarningPin","InfoPin","OnlinePin","assetCustomFields","AssetDownPin","OfflinePin","Status","COLOR_PROPS","normal","COLORS","SIZE_PROPS","small","outer","inner","medium","large","SIZES","N_SIZES","clusterIcon","imageSize","encoded","btoa","encode","textLineHeight","textSize","backgroundPosition","computeStyleIndex","index1","index2","DEFAULT_CLUSTER_OPTIONS","imagePath","styles","generateStyles","minimumClusterSize","maxZoom","zoomOnClick","averageCenter","setIcon","MarkerManager","options","geofenceOptions","toolTipOptions","_assets","_infowindow","_markers","Map","_clusterer","_clusterListener","_bounds","_options","_serviceTruckMarkers","_serviceTrucks","_toolTipOptions","clusterMarkers","setupClusterer","tooltipVisibility","tooltipHandler","ReactDOMServer","renderToString","close","InfoWindow","setContent","tooltipAnchors","onclick","setAttribute","markers","newMap","clearClusterer","updateMarker","existing","val","setPosition","set","addMarker","Marker","addListener","tooltipManager","eventsOnMap","markerArray","from","removeMarkers","deleteMarkers","tooltipServiceTruck","destroy","opts","MarkerClusterer","onClusterClick","getBounds","center","getCenter","getMap","getMarkerIds","getMarkers","setCenter","setClusterCalculator","setCalculator","getTitle","getStyleIndex","markersLength","pins","getIcon","getSizeIndex","loc","panToBounds","idLookup","store","m","_scripts","script","scriptTag","appendChild","Promise","resolve","GOOGLE_URL","useGoogleMapsLib","lib","setLib","scriptCache","loadScript","useDomNode","setNode","useCallback","compare","array1","array2","newArray1","newArray2","every","DEFAULT_POLYOPTIONS","editable","draggable","getGeofenceGateways","latest_position_status_array","geofenceGateways","updated_at","drawShapes","geoFences","shapesArr","circle","getCircle","rect","getRectangle","polygon","getPolygon","addListenerToUpdateGeoCoords","updateGeoCoords","jsonCircle","clearListeners","jsonRectangle","clearInstanceListeners","getPath","jsonPolygon","getMinMax","minLat","minLng","maxLat","maxLng","getSouthWest","getNorthEast","radius","getRadius","north","south","east","west","points","getLength","getAt","geoFencesData","circleData","Circle","rectData","Rectangle","polygonData","Polygon","paths","DrawingManager","_drawerMgr","_geofences","_geofenceOptions","drawOverlays","initilizeDrawingOnMap","initilizeGeofences","showHide","drawingControl","removeShapes","geofencesArrangeEnabled","getGeofencesShapes","addClickListener","infoWindowDetails","pixelOffset","Size","latLng","canGeofencingEdit","drawing","drawingControlOptions","drawingModes","OverlayType","RECTANGLE","POLYGON","rectangleOptions","circleOptions","polygonOptions","setUpOverlayCompleteListner","newShape","drawingMgr","MARKER","setDrawingMode","setUpOverlayClickListner","MapContext","createContext","DEFAULT_CENTER","DEFAULT_MAP_OPTIONS","zoom","mapTypeControl","mapTypeControlOptions","MapTypeControlStyle","HORIZONTAL_BAR","mapTypeIds","ControlPosition","BOTTOM_LEFT","streetViewControl","zoomControl","zoomControlOptions","RIGHT_BOTTOM","fullscreenControl","fullscreenControlOptions","restriction","latLngBounds","minZoom","rotateControl","DEFAULT_MAP_OPTIONS_FOR_GEOFENCING","GoogleMap","glib","MapInternals","mapNode","setMapNode","hasRenderedMarkers","setMarkersRendered","setDisplayMarkers","plylineState","setPlyLineState","mapOptions","serviceTruckMarkers","serviceTruckOptions","fleetOverviewOptions","mapActionsRef","updateMarkers","polyline","polyLines","oldmarkers","polyLinePaths","Polyline","strokeOpacity","geodesic","icons","FORWARD_OPEN_ARROW","repeat","p","oldMarkers","constructPoyline","mapMarkerOptions","lastValue","markerGroup","lastGrouping","skip","enabledSignalId","SignalMapOptions","EnableSignal","SignalId","ShowGPSPath","polyLinePath","ShowGPSMarker","constructPoylineWithEvents","eventsMapMarkerOptions","updateGeofences","updateServiceTruckMarkers","MapContextInterface","Provider","localeCompare","LoginOutlined","padding","IssuesCloseOutlined","zIndex","colorPickerCover","top","right","bottom","ShapeInfo","isOpen","geoFenceColor","option","onDeSelect","sendGeofenceGateway","geofenceId","onSubmitClick","canGeofencingCreate","gatewaysCount","liteGatewaysCount","onDelete","onColorSelect","hex","geofencePermissions","geofencing","canGeofencingDelete","danger","readOnly","onFocus","background","autoSize","minRows","maxRows","filterOption","input","onDeselect","getBoundsForPolygon","southWest","northEast","onFenceNameClicked","onClickListIcon","GeofenceTheme","setServiceTrucks","serviceTrucksProp","focusOnServiceTruck","vehicleName","filteredServiceTrucksList","defaultPageSize","simple","showSorterTooltip","setFormError","setFormErrorMessage","setFormSuccess","setFormSuccessMessage","shapeRendering","textRendering","imageRendering","rx","ry","assetsIcons","aeroplane","Aircraft","ambulance","Ambulance1","AmbulanceCar","ATV","bicycle","Boat","bulldozerWheels","bus","bus1","Bus2","Bus3","CableCar","CabrioletCar","camper","car_1","car_2","car_3","car_4","car","CargoShip","CargoShip1","CoupeCar","crane","Crane1","CrossoverCar","deliveryTruck","DoubleBus","Escavator","cloud","getAssetIcon","iconName","GeotabAssetInfo","GeotabAsset","substring","distance","tooltipSubmenu","iconSelection","reportAssetDown","wrapperRef","inputRef","moved","handleClickOutside","contains","useOutsideClick","assetDetails","setAssetDetails","pinnedSingals","setPinnedSignals","showSubMenu","setShowSubMenu","setSideMenuHeight","Form","useForm","showSubMenuVisibilty","menuName","NewSubmenuState","getElementsByClassName","clientHeight","getPrefereSignalsSuccess","tmpAsset","tzlookup","zone","tz","format","isSafeInteger","draw","additional_info","field_value","category","additional_properties","AssetDownCategory","autoComplete","onMouseDown","nativeEvent","stopPropagation","stopImmediatePropagation","rows","reportername","locale_date_str","FindAssetTimeZone","paddingTop","borderColor","closeGeoTabAssets","assetLatLng","geotabAsset","geotabAssetLatLng","computeDistanceBetween","newEntry","sort","getTopThreeGeoTabAssets","paddingBottom","OverlayViewContainer","OverlayView","el","Consumer","createOverlayElement","onAdd","getPanes","floatPane","onRemove","parentElement","removeChild","divPosition","getProjection","fromLatLngToDivPixel","divWidth","clientWidth","divHeight","ReactDOM","createPortal","permissionsset","orgPermissionsList","permissionName","pollFunc","msInterval","setMapActions","pollingEnabled","setPollingEnabled","showServiceTrucks","setShowServiceTrucks","setserviceTruckMarkers","isShowingGeofences","setShowingGeofenes","isGeofencesArrangeEnabled","setGeofenceArrangement","isShowingGeofencesMarkers","setShowingGeofenesMarkers","canGeofencingRead","orgLevelPermissions","hasGeoTabAccess","loadFleetOverview","loadFleetOverviewSuccess","assetToMarker","tooltipGenerator","markerTooltipFromAsset","direction","speed","dateTime","markerTooltipFromGeotabAsset","cancelPolling","innerPoll","loadFleetOverviewCallback","serviceTruckToMarker","ServiceTruckPin","intervalId","zoomToFixGeofences","minMax","getPolygonMinMax","getBoundForInitialZoom","showHideContols","mapTypeId","GeofenceMaint","geofenceIcon","setMapTypeId","moveGeofenceActive","moveGeofence","markerActive","markerIcon","serviceTruckActive","zoomToFixServiceTrucks","FilterOutlined","ghost","KomatsuIconWhite","KomatsuIconBlack","TractorIconWhite","TractorIconBlack","linkArr","tooltipLink","constructAssetData","apiResponse","datapoints","widgets","rawRules","rulesList","flatMap","rule","Value","CriticalHigh","WarningHigh","InfoHigh","InfoLow","WarningLow","CriticalLow","criticalHigh","warningHigh","infoHigh","infoLow","warningLow","criticalLow","template","signalCollections","datapoint","unit","DATE_FORMAT","signalLabel","signal","amCharts","openBracket","closeBracket","signalName","TOOLTIP_FORMAT","formatDate","dateString","idx","inputSignalMapper","mapFunc","signalIds","signalData","signalMeta","addDateAndTime","dateVal","timeVal","h","toDate","getHours","getMinutes","getSeconds","ms","getUnixDate","valueOf","constructRows","dataSet","responseDataSet","eventsArrays","Set","cur","next","constrcuctSignalMap","constructUrl","datapointId","filterConfig","startDate","unixDate","startTime","endDate","endTime","addUrlParams","loadSignalsData","promiseArray","csvExportApi","Template","sc","computeLayout","w","col","row","sizeX","sizeY","reducer","updateLayout","widgetState","wg","l","deleteWidget","newWidget","widget","rightYAxisSignals","addWidget","updateWidget","updateWidgetFilter","clearWidgetFilter","LineChart","series","rightAxisSeries","_chart","addSeries","dataSeries","LineSeries","dataFields","valueY","dateX","amCore","tooltipText","addRightAxisSeries","rightYAxis","series2","yAxis","chart","XYChart","xAxes","DateAxis","cursorTooltipEnabled","yAxes","ValueAxis","axisRange","max","XYCursor","lineY","maxTooltipDistance","legend","Legend","itemContainers","paddingRight","dateFormatter","dateFormat","numberFormatter","numberFormat","enableRightYAxis","rightYAxisRange","renderer","opposite","dispose","createSignalSeries","meta","Widget","chartRef","rightYAxisData","useLayoutEffect","errorCode","Event","_listeners","listener","Symbol","SectionTitle","Container","validationMessages","types","number","TypeSelectForm","onTypeChange","WIDGET_DETAILS","wd","EditFormContainer","widgetType","setWidgetType","submitTrigger","subscribe","validateMessages","typ","BarChart","BooleanWidget","GaugeWidget","TextWidget","TrackerWidget","LocationWidget","ClusterBarWidget","getEditForm","onDualChange","enabledualaxis","WidgetEditDrawer","submitter","cfg","SelectorList","propName","useMemo","triggerChange","newValues","changeValue","updatedValue","newVals","filteredOptions","opt","maxReached","maxSelected","Infinity","valueLabel","MinusCircleOutlined","WidgetTitleFormField","whitespace","SignalSelectorList","selectable","validator","WidgetEditForm","RightAxisSignals","axisRangePath","end","EditForm","sanitizeInputs","flexWrap","lineX","xAxis","CategoryAxis","ColumnSeries","categoryX","pointerOrientation","createSignals","BarGraph","Dot","borderRadius","renderItem","Meta","arrowPointAtCenter","DISPLAY_COLORS","createRange","axis","axisRanges","create","endValue","axisFill","grid","Bullet","toolTipText","_bullet","bullet","StepLineSeries","categoryY","valueX","startLocation","endLocation","tip","getFillFromObject","Cursor","_cursor","firstNumber","inp","TrackerChart","labels","baseGrid","lowerBound","upperBound","createRanges","TrackerComponent","datapts","metadata","useTrackerProps","TrackerSignalSelect","showLabels","suffixIcon","TrackerSignalSelectorList","selectedSignalIds","newValue","update","initialVals","currentOpt","populateForm","fields","signalFields","validSignals","Gauge","limit","percent","RadarChart","maxValue","startAngle","endAngle","innerRadius","strictMinMax","minGridDistance","fillSeries","RadarColumnSeries","clustered","getFor","valueSeries","createChild","valueString","horizontalCenter","verticalCenter","gaugeRef","gauge","GaugeChart","Tooltip","formatTimestamp","toolTipForAsset","MapPin","LocationSignalSelectorList","ClusterBarChart","colors","step","cellStartLocation","cellEndLocation","useDefaultMarker","DETAILS","WidgetHeader","onEdit","isLoading","LoadingOutlined","ReloadOutlined","onRefresh","onFilter","isCreate","DownloadOutlined","WidgetContainer","setData","setRightAxisData","refreshTime","setRefreshTime","setError","setSignalArray","filterErrors","responseFilter","Error","formatData","formatRightYAxisData","loadData","isFormatRightYAxisData","datapointArray","si","sg","uniqsignalCollectionId","pos","Api","resp","updateSignalArrayState","bodyStyle","widgetPadding","common","createWidget","constructSignalArray","sv","useAssetStatus","assetStatus","setAssetStatus","deviceConnectedText","getConnectionStatus","Title","templateName","isRead","alertInfoCount","alertDm1Count","alertWarningCount","alertCriticalCount","isOprRead","isOprUpdate","isassetUpdate","istemplatesRead","goToDetails","goToOperators","level","FileTextOutlined","BarcodeOutlined","datapointValues","FilterForm","setDatapoint","subtract","onDateChange","timeFieldName","compact","noStyle","dependencies","startDateTime","unixStartDate","unixEndDateTime","asDays","validateForms","inputReadOnly","FilterFormContainer","filterProps","WidgetFilterDrawer","ExportForm","exportValidateForms","ExportFormContainer","WidgetExportDrawer","lastTimeStamp","lastDatapoint","utc","nextDayTimeStamp","millisecond","exportCsv","cnfg","pos1","promises","fetchDataSlice","stopDate","datapointName","MAX_DATAPOINT_LIMIT","MAX_API_LIMIT","eventData","startDate1","clone","stopDate1","formatResponse","responseData","datapointRecords","getDataFromApi","remainingRecordToFetch","conString","currDayEndDateTime","currDayEndEpochTime","prepareWidgetEvents","sortedExportEvents","newSignalCollections","elem1","elem2","toLocaleLowerCase","sortSignalCollection","newResponse","sortResponse","headerArray","eventArray","curElemenet","singleEventArray","eventDataArray","arrayOfObj","eventsArray","cum","uom","fetchSignalDetails","headerKeys","cum1","createHeader","eventHeader","PageHeaderExtra","onLayoutViewChange","DEFAULT_FILTER_STATE","DEFAULT_EXPORT_STATE","DEFAULT_EDIT_STATE","GRID_SETTINGS","rowHeight","compactType","containerPadding","isDraggable","isResizable","PageContent","breakpoints","useReducer","widgs","MIN_SAFE_INTEGER","loaded","initState","permissionResult","editState","setEditState","gridResize","setGridResize","filterState","setFilterState","exportState","setExportState","dataForDownload","setDataForDownload","bDownloadReady","setDownloadReady","exportHeader","setexportHeader","exportFileName","setExportFileName","useExport","saveLayout","saveLayoutSuccess","bindActions","createNewWidget","widgetColumns","uuid","saveWidgets","widgetId","signalStructure","widgetDetails","constructLayout","editWidgetStructureForDb","newLayout","sortedLayout","lastElementY","lastRowcumulativeW","newElementY","newElementX","layoutAlgorithm","addWidgetStructureForDb","deleteWidgt","filterWidget","wid","filerWidget","exportWidget","csvExportDetails","exprtWidget","NewWidgetButton","pageHeaderExtraProps","cols","onLayoutChange","editWidget","filename","ErrorPage","Dashboard","useParams","setInitialData","errorOccurred","setErrorOccurred","Dashboards","c2dMsgs","c2dWhitelist","assetDownDesc","orgCmdPgnSpns","pgnSpns","pgn","dashboards","dashboard","c2dMessages","userPreference","temperatureFUnitsArray","temperatureCUnitsArray","String","ruleName","findTimezone","timezone","timezoneDetails","isGpsSignalAvailable","guess","loadC2DMessageData","c2dMsg","msgData","messageType","messageTime","loadSignalsDataTimescale","interval","reading","signalsNCollectionId","customFilters","requiredSignals","signalDetails","invokeCommand","commandId","commandInfo","testMode","desiredPayload","getCommandStatus","getCommandResponseSignalIds","prepareWidgetGPSEvents","checkStr","details","notPresentKeys","tempUnits","signalunit","temp","temperature","round","dataToDownload","formattedData","sortedArray","sortObj","sortObjByKey","flat","tmpRow","dateGroup","tmpRowKey","BarChartClass","parent","chartContainer","togglable","tooltipDetails","adapter","dataItem","on","ev","legenddata","each","categories","barChartData","FILTERED_WIDGETS","noOfSignals","parentOrg","orgPathId","sm","barWidget","lineWidget","clusterWidget","locationWidget","gaugeWidget","gpsEventWidget","textWidget","booleanWidget","trackerWidget","commandWidget","chatHistoryWidget","informationWidget","ChatHistory","CommandWidget","CommandWidgetNew","EventsLocationWidget","InformationWidget","tooltipMsg","ColorSelectorList","tempColor","setIsOpen","dcolor","setDcolor","onTemp","offTemp","onTempColor","OffTempColor","isOnOpen","setIsOnOpen","onColor","setOnColor","isOffOpen","setIsOffOpen","Offcolor","setOffcolor","isRules","sig","onLabel","offLabel","labelText","colorSelectable","isColor","BooleanSelectorList","offColor","chatSignals","formatD2CText","msg","charAt","getAllMessages","d2c","D2CMessages","getD2CMessages","c2d","widgetSignalId","widgetSignals","aligns","getMonth","getDate","hr","mi","getFullYear","formatShortDateTime","userPreferences","maxWidth","valueLabels","contentAlign","clusterData","commandSignals","dashboardId","assetPreferences","loadWidgetsOnTabClick","addDashboard","bgimageurl","isdefaultDashboard","deleteDashboard","activateDashboard","updateDashboardTitle","commandStatus","responseInfo","getWidgets","getSignalObject","wtype","DashboardObj","dashboardArray","isNewDashboard","newWidgets","newDashboards","activeDashboard","activeDashboardId","remainingDashboards","remoteControl","dataset","remoteData","UpdateAssetPreferences","UpdateGPSCoordinates","UpdateC2DMessages","intialReportedData","reportedValue","setReportedValue","disptachMethods","fakeTest","setFakeTest","msgsList","textAreaValue","setTextAreaValue","selectedOption","setSelectedOption","signaldata","respSignals","responseSignalId","responseSignalName","reportedPayload","reportedTime","respValue","requestId","lastFrameStartPos","delimiterPos","formatNumber","respTimeUtc","respTimeLocal","spinning","getCommandWidgetSignals","commandChatSignals","c2dResp","refreshChange","refreshState","err1","minWidth","D2CTextSignalValues","object","widgetSignalsD2C","setWidgetSignalsD2C","setWidgetSignals","messagescount","setMessagesCount","refresh","setRefresh","allMessages","allC2DMessages","refreshUpdate","alignsmessage","alignsparent","ss","gpsTimestamp","eventTimestamp","signalValue","toolTipForAssetEvents","mapOptionsBar","MozUserSelect","khtmlUserSelect","WebkitUserSelect","msUserSelect","userSelect","mapOptionsOpen","boxShadow","WebkitTransition","MozTransition","msTransition","OTransition","transition","mapOptionsClose","maxHeight","mapStatsBar","writingMode","mapStatsOpen","borderTopRightRadius","mapStatsClose","markerOptions","setMarkerOptions","showMapOptions","setShowMapOptions","showMapStats","setShowMapStats","filterMapOption","ShowSignalMarker","foundIndex","CaretUpFilled","CaretDownFilled","hoverable","ShowStartEndPoint","HideClusteredPoints","border","toggleMapStats","CaretRightFilled","CaretLeftFilled","showEventsStats","GPSMarkers","point3","distanceInMeters","distanceInMetersAfterThreePoints","optimized","closestTimestamp","locKey","EventsMarkers","EventsMarkersFlattened","markersFinal","scs","initialMapOptions","sd","setEventsMapMarkerOptions","setMarkers","OptGroup","EventsLocationSignalSelectorList","existingSignals","selectedGPSSignalsEdit","GPSSelectableSignals","collectionName","selectedGPSSignals","setSelectedGPSSignals","o","preSelectedSignals","setPreSelectedSignals","selectedGPSSignal","selectNumber","gpsSignalArray","preselectedSignals","ps","isRulesAvailable","criticalMax","criticalMin","warnMax","warnMin","lastIndexOf","tooltipFormat","autoSetClassName","am4charts","hiddenState","resizable","line","ticks","minLabelPosition","axis2","range1","range2","range3","range4","range5","range01","range02","radarContainer","isMeasured","test","countDecimals","label1","hand","hands","startWidth","titles","informationValue","Text","resize","timescaleAPIZooming","widgetFilterSetting","_timescaleAPIZooming","_widgetFilterSetting","tooltip_text","granularity","aggregate","bullets","CircleBullet","addDayNightXAxisShades","getIndex","setHours","setDate","invalidateData","warn","xRange","xAxisTmp","StartTime","positionToDate","toAxisPosition","start","EndTime","leftAxis","rightAxis","latitudeValues","longitudeValues","lngData","RangePicker","DatePicker","WidgetHeaderNew","settingSpecs","isNotMapWidget","isBatterySignal","ShowFilters","zoomedTime","timeRangeValue","setTimeRangeValue","exportData","setExportData","setGranularity","granularityDisplay","setGranularityDisplay","aggregation","setAggregation","setCustomFilters","rangeSelectorVisible","setRangeSelectorVisible","rangeDisplayName","setRangeDisplayName","customDateRange","setCustomDateRange","setAvailableGranularity","sysTimescaleSetting","originalTimescaleData","setOriginalTimescaleData","timescaleTimezone","setTimescaleTimezone","widgetsSignalsData","setWidgetsSignalsData","filterSignals","filterUnits","collections","include","initiallyLoaded","refreshChart","refreshData","assignFilterDisplayAndReloadData","setInitiallyLoaded","assetTimezone","convertedData","convertTimestamp","findAggAbbrev","onVisibleChange","convertIfTemperatureUnits","signalUnit","isNumber","temperatureUnit","widgetsSignals","loadingType","rangeTypeParam","aggType","respData","indexMappingOfAggRespArray","SignalDetail","dataValue","jsonValue","isoDateTimeString","isNaN","toISOString","timestampDate","comparisonDate","parseFloat","dataSetRightAxis","dataSetToWorkbook","resDataSet","uniqueSignalCollectionIds","book_new","collectionDetails","currentTimezone","timezoneAbbr","CollectionDetail","dataToPush","signalDetail","padStart","hours","milliseconds","getMilliseconds","formatDateWithMilliseconds","book_append_sheet","reloadData","customFiltersTmp","orgPath","isYTIOrgAsset","signalInfo","uniqueSignalCollectionId","uniqueData","removeDuplicatesIfAny","fileName","downloadExcel","finally","DataSearchRangeInput","timeRangeTextInput","aggregationInput","granularityInput","isNotMapWidgetInput","GranularityInput","resultValues","GranularityInit","timeRange","granularityTmp","customGranularity","shouldQuery","granularityBaseOnDate","getTimescaleFilterText","diffInHours","filterSetting","passWidgetFiltersToChart","previousData","aggregationString","onChangeTimeRange","startOf","endOf","onChangeExport","showTime","disabledDate","isBefore","ranges","borderTop","overlayStyle","textOverflow","cancel","setExportHeader","useExportGPSEvents","includeFilterToggle","setFilteredTransients","isFilteredTransients","uFEFF","setNewWidgetHeader","newWidgetHeader","mouseEnterDelay","zoomedStartEndTime","setZoomedStartEndTime","setWidgetFilterSetting","originalWidgetData","setOriginalWidgetData","setTimezone","defaultView","refreshNewWidgetData","setRefreshNewWidgetData","filterTransients","setFilterTransients","originalDataValue","setOriginalDataValue","autoRefresh","C2DMessageCommandArray","c2dTextCommand","filterSignalData","resData","signalCollectionID","sunits","windowFilter","transientIndices","ceil","N","upper","lower","windowLowerBound","windowUpperBound","leftWindow","rightWindow","abs","median","mid","nums","calcMedianWindow","scalingFactor","calcMedian","newData","tempData","eIndex","filteredSignalData","has","cardHeaderShow","setCardHeaderShow","mouseHoverNull","starZoomTime","endZoomTime","orgCmdPgnSpn","onMouseEnter","onMouseLeave","sid","rightYAxisSigCollectionId","rightYAxisSignalIds","isRightYAxis","getRightYAxisSignals","allowed30DaysExport","geo_local_date_str","local","isAssetUpdate","isTemplatesRead","resetTimestamp","resetlocationLatitude","resetlocationLongitude","getTimezone","long","Reset","signalRDataEnabled","refreshWidgets","dot","assetCallBackFnSuccess","millSecExists","update_interval","templateContainsMSIntervals","defaultChecked","DashboardTitleText","dashboadId","onTitleUpdate","permissionSet","editTitle","setEditTitle","newtitle","setNewTitle","minHeight","SaveOutlined","saveTitle","UndoOutlined","undoTitle","onEditClick","DashboardClosing","onDashboardDelete","showPopCinfirm","setShowPopConfirm","updateAssetPreferences","assetsPermissionResult","templatesPermissionResult","oprPermissionResult","setAutoRefresh","setIsResizable","dashboardbgImageUrl","setdashboardbgImageUrl","setIsNewDashboard","bgImageUrlProp","isNewDashboardProp","enableNewDashboardStyles","isCommand","cfgCommandSignalsLength","headerData","gpsSignalColId","HeaderExtra","dashboardBgStyles","backgroundRepeat","backgroundSize","handleCustomFileUpload","onSuccess","onError","onProgress","FormData","append","uploadDashboardBgImage","handleDeleteFileUpload","preventCollision","transformScale","showUploadList","isJPG","isLt2M","customRequest","UploadOutlined","DashboardExtra","onPermissionClick","DashboardRolePermissions","onCheckedChange","permissionType","dashboardPermissions","onRoleChange","datasource","saveSuccess","View","PureComponent","PermissionDrawer","savePermissions","formatDatasource","dashboardTitle","permissionArray","formatPermissions","givenPermission","allowedPermission","constructPermissions","newNote","setNewNote","messagesEndRef","getNotesError","resMessage","addNoteSuccess","addNoteError","messageId","currentPinStatus","pinStatus","pinNoteSuccess","pinNoteError","onTypingNotes","accordion","globalNote","createdBy","pinnedNote","myMessage","StarFilled","signalsList","defaultDashboardInitialized","userAssetPreferences","setUserPreferences","initWidget","gpsCollectionId","timezoneCheckedValue","temperatureCheckedValue","latlong","connection","setConnection","setDashboardPermissions","setDatasource","toggleDrawer","setToggleDrawer","setOrgRoles","setSaveSuccess","updatePreferences","setUpdatePreferences","setTimezoneChanged","setgatewayId","setbgImageUrlVar","setisNewDashboard","CommonHelper","asset_dashboard","userPreferenceMethods","contextDispatch","useDispatch","getGPSLatLong","onTabClick","tabId","respTab","DashboardApi","nextDashboardName","filteredArray","char","NaN","permissionCallback","dashboardpermissions","getDashboardPermissions","PermissionApi","formatPermissionCallback","reduceRight","ac","permissionApiReq","signalRFunction","stop","signalR_negotiate_url","axios","connectionUrl","withUrl","accessTokenFactory","withAutomaticReconnect","build","onclose","onreconnecting","access","disabledFeaturesOfContextOrg","assetRestricted","blockedassetOrgId","hideAdd","tabBarExtraContent","userRoles","targetKey","closeIcon","permissionToSave","Dashboard2","orgsSetPagination","orgsListSetSearch","orgsListSetDisplay","orgsMaintRefreshInstance","orgGet","getAllCapabilities","capabilityAccess","capabilitiesSelected","OrgsSelected","orgsCleared","capabilities","clearedOrgs","orgsGet","orgDelete","orgsListRefreshOnUpdate","orgMaintOpen","orgMaintClose","orgMaintTabChange","orgMaintTabsDisabled","countriesGet","countryStatesGet","countryId","countryCode","countryName","phoneCountriesGet","removedTags","orgLevelTags","ar","orgLogoMaint","orgLoginBackgroundMaint","loginBackground","languagesGet","getOrgGlobalNotesList","noteType","orgGlobalNotesMaint","getServicePlansComparisionSheet","orgMaintAdminsSetPagination","orgMaintAdminsSetSearch","orgUsersGet","orgUserRole","usersAdministeredGet","usersAdministeredMaint","orgsGlobalSubscriptionsSetPagination","orgsGlobalSubscriptionsSetSearch","orgsGlobalSubscriptionsGet","globalalertSubscriptions","orgsGlobalSubscriptionsMaint","OrgLogo","fileList","fileSize","upload","uid","onUploadSuccess","finalUrl","imageSrc","logoUploadId","logoUploadSrc","newFileList","multiple","OrgLoginLogo","loginLogoUploadId","loginLogoUploadSrc","OrgLoginBackground","loginBackgroundUploadId","loginBackgroundUploadSrc","OrgMaintInfo","displayColorPicker","enableMtag","existingTags","oldTag","onCountryStatesGetSuccess","countryChange","onLanguageGetSuccess","setDefaultLanguage","languageId","defaultLanguage","colorPickerOpen","colorPickerClose","colorPickerChange","orgIdParentName","street1","street2","street3","stateList","loginUrlDisplay","orgsettings","tagPermissions","asset_tagging","canTagCreate","canTagDelete","checkTagsValidations","existingValues","settingsLayout","headerColorLabel","logoLabel","loginLogoLabel","loginUrlLabel","loginBackgroundLabel","colon","isoCode2","contextActions","orgActions","OrgMaintAdmins","userAutoChange","resetUsers","onUsersSearch","onUsersChange","addUser","addUserSuccess","userFullName","userOrgHomeName","data-user-id","defaultActiveFirstOption","notFoundContent","OrgMaintGlobalSubscription","onGlobalSubscriptionSuccess","OrgMaintSettings","allFeatures","childOrgs","_isMounted","disabledFeatures","capabilityAccessSuccess","capabilityAccessFail","getAllCapabilitiesSuccess","capabality","capabilityItem","capabilityName","onGetOrgsSuccess","restrictedOrgIds","selectedOrgs","selectedOrgs1","getChildOrgs","selectedOrg","checkedOrgs","featureId","getContracts","filtersObj","encodeURIComponent","contractsSetSearch","contractSetPagination","setTab","drawerTabChange","updateField","updateRenewalField","addToContractsList","selectedAsset","contractStatus","addToRenewalsToolList","removeFromContractsList","removeFromRenewalsToolList","modifyContract","selectedContractsToModify","submitNewRenewal","newRenewals","PTSOrderFormModel","version","addLog","getBillableCustomerList","billableOnly","getServicePlansList","getCustomerBucketDetails","organizationId","getOrgServicePlanBucketByOrdId","addServicePlanToBucket","formValues","Quantity","results","returnServicePlanToTopParentCustomerOrg","transferServicePlanToOrg","isInteger","partNumberId","assignServicePlanToGateway","getGatewayContractsDetails","sendEmailNotifications","contractActions","showOrgZeros","POQuickMode","setPOQuickMode","showZeros","setContractsHistoryLoading","isModalVisible","setIsModalVisible","modalMessage","setModalMessage","currentOrgBucketDetails","setCurrentOrgBucketDetails","switchContractsHistoryLoading","currentOrgDetails","orgContractsDetailsSuccess","orgContractsDetailsError","errorMessage","showModal","getAvailableQuantityByBucketID","bucketId","entry","returnSuccess","successMessage","returnFailure","defaultMessage","ServerMessage","servicePlanAssignedSuccess","resultMessage","servicePlanAssignedError","customerBucketTableColumn","poNumber","soNumber","purchasedQuantity","orgBucketTableColumn","contextUserOrgIsBillableCustomer","transferredInFromOrgName","transferredInQuantity","transferredOutQuantity","ReturnServicePlanDetails","okType","onOk","userConfirmed","getFieldsValue","availableQty","itemKey","servicePlanId","toOrgId","fromOrgId","POEntry","updateFormField","packageName","withBetweenPOandQuickMode","InfoCircleOutlined","_","transferredInFromOrgId","emptyText","tutorial","EditableCell","editing","inputType","restProps","inputNode","hidden","orgGlobalNotesList","editingKey","setEditingKey","globalNotesData","isEditing","updateNote","validateFields","onUpdateSuccess","onFailure","mergedColumns","Link","address","edit","onCell","components","cell","rowClassName","OrgMaint","onCreateSuccess","submitAddNote","noteObj","handleNoteChange","handleNoteTypeChange","isUserAdminToOrg","contextOrgHasTransferredContracts","OrgMaintNotes","Orgs","onOrgEdit","orgDeleteSuccess","viewOrgAssets","deleteDisable","support","SubnodeOutlined","userCount","templateCount","orgAssetsCount","allAssetsCount","RoleMaintInfo","onRoleIdChange","entityName","entity","read","RoleMaint","Users","onUserEdit","onStatusSuccess","sortUsersTable","sortDetails","activeInScope","onRoleAction","rolepermission","defaultSortOrder","getOrgRolePermissions","getCustomerOrgPermissions","rolePermissionMaintOpen","rolePermissionMaintClose","rolesSetSearch","roleCopyMaintOpen","roleCopyMaintClose","roleStatusMaint","getSubmitButton","getOrgRolesMaint","getOrgsMaint","rolesMaintClose","PermissionOperations","checkMaxPermissions","operation","permissionEntity","cp","permissionBinary","isRoleAvailable","permissionObject","isActive","onRoleAvailableChange","onSubmitEnable","disablePermissionsFromParentOrg","sourceOrgId","RoleCopyMaintInfo","isCloned","orgrecord","RoleViewMaintInfo","createchecked","RolePermissionMaintInfo","permissionsAddList","RolePermissionMaint","Roles","onRoleEdit","onRoleCopy","PauseOutlined","RollbackOutlined","TabletOutlined","CopyOutlined","onActivateSuccess","onStatusActiveFailure","onDeactivateSuccess","onStatusDeactiveFailure","onDeleteSuccess","onStatusDeleteFailure","rolespermissions","alertsDm1SetPagination","alertsSignalsSetPagination","alertsCmdHistorySetPagination","alertsDm1","isSeen","timespanFromFilter","timespanToFilter","nicknameFilter","saFilter","spnFilter","fmiFilter","tagsFilter","alertsAddAssetUrlParameters","alertsDm1Filters","dm1Filters","markAlerts","alertKeys","viewAlertType","deleteAlerts","alertsSignals","alertsSignalsFilters","signalsFilters","alertsCmdHistory","viewHistoryType","commandFilter","operatorFilter","userFilter","typeFilter","cmdHistory","alertsCmdHistoryFilters","cmdHistoryFilters","getAsset","getCumminsRecommendations","alertId","oc","detectionTime","detected_at","dm1_cmns","getParkerRecommendations","ParkerDmRecommendations","getActivityAlerts","activityalerts","activityAlertsSetPagination","download","method","createObjectURL","Export","openModal","cancelModal","totalPages","downloadFm1Faults","fromPage","toPage","selectedViewType","Intl","DateTimeFormat","resolvedOptions","navigator","language","downloadSignalAlerts","currentPage","scopeChange","validateCustomPages","okButtonProps","cancelButtonProps","precision","Timespan","isBetween","disabledTime","disabledHours","isSame","disabledMinutes","disabledSeconds","Today","AssetsSignalsFilters","applyFilters","timespan","filtersApplied","filtersHeader","CheckCircleTwoTone","nicknameSorted","statusSorted","AssetsSignals","selectedRowKeys","getAssetSuccess","onSelectChange","markAlertsSuccess","markAlertsFail","deleteSignalAlerts","isDeleted","handleOk","handleCancel","onChangeViewAlert","selectedType","rowSelection","getCheckboxProps","hasSelected","wordWrap","wordBreak","triggerTime","locationLatitude","locationLongitude","parents","orgPathName","overlayInnerStyle","AlertsSignalsFilters","buttonStyle","CheckCircleOutlined","AlertsDm1Filters","saSorted","spnSorted","fmiSorted","CumminsResponseView","staticParams","relatedFaultCode","recommendation","responseParams","Related","findAssetTimeZone","assettime","Latitude","Longitude","Engine_Serial_Number","Service_Model_Name","Instruction_To_Fleet_Mgr","related","Rel_Fault_Code","Rel_SPN","Rel_FMI","Rel_Occurrence_Date_Time","Rel_Fault_Code_Description","Primary_Fault_Code","Fault_Code","occurrence_date_time","Fault_Code_Description","Primary_SPN","Primary_FMI","Primary_Occurrence_Date_Time","Primary_Fault_Code_Description","Fault_Root_Cause1","Fault_Likelihood1","Fault_Root_Cause2","Fault_Likelihood2","Fault_Root_Cause3","Fault_Likelihood3","Fault_Root_Cause4","Fault_Likelihood4","Derate_Flag","Derate_Value1","Derate_Value2","Derate_Value3","Shutdown_Flag","Shutdown_Description","cmns_recomendation_footer_html","AlertsDm1","isCumminsDrawerVisible","selectedAlert","recommendationOfAlert","parkerRecommendation","parkerActions","showDiagnostics","assetOrgId","nicknameToBeFiltered","deleteDm1Alerts","showDiagnosticsModal","handleDiagnosticsOk","handleDiagnosticsCancel","showCumminsRecommendations","getRecommendation","showParkerRecommendations","getParkerRecommendation","recommendations","onCloseCumminsDiagnostics","onCloseParkerDiagnostics","cumminsDiagnosticsTable","saDescription","spnDescription","fmiDescription","priority","stopNow","serviceNow","serviceSoon","information","inactive","hasParkerRecommendation","cause","relatedSpn","fix","cumminsLogo","expandedRowRender","rowExpandable","ocDescription","AlertsCmdHistoryFilters","timespanFromUtc","timespanToUtc","timespanFromIso","timespanToIso","timespanFromLocal","timespanToLocal","commandSorted","operatorSorted","userSorted","AlertsCmdHistory","onChangeViewHistory","CmdHistory_settings","requestTime","connectionState","cmdHistoryId","reason","connectionStateLastUpdatedTime","estimatedCommandTime","Reason","ActivityAlerts","getActivityAlertsSuccess","Alerts","getRunAttributes","historyState","runAttributes","historyType","allAlerts","getSelectedType","viewType","getHistoryType","isCommandRead","AlertsSignals","assetsSetPagination","assetsSetSearch","assetsSetStatus","assetsSetGatewayId","assetsMaintSetTitle","assetsMaintRefreshInstance","assetMaintTabChange","getFilterTags","editTagSubmit","oldTagName","newTagName","actionType","assetsListRefreshOnUpdate","assetMaintOpen","assetMaintClose","assetMaintTabsEnable","getLiteAssets","liteAssetsSetSearch","blockAsset","isBlocked","liteAssetsSetPagination","eligibleAssets","eligibleAssetsLov","getOrgTags","assetOrgGet","assetTemplatesGet","orgByMastertag","assetStatusUpdate","assetIqanConnectKey","IqanConnectKeyDeviceTwin","setAssetSettings","assetwifipassword","wifiPassword","getAssetSettings","deviceSettings","assetSubscriptionsSetPagination","assetSubscriptionsSetSearch","assetSubscriptionsGet","assetSubscriptions","assetSubscriptionsMaint","AssetHistory","oldMastertag","reasonForReplacement","replacedSequence","replacedDate","assetHistory","AssetMaintInfo","planQuotaId","quotaName","packageId","maxDayDm1","partNumberDesc","hideShowWifiPwd","enableIQAN","assetOrgGetSuccess","assetTemplatesGetSuccess","intervalUnit","intervalMsg","eligibleAssetsSuccess","eligibleAssetsLovSuccess","isEnableMtag","successMsg","onMastertagChange","partNumberDescription","onMtagReplacement","getTemplatesSuccess","onTemplateIdChange","iqanConnectKeyRender","getLiteTemplateDetails","getMtagLiteDetails","hideShowWifiPassword","iqanConnectHandleChange","timeOutValue","iqanConnectTimeOut","onSubmit","assetMaintFormRef","model","planplanQuotaId","planQuotaName","enableIQANConnect","hdnEnableIQANConnect","hdnIQanTimeout","barkoGuest","guestRole","canTagRead","ishideShow","flexDirection","templateVisibleToSubOrg","KeyOutlined","deviceNotExistsInIoT","isBspVersion","EyeInvisibleFilled","EyeOutlined","AssetMaintSubscriptions","assetSubscriptionsGetSuccess","targetButton","goToTemplate","controllerName","connected","Password","Name","require","AssetWiFiClient","viewWiFiStatus","viewWiFiPanel","viewEthernetPanel","wifiActiveKey","ethernetActiveKey","SSIDProviders","sleepModeActiveKey","sleepCycleValue","sleepCycleUom","isAlertModalOpen","triedEnablingHotspot","triedEnablingWiFi","triedEnablingEthernet","ssiddetails","ssid","wifiSSID","targetSleepCycleInSeconds","convertTimeAndUnitToSeconds","targetEnableSleepMode","isEqual","convertSecondsToTimeAndUnit","onSuccessGetSettings","sleepCycleInSecondsValue","setintialvalues","onFailureGetSettingsError","AddSSID","nextWakeupTime","sleepCycleAppied","password","RemoveSSID","ssidname","setEthernet","sleepModeHandleChange","validateTime","showSleepModePanel","validateTimeUnit","callback","durationSecStr","validateTimeValue","showWiFiPanel","utcStringToLocalTime","utcStr","sleepCycleValueOverride","sleepCycleUomOverride","sleepCycleInSecondsOverride","valueInSec","ssidProviders","sleepNote","allowChangeSleepModeConfig","allowWifiClient","CheckOutlined","ssidProvider","contractsHistoryLoading","GatewayContractsDetails","setGatewayContractsDetails","onGetContractDetailsSuccess","onGetContractDetailsFailure","contractsDetails","PONumber","SONumber","colSpan","billing","built_on","created_date","AssetMaint","confirmMtagReplacement","submitReplacement","isEnable","isBarko","AssetGatewaySettings","LiteAssets","templateNameUrl","isTemplateRead","pointerEvents","ClockCircleOutlined","Assets","showLiteAssets","columnSelectionVisible","tableColumnsHidden","columnSelectionFilter","tagSearchText","currentTagName","blockAssetSuccess","blockAssetFail","blocked","getTableFilterParams","getAssetsDetailsSuccess","assetMaintOpenDo","updatedFilters","assetInactivate","assetInactivateSuccess","assetActivate","assetActivateSuccess","onStatusChange","cancelDetailsMode","confirmInactivation","accessAllowed","confirmActivation","sortAssetsTable","onLiteAssetSearch","onLiteAssetSearchChange","handleTagSearch","handleTagEditClick","handleTagSaveClick","confirm","clearFilters","Modal","handleTagEditChange","pathnameArr","getMastertagDetailsMode","tableFilterParams","column_name","notesCount","assetdownIcon","data-title","connection_status","disconnectedSince","filterMultiple","filterDropdown","setSelectedKeys","overflowY","alignItems","justifyContent","SearchOutlined","tagId","templateIsDeleted","LockOutlined","UnlockOutlined","activeMastertag","allColumns","handleMenuClick","columnName","ex","onSearchColumnSelection","menu","getGatewaysControllers","gateways_controllers","initiateControllerOTA","controllerInfo","applicationInfo","iqanOpenOtaRequestForm","controllerId","applicationId","controllerAddress","pathName","storageLocation","updateOTAStatusFromDeviceTwin","installationDetails","controllerDetails","getApplications","getApplicationVersions","getInstallationsHistory","gatewaysId","controller_installations","controllersSetSearch","updateControllerSelection","controllerSetPagination","openInstallationProgressDrawer","closeInstallationProgressDrawer","getAllControllersList","modifyController","selectedControllersToModify","messageDetails","selectedApp","applicationType","requiresApproval","currentVersion","messageInfo","onOtaStatusUpdatedSuccess","installation","applicationName","applicationVersion","createdStatus","createdNotes","noteLine","downloadedStatus","downloadedAt","downloadedNotes","installedStatus","installedAt","installedNotes","selectedFilters","setSelectedFilters","filteredValue","InfoOutlined","selectedRows","overflowX","AppInstallationProgress","templatesSetPagination","templatesSetSearch","getTemplate","getTemplates","templatesListRefreshOnUpdate","templateMaintOpen","templateMaintClose","templateSetGlobalMode","getTemplatesForCopyCollection","templateDelete","templateMaintInfoOrgsGet","templateDuplicateOrgsGet","templateDuplicate","newName","newDescription","newOrgId","clonedSignals","templateCopyCollection","TemplateMaintInfoOrg","TemplateMaintInfo","TemplateDuplicateOrg","TemplateDuplicate","selectedkeys","enableSignalCollectons","autoExpandParent","flattenedSignals","setSignalTree","formatTreeData","uniqueExpandKeys","setExpanededKey","signalValidation","signalCollection","getFlattenedSignals","expanedKeys","curr","expandedKeysValue","checkedKeysValue","selectedSignals","isEnableSignalCollection","onEnableSignalCollection","keyLength","TemplateCopyCollection","matchingSignals","isModalVisibleForDuplicateName","signalOverride","destinationCollectionExists","destinationCollection","isSignalWarningEnabled","signalCount","duplicationCollectionSignals","newCollectionSignals","destinationTemplateCollectionData","sourceDataPoints","sourceTemplateData","receivedsignalCollections","receivedorgTemplates","getOrgTemplatesSuccess","isTemplateChange","collectionId","templateDetailsSuccess","tempdata","destTemplateData","validateSignalCollection","st","destinationCollectionFound","copyCollectionData","matchingCollectionSignals","newSignals","isDuplicateSignalAvailable","sourceCollectionData","signalFound","removedDuplicate","newCollection","sourceSignal","collectionFound","hasDuplicateSignalName","hasDuplicate","coll","tempOrgId","isDuplicateNameavailable","mergedsignals","closePopUp","sameCollectionExists","signalsmerged","genericCollections","handleOkDuplicateName","handleCancelDuplicateName","duplicate","replaced","destele","destData","sourceData","enableSignalCollections","destTemp","destgenericCollections","maxTagCount","onCollectionChange","TemplateMaint","signalLength","isEnabledAllSignals","showSignalDuplicateModel","showSignalCopyModel","Templates","templateDeleteSucess","goToAssets","BlockOutlined","collectionCount","underline","GlobalOutlined","templateDetailsTabChange","signalCollectionsSetPagination","signalCollectionsSetSearch","getSignalCollection","getSignalCollections","signalCollectionDelete","signalCollectionMaintOpen","signalCollectionMaintClose","signalCollectionSetRecord","signalCollectionMaintSubmit","signalsOpen","signalsClose","signalMaintOpen","signalMaintClose","signalMaintSetRecord","getSignal","getJ1939s","j1939Id","getCommandPgns","commandPgn","getCommandControllers","commandControllerSaId","allowedControllers","cmdControllerSaId","cmdControllerSaName","signalMaintSubmit","ruleId","criticalLowValue","warningLowValue","warningHighValue","criticalHighValue","infoLowValue","infoHighValue","incrementalRuleId","incrementalRuleName","incrementalRuleType","incrementalRuleValue","offlineRuleId","offlineRuleName","offlineSince","offlineDuration","mergeRuleId","mergeRuleName","leftMergeRule","rightMergeRule","mergeRuleOperator","getUnits","otherUnits","symbol","stdSymbol","signalListSetPagination","signalListSetSearch","signalListRefreshOnUpdate","getSignals","signalDelete","dm1FaultsSetPagination","dm1FaultsSetSearch","getDm1Faults","listType","dm1Faults","dm1MessagingMaint","dm1MessagingCan0Enabled","dm1MessagingCan0UpdateInterval","dm1MessagingCan1Enabled","dm1MessagingCan1UpdateInterval","dm1WhitelistType","dm1NotificationDelaySeconds","dm1FaultsDelete","dm1FaultsDbDelete","dm1FaultsAddRecord","dm1FaultsAddRecords","dm1FaultsMaint","iqanFileUploadMaint","getPinnedSignals","savePinnedSignals","getOperatorSignals","saveOperatorSignals","getQuotasApplied","SignalList","descriptionSpan","componentUpdateSuccess","pageNumber","onSignalDeleteSuccess","getTemplateId","onGetSignalSuccess","onSignalDeleteSuccess2","getLeftMergeRuleName","leftMergeRuleName","mergeRule","signalRule","offlineRule","getRightMergeRuleName","rightMergeRuleName","isLeftOffline","str","signalid","templateDetails","supported","contextOrgCmdPgnSpns","iscreateOrUpdateTemplate","isupdateRules","isreadRules","iscreateRules","isdeleteRules","textDecorationLine","pgnName","requestPgn","requestInterval","pgnDestinationAddress","pgnSourceAddress","spnName","bitLength","firstBit","scaling","sourceAddress","j1939Error","canHeader","doesOrgSupportCommandSignal","getSignalName","canAddress","capitalizeFirstLetter","infoLowLabel","criticalLowLabel","warningLowLabel","warningHighLabel","criticalHighLabel","infoHighLabel","signalIncrementalRule","ruleValue","Signals","gotoCollection","currentId","currentName","currentType","currentRecordIndex","addSignal","disableAddSignal","allowedMaxNoOfSignals","disableTooltip","addSignalTooltip","LeftOutlined","isGlobalTemplate","SignalRule","ruleType","openMergePanel","setComponentState","onRuleTypeChange","deleteRule","deleteIncrementalRule","incrementRuleType","deleteOfflineRule","onChangeLeftMergeRule","setLeftMergeRules","onChangeRightMergeRule","setRightMergeRules","deleteMergeRule","setOpenMergePanel","isadmin","leftMergeRules","rightMergeRules","rule2","ParamsObjectarray","SignalMaintInfo","sourceName","matchSourceAddress","multiPackage","unitSymbols","viewRequestPGN","messageArray","inputValue","newMessageText","multiPackageError","expandPanel","handleAddMessage","newMessage","handleRemoveMessage","handleNewMessageTextChange","handleMessageTextChange","updatedMessage","c2dWlist","setMulti","stringValue","setRequestPGNRecord","requestIntervalValue","requestIntervalUom","setSignalRecord","modeId","setRuleRecord","setIncrementalRuleRecord","setOfflineRuleRecord","setMergeRules","mergeRules","setMergeRuleRecord","setRecordNull","getTemplateSuccess","getCommandSignals","onModeChange","onCanAddressChange","onJ1939TemplateSearch","onJ1939TemplateChange","onCommandPgnSearch","onCommandPgnChange","unitName","onCommandControllersSearch","onCommandControllersChange","onSourceAddressChange","onMatchSourceAddressChange","onSourceNameChange","onFormatChange","BitLength","onCommandNameChange","templateCommandSignals","commands","commandSignal","onUnitNameChange","onUnitSearch","getUniqueUnits","getUnitsSuccess","showRequestPGNPanel","filteredRules","allowedSingleFrameUsersDev","allowedSingleFrameUsersStag","allowedSingleFrameUsersProd","SignalMaint","gotoSignal","firstControllerSa","commandcontrollers","firstController","IqanFileUpload","importMode","uploadProps","authorization","iqanTelematicFile","ImportOutlined","SignalCollections","getSignalCollectionSuccess","signalCollectiondDeleteSuccess","signalCollectiondDeleteSuccess2","goToPage","listColectionSignals","adminActions","isCreateOrUpdate","updateInterval","Dm1Messaging","can0","can1","dm1MessagingMaintSuccess","onCan0Change","onCan1Change","flag","addonAfter","Dm1UploadFile","closeModal","closeModalwhenSuccessful","whiteListCsvData","csvRecord","whiteListSample","FileAddOutlined","Dm1Faults","dm1ListType","addRecord","editModeSet","csvRecordPush","attributeValue","onFinishSubmit","recordValidation","duplicatesExist","onFinishSubmitSuccess","onInputChange","deleteRecord","deleteRecordSuccess","record1","record2","Dm1Lists","SignalTree","setMaxSelected","setExpandedKeys","setSubmitVisibility","treeSignals","setTreeSignals","setDatapoints","loadPreferedSignalsCallback","submitVisible","preferedSignalsMaintSuccess","saveSignalMaint","preferedSignalJson","selectedValues","signalObject","cur1","createJsonForSignalMaint","fomInitialValues","CollectionMaintInfo","defaultName","defaultIntervalValue","defaultIntervalUom","updateIntervalValue","updateIntervalUom","allSignals","CollectionMaint","addCollection","QuotasApplied","getQuotasAppliedSuccess","allowedMinCollectionFreq","allowedNoOfSignals","allowedMaxDayDm1","assetsApplied","TemplateDetails","onTemplateNameChange","onTemplateDescriptionChange","goToTemplates","iscreateDm1Faults","isreadDm1Faults","isupdateDm1Faults","isdeleteDm1Faults","NotFound404","goHome","oprsListRefreshOnUpdate","clearTableData","operatorOrgsGet","operatorOrgAssetsGet","equipment","operatorOrgAccessTypesGet","rfidSetValue","operatorHistoryId","isOverride","oprMaintTabsEnable","getOperatorsForExport","OprHomeOrg","onOperatorOrgChange","Operators","getTutorials","getTutorial","tutorialId","tutorialsSetSearch","cover","controls","playsinline","stopOnUnmount","changesHistoryDetails","changesHistory","checkEquality","oldValue","borderBottom","created_at","old_record_value","new_record_value","additionalDetails","SIMStatus","IoTHubStatus","created_by_name","submitNewServicePlanSuccess","submitNewServicePlanFailure","allowDuplicate","sapCustomerNumber","customerName","packageActive","selectedPartNumber","setSelectedPartNumber","renewalSelectedMastertag","setRenewalSelectedMastertag","full_name","pts_id","po_number","so_number","sap_customer_number","getContractDetailsFailed","getRenewalDetailsFailed","respMessage","contractsModificationColumns","minLength","updateJustification","onBlur","renewalToolColumns","package_name","contractUpdateSuccess","submitNewRenewalSuccess","submitNewRenewalFailure","InputValidated","newRenewal","selectedServicePlan","postValue","selectedAssetDetails","enterLoading","applicationsSetSearch","applicationSetPagination","getAllApplicationsList","ApplicationMaint","compatibleControllers","requiredApproval","fileUpload","originFileObj","selectedApplicationsToModify","Dragger","Upload","dragProps","fileInfo","formRefNewApp","getValueFromEvent","InboxOutlined","make","getControllers","getSoftwares","systemSwId","softwareList","softwaresSetSearch","softwareSetPagination","getAllSoftwaresList","softwareListing","softwareCsuOrgGet","SoftwareMaint","softwareInfo","systemSoftwareId","availableToSubOrgs","softwareUploads","SoftwarePreview","profile","downloadPackage","formRefNewVersion","enableSoftwarePreview","enableSubmit","summary","zipFiles","softwareMaintFormRef","utcToLocal","timeUtc","softwareCsuOrgGetSuccess","shallBeAvailableToSubOrgs","OnDeviceModelChange","OnSoftwareTypeChange","getUploadFile","onSuccessGetSoftwarePreview","onFailureGetSoftwarePreviewError","getSoftwarePreview","formatRevision","createdOn","numDevice","numCsu","sortedCsuList","formatReview","isFromAncestor","packagename","setPage","handleDownloadClick","getAttribute","versionNumber","orgid","deviceModel","data-filename","data-version","data-orgid","data-devicemodel","getControllerOtaManagement","controllerOtaManagementSetSearch","updateControllerOtaManagementSelection","ControllerOtaManagementSetPagination","getDeviceDiscovery","systemDiscovery","getSystemStatus","systemStatus","CsuMaint","csuInfo","DeviceName","softwareType","hardwareId","operatorapproval","fromEntries","getSystemHistory","systemHistory","ControllerOtaManagement","controllers_ota","SoftwareInstallation","operatorApproval","setOperatorApproval","selectedSoftwareDevice","setSelectedSoftwareDevice","selectedSoftwareType","setSelectedSoftwareType","selectedSoftwarePackage","setSelectedSoftwarePackage","getSelectedVersion","selectedItem","getOrgId","getHardwareId","HardwareID","getAddress","formattedValues","uniqueOption","DeviceDiscovery","selectedCSU","Controller","SerialNumber","PcbaVariantID","SoftwareDetails","RuntimeVersion","PlatformVersion","ApplicationVersion","DeviceStatus","DeviceHistory","getReportSchedulesList","schedules","scheduleMaintOpen","scheduleMaintClose","scheduleSetPagination","scheduleSetSearch","scheduleStatus","scheduleMaintInfoOrgsGet","scheduleMaintInfoReportsGet","scheduleMaintInfoUsersGet","scheduleMaint","schedule","getScheduleOrgTags","ScheduleMaintInfoOrg","onOrgChange","ScheduleMaintInfoUsers","array","finalUsers","filterUsersArray","weekOptions","todayDate","firstDayofMonth","firstDayofNextMonth","ScheduleMaintInfo","capabilityCheckbox","assetTagDDL","orgTagDDL","currentUnitValue","orgTagsErrorMsg","onFrequencyChange","onOrgTagsChange","onAssetTagsChange","scheduleOrgTagArray","getTimezoneOffset","localIsoDateString","localIsoScheduleTimeString","scheduletimeHours","scheduletimeMintues","clientScheduledTimeString","dayofweeks","dayofmonth","_d","getScheduleSuccess","onCapabilityChange","checkBoxCurrentState","findCapability","isDifferentInstance","isDifferentOrg","days","tagValues","orgTagValues","currentClientTimeZone","clientTimezone","timeIndex","scheduleName","finalReports","filterReportsArray","checkOrgTagsValidations","help","onInputKeyDown","isSelected","isSameOrBefore","SchedulesMaint","ReportSchedules","toLocaleTimeString","lastRun","fixed","tableLayout","am4core","am4themes_material","am4themes_animated","doesCloseOn","useClickOutsideStats","selectedMasterTag7Days","setSelectedMasterTag7Days","selectedMasterTagHeatMap","setSelectedMasterTagHeatMap","dm1CountYesterday","dm1Count","DM1Percent","setDM1Percent","criticalAlertsCountYesterday","criticalAlertsCount","alertsPercent","setAlertsPercent","pad","DayNameArray","weeklyHeatMapData","AMPM","Hours","chartHeatMap","maskBullets","inversed","seriesHeatMap","sequencedInterpolation","defaultState","transitionDuration","bgColor","columnTemplate","heatRules","heatLegend","bottomAxesContainer","handleHover","valueAxis","hideTooltip","showTooltipAt","chartBar","saturation","dailyData","dmDailyCountArr","noDataMessagecontainer","messageLabel","wrap","categoryAxis","sequencedInterpolationDelay","fillModifier","brightnesses","offsets","gradient","dmDailyCount","chartPie","whitelistedGateways","pieSeries","slices","showOnInit","shiftRadius","propertyFields","legendSettings","valueText","dmHeatMap","assetsDmCountJSON","dmcount","dm1AssetsCount","criticalAlertsAssetsCount","activeUsers","ArrowUpOutlined","ArrowDownOutlined","onlineCount","offlineCount","outsideGeofenceCount","insideGeofenceCount","useClickOutsideNotifications","getCalibrations","getOTAHistory","typeText","csuMaintClose","csuMaintOpen","processAction","startStep","OTA","csuSetPaginationForAll","setSearch","csuSetPaginationForHistory","esn","boxId","newVersion","telematicsVesion","telematicsSupplierId","otaStatus","otaCode","otaMessage","persistMode","tabData","setCategory","disableAction","setDisableAction","setSortColumn","setSortDirection","getOTAOnSuccess","getOTAOnError","isSearch","ota","resetSearch","initiateAction","operationType","approved","csuJobId","actionOnSuccess","actionOnError","calibrationMaintOpenDo","disconnetedSince","statusAt","tableColumnswithAction","calibrationMaintOpen","actionList","hasInProgressOta","CheckSquareFilled","StopFilled","CloseSquareFilled","PushpinOutlined","Loading3QuartersOutlined","LikeOutlined","getOTAHistoryOnSuccess","getOTAHistoryOnError","tableHistoryColumnsWithConnectionStatus","passSearchText","setPassSearchText","setIsSearch","setActiveTab","getVideoTutorials","playingUrl","setPlayingUrl","thumbnail","objectFit","getReleaseNotes","releasenotesSetSearch","handleFileUpload","filteredList","releasenotesdata","listStyleType","FilePdfOutlined","getUserGuide","userguideSetSearch","userguidedata","getSerialNumberList","selectedMac","setSelectedMac","selectedMasterTag","setSelectedMasterTag","selectOptions","report","iframeUrl","selectedReport","scrolling","allowFullScreen","onLoad","orgreportAccessGet","getReportsToken","setSelectedReport","selectedWorkSpaceId","setSelectedWorkSpaceId","selectedReportId","setSelectedReportId","selectedDatasetId","setSelectedDatasetId","reportsData","setReportsData","setToken","powerBICredentials","setPowerBICredentials","isFetched","setIsFetched","embedContainerRef","access_token","workspaceID","reportID","datasetID","fetchReportsData","workspaceId","fetch","Authorization","json","ok","firstReport","generatePowerBIToken","contextUserId","contextOrgId","requestBody","accessLevel","identities","username","datasets","selectedReportDatasetID","parkerOrgId","reportName","embedReport","embedConfig","embedUrl","tokenType","models","TokenType","Embed","panes","selectedReportData","embedContainer","powerbi","embed","setSlicerFilter","checkSlicerFilters","getPages","pages","getVisuals","visual","getSlicerState","slicerState","selectedFromDate","selectedToDate","table","condition","fromDate","storedFromDate","storedToDate","$schema","filterType","FilterType","Advanced","logicalOperator","activePage","visuals","slicer","setSlicerState","Content","interceptorsSetup","interceptors","request","use","App","menuCounter","contextGetSuccess","contextGetFailure","loginError","permissionsGetSuccess","maxCommandPermissionValueGetSuccess","rolesGetSuccess","isSecure","exact","setCookie","expireDays","setTime","expires","toUTCString","cpath","cookie","loginGet","orgUrl","currentUrl","forgotPassword","LoginFooter","termsVisible","termsOpen","termsClose","onLanguageChange","setLoginTermsAndConditions","LoginError","errorModalErrorMessage","setErrorModalErrorMessage","closeErrorModal","errorHtml","errorObject","displayError","CloseCircleTwoTone","twoToneColor","successVisible","setSuccessVisible","isParker","setIsParker","forgotPasswordClose","goback","resourceServer","messagesUrl","MaintenancePage","maintenanceLogo","loginState","helpLinksTimer","useOktaAuth","errorModalVisible","setErrorModalVisible","forgotPasswordVisible","setForgotPasswordVisible","hash","intermediateOktaFlow","parkerOktaFlow","isAccessDenied","forgotPasswordOpen","renderEl","oktaSignIn","tokenFromUrl","parseFromUrl","updateAuthState","sessionCheck","session","exists","isTokenExpired","checkOktaTokenExpired","getWithRedirect","processLoginError","customizeHelpLinks","newAnchor","createTextNode","completeLogout","loginGetSuccess","OktaSignIn","baseUrl","features","idpDiscovery","requestContext","i18n","authParams","responseMode","hasTokensInUrl","loginLogoUrl","counter","setLogin","loginBackgroundUrl","VersionNumber","versionNo","versionNumberGet","transformRequest","Helmet","commercialLicense","createStoreWithMiddleware","applyMiddleware","reduxThunk","createStore","reducers","onAuthRequired","Login","LoginCallback","getElementById","serviceWorker","ready","registration","unregister","module","exports"],"mappings":"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AzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QAKW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QAEW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QAGW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QAAQE,WAAWG,QACW,yCAAzC+qC,KAAK1C,MAAM1oC,QA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C,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,sC,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,iD,kBCA3CD,EAAOC,QAAU,8mD,8OCAjBD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,0C,oBCA3CD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,gD,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,kBCA3CD,EAAOC,QAAU,slM,kBCAjBD,EAAOC,QAAU,0iY,kBCAjBD,EAAOC,QAAU,02X,kBCAjBD,EAAOC,QAAU,0wZ,kBCAjBD,EAAOC,QAAU,06V,kBCAjBD,EAAOC,QAAU,8jK,oBCAjBD,EAAOC,QAAU,IAA0B,sC","file":"static/js/main.0e2a8027.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","export const initialState = { \n context: {\n initialized: false,\n appContext: {\n mode: \"\",\n orgId: \"\",\n userId: \"\",\n roleLevel: \"\",\n roleName: \"\",\n roleId:\"\"\n },\n httpRequest: {\n contentType: \"\",\n host: \"\"\n },\n token: {\n instance: \"\",\n type: \"\",\n value: \"\"\n },\n orgSettings: {\n headerColor: \"#000000\",\n fleetMapDefaultView: \"\",\n logo: \"\"\n },\n user: {\n active: false,\n avatarUploadAllowed: false,\n avatarUploadId: \"\",\n avatarUploadSrc: \"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\",\n contextUserIsAdmin: false,\n contextUserIsParkerAdmin: false,\n contextUserIsSuperUser: false,\n email: \"\",\n firstName: \"\",\n fullName: \"\",\n homeOrg: {\n logo: null,\n name: \"\",\n orgId: \"\",\n orgIdParent: \"\",\n orgTree: []\n },\n lastName: \"\",\n locale: \"\",\n orgHomeRoleId: \"\",\n oktaUserId: \"\",\n phoneNumber: \"\",\n type: \"\",\n userId: \"\"\n },\n termsAndConditions: null,\n },\n data: {\n initialized: false, \n \"status\": \"\",\n \"timestamp\": \"\", \n \"permissions\": {\n alert_settings: \"\",\n asset_widgets: \"\",\n assets: \"\",\n dm1_settings: \"\",\n global_view: \"\",\n iqan_key: \"\",\n master_tag: \"\",\n my_notifications: \"\",\n my_profile: \"\",\n org_options: \"\",\n org_settings: \"\",\n reports: \"\",\n role_settings: \"\",\n share_orgs: \"\",\n support_mode: \"\",\n templates: \"\",\n user_notifications: \"\",\n user_profile: \"\",\n users: \"\",\n timeout_settings:\"\"\n }\n },\n map: null,\n stats: {\n initialized: false,\n loading: false,\n visible: false,\n timestamp: new Date(),\n data: {},\n dm1DailyCount: null,\n dm1HeatMapData: [],\n assetsWithDm1: []\n },\n notifications: {\n initialized: false,\n loading: false,\n visible: false,\n timestamp: new Date(),\n data: {},\n },\n signalRData: {\n enabled: false,\n data: [],\n SignalRInitialData: []\n }, \n \n maxCommandPermissionValue: 0,\n gpsCoordinates:{\n latitude:\"\",\n longitude:\"\"\n }\n};\n ","export const initialState = {\n orgId: \"\",\n orgName: \"\",\n isSupportMode: false \n};\n ","export const initialState = {\n headerColor: \"\",\n logoUrl: \"\",\n backgroundUrl: \"\",\n termsAndConditions: \"\",\n languageIsoCode2: \"\",\n languageIsoCode2Default: \"\",\n languages: []\n};\n ","declare global {\n interface Window {\n config?: {\n API_ENDPOINT?: string\n UI_DOMAIN?: string,\n OKTA_ISSUER?: string,\n OKTA_CLIENT_ID?: string,\n REPORT_ENDPOINT?: string ,\n EMAIL_LOGIC_APP_URL?: string ,\n CDN_URL?: string,\n CLAYTON_URL?:string,\n ENABLE_DASHBOARD2?: boolean,\n ENABLE_GEOFENCING?: boolean,\n ENABLE_SCHEDULE?: boolean,\n ENABLE_CUMMINS_DIAGNOSTICS?: boolean,\n ENABLE_GATEWAY_SETTINGS?: boolean,\n ENABLE_CMNS_UI?: boolean,\n DEFAULT_IP?: string, \n SIGNALR_URL?: string, \n SIGNALR_TOKEN?: string,\n COMMAND_SIGNAL_FAKE_TESTING?: boolean,\n HOIST_URL?:string,\n TOYOTA_URL?:string,\n MAINTENANCE_MODE?:boolean, \n }\n }\n}\n\nexport const appConfigs = {\n\n app: {\n title: \"IQAN Connect v2.2.0\",\n versionMajor: \"2\",\n versionMinor: \"0\",\n login: {\n en: {\n //\n //https://github.com/okta/okta-signin-widget/blob/master/packages/@okta/i18n/src/properties/login.properties\n //\n copyrightText: \"© Parker Hannifin. All rights reserved.\",\n termsAndConditionsLinkText: \"Terms and Conditions\",\n termsAndConditions: {\n title: \"Welcome To IQAN Connect v2.2.0\"\n },\n \"primaryauth.title\": \"Welcome\",\n \"primaryauth.username.placeholder\": \"Email Address\",\n \"error.username.required\": \"Please enter your Email Address\",\n \"primaryauth.password.placeholder\": \"Password\",\n \"error.password.required\": \"Please enter your password\",\n \"errors.E0000004\": \"Sign in failed\",\n \"password.forgot.email.or.username.placeholder\": \"Email Address\",\n \"password.forgot.email.or.username.tooltip\": \"Email Address\",\n \"password.forgot.sendEmail\": \"Reset\",\n \"forgotpassword\": \"Forgot your password?\",\n \"password.reset.title\": \"Reset Password\",\n \"password.forgot.sendText\": \"Reset\",\n \"goback\": \"Back to Sign In\",\n \"password.forgot.emailSent.title\": \" FORGOT PASSWORD \",\n \"password.forgot.emailSent.parker.title\": \"Error\",\n \"password.forgot.emailSent.desc\": \" <br /> If you are a registered user, we have sent you an email with instructions to reset your password.\",\n \"password.forgot.emailSent.parker.desc\": \"You cannot reset your Parker password here. Please follow the procedure to change your Active Directory login password or contact your Active Directory administrator.\",\n \"password.oldPassword.placeholder\": \"Temporary password\",\n \"password.oldPassword.tooltip\": \"Temporary password\",\n \"password.expired.title.generic\": \"Your password has expired\"\n }\n },\n alerts: {\n exportMaxPages: 100\n },\n fleetOverview: {\n mapDataPoolingRate: 60 * 1000, //ms\n mapGeoTabDataPoolingRate: 10 * 60 * 1000, //ms\n assetSearchKeystrokeDelay: 250, //ms\n assetSearchGlobalKeystrokeDelay: 500 //ms\n },\n assetOverview: {\n widgetscreensizefortoggle: \"4\",\n minsignalsformapwidgets: \"2\",\n connectdisconnectdatapointid: \"2aedf7c0-7072-11e6-9616-d1436e22fac1\", \n deviceconnectedtext: \"Microsoft.Devices.DeviceConnected\",\n datapointlimits: [50, 100, 500, 1000, 2000, 3000],\n alertsInterval: '24 hours',\n maxdatapointlimit: 30000,\n maxapilimit: 3000,\n startdateenddatedaysdiff: 7,\n exportstartdateenddatedaysdiff: 30,\n autoRefreshPollingRate: 60 * 1000,\n PermissionDrawerTitle: 'Dashboard Permissions',\n cosmosdataretentiondays: 90\n },\n termsAndConditions: {\n title: \"Welcome To Parker Connect\",\n subTitle: \"Please review our Terms and Conditions\"\n },\n assets: {\n offlineHavingNoDateText: \"Not Available\",\n onlineText: \"NA\"\n },\n pinnedSignals: {\n maxSignalsSelection: 7\n },\n operatorSignals: {\n maxSignalsSelection: 1\n },\n assetTags: {\n maxAssetTags: 5,\n maxAllowCharactersPerTags: 50,\n },\n orgTags: {\n maxOrgTags: 5,\n maxAllowCharactersPerTags: 50,\n }, \n enableDashboard2: window.config?.ENABLE_DASHBOARD2 || true,\n enableGeoFencing: window.config?.ENABLE_GEOFENCING || true,\n enableSchedule: window.config?.ENABLE_SCHEDULE || false,\n enableCumminsDiagnostics: window.config?.ENABLE_CUMMINS_DIAGNOSTICS || false,\n enableGatewaySettings: window.config?.ENABLE_GATEWAY_SETTINGS || true,\n enableCumminsUI: window.config?.ENABLE_CMNS_UI || false,\n enableCommandSignalFakeTesting: window.config?.COMMAND_SIGNAL_FAKE_TESTING || false,\n defaultIP: window.config?.DEFAULT_IP || \"10.42.0.111\",\n enableMaintenanceMode:window.config?.MAINTENANCE_MODE || false,\n },\n \n server: {\n URL: window.config?.API_ENDPOINT || \"http://localhost:8080\",\n deploymentServerURL: window.config?.UI_DOMAIN || \"http://localhost:3000\",\n reportServerURL: window.config?.REPORT_ENDPOINT || \"http://localhost:8782/\",\n claytonServerURL:window.config?.CLAYTON_URL || \"http://localhost:3000/\", \n hoistServerURL:window.config?.HOIST_URL || \"http://localhost:3000/\",\n toyotaServerURL:window.config?.TOYOTA_URL || \"http://localhost:3000/\"\n },\n okta: {\n oidc: {\n issuer: window.config?.OKTA_ISSUER || \"https://logintest.parker.com/oauth2/austxx35r3mrCxtRI0h7\",\n clientId: window.config?.OKTA_CLIENT_ID || \"0oaryxvnuqyY47FUd0h7\",\n scopes: [\"openid\", \"profile\", \"email\"],\n pkce: true,\n disableHttpsCheck: false\n },\n parkerUserRegstrationUrl: \"https://phdev.parker.com/us/en/Login?myAcctMain=1\" \n },\n errors: {\n api: {\n defaultErrorMessage: \"An error has been encountered while processing your request - Please try later\",\n },\n fieldErrors: {\n valueRequired: \"Value is required\",\n atLeastTwoCharacters: \"Enter at least two characters\",\n invalidEmail: \"Email format is invalid\"\n }\n },\n signalR: {\n code: window.config?.SIGNALR_TOKEN,\n url: window.config?.SIGNALR_URL\n },\n settings: {\n form: {\n alerts: {\n successTitle: \"Success\",\n successDefaultMessage: \"Your changes are successfully procesed\",\n errorTitle: \"Please resolve all errors before continuing\",\n warningTitle: \"Warning\"\n },\n submitButtonText: \"Submit\"\n },\n settingStyleForm:{\n saveButtonText: \"Save\",\n cancleButtonText: \"Cancel\"\n },\n formReset: {\n message: \"Do you really want to reset form data?\",\n okText: \"Yes\",\n cancelText: \"No\"\n },\n formLayout: {\n mainLayout: {\n labelCol: { span: 5 },\n wrapperCol: { span: 19 }\n },\n tailLayout: {\n wrapperCol: {offset: 5, span: 19}\n }\n },\n drawers: {\n defaultWidth: 768,\n xlWidth: 992,\n closeButtonText: \"Close\",\n cancelButtonText: \"Cancel\"\n }\n },\n messages: {\n usersPhoneTooltip: \"Please contact our Customer Service, at +1 (555) 555-5555, if the country you're looking for is not listed\",\n headerColorTooltip: \"To open Color Picker, click/tap Pick button. Click/Tap outside of Color Picker to select a color. Color value is a hex(hexadecimal) value.\",\n companyLogoTooltip: \"File type must be .jpg or .png. Maximum logo dimensions are 140x68 pixels. Tip: Use a logo equal to, or less than, 140x68px to prevent scaling. Maximum file size is 100kB.\",\n companyLoginUrlTooltip: \"Customize displayed company name within login URL. Avoid space and special characters. Valid examples are 'my-company' and 'my-company/acme'\",\n companyLoginLogoTooltip: \"File type must be .jpg or .png. Maximum logo dimensions are 640x480 pixels. Maximum file size is 100kB. Tip: Use a logo equal to, or less than, 640x480px to prevent scaling. This logo will be displayed in login page only.\",\n companyLoginBackgroundTooltip: \"Splash image is login page background image. File type must be .jpg or .png. Recommended login splash image is 1920 x 1080 pixels. Maximum file size is 500kB.\",\n dm1FaultsUploadTooltip: \"File type must be CSV (Comma Separated Values) or text. Maximum file size is 500kB. The first row must contain column headers: DM1Enable,SA, SPN and FMI. Only unique records will be processed.\",\n iqanTelematicSignalFileTooltip: \"File type must be JSON file. Maximum file size is 500kB. File data will be merged with existing template data.\",\n \n },\n tables: {\n pageSize: 12,\n j1939PageSize: 128,\n commandPgnPageSize: 32,\n defaultCurrent: 1,\n defaultTotal: 0,\n showSizeChanger: false,\n showQuickJumper: true,\n hideOnSinglePage: true,\n responsive: true,\n showLessItems: true\n },\n emailNotifyLogicApps:{\n logic_app_url : window.config?.EMAIL_LOGIC_APP_URL,\n email_subject : \"Reset your Password \",\n parker_AD_Password : \"Please use parker active directory password\"\n },\n colorCodes:{\n colorCodesLineChart:[\n \"#66CC00\",\n \"#006699\",\n \"#000000\",\n \"#cc3300\",\n \"#993300\",\n \"#9966cc\",\n \"#FF5733\",\n \"#A6351C\",\n \"#6A1301\",\n \"#CAADA8\"\n ]\n\n },\n accessTypes:[\"RFID\", \"Asset-Mapping\"] \n} \n","import { appConfigs } from \"./configurations\";\nimport { number } from \"@amcharts/amcharts4/core\";\nimport { Moment } from \"moment\";\nimport moment from \"moment\";\n \nexport interface assetTableFilter {\n page: number,\n status: string,\n searchText: string,\n sortColumn: string,\n sortDirection: string,\n alertInterval: string,\n listMode: boolean,\n filters: any[any],\n}\n \n \nexport const getDrawerWidth = (): number => {\n return Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n};\n \nexport const setLogin = (\n headerColor: string,\n logoUrl: string,\n loginLogoUrl: string,\n backgroundUrl: string,\n termsAndConditions: string\n): void => {\n let items: any;\n \n if ((headerColor || \"\") !== \"\") {\n items = document.querySelectorAll(\n \"#okta-sign-in.auth-container .okta-sign-in-header\"\n );\n if (items.length) {\n items[0].style.borderBottom = \"5px solid \" + headerColor;\n }\n }\n \n if ((loginLogoUrl || \"\") === \"\") {\n items = document.querySelectorAll(\n \"#okta-sign-in.auth-container .okta-sign-in-header\"\n );\n if (items.length) {\n items[0].style.display = \"none\";\n }\n } else {\n items = document.querySelectorAll(\n \"#okta-sign-in.auth-container .okta-sign-in-header img\"\n );\n if (items.length) {\n items[0].src = appConfigs.server.URL + loginLogoUrl;\n }\n }\n /*\n items = document.querySelectorAll('.okta-sign-in-header.auth-header'); \n if (items.length) {\n items[0].style.display = ((logoUrl || \"\") !== \"\" ? \"\" : \"none\");\n }\n if ((logoUrl || \"\") !== \"\") {\n items = document.querySelectorAll('.okta-sign-in-header.auth-header img'); \n if (items.length) {\n items[0].src = logoUrl;\n }\n }\n */\n items = document.querySelectorAll(\"body\");\n if (items.length) {\n if(appConfigs.app.enableMaintenanceMode!==true)\n {\n if ((backgroundUrl || \"\") !== \"\") {\n items[0].style.background =\n \"url(\" +\n appConfigs.server.URL +\n backgroundUrl +\n \") center center / cover no-repeat fixed\";\n }\n else\n {\n items[0].style.background =\n \"url(\"+\n \") center center / cover no-repeat fixed\";\n }\n }\n const widget = document.querySelectorAll(\"#sign-in-widget\");\n if (widget.length) {\n items[0].style.overflow = \"inherit\";\n }\n }\n \n items = document.querySelectorAll(\".login-footer a, .login-footer div\");\n for (let counter = 0; counter < items.length; counter++) {\n items[counter].style.color =\n (backgroundUrl || \"\") === \"\" ? \"#999\" : \"#FFFFFF\";\n }\n \n items = document.querySelectorAll(\".loginTermsAndConditions\");\n if (items.length) {\n items[0].innerHTML = termsAndConditions;\n }\n};\n \nexport const setLoginTermsAndConditions = (): void => {\n let source: any = document.querySelectorAll(\".loginTermsAndConditions\"),\n items: any = document.querySelectorAll(\".loginTermsAndConditionsDisplay\");\n \n if (source.length && items.length && (source[0].innerHTML || \"\") !== \"\") {\n items[0].innerHTML = source[0].innerHTML;\n }\n};\n \nexport const getLoginUrl = (): string => {\n let loginUrl = window.localStorage.getItem(\"loginUrl\") || \"\";\n \n if (loginUrl !== \"\") {\n loginUrl = loginUrl.trim();\n }\n if ((loginUrl || \"\") === \"/\") {\n loginUrl = \"\";\n }\n \n return loginUrl || \"/login\";\n};\n \nexport const setHeaderAvatar = (src: string): void => {\n let items: any = document.querySelectorAll(\"[data-id=header-avatar]\");\n if (items.length) {\n items[0].style.display = \"\";\n items[0].getElementsByTagName(\"img\")[0].src = src;\n }\n};\n \nexport const setHeaderUserName = (name: string): void => {\n let items: any = document.querySelectorAll(\".header-user-full-name\");\n for (let i = items.length; i--; ) {\n items[i].innerHTML = name;\n }\n};\n \nexport const setHeaderColor = (headerColor: string): void => {\n let items: any = document.querySelectorAll(\n \".ant-layout.ant-layout-has-sider\"\n );\n if (items.length) {\n items[0].style.borderLeft = headerColor.startsWith(\"#000\")\n ? \"none\"\n : \"5px solid \" + headerColor;\n }\n};\n \nexport const setLogo = (logoUrl: string): void => {\n let items: any = document.querySelectorAll(\".div-organization-logo\");\n if (items.length) {\n if (logoUrl !== items[0].src) {\n items[0].src = logoUrl;\n }\n }\n};\n \nexport const getContext = (keyPath: string): any => {\n let contextString: string = window.localStorage.getItem(\"context\") || \"{}\",\n context: any;\n \n try {\n context = JSON.parse(contextString);\n } catch (err) {\n window.localStorage.setItem(\"context\", \"{}\");\n context = {};\n }\n \n if (!keyPath) {\n return JSON.parse(context);\n } else {\n return getObjectKey(context, keyPath);\n }\n};\n \nexport const reloadPage = (): void => {\n window.location.href = window.location.href + \"\";\n};\n \nexport const loadPage = (url?: string): void => {\n window.location.href = url || getLoginUrl();\n};\n \nexport const refreshPage = (history: any) => {\n //\n //Refresh page / route without reloading the page completely\n //\n const refreshUri = window.location.pathname;\n history.replace(\"/refresh\" + refreshUri);\n \n setTimeout(() => {\n history.replace(refreshUri);\n }, 100);\n};\n \nexport const loadingIndicatorStart = (): void => {\n document.body.classList.add(\"loading-indicator\");\n};\n \nexport const loadingIndicatorEnd = (): void => {\n document.body.classList.remove(\"loading-indicator\");\n};\n \nexport const uuidv4 = (faviconUrl?: string): string => {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n //eslint-disable-next-line\n var r = (Math.random() * 16) | 0,\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n \nexport const getObjectKey = (obj: any, keyPath: string): any => {\n let s: any = keyPath.replace(/\\[(\\w+)\\]/g, \".$1\");\n s = s.replace(/^\\./, \"\");\n let a = s.split(\".\");\n \n for (let i = 0, n = a.length; i < n; ++i) {\n let k = a[i];\n if (k in obj) {\n obj = obj[k];\n } else {\n return;\n }\n }\n \n return obj;\n};\n \nexport const stringToUrlString = (aString: string): string => {\n return aString\n .replace(/ +/g, \"-\")\n .replace(/[^a-zA-Z0-9-_]/g, \"\")\n .toLowerCase();\n};\n \nexport const scrollToElement = (elementSelector: string) => {\n let items: any = document.querySelectorAll(elementSelector);\n if (items.length) {\n items[0].scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n};\n \nexport const closePopover = () => {\n //mousedown only works on desktops, touchstart on all\n if ('ontouchstart' in document.documentElement) {\n // console.log('0')\n setTimeout(function () {\n document.dispatchEvent(\n new MouseEvent(\"touchstart\", {\n bubbles: true,\n view: window,\n })\n );\n }, 150);\n } else {\n // console.log('1')\n setTimeout(function () {\n document.dispatchEvent(\n new MouseEvent(\"mousedown\", {\n bubbles: true,\n view: window,\n })\n );\n }, 150);\n }\n \n \n};\n \nexport const clientStorageClear = () => {\n let assetTableFiltersString: any = window.localStorage.getItem(\"asset-table-filters\")\n \n localStorage.clear();\n sessionStorage.clear();\n \n window.localStorage.setItem(\"asset-table-filters\", assetTableFiltersString);\n};\n \nexport const contentExists = (): boolean => {\n let items: any = document.querySelectorAll(\".ant-layout-content\");\n for (let i = items.length; i--; ) {\n if ((items[i].innerHTML || \"\") !== \"\") {\n return true;\n }\n }\n return false;\n};\n \nexport const messageExists = (messageText: string): boolean => {\n let items: any = document.querySelectorAll(\n \".ant-message .ant-message-custom-content span\"\n );\n for (let i = items.length; i--; ) {\n if (items[i].innerHTML === messageText) {\n return true;\n }\n }\n return false;\n};\n \nexport const getParamValueFromHistory = (\n historyState: any,\n param: string\n): string => {\n if (historyState !== undefined) {\n for (let i = 0; i < historyState.length; i++) {\n return historyState[i][param];\n }\n }\n \n return \"\";\n};\n \nexport const getSegmentFromUrl = (position: number): string => {\n return window.location.pathname.split(\"/\")[position] || \"\";\n};\n \nexport const localizeUtcDate = (\n date: string,\n dateFormatOptions: any\n): string => {\n let datum = new Date(date);\n return datum.toLocaleString(undefined, dateFormatOptions).replace(/\\,/g, \"\"); //eslint-disable-line no-useless-escape\n};\n \nexport const sleep = (milliseconds: number): void => {\n const date = Date.now();\n let currentDate = null;\n do {\n currentDate = Date.now();\n } while (currentDate - date < milliseconds);\n};\n \nexport const setElementDisplay = (\n selectorQuery: string,\n displayValue: string\n): void => {\n let items: any = document.querySelectorAll(selectorQuery);\n for (let i = items.length; i--; ) {\n items[i].style.display = displayValue;\n }\n};\n \nexport const isMobile = (): boolean => {\n const userAgent =\n typeof window.navigator === \"undefined\" ? \"\" : navigator.userAgent;\n const mobile = Boolean(\n userAgent.match(\n /Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i\n )\n );\n \n return mobile;\n};\n \nexport const isSilentRequest = (url: string): boolean => {\n const pathname = url.replace(appConfigs.server.URL, \"\").toLowerCase();\n return (\n pathname.startsWith(\"/api/users/\") ||\n pathname.startsWith(\"/ui/api/alerts/dm1/filters\") ||\n pathname.startsWith(\"/ui/api/alerts/signals/filters\") ||\n (pathname.startsWith(\"/ui/api/assets/\") &&\n pathname.startsWith(\"/iqan-connect-key\")) ||\n pathname.startsWith(\"/ui/api/orgreports/\") ||\n pathname.startsWith(\"/api/roles/\")\n );\n};\n \nexport const isContextUrl = (url: string): boolean => {\n const pathname = url.replace(appConfigs.server.URL, \"\").toLowerCase();\n return pathname == \"/ui/api/context\";\n};\n \nexport const initCap = (value: string): string => {\n const words = (value || \"\").toLowerCase().split(\" \");\n \n const capitalWords = words.map((word) => {\n if (word.length < 1) {\n return \"\";\n }\n return word.slice(0, 1).toUpperCase() + word.slice(1);\n });\n \n return capitalWords.join(\" \");\n};\n \nexport const formatGps = (latitude: number, longitude: number): string => {\n \n const latitudeString = latitude.toFixed(5).toString().replace(\".00000\", \"\");\n const longitudeString = longitude.toFixed(5).toString().replace(\".00000\", \"\");\n \n return `${latitudeString} °N, ${longitudeString} °W`;\n};\n \nconst formatLatLngSignal = (ltlngArray: any): string => {\n let formattedSignals: string = \"\";\n let longitude: number = 0;\n let latitude: number = 0;\n if (ltlngArray && ltlngArray.length > 0) {\n ltlngArray.forEach((ltlng: any, index: number) => {\n if (ltlng.name === \"latitude\") {\n latitude =\n ltlng.value !== null\n ? ltlng.value.toFixed(5).toString().replace(\".00000\", \"\")\n : 0;\n } else {\n longitude =\n ltlng.value !== null\n ? ltlng.value.toFixed(5).toString().replace(\".00000\", \"\")\n : 0;\n formattedSignals = `${longitude} °N`;\n }\n });\n }\n if (latitude) {\n formattedSignals = `${latitude} °W ` + formattedSignals;\n }\n return formattedSignals;\n};\n \nconst formatOtherSignals = (formattedSignals: string, signalArray: any) => {\n let signalValues = signalArray.reduce(\n (acc: any, curSignal: any, currentIndex: number) => {\n const { name, value = \"\", units = \"\" } = curSignal;\n const newunits = units !== \"\" ? `[${units}]` : \"\";\n const newvalue =\n value !== null\n ? value.toString().indexOf(\".\") === -1\n ? value.toString().includes('0x')\n ? hexToString(value)\n : value\n : value.toFixed(2)\n : \"NA\";\n if (currentIndex === 0) {\n if (formattedSignals.length > 1) {\n acc = formattedSignals + \"\\n\";\n }\n }\n acc = acc + `${name} ${newunits}: ${newvalue}` + \"\\n\";\n return acc;\n },\n \"\"\n );\n \n return signalValues;\n};\n \nexport const formatSignals = (signals: any): string => {\n let formattedSignals: string = \"\";\n let ltlngArray = signals.filter(\n (s: any) =>\n s.name.toLowerCase() === \"longitude\" ||\n s.name.toLowerCase() === \"latitude\"\n );\n \n if (ltlngArray.length > 0) {\n formattedSignals = formatLatLngSignal(ltlngArray);\n }\n \n \n let signalArray = signals.filter(\n (s: any) =>\n s.name.toLowerCase() !== \"longitude\" &&\n s.name.toLowerCase() !== \"latitude\"\n );\n if (signalArray.length > 0) {\n const signalValues = formatOtherSignals(formattedSignals, signalArray);\n return signalValues;\n } else {\n return formattedSignals;\n }\n};\n \nexport const numberZeroPositive = (value: Number): boolean => {\n return !!value || (\"\".concat(value) || \"x\") === \"0\";\n};\n \nexport const getPermissions = (permission: number): any => {\n var result = [];\n var binaryResult = [];\n \n //convert number to binary format(1,1,1,1)\n while (permission >= 1) {\n binaryResult.unshift(Math.floor(permission % 2));\n permission = permission / 2;\n result.push(binaryResult);\n }\n \n //Based on the binary format , will generate user \"CRUD\" permissions\n for (let i = 0; i < binaryResult.length; i++) {\n if (binaryResult.length == 4) {\n if (i === 0) {\n result[3] = binaryResult[i] === 1 ? true : false;\n }\n if (i === 1) {\n result[2] = binaryResult[i] === 1 ? true : false;\n }\n if (i === 2) {\n result[1] = binaryResult[i] === 1 ? true : false;\n }\n if (i === 3) {\n result[0] = binaryResult[i] === 1 ? true : false;\n }\n }\n if (binaryResult.length == 3) {\n if (i === 0) {\n result[2] = binaryResult[i] === 1 ? true : false;\n result[3] = false;\n }\n if (i === 1) {\n result[1] = binaryResult[i] === 1 ? true : false;\n }\n if (i === 2) {\n result[0] = binaryResult[i] === 1 ? true : false;\n }\n }\n if (result.length == 2) {\n result[0] = binaryResult[1] === 1 ? true : false;\n result[1] = binaryResult[0] === 1 ? true : false;\n result[2] = false;\n result[3] = false;\n }\n }\n \n return result;\n};\n \nexport const getPermissionsList = (permission: number): any => {\n var result = [];\n var binaryResult = [];\n \n //convert number to binary format(1,1,1,1)\n while (permission >= 1) {\n binaryResult.unshift(Math.floor(permission % 2));\n permission = permission / 2;\n result.push(binaryResult);\n }\n \n //Based on the binary format , will generate user \"CRUD\" permissions\n for (let i = 0; i < binaryResult.length; i++) {\n if (binaryResult.length == 4) {\n if (i === 0) {\n result[3] = binaryResult[i] === 1 ? 1 : 0;\n }\n if (i === 1) {\n result[2] = binaryResult[i] === 1 ? 1 : 0;\n }\n if (i === 2) {\n result[1] = binaryResult[i] === 1 ? 1 : 0;\n }\n if (i === 3) {\n result[0] = binaryResult[i] === 1 ? 1 : 0;\n }\n }\n if (binaryResult.length == 3) {\n if (i === 0) {\n result[2] = binaryResult[i] === 1 ? 1 : 0;\n result[3] = 0;\n }\n if (i === 1) {\n result[1] = binaryResult[i] === 1 ? 1 : 0;\n }\n if (i === 2) {\n result[0] = binaryResult[i] === 1 ? 1 : 0;\n }\n }\n if (result.length == 2) {\n result[0] = binaryResult[1] === 1 ? 1 : 0;\n result[1] = binaryResult[0] === 1 ? 1 : 0;\n result[2] = 0;\n result[3] = 0;\n }\n }\n \n return result;\n};\n \nexport const permissionsList = (tableData: any): any => {\n var permissionsList = [];\n var binaryResult = [];\n \n //convert number to binary format(1,1,1,1)\n //Based on the binary format , will generate user \"CRUD\" permissions\n \n for (let i = 0; i < tableData.permissions.length; i++) {\n let permission = tableData.permissions[i].permissionLevel;\n let permissionId = tableData.permissions[i].permissionId;\n let bynaryData = [];\n let result = [];\n \n while (permission >= 1) {\n binaryResult.unshift(Math.floor(permission % 2));\n permission = permission / 2;\n result.push(binaryResult);\n }\n permission = 0;\n \n for (let j = 0; j < binaryResult.length; j++) {\n if (binaryResult.length == 4) {\n if (j === 0) {\n bynaryData[3] = binaryResult[j] === 1 ? 1 : 0;\n }\n if (j === 1) {\n bynaryData[2] = binaryResult[j] === 1 ? 1 : 0;\n }\n if (j === 2) {\n bynaryData[1] = binaryResult[j] === 1 ? 1 : 0;\n }\n if (j === 3) {\n bynaryData[0] = binaryResult[j] === 1 ? 1 : 0;\n }\n }\n if (binaryResult.length == 3) {\n if (j === 0) {\n bynaryData[2] = binaryResult[j] === 1 ? 1 : 0;\n bynaryData[3] = 0;\n }\n if (j === 1) {\n bynaryData[1] = binaryResult[j] === 1 ? 1 : 0;\n }\n if (j === 2) {\n bynaryData[0] = binaryResult[j] === 1 ? 1 : 0;\n }\n }\n if (binaryResult.length == 2) {\n bynaryData[0] = binaryResult[1] === 1 ? 1 : 0;\n bynaryData[1] = binaryResult[0] === 1 ? 1 : 0;\n bynaryData[2] = 0;\n bynaryData[3] = 0;\n }\n }\n \n let permissionList = {\n permissionId: permissionId,\n permissions: bynaryData,\n };\n permissionsList.push(permissionList);\n binaryResult = [];\n }\n \n return permissionsList;\n};\n \nexport const convertBinaryToValue = (permissionsList: any) => {\n let value;\n var permissions = [];\n \n for (let i = 0; i < permissionsList.length; i++) {\n if (permissionsList[i].permissions.length > 0) {\n permissionsList[i].permissions[0] =\n permissionsList[i].permissions[0] === 1 ? 1 : 0;\n permissionsList[i].permissions[1] =\n permissionsList[i].permissions[1] === 1 ? 1 : 0;\n permissionsList[i].permissions[2] =\n permissionsList[i].permissions[2] === 1 ? 1 : 0;\n permissionsList[i].permissions[3] =\n permissionsList[i].permissions[3] === 1 ? 1 : 0;\n }\n \n let permissionReverse = permissionsList[i].permissions.reverse();\n let binaryString = permissionReverse.join(\"\");\n value = parseInt(binaryString, 2);\n value = value > 1 ? value : 0;\n \n let permission = { id: permissionsList[i].permissionId, value: value };\n permissions.push(permission);\n permissionsList[i].permissions.reverse();\n }\n \n return permissions;\n};\n \nexport const getOrgPermissionByName = (orgPermissionsList: any, category: string, permissionName: string) => {\n if (orgPermissionsList) {\n if ((category in orgPermissionsList)) {\n if ((permissionName in orgPermissionsList[category])) {\n return orgPermissionsList[category][permissionName]\n }\n }\n }\n return false\n}\n \nexport const getOrgPermissionsByCategory = (orgPermissionsList: any, category: string) => {\n if (orgPermissionsList) {\n if ((category in orgPermissionsList)) {\n return orgPermissionsList[category]\n }\n }\n return null\n}\n \nexport const formatTagsForPosting = (tagArray: any[]): string => {\n let newTags: string[] = [],\n tagArrayNew: any[string] = [];\n \n tagArray?.forEach((tag: any) => {\n newTags.push(tag.value);\n });\n \n tagArrayNew[\"new\"] = newTags;\n \n return JSON.stringify(Object.assign({}, tagArrayNew));\n};\n \nexport const sortAlphabetically = (a: any, b: any) => {\n let fa = a.tagName.toUpperCase(),\n fb = b.tagName.toUpperCase();\n \n if (fa < fb) {\n return -1;\n }\n if (fa > fb) {\n return 1;\n }\n return 0;\n};\n \nexport const rolespermissionsList = (tableData: any): any => {\n var permissionsList = [];\n var binaryResult = [];\n \n //convert number to binary format(1,1,1,1)\n //Based on the binary format , will generate user \"CRUD\" permissions\n \n for (let i = 0; i < tableData.data.permissions.length; i++) {\n let permission = tableData.data.permissions[i].permission_level;\n let permissionId = tableData.data.permissions[i].permissionId;\n let bynaryData = [];\n let result = [];\n \n while (permission >= 1) {\n binaryResult.unshift(Math.floor(permission % 2));\n permission = permission / 2;\n result.push(binaryResult);\n }\n permission = 0;\n \n for (let j = 0; j < binaryResult.length; j++) {\n bynaryData[0] = 0;\n bynaryData[1] = 0;\n bynaryData[2] = 0;\n bynaryData[3] = 0;\n }\n \n let permissionList = {\n permissionId: permissionId,\n permissions: bynaryData,\n };\n permissionsList.push(permissionList);\n binaryResult = [];\n }\n \n return permissionsList;\n};\n \nexport const matchWords = (stringToSearch: any, words: any): any => {\n if (words) {\n var regexMetachars = /[(){[*+?.\\\\^$|]/g;\n \n words = words.split(\" \");\n \n for (var i = 0; i < words.length; i++) {\n words[i] = words[i].replace(regexMetachars, \"\\\\$&\");\n }\n \n var regex = new RegExp(\"\\\\b(?:\" + words.join(\"|\") + \")\\\\b\", \"gi\");\n \n return stringToSearch.match(regex) || [];\n } else {\n return [];\n }\n};\n \nexport const getGPSEventsWidgetIconDetails = (\n point1: google.maps.LatLng,\n point2: google.maps.LatLng,\n severity: string | undefined,\n color: string = \"#2b7cab\"\n): any => {\n let icon;\n const angleDegrees = google.maps.geometry.spherical.computeHeading(\n point1,\n point2\n );\n \n if (severity == \"GPS\") {\n icon = {\n path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,\n fillColor: \"#3377ff\",\n fillOpacity: 1.0,\n rotation: angleDegrees,\n strokeColor: \"#1b4db3\",\n strokeWeight: 2,\n scale: 2,\n };\n } else {\n icon = {\n path: google.maps.SymbolPath.CIRCLE,\n fillColor: color,\n fillOpacity: 1.0,\n rotation: angleDegrees,\n strokeColor: color,\n strokeWeight: 3,\n scale: 8,\n };\n }\n \n // if (severity == \"critical\") {\n // icon = {\n // path: google.maps.SymbolPath.CIRCLE,\n // fillColor: \"#de3131\",\n // fillOpacity: 1.0,\n // rotation: angleDegrees,\n // strokeColor: \"#ad2b2b\",\n // strokeWeight: 3,\n // scale: 12,\n // }\n // } else if (severity == \"warning\") {\n // icon = {\n // path: google.maps.SymbolPath.CIRCLE,\n // fillColor: \"#edb228\",\n // fillOpacity: 1.0,\n // rotation: angleDegrees,\n // strokeColor: \"#bd8f26\",\n // strokeWeight: 3,\n // scale: 12,\n // }\n // } else if (severity == \"info\") {\n // icon = {\n // path: google.maps.SymbolPath.CIRCLE,\n // fillColor: \"#2c9bdb\",\n // fillOpacity: 1.0,\n // rotation: angleDegrees,\n // strokeColor: \"#2b7cab\",\n // strokeWeight: 3,\n // scale: 12,\n // }\n // } else {\n // icon = {\n // path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,\n // fillColor: \"#3377ff\",\n // fillOpacity: 1.0,\n // rotation: angleDegrees,\n // strokeColor: \"#1b4db3\",\n // strokeWeight: 2,\n // scale: 4,\n // }\n // }\n \n return icon;\n};\n \nexport const rad = (x: number) => {\n return (x * Math.PI) / 180;\n};\n \nexport const getDistance = (p1: google.maps.LatLng, p2: google.maps.LatLng) => {\n let R = 6378137; // Earth’s mean radius in meter\n let dLat = rad(p2.lat() - p1.lat());\n let dLong = rad(p2.lng() - p1.lng());\n let a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(rad(p1.lat())) *\n Math.cos(rad(p2.lat())) *\n Math.sin(dLong / 2) *\n Math.sin(dLong / 2);\n let c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n let d = R * c;\n return d; // returns the distance in meter\n};\n \nexport const numberWithCommas = (x: number | string) => {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n \nexport const getPercentageChange = (oldNumber: number, newNumber: number) => {\n var decreaseValue = newNumber - oldNumber;\n if (oldNumber == 0) { return (decreaseValue).toFixed(2); }\n \n return ((decreaseValue / oldNumber) * 100).toFixed(2);\n}\n \nexport const groupObjsByValue = (objectArray: any[], property: string) => {\n return objectArray.reduce(function (acc, obj) {\n var key = obj[property];\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(obj);\n return acc;\n }, {});\n};\n \n/*\n export const getObjectKeys = (\n obj: any\n ):any => {\n let keys:any = [];\n \n for (var key in obj) {\n keys.push(key);\n if (typeof obj[key] === \"object\") {\n let subkeys:any = getObjectKeys(obj[key]);\n keys = keys.concat(subkeys.map(function(subkey:any) {\n return key + \".\" + subkey;\n }));\n }\n }\n \n return keys;\n }\n*/\n \nexport const getToken=()=>{\n let oktaStorage:string = window.localStorage.getItem(\"okta-token-storage\") || \"{}\",\n oktaStorageJson:any = JSON.parse(oktaStorage);\n let token=null;\n if(oktaStorageJson.idToken !== undefined)\n {\n token= (oktaStorageJson.idToken || oktaStorageJson.idToken.idToken);\n }\n return token;\n}\n \nexport const checkOktaTokenExpired=()=>{\n let isTokenExpired: boolean =false;\n let oktaStorage:string = window.localStorage.getItem(\"okta-token-storage\") || \"{}\",\n oktaStorageJson:any = JSON.parse(oktaStorage);\n if(oktaStorageJson.idToken === undefined)\n {\n isTokenExpired =true;\n }\n else\n {\n const expirationTime = new Date(oktaStorageJson.idToken.expiresAt * 1000);\n const now = new Date();\n if(expirationTime.getTime() < now.getTime()){\n isTokenExpired=true;\n }\n }\n \n return isTokenExpired;\n}\n \n \nexport const setAssetTableFilters = (newAssetTableFilters: assetTableFilter) => {\n \n window.localStorage.setItem(\"asset-table-filters\", JSON.stringify(newAssetTableFilters));\n let assetTableFilters = window.localStorage.getItem(\"asset-table-filters\");\n \n return assetTableFilters\n}\n \n \nexport const getAssetTableFilters = () => {\n \n let assetTableExistingFilters: any = window.localStorage.getItem(\"asset-table-filters\")\n \n if (JSON.parse(assetTableExistingFilters)) {\n \n let assetTableFiltersString: any = window.localStorage.getItem(\"asset-table-filters\")\n let assetTableFilters: assetTableFilter = JSON.parse(assetTableFiltersString);\n \n return assetTableFilters\n \n } else {\n \n setAssetTableFilters(\n {\n page: 1,\n status: 'active',\n searchText: '',\n sortColumn: 'asset',\n sortDirection: 'ascend',\n alertInterval: '1 day',\n listMode: true,\n filters: { tags: null },\n }\n )\n \n let assetTableFiltersString: any = window.localStorage.getItem(\"asset-table-filters\")\n let assetTableFilters: assetTableFilter = JSON.parse(assetTableFiltersString);\n \n return assetTableFilters\n \n }\n \n}\n \n \nexport const resetAssetTableFilters = ():assetTableFilter => {\n \n setAssetTableFilters(\n {\n page: 1,\n status: 'active',\n searchText: '',\n sortColumn: 'asset',\n sortDirection: 'ascend',\n alertInterval: '1 day',\n listMode: true,\n filters: {tags: null},\n }\n )\n \n let assetTableFiltersString: any = window.localStorage.getItem(\"asset-table-filters\")\n let assetTableFilters:assetTableFilter = JSON.parse(assetTableFiltersString);\n \n return assetTableFilters\n}\n \n \nexport const isAssetTableFiltersSet = ():boolean => {\n \n let assetTableFilters = window.localStorage.getItem(\"asset-table-filters\");\n \n let initialFilterState = {\n page: 1,\n status: 'active',\n searchText: '',\n sortColumn: 'asset',\n sortDirection: 'ascend',\n alertInterval: '1 day',\n listMode: true,\n filters: {tags: null},\n };\n \n if (JSON.stringify(initialFilterState) === assetTableFilters) {\n return false\n }\n \n return true\n}\n \nexport const formatNumber = (input: any): any => {\n const value = Number(input).toFixed(2).replace(\".00\", \"\");\n \n return value;\n};\n \nexport const hexToString = (hexString:any): string => {\n // Remove the '0x' prefix and initial 'ff' bytes\n let cleanHexString = hexString.toString().replace(/^0x/, '').replace(/^ff+/, '');\n \n // Split the cleaned hex string into an array of byte pairs\n let bytePairs = cleanHexString.match(/.{1,2}/g) || [];\n \n // Reverse the order of the byte pairs\n let reversedBytePairs = bytePairs.reverse();\n \n // Convert the reversed byte pairs to a byte array\n let bytesArray = reversedBytePairs.map((bytePair:any) => parseInt(bytePair, 16));\n \n // Decode bytes using TextDecoder, assuming UTF-8 encoding\n const decoder = new TextDecoder('utf-8');\n return decoder.decode(new Uint8Array(bytesArray));\n}\n \nexport const templateContainsMSIntervals = (datapoints:string): boolean => {\n var millSecExists = false;\n let dataPointsList;\n \n try {\n \n dataPointsList = JSON.parse(datapoints);\n \n dataPointsList?.map((datapoint: any) => {\n if(datapoint.update_interval.includes(\"ms\")){\n if(!datapoint.update_interval.includes(\"000\")){\n millSecExists = true\n }\n }\n })\n \n return millSecExists;\n \n } catch (error) {\n \n return millSecExists;\n \n }\n \n}\n \nexport const childNodes = (signals: any) => {\n return {\n key: signals._id,\n title: signals.label,\n };\n };\n \n export const createTreeStructure = (collection: any) => {\n return {\n key: collection._id,\n title: collection.name,\n children: collection.values && collection.values.map(childNodes),\n };\n };\n \n \nexport const getTimescaleFilterText = (\n DataSearchRange: [Moment, Moment],\n timeRangeValueLocal: any,\n aggregation: any,\n granularity: any,\n isNotMapWidget: any,\n GranularityInit?: any\n) => {\n \n let mapGranularity = \"Raw Data\"\n \n let timeRange = timeRangeValueLocal == 'Custom' ? `${DataSearchRange[0].format('MM/DD/YY HH:mma')} - ${DataSearchRange[1].format('MM/DD/YY HH:mma')}` : timeRangeValueLocal\n let text = ''\n let granularityTmp = '1 Minute'\n let customGranularity = granularity\n let shouldQuery = true\n \n switch (timeRangeValueLocal) {\n case 'Latest 30 minutes':\n text = `${granularity == 'Automatic' ? `Raw Data | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(30, \"minute\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : 'Raw Data' : mapGranularity\n break\n case 'Latest hour':\n text = `${granularity == 'Automatic' ? `Raw Data | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(1, \"hours\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : 'Raw Data' : mapGranularity\n break\n case 'Latest 4 hours':\n text = `${granularity == 'Automatic' ? `1 Minute | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(4, \"hours\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : '1 Minute' : mapGranularity\n break\n case 'Latest 12 hours':\n text = `${granularity == 'Automatic' ? `1 Minute | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(12, \"hours\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : '1 Minute' : mapGranularity\n break\n case 'Latest 24 hours':\n text = `${granularity == 'Automatic' ? `1 Minute | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(24, \"hours\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : '1 Minute' : mapGranularity\n break\n case 'Latest 48 hours':\n text = `${granularity == 'Automatic' ? `1 Minutes | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(48, \"hours\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : '1 Minutes' : mapGranularity\n break\n case 'Latest 3 days':\n text = `${granularity == 'Automatic' ? `1 Minutes | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(3, \"days\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : '1 Minutes' : mapGranularity\n break\n case 'Latest 7 days':\n text = `${granularity == 'Automatic' ? `1 Hour | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(8, \"days\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : '1 Hour' : mapGranularity\n break\n case 'Latest 30 days':\n text = `${granularity == 'Automatic' ? `1 Day | ${aggregation}` : `${granularity} | ${aggregation}`}`\n DataSearchRange = [moment().subtract(31, \"days\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : '1 Day' : mapGranularity\n break\n case 'Custom':\n \n let granularityBaseOnDate = '';\n let differenceInMinutes = moment.duration(DataSearchRange[1].diff(DataSearchRange[0])).asMinutes();\n \n if (GranularityInit == 'Automatic') {\n if (differenceInMinutes <= 120) { // 2 Hours or less\n granularityBaseOnDate = 'Raw Data'\n } else if (differenceInMinutes <= 2880) { // 2 Day or less\n granularityBaseOnDate = '1 Minute'\n } else if (differenceInMinutes <= 10080) { // 4 Days or less\n granularityBaseOnDate = '5 Minutes'\n } else if (differenceInMinutes < 43200) { // 30 Days or less\n granularityBaseOnDate = '1 Hour'\n } else {\n granularityBaseOnDate = '1 Day'\n }\n } else {\n granularityBaseOnDate = GranularityInit\n }\n \n customGranularity = granularityBaseOnDate\n \n text = `${granularity == 'Automatic' ? `${granularityBaseOnDate} | ${aggregation}` : `${granularity} | ${aggregation}`}`\n \n if (GranularityInit == 'Automatic') {\n text = `${granularityBaseOnDate} | ${aggregation}`\n }\n \n granularityTmp = granularityBaseOnDate\n \n break\n case '':\n granularityTmp = ``\n text = `Click to Filter`\n DataSearchRange = [moment().subtract(48, \"hours\"), moment()]\n granularityTmp = isNotMapWidget ? granularity != 'Automatic' ? granularity : 'Raw Data' : mapGranularity\n break\n default:\n shouldQuery = false\n }\n \n return {\n shouldQuery: shouldQuery,\n granularityDisplay: text,\n granularityTmp: granularityTmp,\n DataSearchRange: DataSearchRange,\n customGranularity: customGranularity,\n timeRange: timeRange\n };\n};\n \n \n \n \nexport const getAvailableGranularity = (\n DataSearchRange: [Moment, Moment],\n timeRangeValueLocal: any,\n applyLimits: boolean\n) => {\n \n let AvailableGranularity = 0\n \n if (applyLimits) {\n \n switch (timeRangeValueLocal) {\n case 'Latest 30 minutes':\n AvailableGranularity = 0\n break\n case 'Latest hour':\n AvailableGranularity = 0\n break\n case 'Latest 4 hours':\n AvailableGranularity = 1\n break\n case 'Latest 12 hours':\n AvailableGranularity = 2\n break\n case 'Latest 24 hours':\n AvailableGranularity = 2\n break\n case 'Latest 48 hours':\n AvailableGranularity = 2\n break\n case 'Latest 3 days':\n AvailableGranularity = 3\n break\n case 'Latest 7 days':\n AvailableGranularity = 4\n break\n case 'Latest 30 days':\n AvailableGranularity = 5\n break\n case 'Custom':\n \n let differenceInMinutes = moment.duration(DataSearchRange[1].diff(DataSearchRange[0])).asMinutes();\n \n if (differenceInMinutes <= 60) { // below 1 hour show raw data\n AvailableGranularity = 0\n } else if (differenceInMinutes > 60 && differenceInMinutes < 240) { // up to 4 Hours\n AvailableGranularity = 1\n } else if (differenceInMinutes >= 240 && differenceInMinutes < 2880) { // up to 48 Hours\n AvailableGranularity = 2\n } else if (differenceInMinutes >= 2880 && differenceInMinutes < 10080) { // up to 7 Days\n AvailableGranularity = 3\n } else if (differenceInMinutes >= 10080 && differenceInMinutes < 43200) { // up to 30 Days\n AvailableGranularity = 5\n } else if (differenceInMinutes >= 43200 && differenceInMinutes < 86400 ) { // up to 60 Days\n AvailableGranularity = 5\n } else if (differenceInMinutes >= 86400 && differenceInMinutes < 129600 ) { // up to 90 Days\n AvailableGranularity = 6\n } else { // Greater than 90 days\n AvailableGranularity = 7\n }\n break\n \n default:\n AvailableGranularity = 0\n }\n }\n \n return AvailableGranularity;\n};\n \nexport const checkObjectKeyValuesNotEmpty = (obj:any) => {\n for (let key in obj) {\n if (obj[key] === undefined || obj[key] === '' || obj[key] === null) {\n return false;\n }\n }\n return true;\n}","export const initialState = {\n map: \"\",\n mapMode: \"\",\n loading: false,\n assetDrawer: {\n instance: 0,\n show: false,\n width: 440,\n title: \"\",\n mode: \"\",\n cluster: {\n assets: [],\n filteredAssets: [],\n zoomTo: null,\n show: false \n },\n assetSearch: {\n assets: [],\n show: false\n }\n },\n fleet: { \n assets: [],\n filteredAssets: []\n },\n assetSearchValue: '',\n assetSearchFilters: {\n critical: false,\n warning: false,\n info: false,\n dm1: false,\n online: false,\n offline: false,\n asset_down: false\n },\n preSearchAssetList: [],\n showFilterPanel: false,\n filterEnabled:true,\n filters: {\n critical: false,\n warning: false,\n info: false,\n dm1: false\n },\n filterCounts: {\n critical: 0,\n warning: 0,\n info: 0,\n dm1: 0\n },\n preferedSignals: {\n assetId: null, \n signals: []\n },\n tooltip: {\n visibility: false,\n overlay: null,\n marker: null, \n gmarker: null, \n asset: null \n }\n};\n ","import { produce as immerProduce } from \"immer\";\nimport { matchWords } from \"../../../utils/commonHelpers\";\nimport { initialState } from \"./state\";\n\nexport function fleetOverviewState(state = initialState, action: any) {\n\n switch (action.type) {\n case \"FLEET_OVERVIEW_ASSET_DRAWER_STATE\":\n return immerProduce(state, draft => {\n draft.assetDrawer.show = action.state;\n if (action.title) {\n draft.assetDrawer.title = action.title;\n }\n if (action.title) {\n draft.assetDrawer.mode = action.mode;\n }\n if (action.state) {\n draft.assetDrawer.width = Math.min(window.innerWidth, 440);\n }\n });\n case \"FLEET_OVERVIEW_CLUSTER_STATE\":\n return immerProduce(state, draft => {\n draft.assetDrawer.cluster.show = action.state;\n });\n case \"FLEET_OVERVIEW_CLUSTER_INFO_SEARCH\":\n return immerProduce(state, draft => {\n const searchText = action.searchText.toLowerCase().trim();\n draft.assetDrawer.cluster.filteredAssets =\n state.assetDrawer.cluster.assets\n .filter((asset: any, index: number) => (\n (asset.name || asset.mastertag).toLowerCase().includes(searchText) ||\n asset.orgName.toLowerCase().includes(searchText)\n ));\n });\n case \"FLEET_OVERVIEW_CLUSTER_SELECTED\":\n return immerProduce(state, draft => {\n draft.assetDrawer.cluster.assets =\n state.fleet.filteredAssets\n .filter((asset: any, index: number) => (\n action.ids.includes(asset.id)\n ));\n draft.assetDrawer.cluster.filteredAssets = [...draft.assetDrawer.cluster.assets];\n draft.assetDrawer.cluster.zoomTo = action.zoomTo;\n });\n case \"FLEET_OVERVIEW_ASSET_SEARCH_STATE\":\n return immerProduce(state, draft => {\n draft.assetDrawer.assetSearch.show = action.state;\n });\n case \"FLEET_OVERVIEW_ASSET_SEARCH_SELECTED\":\n return immerProduce(state, draft => {\n draft.assetDrawer.assetSearch.assets = state.fleet.filteredAssets;\n });\n case \"FLEET_OVERVIEW_ASSET_SEARCH_SEARCH\":\n return immerProduce(state, draft => {\n const searchText = action.searchText.toLowerCase().trim();\n draft.assetDrawer.assetSearch.assets =\n state.fleet.filteredAssets\n .filter((asset: any, index: number) => {\n if (asset.name.toLowerCase().includes(searchText.toLowerCase()) || asset.mastertag.toLowerCase().includes(searchText.toLowerCase()) || (asset.tagsSorted != null ? matchWords(asset.tagsSorted?.join().toLowerCase(), searchText).length > 0 : false)) return asset\n });\n\n });\n case \"FLEET_OVERVIEW_GLOBAL_SEARCH_SUCCESS\":\n return immerProduce(state, draft => {\n draft.loading = false;\n draft.assetDrawer.assetSearch.assets = action.assets;\n });\n case \"FLEET_OVERVIEW_FILTERS_TOGGLE\":\n return immerProduce(state, draft => {\n draft.assetDrawer.cluster.show = false;\n draft.assetDrawer.assetSearch.show = false;\n\n updateFilter(state, draft, action.filterName);\n //\n //OPS-1143 \n //Going around the known Google Maps bug\n if (action.mapActions && (draft.fleet.filteredAssets.length || 0) !== 0) {\n setTimeout(function () {\n action.mapActions.zoomToFit();\n }, 500);\n }\n //\n });\n case \"FLEET_OVERVIEW_FILTERS_RESET\":\n return immerProduce(state, draft => {\n resetFilters(state, draft);\n //\n //OPS-1143 \n //Going around the known Google Maps bug\n if (action.mapActions && (draft.fleet.filteredAssets.length || 0) !== 0) {\n setTimeout(function () {\n action.mapActions.zoomToFit();\n }, 500);\n }\n //\n });\n case \"TOGGLE_MARKER_TOOLTIP\":\n return immerProduce(state, draft => {\n draft.tooltip.visibility = action.visibility;\n });\n case \"UPDATE_TOOLTIP_MARKER\":\n return immerProduce(state, draft => {\n draft.tooltip.marker = action.marker;\n draft.tooltip.gmarker = action.gmarker;\n });\n case \"UPDATE_TOOLTIP_ASSET\":\n return immerProduce(state, draft => {\n draft.tooltip.asset = action.asset;\n });\n case \"UPDATE_TOOLTIP_OVERLAY\":\n return immerProduce(state, draft => {\n draft.tooltip.overlay = action.overlay;\n });\n case \"ASSET_DOWN_SUBMITTED_SUCCESS\":\n return immerProduce(state, draft => {\n // draft.tooltip.asset['reportDescription'] = action.record.description;\n });\n case \"FLEET_OVERVIEW_MAP_SUCCESS\":\n return immerProduce(state, draft => {\n draft.loading = false;\n draft.fleet.assets = action.assets;\n draft.preSearchAssetList = action.assets\n if (action.originator === \"useEffect\") {\n let mapFilters = null\n if (action.preferences != null) {\n mapFilters = state.filterEnabled ? action.preferences.map : state.filters;\n }\n //let mapFilters = state.filterEnabled ? action.preferences.map: state.filters;\n if (mapFilters != null &&\n (mapFilters.critical || mapFilters.warning\n || mapFilters.info || mapFilters.dm1)) {\n draft.filters = {\n critical: mapFilters.critical,\n warning: mapFilters.warning,\n info: mapFilters.info,\n dm1: mapFilters.dm1\n };\n draft.fleet.filteredAssets = \n draft.fleet.assets\n .filter((asset:any, index:number) => (\n asset.position &&\n (\n (!draft.filters.critical && !draft.filters.warning && !draft.filters.info && !draft.filters.dm1) ||\n (\n !(!draft.filters.critical && !draft.filters.warning && !draft.filters.info && !draft.filters.dm1) &&\n (\n (draft.filters.critical && asset.recentCriticalCount > 0) ||\n (draft.filters.warning && asset.recentWarningCount > 0) ||\n (draft.filters.info && asset.recentInfoCount > 0) ||\n (draft.filters.dm1 && asset.recentDm1Count > 0)\n )\n )\n )\n )); \n \n }\n else\n {\n draft.filters = {\n critical: false,\n warning: false,\n info: false,\n dm1: false\n };\n draft.fleet.filteredAssets = action.assets.filter((asset:any) => asset.position);\n }\n updateFilterCounts(draft);\n } \n });\n case \"FLEET_PREFERED_SIGNALS_SUCCESS\":\n return immerProduce(state, draft => {\n draft.preferedSignals.assetId = action.asset.assetId;\n draft.preferedSignals.signals = action.asset.preferedSignals;\n });\n case \"SET_SEARCH_ZOOM_TO_FIT_FITLER_MAP\":\n return immerProduce(state, (draft) => {\n draft.assetDrawer.cluster.show = false;\n draft.fleet.assets = action.payload.filterZoomTofit;\n draft.fleet.filteredAssets = action.payload.filterZoomTofit;\n \n if ((draft.fleet.filteredAssets.length || 0) !== 0) {\n setTimeout(function () {\n action.payload.mapActions.zoomToFit();\n }, 500);\n }\n\n });\n case \"SET_SEARCH_ZOOM_TO_FIT_SEARCH_VALUE\":\n return immerProduce(state, (draft) => {\n draft.assetSearchValue = action.payload.assetSearchValue;\n });\n case \"SET_SEARCH_ZOOM_TO_FIT_SEARCH_FILTER\":\n return immerProduce(state, (draft) => {\n draft.assetSearchFilters = action.payload.assetSearchFilters;\n });\n case \"SET_PRE_SEARCH_ZOOM_TO_FIT_ASSET_LIST\":\n return immerProduce(state, (draft) => {\n draft.preSearchAssetList = action.payload.preSearchAssetList;\n });\n case \"SET_FLEET_OVERVIEW_MAP\":\n return immerProduce(state, (draft) => {\n draft.map = action.payload.map;\n });\n default:\n return state;\n }\n}\n\nconst resetFilters = (state: any, draft: any) => {\n draft.filters.critical = false;\n draft.filters.warning = false;\n draft.filters.info = false;\n draft.filters.dm1 = false;\n\n draft.fleet.filteredAssets = state.fleet.assets;\n}\n\nconst updateFilter = (state: any, draft: any, filterName: string) => {\n draft.filters = filterName;\n draft.filterEnabled = false;\n draft.fleet.filteredAssets =\n state.fleet.assets\n .filter((asset: any, index: number) => (\n asset.position &&\n (\n (!draft.filters.critical && !draft.filters.warning && !draft.filters.info && !draft.filters.dm1) ||\n (\n !(!draft.filters.critical && !draft.filters.warning && !draft.filters.info && !draft.filters.dm1) &&\n (\n (draft.filters.critical && asset.recentCriticalCount > 0) ||\n (draft.filters.warning && asset.recentWarningCount > 0) ||\n (draft.filters.info && asset.recentInfoCount > 0) ||\n (draft.filters.dm1 && asset.recentDm1Count > 0)\n )\n )\n )\n ));\n}\n\nconst updateFilterCounts = (draft: any) => {\n\n draft.filterCounts.critical = 0;\n draft.filterCounts.dm1 = 0;\n draft.filterCounts.info = 0;\n draft.filterCounts.warning = 0;\n\n draft.fleet.assets.forEach((asset: any) => {\n if (asset.recentCriticalCount > 0) {\n draft.filterCounts.critical += 1;\n }\n if (asset.recentDm1Count > 0) {\n draft.filterCounts.dm1 += 1;\n }\n if (asset.recentInfoCount > 0) {\n draft.filterCounts.info += 1;\n }\n if (asset.recentWarningCount > 0) {\n draft.filterCounts.warning += 1;\n }\n });\n}","import { combineReducers } from \"redux\";\nimport { fleetOverviewState } from \"./fleetOverviewReducer\";\n\nexport const fleetOverviewReducers = combineReducers({\n fleetOverviewState: fleetOverviewState\n});\n","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n usersList: {\n userMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {}, \n title: \"\",\n pageName: \"\",\n activeTab: \"1\",\n administeredOrgs: [],\n tabs: [\n {\n title: \"User Info\",\n instance: 0,\n disabled: false,\n countries: [],\n userCopy: {\n data: []\n }\n },\n {\n title: \"Organizations\",\n instance: 0,\n disabled: true,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} org${total > 1 ? 's' : ''}`\n }\n }\n },\n {\n title: \"Subscriptions\",\n instance: 0,\n disabled: true,\n searchText: \"\",\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} asset${total > 1 ? 's' : ''}`\n }\n }\n },\n {\n title: \"Activity Subscription\",\n instance: 0,\n disabled: true,\n searchText: \"\",\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} asset${total > 1 ? 's' : ''}`\n }\n }\n }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n }\n },\n roleList: {\n roleMaint: {\n instance: 0,\n title: \"Role and Permission\",\n width: 520,\n visible: false,\n selectonHeader: true,\n record: {},\n currentView: \"list-view\",\n activeTab: \"1\",\n orgRoles:{\n data:{\n roles:[] \n }\n },\n tabs: [\n {\n title: \"Role and Permission Info\",\n instance: 0,\n disabled: false,\n roleCopy: {\n data: []\n }\n }\n ]\n },\n \n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: 30,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n }\n }, \n data:{\n initialized: false, \n \"status\": \"\",\n \"timestamp\": \"\", \n permissions:[]\n }\n};\n ","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function usersState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n\n switch (action.type) {\n case \"USERS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.usersList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"USERS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.usersList.searchText = action.searchText;\n });\n case \"USERS_GET_USERS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.usersList.refreshOnUpdate = false;\n draft.usersList.tableData = data;\n draft.usersList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.usersList.tableConfig.pagination.current = action.payload.page;\n });\n case \"USERS_USER_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const\n payload = action.payload,\n instance = Math.random();\n draft.usersList.userMaint.instance = instance;\n draft.usersList.userMaint.width = payload.width;\n draft.usersList.userMaint.visible = true;\n draft.usersList.userMaint.title = payload.title;\n draft.usersList.userMaint.record = payload.record;\n draft.usersList.userMaint.pageName = payload.pageName;\n\n draft.usersList.userMaint.activeTab = \"1\";\n draft.usersList.userMaint.tabs[0].disabled = false;\n draft.usersList.userMaint.tabs[0].instance = instance;\n draft.usersList.userMaint.tabs[0].userCopy!.data = [];\n draft.usersList.userMaint.tabs[1].disabled = Object.keys(payload.record).length === 0;\n draft.usersList.userMaint.tabs[1].instance = instance;\n draft.usersList.userMaint.tabs[2].disabled = Object.keys(payload.record).length === 0;\n draft.usersList.userMaint.tabs[2].instance = instance;\n draft.usersList.userMaint.tabs[3].disabled = Object.keys(payload.record).length === 0;\n draft.usersList.userMaint.tabs[3].instance = instance;\n });\n case \"USERS_USER_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.usersList.userMaint.visible = false;\n draft.usersList.userMaint.tabs[1].tableData = [];\n draft.usersList.userMaint.tabs[2].tableData = [];\n draft.usersList.userMaint.tabs[2].searchText = \"\";\n draft.usersList.userMaint.tabs[3].tableData = [];\n });\n case \"USERS_LIST_REFRESH_ON_UPDATE\":\n return immerProduce(state, draft => {\n draft.usersList.refreshOnUpdate = true;\n });\n case \"USERS_MAINT_REFRESH_INSTANCE\":\n return immerProduce(state, draft => {\n const instance = Math.random();\n action.instances.forEach((element:number) => {\n draft.usersList.userMaint.tabs[element].instance = instance;\n });\n });\n case \"USERS_MAINT_SUCCESS\":\n data = action.payload.data; \n return immerProduce(state, draft => {\n draft.usersList.userMaint.record = data;\n draft.usersList.userMaint.title = \"Edit User :: \" + data.fullName;\n });\n case \"USERS_USER_MAINT_TAB_CHANGE\":\n return immerProduce(state, draft => {\n draft.usersList.userMaint.activeTab = action.tab;\n });\n case \"USERS_USER_MAINT_TABS_ENABLE\":\n return immerProduce(state, draft => {\n if (draft.usersList.userMaint.tabs[1].disabled) {\n draft.usersList.userMaint.tabs[1].disabled = false;\n }\n if (draft.usersList.userMaint.tabs[2].disabled) {\n draft.usersList.userMaint.tabs[2].disabled = false;\n }\n if (draft.usersList.userMaint.tabs[3].disabled) {\n draft.usersList.userMaint.tabs[3].disabled = false;\n }\n });\n case \"USERS_GET_USERS_COPY_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[0].userCopy!.data = data;\n });\n case \"USERS_COUNTRIES_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[0].countries! = data;\n });\n case \"USERS_ADMINISTERED_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.usersList.userMaint.administeredOrgs = data;\n });\n case \"USERS_SUBSCRIPTIONS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[2].tableConfig!.pagination.onChange = action.onPaginationChange;\n });\n case \"USERS_SUBSCRIPTIONS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[2].searchText = action.searchText;\n });\n case \"USERS_SUBSCRIPTIONS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[2].tableData! = data.filter( (ele: any, ind: any) => ind === data.findIndex( (elem: { gatewayId: any; }) => elem.gatewayId === ele.gatewayId));\n draft.usersList.userMaint.tabs[2].tableConfig!.pagination.total = (data.length || 0) > 0 ? data[0].groupsTotal : 0;\n draft.usersList.userMaint.tabs[2].tableConfig!.pagination.current = action.payload.page;\n\n });\n case \"USERS_SUBSCRIPTIONS_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n payload = action.payload;\n if (payload.scope === \"asset\") {\n updateAsset(draft, payload.record, payload.notification, payload.action);\n }\n else {\n updateAssetAlerts(draft, payload.record, payload.notification, payload.action);\n }\n });\n case \"USERS_ORGS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[1].tableConfig!.pagination.onChange = action.onPaginationChange;\n });\n case \"USERS_ORGS_ROLE_UPDATE_SUCCESS\":\n return immerProduce(state, draft => {\n updateOrgUser(state, draft, action.data[0]);\n });\n case \"USERS_ORGS_GET_SUCCESS\":\n data = action.payload.data || [];\n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[1].tableData! = data;\n draft.usersList.userMaint.tabs[1].tableConfig!.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.usersList.userMaint.tabs[1].tableConfig!.pagination.current = action.payload.page;\n });\n case \"USERS_ORGS_REMOVE_SUCCESS\":\n return immerProduce(state, draft => {\n let data = draft.usersList.userMaint.tabs[1].tableData!;\n draft.usersList.userMaint.tabs[1].tableData = data.filter((record:any) => action.payload.orgUserId !== record.orgUserId);\n });\n case \"ROLE_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const\n payload = action.payload,\n instance = Math.random();\n \n draft.roleList.roleMaint.instance = instance;\n draft.roleList.roleMaint.width = payload.width;\n draft.roleList.roleMaint.visible = true;\n draft.roleList.roleMaint.title = payload.title;\n draft.roleList.roleMaint.record = payload.record;\n draft.roleList.roleMaint.activeTab = \"1\";\n draft.roleList.roleMaint.tabs[0].disabled = false;\n draft.roleList.roleMaint.tabs[0].instance = instance;\n draft.roleList.roleMaint.tabs[0].roleCopy!.data = [];\n });\n case \"ROLE_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n // draft.roleList.roleMaint.tabs[0].searchText = \"\";\n draft.roleList.roleMaint.visible = false;\n });\n case \"ROLE_PERMISSION_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.roleList.roleMaint.record = data;\n draft.roleList.roleMaint.title = \"Edit Role :: \" + data.name;\n });\n case \"ROLE_PERMISSION_GET_SUCCESS\":\n data = action.payload.data; \n return immerProduce(state, draft => {\n draft.data.permissions = data;\n });\n case \"USERS_ORG_ROLE_GET_SUCCESS\": \n data = action.payload.data; \n return immerProduce(state, draft => {\n draft.roleList.roleMaint.orgRoles.data.roles = data.data.orgRoles;\n });\n case \"USERS_ORG_USER_ROLE_GET_SUCCESS\": \n data = action.payload.data; \n return immerProduce(state, draft => {\n draft.roleList.roleMaint.orgRoles.data.roles = data; //data.data.orgRolePermissions.filter((res: { roleId: number; }) => res.roleId !== 1); \n });\n case \"USER_ACTIVITY_SUBSCRIPTIONS_GET\": \n data = action.payload.data; \n return immerProduce(state, draft => {\n draft.usersList.userMaint.tabs[3].tableData! = data;\n });\n case \"USERS_ACTIVITY_SUBSCRIPTIONS_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n payload = action.payload;\n updateActivitySubscriptions(draft, payload.record, payload.notification, payload.action);\n });\n default:\n return state;\n }\n}\nconst updateOrgUser = (state: any, draft:any, updatedRecord:any) => {\n state.usersList.userMaint.tabs[1].tableData.forEach((record: any, index: number) => {\n if (record.orgUserId === updatedRecord.orgUserId) {\n draft.usersList.userMaint.tabs[1].tableData[index] = updatedRecord;\n }\n });\n}\n\nconst updateAsset = (draft:any, record:any, notification: string, action: string) => {\n draft.usersList.userMaint.tabs[2].tableData.forEach(function (asset:any) {\n if (asset.key === record.key) {\n asset.children.forEach(function (alert:any) {\n if (notification === \"sms\") {\n alert.alertSms = (action === \"plus\");\n alert.incAlertSms = (action === \"plus\");\n alert.offlineAlertSms = (action === \"plus\");\n }\n if (notification === \"email\") {\n alert.alertEmail = (action === \"plus\");\n alert.incAlertEmail = (action === \"plus\");\n alert.offlineAlertEmail = (action === \"plus\");\n }\n });\n if (notification === \"sms\") {\n asset.assetSmsIndeterminate = false;\n asset.assetSmsChecked = (action === \"plus\");\n }\n else {\n asset.assetEmailIndeterminate = false;\n asset.assetEmailChecked = (action === \"plus\");\n }\n }\n });\n}\n\nconst updateAssetAlerts = (draft:any, record:any, notification: string, action: string) => {\n draft.usersList.userMaint.tabs[2].tableData.forEach(function (asset:any) {\n asset.children.forEach(function (alert:any) {\n if (alert.key === record.key) {\n let checkedCount = 0;\n if (notification === \"sms\") {\n alert.alertSms = (action === \"plus\");\n alert.incAlertSms = (action === \"plus\");\n alert.offlineAlertSms = (action === \"plus\");\n }\n if (notification === \"email\") {\n alert.alertEmail = (action === \"plus\");\n alert.incAlertEmail = (action === \"plus\");\n alert.offlineAlertEmail = (action === \"plus\");\n }\n\n if(notification === \"smsIn\"){\n alert.alertSmsIn = (action === \"plus\");\n }\n if(notification === \"smsOut\"){\n alert.alertSmsOut = (action === \"plus\");\n\n }\n if(notification === \"emailIn\"){\n alert.alertEmailIn = (action === \"plus\");\n }\n if(notification === \"emailOut\"){\n alert.alertEmailOut = (action === \"plus\");\n }\n\n asset.children.forEach(function (alertCount:any) {\n checkedCount = checkedCount + (notification === \"sms\" && alertCount.alertSms ? 1 : 0) + (notification === \"email\" && alertCount.alertEmail ? 1 : 0);\n });\n if (notification === \"sms\") {\n asset.assetSmsIndeterminate = (checkedCount > 0 && checkedCount < asset.children.length);\n asset.assetSmsChecked = (checkedCount === asset.children.length);\n }\n else {\n asset.assetEmailIndeterminate = (checkedCount > 0 && checkedCount < asset.children.length);\n asset.assetEmailChecked = (checkedCount === asset.children.length);\n }\n }\n });\n });\n}\n\nconst updateActivitySubscriptions = (draft:any, record:any, notification: string, action: string) => {\n draft.usersList.userMaint.tabs[3].tableData.forEach(function (activity:any) {\n activity.children.forEach(function (alert:any) {\n if (notification === \"sms\") {\n alert.alertSmsIn = (action === \"plus\"); \n alert.alertSmsOut = (action === \"plus\");\n activity.smsChecked = (action === \"plus\");\n activity.smsIndeterminate = false;\n\n }\n if (notification === \"email\") {\n alert.alertEmailIn = (action === \"plus\");\n alert.alertEmailOut = (action === \"plus\");\n activity.emailChecked = (action === \"plus\");\n activity.emailIndeterminate = false;\n }\n if(notification === \"smsIn\"){\n alert.alertSmsIn = (action === \"plus\");\n //activity.smsIndeterminate = alert.alertSmsOut?true:false;\n if(alert.alertSmsIn && alert.alertSmsOut)\n {\n activity.smsIndeterminate=false;\n activity.smsChecked = true;\n }\n else\n {\n if(!alert.alertSmsIn && !alert.alertSmsOut)\n {\n activity.smsIndeterminate=false;\n }\n else\n {\n activity.smsIndeterminate=true;\n }\n activity.smsChecked = false;\n }\n \n }\n if(notification === \"smsOut\"){\n alert.alertSmsOut = (action === \"plus\");\n if(alert.alertSmsIn && alert.alertSmsOut)\n {\n activity.smsIndeterminate=false;\n activity.smsChecked = true;\n }\n else\n {\n if(!alert.alertSmsIn && !alert.alertSmsOut)\n {\n activity.smsIndeterminate=false;\n }\n else\n {\n activity.smsIndeterminate=true;\n }\n activity.smsChecked = false;\n }\n\n }\n if(notification === \"emailIn\"){\n alert.alertEmailIn = (action === \"plus\");\n if(alert.alertEmailIn && alert.alertEmailOut)\n {\n activity.emailIndeterminate=false;\n activity.emailChecked = true;\n }\n else\n {\n if(!alert.alertEmailIn && !alert.alertEmailOut)\n {\n activity.emailIndeterminate=false;\n }\n else\n {\n activity.emailIndeterminate=true;\n }\n \n activity.emailChecked = false;\n }\n }\n if(notification === \"emailOut\"){\n alert.alertEmailOut = (action === \"plus\");\n if(alert.alertEmailIn && alert.alertEmailOut)\n {\n activity.emailIndeterminate=false;\n activity.emailChecked = true;\n }\n else\n {\n if(!alert.alertEmailIn && !alert.alertEmailOut)\n {\n activity.emailIndeterminate=false;\n }\n else\n {\n activity.emailIndeterminate=true;\n }\n activity.emailChecked = false;\n }\n }\n });\n });\n}","import { combineReducers } from \"redux\";\nimport { usersState } from \"./usersReducer\";\n\nexport const usersReducers = combineReducers({\n usersState: usersState \n});\n","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n roleList: {\n roleMaint: {\n instance: 0,\n title: \"Role and Permission\",\n width: 520,\n visible: false,\n selectonHeader: true,\n mode: \"\",\n record: [],\n successData: [],\n currentView: \"list-view\",\n activeTab: \"1\",\n onFinishTab:\"2\",\n orgs: [],\n orgRoles:{\n data:{\n roles:[] \n }\n },\n roles:{\n data:{\n roles:[] \n }\n },\n tabs: [\n {\n title: \"Role Info\",\n instance: 0,\n disabled: false,\n roleCopy: {\n data: []\n }\n },\n {\n title: \"Add Role and Permissions\",\n instance: 0,\n disabled: false,\n roleCopy: {\n data: []\n }\n }\n ],\n isSubmitButton : false\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: 30,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n },\n tableRolesData: [],\n tableRolesConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n },\n tableOrgData: [],\n tableOrgConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: 30,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n },\n \n },\n rolePermissionList: {\n rolePermissionMaint: {\n instance: 0,\n title: \"Role and Permission\",\n width: 520,\n visible: false,\n selectonHeader: true,\n record: [],\n successData:[],\n currentView: \"list-view\",\n activeTab: \"1\",\n onFinishTab:\"1\",\n orgRoles:{\n data:{\n roles:[] \n }\n }, \n tabs: [\n {\n title: \"Add Role and Permissions\",\n instance: 0,\n disabled: false,\n roleCopy: {\n data: []\n }\n }\n ]\n },\n \n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: 30,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n }\n },\n customerOrgPermissions: [],\n data:{\n initialized: false, \n \"status\": \"\",\n \"timestamp\": \"\", \n permissions:[]\n }\n\n};","import { combineReducers } from \"redux\";\nimport { rolesState } from \"./rolesReducer\";\n\nexport const rolesReducer = combineReducers({\n rolesState: rolesState \n});","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function rolesState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n\n switch (action.type) {\n\n case \"ORG_ROLE_GET_SUCCESS\": \n data = action.payload.data; \n return immerProduce(state, draft => { \n //draft.roleList.roleMaint.orgRoles.data.roles = data.data.orgRolePermissions.shift();\n draft.roleList.roleMaint.orgRoles.data.roles = data.data.orgRolePermissions.filter((res: { roleId: number; }) => res.roleId !== 1);\n draft.roleList.tableRolesData = data.data.orgRolePermissions.filter((res: { roleId: number; }) => res.roleId !== 1);\n draft.roleList.tableRolesConfig.pagination.total = (data.data.orgRolePermissions.length || 0) > 0 ? data.data.orgRolePermissions[0].totalRecords : 0;\n draft.roleList.tableRolesConfig.pagination.current = action.payload.page;\n });\n case \"ROLE_PERMISSIONS_GET_SUCCESS\": \n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.roleList.refreshOnUpdate = false;\n draft.roleList.tableData = data;\n draft.roleList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.roleList.tableConfig.pagination.current = action.payload.page;\n });\n case \"ORG_ROLE_PERMISSIONS_GET_SUCCESS\": \n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.roleList.refreshOnUpdate = false;\n draft.roleList.tableOrgData = data.data.orgRolePermissions;\n draft.roleList.tableOrgConfig.pagination.total = (data.data.orgRolePermissions.length || 0) > 0 ? data.data.orgRolePermissions.permissions[0].totalRecords : 0;\n draft.roleList.tableOrgConfig.pagination.current = action.payload.page;\n });\n case \"ROLE_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const\n payload = action.payload,\n instance = Math.random();\n \n draft.roleList.roleMaint.instance = instance;\n draft.roleList.roleMaint.width = payload.width;\n draft.roleList.roleMaint.visible = true;\n draft.roleList.roleMaint.title = payload.title;\n draft.roleList.roleMaint.mode =payload.mode;\n draft.roleList.roleMaint.record = payload.record;\n draft.roleList.roleMaint.activeTab = \"1\"; \n draft.roleList.roleMaint.tabs[0].disabled = false;\n draft.roleList.roleMaint.tabs[0].instance = instance;\n draft.roleList.roleMaint.tabs[0].roleCopy!.data = [];\n \n });\n case \"ROLE_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n // draft.roleList.roleMaint.tabs[0].searchText = \"\";\n draft.roleList.roleMaint.visible = false;\n });\n case \"ROLE_PERMISSION_MAINT_SUCCESS\":\n data = action.payload.data; \n\n return immerProduce(state, draft => { \n draft.roleList.roleMaint.record = [];\n draft.roleList.roleMaint.record = data.data.orgRolePermissions[0];\n draft.rolePermissionList.rolePermissionMaint.successData = data.data.orgRolePermissions[0];\n //draft.roleList.roleMaint.title = \"Edit Role :: \" + data.data.orgRolePermissions[0].roleName;\n });\n case \"GET_ORG_ROLE_MAINT_GET_SUCCESS\": \n data = action.payload.data; \n return immerProduce(state, draft => {\n draft.roleList.roleMaint.roles.data.roles = data.data.orgRoles;\n });\n case \"ROLE_PERMISSION_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const\n payload = action.payload,\n instance = Math.random();\n \n draft.rolePermissionList.rolePermissionMaint.instance = instance;\n draft.rolePermissionList.rolePermissionMaint.width = payload.width;\n draft.rolePermissionList.rolePermissionMaint.visible = true;\n draft.rolePermissionList.rolePermissionMaint.title = payload.title;\n draft.rolePermissionList.rolePermissionMaint.record = payload.record;\n draft.rolePermissionList.rolePermissionMaint.activeTab = \"1\"; \n draft.rolePermissionList.rolePermissionMaint.tabs[0].disabled = false;\n draft.rolePermissionList.rolePermissionMaint.tabs[0].instance = instance;\n draft.rolePermissionList.rolePermissionMaint.tabs[0].roleCopy!.data = [];\n });\n case \"ROLE_PERMISSION_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n // draft.roleList.roleMaint.tabs[0].searchText = \"\";\n draft.rolePermissionList.rolePermissionMaint.visible = false;\n }); \n case \"ROLES_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.roleList.searchText = action.searchText;\n });\n case \"CUSTONER_ROLE_PERMISSIONS_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.customerOrgPermissions = action.payload.data.data.customerOrgPermissions;\n });\n case \"ROLE_STATUS_MAINT_SUCCESS\":\n data = action.payload.data; \n return immerProduce(state, draft => { \n draft.roleList.roleMaint.record = [];\n draft.roleList.roleMaint.record = data.data.orgRoles[0];\n draft.roleList.roleMaint.successData = data.data.orgRoles[0];\n });\n case \"ROLES_ADMINISTERED_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.roleList.roleMaint.orgs = data;\n });\n case \"ROLES_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.roleList.roleMaint.visible = false;\n });\n case \"ROLES_GET_SUBMIT_BUTTON\":\n return immerProduce(state, draft => {\n draft.roleList.roleMaint.isSubmitButton = action.isSubmitButton; \n }); \n default:\n return state;\n }\n}","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n orgsList: {\n orgMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n selectedTag: [],\n title: \"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"Org Info\",\n instance: 0,\n disabled: false,\n countries: [],\n states: [],\n phoneCountries: [],\n languages: []\n },\n {\n title: \"Settings\",\n instance: 0,\n disabled: true,\n allCapabilities: []\n },\n {\n title: \"Administrators\",\n instance: 0,\n disabled: true,\n searchText: \"\",\n usersAdministered: [],\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} user${total > 1 ? 's' : ''}`\n }\n }\n },\n {\n title: \"Global Subscriptions\",\n instance: 0,\n disabled: true,\n searchText: \"\",\n globalSubscriptions: [],\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} user${total > 1 ? 's' : ''}`\n }\n }\n },\n {\n title: \"Service Plans\",\n instance: 0,\n disabled: false\n },\n {\n title: \"Global Notes\",\n instance: 0,\n disabled: false,\n globalNotes:[],\n tableData: []\n }\n ]\n },\n refreshOnUpdate: false,\n mode: \"all\",\n scope: \"all\",\n searchText: \"\",\n orgId: \"\",\n orgName: \"\",\n orgTree: [],\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} org${total > 1 ? 's' : ''}`\n }\n }\n }\n};\n ","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function orgsState(state = initialState, action:any) {\n let data:any = null;\n\n switch (action.type) { \n case \"ORGS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.orgsList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"ORGS_LIST_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.orgsList.mode = \"all\";\n draft.orgsList.searchText = action.searchText;\n draft.orgsList.orgId = \"\";\n });\n case \"ORGS_LIST_SET_DISPLAY\":\n return immerProduce(state, draft => {\n draft.orgsList.mode = action.mode;\n draft.orgsList.searchText = action.searchText;\n draft.orgsList.orgId = action.orgId;\n draft.orgsList.orgName = action.orgName;\n });\n case \"ORGS_GET_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.refreshOnUpdate = false;\n draft.orgsList.tableData = data;\n draft.orgsList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.orgsList.tableConfig.pagination.current = action.payload.page;\n });\n case \"ORGS_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n \n draft.orgsList.orgMaint.instance = instance;\n draft.orgsList.orgMaint.width = payload.width;\n draft.orgsList.orgMaint.visible = true;\n draft.orgsList.orgMaint.title = payload.title;\n draft.orgsList.orgMaint.record = payload.record;\n draft.orgsList.orgMaint.activeTab = \"1\";\n draft.orgsList.orgMaint.tabs[0].disabled = false;\n draft.orgsList.orgMaint.tabs[0].instance = instance;\n draft.orgsList.orgMaint.tabs[1].disabled = Object.keys(payload.record).length === 0;\n draft.orgsList.orgMaint.tabs[1].instance = instance;\n draft.orgsList.orgMaint.tabs[2].disabled = Object.keys(payload.record).length === 0;\n draft.orgsList.orgMaint.tabs[2].instance = instance;\n }); \n case \"ORGS_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[2].searchText = \"\";\n draft.orgsList.orgMaint.visible = false;\n }); \n case \"ORGS_LIST_REFRESH_ON_UPDATE\":\n return immerProduce(state, draft => {\n draft.orgsList.refreshOnUpdate = true;\n }); \n case \"ORGS_MAINT_REFRESH_INSTANCE\":\n return immerProduce(state, draft => {\n const instance = Math.random();\n action.instances.forEach((element:number) => {\n draft.orgsList.orgMaint.tabs[element].instance = instance;\n });\n }); \n case \"ORG_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.record = data;\n draft.orgsList.orgMaint.title = \"Edit Org :: \" + data.name;\n }); \n case \"ORGS_MAINT_TAB_CHANGE\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.activeTab = action.tab;\n }); \n case \"ORGS_MAINT_TABS_DISABLED\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[1].disabled = action.state;\n draft.orgsList.orgMaint.tabs[2].disabled = action.state;\n draft.orgsList.orgMaint.tabs[3].disabled = action.state;\n }); \n case \"ORGS_COUNTRIES_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[0].countries! = data;\n });\n case \"ORGS_PHONE_COUNTRIES_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[0].phoneCountries! = data;\n }); \n case \"ORGS_COUNTRY_STATES_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[0].states! = data;\n });\n case \"ORGS_ALL_CAPABILITIES\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[1].allCapabilities = data;\n })\n case \"ORGS_LANGUAGES_SUCCESS\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[0].languages! = action.data;\n }); \n case \"ORG_MAINT_ADMIN_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[2].tableConfig!.pagination.onChange = action.onPaginationChange;\n });\n case \"ORG_MAINT_ADMIN_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[2].searchText = action.searchText; \n }); \n \n case \"ORG_MAINT_ADMIN_ORG_USERS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[2].tableData! = data;\n draft.orgsList.orgMaint.tabs[2].tableConfig!.pagination.total = (data !== null && (data.length || 0) > 0 ? data[0].totalRecords : 0);\n draft.orgsList.orgMaint.tabs[2].tableConfig!.pagination.current = action.payload.page;\n }); \n case \"ORG_MAINT_ADMIN_USERS_ADMINSTERED_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[2].usersAdministered! = data;\n });\n case \"ORGS_GLOBAL_SUBSCRIPTIONS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[3].tableConfig!.pagination.onChange = action.onPaginationChange;\n });\n case \"ORGS_GLOBAL_SUBSCRIPTIONS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[3].searchText = action.searchText;\n });\n case \"ORGS_GLOBAL_SUBSCRIPTIONS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[3].tableData! = data;\n draft.orgsList.orgMaint.tabs[3].tableConfig!.pagination.total = (data.length || 0) > 0 ? data[0].groupsTotal : 0;\n draft.orgsList.orgMaint.tabs[3].tableConfig!.pagination.current = action.payload.page;\n\n });\n case \"ORGS_GLOBAL_SUBSCRIPTIONS_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n const payload = action.payload;\n if (payload.scope === \"alert\") {\n updateGlobal(draft, payload.record, payload.notification, payload.action);\n }\n else {\n updateGlobalAlerts(draft, payload.record, payload.notification, payload.action);\n }\n });\n case \"ORG_TAGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, (draft) => {\n draft.orgsList.orgMaint.selectedTag = data;\n }); \n case \"ORGS_GET_GLOBAL_NOTES\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[5].tableData = data;\n });\n case \"ORG_GLOBAL_NOTES_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgsList.orgMaint.tabs[5].tableData = data;\n //draft.orgsList.orgMaint.title = \"Edit Global Notes :: \" + data.name;\n }); \n case \"ORGS_GET_GLOBAL_NOTES_REFRESH_ON_UPDATE\":\n return immerProduce(state, draft => {\n draft.orgsList.refreshOnUpdate = true;\n }); \n default:\n return state;\n } \n}\n\nconst updateGlobal = (draft:any, record:any, notification: string, action: string) => { \n draft.orgsList.orgMaint.tabs[3].tableData.forEach(function (global:any) {\n if (global.key === record.key) {\n // global.children.forEach(function (alert:any) {\n // if (notification === \"sms\") {\n // alert.alertSms = (action === \"plus\"); \n // }\n // if (notification === \"email\") {\n // alert.alertEmail = (action === \"plus\"); \n // }\n // });\n if (notification === \"sms\") {\n global.smsIndeterminate = false;\n global.smsChecked = (action === \"plus\");\n }\n else {\n global.emailIndeterminate = false;\n global.emailChecked = (action === \"plus\");\n }\n }\n });\n}\n\nconst updateGlobalAlerts = (draft:any, record:any, notification: string, action: string) => { \n draft.orgsList.orgMaint.tabs[3].tableData.forEach(function (global:any) { \n global.children.forEach(function (alert:any) {\n if (alert.key === record.key) {\n let checkedCount = 0;\n if (notification === \"sms\") {\n alert.alertSms = (action === \"plus\"); \n }\n if (notification === \"email\") {\n alert.alertEmail = (action === \"plus\"); \n }\n \n global.children.forEach(function (alertCount:any) {\n checkedCount = checkedCount + (notification === \"sms\" && alertCount.alertSms ? 1 : 0) + (notification === \"email\" && alertCount.alertEmail ? 1 : 0);\n });\n if (notification === \"sms\") {\n global.smsIndeterminate = (checkedCount > 0 && checkedCount < global.children.length);\n global.smsChecked = (checkedCount === global.children.length);\n }\n else {\n global.emailIndeterminate = (checkedCount > 0 && checkedCount < global.children.length);\n global.emailChecked = (checkedCount === global.children.length);\n } \n }\n });\n });\n}","import { combineReducers } from \"redux\";\nimport { orgsState } from \"./orgsReducer\";\n\nexport const orgsReducers = combineReducers({\n orgsState: orgsState\n});\n","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n searchText: \"\",\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} countr${total > 1 ? 'ies' : 'y'}`\n }\n }\n};\n ","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n orgSelector: {\n instance: 0,\n title: \"Org Selector\",\n width: 720,\n visible: false,\n selectonHeader: true,\n orgSelection: [],\n currentView: \"list-view\",\n updated: false,\n includeSuborgs: false,\n list: {\n mode: \"all\",\n searchText: \"\",\n refreshOnEntry: false,\n orgId: \"\",\n orgName: \"\",\n orgTree: [],\n tableData: [],\n tableConfig : { \n showHeader: false, \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} org${total > 1 ? 's' : ''}`\n }\n },\n },\n tree: {\n mode: \"all\",\n searchText: \"\",\n refreshOnEntry: false,\n selectedOrgId: \"\",\n treeData: [],\n treeDataFlat: [],\n treeDataChecked: [],\n treeDataExpanded: [],\n restrictedOrgs: [],\n restrictedOrgsExpansion: [],\n restrictedFeatures:[],\n isExpanded: false\n }\n }\n};\n ","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\nimport OrgTree from \"../orgTree\";\n\nexport function orgSelectorState(state = initialState, action: any) {\n let data: any = null;\n\n switch (action.type) {\n case \"ORG_SELECTOR_OPEN\":\n return immerProduce(state, draft => {\n const instance = Math.random();\n draft.orgSelector.instance = instance;\n draft.orgSelector.width = action.width;\n draft.orgSelector.visible = true;\n draft.orgSelector.title = action.title;\n draft.orgSelector.updated = false; \n });\n case \"ORG_SELECTOR_CLOSE\":\n return immerProduce(state, draft => {\n draft.orgSelector.visible = false;\n });\n case \"ORG_SELECTOR_REMOVE_SELECTIONS_SUCCESS\":\n return immerProduce(state, draft => {\n draft.orgSelector.orgSelection = [];\n draft.orgSelector.list.refreshOnEntry = true;\n draft.orgSelector.tree.refreshOnEntry = true;\n draft.orgSelector.tree.treeDataChecked = []; \n });\n case \"ORG_SELECTOR_SET_VIEW\":\n return immerProduce(state, draft => {\n draft.orgSelector.currentView = action.viewName;\n });\n case \"ORG_SELECTOR_LIST_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.orgSelector.list.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"ORG_SELECTOR_LIST_SET_CURRENT_PAGE\":\n return immerProduce(state, draft => {\n draft.orgSelector.list.tableConfig.pagination.current = action.page;\n });\n case \"ORG_SELECTOR_LIST_SET_ORG_TREE\":\n return immerProduce(state, draft => {\n draft.orgSelector.list.orgTree = action.orgTree;\n });\n case \"ORG_SELECTOR_LIST_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.orgSelector.list.searchText = action.searchText;\n draft.orgSelector.list.orgId = \"\";\n if ((action.searchText || \"\") === \"\" && state.orgSelector.list.mode !== \"all\") {\n draft.orgSelector.list.mode = \"all\";\n }\n });\n case \"ORG_SELECTOR_LIST_SET_DISPLAY\":\n return immerProduce(state, draft => {\n draft.orgSelector.list.mode = action.mode;\n draft.orgSelector.list.searchText = action.searchText;\n draft.orgSelector.list.orgId = action.orgId;\n draft.orgSelector.list.orgName = action.orgName;\n });\n case \"ORG_SELECTOR_LIST_GET_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.orgSelector.list.tableData = data;\n draft.orgSelector.list.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.orgSelector.list.tableConfig.pagination.current = action.payload.page;\n draft.orgSelector.list.refreshOnEntry = false;\n });\n case \"ORG_SELECTOR_LIST_SET_SELECTION\":\n return immerProduce(state, draft => {\n updateListDataChecked(draft, action.orgId, action.selected);\n draft.orgSelector.updated = true;\n });\n case \"ORG_SELECTOR_TREE_EXPAND\":\n return immerProduce(state, draft => {\n draft.orgSelector.tree.treeDataExpanded = action.expandedKeys;\n draft.orgSelector.tree.isExpanded = action.isExpanded\n });\n case \"ORG_SELECTOR_TREE_CHECK\":\n return immerProduce(state, draft => {\n draft.orgSelector.tree.treeDataChecked = action.checkedKeys;\n });\n case \"ORG_SELECTOR_TREE_GET_ORGS_SUCCESS\":\n return immerProduce(state, draft => {\n try {\n loadListIntoTree(draft, action.payload.data);\n draft.orgSelector.tree.refreshOnEntry = false;\n }\n catch (err) {\n console.log(action.type + \": \" + err);\n } \n });\n case \"ORG_SELECTOR_TREE_SET_SELECTION\":\n return immerProduce(state, draft => {\n updateTreeDataChecked(draft, action.orgSelection);\n });\n case \"ORG_SELECTOR_TREE_SELECTION\":\n return immerProduce(state, draft => {\n draft.orgSelector.tree.selectedOrgId = action.orgId;\n }); \n case \"ORG_SELECTOR_HEADER_SET_DISPLAY\":\n return immerProduce(state, draft => {\n draft.orgSelector.selectonHeader = !draft.orgSelector.selectonHeader;\n });\n case \"ORG_SELECTOR_SET_ORG_SELECTION\":\n return immerProduce(state, draft => {\n draft.orgSelector.orgSelection = action.data;\n });\n case \"ORG_SELECTOR_SET_INCLUDE_SUBORGS\":\n return immerProduce(state, draft => {\n draft.orgSelector.includeSuborgs = action.includeSuborgs; \n if (action.updateState || false) {\n draft.orgSelector.updated = true;\n }\n });\n case \"ORG_SELECTOR_HEADER_TAG_REMOVE\":\n return immerProduce(state, draft => {\n removeHeaderTag(draft, action.orgId);\n draft.orgSelector.updated = true;\n });\n default:\n return state;\n }\n}\n\nconst findFlatParent = (flatData: any[], parentOrgId: string): string => {\n let orgId:string = \"\";\n\n flatData.forEach((record: any) => {\n if (record.orgId === parentOrgId) {\n orgId = record.orgId;\n }\n });\n\n return orgId;\n}\n\nconst loadListIntoTree = (draft: any, flatData: any[]): void => {\n\n flatData.forEach((record: OrgTree) => {\n record.orgIdParent = findFlatParent(flatData, record.orgIdParent || \"\");\n });\n\n const addChildren = (item: OrgTree) => {\n item.children = tempChild[item.orgId] || [];\n if (item.children.length) {\n item.children.forEach((child: OrgTree) => {\n addChildren(child);\n });\n }\n };\n\n const tempChild: any = {};\n flatData.forEach((item: OrgTree) => {\n const parentId = item.orgIdParent || 0;\n Array.isArray(tempChild[parentId]) ? tempChild[parentId].push(item) : (tempChild[parentId] = [item]);\n });\n\n const tree: OrgTree[] = tempChild[0];\n tree.forEach((base: OrgTree) => {\n addChildren(base);\n });\n draft.orgSelector.tree.treeData = tree;\n draft.orgSelector.tree.treeDataChecked = [];\n draft.orgSelector.tree.treeDataExpanded = [];\n draft.orgSelector.tree.treeDataFlat = flatData;\n\n flatData.forEach((record: any) => {\n if (record.orgSelection) {\n draft.orgSelector.tree.treeDataChecked.push(record.orgId);\n }\n if(record.properties && JSON.parse(record.properties).disableFeatures \n && JSON.parse(record.properties).disableFeatures.length > 0){\n draft.orgSelector.tree.restrictedOrgs.push(record.orgId);\n if(draft.orgSelector.tree.restrictedFeatures.length===0){\n draft.orgSelector.tree.restrictedFeatures=JSON.parse(record.properties).disableFeatures;\n }\n if(draft.orgSelector.tree.restrictedOrgsExpansion.indexOf(record.orgIdParent) === -1){\n draft.orgSelector.tree.restrictedOrgsExpansion.push(record.orgIdParent);\n }\n }\n });\n\n draft.orgSelector.tree.treeData.forEach((record: any) => {\n draft.orgSelector.tree.treeDataExpanded.push(record.orgId);\n });\n}\n\nconst updateListDataChecked = (draft: any, orgId: any, checked: boolean): void => {\n\n draft.orgSelector.list.tableData.forEach(function (record: any, index: number) {\n if (record.orgId === orgId) {\n record.orgSelection = checked;\n }\n });\n}\n\nconst updateTreeDataChecked = (draft: any, orgSelection: any): void => {\n\n draft.orgSelector.tree.treeDataChecked = [];\n orgSelection.forEach(function (record: any, index: number) {\n draft.orgSelector.tree.treeDataChecked.push(record.orgId);\n });\n}\n\nconst removeHeaderTag = (draft: any, orgId: any): void => {\n\n let orgSelection = draft.orgSelector.orgSelection,\n orgIndex = orgSelection.indexOf(orgId);\n\n if (orgIndex > -1) {\n orgSelection.splice(orgIndex, 1);\n }\n draft.orgSelector.orgSelection = orgSelection;\n\n updateListDataChecked(draft, orgId, false);\n updateTreeDataChecked(draft, draft.orgSelector.orgSelection);\n}\n","import { combineReducers } from \"redux\";\nimport { orgSelectorState } from \"./orgSelectorReducer\";\n\nexport const orgSelectorReducers = combineReducers({\n orgSelectorState: orgSelectorState\n});\n","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n assetsList: {\n assetMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\",\n iqanConnectKey: {\n status: \"\",\n value: \"\"\n },\n wifipassword:\"\",\n tutorials: {\n tutorialsList: [], \n },\n tabs: [\n {\n title: \"Asset Info\",\n instance: 0,\n disabled: false,\n assetsEligible: [],\n orgTags: [],\n orgs: [],\n templates: []\n },\n {\n title: \"Subscriptions\",\n instance: 0,\n disabled: true,\n searchText: \"\",\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} user${total > 1 ? 's' : ''}`\n }\n }\n },\n {\n title: \"Gateway Settings\",\n instance: 0,\n disabled: false,\n enableWiFi: false,\n enableHotspot: false,\n enableEthernet: false,\n ssidList: [],\n connected_SSID: \"\",\n ethernetIPAddress: appConfigs.app.defaultIP,\n allowViewSleepMode: false, \n allowChangeSleepMode: false,\n enableSleepMode: false,\n sleepCycleInSeconds: \"\",\n sleepCycleApplied: false,\n nextWakeUpTime: \"\"\n },\n {\n title: \"Devices Discovery\",\n instance: 0,\n disabled: false,\n attachedControllersTableData: [\n // {\n // \"address\": \"0x5F\",\n // \"serialNumber\": \"52DER28465YD\",\n // \"controllerId\": \"369c3d80-2f33-11ed-91bd-3f471cd8a84f\",\n // \"type\": \"Controller\",\n // \"controllerName\": \"PHC\"\n // },\n // {\n // \"address\": \"0xE2\",\n // \"serialNumber\": \"SKS8367IKD25\",\n // \"controllerId\": \"0c6e9080-2f38-11ed-91bd-0bd9a3da5091\",\n // \"type\": \"Controller\",\n // \"controllerName\": \"PH Controller - Test\"\n // }\n ],\n controllersList: [\n {\n \"controllerId\": \"369c3d80-2f33-11ed-91bd-3f471cd8a84f\",\n \"controllerName\": \"PHC\"\n },\n {\n \"controllerId\": \"0c6e9080-2f38-11ed-91bd-0bd9a3da5091\",\n \"controllerName\": \"PH Controller - Test\"\n }\n ],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} controllers${total > 1 ? 's' : ''}`\n }\n }\n },\n {\n title: \"Service Plan Details\",\n disabled: false,\n billingNRenewalHistory: []\n },\n ]\n },\n status: \"active\",\n searchText: \"\",\n alertInterval: \"1 day\",\n gatewayId: \"\",\n refreshOnUpdate: false,\n filterTags: [],\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n //onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} asset${total > 1 ? 's' : ''}`\n }\n },\n liteAssets:\n { \n title:\"\", \n instance: 0,\n disabled: false,\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} collection${total > 1 ? 's' : ''}`\n }\n }\n }\n }\n};\n ","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function assetsState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n\n switch (action.type) { \n case \"ASSETS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n //draft.assetsList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"ASSETS_SET_STATUS\":\n return immerProduce(state, draft => {\n draft.assetsList.status = action.status;\n });\n case \"ASSETS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.assetsList.searchText = action.searchText;\n });\n case \"ASSETS_SET_GATEWAY_ID\":\n return immerProduce(state, draft => {\n draft.assetsList.gatewayId = action.gatewayId;\n }); \n case \"ASSETS_GET_ASSETS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.refreshOnUpdate = false;\n draft.assetsList.tableData = data;\n draft.assetsList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.assetsList.tableConfig.pagination.current = action.payload.page; \n draft.assetsList.assetMaint.tabs[2].allowViewSleepMode = (data.length || 0) > 0 ? data[0].allowViewSleepMode : false;\n draft.assetsList.assetMaint.tabs[2].allowChangeSleepMode = (data.length || 0) > 0 ? data[0].allowChangeSleepMode : false; \n });\n case \"ASSET_SETTINGS\": \n \n return immerProduce(state, draft =>{\n draft.assetsList.assetMaint.tabs[2].enableWiFi = action.payload.enableWiFi;\n draft.assetsList.assetMaint.tabs[2].enableHotspot = action.payload.enableHotspot;\n draft.assetsList.assetMaint.tabs[2].enableEthernet = action.payload.enableEthernet;\n draft.assetsList.assetMaint.tabs[2].ssidList = action.payload.ssidList;\n draft.assetsList.assetMaint.tabs[2].connected_SSID = action.payload.connected_SSID;\n draft.assetsList.assetMaint.tabs[2].ethernetIPAddress = action.payload.ethernetIPAddress;\n draft.assetsList.assetMaint.tabs[2].enableSleepMode = action.payload.enableSleepMode;\n draft.assetsList.assetMaint.tabs[2].sleepCycleInSeconds = action.payload.sleepCycleInSeconds; \n draft.assetsList.assetMaint.tabs[2].sleepCycleApplied = action.payload.sleepCycleApplied;\n draft.assetsList.assetMaint.tabs[2].nextWakeUpTime = action.payload.nextWakeUpTime;\n \n }\n \n );\n case \"ASSETS_ASSET_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.assetsList.assetMaint.instance = instance;\n draft.assetsList.assetMaint.width = payload.width;\n draft.assetsList.assetMaint.visible = true;\n draft.assetsList.assetMaint.title = payload.title;\n draft.assetsList.assetMaint.record = payload.record;\n\n draft.assetsList.assetMaint.activeTab = \"1\";\n draft.assetsList.assetMaint.tabs[0].disabled = false;\n draft.assetsList.assetMaint.tabs[0].instance = instance;\n draft.assetsList.assetMaint.tabs[1].disabled = Object.keys(payload.record).length === 0;\n draft.assetsList.assetMaint.tabs[1].instance = instance;\n draft.assetsList.assetMaint.tabs[2].instance = instance;\n }); \n case \"ASSETS_ASSET_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.visible = false;\n draft.assetsList.assetMaint.record = {};\n draft.assetsList.assetMaint.iqanConnectKey.status = \"\";\n draft.assetsList.assetMaint.iqanConnectKey.value = \"\";\n draft.assetsList.assetMaint.tabs[0].orgs = [];\n draft.assetsList.assetMaint.tabs[0].templates = [];\n draft.assetsList.assetMaint.tabs[1].searchText = \"\";\n draft.assetsList.assetMaint.tabs[1].tableData = [];\n }); \n case \"ASSETS_MAINT_SET_TITLE\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.title = action.title;\n }); \n case \"ASSETS_ASSET_MAINT_TABS_ENABLE\":\n return immerProduce(state, draft => {\n if (draft.assetsList.assetMaint.tabs[0].disabled) {\n draft.assetsList.assetMaint.tabs[0].disabled = false;\n }\n if (draft.assetsList.assetMaint.tabs[1].disabled) {\n draft.assetsList.assetMaint.tabs[1].disabled = false;\n }\n }); \n case \"ASSETS_ASSET_MAINT_TAB_CHANGE\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.activeTab = action.activeTab;\n }); \n case \"ASSETS_ASSET_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.refreshOnUpdate = true;\n draft.assetsList.assetMaint.record = data;\n }); \n case \"ASSETS_ASSET_STATUS_SUCCESS\":\n return immerProduce(state, draft => {\n }); \n case \"ASSETS_LIST_REFRESH_ON_UPDATE\":\n return immerProduce(state, draft => {\n draft.assetsList.refreshOnUpdate = true;\n }); \n case \"ASSETS_ELIGIBLE_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tabs[0].assetsEligible = data;\n }); \n case \"ORG_TAGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tabs[0].orgTags = data;\n }); \n case \"ASSETS_FILTER_TAGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.filterTags = data;\n }); \n case \"ASSETS_GET_TEMPLATES_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tabs[0].templates = data;\n }); \n case \"ASSETS_GET_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tabs[0].orgs = data;\n }); \n case \"ASSET_SUBSCRIPTIONS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tabs[1].tableConfig!.pagination.onChange = action.onPaginationChange;\n });\n case \"ASSET_SUBSCRIPTIONS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tabs[1].searchText = action.searchText;\n });\n case \"ASSET_SUBSCRIPTIONS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tabs[1].tableData! = data.filter( (ele: any, ind: any) => ind === data.findIndex( (elem: { userId: any; }) => elem.userId === ele.userId));\n draft.assetsList.assetMaint.tabs[1].tableConfig!.pagination.total = (data.length || 0) > 0 ? data[0].groupsTotal : 0;\n draft.assetsList.assetMaint.tabs[1].tableConfig!.pagination.current = action.payload.page;\n\n });\n case \"ASSET_SUBSCRIPTIONS_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n payload = action.payload;\n if (payload.scope === \"user\") {\n updateUser(draft, payload.record, payload.notification, payload.action); \n }\n else { \n updateUserAlerts(draft, payload.record, payload.notification, payload.action); \n }\n }); \n case \"ASSETS_IQAN_CONNECT_KEY_SUCCESS\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.iqanConnectKey = action.iqanConnectKey;\n }); \n case \"LITE_ASSETS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.assetsList.liteAssets.refreshOnUpdate = false;\n draft.assetsList.liteAssets.tableData = data;\n draft.assetsList.liteAssets.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.assetsList.liteAssets.tableConfig.pagination.current = action.payload.page;\n \n }); \n case \"LITEASSETS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.assetsList.liteAssets.searchText = action.searchText;\n });\n case \"LITEASSETS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.assetsList.liteAssets.tableConfig.pagination.onChange = action.onPaginationChange;\n }); \n case \"ASSETS_WIFI_PASSWORD\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.wifipassword = action.wifipassword;\n }); \n case \"TUTORIALS_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.assetsList.assetMaint.tutorials.tutorialsList = action.data;\n }); \n\n default:\n return state;\n }\n \n}\n\nconst updateUser = (draft:any, record:any, notification: string, action: string) => { \n draft.assetsList.assetMaint.tabs[1].tableData.forEach(function (user:any) {\n if (user.key === record.key) {\n user.children.forEach(function (alert:any) {\n if (notification === \"sms\") {\n alert.alertSms = (action === \"plus\");\n alert.incAlertSms = (action === \"plus\");\n alert.offlineAlertSms = (action === \"plus\");\n }\n if (notification === \"email\") {\n alert.alertEmail = (action === \"plus\");\n alert.incAlertEmail = (action === \"plus\");\n alert.offlineAlertEmail = (action === \"plus\");\n }\n });\n if (notification === \"sms\") {\n user.userSmsIndeterminate = false;\n user.userSmsChecked = (action === \"plus\");\n }\n else {\n user.userEmailIndeterminate = false;\n user.userEmailChecked = (action === \"plus\");\n }\n }\n });\n}\n\nconst updateUserAlerts = (draft:any, record:any, notification: string, action: string) => { \n draft.assetsList.assetMaint.tabs[1].tableData.forEach(function (user:any) { \n user.children.forEach(function (alert:any) {\n if (alert.key === record.key) {\n let checkedCount = 0;\n if (notification === \"sms\") {\n alert.alertSms = (action === \"plus\");\n alert.incAlertSms = (action === \"plus\");\n alert.offlineAlertSms = (action === \"plus\");\n }\n if (notification === \"email\") {\n alert.alertEmail = (action === \"plus\");\n alert.incAlertEmail = (action === \"plus\");\n alert.offlineAlertEmail = (action === \"plus\");\n }\n if(notification === \"smsIn\"){\n alert.alertSmsIn = (action === \"plus\");\n }\n if(notification === \"smsOut\"){\n alert.alertSmsOut = (action === \"plus\");\n\n }\n if(notification === \"emailIn\"){\n alert.alertEmailIn = (action === \"plus\");\n }\n if(notification === \"emailOut\"){\n alert.alertEmailOut = (action === \"plus\");\n }\n\n\n user.children.forEach(function (alertCount:any) {\n checkedCount = checkedCount + (notification === \"sms\" && alertCount.alertSms ? 1 : 0) + (notification === \"email\" && alertCount.alertEmail ? 1 : 0);\n });\n if (notification === \"sms\") {\n user.userSmsIndeterminate = (checkedCount > 0 && checkedCount < user.children.length);\n user.userSmsChecked = (checkedCount === user.children.length);\n }\n else {\n user.userEmailIndeterminate = (checkedCount > 0 && checkedCount < user.children.length);\n user.userEmailChecked = (checkedCount === user.children.length);\n } \n }\n });\n });\n}","import { combineReducers } from \"redux\";\nimport { assetsState } from \"./assetsReducer\";\n\nexport const assetsReducer = combineReducers({\n assetsState: assetsState\n});\n","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n controllers: {\n controllersModification: {\n controllersList: null,\n loadingControllersList: true,\n selectedControllerList: [] as any,\n submittingControllerList: false,\n },\n applications: [],\n appVersions: [],\n selectedController: null,\n controllerMaintOptions: {\n instance: 0,\n width: 720,\n visible: false,\n info_visible: false,\n title: \"\",\n record: null,\n activeTab: \"1\",\n tabs: [\n {\n title: \"Install Application\",\n instance: 0,\n disabled: false,\n }\n ],\n installationHistory: [],\n tableConfig: {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n }\n }\n },\n activeTab: \"1\",\n controllersList: {\n controllerMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"View Installations\",\n disabled: false,\n }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n columnsFilters: {\n status: ['active', 'inactive']\n },\n tableData: [],\n tableConfig: {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} controller${total > 1 ? 's' : ''}`\n }\n },\n }\n }\n}","import { combineReducers } from \"redux\";\nimport { userControllersState } from \"./userControllersReducer\";\n\nexport const userControllersReducers = combineReducers({\n userControllersState: userControllersState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function userControllersState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"CONTROLLERS_GET_SUCCESS\":\n\n data = action.payload;\n\n return immerProduce(state, draft => {\n draft.controllers.controllersList.refreshOnUpdate = false;\n draft.controllers.controllersList.tableData = data;\n draft.controllers.controllersList.tableConfig.pagination.total = data ? data[0].totalRecords : 0;\n draft.controllers.controllersList.tableConfig.pagination.current = action.payload.page;\n });\n \n case \"APPLICATIONS_LIST_GET_SUCCESS\":\n\n data = action.applications;\n\n // data = [\n // {\n // \"applicationId\": 1,\n // \"applicationName\": \"BSP\",\n // \"applicationType\": \"Firmware\",\n // \"requiresApproval\": \"Yes\"\n // },\n // {\n // \"applicationId\": 2,\n // \"applicationName\": \"Runtime\",\n // \"applicationType\": \"Runtime\",\n // \"requiresApproval\": \"Yes\"\n // },\n // {\n // \"applicationId\": 3,\n // \"applicationName\": \"Application 1\",\n // \"applicationType\": \"Application\",\n // \"requiresApproval\": \"No\"\n // },\n // {\n // \"applicationId\": 4,\n // \"applicationName\": \"Application 2\",\n // \"applicationType\": \"Application\",\n // \"requiresApproval\": \"No\"\n // }\n // ]\n\n return immerProduce(state, draft => {\n draft.controllers.applications = data;\n });\n case \"APP_VERSIONS_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.controllers.appVersions = action.versions;\n });\n case \"GET_CONTROLLER_INSTALLATIONS_SUCCESS\":\n return immerProduce(state, draft => {\n draft.controllers.controllerMaintOptions.installationHistory = action.installationHistory;\n });\n case \"CONTROLLER_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.controllers.controllersList.searchText = action.searchText;\n });\n case \"UPDATE_CONTROLLER_SELECTION\":\n return immerProduce(state, draft => {\n draft.controllers.selectedController = action.selectedController;\n });\n case \"CONTROLLERS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.controllers.controllersList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => {\n draft.controllers.activeTab = action.tabNumber;\n });\n case \"OPEN_DRAWER\":\n return immerProduce(state, (draft) => {\n const payload = action.payload,\n instance = Math.random();\n draft.controllers.controllerMaintOptions.instance = instance;\n draft.controllers.controllerMaintOptions.width = payload.width;\n draft.controllers.controllerMaintOptions.visible = true;\n draft.controllers.controllerMaintOptions.title = payload.title;\n draft.controllers.controllerMaintOptions.activeTab = \"1\";\n draft.controllers.controllerMaintOptions.record = null;\n });\n case \"OPEN_INSTALL_PROGRESS_DRAWER\":\n return immerProduce(state, (draft) => {\n const payload = action.payload,\n instance = Math.random();\n draft.controllers.controllerMaintOptions.instance = instance;\n draft.controllers.controllerMaintOptions.width = payload.width;\n draft.controllers.controllerMaintOptions.info_visible = true;\n draft.controllers.controllerMaintOptions.title = payload.title;\n draft.controllers.controllerMaintOptions.activeTab = \"1\";\n draft.controllers.controllerMaintOptions.record = payload.record;\n });\n case \"CLOSE_DRAWER\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllerMaintOptions.visible = false;\n draft.controllers.controllerMaintOptions.activeTab = \"1\";\n draft.controllers.controllerMaintOptions.record = null;\n });\n case \"CLOSE_INSTALL_PROGRESS_DRAWER\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllerMaintOptions.info_visible = false;\n draft.controllers.controllerMaintOptions.activeTab = \"1\";\n draft.controllers.controllerMaintOptions.record = null;\n });\n case \"DRAWER_TAB_CHANGE\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllerMaintOptions.activeTab = action.activeTab;\n });\n case \"SET_CONTROLLERS_LIST\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.controllersList = action.payload.controllersList;\n draft.controllers.controllersModification.loadingControllersList = false;\n });\n case \"SET_LOADING_CONTROLLERS\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.loadingControllersList = action.payload.state;\n });\n case \"ADD_CONTROLLER\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.submittingControllerList = action.payload.state;\n });\n case \"ADD_CONTROLLER_SUCCESSFULLY\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.submittingControllerList = false;\n draft.controllers.controllersModification.selectedControllerList = []\n });\n case \"UPDATE_FIELD\":\n return immerProduce(state, (draft) => {\n if(draft.controllers.controllersModification.selectedControllerList){\n draft.controllers.controllersModification.selectedControllerList = draft.controllers.controllersModification.selectedControllerList.map((controller: any) => {\n if(controller.mastertag === action.payload.mastertag){\n controller[action.payload.filedName] = action.payload.value\n }\n return controller\n });\n }\n });\n default:\n return state;\n }\n}","import { appConfigs } from \"../../../utils/configurations\";\n\ninterface cmnsData{\n id: string,\n value: any\n}\nlet cmns: Array<cmnsData> = []\nexport const initialState = {\n dateFormatOptions: {\n year: 'numeric', \n month: '2-digit', \n day: 'numeric', \n hour: \"2-digit\", \n minute: \"2-digit\", \n second: \"2-digit\" , \n hour12: true\n },\n tabs: [\n {\n filters: null,\n appliedFilters: {\n timespanFrom: \"\",\n timespanTo: \"\",\n nickname: [],\n sa: [],\n spn: [],\n fmi: [],\n status: [],\n tags: []\n },\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} alert${total > 1 ? 's' : ''}`\n }\n }\n }, \n {\n filters: null,\n appliedFilters: {\n timespanFrom: \"\",\n timespanTo: \"\",\n nickname: [],\n status: [],\n tags: []\n },\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[2]} of ${total} alert${total > 2 ? 's' : ''}`\n }\n }\n }, \n {\n filters: null,\n appliedFilters: {\n timespanFrom: \"\",\n timespanTo: \"\",\n nickname: [],\n command: [],\n operator: [],\n user: [],\n type: [],\n status: [],\n tags: []\n },\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} alert${total > 1 ? 's' : ''}`\n }\n }\n }, \n {\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} alert${total > 1 ? 's' : ''}`\n }\n }\n } \n ],\n dm1CumminsRecommendations: cmns\n};\n ","import { combineReducers } from \"redux\";\nimport { alertsState } from \"./alertsReducer\";\n\nexport const alertsReducer = combineReducers({\n alertsState: alertsState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function alertsState(state = initialState, action:any) {\n let data:any = null;\n\n switch (action.type) { \n \n case \"ALERTS_DM1_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.tabs[0].tableConfig.pagination.onChange = action.onPaginationChange;\n }); \n case \"ALERTS_DM1_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tabs[0].tableData = data;\n draft.tabs[0].tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.tabs[0].tableConfig.pagination.current = action.payload.page;\n draft.tabs[0].appliedFilters = action.payload.appliedFilters;\n });\n case \"ALERTS_DM1_FILTERS_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.tabs[0].filters = action.data;\n }); \n case \"ALERTS_SIGNALS_FILTERS_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.tabs[1].filters = action.data;\n }); \n case \"ALERTS_SIGNALS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.tabs[1].tableConfig.pagination.onChange = action.onPaginationChange;\n }); \n case \"ALERTS_SIGNALS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tabs[1].tableData = data;\n draft.tabs[1].tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.tabs[1].tableConfig.pagination.current = action.payload.page;\n draft.tabs[1].appliedFilters = action.payload.appliedFilters;\n });\n case \"ALERTS_CMD_HISTORY_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.tabs[2].tableConfig.pagination.onChange = action.onPaginationChange;\n }); \n case \"ALERTS_CMD_HISTORY_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tabs[2].tableData = data;\n draft.tabs[2].tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.tabs[2].tableConfig.pagination.current = action.payload.page;\n draft.tabs[2].appliedFilters = action.payload.appliedFilters;\n });\n case \"ALERTS_CMD_HISTORY_FILTERS_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.tabs[2].filters = action.data;\n });\n case \"ACTIVITY_GET_ALERTS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tabs[3].tableData = data;\n draft.tabs[3].tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.tabs[3].tableConfig.pagination.current = action.payload.page;\n });\n case \"ACTIVITY_ALERTS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.tabs[3].tableConfig.pagination.onChange = action.onPaginationChange;\n })\n default:\n return state;\n }\n \n}","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n templatesList: {\n templates:[],\n selectedTemplateDetails:{},\n templateMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n mode: \"\",\n modes: [\n {\n name: \"template\",\n instance: 0,\n visible: false,\n orgs: []\n },\n {\n name: \"duplicate\",\n instance: 0,\n visible: false,\n orgs: []\n }\n ]\n },\n mode: \"all\",\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n }\n }\n};\n ","import { combineReducers } from \"redux\";\nimport { templatesState } from \"./templatesReducer\";\n\nexport const templatesReducers = combineReducers({\n templatesState: templatesState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function templatesState(state = initialState, action:any) {\n let data:any = null;\n\n switch (action.type) { \n case \"TEMPLATES_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.templatesList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"TEMPLATES_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.templatesList.searchText = action.searchText;\n });\n case \"TEMPLATES_GET_TEMPLATES_SUCCESS\": \n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.templatesList.refreshOnUpdate = false;\n draft.templatesList.tableData = data;\n draft.templatesList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.templatesList.tableConfig.pagination.current = action.payload.page;\n });\n case \"TEMPLATES_TEMPLATE_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.templatesList.templateMaint.instance = instance;\n draft.templatesList.templateMaint.width = payload.width;\n draft.templatesList.templateMaint.visible = true;\n draft.templatesList.templateMaint.mode = payload.mode;\n draft.templatesList.templateMaint.title = payload.title;\n draft.templatesList.templateMaint.record = payload.record;\n\n draft.templatesList.templateMaint.modes[0].visible = payload.mode === \"template\";\n draft.templatesList.templateMaint.modes[1].visible = payload.mode === \"duplicate\";\n }); \n case \"TEMPLATES_TEMPLATE_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.templatesList.templateMaint.visible = false;\n }); \n case \"TEMPLATES_LIST_REFRESH_ON_UPDATE\":\n return immerProduce(state, draft => {\n draft.templatesList.refreshOnUpdate = true;\n }); \n case \"TEMPLATES_MAINT_REFRESH_INSTANCE\":\n return immerProduce(state, draft => {\n const instance = Math.random();\n action.instances.forEach((element:number) => {\n draft.templatesList.templateMaint.modes[element].instance = instance;\n });\n }); \n case \"TEMPLATES_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n draft.templatesList.templateMaint.record = action.record;\n draft.templatesList.templateMaint.title = \"Edit Template :: \" + action.record.name;\n }); \n case \"TEMPLATES_MAINT_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.templatesList.templateMaint.modes[0].orgs = data;\n });\n case \"GET_TEMPLATES_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft[\"templatesList\"].templates=data;\n });\n case \"TEMPLATE_DETAILS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft=> { \n draft[\"templatesList\"].selectedTemplateDetails = data;\n }); \n case \"TEMPLATES_DUPLICATE_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.templatesList.templateMaint.modes[1].orgs = data;\n });\n case \"TEMPLATE_SET_GLOBAL_MODE\":\n return immerProduce(state, draft => {\n draft.templatesList.mode = action.mode;\n });\n default:\n return state;\n }\n}","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n templateRecord: {},\n activeTab: \"1\",\n tabs: [\n {\n title: \"Signal Collections\",\n instance: 0,\n disabled: false,\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} collection${total > 1 ? 's' : ''}`\n }\n },\n signalCollectionMaint: {\n instance: 0,\n width: 620,\n visible: false,\n record: {},\n title: \"\",\n signalCollectionId: \"\",\n signalCollectionName: \"\"\n }\n },\n {\n title: \"DM1 Faults\",\n instance: 0,\n disabled: false,\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [[],[]],\n // importFlag: [false,false], //feature can track when csv file is imported\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: 999,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} DM1 Fault${total > 1 ? 's' : ''}`\n }\n }\n },\n //ops-1224\n { \n title: \"Pinned Signals\",\n instance: 0,\n disabled: false,\n searchText: \"\",\n refreshOnUpdate: false, \n pinnedSignals: {\n id: \"\",\n preferedSignals: null\n }\n },\n { \n title: \"Operator ID Signals\",\n instance: 0,\n disabled: false,\n searchText: \"\",\n refreshOnUpdate: false, \n operatorSignals: {\n id: \"\",\n preferedSignals: null\n }\n },\n { \n title: \"Quotas Applied\",\n instance: 0,\n disabled: false, \n quotasApplied: {\n id: \"\",\n quotasApplied: null\n }\n }\n\n ],\n signals: {\n title: \"Signals\", \n instance: 0,\n width: 720,\n visible: false,\n signalCollectionId: \"\",\n signalCollectionName: \"\",\n signalCollectionType: \"\",\n signalList: {\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} Signal${total > 1 ? 's' : ''}`\n }\n }\n },\n signalMaint: {\n instance: 0,\n width: 620,\n visible: false,\n record: {},\n title: \"\",\n j1939s: {\n data: []\n },\n commandPgns: {\n data: []\n },\n commandControllers: {\n data: []\n },\n collectionType: \"\",\n units:{\n data: []\n }\n }\n }\n};\n ","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function templateDetailsState(state = initialState, action:any) {\n let data:any = null;\n\n switch (action.type) { \n case \"TEMPLATE_DETAILS_TAB_CHANGE\":\n return immerProduce(state, draft => {\n draft.activeTab = action.tab;\n }); \n case \"SIGNAL_COLLECTIONS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.tabs[0].tableConfig!.pagination.onChange = action.onPaginationChange;\n });\n case \"SIGNAL_COLLECTIONS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.tabs[0].searchText = action.searchText;\n });\n case \"SIGNAL_COLLECTIONS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tabs[0].refreshOnUpdate = false;\n draft.tabs[0].tableData = data;\n draft.tabs[0].tableConfig!.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.tabs[0].tableConfig!.pagination.current = action.payload.page;\n }); \n case \"SIGNAL_COLLECTION_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.tabs[0].signalCollectionMaint!.instance = instance;\n draft.tabs[0].signalCollectionMaint!.width = payload.width;\n draft.tabs[0].signalCollectionMaint!.visible = true;\n draft.tabs[0].signalCollectionMaint!.title = (Object.keys(payload.record).length !== 0 ? \"Signal Collection :: \" + payload.record.name : \"Signal Collection :: New\");\n draft.tabs[0].signalCollectionMaint!.record = payload.record; \n draft.tabs[0].signalCollectionMaint!.signalCollectionId = (Object.keys(payload.record).length !== 0 ? payload.record.signalCollectionId : null); \n draft.tabs[0].signalCollectionMaint!.signalCollectionName =(Object.keys(payload.record).length !== 0 ? payload.record.name : null); \n }); \n case \"SIGNAL_COLLECTION_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.tabs[0].signalCollectionMaint!.visible = false;\n }); \n case \"SIGNAL_COLLECTION_MAINT_SET_RECORD\":\n return immerProduce(state, draft => { \n const instance = Math.random();\n draft.tabs[0].signalCollectionMaint!.instance = instance;\n draft.tabs[0].signalCollectionMaint!.title = (Object.keys(action.record).length !== 0 ? \"Signal Collection :: \" + draft.tabs[0].signalCollectionMaint!.signalCollectionName : \"Signal Collection :: New\");\n draft.tabs[0].signalCollectionMaint!.record = action.record; \n draft.tabs[0].signalCollectionMaint!.signalCollectionId = (Object.keys(action.record).length !== 0 ? action.record.signalCollectionId : null); \n draft.tabs[0].signalCollectionMaint!.signalCollectionName = (Object.keys(action.record).length !== 0 ? action.record.name : null) \n }); \n case \"SIGNAL_COLLECTION_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n draft.tabs[0].refreshOnUpdate = true; \n draft.tabs[0].signalCollectionMaint!.record = action.record; \n draft.tabs[0].signalCollectionMaint!.title = \"Signal Collection :: \" + action.record.name;\n draft.tabs[0].signalCollectionMaint!.signalCollectionId = action.record.signalCollectionId;\n draft.tabs[0].signalCollectionMaint!.signalCollectionName = action.record.name; \n draft.signals.signalCollectionId = action.record.signalCollectionId; \n draft.signals.signalCollectionName = action.record.name;\n }); \n case \"TEMPLATE_DETAILS_GET_TEMPLATE_SUCCESS\":\n return immerProduce(state, draft => {\n draft.templateRecord = action.record;\n }); \n case \"TEMPLATE_DETAILS_MAINT_TEMPLATE_SUCCESS\":\n return immerProduce(state, draft => {\n draft.templateRecord = action.record;\n }); \n case \"TEMPLATE_DETAILS_DM1_FAULTS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.tabs[1].tableConfig!.pagination.onChange = action.onPaginationChange;\n });\n case \"TEMPLATE_DETAILS_DM1_FAULTS_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.tabs[1].searchText = action.searchText;\n });\n case \"TEMPLATE_DETAILS_DM1_FAULTS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tabs[1].refreshOnUpdate = false;\n draft.tabs[1].tableData![action.payload.listIndex] = data;\n draft.tabs[1].tableConfig!.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.tabs[1].tableConfig!.pagination.current = action.payload.page;\n }); \n case \"TEMPLATE_DETAILS_DM1_MESSAGING_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n draft.templateRecord = action.record;\n }); \n case \"DM1_FAULTS_DELETE\":\n return immerProduce(state, draft => {\n let data = draft.tabs[1].tableData![action.listIndex];\n draft.tabs[1].tableData![action.listIndex] = data.filter((record:any, index:number) => index !== action.index);\n }); \n case \"DM1_FAULTS_DB_DELETE_SUCCESS\":\n return immerProduce(state, draft => {\n let data = draft.tabs[1].tableData![action.listIndex];\n draft.tabs[1].tableData![action.listIndex] = data.filter((record:any) => action.dm1Id !== record.dm1Id);\n }); \n case \"DM1_FAULTS_ADD_RECORD\":\n return immerProduce(state, draft => {\n dm1FaultsAdd(\n draft, \n state.tabs[1].tableData![action.payload.listIndex], \n action.payload.listIndex, \n {\n dm1Id: \"\",\n enabled: true,\n sa: \"\",\n spn: \"\",\n fmi: \"\" \n }\n );\n }); \n case \"DM1_FAULTS_ADD_RECORDS\":\n return immerProduce(state, draft => {\n draft.tabs[1].tableData![action.listIndex]=action.data;\n dm1FaultsUploadProcessing(draft,action.listIndex);\n \n // action.data.forEach((record: any, index: number) => {\n // dm1FaultsAdd(\n // draft, \n // draft.tabs[1].tableData, \n // {\n // dm1Id: \"\", \n // enabled: record.enabled,\n // sa: record.sa,\n // spn: record.spn,\n // fmi: record.fmi\n // }\n // );\n // });\n }); \n case \"DM1_FAULTS_SET_FIELD_VALUE\":\n return immerProduce(state, draft => {\n dm1FaultsSetFieldValue(\n draft, \n action.listIndex,\n action.index, \n action.fieldName,\n action.fieldValue\n )\n });\n case \"SIGNAL_LIST_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.signals.signalList.searchText = action.searchText; \n }); \n case \"SIGNALS_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.signals.instance = instance;\n draft.signals.width = payload.width;\n draft.signals.visible = true;\n draft.signals.title = payload.title;\n draft.signals.signalCollectionId = payload.signalCollectionId; \n draft.signals.signalCollectionName = payload.signalCollectionName; \n draft.signals.signalCollectionType = payload.signalCollectionType; \n draft.signals.signalList.searchText = \"\"; \n }); \n case \"SIGNALS_CLOSE\":\n return immerProduce(state, draft => {\n draft.signals.visible = false;\n draft.signals.signalList.tableData = [];\n draft.signals.signalList.tableConfig!.pagination.total = appConfigs.tables.defaultTotal;\n draft.signals.signalList.tableConfig!.pagination.current = appConfigs.tables.defaultCurrent\n }); \n case \"SIGNALS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.signals.title = \"Signal Collection :: \" + action.payload.signalCollectionName + ((data.length || 0) > 0 ? \" (\" + data[0].totalRecords + \")\" : \"\");\n draft.signals.signalCollectionId = action.payload.signalCollectionId;\n draft.signals.signalCollectionName = action.payload.signalCollectionName; \n draft.signals.signalCollectionType = action.payload.signalCollectionType; \n draft.signals.signalList.refreshOnUpdate = false;\n draft.signals.signalList.tableData = data;\n draft.signals.signalList.tableConfig!.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.signals.signalList.tableConfig!.pagination.current = action.payload.page;\n }); \n case \"SIGNAL_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.signals.signalMaint.instance = instance;\n draft.signals.signalMaint.width = payload.width;\n draft.signals.signalMaint.visible = true;\n draft.signals.signalMaint.title = (Object.keys(payload.record).length === 0 ? \"Signal Collection :: \" + draft.signals.signalCollectionName + \" :: Add Signal\" : \"Signal :: Edit :: \" + payload.record.label);\n draft.signals.signalMaint.record = payload.record;\n draft.signals.signalMaint.collectionType = payload.collectionType; \n }); \n case \"SIGNAL_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.signals.signalMaint.visible = false;\n draft.signals.signalMaint.j1939s!.data = [];\n draft.signals.signalMaint.commandPgns!.data = [];\n draft.signals.signalMaint.commandControllers!.data = [];\n }); \n case \"SIGNAL_MAINT_SUCCESS\":\n return immerProduce(state, draft => {\n if (action.editMode === \"insert\") {\n draft.tabs[0].refreshOnUpdate = true;\n }\n draft.signals.signalList.refreshOnUpdate = true; \n draft.signals.signalMaint.record = action.record; \n draft.signals.signalMaint.title = \"Signal :: Edit :: \" + action.record.label;\n }); \n case \"SIGNAL_DELETE_SUCCESS\":\n return immerProduce(state, draft => {\n draft.tabs[0].refreshOnUpdate = true;\n }); \n case \"SIGNAL_GET_J1939S_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n const payload = action.payload;\n draft.signals.signalMaint.j1939s!.data = payload.data;\n }); \n case \"SIGNAL_GET_COMMAND_PGN_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n const payload = action.payload;\n draft.signals.signalMaint.commandPgns!.data = payload.data;\n }); \n case \"SIGNAL_GET_COMMAND_CONTROLLER_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n const payload = action.payload;\n draft.signals.signalMaint.commandControllers!.data = payload.data;\n }); \n case \"SIGNAL_MAINT_SET_RECORD\":\n return immerProduce(state, draft => {\n const instance = Math.random();\n draft.signals.signalMaint.instance = instance;\n draft.signals.signalMaint.title = (Object.keys(action.record).length === 0 ? \"Signal Collection :: Add Signal :: \" + draft.signals.signalCollectionName : \"Signal :: Edit :: \" + action.record.label);\n draft.signals.signalMaint.record = action.record; \n draft.signals.signalMaint.j1939s!.data = []; \n draft.signals.signalMaint.commandPgns!.data = []; \n draft.signals.signalMaint.commandControllers!.data=[];\n });\n case \"PREFERED_SIGNALS_SUCCESS\":\n return immerProduce(state, draft => { \n draft.tabs[2].pinnedSignals!.id = action.payload.id;\n draft.tabs[2].pinnedSignals!.preferedSignals = action.payload.preferedSignals; \n }); \n case \"OPR_PREFERED_SIGNALS_SUCCESS\": \n return immerProduce(state, draft => { \n draft.tabs[3].operatorSignals!.id = action.payload.id;\n draft.tabs[3].operatorSignals!.preferedSignals = action.payload.preferedSignals; \n }); \n case \"QUOTAS_APPLIED_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tabs[4].refreshOnUpdate = false;\n draft.tabs[4].tableData = data;\n });\n case \"Units_GET_SUCCESS\":\n data = action.data;\n return immerProduce(state, draft => {\n draft.signals.signalMaint.units!.data=data;\n });\n /*case \"TEMPLATE_DETAILS_DM1_FAULTS_SET_IMPORT_FLAG\":\n return immerProduce(state, draft => {\n draft.tabs[1].importFlag![action.payload.listIndex] = action.payload.val;\n }); */ //feature can track when csv file is imported \n default:\n return state;\n }\n}\n\nconst dm1FaultsAdd = (draft:any, data:any, listIndex: any,newRecord:any) => { \n \n let recordFound:boolean = false;\n\n data.forEach(function (record:any) {\n if ((newRecord.enabled||newRecord.sa || newRecord.spn || newRecord.fmi) !== \"\" && record.enabled === newRecord.enabled && record.sa === newRecord.sa && record.spn === newRecord.spn && record.fmi === newRecord.fmi) {\n recordFound = true;\n }\n }); \n\n if (!recordFound) {\n draft.tabs[1].tableData[listIndex] = [newRecord, ...data];\n }\n}\n\nconst dm1FaultsUploadProcessing = (draft:any, listIndex: any) => { \n \n let recordFound:boolean = false;\n\n draft.tabs[1].tableData[listIndex].forEach(function (record:any) {\n record.dm1Id = \"\";\n }); \n\n}\n\nconst dm1FaultsSetFieldValue = (draft:any, listIndex:number, index:number, fieldName:string, fieldValue:any) => { \n draft.tabs[1].tableData[listIndex][index][fieldName] = fieldValue;\n}","import { combineReducers } from \"redux\";\nimport { templateDetailsState } from \"./templateDetailsReducer\";\n\nexport const templateDetailsReducers = combineReducers({\n templateDetailsState: templateDetailsState\n});\n","export const initialState = {\n orgId: \"\",\n orgName: \"\",\n reports: [],\n orgAccess: null \n};\n ","export const initialState = {\n context: {\n assetNotes: {\n title: \"Asset Notes\",\n visible: false,\n width: 600,\n notes: {\n pinned:[],\n all:[],\n globalNotes:[]\n }\n }\n }\n};","export const initialState = {\n status: \"\",\n timestamp: \"\",\n data: {\n userOrgAccess: null\n } \n};","export const initialState = {\n IsCreate: false,\n IsRead: false,\n IsUpdate: false,\n IsDelete: false\n};","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n oprList: {\n oprMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {}, \n title: \"\",\n activeTab: \"1\",\n operatorOrgs: [],\n tabs: [\n {\n title: \"Operator\",\n instance: 0,\n disabled: true,\n orgUsers:[],\n orgAssets:[],\n orgAccessTypes:[],\n rfidValue: \"\",\n },\n {\n title: \"Assets\",\n disabled: false,\n },\n {\n title: \"Access History\",\n disabled: false,\n }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n }\n }\n}","import { combineReducers } from \"redux\";\nimport { oprState } from \"./oprReducer\";\n\nexport const oprReducers = combineReducers({\n oprState: oprState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function oprState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"OPRS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.refreshOnUpdate = false;\n draft.oprList.tableData = data;\n draft.oprList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.oprList.tableConfig.pagination.current = action.payload.page;\n });\n case \"OPRS_LIST_CLEAR\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.refreshOnUpdate = false;\n draft.oprList.tableData = data;\n draft.oprList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.oprList.tableConfig.pagination.current = action.payload.page;\n });\n case \"OPRS_OPR_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.oprList.oprMaint.instance = instance;\n draft.oprList.oprMaint.width = payload.width;\n draft.oprList.oprMaint.visible = true;\n draft.oprList.oprMaint.title = payload.title;\n draft.oprList.oprMaint.record = payload.record;\n \n draft.oprList.oprMaint.activeTab = \"1\";\n draft.oprList.oprMaint.tabs[0].disabled = true;\n draft.oprList.oprMaint.tabs[0].instance = instance;\n }); \n case \"OPRS_OPR_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.visible = false;\n });\n case \"OPR_HOME_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.operatorOrgs = data;\n }); \n case \"OPR_MAINT_ORG_USERS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.tabs[0].orgUsers = data;\n }); \n case \"OPR_MAINT_ORG_ASSETS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.tabs[0].orgAssets = data;\n });\n case \"OPR_MAINT_ORG_ACCESS_TYPES_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.tabs[0].orgAccessTypes = data;\n });\n case \"OPR_RFID_SET_FIELD_VALUE\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.tabs[0].rfidValue = data;\n });\n case \"OPR_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.oprList.searchText = action.searchText;\n });\n case \"OPRS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.oprList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"OPR_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.record = data;\n draft.oprList.oprMaint.title = \"Edit Operator :: \" + data.operatorIdValue;\n }); \n case \"OPRS_LIST_REFRESH_ON_UPDATE\":\n return immerProduce(state, draft => {\n draft.oprList.refreshOnUpdate = true;\n }); \n case \"OPR_MAINT_TABS_ENABLE\":\n return immerProduce(state, draft => {\n if (draft.oprList.oprMaint.tabs[1].disabled) {\n draft.oprList.oprMaint.tabs[1].disabled = false;\n }\n if (draft.oprList.oprMaint.tabs[2].disabled) {\n draft.oprList.oprMaint.tabs[2].disabled = false;\n }\n }); \n default:\n return state;\n }\n}","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n scheduledList: {\n dateFormatOptions: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n },\n scheduledMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n orgs: [],\n reports: [],\n users: [],\n mode: \"\",\n selectedTag: [],\n selectedOrgTag: [],\n selectedOrgId: \"\",\n scheduleAddEdit: {\n mode: \"\",\n scheduleId: -1,\n name: \"\",\n frequency: \"\",\n orgId: \"\",\n subscribers: [],\n dayOfMonth: \"\",\n dayOfWeek: \"\",\n reports: [],\n timeZone: \"\",\n timeZoneOffset: 0,\n clientScheduledTime: \"\",\n scheduledTime: \"\",\n },\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig: {\n pagination: {\n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems,\n showTotal: (total: number, range: Array<number>) =>\n `${range[0]} - ${range[1]} of ${total} record${total > 1 ? \"s\" : \"\"}`,\n },\n },\n },\n};\n","import { combineReducers } from \"redux\";\nimport { reportScheduledState } from \"./reportSchedulesReducer\";\n\nexport const reportSchedulesReducers = combineReducers({\n reportScheduledState: reportScheduledState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function reportScheduledState(state = initialState, action: any) {\n let data: any = null,\n payload: any;\n switch (action.type) {\n case \"REPORT_SCHEDULES_LIST_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, (draft) => {\n draft.scheduledList.refreshOnUpdate = false;\n draft.scheduledList.tableData = data;\n draft.scheduledList.tableConfig.pagination.total =\n (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.scheduledList.tableConfig.pagination.current =\n action.payload.page;\n });\n case \"REPORT_SCHEDULES_MAINT_OPEN\":\n return immerProduce(state, (draft) => {\n const payload = action.payload,\n instance = Math.random();\n draft.scheduledList.scheduledMaint.instance = instance;\n draft.scheduledList.scheduledMaint.width = payload.width;\n draft.scheduledList.scheduledMaint.visible = true;\n draft.scheduledList.scheduledMaint.mode = payload.action;\n draft.scheduledList.scheduledMaint.title = payload.title;\n draft.scheduledList.scheduledMaint.record = payload.record;\n });\n case \"REPORT_SCHEDULES_MAINT_CLOSE\":\n return immerProduce(state, (draft) => {\n draft.scheduledList.scheduledMaint.visible = false;\n });\n case \"REPORT_SCHEDULES_ORGS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, (draft) => {\n draft.scheduledList.scheduledMaint.orgs = data;\n });\n case \"REPORT_SCHEDULES_SET_PAGINATION\":\n return immerProduce(state, (draft) => {\n draft.scheduledList.tableConfig.pagination.onChange =\n action.onPaginationChange;\n });\n case \"REPORT_SCHEDULES_SET_SEARCH\":\n return immerProduce(state, (draft) => {\n draft.scheduledList.searchText = action.searchText;\n });\n case \"REPORT_SCHEDULES_REPORTS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, (draft) => {\n draft.scheduledList.scheduledMaint.reports = data;\n draft.scheduledList.scheduledMaint.selectedOrgId = action.payload.orgId;\n });\n case \"REPORT_SCHEDULES_USERS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, (draft) => {\n draft.scheduledList.scheduledMaint.users = data;\n });\n case \"REPORT_SCHEDULES_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, (draft) => {\n draft.scheduledList.scheduledMaint.record = data;\n draft.scheduledList.scheduledMaint.title = \"Edit Schedule\";\n });\n case \"ORG_TAGS_SUCCESS\":\n data = action.payload.data;\n // console.log(data);\n return immerProduce(state, (draft) => {\n draft.scheduledList.scheduledMaint.selectedTag = data;\n });\n case \"SCHEDULE_ORG_TAGS_SUCCESS\":\n data = action.payload.data;\n // console.log(data);\n return immerProduce(state, (draft) => {\n draft.scheduledList.scheduledMaint.selectedOrgTag = data;\n });\n default:\n return state;\n }\n}\n","export const initialState = {\n\n geofencesList:{\n fenceList: [],\n fenceListLoaded: false,\n rawDataList: [],\n geoFenceMaint:{\n visible: false,\n record: {\n fenceName: \"\",\n fenceColor: \"\",\n description: \"\",\n type: \"\",\n geoCoordinates: {},\n id: \"\" \n },\n assetsList: [],\n mastertags: [],\n gatewayIds: [],\n changeInGateways: [],\n curShape: {}\n },\n fenceAssets:{\n visible: false,\n mastertags: [],\n gatewaysData: [],\n fenceName: \"\",\n fenceColor: \"\"\n },\n fenceListDrawerVisible: false,\n fenceTableList: [],\n map: null,\n drawingManager: null,\n markerManager: null,\n showingGeofences: true\n }\n\n}\n\n\n\n","import { combineReducers } from \"redux\";\nimport { geofencesState } from \"./geofencesReducer\";\n\nexport const geofencesReducer = combineReducers({\n geofencesState: geofencesState\n});\n\n\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function geofencesState(state = initialState, action: any) {\n\tlet data: any = null,\n\t\tpayload: any;\n\n\tswitch (action.type) {\n\t\tcase \"SET_DRAWER_OPEN\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\t\n\t\t\t\tlet arr:any[] = draft.geofencesList.fenceList;\n let index:any = arr.findIndex((item) => (item.shape === action.payload.geofenceShape.shape));\n\n\t\t\t\tdraft.geofencesList.geoFenceMaint.record.fenceName = arr[index].fenceName;\n draft.geofencesList.geoFenceMaint.record.fenceColor = arr[index].fenceColor;\n draft.geofencesList.geoFenceMaint.record.description = arr[index].description;\n draft.geofencesList.geoFenceMaint.record.type = arr[index].type;\n draft.geofencesList.geoFenceMaint.record.geoCoordinates = arr[index].geoCoordinates;\n draft.geofencesList.geoFenceMaint.record.id = arr[index].id;\n draft.geofencesList.geoFenceMaint.mastertags = arr[index].mastertags;\n\t\t\t\tdraft.geofencesList.geoFenceMaint.visible = true;\n\n\t\t\t\tdraft.geofencesList.geoFenceMaint.changeInGateways = []; // initially no change\n\t\t\t});\n\t\tcase \"SET_DRAWER_CLOSE\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.geoFenceMaint.visible = false;\n\t\t\t});\n\t\tcase \"SET_NAME\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.geoFenceMaint.record.fenceName = action.payload.fenceName;\n\t\t\t});\n\t\tcase \"SET_COLOR\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.geoFenceMaint.record.fenceColor = action.payload.fenceColor;\n\t\t\t});\n\t\tcase \"SET_DESCRIPTION\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.geoFenceMaint.record.description = action.payload.description;\n\t\t\t});\n\t\tcase \"SET_MAP\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.map = action.payload.map;\n\t\t\t});\n\t\tcase \"SET_DRAWING_MANAGER\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.drawingManager = action.payload.drawingManager;\n\t\t\t});\n\t\tcase \"SET_MARKER_MANAGER\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.markerManager = action.payload.markerManager;\n\t\t\t});\n\t\tcase \"SET_FENCELIST\":\n\t\t\treturn immerProduce(state, (draft) => {\t\t\t\n\t\t\t\tdraft.geofencesList.fenceList = action.payload.fenceList;\n\t\t\t\tdraft.geofencesList.fenceListLoaded = true\n\t\t\t});\n\t\tcase \"SET_FENCELIST_LOADED\":\n\t\t\treturn immerProduce(state, (draft) => {\t\t\t\n\t\t\t\tdraft.geofencesList.fenceListLoaded = action.payload.fenceListLoaded\n\t\t\t});\n\t\tcase \"OPEN_FENCELIST_DRAWER\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.fenceListDrawerVisible = true;\n\t\t\t});\n\t\tcase \"CLOSE_FENCELIST_DRAWER\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.fenceListDrawerVisible = false;\n\t\t\t});\n\t\tcase \"SET_ASSETSLIST\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.geoFenceMaint.assetsList = action.payload.assetsList;\n\t\t\t});\n\t\tcase \"SET_CHANGE_IN_GATEWAYS\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tlet item = action.payload.changeInGateways;\n\t\t\t\tlet arr: any = draft.geofencesList.geoFenceMaint.changeInGateways;\n\n\t\t\t\tconst filterFunc = (element: any) => {\n\t\t\t\t\tif (element.key !== item.key) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\n\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\tif (arr[i].key === item.key) {\n\t\t\t\t\t\tdraft.geofencesList.geoFenceMaint.changeInGateways = arr.filter(\n\t\t\t\t\t\t\tfilterFunc\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tarr.push({ key: item.key, value: item.value, selected: item.selected });\n\n\t\t\t\t// draft.geofencesList.geoFenceMaint.changeInGateways = action.payload.changeInGateways;\n\t\t\t});\n\t\tcase \"RESET_CHANGE_IN_GATEWAYS\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.geoFenceMaint.changeInGateways = [];\n\t\t\t});\n\t\tcase \"SET_SHAPE_GATEWAYS\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tlet arr: any[] = draft.geofencesList.fenceList;\n\n\t\t\t\tlet mastertags: any = [];\n\t\t\t\tlet gatewayIds: any = [];\n\n\t\t\t\tlet gateways: any[] = action.payload.gateways;\n\n\t\t\t\tgateways.forEach((item) => {\n\t\t\t\t\tgatewayIds.push(item.key);\n\t\t\t\t\tmastertags.push(item.value);\n\t\t\t\t});\n\n\t\t\t\tarr.forEach((item) => {\n\t\t\t\t\tif (item.id === action.payload.id) {\n\t\t\t\t\t\titem.gatewayIds = gatewayIds;\n\t\t\t\t\t\titem.mastertags = mastertags;\n\t\t\t\t\t\titem.latestPositionStatuses = {'status': null, 'updated_at': null};\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tdraft.geofencesList.geoFenceMaint.gatewayIds = gatewayIds;\n\t\t\t\tdraft.geofencesList.geoFenceMaint.mastertags = mastertags;\n\t\t\t});\n\t\tcase \"ADD_SHAPE\":\n\t\t\treturn immerProduce(state, (draft) => {\n\n\t\t\t\tif(action.payload.geofenceShape.id !== ''){\n\t\t\t\t\tdraft.geofencesList.fenceList = draft.geofencesList.fenceList.filter((geofence:any) =>\n\t\t\t\t\t\tgeofence.id != action.payload.geofenceShape.id\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet arr: any[] = draft.geofencesList.fenceList;\n\t\t\t\tarr.push(action.payload.geofenceShape);\n\t\t\t});\n\t\tcase \"OPEN_FENCE_ASSETS_DRAWER\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.fenceAssets.visible = true;\n\t\t\t});\n\t\tcase \"CLOSE_FENCE_ASSETS_DRAWER\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.fenceAssets.visible = false;\n\t\t\t});\n\t\tcase \"SET_FENCE_MASTERTAGS\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.fenceAssets.mastertags = action.payload.mastertags;\n\n\t\t\t\tlet mastertags:String[] = action.payload.mastertags;\n\t\t\t\tlet assets:any[] = draft.geofencesList.geoFenceMaint.assetsList;\n\t\t\t\tlet gatewaysData: any = [];\n\n\t\t\t\tmastertags?.forEach((item, key) => {\n\t\t\t\t\tlet index = assets.findIndex((asset:any) => asset.mastertag === item);\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\tgatewaysData.push({ mastertag : item, gatewayName : assets[index].nickname, latest_position_status : action.payload.latestPositionStatuses[key]});\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\tdraft.geofencesList.fenceAssets.gatewaysData = gatewaysData;\n\t\t\t\tdraft.geofencesList.fenceAssets.fenceName = action.payload.fenceName;\n\t\t\t});\n\t\tcase \"REMOVE_SHAPE_FROM_MAP\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tlet arr: any[] = draft.geofencesList.fenceList;\n\t\t\t\tarr.forEach((item) => {\n\t\t\t\t\tif (item.id === action.payload.id) {\n\t\t\t\t\t\tif (item.type === \"circle\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Circle).setMap(null);\n\t\t\t\t\t\t} else if (item.type === \"rectangle\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Rectangle).setMap(null);\n\t\t\t\t\t\t} else if (item.type === \"polygon\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Polygon).setMap(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\tcase \"UPDATE_SHAPE\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tlet arr: any[] = draft.geofencesList.fenceList;\n\t\t\t\tarr.forEach((item) => {\n\t\t\t\t\tif (item.id === action.payload.id) {\n\t\t\t\t\t\titem.fenceName = action.payload.record.fenceName;\n\t\t\t\t\t\titem.fenceColor = action.payload.record.fenceColor;\n\t\t\t\t\t\titem.description = action.payload.record.description;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\tcase \"REMOVE_SHAPE\":\n return immerProduce(state, (draft) => {\n\n\t\t\t\tlet arr: any[] = draft.geofencesList.fenceList;\n\t\t\t\tarr.forEach((item) => {\n\t\t\t\t\tif (item.shape === action.payload.geofenceShape.shape) {\n\t\t\t\t\t\taction.payload.geofenceShape.shape.setMap(null);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tdraft.geofencesList.fenceList = draft.geofencesList.fenceList.filter(\n\t\t\t\t\t(item: any) => item.shape !== action.payload.geofenceShape.shape\n\t\t\t\t);\n\t\t\t});\n\t\tcase \"SET_CUR_SHAPE\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.geoFenceMaint.curShape = action.payload.geofenceShape;\n\t\t\t});\n\t\tcase \"ADD_SHAPE_SUBMIT\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tlet arr: any[] = draft.geofencesList.fenceList;\n\t\t\t\tarr.forEach((item) => {\n\t\t\t\t\tif (item.shape === action.payload.geofenceShape) {\n\t\t\t\t\t\titem.id = action.payload.id;\n\t\t\t\t\t\titem.fenceName = action.payload.record.fenceName;\n\t\t\t\t\t\titem.fenceColor = action.payload.record.fenceColor;\n\t\t\t\t\t\titem.description = action.payload.record.description;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t/* fix clicking on newly added shap */\n\t\t\t});\n\t\tcase \"FILTER_FENCELIST_DRAWER\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tlet searchValue: String = action.payload.searchVal;\n\t\t\t\tif (searchValue.length > 0) {\n\t\t\t\t\tdraft.geofencesList.fenceTableList = draft.geofencesList.fenceList.filter(\n\t\t\t\t\t\t(item: any) =>\n\t\t\t\t\t\t\titem.fenceName.toLowerCase().includes(searchValue.toLowerCase()) && item.fenceName !== \"\"\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tdraft.geofencesList.fenceTableList = draft.geofencesList.fenceList.filter(\n\t\t\t\t\t\t(item: any) => item.fenceName !== \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\tcase \"REMOVE_SHAPES_FROM_MAP\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.fenceList.forEach((item:any) => {\n\t\t\t\t\tif(item.shape){\n\t\t\t\t\t\tif (item.type === \"circle\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Circle).setMap(null);\n\t\t\t\t\t\t} else if (item.type === \"rectangle\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Rectangle).setMap(null);\n\t\t\t\t\t\t} else if (item.type === \"polygon\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Polygon).setMap(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\tcase \"ADD_SHAPES_TO_MAP\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tlet map:google.maps.Map = draft.geofencesList.map as unknown as google.maps.Map; \n\t\t\t\tdraft.geofencesList.fenceList.forEach((item:any) => {\n\t\t\t\t\tif(item.shape){\n\t\t\t\t\t\tif (item.type === \"circle\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Circle).setMap(map);\n\t\t\t\t\t\t\t//add tooltip here to testing\n\t\t\t\t\t\t} else if (item.type === \"rectangle\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Rectangle).setMap(map);\n\t\t\t\t\t\t} else if (item.type === \"polygon\") {\n\t\t\t\t\t\t\t(item.shape as google.maps.Polygon).setMap(map);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\tcase \"UPDATE_SHAPE_ON_MAP\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\taction.payload.geofenceShape.shape.setOptions({\n\t\t\t\t\tfillColor: action.payload.newOptions.fenceColor\n\t\t\t\t});\n\t\t\t});\n\t\tcase \"CLEAR_GEOFENCES_STATE\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.geofencesList.fenceList = [];\n\t\t\t\tdraft.geofencesList.map = null;\n\t\t\t});\n\t\t\t\n\t\t\t\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","export const initialState = {\n\n serviceTruckList:{\n assets: []\n },\n serviceTruckMaint: {},\n serviceTruckListDrawerVisible: false,\n serviceTruckMintDrawerVisible: false,\n map: null\n}\n\n\n\n","import { combineReducers } from \"redux\";\nimport { serviceTruckState } from \"./serviceTruckReducer\";\n\nexport const serviceTruckReducer = combineReducers({\n serviceTruckState: serviceTruckState\n});\n\n\n","import { ServiceTruck } from \"../../FleetOverview2/models\";\nimport { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\nimport moment from \"moment\";\n\nexport function serviceTruckState(state = initialState, action: any) {\n\tlet data: any = null,\n\t\tpayload: any;\n\n\tswitch (action.type) {\n\t\tcase \"GET_SERVICE_TRUCKS_SUCCESS\":\n\t\t\treturn immerProduce(state, draft => {\n\t\t\t\tlet geoTabData = JSON.parse(action.assets.geoTabData)\n\t\t\t\tlet serviceTrucks = action.assets.serviceTrucks\n\n\t\t\t\t/* adding meta data to geotab (operatorName and OrgId) */\n\t\t\t\tgeoTabData = geoTabData.map((geoTab: any) => {\n\t\t\t\t\tserviceTrucks.map((serviceTruck: any) => {\n\t\t\t\t\t\tif (serviceTruck['vin'] == geoTab['VIN']) {\n\t\t\t\t\t\t\tgeoTab['orgId'] = serviceTruck['orgId'];\n\t\t\t\t\t\t\tgeoTab['operatorName'] = moment(serviceTruck['updatedAt']).isAfter(geoTab['dateTime']) ? serviceTruck['operatorName'] : geoTab['driver'];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n \t\t\t{\n \t\t\t\tgeoTab['operatorName'] = geoTab['driver'];\n \t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\treturn geoTab as ServiceTruck;\n\t\t\t\t})\n\t\t\t\t\n\n\t\t\t\tdraft.serviceTruckList.assets = geoTabData;\n\t\t\t})\n\t\tcase \"SET_SERVICE_TRUCK_DRAWER_OPEN\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.serviceTruckListDrawerVisible = true;\n\t\t\t});\n\t\tcase \"SET_SERVICE_TRUCK_DRAWER_CLOSE\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.serviceTruckListDrawerVisible = false;\n\t\t\t});\n\t\tcase \"SET_SERVICE_TRUCK_MAINT_DRAWER_OPEN\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.serviceTruckMintDrawerVisible = true;\n\t\t\t\tdraft.serviceTruckMaint = action.payload.ServiceTruck\n\t\t\t});\n\t\tcase \"SET_SERVICE_TRUCK_MAINT_DRAWER_CLOSE\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.serviceTruckMintDrawerVisible = false;\n\t\t\t\tdraft.serviceTruckMaint = {}\n\t\t\t});\n\t\tcase \"UPDATE_SERVICE_TRUCK_SUCCESS\":\n\t\t\treturn immerProduce(state, (draft) => {\n\n\t\t\t\tlet refreshedList = action.params.assets.map((ServiceTruck: ServiceTruck) => {\n\t\t\t\t\tif (ServiceTruck.VIN == action.params.vin) {\n\t\t\t\t\t\treturn action.params.serviceTrucks\n\t\t\t\t\t}\n\t\t\t\t\treturn ServiceTruck\n\t\t\t\t});\n\n\t\t\t\tdraft.serviceTruckList.assets = refreshedList\n\t\t\t\tdraft.serviceTruckMaint = action.params.serviceTrucks\n\n\t\t\t});\n\t\tcase \"SET_SERVICE_TRUCK_MAP\":\n\t\t\treturn immerProduce(state, (draft) => {\n\t\t\t\tdraft.map = action.payload.map;\n\t\t\t});\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n","\nexport const initialState = {\n tutorials: {\n activeTab: \"1\",\n searchText: \"\",\n tutorialsList: [], \n }\n}","import { combineReducers } from \"redux\";\nimport { tutorialsState } from \"./videotutorialsReducer\";\n\nexport const tutorialsReducers = combineReducers({\n tutorialsState: tutorialsState\n});\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function tutorialsState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"VIDEOTUTORIALS_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.tutorials.tutorialsList = action.data;\n });\n case \"TUTORIAL_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.tutorials.searchText = action.searchText;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => {\n draft.tutorials.activeTab = action.tabNumber;\n });\n default:\n return state;\n }\n}","import { appConfigs } from \"../../../../utils/configurations\";\n\nexport const initialState = {\n contracts: {\n contractsModification: {\n assetsList: null,\n loadingAssetsList: true,\n selectedContractList: [] as any,\n submittingContractList: false,\n },\n renewalTool: {\n assetsList: null,\n loadingAssetsList: true,\n selectedRenewalList: [] as any,\n submittingRenewalList: false,\n },\n billableCustomers: [],\n servicePlansList: [],\n customerBucketDetails: {},\n contractMaintOptions: {\n instance: 0,\n width: 720,\n visible: false,\n title: \"\",\n record: {},\n activeTab: \"1\",\n tabs: [\n {\n title: \"Contract Details\",\n instance: 0,\n disabled: false,\n },\n {\n title: \"Change Log\",\n instance: 0,\n disabled: false,\n },\n ]\n },\n activeTab: \"1\",\n contractsList: {\n contactMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"Contract Details\",\n disabled: false,\n },\n {\n title: \"Contract Log\",\n disabled: false,\n }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n columnsFilters: {\n status: ['active', 'inactive', 'whitelisted']\n },\n tableData: [],\n tableConfig: {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} contract${total > 1 ? 's' : ''}`\n }\n },\n }\n }\n}","import { combineReducers } from \"redux\";\nimport { contractsState } from \"./contractsReducer\";\n\nexport const contractsReducers = combineReducers({\n contractsState: contractsState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function contractsState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"CONTRACTS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.contracts.contractsList.refreshOnUpdate = false;\n draft.contracts.contractsList.tableData = data;\n draft.contracts.contractsList.tableConfig.pagination.total = data ? data[0].totalRecords : 0;\n draft.contracts.contractsList.tableConfig.pagination.current = action.payload.page;\n });\n case \"SET_BILLABLE_CUSTOMER\":\n return immerProduce(state, draft => {\n draft.contracts.billableCustomers = action.payload.billableCustomers;\n });\n case \"SET_SERVICE_PLANS_LIST\":\n return immerProduce(state, draft => {\n draft.contracts.servicePlansList = action.payload.servicePlansList;\n });\n case \"GET_CUSTOMER_BUCKET_DETAILS\":\n return immerProduce(state, draft => {\n\n const servicePlanTmp = JSON.parse(JSON.stringify(draft.contracts.servicePlansList))\n const servicePlanBalance = servicePlanTmp?.map((servicePlan: any) => {\n let total_available_quantity = 0\n let partNumberBucketEntries: any = []\n action.payload.customerBucketDetails?.map((bucketEntry:any) => {\n if (bucketEntry.partNumber == servicePlan.partNumber) {\n total_available_quantity = total_available_quantity + parseInt(bucketEntry.availableQuantity)\n partNumberBucketEntries.push(bucketEntry)\n }\n })\n\n servicePlan['total_available_quantity'] = total_available_quantity\n servicePlan['partNumberBucketEntries'] = partNumberBucketEntries\n\n return servicePlan\n })\n \n draft.contracts.customerBucketDetails = servicePlanBalance;\n \n \n });\n case \"CONTRACT_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.contracts.contractsList.searchText = action.searchText;\n });\n case \"CONTRACTS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.contracts.contractsList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => {\n draft.contracts.activeTab = action.tabNumber;\n });\n case \"OPEN_DRAWER\":\n return immerProduce(state, (draft) => {\n const payload = action.payload,\n instance = Math.random();\n draft.contracts.contractMaintOptions.instance = instance;\n draft.contracts.contractMaintOptions.width = payload.width;\n draft.contracts.contractMaintOptions.visible = true;\n draft.contracts.contractMaintOptions.title = payload.title;\n draft.contracts.contractMaintOptions.activeTab = \"1\";\n draft.contracts.contractMaintOptions.record = payload.record;\n });\n case \"CLOSE_DRAWER\":\n return immerProduce(state, (draft) => {\n draft.contracts.contractMaintOptions.visible = false;\n draft.contracts.contractMaintOptions.activeTab = \"1\";\n draft.contracts.contractMaintOptions.record = {};\n });\n case \"DRAWER_TAB_CHANGE\":\n return immerProduce(state, (draft) => {\n draft.contracts.contractMaintOptions.activeTab = action.activeTab;\n });\n case \"SET_ASSETS_LIST\":\n return immerProduce(state, (draft) => {\n draft.contracts.contractsModification.assetsList = action.payload.assetsList;\n draft.contracts.renewalTool.assetsList = action.payload.assetsList;\n draft.contracts.contractsModification.loadingAssetsList = false;\n });\n case \"SET_LOADING_ASSETS\":\n return immerProduce(state, (draft) => {\n draft.contracts.contractsModification.loadingAssetsList = action.payload.state;\n });\n case \"SET_CONTRACT_SUBMITTING\":\n return immerProduce(state, (draft) => {\n draft.contracts.contractsModification.submittingContractList = action.payload.state;\n });\n case \"SET_CONTRACT_MODIFIED_SUCCESSFULLY\":\n return immerProduce(state, (draft) => {\n draft.contracts.contractsModification.submittingContractList = false;\n draft.contracts.contractsModification.selectedContractList = []\n });\n case \"UPDATE_FIELD\":\n return immerProduce(state, (draft) => {\n if(draft.contracts.contractsModification.selectedContractList){\n draft.contracts.contractsModification.selectedContractList = draft.contracts.contractsModification.selectedContractList.map((contract: any) => {\n if(contract.mastertag === action.payload.mastertag){\n contract[action.payload.filedName] = action.payload.value\n }\n return contract\n });\n }\n });\n case \"UPDATE_RENEWAL_FIELD\":\n return immerProduce(state, (draft) => {\n if(draft.contracts.renewalTool.selectedRenewalList){\n draft.contracts.renewalTool.selectedRenewalList = draft.contracts.renewalTool.selectedRenewalList.map((renewal: any) => {\n if(renewal.mastertag === action.payload.mastertag){\n renewal[action.payload.filedName] = action.payload.value\n }\n return renewal\n });\n }\n });\n case \"APPEND_TO_SELECTED_CONTRACTS_LIST\":\n return immerProduce(state, (draft) => {\n // console.log('payload.contract', action.payload.contract)\n\n const exists = draft.contracts.contractsModification.selectedContractList.some((contract:any) => contract.mastertag === action.payload.contract.masterTag)\n \n if(!exists){\n const tmp = {\n contract_id: action.payload.contract?.contractId,\n gateway_id: action.payload.contract?.gatewayID,\n mastertag: action.payload.contract?.masterTag,\n contract_start_date: action.payload.contract?.contractStartDate,\n contract_end_date: action.payload.contract?.contractEndDate,\n old_gateway_status: action.payload.contract?.gatewayStatus,\n old_sim_status: action.payload.contract?.simStatus,\n old_iothub_status: action.payload.contract?.iothubStatus,\n new_gateway_status: action.payload.contract?.gatewayStatus,\n new_sim_status: action.payload.contract?.simStatus,\n new_iothub_status: action.payload.contract?.iothubStatus,\n iccid: action.payload.contract?.iccid,\n justification: '',\n billing_contract_history: JSON.parse(action.payload.contract?.billingContractHistory),\n renewal_contract_history: JSON.parse(action.payload.contract?.renewalContractHistory),\n };\n draft.contracts.contractsModification.selectedContractList = [tmp, ...draft.contracts.contractsModification.selectedContractList];\n }\n \n });\n case \"APPEND_TO_SELECTED_RENEWAL_TOOL_LIST\":\n return immerProduce(state, (draft) => {\n // console.log('payload.contract', action.payload.contract)\n\n const exists = draft.contracts.renewalTool.selectedRenewalList.some((contract:any) => contract.mastertag === action.payload.contract.masterTag)\n \n if(!exists){\n const tmp = {\n customerNumber: JSON.parse(action.payload.contract.billingContractHistory)[0].pts_customer_number,\n billToName: JSON.parse(action.payload.contract.billingContractHistory)[0].customer_name,\n partNumber: \"\",\n orderNumber: \"\",\n customerPO: \"\",\n gatewayID: action.payload.contract.gatewayID,\n orgID: action.payload.contract.orgID,\n mastertag: action.payload.contract.masterTag,\n billing_contract_history: JSON.parse(action.payload.contract.billingContractHistory),\n renewal_contract_history: JSON.parse(action.payload.contract.renewalContractHistory),\n renewal_packages: JSON.parse(action.payload.contract.renewalPackages),\n };\n draft.contracts.renewalTool.selectedRenewalList = [tmp, ...draft.contracts.renewalTool.selectedRenewalList];\n }\n \n });\n case \"REMOVE_FROM_SELECTED_CONTRACTS_LIST\":\n return immerProduce(state, (draft) => {\n // console.log('action.payload.mastertag', action.payload.mastertag)\n draft.contracts.contractsModification.selectedContractList = draft.contracts.contractsModification.selectedContractList.filter((contract: any) => {\n if(contract.mastertag !== action.payload.mastertag){\n return contract\n }\n });\n });\n case \"REMOVE_FROM_SELECTED_RENEWALS_TOOL_LIST\":\n return immerProduce(state, (draft) => {\n // console.log('action.payload.mastertag', action.payload.mastertag)\n draft.contracts.renewalTool.selectedRenewalList = draft.contracts.renewalTool.selectedRenewalList.filter((renewal: any) => {\n if(renewal.mastertag !== action.payload.mastertag){\n return renewal\n }\n });\n });\n default:\n return state;\n }\n}","import { appConfigs } from \"../../../../utils/configurations\";\n\nexport const initialState = {\n controllers: {\n controllersModification: {\n controllersList: null,\n loadingControllersList: true,\n selectedControllerList: [] as any,\n submittingControllerList: false,\n },\n controllerMaintOptions: {\n instance: 0,\n width: 720,\n visible: false,\n title: \"\",\n record: {},\n activeTab: \"1\",\n tabs: [\n {\n title: \"Controller Details\",\n instance: 0,\n disabled: false,\n }\n ]\n },\n activeTab: \"1\",\n controllersList: {\n controllerMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"Controller Details\",\n disabled: false,\n }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n columnsFilters: {\n status: ['active', 'inactive']\n },\n tableData: [],\n tableConfig: {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} controller${total > 1 ? 's' : ''}`\n }\n },\n }\n }\n}","import { combineReducers } from \"redux\";\nimport { controllersState } from \"./controllersReducer\";\n\nexport const controllersReducers = combineReducers({\n controllersState: controllersState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function controllersState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"CONTROLLERS_GET_LIST_SUCCESS\":\n\n data = action.payload.data;\n\n return immerProduce(state, draft => {\n draft.controllers.controllersList.refreshOnUpdate = false;\n draft.controllers.controllersList.tableData = data;\n draft.controllers.controllersList.tableConfig.pagination.total = data ? data[0].totalRecords : 0;\n draft.controllers.controllersList.tableConfig.pagination.current = action.payload.page;\n });\n case \"CONTROLLER_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.controllers.controllersList.searchText = action.searchText;\n });\n case \"CONTROLLERS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.controllers.controllersList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => {\n draft.controllers.activeTab = action.tabNumber;\n });\n case \"OPEN_DRAWER\":\n return immerProduce(state, (draft) => {\n const payload = action.payload,\n instance = Math.random();\n draft.controllers.controllerMaintOptions.instance = instance;\n draft.controllers.controllerMaintOptions.width = payload.width;\n draft.controllers.controllerMaintOptions.visible = true;\n draft.controllers.controllerMaintOptions.title = payload.title;\n draft.controllers.controllerMaintOptions.activeTab = \"1\";\n draft.controllers.controllerMaintOptions.record = payload.record;\n });\n case \"CLOSE_DRAWER\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllerMaintOptions.visible = false;\n draft.controllers.controllerMaintOptions.activeTab = \"1\";\n draft.controllers.controllerMaintOptions.record = {};\n });\n case \"DRAWER_TAB_CHANGE\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllerMaintOptions.activeTab = action.activeTab;\n });\n case \"SET_CONTROLLERS_LIST\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.controllersList = action.payload.controllersList;\n draft.controllers.controllersModification.loadingControllersList = false;\n });\n case \"SET_LOADING_CONTROLLERS\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.loadingControllersList = action.payload.state;\n });\n case \"ADD_CONTROLLER\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.submittingControllerList = action.payload.state;\n });\n case \"ADD_CONTROLLER_SUCCESSFULLY\":\n return immerProduce(state, (draft) => {\n draft.controllers.controllersModification.submittingControllerList = false;\n draft.controllers.controllersModification.selectedControllerList = []\n });\n case \"UPDATE_FIELD\":\n return immerProduce(state, (draft) => {\n if(draft.controllers.controllersModification.selectedControllerList){\n draft.controllers.controllersModification.selectedControllerList = draft.controllers.controllersModification.selectedControllerList.map((controller: any) => {\n if(controller.mastertag === action.payload.mastertag){\n controller[action.payload.filedName] = action.payload.value\n }\n return controller\n });\n }\n });\n default:\n return state;\n }\n}","import { appConfigs } from \"../../../../utils/configurations\";\n\nexport const initialState = {\n applications: {\n controllersList: [],\n applicationsModification: {\n applicationsList: null,\n loadingApplicationsList: true,\n selectedApplicationList: [] as any,\n submittingApplicationList: false,\n },\n applicationMaintOptions: {\n instance: 0,\n width: 720,\n visible: false,\n title: \"\",\n record: {},\n activeTab: \"1\",\n tabs: [\n {\n title: \"Application Details\",\n instance: 0,\n disabled: false,\n },\n // {\n // title: \"Add New Version\",\n // instance: 0,\n // disabled: false,\n // },\n ]\n },\n activeTab: \"1\",\n applicationsList: {\n applicationMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"Application Details\",\n disabled: false,\n },\n // {\n // title: \"Add New Version\",\n // disabled: false,\n // }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n columnsFilters: {\n status: ['active', 'inactive']\n },\n tableData: [],\n tableConfig: {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} application${total > 1 ? 's' : ''}`\n }\n },\n }\n }\n}","import { combineReducers } from \"redux\";\nimport { applicationsState } from \"./applicationsReducer\";\n\nexport const applicationsReducers = combineReducers({\n applicationsState: applicationsState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function applicationsState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"APPLICATIONS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.applications.applicationsList.refreshOnUpdate = false;\n draft.applications.applicationsList.tableData = data;\n draft.applications.applicationsList.tableConfig.pagination.total = data ? data[0].totalRecords : 0;\n draft.applications.applicationsList.tableConfig.pagination.current = action.payload.page;\n });\n case \"APPLICATION_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.applications.applicationsList.searchText = action.searchText;\n });\n case \"APPLICATIONS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.applications.applicationsList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => {\n draft.applications.activeTab = action.tabNumber;\n });\n case \"OPEN_DRAWER\":\n return immerProduce(state, (draft) => {\n const payload = action.payload,\n instance = Math.random();\n draft.applications.applicationMaintOptions.instance = instance;\n draft.applications.applicationMaintOptions.width = payload.width;\n draft.applications.applicationMaintOptions.visible = true;\n draft.applications.applicationMaintOptions.title = payload.title;\n draft.applications.applicationMaintOptions.activeTab = \"1\";\n draft.applications.applicationMaintOptions.record = payload.record;\n });\n case \"CLOSE_DRAWER\":\n return immerProduce(state, (draft) => {\n draft.applications.applicationMaintOptions.visible = false;\n draft.applications.applicationMaintOptions.activeTab = \"1\";\n draft.applications.applicationMaintOptions.record = {};\n });\n case \"DRAWER_TAB_CHANGE\":\n return immerProduce(state, (draft) => {\n draft.applications.applicationMaintOptions.activeTab = action.activeTab;\n });\n case \"SET_APPLICATIONS_LIST\":\n return immerProduce(state, (draft) => {\n draft.applications.applicationsModification.applicationsList = action.payload.applicationsList;\n draft.applications.applicationsModification.loadingApplicationsList = false;\n });\n case \"SET_LOADING_APPLICATIONS\":\n return immerProduce(state, (draft) => {\n draft.applications.applicationsModification.loadingApplicationsList = action.payload.state;\n });\n case \"ADD_APPLICATION\":\n return immerProduce(state, (draft) => {\n draft.applications.applicationsModification.submittingApplicationList = action.payload.state;\n });\n case \"ADD_APPLICATION_SUCCESSFULLY\":\n return immerProduce(state, (draft) => {\n draft.applications.applicationsModification.submittingApplicationList = false;\n draft.applications.applicationsModification.selectedApplicationList = []\n });\n case \"UPDATE_FIELD\":\n return immerProduce(state, (draft) => {\n if(draft.applications.applicationsModification.selectedApplicationList){\n draft.applications.applicationsModification.selectedApplicationList = draft.applications.applicationsModification.selectedApplicationList.map((application: any) => {\n if(application.mastertag === action.payload.mastertag){\n application[action.payload.filedName] = action.payload.value\n }\n return application\n });\n }\n });\n case \"GET_CONTROLLERS_LIST\":\n return immerProduce(state, (draft) => {\n draft.applications.controllersList= action.controllersList;\n })\n default:\n return state;\n }\n}","import { appConfigs } from \"../../../../utils/configurations\";\n\nexport const initialState = \n{\n softwares: \n {\n controllersList: [],\n softwaresModification: \n {\n softwaresList: null,\n loadingSoftwaresList: true,\n selectedSoftwareList: [] as any,\n submittingSoftwareList: false,\n },\n softwareMaintOptions: \n {\n instance: 0,\n width: 720,\n visible: false,\n title: \"\",\n record: {},\n orgs: [],\n devicemodel:\"\",\n softwaretype:\"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"Software Details\",\n instance: 0,\n disabled: false,\n },\n ],\n },\n activeTab: \"1\",\n softwaresList: \n {\n softwareMaint: \n {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"Software Details\",\n disabled: false,\n },\n ],\n },\n searchText: \"\",\n refreshOnUpdate: false,\n columnsFilters: \n {\n status: [\"active\", \"inactive\"],\n },\n tableData: [],\n tableConfig: \n {\n pagination: \n {\n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems,\n showTotal: (total: number, range: Array<number>) =>\n `${range[0]} - ${range[1]} of ${total} software${\n total > 1 ? \"s\" : \"\"\n }`,\n },\n },\n },\n },\n};\n","import { combineReducers } from \"redux\";\nimport { softwaresState } from \"./softwaresReducers\";\n\nexport const softwaresReducers = combineReducers({\n softwaresState: softwaresState,\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function softwaresState(state = initialState, action: any) \n{\n let data: any = null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n payload: any;\n switch (action.type) \n {\n case \"SOFTWARES_GET_SUCCESS\": data = action.payload.data;\n return immerProduce(state, (draft) =>\n {\n draft.softwares.softwaresList.refreshOnUpdate = false;\n draft.softwares.softwaresList.tableData = data;\n draft.softwares.softwaresList.tableConfig.pagination.total = data? data[0].totalRecords: 0;\n draft.softwares.softwaresList.tableConfig.pagination.current =\n action.payload.page;\n draft.softwares.softwareMaintOptions.record = data;\n });\n case \"SOFTWARE_MAINT_ORGS_SUCCESS\": data = action.payload.data;\n return immerProduce(state, draft => \n {\n draft.softwares.softwareMaintOptions.orgs = data;\n });\n case \"SOFTWARE_SET_SEARCH\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwaresList.searchText = action.searchText;\n });\n case \"SOFTWARES_SET_PAGINATION\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwaresList.tableConfig.pagination.onChange =\n action.onPaginationChange;\n });\n case \"SET_TAB\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.activeTab = action.tabNumber;\n });\n case \"OPEN_DRAWER\":\n return immerProduce(state, (draft) => \n {\n const payload = action.payload,\n instance = Math.random();\n draft.softwares.softwareMaintOptions.instance = instance;\n draft.softwares.softwareMaintOptions.width = payload.width;\n draft.softwares.softwareMaintOptions.visible = true;\n draft.softwares.softwareMaintOptions.title = payload.title;\n draft.softwares.softwareMaintOptions.activeTab = \"1\";\n draft.softwares.softwareMaintOptions.record = payload.record;\n });\n case \"CLOSE_DRAWER\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwareMaintOptions.visible = false;\n draft.softwares.softwareMaintOptions.activeTab = \"1\";\n });\n case \"DRAWER_TAB_CHANGE\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwareMaintOptions.activeTab = action.activeTab;\n });\n case \"SET_SOFTWARES_LIST\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwaresModification.softwaresList =\n action.payload.softwaresList;\n draft.softwares.softwaresModification.loadingSoftwaresList = false;\n });\n case \"SET_LOADING_SOFTWARES\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwaresModification.loadingSoftwaresList =\n action.payload.state;\n });\n case \"ADD_SOFTWARE\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwaresModification.submittingSoftwareList =\n action.payload.state;\n });\n case \"ADD_SOFTWARE_SUCCESSFULLY\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.softwaresModification.submittingSoftwareList = false;\n draft.softwares.softwaresModification.selectedSoftwareList = [];\n });\n case \"UPDATE_FIELD\":\n return immerProduce(state, (draft) => \n {\n if (draft.softwares.softwaresModification.selectedSoftwareList) \n {\n draft.softwares.softwaresModification.selectedSoftwareList = \n draft.softwares.softwaresModification.selectedSoftwareList.map((software: any) => {\n if (software.mastertag === action.payload.mastertag) \n {\n software[action.payload.filedName] = action.payload.value;\n }\n return software;\n });\n }\n });\n case \"GET_CONTROLLERS_LIST\":\n return immerProduce(state, (draft) => \n {\n draft.softwares.controllersList = action.controllersList;\n });\n case \"SOFTWARE_DEVICE_MODEL_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => \n {\n draft.softwares.softwareMaintOptions.devicemodel = data;\n });\n default: return state;\n }\n}\n","import { appConfigs } from \"../../../../utils/configurations\";\nexport const initialState =\n{\n csus: \n {\n csuModification: \n {\n csuList: null,\n loadingCsusList: true,\n selectedCsuList: [] as any,\n submittingCsuList: false,\n },\n applications: [],\n appVersions: [],\n selectedCsu: null,\n csuMaintOptions: \n {\n instance: 0,\n width: 720,\n visible: false,\n info_visible: false,\n title: \"\",\n record: null,\n activeTab: \"1\",\n tabs: [\n {\n title: \"Discovery\",\n instance: 0,\n disabled: false,\n },\n {\n title: \"Installation\",\n instance: 0,\n disabled: false,\n },\n {\n title: \"Status\",\n instance: 0,\n disabled: false,\n },\n {\n title: \"History\",\n instance: 0,\n disabled: false,\n },\n \n ],\n installationHistory: [],\n tableConfig: \n {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n }\n }\n },\n activeTab: \"1\",\n csuList: \n {\n csuMaint: \n {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n discovery: {},\n systemstatus:{},\n systemhistory:{},\n title: \"\",\n activeTab: \"1\",\n tabs: [\n {\n title: \"View Installations\",\n disabled: false,\n }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n columnsFilters: \n {\n status: ['active', 'inactive']\n },\n tableData: [],\n tableConfig: \n {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} controller${total > 1 ? 's' : ''}`\n }\n },\n },\n systemhistory:{\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig: \n {\n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} controller${total > 1 ? 's' : ''}`\n }\n },\n },\n \n }\n}","import { combineReducers } from \"redux\";\nimport { DeviceState } from \"./DeviceReducer\";\n\nexport const DeviceReducers = combineReducers({\n DeviceState : DeviceState\n});\n\n","import {produce as immerProduce} from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function DeviceState(\n state = initialState, \n action:any\n) \n{\n let data : any = null\n switch (action.type) \n { \n case \"CSUS_GET_SUCCESS\":data = action.payload;\n return immerProduce(state, draft => \n {\n draft.csus.csuList.refreshOnUpdate = false;\n draft.csus.csuList.tableData = data;\n draft.csus.csuList.tableConfig.pagination.total = data ? data[0].totalRecords : 0;\n draft.csus.csuList.tableConfig.pagination.current = action.payload.page;\n });\n case \"CSU_SET_SEARCH\":\n return immerProduce(state, draft => \n {\n draft.csus.csuList.searchText = action.searchText;\n });\n case \"CSU_SET_PAGINATION\":\n return immerProduce(state, draft => \n {\n draft.csus.csuList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => \n {\n draft.csus.csuList.csuMaint.activeTab = action.tabNumber;\n });\n case \"OPEN_INSTALL_PROGRESS_DRAWER\":\n return immerProduce(state, (draft) => \n {\n const payload = action.payload,\n instance = Math.random();\n draft.csus.csuMaintOptions.instance = instance;\n draft.csus.csuMaintOptions.width = payload.width;\n draft.csus.csuMaintOptions.info_visible = true;\n draft.csus.csuMaintOptions.title = payload.title;\n draft.csus.csuMaintOptions.activeTab = \"1\";\n draft.csus.csuMaintOptions.record = payload.record;\n }); \n case \"CLOSE_DRAWER\":\n return immerProduce(state, (draft) => \n {\n draft.csus.csuMaintOptions.visible = false;\n draft.csus.csuMaintOptions.activeTab = \"1\";\n draft.csus.csuMaintOptions.record = null;\n });\n case \"CLOSE_INSTALL_PROGRESS_DRAWER\":\n return immerProduce(state, (draft) => \n {\n draft.csus.csuMaintOptions.info_visible = false;\n draft.csus.csuMaintOptions.activeTab = \"1\";\n draft.csus.csuMaintOptions.record = null;\n });\n case \"DRAWER_TAB_CHANGE\":\n return immerProduce(state, (draft) => \n {\n draft.csus.csuMaintOptions.activeTab = action.activeTab;\n }); \n case \"SOFTWARES_GET_SUCCESS\": data = action.payload.data;\n return immerProduce(state, (draft) => \n {\n draft.csus.csuList.csuMaint.record = data;\n });\n case \"DISCOVERY_GET_SUCCESS\": data = action.payload.data;\n return immerProduce(state, (draft) => \n {\n draft.csus.csuList.csuMaint.discovery = data;\n }); \n case \"SYSTEMSTATUS_GET_SUCCESS\":data = action.payload.data;\n return immerProduce(state, (draft) => \n {\n draft.csus.csuList.csuMaint.systemstatus = data;\n \n }); \n case \"SYSTEMHISTORY_GET_SUCCESS\":data = action.payload.data;\n return immerProduce(state, (draft) =>\n {\n //draft.csus.csuList.csuMaint.systemhistory = data;\n draft.csus.systemhistory.refreshOnUpdate = false;\n draft.csus.systemhistory.tableData = data;\n draft.csus.systemhistory.tableConfig.pagination.total = data ? data[0].totalRecords : 0;\n draft.csus.systemhistory.tableConfig.pagination.current = action.payload.page;\n }); \n case \"DEVICE_OTA_GET_SUCCESS\": data = action.payload;\n return immerProduce(state, draft => \n {\n draft.csus.csuList.refreshOnUpdate = false;\n draft.csus.csuList.tableData = data;\n draft.csus.csuList.tableConfig.pagination.total = data ? data[0].totalRecords : 0;\n draft.csus.csuList.tableConfig.pagination.current = action.payload.page;\n });\n case \"DISCOVERY_GET_FAILED\":\n return immerProduce(state, draft => {\n draft.csus.csuList.csuMaint.discovery = data;\n }); \n case \"SYSTEMSTATUS_GET_FAILED\":\n return immerProduce(state, draft => {\n draft.csus.csuList.csuMaint.systemstatus = data;\n }); \n case \"CSU_MAINT_FAILED\":\n return immerProduce(state, draft => {\n draft.csus.csuList.tableData = data;\n }); \n case \"SYSTEMHISTORY_FAILED\":\n return immerProduce(state, draft => {\n draft.csus.systemhistory = data;\n }); \n default: return state;\n case \"SOFTWARES_LIST_SUCCESS\": data = action.payload.data;\n return immerProduce(state, (draft) => \n {\n draft.csus.csuList.csuMaint.record = data;\n });\n }\n}","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n csu: {\n csuList:{\n calibrationMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\", \n tabs: [\n {\n title: \"Calibration Info\",\n instance: 0,\n disabled: false\n }\n ]\n },\n\n all:{\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} calibration${total > 1 ? 's' : ''}`\n }\n },\n search: \"\"\n },\n history: {\n tableData: [],\n tableConfig : { \n pagination : { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} calibration${total > 1 ? 's' : ''}`\n }\n }\n },\n }\n }\n}\n\n","import { combineReducers } from \"redux\";\nimport { csuState } from \"./csuReducer\";\n\nexport const csuReducer = combineReducers({\n csuState: csuState\n});\n\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function csuState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n\n switch (action.type) {\n case \"CSU_HISTORY_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.csu.csuList.history.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"CSU_ALL_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.csu.csuList.all.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n\n case \"CSU_HISTORY_DATA\":\n return immerProduce(state, draft => {\n draft.csu.csuList.history.tableData = action.payload.data;\n draft.csu.csuList.history.tableConfig.pagination.total = (action.payload.data.length || 0) > 0 ? action.payload.data[0].totalRecords : 0;//(action.payload.data.length || 0) > 0 ? action.payload.data.length : 0;\n draft.csu.csuList.history.tableConfig.pagination.current = action.payload.page;\n });\n \n case \"CSU_ALL_DATA\":\n return immerProduce(state, draft => {\n draft.csu.csuList.all.tableData = action.payload.data;\n draft.csu.csuList.all.tableConfig.pagination.total = (action.payload.data.length || 0) > 0 ? action.payload.data[0].totalRecords : 0;\n draft.csu.csuList.all.tableConfig.pagination.current = action.payload.page;\n });\n case \"CALIBRATION_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.csu.csuList.calibrationMaint.instance = instance;\n draft.csu.csuList.calibrationMaint.width = payload.width;\n draft.csu.csuList.calibrationMaint.visible = true;\n draft.csu.csuList.calibrationMaint.title = payload.title;\n draft.csu.csuList.calibrationMaint.record = payload.record;\n \n draft.csu.csuList.calibrationMaint.activeTab = \"1\";\n draft.csu.csuList.calibrationMaint.tabs[0].disabled = false;\n draft.csu.csuList.calibrationMaint.tabs[0].instance = instance;\n });\n \n case \"SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.csu.csuList.all.search = action.search;\n draft.csu.csuList.calibrationMaint.record = {};\n });\n case \"CSU_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.csu.csuList.calibrationMaint.visible = false;\n draft.csu.csuList.calibrationMaint.record = {};\n });\n case \"ASSETS_ASSET_MAINT_TAB_CHANGE\":\n return immerProduce(state, draft => {\n draft.csu.csuList.calibrationMaint.activeTab = action.activeTab;\n }); \n default:\n return state;\n }\n \n }","\nexport const initialState = {\n releasenotes: {\n activeTab: \"1\",\n searchText: \"\",\n releasenotesList: [], \n }\n}","import { combineReducers } from \"redux\";\nimport { releasenotesState } from \"./releasenotesReducer\";\n\nexport const releasenotesReducers = combineReducers({\n releasenotesState: releasenotesState\n});\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function releasenotesState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"RELEASENOTES_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.releasenotes.releasenotesList = action.data;\n });\n case \"RELEASENOTES_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.releasenotes.searchText = action.searchText;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => {\n draft.releasenotes.activeTab = action.tabNumber;\n });\n default:\n return state;\n }\n}","\nexport const initialState = {\n userguide: {\n activeTab: \"1\",\n searchText: \"\",\n userguideList: [], \n }\n}","import { combineReducers } from \"redux\";\nimport { userguideState } from \"./userguideReducer\";\n\nexport const userguideReducer = combineReducers({\n userguideState: userguideState\n});\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function userguideState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) { \n case \"USERGUIDE_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.userguide.userguideList = action.data;\n });\n case \"USERGUIDE_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.userguide.searchText = action.searchText;\n });\n case \"SET_TAB\":\n return immerProduce(state, draft => {\n draft.userguide.activeTab = action.tabNumber;\n });\n default:\n return state;\n }\n}","import { appConfigs } from \"./../../../../utils/configurations\";\n\nexport const initialState = {\n oprList: {\n oprMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {}, \n title: \"\",\n activeTab: \"1\",\n operatorOrgs: [],\n tabs: [\n {\n title: \"Operator\",\n instance: 0,\n disabled: true,\n orgUsers:[],\n orgAssets:[],\n orgAccessTypes:[],\n rfidValue: \"\",\n },\n {\n title: \"Assets\",\n disabled: false,\n },\n {\n title: \"Access History\",\n disabled: false,\n }\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n operatorHistoryTableData: [],\n tableConfig : {\n pagination : {\n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n }\n },\n oprHistory: {\n searchText: \"\",\n }\n}","import { combineReducers } from \"redux\";\nimport { oprState } from \"./taylorOprReducer\";\n\nexport const taylorOprReducers = combineReducers({\n oprState: oprState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function oprState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) {\n case \"TAYLOR_OPRS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.refreshOnUpdate = false;\n draft.oprList.tableData = data;\n draft.oprList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.oprList.tableConfig.pagination.current = action.payload.page;\n });\n case \"OPRS_OPR_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const\n payload = action.payload,\n instance = Math.random();\n draft.oprList.oprMaint.instance = instance;\n draft.oprList.oprMaint.width = payload.width;\n draft.oprList.oprMaint.visible = true;\n draft.oprList.oprMaint.title = payload.title;\n draft.oprList.oprMaint.record = payload.record;\n \n draft.oprList.oprMaint.activeTab = \"1\";\n draft.oprList.oprMaint.tabs[0].disabled = true;\n draft.oprList.oprMaint.tabs[0].instance = instance;\n }); \n case \"OPRS_OPR_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.visible = false;\n }); \n case \"OPR_MAINT_ORG_USERS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.tabs[0].orgUsers = data;\n }); \n case \"GET_ORG_ASSETS_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.tabs[0].orgAssets = data;\n });\n case \"GET_OPR_HISTORY\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.operatorHistoryTableData = data;\n draft.oprList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.oprList.tableConfig.pagination.current = action.payload.page;\n });\n case \"OPR_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.oprList.searchText = action.searchText;\n });\n case \"OPR_HISTORY_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.oprHistory.searchText = action.searchText;\n });\n case \"OPRS_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.oprList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"OPR_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.oprList.oprMaint.record = data;\n draft.oprList.oprMaint.title = \"Edit Operator :: \" + data.operatorIdValue;\n }); \n default:\n return state;\n }\n}","import { appConfigs } from \"./../../../../utils/configurations\";\n\nexport const initialState = {\n questionBankList: {\n qbMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n activeTab: \"1\",\n operatorOrgs: [],\n tabs: [\n {\n title: \"QuestionBank\",\n instance: 0,\n disabled: true,\n orgUsers:[],\n orgAssets:[]\n },\n ]\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig : {\n pagination : {\n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} record${total > 1 ? 's' : ''}`\n }\n }\n }\n}","import { combineReducers } from \"redux\";\nimport { questionState} from \"./questionsReducer\";\n\nexport const questionsReducer = combineReducers({\n questionState: questionState\n});","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function questionState(state = initialState, action:any) {\n let data:any = null,\n payload:any;\n switch (action.type) {\n case \"QB_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.questionBankList.refreshOnUpdate = false;\n draft.questionBankList.tableData = data;\n draft.questionBankList.tableConfig.pagination.total = (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.questionBankList.tableConfig.pagination.current = action.payload.page;\n });\n case \"QB_MAINT_OPEN\":\n return immerProduce(state, draft => {\n const \n payload = action.payload,\n instance = Math.random();\n draft.questionBankList.qbMaint.instance = instance;\n draft.questionBankList.qbMaint.width = payload.width;\n draft.questionBankList.qbMaint.visible = true;\n draft.questionBankList.qbMaint.title = payload.title;\n draft.questionBankList.qbMaint.record = payload.record;\n\n draft.questionBankList.qbMaint.activeTab = \"1\";\n draft.questionBankList.qbMaint.tabs[0].disabled = true;\n draft.questionBankList.qbMaint.tabs[0].instance = instance;\n }); \n case \"QB_MAINT_CLOSE\":\n return immerProduce(state, draft => {\n draft.questionBankList.qbMaint.visible = false;\n });\n case \"QB_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.questionBankList.searchText = action.searchText;\n });\n case \"QB_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.questionBankList.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"GET_ASSETS_WITHOUT_QB_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.questionBankList.qbMaint.tabs[0].orgAssets = data;\n });\n case \"QB_MAINT_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.questionBankList.qbMaint.record = data;\n draft.questionBankList.qbMaint.title = \"Edit Question Bank :: \" + data.questionBankName;\n });\n default:\n return state;\n }\n}","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n reportList: {\n reports:[],\n reportMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n orgs: [],\n reports: [],\n users: [],\n mode: \"\",\n selectedTag: [],\n selectedOrgTag: [],\n selectedOrgId: \"\",\n scheduleAddEdit: {\n mode: \"\",\n scheduleId: -1,\n name: \"\",\n frequency: \"\",\n orgId: \"\",\n subscribers: [],\n dayOfMonth: \"\",\n dayOfWeek: \"\",\n reports: [],\n timeZone: \"\",\n timeZoneOffset: 0,\n clientScheduledTime: \"\",\n scheduledTime: \"\",\n },\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig: {\n pagination: {\n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems,\n showTotal: (total: number, range: Array<number>) =>\n `${range[0]} - ${range[1]} of ${total} record${total > 1 ? \"s\" : \"\"}`,\n },\n },\n },\n};\n","import { combineReducers } from \"redux\";\nimport { danaReportState } from \"./danaReportReducer\";\n\nexport const danaReportReducer = combineReducers({\n danaReportState: danaReportState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function danaReportState(state = initialState, action: any) {\n let data: any = null,\n payload: any;\n switch (action.type) {\n \n case \"DANAREPORTS_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, (draft) => {\n draft.reportList.reports = data;\n });\n default:\n return state;\n }\n}\n","import { appConfigs } from \"../../../utils/configurations\";\n\nexport const initialState = {\n orgReportList: {\n orgReportMappingList:[],\n accessToken:[],\n reportMaint: {\n instance: 0,\n width: 720,\n visible: false,\n record: {},\n title: \"\",\n orgs: [],\n reports: [],\n users: [],\n mode: \"\",\n selectedTag: [],\n selectedOrgTag: [],\n selectedOrgId: \"\",\n scheduleAddEdit: {\n mode: \"\",\n scheduleId: -1,\n name: \"\",\n frequency: \"\",\n orgId: \"\",\n subscribers: [],\n dayOfMonth: \"\",\n dayOfWeek: \"\",\n reports: [],\n timeZone: \"\",\n timeZoneOffset: 0,\n clientScheduledTime: \"\",\n scheduledTime: \"\",\n },\n },\n searchText: \"\",\n refreshOnUpdate: false,\n tableData: [],\n tableConfig: {\n pagination: {\n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n onChange: null,\n showLessItems: appConfigs.tables.showLessItems,\n showTotal: (total: number, range: Array<number>) =>\n `${range[0]} - ${range[1]} of ${total} record${total > 1 ? \"s\" : \"\"}`,\n },\n },\n },\n};\n","import { combineReducers } from \"redux\";\nimport { ReportState } from \"./ReportReducer\";\n\nexport const ReportReducer = combineReducers({\n ReportState: ReportState\n});\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function ReportState(state = initialState, action: any) {\n let data: any = null,\n payload: any;\n switch (action.type) {\n case \"ORGREPORT_ACCESS_SUCCESS\":\n return immerProduce(state, draft => { \n draft.orgReportList.orgReportMappingList = action.payload.data;\n //console.log(action.payload.data)\n });\n case \"REPORTSTOKEN_ACCESS_SUCCESS\":\n return immerProduce(state, draft => { \n draft.orgReportList.accessToken = action.payload.data;\n // console.log(action.payload.data)\n }); \n \n default:\n return state;\n }\n}\n","import { ServiceTruck } from './../pages/FleetOverview2/models';\nimport { combineReducers } from \"redux\";\nimport { contextReducer } from \"./contextReducer\";\nimport { supportModeReducer } from \"./supportModeReducer\";\nimport { loginReducer } from \"../pages/Login/reducers\";\nimport { fleetOverviewReducers } from \"../pages/FleetOverview2/reducers\";\nimport { usersReducers } from \"../pages/Users/reducers\";\nimport { rolesReducer } from \"../pages/Roles/reducers\";\nimport { orgsReducers } from \"../pages/Orgs/reducers\";\nimport { countriesReducer } from \"../pages/Countries/reducers\";\nimport { orgSelectorReducers } from \"../pages/OrgSelector/reducers\";\nimport { assetsReducer } from \"../pages/Assets/reducers\";\nimport { userControllersReducers } from \"../pages/Controllers/reducers\";\nimport { alertsReducer } from \"../pages/Alerts/reducers\";\nimport { templatesReducers } from \"../pages/Templates/reducers\";\nimport { templateDetailsReducers } from \"../pages/TemplateDetails/reducers\";\nimport { reportReducer } from \"./reportReducer\";\nimport { dashboardReducer } from \"./dashboardReducer\";\nimport { userOrgAccessReducer } from \"./userOrgAccessReducer\";\nimport { permissionsReducer } from \"./permissionsReducer\";\nimport { oprReducers } from \"../pages/Operators/reducers\";\nimport { reportSchedulesReducers } from \"../pages/ReportSchedules/reducers\";\nimport { geofencesReducer } from \"../pages/GeoFences/reducers\"\nimport { serviceTruckReducer } from \"../pages/ServiceTrucks/reducers\"\nimport { tutorialsReducers } from \"../pages/Help/VideoTutorials/reducers\"\nimport { contractsReducers } from \"../pages/Admin/Contracts/reducers\"\nimport { controllersReducers } from \"../pages/Admin/Controllers/reducers\"\nimport { applicationsReducers } from \"../pages/Admin/Applications/reducers\"\nimport { softwaresReducers } from \"../pages/Iqanopen/Softwares/reducers\";\nimport { DeviceReducers } from \"../pages/Iqanopen/UpdateDeviceSoftware/reducers\"\nimport { csuReducer } from \"../pages/CSU/reducers\"\nimport { releasenotesReducers } from \"../pages/Help/ReleaseNotes/reducers\"\nimport { userguideReducer } from \"../pages/Help/UserGuide/reducers\"\nimport { taylorOprReducers } from \"../pages/TaylorAccess/OperatorManagement/reducers\"\nimport { questionsReducer } from \"./../pages/TaylorAccess/QuestionManagement/reducers\"\nimport { danaReportReducer } from \"./../pages/Dana/reducers\"\nimport { ReportReducer } from \"./../pages/Reports/reducers\"\nconst rootReducer = combineReducers({\n contextReducer, \n supportModeReducer,\n loginReducer,\n fleetOverviewReducers,\n usersReducers,\n rolesReducer,\n orgsReducers,\n countriesReducer,\n orgSelectorReducers,\n assetsReducer,\n userControllersReducers,\n alertsReducer,\n templatesReducers,\n templateDetailsReducers,\n dashboardReducer,\n reportReducer,\n userOrgAccessReducer,\n permissionsReducer,\n oprReducers,\n reportSchedulesReducers,\n geofencesReducer,\n serviceTruckReducer,\n tutorialsReducers,\n contractsReducers,\n controllersReducers,\n applicationsReducers,\n softwaresReducers,\n DeviceReducers,\n csuReducer,\n releasenotesReducers,\n userguideReducer,\n taylorOprReducers,\n questionsReducer,\n danaReportReducer,\n ReportReducer\n\n}); \n\nexport default rootReducer;\n\n","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./contextState\";\n\nexport function contextReducer(state = initialState, action: any) {\n switch (action.type) {\n case \"CONTEXT_SUCCESS\":\n return immerProduce(state, draft => {\n localStorage.setItem(\"context\", JSON.stringify(action.payload.data));\n action.payload.data.user.uiPreferences = (action.payload.data.user.uiPreferences != undefined || action.payload.data.user.uiPreferences != null) ?\n JSON.parse(action.payload.data.user.uiPreferences) : null;\n draft.context = action.payload.data;\n draft.context.initialized = true;\n });\n case \"CONTEXT_UPDATE_GPS_COORDINATES\":\n return immerProduce(state, draft => {\n draft.gpsCoordinates.latitude = action.coordinates.latitude;\n draft.gpsCoordinates.longitude = action.coordinates.longitude;\n });\n case \"CONTEXT_FAILURE\":\n return immerProduce(state, draft => {\n window.localStorage.setItem(\"context\", \"{}\");\n });\n case \"CONTEXT_UPDATE_MAP_DEFAULT_VIEW\":\n return immerProduce(state, draft => {\n draft.context.orgSettings.fleetMapDefaultView = action.mapDefaultView;\n });\n case \"PERMISSIONS_SUCCESS\":\n return immerProduce(state, draft => {\n localStorage.setItem(\"permissions\", JSON.stringify(action.payload.data));\n draft.data = action.payload.data;\n draft.data.initialized = true;\n });\n case \"MAX_COMMAND_PERMISSION_SUCCESS\":\n return immerProduce(state, draft => {\n localStorage.setItem(\"maxCommandPermissionValue\", JSON.stringify(action.payload.data));\n draft.maxCommandPermissionValue = action.payload.data;\n });\n case \"PERMISSIONS_FAILURE\":\n return immerProduce(state, draft => {\n window.localStorage.setItem(\"permissions\", \"{}\");\n });\n case \"STATS_SUCCESS\":\n return immerProduce(state, draft => {\n draft.stats.data = action.payload.data;\n draft.stats.timestamp = new Date();\n draft.stats.initialized = true;\n draft.stats.loading = false;\n });\n case \"SET_STATS_DM1_ASSETS_LIST\":\n return immerProduce(state, draft => {\n draft.stats.assetsWithDm1 = action.payload.assetsWithDm1;\n });\n case \"SET_FLEET_STATS_INITIALIZATION\":\n return immerProduce(state, draft => {\n draft.stats.initialized = action.initialized;\n });\n case \"SET_FLEET_STATS_VISIBILITY\":\n return immerProduce(state, draft => {\n draft.stats.visible = action.visible;\n });\n case \"SET_NOTIFICATION_VISIBILITY\":\n return immerProduce(state, draft => {\n draft.notifications.visible = action.visible;\n });\n case \"SET_DM1_DAILY_COUNT\":\n return immerProduce(state, draft => {\n draft.stats.dm1DailyCount = action.payload.dailyDm1Count.assetDmDailyCount;\n });\n case \"RESET_DM1_DAILY_COUNT\":\n return immerProduce(state, draft => {\n draft.stats.dm1DailyCount = null;\n });\n case \"SET_DM1_HEATMAP\":\n return immerProduce(state, draft => {\n draft.stats.dm1HeatMapData = action.payload.dm1HeatMapData;\n });\n case \"RESET_DM1_HEATMAP\":\n return immerProduce(state, draft => {\n draft.stats.dm1HeatMapData = [];\n });\n case \"SET_FLEET_STATS_LOADING\":\n return immerProduce(state, draft => {\n draft.stats.loading = action.loading;\n });\n case \"ENABLE_SIGNAL_R_DATA\":\n return immerProduce(state, draft => {\n draft.signalRData.enabled = true\n });\n case \"DISABLE_SIGNAL_R_DATA\":\n return immerProduce(state, draft => {\n draft.signalRData.enabled = false\n });\n case \"RESET_SIGNAL_R_DATA\":\n return immerProduce(state, draft => {\n draft.signalRData.data = []\n });\n case \"UPDATE_SIGNAL_R_DATA\":\n return immerProduce(state, draft => {\n let liveData = JSON.parse(action.payload.liveData)\n // console.log(\"liveData\", liveData);\n \n let dashboardUpdatedSignals:any = [];\n // console.log('state.signalRData.data', state.signalRData.data)\n // console.log('liveData', liveData)\n\n // dashboardUpdatedSignals = [...state.signalRData.data]\n Object.keys(state.signalRData.data).map((SignalID:any) => {\n if(!dashboardUpdatedSignals.hasOwnProperty(SignalID)){\n dashboardUpdatedSignals[SignalID] = []\n }\n Object.keys(state.signalRData.data[SignalID]).map((index:any) => {\n dashboardUpdatedSignals[SignalID][index] = state.signalRData.data[SignalID][index]\n })\n })\n\n // console.log('dashboardUpdatedSignals', dashboardUpdatedSignals)\n\n\n let baseTime: any = liveData[0].bt;\n\n /* Reformat SenML data to get only latest (most recent) values for signals on dashboard */\n /* Assuming that the format is all t is in ascending sequence */\n liveData.forEach((dataPoint: any, index: number) => {\n for (let key = 0; key < action.payload.dashboardSignals.length; key++) {\n\n if (dataPoint.hasOwnProperty('bn')) {\n if (dataPoint.bn.includes(action.payload.dashboardSignals[key].signalId)) {\n\n if (!dashboardUpdatedSignals.hasOwnProperty(action.payload.dashboardSignals[key].signalId)) {\n dashboardUpdatedSignals[action.payload.dashboardSignals[key].signalId] = [{\n bt: baseTime,\n name: action.payload.dashboardSignals[key].name,\n signalId: action.payload.dashboardSignals[key].signalId,\n value: dataPoint.v,\n time: dataPoint.hasOwnProperty('t') ? dataPoint.t : 0\n }]\n } else {\n dashboardUpdatedSignals[action.payload.dashboardSignals[key].signalId].unshift({\n bt: baseTime,\n name: action.payload.dashboardSignals[key].name,\n signalId: action.payload.dashboardSignals[key].signalId,\n value: dataPoint.v,\n time: dataPoint.hasOwnProperty('t') ? dataPoint.t : 0\n })\n }\n\n \n }\n\n }\n\n if (dataPoint.hasOwnProperty('n')) {\n if (dataPoint.n.includes(action.payload.dashboardSignals[key].signalId)) {\n\n if (!dashboardUpdatedSignals.hasOwnProperty(action.payload.dashboardSignals[key].signalId)) {\n dashboardUpdatedSignals[action.payload.dashboardSignals[key].signalId] = [{\n bt: baseTime,\n name: action.payload.dashboardSignals[key].name,\n signalId: action.payload.dashboardSignals[key].signalId,\n value: dataPoint.v,\n time: dataPoint.t\n }]\n } else {\n dashboardUpdatedSignals[action.payload.dashboardSignals[key].signalId].unshift({\n bt: baseTime,\n name: action.payload.dashboardSignals[key].name,\n signalId: action.payload.dashboardSignals[key].signalId,\n value: dataPoint.v,\n time: dataPoint.t\n })\n }\n\n \n }\n }\n\n /* handle no .n or .bn */\n if (!dataPoint.hasOwnProperty('bn') && !dataPoint.hasOwnProperty('n')) {\n if (dashboardUpdatedSignals[dashboardUpdatedSignals.length - 1]) {\n if (dashboardUpdatedSignals[dashboardUpdatedSignals.length - 1].hasOwnProperty('bn')) {\n if (dashboardUpdatedSignals[dashboardUpdatedSignals.length - 1].bn.includes(action.payload.dashboardSignals[key].signalId)) {\n dashboardUpdatedSignals[action.payload.dashboardSignals[key].signalId].unshift({\n bt: baseTime,\n name: action.payload.dashboardSignals[key].name,\n signalId: action.payload.dashboardSignals[key].signalId,\n value: dataPoint.v,\n time: dataPoint.hasOwnProperty('t') ? dataPoint.t : 0\n })\n }\n\n }\n\n if (dashboardUpdatedSignals[dashboardUpdatedSignals.length - 1].hasOwnProperty('n')) {\n if (dashboardUpdatedSignals[dashboardUpdatedSignals.length - 1].n.includes(action.payload.dashboardSignals[key].signalId)) {\n dashboardUpdatedSignals[action.payload.dashboardSignals[key].signalId].unshift({\n bt: baseTime,\n name: action.payload.dashboardSignals[key].name,\n signalId: action.payload.dashboardSignals[key].signalId,\n value: dataPoint.v,\n time: dataPoint.t\n })\n }\n }\n }\n\n\n }\n\n }\n });\n\n console.log(`dashboardUpdatedSignals`, dashboardUpdatedSignals)\n draft.signalRData.data = dashboardUpdatedSignals;\n // draft.signalRData.SignalRInitialData = dashboardUpdatedSignals;\n\n });\n case \"STATS_FAILURE\":\n return immerProduce(state, draft => {\n draft.stats.data = {};\n draft.stats.initialized = false;\n draft.stats.loading = false;\n });\n default:\n return state;\n }\n}","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./supportModeState\";\n\nexport function supportModeReducer(state = initialState, action:any) {\n switch (action.type) { \n case \"SUPPORT_MODE_INIT\":\n return immerProduce(state, draft => {\n let supportMode:string = window.sessionStorage.getItem(\"support-mode\") || \"{}\"; \n if (supportMode !== \"{}\") {\n let supportModeJson = JSON.parse(supportMode); \n draft.orgId = supportModeJson.orgId;\n draft.orgName = supportModeJson.orgName;\n draft.isSupportMode = true;\n } \n }); \n case \"SUPPORT_MODE_SET\": \n return immerProduce(state, draft => {\n window.sessionStorage.setItem(\"support-mode\", JSON.stringify({orgId: action.orgId, orgName: action.orgName})); \n draft.orgId = action.orgId;\n draft.orgName = action.orgName;\n draft.isSupportMode = true;\n }); \n case \"SUPPORT_MODE_UNSET\":\n return immerProduce(state, draft => {\n window.sessionStorage.setItem(\"support-mode\", \"{}\"); \n draft.orgId = \"\";\n draft.orgName = \"\";\n draft.isSupportMode = false;\n }); \n default:\n return state;\n }\n}","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function loginReducer(state = initialState, action:any) {\n switch (action.type) { \n case \"LOGIN_GET_SUCCESS\":\n return immerProduce(state, draft => {\n draft.backgroundUrl = action.data.backgroundUrl;\n draft.languageIsoCode2 = action.data.languageIsoCode2;\n draft.languageIsoCode2Default = action.data.languageIsoCode2Default;\n draft.headerColor = action.data.headerColor;\n draft.languages = action.data.languages;\n draft.termsAndConditions = action.data.termsAndConditions;\n });\n default:\n return state;\n }\n}","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./state\";\n\nexport function countriesReducer(state = initialState, action:any) {\n let data:any = null;\n\n switch (action.type) { \n case \"COUNTRIES_SET_PAGINATION\":\n return immerProduce(state, draft => {\n draft.tableConfig.pagination.onChange = action.onPaginationChange;\n });\n case \"COUNTRIES_SET_SEARCH\":\n return immerProduce(state, draft => {\n draft.searchText = action.searchText;\n });\n case \"COUNTRIES_GET_SUCCESS\":\n data = action.payload.data;\n return immerProduce(state, draft => {\n draft.tableData = data;\n draft.tableConfig.pagination.total = data !== null && (data.length || 0) > 0 ? data[0].totalRecords : 0;\n draft.tableConfig.pagination.current = action.payload.page;\n }); \n default:\n return state;\n }\n}","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./dashboardState\";\n\nexport function dashboardReducer(state = initialState, action:any) {\n switch (action.type) { \n case \"TOGGLE_MACHINE_NOTE_DRAWER\":\n return immerProduce(state, draft => {\n draft.context.assetNotes.visible = action.payload.state;\n }); \n case \"GET_NOTES_SUCCESS\":\n return immerProduce(state, draft => {\n const pinnedNotes = action.payload.notesList.filter((note:any) => note.isPinned == 'true');\n const allNotes = action.payload.notesList;\n draft.context.assetNotes.notes.pinned = pinnedNotes;\n draft.context.assetNotes.notes.all = allNotes;\n });\n case \"GET_ASSET_GLOBAL_NOTES_SUCCESS\":\n return immerProduce(state, draft => {\n draft.context.assetNotes.notes.globalNotes = action.payload.globalNotes;\n }); \n case \"NEW_NOTE_ADDED\":\n return immerProduce(state, draft => {\n let newNotes: any = [...draft.context.assetNotes.notes.all, action.payload]\n draft.context.assetNotes.notes.all = newNotes;\n });\n case \"NOTE_PINNED_SUCCESSFULLY\":\n return immerProduce(state, draft => {\n // draft.context.assetNotes.notes.all = [...draft.context.assetNotes.notes.all, action.payload];\n }); \n default:\n return state;\n }\n}","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./reportState\";\n\nexport function reportReducer(state = initialState, action:any) {\n switch (action.type) { \n case \"REPORT_ACCESS_SUCCESS\":\n return immerProduce(state, draft => { \n let reportAccessData:string = JSON.stringify(action.payload.data) || \"{}\"; \n if (reportAccessData !== \"{}\") { \n let reportAccessJson = JSON.parse(reportAccessData); \n draft.orgId = reportAccessJson.orgId;\n draft.orgName = reportAccessJson.orgName;\n draft.orgAccess = reportAccessJson.orgAccess;\n } \n }); \n case \"REPORT_ACCESS_FAILURE\":\n return immerProduce(state, draft => {\n draft.orgAccess = null;\n }); \n default:\n return state;\n }\n}","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./userOrgAccessState\";\n\nexport function userOrgAccessReducer(state = initialState, action:any) {\n switch (action.type) { \n case \"USER_ORG_ACCESS_SUCCESS\":\n return immerProduce(state, draft => { \n let userOrgAccessData:string = JSON.stringify(action.payload.data) || \"{}\"; \n if (userOrgAccessData !== \"{}\") { \n let userOrgAccess = JSON.parse(userOrgAccessData);\n draft.status = userOrgAccess.status;\n draft.timestamp = userOrgAccess.timestamp;\n draft.data.userOrgAccess = userOrgAccess.data.userOrgAccess;\n } \n }); \n case \"USER_ORG_ACCESS_FAILURE\":\n return immerProduce(state, draft => {\n draft.data.userOrgAccess = null; \n }); \n default:\n return state;\n }\n}","import { produce as immerProduce } from \"immer\";\nimport { initialState } from \"./permissionsState\";\n\nexport function permissionsReducer(state = initialState, action:any) { \n switch (action.type) { \n case \"PERMISSIONS_RESULT\":\n return immerProduce(state, draft => { \n let reportAccessData:string = JSON.stringify(action.payload.data) || \"{}\"; \n //window.sessionStorage.setItem(\"permissionsset\", \"{}\"); \n draft.IsCreate = true;\n draft.IsRead=true;\n draft.IsUpdate=true;\n draft.IsDelete=true;\n }); \n default:\n return state;\n }\n}","import { createBrowserHistory } from 'history';\n\nexport default createBrowserHistory();","import { message } from \"antd\";\nimport { clientStorageClear, getLoginUrl, loadingIndicatorStart, loadPage, messageExists } from \"../commonHelpers\";\nimport { appConfigs } from \"../configurations\";\n\nexport const successResponse = (\n me: any, \n message: string\n) => {\n\n me.setState({ \n formSuccess: true, \n formSuccessMessage: message || appConfigs.settings.form.alerts.successDefaultMessage,\n formError: false,\n formErrorMessage: \"\",\n formCommit: true,\n formWarning: false, \n formWarningMessage: \"\",\n });\n}\n\nexport const warningResponse = (\n me: any, \n message: string\n) => {\n\n me.setState({ \n formWarning: true, \n formWarningMessage: message,\n formError: false,\n formErrorMessage: \"\",\n formCommit: true,\n formSuccess: false,\n formSuccessMessage: \"\"\n });\n}\n\nexport const errorResponse = (\n me: any, \n error: any,\n formContext: boolean = true\n) => {\n\n let errorStatus:number = !error.response ? 999 : (error.response.status || 999);\n if (errorStatus === 400) { \n let generalError:string = \"\";\n let formErrors:any = [];\n let fieldErrors:any = [];\n\n if (error.response.data != null && error.response.data.errors != null && (error.response.data.errors.length || 0) !== 0) {\n error.response.data.errors.forEach(function(record:any) {\n if (record.type === \"error\" && !(record.message || \"\").startsWith(\"APP-ERR#\")) {\n generalError = record.message || appConfigs.errors.api.defaultErrorMessage; \n }\n if (record.type === \"form\" && !(record.message || \"\").startsWith(\"APP-ERR#\")) {\n formErrors.push(record.message || \"Empty error message\"); \n }\n if (record.type === \"field\" && !(record.message || \"\").startsWith(\"APP-ERR#\")) {\n let fieldError:string[] = [];\n error.response.data.errors.forEach(function(field:any) {\n if (field.type === \"field\" && field.reference === record.reference) {\n fieldError.push(field.message); \n }\n });\n fieldErrors.push(\n {\n name: record.reference,\n errors: fieldError\n }\n );\n }\n });\n }\n if (generalError !== \"\" && !(generalError || \"\").startsWith(\"APP-ERR#\")) {\n const messageText = generalError;\n if (!messageExists(messageText)) {\n setTimeout(function() {\n message.error(messageText);\n }, 100);\n }\n }\n else {\n if (formContext) {\n if (fieldErrors.length > 0) {\n me.formRef.current!.setFields(fieldErrors);\n }\n if (formErrors.length > 0 || fieldErrors.length > 0) {\n //As this is a common function Fix should be validated with all pages\n // let errorMsgs: string[] = [];\n // if(fieldErrors.length > 0 && fieldErrors) {\n // errorMsgs = fieldErrors.reduce((acc: any, elem: any) => {\n // const errorArray = elem.errors.map((e: any)=> e);\n // acc = [...acc, ...errorArray];\n // return acc;\n // },[]); \n // if(errorMsgs.length > 1) {\n // errorMsgs = errorMsgs.filter((v, i, a) => a.indexOf(v) === i);\n // }\n // } \n \n \n me.setState({ \n formSuccess: false, \n formSuccessMessage: \"\",\n formError: true, \n //formErrorMessage: formErrors.length > 0 ? formErrors : fieldErrors.length > 0 ? errorMsgs: []\n formErrorMessage: formErrors\n });\n }\n if (formErrors.length === 0 && fieldErrors.length === 0) {\n const messageText = appConfigs.errors.api.defaultErrorMessage;\n if (!messageExists(messageText)) {\n setTimeout(function() {\n message.error(messageText);\n }, 100);\n }\n }\n }\n else {\n if (formErrors.length > 0) {\n formErrors.forEach((error:string) => message.error(error));\n }\n if (fieldErrors.length > 0) {\n formErrors.forEach((error:string) => message.error(error));\n }\n if (formErrors.length === 0 && fieldErrors.length === 0) {\n const messageText = appConfigs.errors.api.defaultErrorMessage;\n if (!messageExists(messageText)) {\n setTimeout(function() {\n message.error(messageText);\n }, 100);\n }\n }\n }\n }\n }\n else if (errorStatus === 401) {\n if (window.location.pathname.toLowerCase().indexOf(\"/login\") === -1) {\n const messageText = \"Session expired - Please sign in again\"; \n if (!messageExists(messageText)) {\n setTimeout(function() {\n message.error(messageText);\n }, 100);\n }\n loadingIndicatorStart();\n setTimeout(function() {\n const loginUrl = getLoginUrl();\n clientStorageClear();\n loadPage(loginUrl);\n }, 2500); \n }\n }\n else if (errorStatus === 404) {\n }\n else {\n if (!messageExists(appConfigs.errors.api.defaultErrorMessage)) {\n setTimeout(function() {\n message.error(appConfigs.errors.api.defaultErrorMessage);\n }, 100);\n }\n }\n \n}\n\nexport const resetFormErrors = (\n me: any, \n formRef: any\n) => {\n\n let fieldErrors:any = [];\n\n formRef.getFieldsError().forEach((record: any, index: number) => {\n fieldErrors.push(\n {\n name: record.name[0],\n errors: null\n }\n );\n });\n\n formRef.setFields(fieldErrors);\n}\n\n","import Axios from \"axios\";\nimport { appConfigs } from \"../utils/configurations\";\nimport { errorResponse } from \"../utils/apiHelpers/apiHelpers\";\n\nexport function contextGet(\n me?: any,\n callbackSuccessFn?: any,\n callbackErrorFn?: any\n) {\n return async (dispatch: any) => {\n await Axios.get(\n appConfigs.server.URL + \"/ui/api/context\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackSuccessFn != null) { \n callbackSuccessFn(response.data.data.context); \n }\n dispatch({ type: \"CONTEXT_SUCCESS\", payload: {data: response.data.data.context} });\n dispatch({ type: \"ORG_SELECTOR_SET_INCLUDE_SUBORGS\", includeSuborgs: response.data.data.context.orgSelection.includeSuborgs, updateState: false});\n dispatch({ type: \"ORG_SELECTOR_SET_ORG_SELECTION\", data: response.data.data.context.orgSelection.selections });\n }\n )\n .catch(function (error) { \n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"CONTEXT_FAILURE\", error: error });\n }\n );\n };\n}\n\nexport function contextUpdateGPSCoordinates(\n coordinates: any \n) { \n return (dispatch: any) => {\n dispatch({ type: \"CONTEXT_UPDATE_GPS_COORDINATES\", coordinates: coordinates });\n }\n}\n\nexport function contextUpdateMapDefaultView(\n mapDefaultView: string \n) { \n return (dispatch: any) => {\n dispatch({ type: \"CONTEXT_UPDATE_MAP_DEFAULT_VIEW\", mapDefaultView: mapDefaultView });\n }\n}\n\nexport function permissionsGet(\n me?: any,\n callbackSuccessFn?: any, \n callbackErrorFn?: any\n) { \n \n return async (dispatch: any) => {\n await Axios.get( \n appConfigs.server.URL + \"/ui/api/context/permissions\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n \n if (callbackSuccessFn != null) { \n callbackSuccessFn(response.data.data); \n } \n dispatch({ type: \"PERMISSIONS_SUCCESS\", payload: {data: response.data.data} });\n }\n )\n .catch(function (error) { \n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"PERMISSIONS_FAILURE\", error: error });\n }\n );\n };\n}\n\n\nexport function maxCommandPermissionValueGet(\n me?: any,\n callbackSuccessFn?: any, \n callbackErrorFn?: any\n) { \n \n return async (dispatch: any) => {\n await Axios.get( \n appConfigs.server.URL + \"/ui/api/context/max-command-permission-value\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackSuccessFn != null) { \n callbackSuccessFn(response.data.data); \n } \n dispatch({ type: \"MAX_COMMAND_PERMISSION_SUCCESS\", payload: {data: response.data.data} });\n }\n )\n .catch(function (error) { \n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"PERMISSIONS_FAILURE\", error: error });\n }\n );\n };\n}\n\n\nexport function getQuickStats(\n me?: any,\n callbackSuccessFn?: any, \n callbackErrorFn?: any\n) { \n \n return async (dispatch: any) => {\n await Axios.get( \n appConfigs.server.URL + \"/ui/api/get_quick_stats\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackSuccessFn != null) { \n callbackSuccessFn(response.data.data.quickStats); \n } \n dispatch({ type: \"STATS_SUCCESS\", payload: {data: response.data.data.quickStats} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"STATS_FAILURE\", error: error });\n }\n );\n };\n}\n\nexport function fleetStatsVisibility(\n visible: boolean,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_FLEET_STATS_VISIBILITY\", visible: visible });\n }\n}\n\nexport function notificationVisibility(\n visible: boolean,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_NOTIFICATION_VISIBILITY\", visible: visible });\n }\n}\n\n\nexport function updateDm1DailyCount(\n mastertag: string,\n dailyCountGetFailure: any\n) {\n return async (dispatch: any) => {\n await Axios.get( \n appConfigs.server.URL + \"/ui/api/get_daily_dm1_count/\"+mastertag, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (response.data.data.assetDailyDm1Count != null) {\n dispatch({ type: \"SET_DM1_DAILY_COUNT\", payload: { dailyDm1Count: response.data.data.assetDailyDm1Count } });\n } else {\n dispatch({ type: \"RESET_DM1_DAILY_COUNT\" });\n }\n })\n .catch(function (error) {\n dailyCountGetFailure(error);\n dispatch({ type: \"RESET_DM1_DAILY_COUNT\" });\n }\n );\n };\n}\n\n\nexport function updateDm1HeatMap(\n mastertag: string,\n getFailure: any\n) {\n return async (dispatch: any) => {\n await Axios.get( \n appConfigs.server.URL + \"/ui/api/get_dm1_heatmap/\"+mastertag, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (response.data.data.dm1HeatMapData != null) {\n dispatch({ type: \"SET_DM1_HEATMAP\", payload: { dm1HeatMapData: response.data.data.dm1HeatMapData } });\n } else {\n dispatch({ type: \"RESET_DM1_HEATMAP\" });\n }\n })\n .catch(function (error) {\n getFailure(error);\n dispatch({ type: \"RESET_DM1_HEATMAP\" });\n }\n );\n };\n}\n\n\nexport function getAssetsWithDMs(\n getFailureMessage: any\n) {\n return async (dispatch: any) => {\n await Axios.get(\n appConfigs.server.URL + \"/ui/api/get_assets_with_dm1\", {\n responseType: \"json\",\n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (response.data.data.assetsWithDm1 != null) {\n dispatch({ type: \"SET_STATS_DM1_ASSETS_LIST\", payload: { assetsWithDm1: response.data.data.assetsWithDm1 } });\n } else {\n dispatch({ type: \"RESET_STATS_DM1_ASSETS_LIST\" });\n }\n })\n .catch(function (error) {\n getFailureMessage(error);\n dispatch({ type: \"RESET_STATS_DM1_ASSETS_LIST\" });\n }\n );\n };\n}\n\n\nexport function fleetStatsInitialization(\n initialized: boolean,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_FLEET_STATS_VISIBILITY\", initialized: initialized });\n }\n}\n\nexport function notificationInitialization(\n initialized: boolean,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_NOTIFICATION_VISIBILITY\", initialized: initialized });\n }\n}\n\nexport function notificationsLoading(\n initialized: boolean,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_NOTIFICATION_LOADING\", initialized: initialized });\n }\n}\n\nexport function fleetStatsLoading(\n loading: boolean,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_FLEET_STATS_LOADING\", loading: loading });\n }\n}\n\nexport function enableSignalRData() {\n return (dispatch: any) => {\n dispatch({ type: \"ENABLE_SIGNAL_R_DATA\" });\n }\n}\n\nexport function disableSignalRData() {\n return (dispatch: any) => {\n dispatch({ type: \"DISABLE_SIGNAL_R_DATA\" });\n }\n}\n\nexport function updateSignalRData(\n liveData: any,\n dashboardSignals: any\n) {\n return (dispatch: any) => {\n dispatch({\n type: \"UPDATE_SIGNAL_R_DATA\",\n payload: {\n liveData: liveData,\n dashboardSignals: dashboardSignals,\n }\n });\n }\n}\n\nexport function resetSignalRData() {\n return (dispatch: any) => {\n dispatch({ type: \"RESET_SIGNAL_R_DATA\" });\n }\n}\n","export function supportModeInit(\n me: any,\n callbackFn: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SUPPORT_MODE_INIT\" });\n if (callbackFn != null) {\n callbackFn();\n }\n }\n} \n\nexport function supportModeSet(\n me: any,\n callbackFn: any,\n orgId: string,\n orgName: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SUPPORT_MODE_SET\", orgId: orgId, orgName: orgName });\n if (callbackFn != null) {\n callbackFn(orgId, orgName);\n }\n }\n} \n\nexport function supportModeUnSet(\n me: any,\n callbackFn: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SUPPORT_MODE_UNSET\" });\n if (callbackFn != null) {\n callbackFn();\n }\n }\n} ","import Axios from \"axios\";\r\nimport { appConfigs } from \"../utils/configurations\";\r\n\r\nexport function onAssetNotesDrawerToggle(\r\n state: boolean\r\n) {\r\n return (dispatch: any) => {\r\n dispatch({ type: \"TOGGLE_MACHINE_NOTE_DRAWER\", payload: {state: state} });\r\n }\r\n} \r\n\r\n\r\nexport function getAssetNotes(\r\n gatewayId: string,\r\n callbackErrorFn?: any\r\n) {\r\n\r\n return async (dispatch: any) => {\r\n\r\n await Axios.get(appConfigs.server.URL + \"/ui/api/assets/\"+gatewayId+\"/asset_notes\", {\r\n\t\t\tresponseType: \"json\",\r\n\t\t})\r\n .then(response => { \r\n let notesList = response.data.data.assetNotes\r\n dispatch({ type: \"GET_NOTES_SUCCESS\", payload: { notesList } });\r\n })\r\n .catch(function (error) { \r\n if (callbackErrorFn != null) {\r\n callbackErrorFn(\"Failed get asset notes!\");\r\n }\r\n }\r\n );\r\n }\r\n} \r\nexport function getAssetGlobalNotes(\r\n orgId: string,\r\n callbackErrorFn?: any\r\n) {\r\n\r\n return async (dispatch: any) => {\r\n\r\n Axios.get(appConfigs.server.URL + \"/ui/api/orgs/\" + orgId + \"/getAssetGlobalNotes\", {\r\n\t\t\tresponseType: \"json\",\r\n\t\t})\r\n .then(response => { \r\n let globalNotes = response.data.data.globalNotes\r\n dispatch({ type: \"GET_ASSET_GLOBAL_NOTES_SUCCESS\", payload: { globalNotes } });\r\n })\r\n .catch(function (error) { \r\n if (callbackErrorFn != null) {\r\n callbackErrorFn(\"Failed get asset notes!\");\r\n }\r\n }\r\n );\r\n }\r\n} \r\n\r\nexport function addNewNote(\r\n noteBody: string,\r\n gatewayId: string,\r\n callbackSuccessFn?: any,\r\n callbackErrorFn?: any\r\n) {\r\n\r\n return async (dispatch: any) => {\r\n\r\n await Axios.post(appConfigs.server.URL + \"/ui/api/assets/add_asset_note\", null, {\r\n params: {\r\n noteBody: noteBody,\r\n gatewayId: gatewayId,\r\n Mode: 'add'\r\n },\r\n })\r\n .then(response => { \r\n if (callbackSuccessFn != null) { \r\n callbackSuccessFn(\"Note Added Successfully\"); \r\n }\r\n })\r\n .catch(function (error) { \r\n if (callbackErrorFn != null) {\r\n callbackErrorFn(\"Adding new note failed!\");\r\n }\r\n });\r\n \r\n }\r\n} \r\n\r\n\r\nexport function pinMessage(\r\n noteId: string,\r\n pinnedStatus: string,\r\n callbackSuccessFn?: any,\r\n callbackErrorFn?: any\r\n) {\r\n\r\n return async (dispatch: any) => {\r\n\r\n await Axios.post(appConfigs.server.URL + \"/ui/api/assets/add_asset_note\", null, {\r\n params: {\r\n noteId: noteId,\r\n pinnedStatus: pinnedStatus,\r\n Mode: 'update'\r\n }\r\n })\r\n .then(response => { \r\n if (callbackSuccessFn != null) { \r\n if (pinnedStatus == 'false') {\r\n callbackSuccessFn(\"Message Unpinned Successfully\"); \r\n } else {\r\n callbackSuccessFn(\"Message Pinned Successfully\"); \r\n }\r\n }\r\n })\r\n .catch(function (error) { \r\n if (callbackErrorFn != null) {\r\n callbackErrorFn(\"Failed to Pin the message!\");\r\n }\r\n });\r\n }\r\n\r\n} ","import Axios from \"axios\";\nimport { appConfigs } from \"../utils/configurations\";\n\nexport function reportAccessGet(\n me?: any,\n callbackSuccessFn?: any,\n callbackErrorFn?: any,\n selectedOrgId?: any\n) {\n return async (dispatch: any) => {\n await Axios.get(\n appConfigs.server.URL + `/ui/api/orgReports/${selectedOrgId}`, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackSuccessFn != null) {\n callbackSuccessFn(response.data);\n console.log(response.data)\n }\n dispatch({ type: \"REPORT_ACCESS_SUCCESS\", payload: {data: response.data} });\n \n }\n )\n .catch(function (error) { \n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"REPORT_ACCESS_FAILURE\", error: error });\n }\n );\n };\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../utils/configurations\";\nimport { errorResponse } from \"../utils/apiHelpers/apiHelpers\";\n\nexport function userOrgAccessGet(\n me?: any,\n callbackSuccessFn?: any,\n callbackErrorFn?: any,\n selectedOrgId?: any,\n userId?: any\n) {\n return async (dispatch: any) => {\n await Axios.get(\n appConfigs.server.URL + `/api/users/${userId}/org/${selectedOrgId}?admin=true`, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackSuccessFn != null) {\n callbackSuccessFn(response.data);\n }\n dispatch({ type: \"USER_ORG_ACCESS_SUCCESS\", payload: {data: response.data} });\n }\n )\n .catch(function (error) { \n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"USER_ORG_ACCESS_FAILURE\", error: error });\n }\n );\n };\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { any } from \"@amcharts/amcharts4/.internal/core/utils/Array\";\n\nexport function mapsAssetDrawerClusterOpen(\n ids: any,\n zoomTo: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_CLUSTER_SELECTED\", ids: ids, zoomTo: zoomTo });\n dispatch({ type: \"FLEET_OVERVIEW_ASSET_DRAWER_STATE\", title: \"Cluster Assets\", mode: \"cluster\", state: true });\n }\n} \n\nexport function mapsAssetDrawerAssetSearchOpen() {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_ASSET_SEARCH_SELECTED\" });\n dispatch({ type: \"FLEET_OVERVIEW_ASSET_DRAWER_STATE\", title: \"Assets\", mode: \"asset-search\", state: true });\n }\n} \n\nexport function mapsAssetDrawerClose() {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_ASSET_DRAWER_STATE\", state: false });\n }\n} \n\nexport function clusterInfoSearch(\n searchText: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_CLUSTER_INFO_SEARCH\", searchText: searchText }); \n }\n} \n\nexport function assetSearchSearch(\n searchText: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_ASSET_SEARCH_SEARCH\", searchText: searchText }); \n }\n} \n\nexport function assetSearchReset() {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_GLOBAL_SEARCH_SUCCESS\", assets: [] });\n }\n} \n\nexport function filtersToggle(\n filterName: any,\n mapActions: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_FILTERS_TOGGLE\", filterName: filterName, mapActions: mapActions });\n }\n} \n\nexport function filtersReset(\n mapActions: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"FLEET_OVERVIEW_FILTERS_RESET\", mapActions: mapActions });\n }\n} \n\nexport function toggleMarkerToolTip(\n visibility: boolean\n) {\n return (dispatch: any) => {\n dispatch({ type: \"TOGGLE_MARKER_TOOLTIP\", visibility: visibility });\n }\n} \n\nexport function updateToolTipMarkerDetails(\n marker: any,\n gmarker: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"UPDATE_TOOLTIP_MARKER\", marker: marker, gmarker: gmarker });\n }\n}\n\n\nexport function updateToolTipAssetDetails(\n asset: any,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"UPDATE_TOOLTIP_ASSET\", asset: asset });\n }\n}\n\nexport function updateToolTipOverlay(\n overlay: any,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"UPDATE_TOOLTIP_OVERLAY\", overlay: overlay });\n }\n}\n\n\nexport function submitAssetDown(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any,\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/update-assets-down\",\n record,\n {\n responseType: \"json\", \n headers: {},\n params: {\n assetId: record.assetId,\n customFieldId: record.customFieldId,\n description: record.description,\n clearDownStatus: record.clearDownStatus,\n assetDownCategory:record.assetDownCategory,\n mastertag:record.mastertag,\n orgId:record.orgId,\n orgName:record.orgName,\n assetName:record.assetName\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.description);\n }\n \n // dispatch({ type: \"ASSET_DOWN_SUBMITTED_SUCCESS\", record: record });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\n\nexport function getFleetOverview(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n mode: string,\n searchText?: string,\n originator?: string,\n preferences?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/fleet-overview\", {\n responseType: \"json\", \n headers: {},\n params: {\n mode: mode,\n searchText: searchText\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.assets);\n }\n if (mode === \"map\") {\n dispatch({ type: \"FLEET_OVERVIEW_MAP_SUCCESS\", assets: response.data.data.assets, originator: originator, preferences: preferences});\n }\n else {\n dispatch({ type: \"FLEET_OVERVIEW_GLOBAL_SEARCH_SUCCESS\", assets: response.data.data.assets });\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(null, error);\n }\n errorResponse(null, error);\n });\n };\n}\n\nexport function getPreferedSignals(\n callbackFnSuccess: Function, \n assetId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + `/ui/api/assets/${assetId}/signalpreferences`, {\n responseType: \"json\", \n headers: {},\n params: {\n preference:'pinnedsignals'\n }\n }\n )\n .then(response => {\n if(response.data && response.data.data.signals){\n callbackFnSuccess({signals: response.data.data.signals.preferedSignals, assetId: assetId}); \n } else {\n const asset = { signals : [], assetId: null};\n callbackFnSuccess({signals: [], assetId: assetId}); \n } \n }\n )\n .catch(function (error) { \n errorResponse(null, error);\n });\n };\n}\nexport function filterPreferences(\n pageName: string,\n key: string,\n value: string,\n isResetEnabled: boolean,\n callbackFnSuccess?: any,\n isTimezoneChanged?:any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + `/ui/api/filterPreferences/${pageName}`,\n {\n key: key,\n value: value,\n isResetEnabled: isResetEnabled\n },\n {\n responseType: \"json\",\n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(JSON.parse(response.data.data.preferences)[0],isTimezoneChanged);\n }\n }\n )\n .catch(function (error) {\n errorResponse(null, error);\n }\n );\n }\n}\n\nexport function assetZoomToFitFilter(\n filterZoomTofit: any,\n mapActions: any\n) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_SEARCH_ZOOM_TO_FIT_FITLER_MAP\", payload: { filterZoomTofit: filterZoomTofit, mapActions: mapActions } });\n\t};\n}\n\nexport function setAssetSearchValue(\n assetSearchValue: any,\n) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_SEARCH_ZOOM_TO_FIT_SEARCH_VALUE\", payload: { assetSearchValue: assetSearchValue } });\n\t};\n}\n\nexport function setAssetSearchFilters(\n assetSearchFilters: any,\n) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_SEARCH_ZOOM_TO_FIT_SEARCH_FILTER\", payload: { assetSearchFilters: assetSearchFilters } });\n\t};\n}\n\nexport function setPreSearchAssetsList(\n preSearchAssetList: any,\n) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_PRE_SEARCH_ZOOM_TO_FIT_ASSET_LIST\", payload: { preSearchAssetList: preSearchAssetList } });\n\t};\n}\n\nexport function setFleetOverviewMap(map: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_FLEET_OVERVIEW_MAP\", payload: { map: map } });\n\t};\n}","import Axios from \"axios\";\nimport { errorResponse } from \"./../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"./../../../../utils/configurations\";\n\nexport function getQbList(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n sortOrder: string,\n sortColumn: string,\n page: number = 1,\n qbId?:string,\n searchText?: string,\n \n) {\n \n return async (dispatch: any) => {\n console.log(\"appConfigs.server.URL: \"+appConfigs.server.URL);\n Axios.get(\n appConfigs.server.URL + \"/ui/api/questionBanks\", {\n responseType: \"json\",\n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n qbId: (qbId||\"\"),\n sortOrder: sortOrder,\n sortColumn: sortColumn,\n }\n }\n )\n .then(response => { \n let data = response.data.data.questionBanks == null || (response.data.data.questionBanks.length || 0) === 0 ? [] : response.data.data.questionBanks;\n \n // data.forEach((item: any, index: number) => {\n // data[index]['mastertags'] = JSON.parse(data[index]['mastertags'])\n // // data[index]['mastertags'] = data[index]['mastertags']?.sort(sortAlphabetically)\n // });\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"QB_GET_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function qbMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any\n) {\n return (dispatch: any) => {\n \n dispatch({ type: \"QB_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n\nexport function qbMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"QB_MAINT_CLOSE\" });\n };\n}\n\nexport function qbSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"QB_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function qbSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"QB_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n}\n","import Axios from \"axios\";\nimport { errorResponse } from \"./../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"./../../../../utils/configurations\";\n\n\nexport function qbMaint(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n let questionsList = \"\", name='', id ='', assets='', allowEvenForWrongAnswers=true;\n Object.entries(record).map((item: any)=>{\n if(item[0].toString().includes('question') && item[0].toString().toLowerCase() !== 'questionbankname') {\n questionsList=(questionsList === \"\")?questionsList+item[1]:questionsList+\"~^~\"+item[1];\n }\n if(item[0].toLowerCase() === 'questionbankname') {\n name=item[1];\n }\n if(item[0].toLowerCase() === 'qbid') {\n id=item[1];\n }\n if(item[0].toLowerCase() === 'allowevenforwronganswers') {\n allowEvenForWrongAnswers=item[1];\n }\n if(item[0].toLowerCase() === 'assetsassigned') {\n //assets=item[1];\n assets=\"\";\n item[1]?.map((device:any)=>{\n if(assets===\"\"){\n assets=assets+device.value;\n }\n else {\n assets= assets+\",\"+device.value;\n }\n })\n }\n\n\n });\n let data ={\n qbId: id,\n questionBankName: name,\n assetsAssigned: assets,\n questions: questionsList,\n allowEvenForWrongAnswers: allowEvenForWrongAnswers\n }\n return async (dispatch: any) => {\n\n\n let url=\"/ui/api/questionBanks\"\n Axios.post(\n appConfigs.server.URL + url,\n data,\n {\n responseType: \"json\",\n headers: {}\n }\n )\n .then(response => {\n let data = response.data.data.questionBank == null ? {} : response.data.data.questionBank;\n dispatch({ type: \"QB_MAINT_SUCCESS\", payload: {data: data} });\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function qbDelete(\n me: any,\n callbackSuccessFn: any,\n callbackFailureFn: any,\n questionBankId:string\n\n\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/questionBank/\" + questionBankId,\n {}\n )\n .then(response => {\n if (callbackSuccessFn != null) {\n callbackSuccessFn(response);\n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFailureFn != null) {\n callbackFailureFn(error);\n }\n }\n );\n };\n}\n\nexport function getAssetsToAssignQuestionbank(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string,\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets-to-assign-questionbank?page=1&pageSize=9999\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId: orgId\n }\n }\n )\n .then(response => {\n let data = (response.data.data.orgAssets == null ||\n (response.data.data.orgAssets.length || 0) === 0 ) ? [] : response.data.data.orgAssets;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgAssets);\n }\n // let devices:any=[]\n // data.map((tag:any)=>{\n // devices.push(tag['mastertag']+\"`\"+tag['serialNumber']);\n // })\n //data = data.map((tag: any) => tag['mastertag']).filter((item: any, i: any, ar: any) => ar.indexOf(item) === i).sort();\n \n dispatch({ type: \"GET_ASSETS_WITHOUT_QB_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n","export interface FormState {\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n}\n\nexport const formInit = (\n me: any\n) => {\n\n me.setState({ \n formSuccess: false, \n formSuccessMessage: \"\",\n formError: false,\n formErrorMessage: \"\",\n formCommit: false\n });\n}","import React from \"react\";\nimport { Alert } from \"antd\";\nimport { appConfigs } from \"../configurations\";\n\ninterface SuccessProp {\n message?: string;\n}\n\nexport const SuccessAlert = (props?:SuccessProp) => \n <Alert\n message={appConfigs.settings.form.alerts.successTitle}\n description={\n (props != null && props.message) || \n (props == null && appConfigs.settings.form.alerts.successDefaultMessage)\n }\n type=\"success\"\n showIcon\n //closable\n />\ninterface WarningProp {\n message?: string;\n}\n\nexport const WarningAlert = (props?:WarningProp) => \n <Alert\n message={appConfigs.settings.form.alerts.warningTitle}\n description={\n (props != null && props.message) \n }\n type=\"warning\"\n showIcon\n //closable\n />\n\n\ninterface ErrorProp {\n message?: string[];\n}\n\nconst listErrors = (props?:ErrorProp) => \n props != null && props.message!.map((message:string, index:number) => \n <li key={index}>\n {message}\n </li>\n ) \n\nexport const ErrorAlert = (props?:ErrorProp) => \n <Alert\n message={appConfigs.settings.form.alerts.errorTitle}\n description={\n props != null && <ul>{listErrors(props)}</ul>\n }\n type=\"error\"\n showIcon\n //closable\n />\n","import { MinusOutlined } from \"@ant-design/icons\";\nimport { Button, Col, Form, Input, Row, } from \"antd\";\nimport { FormInstance } from \"antd/lib/form\";\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { appConfigs } from \"./../../../../utils/configurations\";\n\ninterface Prop {\n index: number,\n remove: (index:any)=>void,\n question: string | null\n}\nconst formRef = React.createRef<FormInstance>();\nconst AddQuestion: React.FC<Prop>=(props) =>{\n const RemoveQuestion=(index:any)=>{\n\n props.remove(index);\n\n }\n\n function getQuestionIndex(index: number) {\n return(index+1);\n }\n\n return (\n <Row gutter={8}>\n <Col span={22}>\n <Form.Item\n // label= { getQuestionIndex(props.index)}\n name={\"question\"+ props.index }\n shouldUpdate={true}\n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n //{ validator:(_, value) => (value.length || 0) > 1 ? Promise.resolve() : Promise.reject(appConfigs.errors.fieldErrors.atLeastTwoCharacters) }\n ]}\n >\n <Input style={{width:'600px'}} placeholder={\"Enter your Question\"+getQuestionIndex(props.index)} maxLength={60} value={props.question?props.question:''} disabled={false}></Input>\n </Form.Item>\n </Col>\n\n <Col span={2}>\n <Button type=\"primary\" name={props.index.toString()} onClick={(e:any)=>RemoveQuestion(e.currentTarget.name)} icon={<MinusOutlined></MinusOutlined>}></Button>\n\n </Col>\n </Row>\n // </Form>\n )\n }\n const mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n // contractMaintOptions: state.contractsReducers.contractsState.contracts.contractMaintOptions\n };\n};\n export default connect(\n mapStateToProps,\n actions\n)(AddQuestion);","import { PlusOutlined } from \"@ant-design/icons\";\nimport { Button, Divider, Form, Input, Select, Switch } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { errorResponse, resetFormErrors, successResponse } from \"./../../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"./../../../../utils/apiHelpers/formHelpers\";\nimport { ErrorAlert, SuccessAlert } from \"./../../../../utils/Components/formAlerts\";\nimport { appConfigs } from \"./../../../../utils/configurations\";\nimport * as actions from \"./../../QuestionManagement/actions\";\nimport AddQuestion from \"./AddQuestion\";\n\nconst { Option } = Select;\ninterface Prop{\n questionBankList:any,\n qbMaint:Function,\n context: any,\n qbMaintClose:Function,\n getQbList: Function,\n getAssetsToAssignQuestionbank: Function,\n sortColumn: any,\n sortDirection: any,\n page:any\n}\n\ninterface State extends FormState {\n formError?: boolean,\n formErrorMessage?: string[],\n formSuccess?: boolean,\n formSuccessMessage?: string,\n formWarning?: boolean;\n formWarningMessage?: string,\n formCommit?: boolean,\n initialValues: any,\n isOveridePanelDisplay: boolean;\n overrideErrorMessage: string;\n questionsList: string[];\n questionBankName: string,\n assetsAssigned: any,\n allowEvenForWrongAnswers: boolean\n}\n\nclass QuestionBankMaintInfo extends React.Component<Prop, State> {\n state: State = {\n questionsList: [],\n initialValues: {},\n isOveridePanelDisplay: false,\n overrideErrorMessage: \"\",\n questionBankName: \"\",\n assetsAssigned: [],\n allowEvenForWrongAnswers: true\n };\n formRef = React.createRef<FormInstance>();\n componentDidMount() {\n this.componentUpdate(this.props.questionBankList.qbMaint.record);\n }\n componentDidUpdate(prevProps: Prop) {\n if (this.props.questionBankList.qbMaint.instance !== prevProps.questionBankList.qbMaint.instance) {\n this.componentUpdate(this.props.questionBankList.qbMaint.record);\n }\n }\n setInitialValues(id:any, questionBankName:any, assetsAssigned:any, mastertags:any, questionsList:any, allowEvenForWrongAnswers:any) {\n let initialValues: any = {};\n let assetData = mastertags?.split(',');\n let mastertagData = assetData?.map((assetTag:any) => {//let data = assetTag.split('|');\n return {value: assetTag.split('|')[2], label: assetTag.split('|')[2], key: assetTag.split('|')[0]}});\n initialValues = {...initialValues,\n questionBankName: questionBankName,\n qbId:id,\n //assetsAssigned: assetsAssigned,\n assetsAssigned: mastertagData, //assetData.map((assetTag:any) => {//let data = assetTag.split('|');\n //return {value: assetTag.split('|')[2], label: assetTag.split('|')[2], key: assetTag.split('|')[0]}}),\n allowEvenForWrongAnswers: (allowEvenForWrongAnswers===undefined||allowEvenForWrongAnswers===null)?true:allowEvenForWrongAnswers\n }\n questionsList.forEach((question: any, index: any) => {\n initialValues = {...initialValues, [`question${index}`]: `${question}`}\n });\n // let assets = (assetsAssigned && assetsAssigned!==null && assetsAssigned!==\"\")?assetsAssigned.split(','):[];\n // let mastertagList = (mastertags && mastertags!==null && mastertags!==\"\")?mastertags.split(','):[];\n // //let assetsSNo: any[] = [];\n // const { orgAssets } = this.props.questionBankList.qbMaint.tabs[0];\n // if(orgAssets.length>0){ // orgAssets.map((device:any, index:number) => {\n // if(assets.length>0) {\n // if(assets.includes(device.split('`')[0])){\n // assetsSNo.push(device);\n // }\n // }\n // })\n // }\n // initialValues = {...initialValues,\n // assetsAssigned: assets.map((assetTag:any, index: any) => {return {value: mastertagList[index], label: assetTag, key: mastertagList[index]}})//assetsSNo\n // }\n this.setState({initialValues: initialValues,\n questionsList: questionsList,\n questionBankName: questionBankName,\n allowEvenForWrongAnswers: allowEvenForWrongAnswers,\n //assetsAssigned: assetsSNo//assetsAssigned\n assetsAssigned: assetsAssigned //assetsSNo.split(',').map((assetTag:any) => {return {value: assetTag.split('`')[0], label: assetTag.split('`')[1], key: assetTag.split('`')[0]}})\n });\n return initialValues;\n }\n componentUpdate(record:any) {\n let orgId = 'a09ad270-3b21-11e7-893e-f94b4bc7246b';//only taylor Org\n const { orgAssets } = this.props.questionBankList.qbMaint.tabs[0];\n if(orgAssets.length === 0) {\n this.props.getAssetsToAssignQuestionbank(this, null, null, 'all', orgId);\n }\n formInit(this);\n let initialData = this.setInitialValues(record.qbId,record.questionBankName,record.assetsAssigned,record.mastertags,record.questions&&record.questions!==\"\"?record.questions.toString().split('~^~'):[], record.allowEvenForWrongAnswers);\n if (this.formRef.current != null) {\n this.formRef.current!.setFieldsValue(initialData);\n }\n }\n\n onFinish = (values: any) => {\n resetFormErrors(this, this.formRef.current);\n // let assetsAssigned:any[] = []\n // const { orgAssets } = this.props.questionBankList.qbMaint.tabs[0];\n // values.assetsAssigned.map((mastertag: any) => {\n // orgAssets.map((asset:any) => {\n // if (asset.serialNumber === mastertag.value ) {\n // assetsAssigned.push({key:asset.mastertag , label:asset.serialNumber , value:asset.mastertag });\n // }\n // else\n // {\n // assetsAssigned.push(mastertag);\n // }\n // });\n // });\n // values.assetsAssigned= assetsAssigned;\n this.props.qbMaint(this, this.onFinishSuccess, this.onFinishFailure, values);\n };\n\n // orgAssetSuccess = (data:any) => {\n // let record = this.props.questionBankList.qbMaint.record;\n // this.setInitialValues(record.qbId,record.questionBankName,record.assetsAssigned,record.mastertags,record.questions&&record.questions!==\"\"?record.questions.toString().split(','):[], record.allowEvenForWrongAnswers);\n\n // }\n\n onFinishSuccess = (record: any) => {\n if (record != null && record.qbId != null) {\n let orgId = 'a09ad270-3b21-11e7-893e-f94b4bc7246b';//only taylor Org\n this.componentUpdate(record);\n this.props.getAssetsToAssignQuestionbank(this, null, null, 'all', orgId);\n //this.props.getQbList(this, null, null, this.props.questionBankList.tableConfig.pagination.current, null,null);\n this.props.getQbList(this, null, null, this.props.sortDirection, this.props.sortColumn, this.props.page, null, null);\n }\n successResponse(this, \"Question Bank has been successfully processed\");\n }\n onFinishFailure = (error: any) => {\n errorResponse(this, error);\n } \n\n handleChange = (value: string) => {\n this.setState({assetsAssigned: value});\n };\n\n onAllowAlwaysChange = (e:any) => {\n let initialData = this.state.initialValues;\n initialData = {...initialData,\n allowEvenForWrongAnswers: e}\n this.setState({allowEvenForWrongAnswers: e,\n initialValues: initialData\n });\n //this.formRef.current!.setFieldsValue(initialData);\n }\n AddQuestion=()=>\n {\n let {questionsList, initialValues} = this.state;\n initialValues = {...initialValues, [\"qbId\"]: this.formRef.current?.getFieldValue(\"qbId\"),\n [\"questionBankName\"]: this.formRef.current?.getFieldValue(\"questionBankName\"),\n [\"assetsAssigned\"]: this.formRef.current?.getFieldValue(\"assetsAssigned\")\n };\n let len = (questionsList.length===0)?1:questionsList.length;\n for(let i=0;i<len;i++){\n let question = this.formRef.current?.getFieldValue(`question${i}`) || \"\";\n questionsList[i] = question;\n initialValues = {...initialValues, [`question${i}`]: `${question}`};\n }\n // }\n let newQuestion = \"\";\n questionsList.push(newQuestion);\n initialValues = {...initialValues, [`question${questionsList.length-1}`]: `${newQuestion}`};\n this.setState({\n questionBankName: this.formRef.current?.getFieldValue(\"questionBankName\"),\n assetsAssigned: this.formRef.current?.getFieldValue(\"assetsAssigned\"),\n initialValues: initialValues\n });\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue(initialValues);\n }\n RemoveQuestion=(deletedIndex:any)=>\n {\n\n let {questionsList, initialValues} = this.state;\n initialValues = {...initialValues, [\"qbId\"]: this.formRef.current?.getFieldValue(\"qbId\"),\n [\"questionBankName\"]: this.formRef.current?.getFieldValue(\"questionBankName\"),\n [\"assetsAssigned\"]: this.formRef.current?.getFieldValue(\"assetsAssigned\")\n };\n for(let i=0;i<questionsList.length;i++){\n let question = this.formRef.current?.getFieldValue(`question${i}`) || \"\";\n questionsList[i] = question;\n delete initialValues[`question${i}`];\n }\n questionsList.splice(deletedIndex,1);\n questionsList.map((question:any, index: number) => {\n initialValues = {...initialValues, [`question${index}`]: `${question}`};\n });\n this.setState({\n initialValues : initialValues,\n questionsList: questionsList,\n })\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue(initialValues);\n }\n\n render(){\n const { orgAssets } = this.props.questionBankList.qbMaint.tabs[0];\n const {assetsAssigned, qbId} = this.props.questionBankList.qbMaint.record;\n const questionBankName = this.state.questionBankName;\n let questions = this.state.questionsList;\n return(\n <div data-id=\"qb-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"qbList-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"qbList-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n\n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"qbMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n >\n <Form.Item\n name=\"qbId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item\n label=\"Name\"\n name=\"questionBankName\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={50} />\n </Form.Item>\n\n {/* <Form.Item\n label=\"Assigned Assets\"\n name=\"assetsAssigned\"\n\n initialValue={(assetsAssigned == null || !assetsAssigned) ? [] : (assetsAssigned.toString()?.split(\",\"))?.map((asset: any) => {\n return { value: asset, label: asset, key: asset }\n })}\n > \n <Select\n style={{ width: '100%'}}\n placeholder=\"Select mastertags\"\n onChange={this.handleChange}\n className=\"select-before\" \n\n >\n {orgAssets !== null && orgAssets.map((asset:any, index:number) => {\n return (\n <Option key={asset.split('`')[0]} value={asset.split('`')[0]}>\n {asset.split('`')[1]}\n </Option>\n )})}\n </Select>\n </Form.Item>\n */}\n\n <Form.Item\n label=\"Assigned Assets\"\n name=\"assetsAssigned\"\n \n initialValue={assetsAssigned == null ? [] : assetsAssigned?.split(',').map((asset: any) => {\n return { value: asset, key: asset }\n })}\n >\n <Select\n\n mode=\"multiple\"\n style={{ width: '100%'}}\n placeholder=\"Select Serial Number\"\n // disabled={((this.state.accessType ||\"\") === \"RFID\" ||\n // (accessType === \"RFID\" && (this.state.accessType || \"\").toLowerCase() !== \"asset-mapping\")) ||\n // this.props.oprList.oprMaint.record.status == 'inactive' }\n labelInValue\n showSearch\n showArrow={true}\n allowClear\n // optionFilterProp=\"children\"\n className=\"select-before\"\n\n >\n {orgAssets !== null && orgAssets.map((asset:any, index:number) => {\n return (\n <Option key={asset.mastertag} value={asset.serialNumber}>\n {asset.serialNumber}\n </Option>\n )})}\n </Select>\n </Form.Item>\n <Form.Item name=\"allowEvenForWrongAnswers\" label=\"Allow Users to go to Start Sequences even if Failed Questions: \" style={{\"width\": '2000px'}}>\n \n {/* <Tooltip placement=\"topRight\" title=\"Allow\"> */}\n \n {/* <Form.Item style={{marginTop:'-15px',flexDirection:'row',marginLeft:'535px'}} label=\"Replace Asset: \" valuePropName=\"checked\"> */}\n <Switch checked={(this.state.allowEvenForWrongAnswers===undefined||this.state.allowEvenForWrongAnswers===null)?true:this.state.allowEvenForWrongAnswers} onChange={this.onAllowAlwaysChange} style={{margin:'5px 50px 5px 250px'}}/>\n\n {/* </Form.Item> */}\n \n {/* </Tooltip> */}\n \n </Form.Item>\n \n <Divider orientation=\"left\" plain>Questions</Divider>\n <span style={{color:'#0052CC',fontSize:'12px', marginLeft: '50px' }}>{\"Maximum Character Limit Per Question: 60\"}</span>\n <div>\n <div style = {{ marginLeft: '670px'}}>\n <Button type=\"primary\" onClick={this.AddQuestion} disabled={questions && questions !== undefined && questions?.length>14} icon={<PlusOutlined></PlusOutlined>}></Button>\n </div>\n <br/>\n <div style = {{ marginLeft: '50px'}}>\n {\n questions?.length>0 ?\n (questions?.map((question:any,index: any)=>\n <><AddQuestion key={\"question\" + index} remove={this.RemoveQuestion} question={question} index={index}></AddQuestion></>\n \n ))\n :\n (<><AddQuestion key={\"question\" + 0} remove={this.RemoveQuestion} index={0} question={null}></AddQuestion></>\n )\n }\n </div>\n </div>\n\n </Form>\n\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n questionBankList: state.questionsReducer.questionState.questionBankList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(QuestionBankMaintInfo);","import { Button, Drawer, Space, Tabs } from \"antd\";\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../QuestionManagement/actions\";\nimport { appConfigs } from \"./../../../utils/configurations\";\nimport QuestionBankMaintInfo from \"./QuestionBankMaintInfo/QuestionBankMaintInfo\";\n\nconst {TabPane}=Tabs;\n\ninterface Prop{\n questionBankList: any,\n getQbList: Function,\n qbMaintClose:Function,\n sortColumn: any,\n sortDirection: any,\n page:any\n}\n\nclass QuestionBankMaint extends React.Component<Prop> { \n componentDidUpdate(prevProps: Prop) {\n if (this.props.questionBankList.qbMaint.instance !== prevProps.questionBankList.qbMaint.instance) {\n this.closeCollapsed();\n }\n } \n\nonDrawerClose = () => {\n\n if (this.props.questionBankList.refreshOnUpdate) {\n //history.push(\"/operators\");\n this.props.getQbList(this, null, null, this.props.sortDirection, this.props.sortColumn, this.props.page, null, null);\n }\n this.props.qbMaintClose(this);\n};\n\ncloseCollapsed() {\n let active:any = document.querySelectorAll(\"[data-id=qb-maint-drawer] .ant-collapse-item-active\"); \n if (active.length) {\n for (var i = 0; i < active.length; i++) {\n active[i]!.children[0].click();\n }\n }\n}\n\nrender(){\n const { qbMaint } = this.props.questionBankList;\n\n return(\n <Drawer\n data-id=\"qb-maint-drawer\"\n title={qbMaint.title}\n width={qbMaint.width}\n onClose={this.onDrawerClose}\n visible={qbMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"qb-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n qbMaint.activeTab === \"1\" &&\n <Button data-id=\"qb-maint-submit-button\" type=\"primary\" form=\"qbMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n </Space>\n }\n >\n <Tabs data-id=\"users-maint-info-tabs\" activeKey={qbMaint.activeTab} size=\"large\" type=\"card\">\n <TabPane data-id=\"qb-maint-info-tab-button\" tab={qbMaint.tabs[0].title} key=\"1\">\n <QuestionBankMaintInfo sortColumn={this.props.sortColumn} sortDirection={this.props.sortDirection} page={this.props.page} />\n </TabPane>\n </Tabs>\n </Drawer>\n );\n}\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n questionBankList: state.questionsReducer.questionState.questionBankList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(QuestionBankMaint);","import { Button, Col, Input, Popconfirm, Popover, Row, Space, Table, Tooltip, message } from \"antd\";\nimport React, { Component } from \"react\";\n\nimport { DeleteOutlined, EditOutlined, EllipsisOutlined, PlusOutlined } from \"@ant-design/icons\";\nimport { connect } from \"react-redux\";\nimport { closePopover, getPermissions } from \"../../../utils/commonHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"./actions\";\nimport QuestionBankMaint from \"./QuestionBankMaint\";\nimport \"./questions.css\";\n//import QuestionBankMaint from \"./questionBankMaint\";\n\nconst { Search } = Input;\n\ninterface Prop{\n qbSetSearch: Function,\n qbSetPagination:Function,\n getQbList: Function,\n qbMaintOpen: Function,\n context: any,\n questionBankList: any,\n qbMaint:Function,\n qbDelete: Function,\n // getQbListForExport: Function,\n getAssetsToAssignQuestionbank: Function,\n permissions: any\n \n}\n\ninterface State {\n csvData: any,\n csvFileName: string\n isOperator?: boolean\n sortColumn: string | undefined\n sortDirection: string | undefined,\n page: Number\n}\n\nclass QuestionBank extends Component<Prop, State> {\n state: State = {\n csvData: [],\n csvFileName: \"\",\n isOperator:true,\n sortColumn: \"questionbankname\",\n sortDirection: \"ascend\",\n page:1\n };\n\n drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n // getValuesFromPath=(index:number)=>{\n // const pathArr = history.location.pathname.split(\"/\");\n // return pathArr[index];\n // }\n // getStateFromHistory=()=>{\n // return ((history.location.state || true) as State).isOperator;\n // }\n\n componentDidMount(){\n // if (!this.props.context.user.contextUserIsAdmin) {\n this.props.qbSetPagination(this.onPaginationChange);\n this.getQbList();\n let orgId = 'a09ad270-3b21-11e7-893e-f94b4bc7246b';//only taylor Org\n this.props.getAssetsToAssignQuestionbank(this, null, null, 'all', orgId);\n \n }\n\n getQbList() {\n this.props.getQbList(this, this.getQbSuccess, this.getQbFail ,this.state.sortDirection, this.state.sortColumn?.toLowerCase(), this.state.page, null,null);\n }\n\n getQbSuccess = (data: any) => {\n //this.qbMaintOpenDo((data[0]||[]));\n\n }\n\n getQbFail = (data:any) => {\n\n }\n\n qbMaintOpenDo = (record: any) => {\n const title = Object.keys((record)).length === 0 ? \"New QuestionBank\" : (record.qbId || \"\") === \"\" ? \"New QuestionBank\" : \"Edit QuestionBank ::\" + record.operatorIdValue;\n // this.props.qbMaintOpen(this, title, this.drawerWidth, record);\n }\n\n \n onPaginationChange = (page: number) => {\n this.setState({page: page});\n this.props.getQbList(this, this.getQbSuccess, this.getQbFail, this.state.sortDirection, this.state.sortColumn?.toLowerCase(), page, null, null);\n };\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n if ( action === \"add-qb\" ) {\n this.props.qbMaintOpen(this, \"New Question Bank\", this.drawerWidth,{});\n }\n else if ( action === \"edit-qb\" ) {\n this.props.qbMaintOpen(this, \"Edit Question Bank :: \" + record.questionBankName, this.drawerWidth, record);\n }\n else if (action === \"delete\") {\n this.props.qbDelete(this, this.qbDeleteSucess, null, record.qbId);\n } \n\n closePopover(); \n \n }\n\n qbDeleteSucess = (data:any) => {\n message.success(\"Question Bank has been successfully deleted\");\n this.onPaginationChange(this.props.questionBankList.tableConfig.pagination.current);\n }\n\n actions = (record: any, appContext: any, contextUser: any,isUpdate: any, isDelete: any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"small\">\n {\n // (isUpdate) &&\n <Tooltip title=\"Edit Question Bank\">\n <Button data-id=\"qb-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => { this.onAction(e, record, \"edit-qb\") }} />\n </Tooltip>\n }\n {/* {!record.activeInScope && this.confirmStatus(record, \"activate\")}\n {record.activeInScope && this.confirmStatus(record, \"deactivate\")}\n */}\n {//(isDelete) && \n this.confirmDeletion(record)} \n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n >\n <Button data-id=\"qb-actions-button\" type=\"default\" icon={<EllipsisOutlined />} /> \n </Popover>\n);\n\n// confirmStatus = (record:any, action:string) => (\n// <Popconfirm\n// title={\"Are you sure to \" + (action === \"activate\" ? \"activate\" : \"deactivate\") + \" this user?\"}\n// // onCancel={closePopover}\n// onConfirm={(e) => {this.onAction(e, record, action)}}\n// okText=\"Yes\"\n// cancelText=\"No\"\n// >\n// <div>\n// {\n// action === \"activate\" &&\n// <Tooltip title=\"Activate User\"> \n// <Button data-id=\"qb-activate-button\" type=\"default\" icon={<UserAddOutlined />} />\n// </Tooltip>\n// }\n// {\n// action !== \"activate\" &&\n// <Tooltip title=\"Deactivate User\"> \n// <Button data-id=\"qb-deactivate-button\" type=\"default\" icon={<UserDeleteOutlined />} />\n// </Tooltip>\n// }\n// </div>\n// </Popconfirm>\n// );\nconfirmDeletion = (record:any) => (\n <Popconfirm\n title={\"Are you sure to delete this question bank?\"}\n // onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Question Bank\">\n <Button data-id=\"qb-delete-button\" type=\"default\" icon={<DeleteOutlined />} />\n </Tooltip>\n </Popconfirm>\n);\n onSearch = (searchText: string) => {\n let me = this;\n this.props.qbSetSearch((searchText || \"\"));\n // if((searchText || \"\")===\"\")\n // {\n // history.push(\"/operators\");\n // }\n // setTimeout(function() {\n // me.props.getQbList(me, null, null, 1, searchText); \n // }, 100);\n this.props.getQbList(this, this.getQbSuccess, this.getQbFail, this.state.sortDirection, this.state.sortColumn?.toLowerCase(), this.state.page, null,searchText);\n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.qbSetSearch((value || \"\"));\n }\n\n\n // handleChange = (info: any) => {\n // const result = getPermissions(this.props.permissions.permissions.operator_support); \n // if (info.file.status === \"done\") {\n // message.success(\"File has been successfully processed\");\n // // this.onPaginationChange(this.props.questionBankList.tableConfig.pagination.current);\n // }\n // else if (info.file.status === \"error\") {\n // let formErrors: any = [];\n\n // if (info.file.response.errors && (info.file.response.errors.length || 0) !== 0) {\n // info.file.response.errors.forEach(function (record: any) {\n // if (record.type === \"form\") {\n // formErrors.push(record.message);\n // }\n // });\n // }\n // if (formErrors.length > 0) {\n // formErrors.forEach((error: string) => {\n // notification.error({\n // message: \"File Processing\",\n // description: error\n // });\n // });\n // }\n // else {\n // message.error(`${info.file.name} file upload failed.`);\n // }\n // }\n // }; \n\n render(){\n const { contextUser, appContext } = this.props.context;\n const { tableConfig, tableData } = this.props.questionBankList;\n \n const result = getPermissions(this.props.permissions.permissions.operator_support); \n // if (!this.props.context.user.contextUserIsAdmin && !result[1]){\n // history.push(\"/not-found\") \n // }\n let isCreate = result[0];\n let isRead = result[1];\n let isUpdate = result[2];\n let isDelete = result[3];\n\n const tableColumns = [\n {\n title: \"Question Bank Name\",\n dataIndex: \"questionBankName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'questionbankname' ? this.state.sortDirection : false,\n },\n {\n title: \"Assets Assigned\",\n dataIndex: \"assetsAssigned\",\n },\n {\n title: \"Date Created\",\n dataIndex: \"createdAt\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'createdat' ? this.state.sortDirection : false,\n render: (text: any, record: any) => (\n <>\n {\n <span>{new Date(record.createdAt).toLocaleString()}</span>\n }\n </>\n )\n },\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n this.actions(record, appContext, contextUser, isUpdate, isDelete)\n // this.actions(record, false, false,null,null)\n )\n \n }\n ]\n \n const sortQuestionBanksTable = (pagination: any, filters: any, sorter: any): void => {\n let sortColumn: string | undefined = undefined;\n let sortDirection: string | undefined = undefined;\n if (sorter && Object.keys(sorter).length > 0) {\n const { column, order } = sorter;\n sortDirection = order;\n sortColumn = column?.dataIndex.toLowerCase();//.replace(/\\s/g, ''\n }\n // setPage(pagination.current);\n // setSortColumn(sortColumn || '');\n // setSortDirection(sortDirection || '');\n this.setState({sortColumn: sortColumn?.toLowerCase(), sortDirection: sortDirection, page: pagination.current});\n this.props.getQbList(this, this.getQbSuccess, this.getQbFail, sortDirection, sortColumn?.toLowerCase(), pagination.current, null,null);\n }\n\n return (\n <div data-id=\"questionbank-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n {/* <BackNavigation /> */}\n </Tooltip>\n Question Bank Management\n </div>\n </div>\n </Col>\n \n \n <Col xs={24} lg={18} className=\"content-header-controls\">\n \n <Space size=\"middle\">\n {\n //(isRead) &&\n <Search\n data-id=\"questionbank-search-field\"\n key=\"search-field\"\n placeholder=\"Search by ID, Access Card, Asset, Tags\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value= {this.props.questionBankList.searchText}\n\n />\n }\n {\n //(isCreate) &&\n <Tooltip title=\"Create New QuestionBank\">\n <Button data-id=\"qb-search-new-qb-button\" type=\"primary\"\n icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add-qb\")}>\n <span>QuestionBank</span>\n </Button>\n </Tooltip>\n }\n </Space>\n </Col>\n </Row>\n <div className=\"mt-15\">\n {//(isRead) &&\n <Table\n data-id=\"qbList-data\"\n {...tableConfig}\n rowKey={(record) => record.qbId}\n columns={tableColumns}\n dataSource= {tableData} //{dataSource}\n onChange={sortQuestionBanksTable}\n\n />\n }\n <QuestionBankMaint sortColumn={this.state.sortColumn} sortDirection={this.state.sortDirection} page={this.state.page}/> \n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n questionBankList: state.questionsReducer.questionState.questionBankList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(QuestionBank);\n","import { withRouter } from \"react-router-dom\";\nimport React from 'react';\nimport { Tooltip } from \"antd\";\nimport { CaretLeftOutlined } from \"@ant-design/icons\";\n\n\nexport default withRouter(({ history }) => { \n return (\n <div>\n <Tooltip title=\"Go To Previous Page\"> \n <CaretLeftOutlined onClick={() => history.goBack()} style={{ fontSize: '27px' }}/>\n </Tooltip>\n </div>\n )\n});","import Axios from \"axios\";\nimport { errorResponse } from \"./../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"./../../../../utils/configurations\";\n\n\nexport function getOprs(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n sortDirection: any,\n sortColumn: any,\n page: number = 1,\n searchText?: string,\n operatorId?:string\n \n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/taylorOperators\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n operatorId: (operatorId||\"\"),\n sortOrder: sortDirection,\n sortColumn: sortColumn\n }\n }\n )\n .then(response => { \n let data = response.data.data.operators == null || (response.data.data.operators.length || 0) === 0 ? [] : response.data.data.operators;\n\n data.forEach((item: any, index: number) => {\n data[index]['mastertags'] = JSON.parse(data[index]['mastertags'])\n // data[index]['mastertags'] = data[index]['mastertags']?.sort(sortAlphabetically)\n });\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"TAYLOR_OPRS_GET_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getOperatorsHistory(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n sortDirection: any,\n sortColumn: any,\n page: number = 1,\n searchText?: string,\n operatorId?:string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/taylorOperatorsHistory\", {\n responseType: \"json\",\n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n operatorId: (operatorId||\"\"),\n sortOrder: sortDirection,\n sortColumn: sortColumn\n }\n }\n )\n .then(response => {\n let data = (response.data.data.operatorsHistory == null ||\n (response.data.data.operatorsHistory.length || 0) === 0 ) ? [] : response.data.data.operatorsHistory;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.operatorsHistory);\n }\n //data = data.map((tag: any) => tag['mastertag']).filter((item: any, i: any, ar: any) => ar.indexOf(item) === i).sort();\n \n dispatch({ type: \"GET_OPR_HISTORY\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getOpr(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n operatorId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/operators/id/\" + operatorId, {\n responseType: \"json\",\n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.operator);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function oprMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPRS_OPR_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n\nexport function oprMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"OPRS_OPR_MAINT_CLOSE\" });\n };\n}\n\nexport function oprSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPR_SET_SEARCH\", searchText: searchText });\n }\n}\n\nexport function oprHistorySetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPR_HISTORY_SET_SEARCH\", searchText: searchText });\n }\n} \n\n\nexport function oprSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPRS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n}","import Axios from \"axios\";\nimport { errorResponse } from \"./../../../../utils/apiHelpers/apiHelpers\";\nimport { formatTagsForPosting } from \"./../../../../utils/commonHelpers\";\nimport { appConfigs } from \"./../../../../utils/configurations\";\n\nexport function operatorOrgUsersGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n \n) {\n\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/getAllUsers\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId:null,\n administered: true,\n pageSize: 10000\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.users);\n }\n dispatch({ type: \"OPR_MAINT_ORG_USERS_GET_SUCCESS\", payload: {data: response.data.data.users} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n });\n };\n}\n\nexport function getAssets(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string,\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/operator-assets?page=1&pageSize=9999\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId: orgId\n }\n }\n )\n .then(response => {\n let data = (response.data.data.orgAssets == null || (response.data.data.orgAssets?.length || 0) === 0 ) ? [] : response.data.data.orgAssets;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgAssets);\n }\n // let devices:any=[]\n // data.map((tag:any)=>{\n // devices.push(tag['mastertag']+\"`\"+tag['serialNumber']);\n // })\n //data = data.map((tag: any) => tag['mastertag']).filter((item: any, i: any, ar: any) => ar.indexOf(item) === i).sort();\n \n dispatch({ type: \"GET_ORG_ASSETS_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function oprMaint(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n return async (dispatch: any) => {\n record.mastertags = formatTagsForPosting(record.mastertags);\n let url=\"/ui/api/taylorOperator\"\n Axios.post(\n appConfigs.server.URL + url,\n record,\n {\n responseType: \"json\",\n headers: {}\n }\n )\n .then(response => {\n \n let data = response.data.data.operator == null ? {} : response.data.data.operator;\n \n data['mastertags'] = JSON.parse(data['mastertags']);\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"OPR_MAINT_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function operatorDelete(\n me: any,\n callbackSuccessFn: any,\n callbackFailureFn: any,\n operatorId:string\n \n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/operators/\" + operatorId,\n {}\n )\n .then(response => {\n if (callbackSuccessFn != null) {\n callbackSuccessFn(response);\n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFailureFn != null) {\n callbackFailureFn(error);\n }\n }\n );\n };\n}","import { Button, Card, Form, Input, Select, Space } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { errorResponse, resetFormErrors, successResponse } from \"./../../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"./../../../../utils/apiHelpers/formHelpers\";\nimport { ErrorAlert, SuccessAlert } from \"./../../../../utils/Components/formAlerts\";\nimport { appConfigs } from \"./../../../../utils/configurations\";\n\nconst { Option } = Select;\ninterface Prop{\n oprList:any,\n oprMaint:Function,\n //oprsListRefreshOnUpdate: Function,\n context: any,\n oprMaintClose:Function,\n operatorOrgUsersGet:Function,\n getAssets:Function,\n getOprs: Function,\n // operatorOrgAccessTypesGet: Function\n // rfidSetValue: Function\n}\n\ninterface State extends FormState {\n accessType: string;\n rfidValue: string;\n isOveridePanelDisplay: boolean;\n overrideErrorMessage: string;\n pinValue: any,\n isExistingUser: boolean,\n}\n\nclass OprMaintInfo extends React.Component<Prop> { \n state: State = {\n accessType: \"\",\n rfidValue: \"\",\n isOveridePanelDisplay: false,\n overrideErrorMessage: \"\",\n pinValue: \"\",\n isExistingUser: true\n };\n formRef = React.createRef<FormInstance>();\n componentDidMount() {\n this.componentUpdate(this.props.oprList.oprMaint.record);\n }\n componentDidUpdate(prevProps: Prop) {\n if (this.props.oprList.oprMaint.instance !== prevProps.oprList.oprMaint.instance) {\n this.componentUpdate(this.props.oprList.oprMaint.record);\n }\n }\n componentUpdate(record:any) {\n formInit(this);\n //let orgId = (record.orgId || \"\") === \"\" ? this.props.context.appContext.orgId:record.orgId;\n let orgId = 'a09ad270-3b21-11e7-893e-f94b4bc7246b';\n this.props.operatorOrgUsersGet(this, null, null,orgId);\n this.props.getAssets(this, null, null, 'all', orgId);\n \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n orgId: (record.orgId || \"\") === \"\" ? (this.props.context.appContext.roleName === \"admin\" ? this.props.context.appContext.orgId: null) : record.orgId, \n operatorIdValue:record.operatorIdValue,\n accessType:record.accessType,\n accessCardValue:record.accessCardValue,\n userId:record.userId,\n assetName:record.assetName,\n accessCardId:record.accessCardId,\n pin: record.pin,\n mastertags: record.mastertags?.map((assetTag:any) => {return {value: assetTag.mac, label: assetTag.mac, key: assetTag.mastertag} }),\n id:record.id,\n isExistingUser: (this.state.isExistingUser)?'yes':'no'\n \n });\n }\n }\n \n onFinish = (values: any) => {\n resetFormErrors(this, this.formRef.current);\n const { orgAssets } =this.props.oprList.oprMaint.tabs[0];\n let filteredAssets: any[] = [];\n \n values.mastertags?.map((mastertag: any) => {\n orgAssets?.map((asset:any) => {\n if (asset.serialNumber === mastertag.value ){\n //filteredAssets.push(asset);\n filteredAssets.push({key:asset.mastertag , label:asset.serialNumber , value:asset.mastertag });\n return\n }\n \n });\n });\n values.mastertags= filteredAssets;\n // return user.age > 40 && user.occupation === 'programmer';\n \n this.props.oprMaint(this, this.onFinishSuccess, this.onFinishFailure, values);\n };\n\n onFinishSuccess = (record: any) => {\n \n this.props.getOprs(this, null, null, this.props.oprList.tableConfig.pagination.current, this.props.oprList.searchText);\n if (record != null && record.operatorIdValue != null && \n Object.keys(record.operatorIdValue) != null && Object.keys(record.operatorIdValue).length !== 0) {\n this.componentUpdate(record);\n }\n this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n successResponse(this, \"Operator has been successfully processed\");\n }\n onFinishFailure = (error: any) => { \n if (error.response.data.errors[0].reference === \"override\") {\n const errMsg = error.response.data.errors[0].message;\n this.setState({ isOveridePanelDisplay: true, overrideErrorMessage: errMsg });\n }\n else {\n this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n errorResponse(this, error);\n }\n }\n\n onOverrideSubmit = (e: any) => {\n this.setState({ isOverrideRFID: true });\n this.formRef.current?.submit();\n }\n cancelOverride = (e: any) => {\n this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n } \n \n onAccessTypeChange = (value:any) => {\n this.setState({ accessType: value });\n if (value.toLowerCase() !== 'rfid') {\n this.setState({ rfidValue: \"\"})\n // this.props.rfidSetValue(this, \"\");\n }\n };\n\n handleUserTypeChange = (value: string) => {\n if(value.toLowerCase()==='yes')\n {\n this.setState({isExistingUser: true});\n }\n else\n {\n this.setState({isExistingUser: false});\n }\n };\n\n onInputRfidChange = (value:any) => {\n this.setState({ rfidValue: value || \"\" == \"\"? \"\" : value.target.value});\n // this.props.rfidSetValue(this, value || \"\" == \"\"? \"\" : value.target.value);\n };\n\n render(){\n const { orgUsers, orgAssets } = this.props.oprList.oprMaint.tabs[0];\n const { mastertags } = this.props.oprList.oprMaint.record;\n \n return(\n <div data-id=\"opr-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"oprs-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"oprs-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n\n {\n this.state.isOveridePanelDisplay &&\n\n <Card style={{ height: '150px', backgroundColor: '#d9d9d94d' }}>\n <p>{this.state.overrideErrorMessage}.</p>\n <p>Do you want to override operator?</p>\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"opr-maint-close-button\" type=\"default\" onClick={(e) => this.cancelOverride(e)}>\n No\n </Button>\n <Button data-id=\"opr-maint-submit-button\" type=\"primary\" form=\"oprMaintInfoForm\" key=\"submit\" onClick={(e) => this.onOverrideSubmit(e)}>\n Yes\n </Button>\n\n </Space>\n </Card>\n\n }\n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"oprMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n >\n <Form.Item\n name=\"id\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item\n name=\"accessCardId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n {/* <Form.Item\n name=\"assetId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item> */}\n \n <Form.Item\n label=\"Operator ID\"\n name=\"operatorIdValue\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={50}/>\n </Form.Item>\n\n {/* <Form.Item\n label=\"Access Type\"\n name=\"accessType\"\n // rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select \n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n onChange={this.onAccessTypeChange}\n >\n\n {\n orgAccessTypes !== null && orgAccessTypes.map((accessType:any, index:number) => {\n return (\n <Option key={index} value={accessType}>\n {accessType}\n </Option>\n )})}\n </Select>\n \n \n </Form.Item> */}\n {\n \n <Form.Item\n label=\"RFID\"\n name=\"accessCardValue\"\n //rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input value = {this.state.rfidValue} onChange={this.onInputRfidChange} maxLength={10}/>\n </Form.Item>\n\n }\n {\n \n <Form.Item\n label=\"PIN\"\n name=\"pin\"\n rules={[{ required: false, message: \"Enter a 6 digit numeric value\",\n pattern: /^\\d{6}$/\n }]}\n >\n <Input value = {this.state.pinValue} />\n </Form.Item>\n\n }\n {\n <Form.Item\n name=\"isExistingUser\"\n label=\"Existing User\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n showArrow={true}\n onChange={this.handleUserTypeChange} \n // defaultValue= {(this.state.isExistingUser)?'yes':'no'}\n >\n <Option key=\"yesExisting\" value=\"yes\">\n Yes\n </Option>\n <Option key=\"noExisting\" value=\"no\">\n No\n </Option>\n \n </Select>\n </Form.Item>\n }\n {\n this.state.isExistingUser &&\n <Form.Item\n name=\"userId\"\n label=\"User\"\n rules={[{ required: this.state.isExistingUser, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n \n >\n {orgUsers !== null && orgUsers.map((record:any, index:number) => (\n <Option key={record.userId} value={record.userId}>\n {record.fullName}\n </Option>\n ))}\n </Select>\n </Form.Item>\n }\n {\n !this.state.isExistingUser &&\n <Form.Item\n label=\"First Name\"\n name=\"userFirstName\"\n rules={[{ required: !this.state.isExistingUser, message: appConfigs.errors.fieldErrors.valueRequired },\n {message: \"Enter a valid first name. Special characters not allowed. Name shall start with an alphabet\", pattern:/^[a-zA-Z\\s]+[0-9\\s]*$/}\n ]}\n >\n <Input maxLength={50}/>\n </Form.Item>\n }\n {\n !this.state.isExistingUser &&\n <Form.Item\n label=\"Last Name\"\n name=\"userLastName\"\n rules={[{ required: !this.state.isExistingUser, message: appConfigs.errors.fieldErrors.valueRequired },\n {message: \"Enter a valid last name. Special characters not allowed. Name shall start with an alphabet\", pattern:/^[a-zA-Z\\s]+[0-9\\s]*$/}\n ]}\n >\n <Input maxLength={50}/>\n </Form.Item>\n }\n {\n !this.state.isExistingUser &&\n <Form.Item\n label=\"Phone\"\n name=\"userPhone\"\n rules={[\n //{ required: !this.state.isExistingUser, message: appConfigs.errors.fieldErrors.valueRequired },\n { message: \"Enter a valid phone number\",\n pattern: /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/ }\n ]}\n >\n <Input maxLength={50} placeholder='+91 1234567890 or 1234567890 or 123-456-7890 or (123) 456-7890'/>\n </Form.Item>\n }\n {\n !this.state.isExistingUser &&\n <Form.Item\n label=\"Email\"\n name=\"userEmail\"\n rules={[\n // { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { type: \"email\", message: appConfigs.errors.fieldErrors.invalidEmail}\n ]}\n >\n <Input maxLength={50}/>\n </Form.Item>\n }\n <Form.Item\n name=\"assetName\"\n label=\"Asset Last Accessed\"\n style={{display:(this.props.oprList.oprMaint.record.assetName||\"\")==\"\"?'none':''}}\n >\n <Input disabled maxLength={32}/>\n </Form.Item>\n\n <Form.Item\n label=\"Controlled Assets\"\n name=\"mastertags\"\n // rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n initialValue={mastertags == null ? [] : mastertags?.map((asset: any) => {\n return { value: asset.mac, label: asset.mac, key: asset.mastertag }\n })}\n >\n <Select\n\n mode=\"multiple\"\n style={{ width: '100%'}}\n placeholder=\"Select Serial Number\"\n // disabled={((this.state.accessType ||\"\") === \"RFID\" ||\n // (accessType === \"RFID\" && (this.state.accessType || \"\").toLowerCase() !== \"asset-mapping\")) ||\n // this.props.oprList.oprMaint.record.status == 'inactive' }\n labelInValue\n showSearch\n showArrow={true}\n allowClear\n // optionFilterProp=\"children\"\n className=\"select-before\" \n \n >\n {orgAssets !== null && orgAssets.map((asset:any, index:number) => {\n return (\n <Option key={asset.mastertag} value={asset.serialNumber}>\n {asset.serialNumber}\n </Option>\n )})}\n </Select>\n </Form.Item>\n </Form>\n \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n oprList: state.taylorOprReducers.oprState.oprList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OprMaintInfo);","import React from \"react\";\nimport { Drawer, Tabs, Button, Space } from \"antd\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { appConfigs } from \"./../../../utils/configurations\";\nimport OprMaintInfo from \"./OprMaintInfo/OprMaintInfo\";\nimport history from './../../../utils/history';\n\nconst {TabPane}=Tabs;\n\ninterface Prop{\n oprList: any,\n getOprs: Function,\n oprMaintClose:Function,\n}\n\nclass oprMaint extends React.Component<Prop> { \n componentDidUpdate(prevProps: Prop) {\n if (this.props.oprList.oprMaint.instance !== prevProps.oprList.oprMaint.instance) {\n this.closeCollapsed();\n }\n } \n\nonDrawerClose = () => {\n \n if (this.props.oprList.refreshOnUpdate) {\n //history.push(\"/operators\");\n this.props.getOprs(this, null, null, this.props.oprList.tableConfig.pagination.current, this.props.oprList.searchText);\n }\n this.props.oprMaintClose(this); \n};\n\ncloseCollapsed() { \n let active:any = document.querySelectorAll(\"[data-id=opr-maint-drawer] .ant-collapse-item-active\"); \n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i]!.children[0].click(); \n }\n }\n}\n\nrender(){\n const { oprMaint } = this.props.oprList;\n \n return(\n <Drawer\n data-id=\"opr-maint-drawer\" \n title={oprMaint.title}\n width={oprMaint.width}\n onClose={this.onDrawerClose}\n visible={oprMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"opr-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n oprMaint.activeTab === \"1\" && ! (oprMaint.title.toString().toLowerCase().includes('history')) &&\n <Button data-id=\"opr-maint-submit-button\" type=\"primary\" form=\"oprMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n </Space>\n }\n >\n <Tabs data-id=\"users-maint-info-tabs\" activeKey={oprMaint.activeTab} size=\"large\" type=\"card\">\n {/* {\n oprMaint.title.toString().toLowerCase().includes('history') &&\n <TabPane data-id=\"opr-maint-info-tab-button\" tab={oprMaint.tabs[0].title} key=\"1\"> \n <OprHistory/>\n </TabPane>\n } */}\n {\n !(oprMaint.title.toString().toLowerCase().includes('history')) &&\n <TabPane data-id=\"opr-maint-info-tab-button\" tab={oprMaint.tabs[0].title} key=\"1\"> \n <OprMaintInfo />\n </TabPane>\n } \n </Tabs> \n </Drawer>\n );\n}\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n oprList: state.taylorOprReducers.oprState.oprList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(oprMaint);\n","import { DeleteOutlined, EditOutlined, EllipsisOutlined, PlusOutlined, UserAddOutlined, UserDeleteOutlined } from \"@ant-design/icons\";\nimport { Button, Col, Input, Popconfirm, Popover, Row, Space, Table, Tag, Tooltip, message, notification } from \"antd\";\nimport React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport BackNavigation from \"./../../../utils/Components/BackNavigation\";\nimport { appConfigs } from \"./../../../utils/configurations\";\nimport history from './../../../utils/history';\nimport * as actions from \"./actions\";\nimport \"./oprs.css\";\n//import OprMaint from \"./oprMaint\";\nimport { CSVLink } from \"react-csv\";\nimport { closePopover, getPermissions, getToken } from \"./../../../utils/commonHelpers\";\nimport OprMaint from \"./oprMaint\";\n\nconst { Search } = Input;\n\ninterface Prop{\n oprSetSearch: Function,\n oprSetPagination:Function,\n getOprs: Function,\n oprMaintOpen: Function,\n context: any,\n oprList: any,\n oprMaint:Function,\n operatorDelete: Function,\n permissions: any\n}\n\ninterface State {\n csvData: any,\n csvFileName: string,\n isOperator?: boolean,\n sortColumn: string | undefined,\n sortDirection: string | undefined,\n page: Number\n}\n\nclass TaylorOperators extends Component<Prop, State> {\n state: State = {\n csvData: [],\n csvFileName: \"\",\n isOperator:true,\n sortColumn: \"operatoridvalue\",\n sortDirection: \"ascend\",\n page:1\n };\n\n drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n csvLink: any = React.createRef<CSVLink>(); \n\n getValuesFromPath=(index:number)=>{\n const pathArr = history.location.pathname.split(\"/\");\n return pathArr[index];\n }\n getStateFromHistory=()=>{\n return ((history.location.state || true) as State).isOperator;\n }\n\n componentDidMount(){\n // if (!this.props.context.user.contextUserIsAdmin) {\n // this.props.oprSetPagination(this.onPaginationChange);\n this.getOprs();\n \n }\n\n getOprs() {\n const isOperator = this.getStateFromHistory(); //checking operator false or true\n const primaryKey = this.getValuesFromPath(3) //primary key\n const value = this.getValuesFromPath(2) //value\n if ((primaryKey||\"\") === \"\") {\n this.props.getOprs(this,this.getOprSuccess, null, this.state.sortDirection, this.state.sortColumn?.toLowerCase(), this.state.page, this.props.oprList.searchText,null);\n }\n else {\n // this.props.oprSetSearch(value);\n if(!isOperator)\n {\n //incase of RFID passing clearing table data and passing accesscardvalue and operatorhistoryod\n let obj = { accessCardValue: \"\", operatorsHistoryId: \"\"};\n obj.accessCardValue = this.getValuesFromPath(2);\n obj.operatorsHistoryId =this.getValuesFromPath(3);\n // this.props.clearTableData();\n this.oprMaintOpenDo(obj);\n }\n else\n {\n this.props.getOprs(this, this.getOprSuccess, null, this.state.sortDirection, this.state.sortColumn?.toLowerCase(), this.state.page, null, null);\n }\n \n }\n }\n\n getOprSuccess = (data: any) => {\n //this.oprMaintOpenDo((data[0]||[]));\n }\n\n oprMaintOpenDo = (record: any) => {\n const title = Object.keys((record)).length === 0 ? \"New Operator\" : (record.operatorIdValue || \"\") === \"\" ? \"New Operator\" : \"Edit Operator ::\" + record.operatorIdValue;\n this.props.oprMaintOpen(this, title, this.drawerWidth, record);\n }\n\n onPaginationChange = (page: number) => {\n this.props.getOprs(this, null, null, page, this.props.oprList.searchText);\n };\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n if ( action === \"add-opr\" ) {\n this.props.oprMaintOpen(this, \"New Operator\", this.drawerWidth,{});\n }\n else if ( action === \"edit-opr\" ) {\n this.props.oprMaintOpen(this, \"Edit Operator :: \" + record.operatorIdValue, this.drawerWidth, record);\n }\n else if ( action === \"history-opr\" ) {\n this.props.oprMaintOpen(this, \"Show History :: \" + record.operatorIdValue, this.drawerWidth, record);\n }\n else if (action === \"delete\") {\n this.props.operatorDelete(this, this.operatorDeleteSucess, null, record.id); \n } \n\n closePopover(); \n \n }\n\n operatorDeleteSucess = (data:any) => {\n message.success(\"Operator has been successfully deleted\");\n this.onPaginationChange(this.props.oprList.tableConfig.pagination.current);\n }\n\n actions = (record: any, appContext: any, contextUser: any,isUpdate: any, isDelete: any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"small\">\n {\n (isUpdate) &&\n <Tooltip title=\"Edit Operator\">\n <Button data-id=\"opr-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => { this.onAction(e, record, \"edit-opr\") }} />\n </Tooltip>\n }\n {/* {!record.activeInScope && this.confirmStatus(record, \"activate\")}\n {record.activeInScope && this.confirmStatus(record, \"deactivate\")}\n */}\n {/* {\n <Tooltip title=\"View History\">\n <Button data-id=\"opr-history-button\" type=\"default\" icon={<FieldTimeOutlined />} onClick={(e) => { this.onAction(e, record, \"history-opr\") }} />\n </Tooltip>\n } */}\n {(isDelete) && this.confirmDeletion(record)} \n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n >\n <Button data-id=\"opr-actions-button\" type=\"default\" icon={<EllipsisOutlined />} />\n </Popover>\n);\n\nconfirmStatus = (record:any, action:string) => (\n <Popconfirm\n title={\"Are you sure to \" + (action === \"activate\" ? \"activate\" : \"deactivate\") + \" this user?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, action)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {\n action === \"activate\" &&\n <Tooltip title=\"Activate User\"> \n <Button data-id=\"opr-activate-button\" type=\"default\" icon={<UserAddOutlined />} />\n </Tooltip>\n }\n {\n action !== \"activate\" &&\n <Tooltip title=\"Deactivate User\"> \n <Button data-id=\"opr-deactivate-button\" type=\"default\" icon={<UserDeleteOutlined />} />\n </Tooltip>\n }\n </div>\n </Popconfirm>\n);\nconfirmDeletion = (record:any) => (\n <Popconfirm\n title={\"Are you sure to delete this operator?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Operator\">\n <Button data-id=\"opr-delete-button\" type=\"default\" icon={<DeleteOutlined />} />\n </Tooltip>\n </Popconfirm>\n);\n onSearch = (searchText: string) => {\n let me = this;\n // this.props.oprSetSearch((searchText || \"\"));\n// if((searchText || \"\")===\"\")\n// {\n// history.push(\"/operators\");\n// }\n// setTimeout(function() {\n// // me.props.getOprs(me, null, null, 1, searchText);\n// }, 100);\nthis.props.getOprs(this,this.getOprSuccess, null, this.state.sortDirection, this.state.sortColumn?.toLowerCase(), this.state.page, searchText,null);\n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.oprSetSearch((value || \"\"));\n }\n\n onExport = (e: any) => {\n e.preventDefault();\n // this.props.getOperatorsForExport(this, this.oprExportSuccess, null, this.props.oprList.searchText);\n }\n\n oprExportSuccess = (data: any) => {\n this.setState({ csvData: data, csvFileName: \"operators.csv\" })\n const me = this;\n setTimeout(function () {\n me.csvLink.link.click();\n }, 250);\n }\n beforeUpload = (file: any) => {\n const fileType = file.type === \"text/csv\" || file.type === \"text/tsv\" || file.type === \"text/plain\" || file.type === \"application/vnd.ms-excel\";\n if (!fileType) {\n notification.error({\n message: \"File Processing\",\n description: \"CSV (comma separated values) and text file types are only allowed\"\n });\n }\n\n return fileType;\n }\n\n handleChange = (info: any) => {\n if (info.file.status === \"done\") {\n message.success(\"File has been successfully processed\");\n // this.onPaginationChange(this.props.oprList.tableConfig.pagination.current);\n }\n else if (info.file.status === \"error\") {\n let formErrors: any = [];\n\n if (info.file.response.errors && (info.file.response.errors.length || 0) !== 0) {\n info.file.response.errors.forEach(function (record: any) {\n if (record.type === \"form\") {\n formErrors.push(record.message);\n }\n });\n }\n if (formErrors.length > 0) {\n formErrors.forEach((error: string) => {\n notification.error({\n message: \"File Processing\",\n description: error\n });\n });\n }\n else {\n message.error(`${info.file.name} file upload failed.`);\n }\n }\n }; \n\n render(){\n const { contextUser, appContext } = this.props.context;\n const { tableConfig, tableData } = this.props.oprList;\n const result = getPermissions(this.props.permissions.permissions.operator_support);\n if (!this.props.context.user.contextUserIsAdmin && !result[1]){\n history.push(\"/not-found\")\n }\n\n let isCreate = true; //result[0];\n let isRead = true;//result[1];\n let isUpdate = true;//result[2];\n let isDelete = true;//result[3];\n\n let token=getToken();\n const tableColumns: any[] = [\n {\n title: \"Operator ID\",\n dataIndex: \"operatorIdValue\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'operatoridvalue' ? this.state.sortDirection : false,\n },\n {\n title: \"RFID\",\n dataIndex: \"accessCardValue\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'accesscardvalue' ? this.state.sortDirection : false,\n },\n {\n title: \"PIN\",\n dataIndex: \"pin\",\n },\n {\n title: \"Asset Last accessed\",\n dataIndex: \"assetName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'assetname' ? this.state.sortDirection : false,\n },\n {\n title: \"Assets controlled\",\n dataIndex: \"mastertags\",\n // responsive: [\"lg\"] as Breakpoint[],\n render: (record: any) => (\n <>\n {record?.map((assetTag: any, key: number) => {\n return (\n <Tag key={key} style={{ margin: '2px' }}>\n { assetTag.mac}\n </Tag>\n );\n })}\n </>\n ),\n \n },\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n this.actions(record, appContext, contextUser, isUpdate, isDelete)\n //this.actions(record, null, null, isUpdate, isDelete)\n )\n \n }\n ]\n\n const sortOperatorsTable = (pagination: any, filters: any, sorter: any): void => {\n let sortColumn: string | undefined = undefined;\n let sortDirection: string | undefined = undefined;\n if (sorter && Object.keys(sorter).length > 0) {\n const { column, order } = sorter;\n sortDirection = order;\n sortColumn = column?.dataIndex.toLowerCase();//.replace(/\\s/g, '');\n \n }\n // setPage(pagination.current);\n // setSortColumn(sortColumn || '');\n // setSortDirection(sortDirection || '');\n this.setState({sortColumn: sortColumn?.toLowerCase(), sortDirection: sortDirection, page: pagination.current});\n this.props.getOprs(this,this.getOprSuccess, null, sortDirection, sortColumn?.toLowerCase(), pagination.current, this.props.oprList.searchText,null);\n \n }\n\n \n \n return (\n <div data-id=\"operators-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n Operators\n </div>\n </div>\n </Col>\n \n \n <Col xs={24} lg={18} className=\"content-header-controls\">\n \n <Space>\n {/* {\n (isCreate && isUpdate) &&\n <Upload\n {...uploadProps}\n onChange={this.handleChange}\n >\n <Button>\n <ImportOutlined /> Import\n </Button>\n </Upload>\n } */}\n {/* {\n (isRead) &&\n <Tooltip title=\"Export Operators\">\n <Button data-id=\"opr-export-button\" onClick={(e) => this.onExport(e)} icon={<ExportOutlined />}>\n <span>Export</span>\n </Button>\n </Tooltip>\n } */}\n {/* <CSVLink\n data={this.state.csvData}\n filename={this.state.csvFileName}\n className=\"hidden\"\n ref={(r: any) => this.csvLink = r}\n target=\"_blank\"\n /> */}\n \n {\n (isRead) &&\n <Search\n data-id=\"operator-search-field\"\n key=\"search-field\"\n placeholder=\"Search by ID, Access Card, Asset, Tags\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value = {this.props.oprList.searchText}\n\n />\n }\n {\n (isCreate) &&\n <Tooltip title=\"Create New Operator\">\n <Button data-id=\"opr-search-new-opr-button\" type=\"primary\"\n icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add-opr\")}>\n <span>Operator</span>\n </Button>\n </Tooltip>\n }\n </Space>\n </Col>\n </Row>\n <div className=\"mt-15\">\n {(isRead) &&\n <Table\n data-id=\"oprs-data\"\n {...tableConfig}\n rowKey={(record) => record.id}\n columns={tableColumns}\n dataSource= {tableData}//{dataSource}\n onChange={sortOperatorsTable}\n\n />\n }\n <OprMaint/>\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n oprList: state.taylorOprReducers.oprState.oprList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TaylorOperators);\n","import { ExportOutlined } from \"@ant-design/icons\";\nimport { Button, Col, Row, Select, Space, Table, Tooltip } from 'antd';\nimport Search from \"antd/lib/input/Search\";\nimport * as FileSaver from 'file-saver';\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport * as XLSX from 'xlsx';\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport * as actions from \"./actions\";\n\nconst { Option } = Select;\ninterface Prop{\n oprList:any,\n context: any,\n oprHistory: any,\n getOperatorsHistory: Function,\n oprHistorySetSearch: Function\n}\n\ninterface State {\n csvData: any,\n csvFileName: string,\n sortColumn: any,\n sortDirection: any,\n page: number\n}\nclass OperatorsHistory extends React.Component<Prop,State> {\n\n state: State = {\n csvData: [],\n csvFileName: \"\",\n sortColumn: \"accessDate\",\n sortDirection: \"ascend\",\n page: 1\n };\n\n csvLink: any = React.createRef<{ link: HTMLAnchorElement }>();\n componentDidMount() {\n this.componentUpdate(this.props.oprList.oprMaint.record);\n }\n componentDidUpdate(prevProps: Prop) {\n if (this.props.oprList.oprMaint.instance !== prevProps.oprList.oprMaint.instance) {\n this.componentUpdate(this.props.oprList.oprMaint.record);\n }\n }\n\n onSearch = (searchText: string) => {\n\n this.props.getOperatorsHistory(this,null, null, this.state.sortDirection, this.state.sortColumn?.toLowerCase(), this.state.page, searchText,null);\n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.oprHistorySetSearch((value || \"\"));\n }\n\n componentUpdate(record:any) {\n this.props.getOperatorsHistory(this,null, null, this.state.sortDirection, this.state.sortColumn?.toLowerCase(), this.state.page, this.props.oprHistory.searchText,null);\n // formInit(this);\n // let orgId = (record.orgId || \"\") === \"\" ? this.props.context.appContext.orgId:record.orgId;\n // this.props.operatorOrgUsersGet(this, null, null,orgId);\n // this.props.operatorOrgAssetsGet(this, null, null, 'all', orgId);\n // //this.props.operatorOrgAccessTypesGet(this, null, null, 'all', orgId);\n \n // if (this.formRef.current != null) {\n // this.formRef.current!.resetFields(); \n // this.formRef.current!.setFieldsValue({\n // orgId: (record.orgId || \"\") === \"\" ? (this.props.context.appContext.roleName === \"admin\" ? this.props.context.appContext.orgId: null) : record.orgId, \n // operatorIdValue:record.operatorIdValue,\n // accessType:record.accessType,\n // accessCardValue:record.accessCardValue,\n // userId:record.userId,\n // assetName:record.assetName,\n // accessCardId:record.accessCardId,\n // pinValue: record.pinValue,\n // mastertags: record.mastertags?.map((assetTag:any) => {return {value: assetTag.mastertag, label: assetTag.mastertag, key: assetTag.mastertag} }),\n // id:record.id\n \n // });\n // }\n }\n \n // onFinish = (values: any) => {\n // resetFormErrors(this, this.formRef.current);\n // this.props.oprMaint(this, this.onFinishSuccess, this.onFinishFailure, values, this.props.oprList.oprMaint.record.operatorsHistoryId, this.state.isOverrideRFID);\n // };\n\n // onFinishSuccess = (record: any) => { \n // // this.props.oprsListRefreshOnUpdate(this);\n \n // if (record != null && record.operatorIdValue != null && \n // Object.keys(record.operatorIdValue) != null && Object.keys(record.operatorIdValue).length !== 0) {\n // this.componentUpdate(record);\n // }\n // this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n // successResponse(this, \"Operator has been successfully processed\"); \n // }\n // onFinishFailure = (error: any) => { \n // if (error.response.data.errors[0].reference === \"override\") {\n // const errMsg = error.response.data.errors[0].message;\n // this.setState({ isOveridePanelDisplay: true, overrideErrorMessage: errMsg });\n // }\n // else {\n // this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n // errorResponse(this, error);\n // }\n // }\n\n // onOverrideSubmit = (e: any) => {\n // this.setState({ isOverrideRFID: true });\n // this.formRef.current?.submit();\n // }\n // cancelOverride = (e: any) => {\n // this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n // }\n\n sortOperatorsHistoryTable = (pagination: any, filters: any, sorter: any): void => {\n let sortColumn: string | undefined = undefined;\n let sortDirection: string | undefined = undefined;\n if (sorter && Object.keys(sorter).length > 0) {\n const { column, order } = sorter;\n sortDirection = order;\n sortColumn = column?.dataIndex.toLowerCase();//.replace(/\\s/g, ''\n \n }\n // setPage(pagination.current);\n // setSortColumn(sortColumn || '');\n // setSortDirection(sortDirection || '');\n this.setState({sortColumn: sortColumn?.toLowerCase(), sortDirection: sortDirection, page: pagination.current});\n this.props.getOperatorsHistory(this,null, null, sortDirection, sortColumn?.toLowerCase(), pagination.current, this.props.oprHistory.searchText,null);\n }\n \n // onAccessTypeChange = (value:any) => {\n // this.setState({ accessType: value });\n // if (value.toLowerCase() !== 'rfid') {\n // this.setState({ rfidValue: \"\"})\n // // this.props.rfidSetValue(this, \"\");\n // }\n // };\n\n // onInputRfidChange = (value:any) => {\n // this.setState({ rfidValue: value || \"\" == \"\"? \"\" : value.target.value})\n // // this.props.rfidSetValue(this, value || \"\" == \"\"? \"\" : value.target.value);\n // };\n\n render(){\n // const { orgUsers, orgAssets, orgAccessTypes, rfidValue } = this.props.oprList.oprMaint.tabs[0];\n // const {operatorsHistoryId, mastertags, accessType} = this.props.oprList.oprMaint.record;\n const dataSource1 = this.props.oprList.operatorHistoryTableData;\n const { tableConfig } = this.props.oprList;\n // let csvLink: any = React.createRef<CSVLink>();\n const tableColumns: any[] = [\n {\n title: \"Date\",\n dataIndex: \"accessDate\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'accessdate' ? this.state.sortDirection : false,\n render: (text: any, record: any) => (\n <>\n {\n <span>{new Date(record.accessDate).toLocaleString()}</span>\n }\n </>\n )\n },\n {\n title: \"Asset\",\n dataIndex: \"assetName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'assetname' ? this.state.sortDirection : false,\n \n },\n {\n title: \"Operator\",\n dataIndex: \"operatorIdValue\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.sortColumn == 'operatoridvalue' ? this.state.sortDirection : false\n },\n {\n title: \"Access Type\",\n dataIndex: \"accessType\",\n },\n {\n title: \"Question Bank Name\",\n dataIndex: \"questionBankName\",\n },\n {\n title: \"Result Question Bank\",\n dataIndex: \"result\",\n },\n {\n title: \"Export Question Bank\",\n dataIndex: \"Response\",\n render: (text: any, record: any) => (\n <>\n {\n <><Tooltip title=\"Export QuestionBank\">\n <Button data-id=\"qb-export-button\" onClick={(e) => this.onExport(e, record)} icon={<ExportOutlined />}>\n <span>Export</span>\n </Button>\n </Tooltip>\n {/* <CSVLink\n data={this.state.csvData}\n filename={this.state.csvFileName}\n onClick={(e: any) => this.onExport(e, record)}\n // className=\"hidden\"\n ref={(r: any) => this.csvLink = r}\n target=\"_blank\" >Export1</CSVLink> */}\n </>\n }\n </>\n )\n },\n ]\n \n return(\n <div data-id=\"operators-history-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n Operator History\n </div>\n </div>\n </Col>\n \n \n <Col xs={24} lg={18} className=\"content-header-controls\">\n \n <Space size=\"middle\"> \n \n {\n // (isRead) &&\n <Search\n data-id=\"operator-search-field\"\n key=\"search-field\"\n placeholder=\"Search by Operator ID, Asset\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.props.oprHistory.searchText}\n\n />\n }\n </Space>\n </Col>\n </Row>\n <div className=\"mt-15\">\n\n <Table\n data-id=\"oprs-history\"\n {...tableConfig}\n rowKey={(record:any) => record.recordNo }\n columns={tableColumns}\n dataSource={dataSource1}\n onChange={this.sortOperatorsHistoryTable}\n\n />\n </div>\n </div>\n );\n }\n onExport(e: any, record: any): void {\n e.preventDefault();\n this.qandaExportSuccess(this,record);\n }\n qandaExportSuccess(me:any,operatorHistory: any) {\n let result=[];\n for (const [key, value] of Object.entries(JSON.parse(operatorHistory.answers))) { \n result.push([`${key}`, `${value}`]); \n }\n this.setState({ csvData: result, csvFileName: operatorHistory.id.toString()+\".csv\" });\n const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\n const fileExtension = '.xlsx';\n let Heading = [['Question', 'Answer']];\n\n const ws = XLSX.utils.json_to_sheet(result);\n XLSX.utils.sheet_add_aoa(ws, Heading);\n\n const wb = { Sheets: { 'data': ws }, SheetNames: ['data'] };\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });\n const data = new Blob([excelBuffer], { type: fileType });\n FileSaver.saveAs(data, operatorHistory.id.toString() + fileExtension);\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n oprList: state.taylorOprReducers.oprState.oprList,\n oprHistory: state.taylorOprReducers.oprState.oprHistory\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OperatorsHistory);","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { GeofenceShape } from \"../geofenceHelper\";\n\nexport function closeDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_DRAWER_CLOSE\" });\n\t};\n}\n\nexport function setName(name: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_NAME\", payload: { fenceName: name } });\n\t};\n}\n\nexport function setColor(color: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_COLOR\", payload: { fenceColor: color } });\n\t};\n}\n\nexport function setDescription(description: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_DESCRIPTION\",\n\t\t\tpayload: { description: description },\n\t\t});\n\t};\n}\n\nexport function setAssetsList(assetsList: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_ASSETSLIST\", payload: { assetsList: assetsList } });\n\t};\n}\n\n// export function setMastertags(mastertags: any) {\n// \treturn (dispatch: any) => {\n// \t\tdispatch({ type: \"SET_MASTERTAGS\", payload: { mastertags: mastertags } });\n// \t};\n// }\n\nexport function getGeoFences() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/geofences\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {},\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: \"SET_FENCELIST\",\n\t\t\t\t\tpayload: { fenceList: response.data.data.geofences },\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(function (error) {\n\t\t\t\tdispatch({type: \"SET_FENCELIST_LOADED\", payload: { fenceListLoaded: true }});\n\t\t\t});\n\t\n\t};\n}\n\nexport function setChangeInGateways(changeInGateways: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_CHANGE_IN_GATEWAYS\",\n\t\t\tpayload: { changeInGateways: changeInGateways },\n\t\t});\n\t};\n}\n\nexport function setFenceListLoaded(fenceListLoaded: boolean) {\n\treturn (dispatch: any) => {\n\t\tdispatch({type: \"SET_FENCELIST_LOADED\", payload: { fenceListLoaded: fenceListLoaded }});\n\t};\n}\n\nexport function setShapeGateways(id: any, gateways: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_SHAPE_GATEWAYS\",\n\t\t\tpayload: { id: id, gateways: gateways },\n\t\t});\n\t};\n}\n\nexport function resetChangeGateways() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"RESET_CHANGE_IN_GATEWAYS\" });\n\t};\n}\n\nexport function removeShapeFromMap(id: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"REMOVE_SHAPE_FROM_MAP\", payload: { id: id } });\n\t};\n}\n\nexport function updateShape(id: any, record: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"UPDATE_SHAPE\", payload: { id: id, record: record } });\n\t};\n}\n\nexport function updateShapeOnMap(geofenceShape: GeofenceShape, newOptions: any){\n\treturn (dispatch:any) => {\n\t\tdispatch({ type: \"UPDATE_SHAPE_ON_MAP\", payload: { geofenceShape: geofenceShape, newOptions: newOptions } });\n\t}\n}\n\nexport function addShapeSubmit(geofenceShape: any, record: any, id: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"ADD_SHAPE_SUBMIT\",\n\t\t\tpayload: { geofenceShape: geofenceShape, record: record, id: id },\n\t\t});\n\t};\n}\n\nexport function removeShape(geofenceShape: GeofenceShape) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"REMOVE_SHAPE\", payload: { geofenceShape: geofenceShape } });\n\t};\n}\n\nexport function removeShapesFromMap(){\n\treturn (dispatch:any) => {\n\t\tdispatch({ type: \"REMOVE_SHAPES_FROM_MAP\"});\n\t}\n}\n\nexport function addShapesToMap(geofenceShape: GeofenceShape){\n\treturn (dispatch:any) => {\n\t\tdispatch({ type: \"ADD_SHAPES_TO_MAP\"});\n\t}\n}","export function openFenceListDrawer(){\n return (dispatch: any) => {\n dispatch({ type: \"OPEN_FENCELIST_DRAWER\" });\n dispatch({ type: \"FILTER_FENCELIST_DRAWER\", payload: { searchVal: \"\" } });\n }\n}\n\nexport function closeFenceListDrawer(){\n return (dispatch: any) => {\n dispatch({type: \"CLOSE_FENCELIST_DRAWER\"});\n }\n}\n\nexport function changeOnSearch(searchVal:string){\n return (dispatch: any) => {\n dispatch({type: \"FILTER_FENCELIST_DRAWER\", payload: {searchVal: searchVal}})\n }\n}","export function openFenceAssetsDrawer(){\n return (dispatch: any) => {\n dispatch({type: \"OPEN_FENCE_ASSETS_DRAWER\"});\n }\n}\n\nexport function closeFenceAssetsDrawer(){\n return (dispatch: any) => {\n dispatch({type: \"CLOSE_FENCE_ASSETS_DRAWER\"});\n }\n}\n\nexport function setFenceMastertags(mastertags:any, fenceName:any, latestPositionStatuses: any){\n return (dispatch: any) => {\n dispatch({type: \"SET_FENCE_MASTERTAGS\", payload: {mastertags: mastertags, fenceName: fenceName, latestPositionStatuses: latestPositionStatuses}});\n }\n}","import { GeofenceShape } from \"./../geofenceHelper\";\nimport Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function openDrawer(geofenceShape: GeofenceShape) {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_DRAWER_OPEN\",\n\t\t\tpayload: { geofenceShape: geofenceShape },\n\t\t});\n\t};\n}\n\nexport function setCurShape(geofenceShape: GeofenceShape) {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_CUR_SHAPE\",\n\t\t\tpayload: { geofenceShape: geofenceShape },\n\t\t});\n\t};\n}\n\nexport function setMap(map: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_MAP\", payload: { map: map } });\n\t};\n}\n\nexport function setDrawingManager(drawingManager: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_DRAWING_MANAGER\", payload: { drawingManager: drawingManager } });\n\t};\n}\n\nexport function setMarkerManager(markerManager: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_MARKER_MANAGER\", payload: { markerManager: markerManager } });\n\t};\n}\n\nexport function getAllAssetsList() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/geofence-assets\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\tpage: 1,\n\t\t\t\tpageSize: 9999,\n\t\t\t},\n\t\t}).then((response) => {\n\t\t\tlet assets = response.data.data.assets;\n\t\t\tdispatch({ type: \"SET_ASSETSLIST\", payload: { assetsList: assets } });\n\t\t});\n\t};\n}\n\nexport function addShape(geofenceShape: GeofenceShape) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"ADD_SHAPE\", payload: { geofenceShape: geofenceShape } });\n\t\tdispatch({ type: \"FILTER_FENCELIST_DRAWER\", payload: { searchVal: \"\" } });\n\t};\n}\n\n\n\nexport function clearGeoFencesState() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"CLEAR_GEOFENCES_STATE\" });\n\t};\n}\n\n\n","export function orgSelectorOpen(\n me: any, \n title: string,\n width: number\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_OPEN\", title: title, width: width });\n };\n}\n\nexport function orgSelectorClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_CLOSE\" });\n };\n}\n\nexport function orgSelectorSetView(\n me: any, \n viewName: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_SET_VIEW\", viewName: viewName });\n };\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function orgSelectorUserOrgSelectionGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/users/orgs/selection\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgSelection.selections);\n } \n dispatch({ type: \"ORG_SELECTOR_SET_INCLUDE_SUBORGS\", includeSuborgs: response.data.data.orgSelection.includeSuborgs, updateState: false});\n dispatch({ type: \"ORG_SELECTOR_SET_ORG_SELECTION\", data: response.data.data.orgSelection.selections });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function orgSelectorHeaderTagRemove(\n me: any,\n orgId: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_HEADER_TAG_REMOVE\", orgId: orgId });\n };\n}\n\nexport function orgSelectorHeaderSetDisplay(\n me: any,\n tab: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_HEADER_SET_DISPLAY\" });\n };\n}\n\nexport function orgSelectorRemoveSelections(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/users/orgs/selection\",\n {}\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(); \n }\n dispatch({ type: \"ORG_SELECTOR_REMOVE_SELECTIONS_SUCCESS\" });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function orgSelectorIncludeSuborgs(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n includeSuborgs: boolean\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \n \"/ui/api/users/orgs/selection\" + \n \"?includeSuborgs=\" + includeSuborgs.toString(),\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(includeSuborgs); \n }\n dispatch({ type: \"ORG_SELECTOR_SET_INCLUDE_SUBORGS\", includeSuborgs: includeSuborgs, updateState: true });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error, includeSuborgs);\n }\n }\n );\n }\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function orgSelectorListSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_LIST_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function orgSelectorListSetCurentPage(\n page: number \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_LIST_SET_CURRENT_PAGE\", page: page });\n }\n} \n\nexport function orgSelectorListSetOrgTree(\n me: any, \n orgTree: any[]\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_LIST_SET_ORG_TREE\", orgTree: orgTree });\n }\n} \n\nexport function orgSelectorListSetSearch(\n me: any, \n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_LIST_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function orgSelectorListSetDisplay(\n mode: string, \n searchText: string,\n orgId: string,\n orgName: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_LIST_SET_DISPLAY\", mode: mode, searchText: searchText, orgId: orgId, orgName: orgName });\n }\n} \n\nexport function orgSelectorListOrgGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs/\" + orgId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.org);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function orgSelectorListOrgsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mode: string = \"all\",\n page: number = 1,\n searchText?: string,\n orgId?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs\", {\n responseType: \"json\", \n headers: {},\n params: {\n mode: mode,\n scope: \"all\",\n includeTree: true,\n orgId: orgId,\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.orgs == null || (response.data.data.orgs.length || 0) === 0 ? [] : response.data.data.orgs;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data, mode);\n }\n dispatch({ type: \"ORG_SELECTOR_LIST_GET_ORGS_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function orgSelectorListMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n selected: boolean,\n includeSubOrgs?: boolean\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/users/orgs/selection?orgId=\" + orgId + \"&selected=\" + selected + \"&includeSubOrgs=\" + (includeSubOrgs || false),\n {},\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgSelection, orgId);\n }\n dispatch({ type: \"ORG_SELECTOR_SET_ORG_SELECTION\", data: response.data.data.orgSelection });\n dispatch({ type: \"ORG_SELECTOR_LIST_SET_SELECTION\", orgId: orgId, selected: selected });\n dispatch({ type: \"ORG_SELECTOR_TREE_SET_SELECTION\", orgSelection: response.data.data.orgSelection });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n }\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function orgSelectorTreeExpand(\n me: any, \n expandedKeys: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_TREE_EXPAND\", expandedKeys: expandedKeys, isExpanded: true });\n };\n}\n\nexport function orgSelectorTreeCheck(\n me: any, \n checkedKeys: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_TREE_CHECK\", checkedKeys: checkedKeys });\n };\n}\n\nexport function orgSelectorTreeSelection(\n me: any, \n orgId: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_SELECTOR_TREE_SELECTION\", orgId: orgId });\n };\n}\n\nexport function orgSelectorTreeOrgsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mode: string = \"all\",\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs/selector/tree\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data.data.orgs == null || (response.data.data.orgs.length || 0) === 0 ? [] : response.data.data.orgs;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data, mode);\n }\n dispatch({ type: \"ORG_SELECTOR_TREE_GET_ORGS_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function orgSelectorTreeMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n selected: boolean,\n checkedKeys: any,\n includeSubOrgs?: boolean\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/users/orgs/selection?orgId=\" + orgId + \"&selected=\" + selected + \"&includeSubOrgs=\" + (includeSubOrgs || false),\n {},\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgSelection, orgId, checkedKeys);\n }\n dispatch({ type: \"ORG_SELECTOR_SET_ORG_SELECTION\", data: response.data.data.orgSelection });\n dispatch({ type: \"ORG_SELECTOR_TREE_SET_SELECTION\", orgSelection: response.data.data.orgSelection });\n dispatch({ type: \"ORG_SELECTOR_LIST_SET_SELECTION\", orgId: orgId, selected: selected });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n }\n}","import React from \"react\";\nimport { Tag, Card, Button, Badge, Switch } from \"antd\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport \"./orgSelector.css\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\n//import { getPermissions } from \"../../actions/permissions\";\n\ninterface Prop {\n orgSelectorHeaderSetDisplay: Function,\n orgSelectorHeaderTagRemove: Function,\n orgSelectorUserOrgSelectionGet: Function,\n orgSelectorListMaint: Function,\n orgSelectorTreeMaint: Function,\n orgSelectorIncludeSuborgs: Function,\n orgSelector: any,\n permissions: any\n}\n\nclass OrgSelectorHeader extends React.Component<Prop, {}> { \n \n componentDidMount() {\n this.componentUpdate(); \n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgSelector.instance !== prevProps.orgSelector.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n this.props.orgSelectorUserOrgSelectionGet(this, null, null);\n }\n\n onTagCloseAll = (e:any) => {\n e.preventDefault();\n\n let tags:any = document.querySelectorAll('[data-id=org-selector-selection-container] .ant-tag span');\n\n if (tags.length) {\n for (var i = 0; i < tags.length; i++) { \n tags[i].click(); \n }\n }\n }\n\n setDisplay = (e:any) => {\n e.preventDefault();\n this.props.orgSelectorHeaderSetDisplay();\n }\n\n onTagClose = (e:any, orgId:string) => {\n this.props.orgSelectorListMaint(this, this.onTagCloseSuccess, null, orgId, false);\n this.props.orgSelectorTreeMaint(this, this.onTagCloseSuccess, null, orgId, false);\n }\n\n onTagCloseSuccess = (data:any, orgId:string) => {\n this.props.orgSelectorHeaderTagRemove(this, orgId);\n }\n\n onSuborgsChange = (checked:boolean, e:any) => {\n this.props.orgSelectorIncludeSuborgs(this, null, null, checked)\n }\n\n render() {\n \n const { orgSelector } = this.props;\n\n return (\n <>\n { \n orgSelector.orgSelection.length > 0 &&\n <Card \n data-id=\"org-selector-selection-container\"\n size=\"small\" \n title={\n <> \n <span>Selection</span>\n <Badge data-id=\"org-selector-selection-badge\" className={\"pl-5 site-badge-count-4\" + (orgSelector.includeSuborgs ? \" org-selector-has-sub-orgs\" : \"\")} count={orgSelector.orgSelection.length} style={{ backgroundColor: '#108ee9', marginBottom: 5 }} />\n { \n <div data-id=\"org-selector-header-include-suborgs\">\n <Switch checkedChildren=\"SUB-ORGS\" unCheckedChildren=\"SUB-ORGS\" onChange={(checked:boolean, e:any) => this.onSuborgsChange(checked, e)} checked={orgSelector.includeSuborgs}/>\n </div>\n }\n \n </>\n } \n extra={ \n <a data-id=\"org-selector-selection-show-hide\" href=\"# \" onClick={(e) => {this.setDisplay(e)}}>{orgSelector.selectonHeader ? \"Hide\" : \"Show\"}</a>\n } \n >\n {\n orgSelector.selectonHeader &&\n <div>\n {\n orgSelector.orgSelection\n .map((record:any, index:number) => (\n <Tag key={\"selection-\" + record.orgId} closable onClose={(e:any) => this.onTagClose(e, record.orgId)}>\n {record.name}\n </Tag>\n ))\n }\n { \n orgSelector.orgSelection &&\n <Button key={\"remove-all\"} data-id=\"org-selector-button-remove-all\" type=\"dashed\" onClick={(e) => {this.onTagCloseAll(e)}}>Remove All</Button>\n }\n </div>\n }\n </Card>\n }\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n orgSelector: state.orgSelectorReducers.orgSelectorState.orgSelector,\n permissions: state.contextReducer.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OrgSelectorHeader);\n","import React, { Component } from \"react\";\nimport { Table, Checkbox, Breadcrumb, Button, Radio, Input, Row, Col, Tooltip } from \"antd\";\nimport { SwapOutlined, UnorderedListOutlined, ApartmentOutlined, RightOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\n\nimport * as rootActions from \"../../actions\";\nimport * as orgSelectorActions from \"./actions\";\n\nimport { reloadPage, loadingIndicatorStart } from \"../../utils/commonHelpers\";\nimport { appConfigs } from \"../../utils/configurations\";\n\nconst { Search } = Input;\n\ninterface Prop {\n supportModeSet: Function,\n orgSelectorListSetPagination: Function,\n orgSelectorListSetOrgTree: Function,\n orgSelectorListSetDisplay: Function,\n orgSelectorListOrgsGet: Function,\n orgSelectorListMaint: Function,\n orgSelectorListSetSearch: Function,\n orgSelectorSetView: Function,\n supportMode: any,\n orgSelector: any,\n orgSelectorList: any,\n issupportmode: boolean,\n iscreate: boolean,\n isupdate: boolean\n}\nclass OrgSelectorList extends Component<Prop, {}> {\n\n componentDidMount () {\n this.props.orgSelectorListSetPagination(this.onPaginationChange);\n this.componentUpdate(); \n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgSelector.instance !== prevProps.orgSelector.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n if ((this.props.orgSelectorList.tableData.length || 0) === 0 || this.props.orgSelectorList.refreshOnEntry) {\n this.props.orgSelectorListSetSearch(this, \"\");\n this.props.orgSelectorListOrgsGet(this, null, null, this.props.orgSelectorList.mode, 1);\n }\n }\n\n onPaginationChange = (page: number) => {\n let orgSelectorList = this.props.orgSelectorList;\n this.props.orgSelectorListOrgsGet(this, null, null, orgSelectorList.mode, page, orgSelectorList.searchText, orgSelectorList.orgId);\n };\n\n drillIn = (e:any, mode:string, orgId:string, orgName:string) => {\n e.preventDefault();\n let orgSelectorList = this.props.orgSelectorList;\n this.props.orgSelectorListSetDisplay(mode, orgSelectorList.searchText, mode === \"all\" ? \"\" : orgId, mode === \"all\" ? \"\" : orgName);\n\n if (mode === \"all\") {\n this.props.orgSelectorListSetOrgTree(this, []);\n }\n this.props.orgSelectorListOrgsGet(this, this.drillInSuccess, null, mode, 1, orgSelectorList.searchText, orgId);\n };\n \n drillInSuccess = (data:any, mode:string) => {\n if (mode !== \"all\" && data.length > 0) {\n this.props.orgSelectorListSetOrgTree(this, data[0].orgTree);\n }\n }\n\n onCheckChange = (e:any, record:any) => {\n this.props.orgSelectorListMaint(this, this.onCheckChangeSuccess, this.onCheckChangeFailure, record.orgId, e.target.checked);\n }\n\n statsGetSuccess = () => { \n };\n\n statsGetFailure = () => { \n } \n\n onCheckChangeSuccess = () => { \n };\n\n onCheckChangeFailure = () => { \n } \n \n supportModeSet = (e: any, orgId:string, orgName: string) => {\n this.props.supportModeSet(this, this.supportModeSetSuccess, orgId, orgName);\n }\n\n supportModeSetSuccess = () => {\n loadingIndicatorStart();\n setTimeout(function () {\n window.location.href = \"/map\"; \n }, 500);\n\n // setTimeout(function () {\n // reloadPage();\n // }, 250);\n // }\n }\n\n onSearch = (searchText: string) => {\n this.props.orgSelectorListSetOrgTree(this, []);\n this.props.orgSelectorListSetSearch(this, searchText || \"\");\n this.props.orgSelectorListOrgsGet(this, null, null, \"all\", 1, (searchText || \"\"), \"\"); \n }\n\n onSearchChange = (e: any) => {\n this.props.orgSelectorListSetSearch(this, e.target.value || \"\");\n }\n \n viewChange = (e:any) => {\n this.props.orgSelectorSetView(this, e.target.value);\n };\n\n render() { \n\n const { tableConfig, tableData, orgTree, searchText } = this.props.orgSelectorList;\n\n const tableColumns = [\n {\n dataIndex: \"name\",\n key: \"name\",\n width: \"100%\",\n render: (name: number, record: any) => (\n <>\n <Checkbox \n checked={record.orgSelection} \n onChange={(e) => this.onCheckChange(e, record)}\n className=\"pr-5\" \n >\n {\n record.logoDisplay &&\n <img className=\"pl-10 org-selector-logo\" src={appConfigs.server.URL + record.logoDisplay} alt=\"\"/>\n }\n </Checkbox>\n {\n record.subOrgCount > 0 &&\n <a href=\"# \" onClick={(e) => {this.drillIn(e, \"direct-children\", record.orgId, record.name)}}>{name}</a>\n }\n {\n record.subOrgCount === 0 &&\n <span>{name}</span>\n }\n </>\n )\n }, \n {\n key: \"action\",\n width: 150,\n align: \"center\" as \"center\",\n render: (text:any, record:any) => ( \n <>\n {\n record.orgId !== this.props.supportMode.orgId && this.props.issupportmode &&\n <Tooltip title=\"Support\">\n <Button icon={<RightOutlined />} onClick={(e) => {this.supportModeSet(e, record.orgId, record.name)}} />\n </Tooltip>\n }\n </>\n ),\n }\n ];\n\n return (\n <div data-id=\"org-selector-list\"> \n <Row gutter={8}>\n <Col xs={24} md={20}>\n <Search\n data-id=\"org-selector-list-search-field\"\n key=\"list-search-field\"\n placeholder=\"Search by org name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n className=\"search-field\"\n onChange={this.onSearchChange}\n value={searchText}\n /> \n </Col>\n <Col xs={24} md={4}>\n <Radio.Group key=\"list-view-switch\" onChange={this.viewChange} value={this.props.orgSelector.currentView}>\n <Radio.Button \n data-id=\"org-selector-list-list-view-button\"\n value=\"list-view\"\n >\n <Tooltip title=\"List View\"><UnorderedListOutlined /></Tooltip>\n </Radio.Button>\n <Radio.Button \n data-id=\"org-selector-list-tree-view-button\"\n value=\"tree-view\"\n >\n <Tooltip title=\"Tree View\"><ApartmentOutlined /></Tooltip>\n </Radio.Button>\n </Radio.Group>\n </Col>\n </Row>\n\n <Breadcrumb separator=\"/\">\n <Breadcrumb.Item key=\"breadcrumb-all-orgs\" href=\"# \" onClick={(e) => {this.drillIn(e, \"all\", \"\", \"\")}}>All Orgs</Breadcrumb.Item>\n {orgTree && \n orgTree\n .filter((record:any, index:number) => (\n index < orgTree.length - 1\n ))\n .map((record:any, index:number) => (\n <Breadcrumb.Item key={\"breadcrumb-\" + index} href=\"# \" onClick={(e) => {this.drillIn(e, \"direct-children\", record.orgId, record.name)}}>\n {record.name}\n </Breadcrumb.Item>\n ))\n }\n </Breadcrumb>\n\n <hr className=\"hr\" />\n\n <Table \n data-id=\"org-selector-list-data\"\n {...tableConfig}\n rowKey={(record) => record.orgId} \n columns={tableColumns}\n dataSource={tableData}\n />\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n supportMode: state.supportModeReducer,\n orgSelector: state.orgSelectorReducers.orgSelectorState.orgSelector,\n orgSelectorList: state.orgSelectorReducers.orgSelectorState.orgSelector.list\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n ...orgSelectorActions \n }\n)(OrgSelectorList);\n","import React, { Component } from \"react\";\nimport { Tree, Radio, Input, Row, Col, Tooltip, message } from \"antd\";\nimport { UnorderedListOutlined, ApartmentOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as rootActions from \"../../actions\";\nimport * as actions from \"./actions\";\n\nimport { reloadPage, loadingIndicatorStart, loadingIndicatorEnd } from \"../../utils/commonHelpers\";\n\nconst { DirectoryTree } = Tree;\nconst { Search } = Input;\n\ninterface Prop {\n orgSelectorTreeExpand: Function,\n orgSelectorTreeCheck: Function,\n orgSelectorTreeSelection: Function,\n orgSelectorTreeOrgsGet: Function,\n orgSelectorTreeMaint: Function,\n orgSelectorSetView: Function,\n orgSelector: any,\n orgSelectorTree: any,\n issupportmode:boolean,\n iscreate: boolean,\n isupdate: boolean\n}\n\ninterface State {\n searchValue: string;\n}\n\nclass OrgSelectorTree extends Component<Prop, State> {\n \n state:State = {\n searchValue: \"\",\n }\n\n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgSelector.instance !== prevProps.orgSelector.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n if ((this.props.orgSelectorTree.treeData.length || 0) === 0 || this.props.orgSelectorTree.refreshOnEntry) {\n this.setState({ searchValue: \"\" });\n this.props.orgSelectorTreeSelection(this, \"\", \"\");\n this.props.orgSelectorTreeOrgsGet(this, null, null, this.props.orgSelectorTree.mode)\n }\n }\n \n arrayDiff = (arr1:any, arr2:any) => {\n let arr = [], \n diff = [];\n \n for (var i = 0; i < arr1.length; i++) {\n arr[arr1[i]] = true;\n }\n \n for (i = 0; i < arr2.length; i++) {\n if (arr[arr2[i]]) {\n delete arr[arr2[i]];\n } else {\n arr[arr2[i]] = true;\n }\n }\n \n for (var k in arr) {\n diff.push(k);\n }\n \n return diff;\n }\n\n statsGetSuccess = () => { \n };\n\n statsGetFailure = () => { \n } \n\n supportModeSetSuccess = () => {\n reloadPage();\n }\n\n onSelect = (selectedKeys:any[], info:any) => {\n this.props.orgSelectorTreeSelection(this, selectedKeys[0]);\n };\n\n onExpand = (expandedKeys:any) => {\n this.props.orgSelectorTreeExpand(this, expandedKeys);\n };\n\n onCheckChange = (checkedKeys:any, info:any) => {\n let diff:string[] = this.arrayDiff(checkedKeys.checked, this.props.orgSelectorTree.treeDataChecked),\n orgId:string = diff.length > 0 ? diff[0] : \"\",\n checked:boolean = checkedKeys.checked.length > this.props.orgSelectorTree.treeDataChecked.length ? true : false;\n\n if (orgId !== \"\" ) {\n this.props.orgSelectorTreeMaint(this, this.onCheckChangeSuccess, this.onCheckChangeFailure, orgId, checked, checkedKeys.checked);\n }\n else {\n message.error(\"Unable to record user's selection\");\n }\n };\n \n onCheckChangeSuccess = (data:any, orgId:string, checkedKeys:any) => { \n this.props.orgSelectorTreeCheck(this, checkedKeys);\n };\n\n onCheckChangeFailure = () => { \n } \n\n getParentKey = (orgId:string, tree:any):string => {\n let parentOrgId;\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (node.children) {\n if (node.children.some((item: any) => item.orgId === orgId)) {\n parentOrgId = node.orgId;\n } \n else if (this.getParentKey(orgId, node.children)) {\n parentOrgId = this.getParentKey(orgId, node.children);\n }\n }\n }\n return parentOrgId;\n };\n\n onSearchChange = (e: any) => {\n\n let value = e.target.value;\n const loadingIndicator = (this.props.orgSelectorTree.treeDataFlat.length || 0 ) > 50;\n const me = this;\n\n this.setState({ searchValue: value });\n\n if (loadingIndicator) {\n loadingIndicatorStart();\n }\n\n let expandedKeys = \n this.props.orgSelectorTree.treeDataFlat\n .map((record:any) => {\n if (record.name.toLowerCase().indexOf(value.toLowerCase()) > -1) {\n return this.getParentKey(record.orgId, this.props.orgSelectorTree.treeData);\n }\n return null;\n })\n .filter((item:any, i:number, self:any) => \n item && self.indexOf(item) === i\n );\n \n setTimeout(function() {\n me.props.orgSelectorTreeExpand(me, expandedKeys);\n\n if (loadingIndicator) {\n loadingIndicatorEnd();\n }\n }, 100); \n }\n\n viewChange = (e:any) => {\n this.props.orgSelectorSetView(this, e.target.value);\n };\n\n getExpandedKeys = (treeDataFlat: any, treeDataChecked: any) => { \n const selection = treeDataChecked.reduce((acc: any, elem: any) => {\n const orgFound = treeDataFlat.find((t: any) => t.orgId === elem);\n if(orgFound) {\n const pathId = orgFound.pathId;\n let pathArray = pathId.split('~');\n if(pathArray.length > 1) {\n const pathArrayNew = pathArray.pop();\n }\n if(pathArray.length > 1) {\n acc = [...acc, ...pathArray];\n return acc;\n }\n return acc; \n }\n return acc;\n },[]);\n \n return selection.filter((elem: any, index: any) => selection.indexOf(elem) === index);\n }\n\n render() {\n let defaultSelection=[];\n const { treeData, treeDataChecked , treeDataExpanded, treeDataFlat, isExpanded } = this.props.orgSelectorTree;\n //after removing Autoexpandparent property from tree, the selected nodes were not expaning, so need to\n //provide the expanded keys manually.\n if(!isExpanded) {\n defaultSelection = this.getExpandedKeys(treeDataFlat, treeDataChecked);\n } else {\n defaultSelection = treeDataExpanded;\n }\n \n const getTreeData = (data: any) =>\n data.map((item: any) => {\n const index = item.name.toLowerCase().indexOf(this.state.searchValue.toLowerCase());\n const beforeStr = index > - 1 ? item.name.substr(0, index) : \"\";\n const afterStr = index > - 1 ? item.name.substr(index + this.state.searchValue.length) : \"\";\n const string = index > - 1 ? item.name.substr(index, this.state.searchValue.length) : \"\";\n const title =\n index > -1 ? (\n <span>\n {beforeStr}\n <span className=\"tree-search-value\">{string}</span>\n {afterStr}\n </span>\n ) : \n (\n <span>{item.name}</span>\n );\n\n if (item.children) {\n return { title, key: item.orgId, children: getTreeData(item.children) };\n }\n\n return {\n title,\n key: item.orgId,\n };\n });\n\n return (\n \n <div data-id=\"org-selector-tree\"> \n <Row gutter={8}>\n <Col xs={24} md={20}>\n <Search\n data-id=\"org-selector-tree-search-field\"\n key=\"tree-search-field\"\n placeholder=\"Search by typing org name\"\n size=\"middle\"\n allowClear\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.state.searchValue}\n /> \n </Col>\n <Col xs={24} md={4}>\n <Radio.Group key=\"tree-view-switch\" onChange={this.viewChange} value={this.props.orgSelector.currentView}>\n <Radio.Button \n data-id=\"org-selector-tree-list-view-button\"\n value=\"list-view\"\n >\n <Tooltip title=\"List View\"><UnorderedListOutlined /></Tooltip>\n </Radio.Button>\n <Radio.Button \n data-id=\"org-selector-tree-tree-view-button\"\n value=\"tree-view\"\n >\n <Tooltip title=\"Tree View\"><ApartmentOutlined /></Tooltip>\n </Radio.Button>\n </Radio.Group>\n </Col>\n </Row>\n \n <DirectoryTree\n data-id=\"org-selector-tree-data\"\n className=\"mt-25\"\n checkable\n showIcon={false}\n onExpand={this.onExpand}\n onCheck={this.onCheckChange}\n onSelect={this.onSelect}\n checkStrictly={true} \n checkedKeys={treeDataChecked}\n expandedKeys={defaultSelection} \n treeData={getTreeData(treeData)} \n \n />\n \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n orgSelector: state.orgSelectorReducers.orgSelectorState.orgSelector,\n orgSelectorTree: state.orgSelectorReducers.orgSelectorState.orgSelector.tree\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n ...actions,\n ...rootActions\n }\n)(OrgSelectorTree);\n","import React from \"react\";\nimport { Drawer, Button, message, Space } from \"antd\";\nimport { SwapOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as rootActions from \"../../actions\";\nimport * as geofenceActions from \"../../pages/GeoFences/actions\";\nimport * as orgSelectorActions from \"./actions\";\nimport history from '../../utils/history';\n\nimport { reloadPage, refreshPage, getPermissions } from \"../../utils/commonHelpers\";\n\nimport OrgSelectorHeader from \"./OrgSelectorHeader\";\nimport OrgSelectorList from \"./OrgSelectorList\";\nimport OrgSelectorTree from \"./OrgSelectorTree\";\n\nimport \"./orgSelector.css\";\n//import { getPermissions } from \"../../actions/permissions\";\n\ninterface Prop {\n orgSelectorClose: Function, \n supportModeSet: Function,\n orgSelectorUserOrgSelectionGet: Function,\n setFenceListLoaded: Function,\n fleetStatsInitialization: Function,\n fleetStatsVisibility: Function,\n fleetStatsLoading: Function,\n getQuickStats: Function,\n context: any,\n orgSelector: any\n orgSelectorTree: any,\n permissions: any,\n supportMode: any\n}\n\nclass OrgSelector extends React.Component<Prop, {}> { \n \n onDrawerClose = () => { \n this.props.orgSelectorClose(this); \n \n if (this.props.orgSelector.updated) {\n this.props.setFenceListLoaded(false);\n this.props.fleetStatsInitialization(false);\n this.props.fleetStatsVisibility(false);\n this.props.fleetStatsLoading(true);\n this.props.getQuickStats(this, null, null);\n refreshPage(history); \n } \n }; \n \n findOrgNameById = (data:any, orgId:string) => {\n for (var i = 0; i < data.length; i++) {\n if (data[i].orgId === orgId) {\n return data[i].name;\n } \n else if (data[i].children) {\n this.findOrgNameById(data[i].children, orgId);\n }\n }\n }\n\n supportModeSet = (e:any) => {\n let me = this,\n orgName = this.findOrgNameById(this.props.orgSelectorTree.treeData, this.props.orgSelectorTree.selectedOrgId);\n\n setTimeout(function() {\n if (me.props.orgSelectorTree.selectedOrgId) {\n me.props.supportModeSet(me, me.supportModeSetSuccess, me.props.orgSelectorTree.selectedOrgId, orgName);\n }\n else {\n message.error(\"Unable to locate user's selection\");\n }\n }, 100); \n }\n\n supportModeSetSuccess = () => {\n setTimeout(function () {\n window.location.href = \"/map\"; \n }, 500); \n \n //reloadPage();\n }\n\n render() { \n const { orgSelector } = this.props;\n const result = getPermissions(this.props.permissions.permissions.org_options);\n const supportmode = getPermissions(this.props.permissions.permissions.support_mode);\n const suborgs = getPermissions(this.props.permissions.permissions.sub_orgs);\n let iscreate = result[0];\n let isread = result[1];\n let isupdate = result[2];\n let isdelete = result[3];\n\n let issupportmode = supportmode[1];\n let issuborgsread = suborgs[1];\n\n return (\n <Drawer\n data-id=\"org-selector-drawer\" \n title={orgSelector.title}\n width={orgSelector.width}\n visible={orgSelector.visible}\n onClose={this.onDrawerClose}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button \n data-id=\"org-selector-close-button\" \n onClick={this.onDrawerClose} \n type=\"default\"\n >\n Close\n </Button>\n {\n this.props.orgSelector.currentView === \"tree-view\" &&\n this.props.orgSelector.tree.selectedOrgId && issupportmode && \n <Button \n icon={<SwapOutlined />} \n onClick={(e) => {this.supportModeSet(e)}}\n type=\"primary\"\n >\n Support\n </Button>\n }\n </Space>\n }\n >\n {\n (issuborgsread) &&\n <OrgSelectorHeader /> \n } \n {\n orgSelector.currentView === \"list-view\" && isread &&\n <div className={orgSelector.currentView === \"list-view\" ? \"visible\" : \"not-visible\"}>\n <OrgSelectorList issupportmode={issupportmode} isupdate={isupdate} iscreate={iscreate}/>\n </div> \n }\n {\n orgSelector.currentView === \"tree-view\" && isread &&\n <div className={orgSelector.currentView === \"tree-view\" ? \"visible\" : \"not-visible\"}>\n <OrgSelectorTree issupportmode={issupportmode} isupdate={isupdate} iscreate={iscreate}/>\n </div> \n }\n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n orgSelector: state.orgSelectorReducers.orgSelectorState.orgSelector, \n orgSelectorTree: state.orgSelectorReducers.orgSelectorState.orgSelector.tree,\n permissions: state.contextReducer.data,\n supportMode: state.supportModeReducer\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n ...orgSelectorActions,\n ...geofenceActions\n }\n)(OrgSelector);","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function usersSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function usersSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function userMaintRefreshInstance(\n me: any,\n instances: number[] \n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_MAINT_REFRESH_INSTANCE\", instances: instances });\n }\n} \n\nexport function getUser(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string\n) {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/users/id/\" + userId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) { \n callbackFnSuccess(response.data.data.user);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getUsers(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number = 1,\n searchText?: string,\n administered: boolean = false,\n sorterAndFilter?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/users/okta\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n administered: administered,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n sortColumn: sorterAndFilter ? sorterAndFilter.sortColumn : '',\n sortDirection: sorterAndFilter ? sorterAndFilter.sortDirection : ''\n }\n }\n )\n .then(response => { \n let data = response.data.data.users == null || (response.data.data.users.length || 0) === 0 ? [] : response.data.data.users;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"USERS_GET_USERS_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function administeredOrgsGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n orgId?: string,\n searchText?: string\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs-lov\", {\n responseType: \"json\", \n headers: {},\n params: {\n mode: (orgId || \"\") === \"\" ? \"administered\" : \"single\",\n scope: \"all\",\n includeTree: false,\n orgId: orgId,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({ type: \"USERS_ADMINISTERED_ORGS_SUCCESS\", payload: {data: response.data.data.orgs} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n} \n\nexport function userStatus(\n me: any, \n callbackSuccessFn: any,\n callbackFailureFn: any,\n userId: string,\n status: string = \"activate\"\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/users/\" + userId + \"/\" + status,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackSuccessFn != null) {\n callbackSuccessFn(response.data.data.users, userId); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFailureFn != null) {\n callbackFailureFn(error);\n }\n }\n ); \n };\n}\n\nexport function usersListRefreshOnUpdate(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_LIST_REFRESH_ON_UPDATE\" });\n };\n}\n\nexport function userMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any,\n pageName: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_USER_MAINT_OPEN\", payload: {title: title, width: width, record: record, pageName: pageName} });\n };\n}\n\nexport function userMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"USERS_USER_MAINT_CLOSE\" });\n };\n}\n\nexport function userMaintTabChange(\n me: any,\n tab: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_USER_MAINT_TAB_CHANGE\", tab: tab });\n };\n}\n\nexport function userMaintTabsEnable(\n me: any,\n tab: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_USER_MAINT_TABS_ENABLE\" });\n };\n}\n\nexport function roleMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any\n) {\n \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n\nexport function roleMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_MAINT_CLOSE\" });\n };\n}\n\nexport function getOrgRoles(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string\n) {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/org-roles/\" + orgId , {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data; \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n var roles = [];\n for(let i=0; i< data.data.orgRoles.length;i++)\n {\n if(data.data.orgRoles[i].roleName.toLowerCase() !== \"admin\")\n { \n let roleItem = {\n roleId: data.data.orgRoles[i].roleId,\n roleName: data.data.orgRoles[i].roleName,\n };\n roles.push(roleItem);\n dispatch({ type: \"USERS_ORG_ROLE_GET_SUCCESS\", payload: {data: data} });\n }\n dispatch({ type: \"USERS_ORG_ROLE_GET_SUCCESS\", payload: {data: data} });\n }\n \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function getRolePermissions(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n roleId: string\n) {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/role-permissions/role/\" + roleId , {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data; \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.org);\n }\n dispatch({ type: \"ROLE_PERMISSION_GET_SUCCESS\", payload: {data: data} });\n // dispatch({ type: \"ROLE_MAINT_OPEN\", payload: {data: data} });\n }\n ) \n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n } \n}\n\nexport function setOktaLastLogin(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n oktaUserId: string \n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/users/okta/setoktalastlogin\" + \n \"?oktaUserId=\" + oktaUserId,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function getOrgUserRoles(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n orgId: string,\n userRole: string,\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/org-role-permissions/\" + orgId , {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText\n }\n }\n )\n .then(response => { \n \n let data = response.data;\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n let userRoleData = data.data.orgRolePermissions.filter((dat: { roleName: string; }) => dat.roleName === userRole); \n let ispermission = false;\n var roles = [];\n // let res = data.data.orgRolePermissions.permissions.filter((item:{permissionId: number, permissionLevel: number;}) => userRoleData.permissions.filters((item2:{permissionId: number, permissionLevel: number;}) => item.permissionId === item2.permissionId && item.permissionLevel >= item2.permissionLevel));\n\n \n for(let i=0; i< data.data.orgRolePermissions.length;i++){\n ispermission = false;\n for(let j=0; j<data.data.orgRolePermissions[i].permissions.length; j++){\n let otherRolePermission = Number(data.data.orgRolePermissions[i].permissions[j].permissionLevel).toString(2);\n if(otherRolePermission.length <=2){\n otherRolePermission = '00' + otherRolePermission;\n otherRolePermission = otherRolePermission.split('').reverse().join('');\n }\n else if(otherRolePermission.length <=3){\n otherRolePermission = '0' + otherRolePermission;\n otherRolePermission = otherRolePermission.split('').reverse().join('');\n }\n else{\n otherRolePermission = otherRolePermission.split('').reverse().join('');\n }\n for(let k=0; k<userRoleData[0].permissions.length; k++){\n let userRolePermission = Number(userRoleData[0].permissions[k].permissionLevel).toString(2);\n if(userRolePermission.length <=2){\n userRolePermission = '00' + userRolePermission;\n userRolePermission = userRolePermission.split('').reverse().join('');\n }\n else if(userRolePermission.length <=3){\n userRolePermission = '0' + userRolePermission;\n userRolePermission = userRolePermission.split('').reverse().join('');\n }\n else{\n userRolePermission = userRolePermission.split('').reverse().join('');\n }\n if(userRoleData[0].permissions[k].permissionId === data.data.orgRolePermissions[i].permissions[j].permissionId){\n // if(data.data.orgRolePermissions[i].permissions[j].permissionLevel > userRoleData[0].permissions[k].permissionLevel){\n // ispermission = true;\n // }\n\n if(otherRolePermission[1] > userRolePermission[1]){\n ispermission = true;\n }\n else if(userRolePermission[1] === otherRolePermission[1] && ( otherRolePermission[0] > userRolePermission[0] || otherRolePermission[2] > userRolePermission[2] || otherRolePermission[3] > userRolePermission[3])){\n ispermission = true;\n }\n else if( otherRolePermission[0] > userRolePermission[0] && otherRolePermission[1] > userRolePermission[1]){\n ispermission = true;\n }\n }\n }\n }\n if(!ispermission && userRole.toLowerCase() !== \"admin\" && data.data.orgRolePermissions[i].roleName.toLowerCase() !== \"admin\")\n { \n let roleItem = {\n roleId: data.data.orgRolePermissions[i].roleId,\n roleName: data.data.orgRolePermissions[i].roleName,\n };\n roles.push(roleItem);\n }\n else if(!ispermission && userRole.toLowerCase() === \"admin\"){\n let roleItem = {\n roleId: data.data.orgRolePermissions[i].roleId,\n roleName: data.data.orgRolePermissions[i].roleName,\n };\n roles.push(roleItem);\n }\n }\n dispatch({ type: \"USERS_ORG_USER_ROLE_GET_SUCCESS\", payload: {data: roles} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n} ","import { appConfigs } from \"../configurations\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\nimport Axios from \"axios\";\n\nexport async function getEmailTemplate( \n emailCategory: string, \n orgId:string,\n emailAddress: string\n) \n{\n\n let url = appConfigs.server.URL + \"/ui/api/genericEmail?orgId=\"+orgId+\"&emailCategory=\"+emailCategory+\"&emailAccount=\"+emailAddress;\n \n \n return await Axios.get(url)\n .then(function (response) { \n return response.data;})\n .catch(function (error) {\n errorResponse(error, false);\n }); \n \n}\n\nexport async function sendEmail( \n \n orgId: string, \n\tuserEmailId: string, \n\temailCategory: string, \n\temailSubject: string, \n emailBody: string \n) \n{\n var url = appConfigs.server.URL + \"/ui/api/genericEmail\";\n \n return await Axios.post(\n url,\n {\n orgId: orgId, \n userEmailId: userEmailId, \n emailCategory: emailCategory, \n emailSubject: emailSubject, \n emailBody: emailBody\n },\n {\n responseType: \"json\", \n headers: {} \n }\n ).then(response => { \n return response.data; \n }\n ).catch(function (error) {\n errorResponse(error, false);\n });\n \n}\n\nexport async function getTemporaryPassword( \n \n emailAddress: string\n) \n{\n \n //https://msgiot-dev.parkerhannifin.com/ui/api/parker/okta/expiredusers/email/sateesh.mram@gmail.com\n let url = appConfigs.server.URL + \"/ui/api/parker/okta/expiredusers/email/\"+emailAddress;\n \n \n return await Axios.get(url)\n .then(function (response) { \n \n return response.data;})\n .catch(function (error) {\n errorResponse(error, false);\n }); \n \n}\n\n","import Axios from \"axios\";\nimport { notification } from 'antd';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { getEmailTemplate,sendEmail,getTemporaryPassword } from \"../../../utils/emailNotification/apiEmailnotification\";\n\n\nexport function userAvatarMaint(\n me: any, \n callbackFileSuccess: any,\n callbackFileFailure: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n action: string,\n formData: any,\n file: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n action,\n formData,\n {\n responseType: \"json\", \n headers: {\n \"content-type\": \"multipart/form-data\" \n }\n }\n )\n .then(response => { \n callbackFileSuccess(response.data, file);\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.avatar.uploadId, response.data.data.avatar.url);\n }\n }\n ) \n .catch(function (error) {\n errorResponse(me, error, false);\n callbackFileFailure(error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n };\n} \n\nexport function usersCopySearchUsers(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string,\n searchText: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/users/okta\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n administered: true,\n page: 1,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.users === null ? [] : response.data.data.users;\n data.filter((user:any) => {\n return user.userId !== userId;\n })\n .map((user:any) => ({\n text: user.fullName,\n textExtra: user.orgHomeName,\n value: user.userId\n }));\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"USERS_GET_USERS_COPY_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function usersCopyMaint(\n me: any, \n callbackSuccessFn: any,\n callbackErrorFn: any,\n copyFromUserId: string,\n copyToUserId: string,\n copyOrganizations: boolean,\n copySubscriptions: boolean\n) { \n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/users/settings/maint\",\n {\n copyFromUserId: copyFromUserId,\n copyToUserId: copyToUserId,\n copyOrganizations: copyOrganizations,\n copySubscriptions: copySubscriptions\n },\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackSuccessFn != null) {\n callbackSuccessFn(response.data.data.user);\n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn();\n }\n }\n );\n \n };\n}\n\nexport function getCountries(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/countries\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.countries);\n }\n dispatch({ type: \"USERS_COUNTRIES_SUCCESS\", payload: {data: response.data.data.countries} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n}\n\nexport function userMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n \n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/users/okta\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(record, response.data.data.users);\n var url = appConfigs.okta.oidc.issuer;\n\n \n if(record.userId === undefined)\n sendUserCreationNotification(response.data.data.users);\n \n }\n dispatch({ type: \"USERS_MAINT_SUCCESS\", payload: {data: response.data.data.users} });\n }\n )\n .catch(function (error) {\n const errorStatus:number = !error.response ? 999 : (error.response.status || 999);\n let propagateError:boolean = true;\n\n if (errorStatus === 400) { \n if (error.response.data != null && error.response.data.errors != null && (error.response.data.errors.length || 0) !== 0) {\n error.response.data.errors.forEach(function(record:any) {\n if (record.message.toLowerCase().indexOf(\"parker okta\") !== -1 && record.message.toLowerCase().indexOf(\"not okta users\") !== -1) {\n propagateError = false;\n notification.error({\n duration: 0,\n message: \"User Registration Issue\",\n description: \"Parker user not registered in Okta. Have user to register at \" + appConfigs.okta.parkerUserRegstrationUrl + \" Only after that request completed you will be able to maintain user information here.\"\n });\n }\n });\n }\n }\n if (propagateError && callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport async function sendUserCreationNotification( \n responseObject: any \n) { \n \n var emailAddress = responseObject.email;\n var firstName = responseObject.firstName; \n var lastName = responseObject.lastName;\n var orgId = responseObject.orgIdHome; \n\n var emailTemplate = await getEmailTemplate(\n (responseObject.oktaTempPassword == null && emailAddress.trim().indexOf('@parker.com') == -1)\n ? 'account_recreation'\n : 'account_creation'\n , orgId, emailAddress);\n \n if(emailTemplate !=undefined)\n {\n \n var emailTemplateBody = emailTemplate.data.emailTemplate.emailTemplate;\n var orgLogo = emailTemplate.data.emailTemplate.orgLogo;\n var orgNameAndLoginUrl = emailTemplate.data.emailTemplate.orgName;\n var orgId = emailTemplate.data.emailTemplate.orgId;\n var tempPassword = responseObject.oktaTempPassword != null ? responseObject.oktaTempPassword : \"Please contact administrator for temporary password\"; \n var subject = emailTemplate.data.emailTemplate.emailSubject;\n var userName = firstName +' '+ lastName\n\n //commented out for fixing ops-1899\n //if(responseObject.oktaTempPassword == null)\n //{\n // var tempPwd = await getTemporaryPassword(emailAddress);\n // tempPassword = tempPwd.data.user.tempPassword;\n //}\n \n const organdurl = orgNameAndLoginUrl.split('-');\n\n var url = window.config?.CDN_URL+ '/login/'+ organdurl[1]; \n\n if(emailAddress.trim().indexOf('@parker.com') !== -1 ) //true\n tempPassword = appConfigs.emailNotifyLogicApps.parker_AD_Password;\n\n var replacedBody = emailTemplateBody.replace(\"<logo>\", orgLogo);\n replacedBody = replacedBody.replace(\"temporaryPassword\", tempPassword)\n .replace(\"url\", url)\n .replace(\"emailAddress\", emailAddress)\n .replace(\"userName\", userName); \n \n \n var emailSent = await sendEmail(orgId,\n emailAddress,\n (responseObject.oktaTempPassword == null && emailAddress.trim().indexOf('@parker.com') == -1)\n ? 'account_recreation'\n : 'account_creation',\n subject,\n replacedBody);\n if(emailTemplate == undefined )\n {\n errorResponse(emailAddress, false);\n }\n }\n else\n {\n errorResponse(emailAddress, false);\n }\n}\n\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function userSubscriptionsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_SUBSCRIPTIONS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function userSubscriptionsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_SUBSCRIPTIONS_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function userSubscriptionsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string,\n searchText: string,\n page: number = 1\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/users/\" + ((userId || \"\") !== \"\" ? userId + \"/\": \"\") + \"subscriptions\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({ type: \"USERS_SUBSCRIPTIONS_GET_SUCCESS\", payload: {data: response.data.data.userSubscriptions, page: page} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n \n };\n} \n\nexport function userSubscriptionsMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string,\n record: any,\n notification: string,\n action: string,\n scope: string\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/users/\" + userId + \"/subscriptions\" + \n \"?gatewayId=\" + record.gatewayId + \n \"&signalId=\" + record.signalId + \n \"¬ification=\" + notification + \n \"&action=\" + action +\n \"&scope=\" + scope,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(userId, record, notification, action, scope); \n }\n dispatch({ type: \"USERS_SUBSCRIPTIONS_MAINT_SUCCESS\", payload: {record: record, notification: notification, action: action, scope: scope} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error, userId, record, notification, action, scope);\n }\n }\n );\n }\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function userOrgsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERS_ORGS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function userOrgsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string,\n role: string,\n page: number = 1\n) {\n return async (dispatch: any) => { \n //ops-2680: added request paramerter \"role\", because a non-admin user should not see \"admin\" role in the \"role\" dropdown in \"organization\" tab. \n Axios.get( \n appConfigs.server.URL + \"/ui/api/orgs/user/\" + userId, \n {\n responseType: \"json\", \n headers: {},\n params: {\n allData: true,\n role: role,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgUsers);\n }\n dispatch({ type: \"USERS_ORGS_GET_SUCCESS\", payload: {data: response.data.data.orgUsers, page: page} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }); \n };\n} \n\nexport function userOrgsRole(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgUserId: string,\n role: string,\n page: number = 1\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/orgs/user/\" + orgUserId + \"/\" + role,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n let orgUsers = response.data.data.orgUsers == null || (response.data.data.orgUsers.length || 0) === 0 ? [] : response.data.data.orgUsers;\n\n if (callbackFnSuccess != null) {\n callbackFnSuccess(orgUsers, orgUserId, role); \n }\n if (orgUsers.length > 0) {\n dispatch({ type: \"USERS_ORGS_ROLE_UPDATE_SUCCESS\", data: orgUsers});\n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function userOrgsRemove(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgUserId: string\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/orgs/user/\" + orgUserId,\n {}\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(orgUserId); \n }\n dispatch({ type: \"USERS_ORGS_REMOVE_SUCCESS\", payload: {orgUserId: orgUserId} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function userOrgsMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgs: any,\n users: any,\n role:string,\n applyAll:boolean,\n page: number\n) {\n return async (dispatch: any) => { \n Axios.post(\n appConfigs.server.URL + \"/ui/api/orgs/user\",\n {\n orgs: orgs,\n users: users,\n role: role,\n applyAll: applyAll\n },\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgUsers);\n }\n dispatch({ type: \"USERS_ORGS_GET_SUCCESS\", payload: {data: response.data.data.orgUsers, page: page} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n }\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function roleMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/customer-org-permissions\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.org);\n }\n dispatch({ type: \"ROLE_PERMISSION_MAINT_SUCCESS\", payload: {data: \"\"} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function activitySubscriptionsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string,\n ) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/users/\" + ((userId || \"\") !== \"\" ? userId + \"/\": \"\") + \"activitysubscription\", {\n responseType: \"json\", \n headers: {},\n params: {} \n }\n )\n .then(response => {\n let activitySubscriptions=response.data.data.activitySubscriptions;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(activitySubscriptions);\n }\n dispatch({ type: \"USER_ACTIVITY_SUBSCRIPTIONS_GET\", payload: {data: activitySubscriptions} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n \n };\n} \n\nexport function activitySubscriptionsMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string,\n record: any,\n notification: string,\n action: string,\n scope: string\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/users/\" + userId + \"/activitysubscription\" + \n \"?notification=\" + notification + \n \"&action=\" + action +\n \"&scope=\" + scope,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(userId, record, notification, action, scope); \n }\n dispatch({ type: \"USERS_ACTIVITY_SUBSCRIPTIONS_MAINT_SUCCESS\", payload: {record: record, notification: notification, action: action, scope: scope} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error, userId, record, notification, action, scope);\n }\n }\n );\n }\n}","import React from \"react\";\nimport { Form, Select, Card, Input } from 'antd';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { initCap, getPermissions } from \"../../../utils/commonHelpers\";\n\nconst { Option } = Select;\n\ninterface Prop {\n administeredOrgsGet: Function,\n getOrgRoles:Function,\n getOrgUserRoles:Function,\n roleList: any,\n usersList: any,\n context: any,\n formRef: any,\n permissions: any,\n iscreate: boolean,\n isupdate: boolean,\n isread: boolean\n}\ninterface State {\n orgId: string,\n roleName: string\n}\n\nclass UserHomeOrg extends React.Component<Prop, {}> {\n [x: string]: any;\n\n state: State = {\n orgId: \"\",\n roleName: \"\"\n };\n \n componentDidMount() {\n if((this.props.context.user.contextUserIsAdmin || false) === true){\n this.props.getOrgRoles(this,null,null,this.props.context.appContext.orgId);\n }\n\n this.setState({roleName: this.props.usersList.userMaint.record.orgHomeRole});\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.usersList.userMaint.instance !== prevProps.usersList.userMaint.instance) {\n this.setState({roleName: \"\"});\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n const me = this;\n setTimeout(function () {\n me.componentUpdateDo(me.props.formRef!.getFieldValue(\"orgIdHome\"));\n me.componentUpdateDo(me.props.formRef!.getFieldValue(\"orgHomeRole\"));\n }, 150); \n }\n\n componentUpdateDo(orgIdHome: string) {\n \n if ((this.props.usersList.userMaint.administeredOrgs.length || 0) === 0) { \n this.props.administeredOrgsGet(this, null, null, null, null);\n }\n\n if((this.props.roleList.roleMaint.orgRoles || 0) === 0 && (this.props.context.user.contextUserIsAdmin || false) === true){\n const { appContext } = this.props.context;\n this.props.getOrgRoles(this,null,null,appContext.orgId);\n }\n\n if((!this.props.context.user.contextUserIsAdmin) && this.props.usersList.userMaint.pageName !== \"MyProfile\"){\n this.props.getOrgUserRoles(null, null, null, this.props.context.appContext.orgId, this.props.context.appContext.roleName, null);\n }\n \n }\n\n onOrgIdChange = (value: string) => { \n this.setState({ orgId: value }); \n if(this.props.context.user.contextUserIsAdmin === true){\n this.props.getOrgRoles(this,null,null,value);\n }\n else{\n this.props.getOrgUserRoles(null, null, null, value, this.props.context.appContext.roleName, null);\n }\n \n //this.props.formRef.setFieldsValue({orgHomeRole: \"\"});\n this.props.formRef.setFieldsValue({orgHomeRole: this.props.context.appContext.roleName});\n }\n \n render() {\n \n const { user:contextUser, appContext } = this.props.context; \n const { administeredOrgs } = this.props.usersList.userMaint;\n const { record } = this.props.usersList.userMaint;\n const { roles } = this.props.roleList.roleMaint.orgRoles.data;\n \n const isRoleAdmin = record.role === \"admin\"; \n const isSameUser=(record.userId===appContext.userId)\n const isEnabled = isRoleAdmin || contextUser.contextUserIsAdmin ||!isSameUser;\n return (\n <Card \n data-id=\"users-maint-info-home-org\"\n size=\"small\" \n title=\"Home Organization\" \n >\n {\n //ops-2784, ops-2823\n // ( record.objectAdmin || (contextUser.contextUserIsAdmin && (record.userId || \"\") === \"\")) &&\n \n (\n (administeredOrgs.length || 0) !== 0 && (this.props.usersList.userMaint.pageName !== \"MyProfile\")\n ) &&\n <Form.Item\n name=\"orgIdHome\"\n label=\"Name\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n\n > \n <Select \n data-id=\"users-maint-info-home-org-id\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n onChange={this.onOrgIdChange} \n >\n {administeredOrgs !== null && administeredOrgs.map((record:any, index:number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n }\n {\n //ops-2784 ; ops-2823 \n (\n (administeredOrgs.length || 0) !== 0 && (this.props.usersList.userMaint.pageName === \"MyProfile\") && contextUser.contextUserIsAdmin\n ) &&\n <Form.Item\n name=\"orgIdHome\"\n label=\"Name\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n\n > \n <Select \n data-id=\"users-maint-info-home-org-id\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n onChange={this.onOrgIdChange} \n >\n {administeredOrgs !== null && administeredOrgs.map((record:any, index:number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n }\n {\n //ops-2784; ops-2823\n // !( record.objectAdmin || (contextUser.contextUserIsAdmin && (record.userId || \"\") === \"\")) &&\n\n (\n (record.length || 0) !== 0 && (administeredOrgs.length || 0) === 0\n ||((this.props.usersList.userMaint.pageName === \"MyProfile\") && !contextUser.contextUserIsAdmin)\n ) &&\n <>\n <Form.Item \n name=\"orgIdHome\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item\n label=\"Name\"\n >\n <span>{record.orgHomeName}</span>\n </Form.Item>\n </>\n }\n\n {/* ops-2784; ops-2823 */}\n {\n ( (record.length || 0) === 0 && (administeredOrgs.length || 0) === 0 && (this.props.usersList.userMaint.pageName !== \"MyProfile\")\n ) &&\n\n <>\n <Form.Item \n name=\"orgIdHome\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item\n label=\"Name\"\n >\n <span>{contextUser.homeOrg.name}</span>\n </Form.Item>\n </>\n }\n {\n // ops-2784; ops-2823\n // ( record.objectAdmin || (contextUser.contextUserIsAdmin && (record.userId || \"\") === \"\")) &&\n // (contextUser.contextUserIsAdmin && (record.userId || \"\") === \"\")?\n (this.props.usersList.userMaint.pageName !== \"MyProfile\" && (roles.length || 0) !== 0) &&\n <Form.Item\n name=\"orgHomeRole\"\n label=\"eRole\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n data-id=\"users-maint-info-home-org-role\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n disabled={!isEnabled}\n\n >\n {/* Map through the roles and filter out the 'admin' role if the user is not an admin */}\n {roles !== null &&\n roles\n .filter((role: any) =>\n // Only show the 'admin' role if the user is an admin\n contextUser.contextUserIsAdmin || role.roleName !== 'admin'\n )\n .map((rolerecord: any, index: number) => (\n <Option key={rolerecord.roleName} value={rolerecord.roleName}>\n {rolerecord.roleName}\n </Option>\n ))\n }\n </Select>\n </Form.Item>\n\n }\n {/* ops-2823 */}\n {\n (contextUser.contextUserIsAdmin && this.props.usersList.userMaint.pageName === \"MyProfile\" && (roles.length || 0 ) !== 0) &&\n <Form.Item\n name=\"orgHomeRole\"\n label=\"Role\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select \n data-id=\"users-maint-info-home-org-role\"\n showSearch\n showArrow={true}\n allowClear \n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n >\n {roles !== null && roles.map((rolerecord:any, index:number) => (\n <Option key={rolerecord.roleName} value={rolerecord.roleName}>\n {rolerecord.roleName}\n </Option>\n ))}\n </Select>\n </Form.Item>\n }\n \n {/* ops-2784; ops-2823 */}\n {\n // !( record.objectAdmin || (contextUser.contextUserIsAdmin && (record.userId || \"\") === \"\")) &&\n\n ((!contextUser.contextUserIsAdmin && this.props.usersList.userMaint.pageName === \"MyProfile\") ) &&\n <>\n <Form.Item \n name=\"orgHomeRole\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item\n label=\"Role\"\n >\n <span> {record.orgHomeRole}</span> \n </Form.Item>\n </>\n }\n {/* ops-2784; ops-2823 */}\n { \n ((roles.length || 0) === 0) &&\n <>\n <Form.Item \n name=\"orgHomeRole\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item\n label=\"Role\"\n >\n <span>{appContext.roleName}</span>\n </Form.Item>\n </>\n }\n\n </Card>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n usersList: state.usersReducers.usersState.usersList,\n roleList: state.usersReducers.usersState.roleList,\n permissions: state.contextReducer.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(UserHomeOrg);","import React from \"react\";\nimport { Form, Input, Switch, Tooltip, Typography } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { setHeaderUserName } from \"../../../utils/commonHelpers\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\n\nimport UserHomeOrg from \"./UserHomeOrg\";\n//import UserAvatar from \"./UserAvatar\";\n//import UserPhone from \"./UserPhone\";\n//import UserCopy from \"./UserCopy\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport \"./userMaintInfo.css\";\n\nconst { Paragraph } = Typography;\n\ninterface Prop {\n userMaint: Function,\n usersListRefreshOnUpdate: Function,\n userMaintTabsEnable: Function,\n userMaintRefreshInstance: Function,\n getOrgRoles: Function,\n context: any,\n usersList: any,\n roleList: any,\n iscreate: boolean,\n isupdate: boolean,\n isread: boolean\n}\n\nclass UserMaintInfo extends React.Component<Prop, FormState> { \n \n state: FormState = {};\n\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n this.props.getOrgRoles(this,null,null,this.props.usersList.userMaint.record.orgIdHome); \n this.componentUpdate(this.props.usersList.userMaint.record);\n }\n\n componentDidUpdate(prevProps: Prop, prevState: FormState) { \n if (this.props.usersList.userMaint.instance !== prevProps.usersList.userMaint.instance) {\n this.componentUpdate(this.props.usersList.userMaint.record);\n }\n }\n\n componentUpdate(record:any) {\n formInit(this);\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n\n this.formRef.current!.setFieldsValue({ \n userId: record.userId,\n firstName: record.firstName,\n lastName: record.lastName,\n email: record.email,\n phoneNumber: record.phoneNumber,\n phoneNumberIsoCode2: record.phoneNumberIsoCode2 || ((record.userId || \"\") === \"\" ? \"US\" : \"\"), \n orgIdHome: (record.orgIdHome || \"\") === \"\" ? this.props.context.appContext.orgId : record.orgIdHome, \n orgHomeRole: (record.orgHomeRole || \"\") === \"\" ? this.props.context.appContext.roleName : record.orgHomeRole,\n\n // ops-2784\n // orgIdHome: (record.orgIdHome || \"\") === \"\" ? (this.props.context.appContext.roleName === \"admin\" ? this.props.context.appContext.orgId: null) : record.orgIdHome, \n // orgHomeRole: (record.orgHomeRole || \"\") === \"\" ? \"user\" : record.orgHomeRole,\n\n superUser: record.superUser || false,\n oktaUserId: record.oktaUserId\n /* \n OPS-968 \n avatarUploadId: record.avatarUploadId,\n avatarUploadSrc: record.avatarUploadSrc\n */\n });\n }\n };\n\n onFinish = (values: any) => { \n resetFormErrors(this, this.formRef.current);\n this.props.userMaint(this, this.onFinishSuccess, this.onFinishFailure, values);\n };\n\n onFinishSuccess = (recordOld:any, recordNew: any) => { \n this.props.usersListRefreshOnUpdate(this);\n this.componentUpdate(recordNew);\n this.props.userMaintRefreshInstance(this, [1,2]);\n\n if (recordNew.userId === this.props.context.user.userId) {\n //OPS-968 setHeaderAvatar(appConfigs.server.URL + recordNew.avatarUploadSrc); \n \n setHeaderUserName(recordNew.firstName + \" \" + recordNew.lastName);\n }\n if ((recordNew.userId || \"\") !== \"\") {\n this.props.userMaintTabsEnable(this);\n }\n\n if ((recordOld.userId || \"\") === \"\") {\n successResponse(this, \"User has been successfully created\"); \n }\n else {\n successResponse(this, \"User has been successfully updated\"); \n }\n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n\n }\n\n render() {\n \n const { user:contextUser } = this.props.context;\n const { userMaint } = this.props.usersList;\n \n const superUserLabel = (\n <>\n <span>Super User</span>\n <Tooltip placement=\"topLeft\" title=\"This option is accessible to super users only\">\n <QuestionCircleOutlined style={{ marginLeft: '5px'}}/>\n </Tooltip>\n </>\n );\n\n const tempPasswordLabel = (\n <>\n <span>Temp Password</span>\n <Tooltip placement=\"topLeft\" title=\"This option is accessible to administrators until the user signs in for the first time\">\n <QuestionCircleOutlined style={{ marginLeft: '5px'}}/>\n </Tooltip>\n </>\n );\n\n return (\n\n <div data-id=\"user-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"users-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"users-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n {/*\n OPS-968 \n <Row gutter={8} style={{marginTop: 15}}>\n <Col xs={24} md={15}>\n */}\n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"userMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n > \n <Form.Item \n name=\"userId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n \n <Form.Item \n name=\"oktaUserId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n {/*\n OPS-968 \n <Form.Item \n name=\"avatarUploadId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n */}\n <Form.Item\n label=\"First Name\"\n name=\"firstName\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255}/>\n </Form.Item>\n\n <Form.Item\n label=\"Last Name\"\n name=\"lastName\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255}/>\n </Form.Item>\n\n {/* OPS 1149 */} \n <Form.Item\n label=\"Phone\"\n name=\"phoneNumber\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={32}/>\n </Form.Item>\n\n {/*\n OPS 1149\n <UserPhone/>\n */} \n\n <Form.Item\n label=\"Email\"\n name=\"email\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { type: \"email\", message: appConfigs.errors.fieldErrors.invalidEmail}\n ]}\n \n >\n <Input \n maxLength={255} \n placeholder=\"example@acme.com\"\n disabled={this.formRef.current?.getFieldValue(\"userId\")}\n />\n </Form.Item>\n\n { \n contextUser.contextUserIsSuperUser &&\n <Form.Item\n label={superUserLabel}\n name=\"superUser\"\n valuePropName=\"checked\"\n >\n <Switch />\n \n </Form.Item> \n }\n\n { \n (contextUser.contextUserIsSuperUser || userMaint.record.objectAdmin) &&\n (userMaint.record.oktaTempPassword || \"\") !== \"\" &&\n <Form.Item\n label={tempPasswordLabel}\n >\n <Paragraph copyable>{userMaint.record.oktaTempPassword}</Paragraph> \n </Form.Item> \n }\n\n <UserHomeOrg formRef={this.formRef.current} iscreate={this.props.iscreate} isread={this.props.isread} isupdate={this.props.isupdate}/>\n\n </Form>\n {/*\n OPS-968 \n </Col>\n <Col xs={24} md={9}>\n <div data-id=\"users-maint-info-avatar-container\">\n {\n userMaint.record.avatarUploadAllowed &&\n <UserAvatar formRef={this.formRef.current}/>\n }\n {\n !userMaint.record.avatarUploadAllowed && userMaint.record.avatarUploadSrc &&\n <Avatar shape=\"square\" size={100} src={userMaint.record.avatarUploadSrc} />\n }\n {\n !userMaint.record.avatarUploadAllowed && !userMaint.record.avatarUploadSrc &&\n <Avatar shape=\"square\" size={100} icon={<UserOutlined />} />\n }\n\n </div>\n </Col>\n </Row> \n */}\n {/*\n OPS 1150 \n userMaint.record.objectAdmin && userMaint.record.userId &&\n <UserCopy />\n */}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n usersList: state.usersReducers.usersState.usersList,\n roleList: state.usersReducers.usersState.roleList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(UserMaintInfo);","import React from \"react\";\nimport { Form, Row, Col, Table, Collapse, Select, Tooltip, Button, Space, message } from 'antd';\nimport { CloseCircleOutlined, HomeOutlined, QuestionCircleOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport { initCap, loadingIndicatorStart } from \"../../../utils/commonHelpers\";\n\nconst { Option } = Select;\nconst { Panel } = Collapse;\n\ninterface Prop {\n userOrgsSetPagination: Function,\n userOrgsGet: Function,\n userOrgsRole: Function,\n userOrgsRemove: Function,\n userOrgsMaint: Function,\n administeredOrgsGet: Function,\n usersListRefreshOnUpdate: Function,\n userMaintRefreshInstance: Function,\n getUser: Function,\n getOrgRoles: Function,\n context: any,\n usersList: any,\n roleList: any,\n iscreate: boolean,\n isupdate: boolean,\n isread: boolean,\n isdelete: boolean\n}\ninterface State {\n orgId: string,\n}\n\nclass UserMaintOrgs extends React.Component<Prop, {}> { \n \n formRef = React.createRef<FormInstance>();\n state: State = {\n orgId: \"\",\n };\n componentDidMount() {\n this.props.getOrgRoles(this,null,null,this.props.context.appContext.orgId);\n this.props.userOrgsSetPagination(this.onPaginationChange);\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.usersList.userMaint.tabs[1].instance !== prevProps.usersList.userMaint.tabs[1].instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n let userMaint = this.props.usersList.userMaint; \n //ops-2680\n this.props.userOrgsGet(this, null, null, userMaint.record.userId, this.props.context.appContext.roleName); \n if ((this.props.usersList.userMaint.administeredOrgs.length || 0) === 0 && (this.props.context.user.contextUserIsAdmin || false)) {\n this.props.administeredOrgsGet(this, null, null, null, null);\n }\n }\n\n onPaginationChange = (page: number) => {\n //ops-2680\n this.props.userOrgsGet(this, null, null, this.props.usersList.userMaint.record.userId, this.props.context.appContext.roleName, page);\n };\n \n addOrgs = () => { \n let form = this.formRef.current;\n this.props.userOrgsMaint(\n this, \n this.addOrgsSuccess, \n null, \n //(form?.getFieldValue(\"orgs\") || null),\n [form?.getFieldValue(\"orgs\") || null], \n [this.props.usersList.userMaint.record.userId], \n (form?.getFieldValue(\"role\") || \"\"), \n false,\n this.props.usersList.userMaint.tabs[1].tableConfig.pagination.current\n );\n };\n \n addOrgsSuccess = (data:any) => { \n this.resetOrgs();\n this.props.usersListRefreshOnUpdate(this);\n this.props.userMaintRefreshInstance(this, [2]); \n message.success(\"User organizations have been successfully processed\");\n //ops-2680\n this.props.userOrgsGet(this, null, null, this.props.usersList.userMaint.record.userId, this.props.context.appContext.roleName);\n }\n\n isAdminAutoChange = ():boolean => { \n return (\n this.props.context.appContext.userId === this.props.usersList.userMaint.record.userId && \n (this.props.context.user.contextUserIsAdmin || false)\n ); \n };\n\n adminAutoChange = () => { \n this.props.getUser(this, this.adminAutoChangeSuccess, null, this.props.usersList.userMaint.record.userId); \n }\n\n adminAutoChangeSuccess = (record:any) => { \n if (!(record.contextUserIsAdmin || false)) {\n loadingIndicatorStart();\n setTimeout(function () {\n window.location.href = \"/map\"; \n }, 500); \n }\n }\n\n roleChange = (value: string, record:any) => {\n this.props.userOrgsRole(this, this.roleChangeSuccess, null, record[\"key\"], value); \n };\n\n roleChangeSuccess = (orgUsers:any, orgUserId:string, role:string) => { \n this.props.userMaintRefreshInstance(this, [2]);\n message.success(\"User has been successfully updated\");\n //ops-2680\n this.props.userOrgsGet(this, null, null, this.props.usersList.userMaint.record.userId, this.props.context.appContext.roleName);\n if (this.isAdminAutoChange()) {\n this.adminAutoChange(); \n }\n };\n\n removeOrg = (e:any, orgUserId:string) => { \n e.preventDefault();\n this.props.userOrgsRemove(this, this.removeOrgSuccess, null, orgUserId); \n };\n\n removeOrgSuccess = (orgUserId:string) => { \n this.props.userMaintRefreshInstance(this, [2]);\n message.success(\"Organization has been successfully removed\");\n\n if (this.isAdminAutoChange()) {\n this.adminAutoChange(); \n }\n };\n\n resetOrgs = () => { \n this.formRef.current?.resetFields(); \n }\n\n onOrgIdChange = (value: string) => {\n this.setState({ orgId: value });\n this.props.getOrgRoles(this,null,null,value);\n }\n\n \n render() {\n\n const { user:contextUser } = this.props.context;\n const { administeredOrgs } = this.props.usersList.userMaint;\n const { tableConfig, tableData } = this.props.usersList.userMaint.tabs[1];\n const { roles } = this.props.roleList.roleMaint.orgRoles.data;\n const { record } = this.props.usersList.userMaint;\n const parentOrgPath = record.orgIdHomePath?.includes(\"~\") ? record.orgIdHomePath?.split('~') : [record.orgIdHomePath];\n\n let parentOrg:any;\n if (parentOrgPath.length > 1) {\n parentOrg=parentOrgPath[1];\n }else{\n parentOrg=parentOrgPath[0];\n }\n const header = (\n <>\n <span>Add/Update Organizations</span>\n <Tooltip title=\"Assign user to any organization you have admin access to\">\n <QuestionCircleOutlined style={{ paddingLeft: '10px'}}/>\n </Tooltip>\n </>\n );\n\n const tablecolumns = [\n {\n title: \"Org Name\",\n dataIndex: \"name\",\n key: \"name\",\n render: (text: any, record: any) => (\n <>\n <strong>{record.name}</strong>\n <br/>\n {record.city && ' ' + record.city}\n {record.state && ', ' + record.state}\n {record.zipCode && ' ' + record.zipCode}\n {record.country && ', ' + record.country}\n </>\n )\n },\n {\n title: \"Role\",\n dataIndex: \"role\",\n key: \"role\",\n width: \"180px\",\n render: (role: string, record: any) => {\n const isRoleAdmin = record.role === \"admin\"; \n const isSameUser=(record.userId===contextUser.userId)\n const isEnabled = isRoleAdmin || contextUser.contextUserIsAdmin || !isSameUser\n return( \n \n <>\n {/* ops-2680 */}\n {/* { Based on user's role in each org to determine whether the user org role assignment can be done\n admin-like role is determined by sub_orgs permission value =15\n user update is determined by users permission value update bit = 1 \n individual org-record update does not rely on the homeOrg isupdate flag, since homeorg can be guest-like role\n !(contextUser.contextUserIsAdmin && record.contextUserIsOrgAdmin && record.contextUserCanSetOrgUser) &&\n role\n } */}\n {\n //ops-2680\n // (contextUser.contextUserIsAdmin && record.contextUserIsOrgAdmin && record.contextUserCanSetOrgUser) &&\n <Select \n data-id=\"users-maint-info-home-org-role\"\n value={record.role}\n style={{ width: 180 }}\n showSearch\n showArrow={true}\n allowClear \n optionFilterProp=\"children\"\n className=\"select-before\" \n onChange={this.roleChange} \n // key={\"role-\" + record.recordNo}\n disabled={!isEnabled}\n >\n {JSON.parse(record.roles) !== null && JSON.parse(record.roles).map((recordrole:any, index:number) => (\n <Option key={record.orgUserId} data-id={record.orgId} value={recordrole.role_name}>\n {recordrole.role_name}\n </Option>\n ))}\n </Select>\n }\n </>\n )}\n },\n {\n title: \"Actions\",\n key: \"actions\",\n width: \"100px\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <>\n {\n record.isHomeOrg &&\n <HomeOutlined />\n }\n {\n /* 1. delete orgUser does not require delete user delete user permission in general which is super-admin delete account\n 2. delete user does not requires persmision from home-org, since the user can be a guest role in home, but admin role in org-records\n 3. delete user requires each record-org-admin role */\n (contextUser.contextUserIsAdmin && record.contextUserIsOrgAdmin && record.contextUserCanSetOrgUser) && \n !(record.isHomeOrg)\n &&\n <Tooltip title=\"Remove\">\n <a href=\"# \" data-id=\"users-maint-orgs-remove-button\" onClick={(e:any) => this.removeOrg(e, record.orgUserId)}>\n <CloseCircleOutlined />\n </a>\n </Tooltip>\n }\n </>\n )\n }\n ];\n\n return ( \n <div data-id=\"user-maint-orgs\">\n {\n contextUser.contextUserIsAdmin &&\n <Collapse data-id=\"users-maint-orgs-add-orgs\" bordered={false} defaultActiveKey={['0']} className=\"auto-close\">\n <Panel header={header} key=\"1\">\n <Form \n layout=\"vertical\"\n ref={this.formRef}\n name=\"add\" \n >\n <Row gutter={16}>\n <Col xs={24} md={18}>\n <Form.Item\n name=\"orgs\"\n >\n\n <Select \n data-id=\"users-maint-orgs-add-orgs-orgs\"\n // mode=\"multiple\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select one or more...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n onChange={this.onOrgIdChange} \n >\n {administeredOrgs !== null && administeredOrgs.map((record:any, index:number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n </Col> \n <Col xs={24} md={6}>\n \n <Form.Item\n name=\"role\" \n >\n <Select \n data-id=\"users-maint-orgs-add-orgs-role\"\n showSearch\n showArrow={true}\n allowClear \n optionFilterProp=\"children\"\n className=\"select-before\"\n placeholder=\"Role\"\n style={{ width: 140 }}\n >\n {(roles !== null && roles.map((record:any, index:number) => (\n <Option key={record.roleName + \"-\" + record.roleId} value={record.roleName}>\n {record.roleName}\n </Option>\n )))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Space size=\"middle\">\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"users-maint-orgs-add-orgs-reset-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.resetOrgs}\n disabled={ \n !(\n this.formRef.current?.getFieldValue(\"orgs\") ||\n this.formRef.current?.getFieldValue(\"role\")\n )\n } \n >\n Reset\n </Button>\n )}\n </Form.Item>\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"users-maint-orgs-add-orgs-submit-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.addOrgs}\n disabled={\n !(\n (this.formRef.current?.getFieldValue(\"orgs\") || \"\") !== \"\" && \n (this.formRef.current?.getFieldValue(\"role\") || \"\") !== \"\" \n ) \n } \n >\n Submit\n </Button>\n )}\n </Form.Item>\n </Space> \n </Form>\n </Panel> \n </Collapse>\n }\n\n <Table \n data-id=\"users-maint-orgs-add-orgs-data\"\n {...tableConfig}\n rowKey={(record) => record.orgUserId} \n columns={tablecolumns} \n dataSource={tableData} \n style={{ marginTop: 10 }}\n />\n </div>\n )\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return { \n context: state.contextReducer.context,\n usersList: state.usersReducers.usersState.usersList,\n roleList: state.usersReducers.usersState.roleList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(UserMaintOrgs);","import React from \"react\";\nimport { Table, Checkbox, Space, Tooltip, Input } from 'antd';\nimport { PhoneOutlined, MailOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nconst { Search } = Input;\n\ninterface Prop {\n userSubscriptionsSetPagination: Function,\n userSubscriptionsGet: Function,\n userSubscriptionsMaint: Function,\n usersListRefreshOnUpdate: Function,\n userSubscriptionsSetSearch: Function,\n usersList: any\n}\n\nclass UserMaintSubscriptions extends React.Component<Prop, {}> { \n \n componentDidMount() {\n this.props.userSubscriptionsSetPagination(this.onPaginationChange);\n this.componentUpdate(1);\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.usersList.userMaint.tabs[2].instance !== prevProps.usersList.userMaint.tabs[2].instance) {\n this.componentUpdate(1);\n }\n }\n\n componentUpdate(page: number) {\n this.props.userSubscriptionsGet(this, null, null, this.props.usersList.userMaint.record.userId, this.props.usersList.userMaint.tabs[2].searchText, page);\n }\n\n onPaginationChange = (page: number) => {\n this.props.userSubscriptionsGet(this, null, null, this.props.usersList.userMaint.record.userId, this.props.usersList.userMaint.tabs[2].searchText, page);\n }\n \n onCheckChange = (e:any, record:any, notification: string, scope: string) => {\n let action = e.target.checked ? \"plus\" : \"minus\";\n this.props.userSubscriptionsMaint(this, this.onCheckChangeSuccess, this.onCheckChangeFailure, this.props.usersList.userMaint.record.userId, record, notification, action, scope);\n }\n\n onCheckChangeSuccess = (userId:string, record:any, notification: string, action: string, scope:string) => { \n if (scope === \"asset\") {\n this.closeExpandedRows(record.key);\n }\n this.props.usersListRefreshOnUpdate(this);\n };\n\n onCheckChangeFailure = (error:string, userId:string, record:any, notification: string, action: string, scope:string) => { \n } \n \n closeExpandedRows(rowKey?:string) { \n let active:any;\n \n if((rowKey || \"\") !== \"\") {\n active = document.querySelectorAll('[data-id=user-maint-subscriptions] tr[data-row-key=\"' + rowKey + '\"] .ant-table-row-expand-icon-expanded');\n }\n else {\n active = document.querySelectorAll('[data-id=user-maint-subscriptions] .ant-table-row-expand-icon-expanded');\n }\n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i].click(); \n if ((rowKey || \"\") !== \"\") {\n //if expanded click it twice to refresh updated state data\n active[i].click(); \n }\n }\n }\n }\n \n onSearch = (searchText: string) => { \n let me = this;\n setTimeout(function(){\n me.props.userSubscriptionsGet(me, null, null, me.props.usersList.userMaint.record.userId, me.props.usersList.userMaint.tabs[2].searchText, 1);\n }, 100); \n }\n \n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.userSubscriptionsSetSearch((value || \"\"));\n }\n\n isLiteAsset=(record:any)=>{\n return (record.partNumber || \"\") !== \"\" && record.minCollectionFreq > 0;\n }\n\n returnAlertSmsBySeverity=(record:any)=>{\n \n switch(record.severity){\n case \"critical\" || \"warning\" ||\"info\":\n return record.alertSms;\n case \"incremental\":\n return record.incAlertSms;\n case \"offline\":\n return record.offlineAlertSms;\n default:\n return record.alertSms;\n }\n }\n returnAlertEmailBySeverity=(record:any)=>{\n \n switch(record.severity){\n case \"critical\" || \"warning\" ||\"info\":\n return record.alertEmail;\n case \"incremental\":\n return record.incAlertEmail;\n case \"offline\":\n return record.offlineAlertEmail;\n default:\n return record.alertEmail;\n }\n }\n\n returnSeverity=(record:any)=>{\n \n switch(record.severity)\n {\n case \"incremental\" || \"offline\":\n return record.severity;\n default:\n return \"alert\";\n } \n }\n\n actions = (record:any) => (\n <>\n {record.children &&\n <Space size=\"large\">\n {/* Rollback OPS-4113: Disable SMS scubcription for lite assets */}\n {/*<Tooltip title=\"Set/Unset SMS for all asset alerts\"> \n <Checkbox disabled={this.isLiteAsset(record)} data-id=\"user-maint-subscriptions-sms-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"asset\")} indeterminate={record.assetSmsIndeterminate} checked={(this.isLiteAsset(record)?false:record.assetSmsChecked)}><PhoneOutlined /></Checkbox> \n </Tooltip>*/}\n <Tooltip title=\"Set/Unset SMS for all asset alerts\">\n <Checkbox data-id=\"user-maint-subscriptions-sms-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"asset\")} indeterminate={record.assetSmsIndeterminate} checked={record.assetSmsChecked}><PhoneOutlined /></Checkbox>\n </Tooltip>\n <Tooltip title=\"Set/Unset email for all asset alerts\">\n <Checkbox data-id=\"user-maint-subscriptions-email-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", \"asset\")} indeterminate={record.assetEmailIndeterminate} checked={record.assetEmailChecked}><MailOutlined /></Checkbox>\n </Tooltip>\n </Space>\n }\n {!record.children && !record.name.includes('(Geofence)') &&\n <Space size=\"large\">\n {/* <Checkbox disabled={this.isLiteAsset(record)} data-id=\"user-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", record.severity!==\"incremental\"?\"alert\":record.severity)} checked={(this.isLiteAsset(record)?false:(record.severity!==\"incremental\"?record.alertSms:record.incAlertSms))}><PhoneOutlined /></Checkbox> */}\n <Checkbox data-id=\"user-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", this.returnSeverity(record))} checked={this.returnAlertSmsBySeverity(record)}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"user-maint-subscriptions-email\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", this.returnSeverity(record))} checked={this.returnAlertEmailBySeverity(record)}><MailOutlined /></Checkbox>\n </Space>\n }\n {\n !record.children && record.name.includes('(Geofence)') &&\n\n <div>\n <Space size=\"large\" align=\"center\">\n <p style={{marginTop: 15}}>In</p>\n {/* <Checkbox disabled={this.isLiteAsset(record)} data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsIn\", \"geofence\")} checked={(this.isLiteAsset(record)?false:record.alertSmsIn)}><PhoneOutlined /></Checkbox> */}\n <Checkbox data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsIn\", \"geofence\")} checked={record.alertSmsIn}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"assets-maint-subscriptions-email\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"emailIn\", \"geofence\")} checked={record.alertEmailIn}><MailOutlined /></Checkbox>\n </Space>\n \n <Space size=\"large\" align=\"center\" style={{marginRight: 10, marginTop: -30}}>\n <p style={{marginTop: 15}}>Out</p>\n {/* <Checkbox disabled={this.isLiteAsset(record)} data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsOut\", \"geofence\")} checked={(this.isLiteAsset(record)?false:record.alertSmsOut)}><PhoneOutlined /></Checkbox> */}\n <Checkbox data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsOut\", \"geofence\")} checked={record.alertSmsOut}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"assets-maint-subscriptions-email\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"emailOut\", \"geofence\")} checked={record.alertEmailOut}><MailOutlined /></Checkbox>\n </Space>\n </div>\n }\n </>\n );\n \n render() {\n\n const { tableConfig, tableData } = this.props.usersList.userMaint.tabs[2];\n const columns = [\n {\n title: \"Asset / Alarm Name\",\n dataIndex: \"name\",\n key: \"name\",\n render: (text: any, record: any) => ( \n <> \n {record.children &&\n <strong>{record.name}</strong>\n }\n {!record.children && record.signalId === \"\" &&\n <i>{record.name}</i>\n }\n {!record.children && record.signalId !== \"\" &&\n <span>{record.name}</span>\n }\n </>\n )\n },\n {\n title: \"Subscribed\",\n dataIndex: \"subscribed\",\n width: \"30%\",\n key: \"subscribed\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n this.actions(record)\n )\n },\n ];\n \n return ( \n <>\n {\n (\n ((this.props.usersList.userMaint.tabs[2].searchText || \"\") === \"\" && tableData.length > 0) ||\n ((this.props.usersList.userMaint.tabs[2].searchText || \"\") !== \"\")\n ) &&\n <Search\n data-id=\"user-maint-subscriptions-search-field\"\n placeholder=\"Search by asset, tag, or alarm name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n style={{marginBottom: 20, width: '100%'}}\n value={this.props.usersList.userMaint.tabs[2].searchText}\n /> \n }\n \n <Table \n data-id=\"user-maint-subscriptions\" \n rowKey={(record) => record.key}\n {...tableConfig}\n columns={columns} \n dataSource={tableData} \n />\n </>\n )\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n usersList: state.usersReducers.usersState.usersList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(UserMaintSubscriptions);","import React from \"react\";\nimport { Table, Checkbox, Space, Tooltip, Input } from 'antd';\nimport { PhoneOutlined, MailOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { array } from \"@amcharts/amcharts4/core\";\n\ninterface Prop{\n usersList: any,\n activitySubscriptionsGet:Function,\n activitySubscriptionsMaint:Function\n}\n\ninterface State{\n expandedKey:any;\n}\n\nclass ActivityMaintSubscription extends React.Component<Prop,State> {\n\n state: State = {\n expandedKey:[]\n }\n\n componentDidMount() {\n this.props.activitySubscriptionsGet(this, this.onActivitySuccess, null, this.props.usersList.userMaint.record.userId);\n }\n\n onActivitySuccess=(data:any)=>{\n let expandKeys:Array<any>=[];\n expandKeys.push(data[0].expandedKey);\n this.setState({expandedKey:expandKeys});\n }\n\n onCheckChange = (e:any, record:any, notification: string, scope: string) => {\n let action = e.target.checked ? \"plus\" : \"minus\";\n this.props.activitySubscriptionsMaint(this, this.onCheckChangeSuccess, this.onCheckChangeFailure, this.props.usersList.userMaint.record.userId, record, notification, action, scope);\n }\n\n onCheckChangeSuccess = (userId:string, record:any, notification: string, action: string, scope:string) => { \n \n };\n\n onCheckChangeFailure = (error:string, userId:string, record:any, notification: string, action: string, scope:string) => { \n } \n\n actions = (record:any) => (\n <>\n {record.children &&\n <Space size=\"large\">\n <Tooltip title=\"Set/Unset SMS for all asset movement\">\n <Checkbox data-id=\"activity-maint-subscriptions-sms-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"asset\")} indeterminate={record.smsIndeterminate} checked={record.smsChecked}><PhoneOutlined /></Checkbox>\n </Tooltip>\n <Tooltip title=\"Set/Unset email for all asset movement\">\n <Checkbox data-id=\"activity-maint-subscriptions-email-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", \"asset\")} indeterminate={record.emailIndeterminate} checked={record.emailChecked}><MailOutlined /></Checkbox>\n </Tooltip>\n </Space>\n }\n {!record.children && record.name.includes('In') &&\n <div>\n <Space size=\"large\">\n \n <Checkbox data-id=\"alert-maint-subscriptions-smsin\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsIn\", \"assetIn\")} checked={record.alertSmsIn}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"alert-maint-subscriptions-emailin\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"emailIn\", \"assetIn\")} checked={record.alertEmailIn}><MailOutlined /></Checkbox>\n </Space>\n \n \n </div>\n }\n {!record.children && record.name.includes('Out') &&\n <div>\n <Space size=\"large\" >\n \n <Checkbox data-id=\"alert-maint-subscriptions-smsout\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsOut\", \"assetOut\")} checked={record.alertSmsOut}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"alert-maint-subscriptions-emailout\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"emailOut\", \"assetOut\")} checked={record.alertEmailOut}><MailOutlined /></Checkbox>\n </Space>\n \n \n </div>\n }\n \n </>\n )\n\n handleExpand(record:any) {\n // if a row is expanded, collapses it, otherwise expands it\n this.setState(prevState =>\n prevState.expandedKey.includes(record.key)\n ? {\n expandedKey: prevState.expandedKey.filter((key:any)=>\n key !== record.key\n )\n }\n : { expandedKey: [...prevState.expandedKey, record.key] }\n );\n }\n render(){\n const { tableData } = this.props.usersList.userMaint.tabs[3];\n // console.log(tableData);\n const columns = [\n {\n title: \"Activity\",\n dataIndex: \"name\",\n key: \"name\" \n },\n {\n title: \"Subscribed\",\n dataIndex: \"subscribed\", \n width: \"30%\",\n key: \"subscribed\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n this.actions(record) \n )\n\n }\n ];\n \n return(\n <> \n <Table \n data-id=\"activity-maint-subscriptions\" \n columns = { columns }\n dataSource={tableData}\n onExpand={(expanded, record) => this.handleExpand(record)}\n expandable={{\n expandedRowKeys: this.state.expandedKey,\n }}\n /> \n </>\n ) \n \n }\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n usersList: state.usersReducers.usersState.usersList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ActivityMaintSubscription);","import React from \"react\";\nimport { Drawer, Tabs, Button, Space } from \"antd\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport UserMaintInfo from \"./userMaintInfo/UserMaintInfo\";\nimport UserMaintOrgs from \"./userMaintOrgs/UserMaintOrgs\";\nimport UserMaintSubscriptions from \"./userMaintSubscriptions/UserMaintSubscriptions\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\nimport ActivityMaintSubscription from \"./activityMaintSubscription/activityMaintSubscription\";\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n usersListRefreshOnUpdate: Function,\n getUsers: Function,\n userMaintClose: Function, \n userMaintTabChange: Function,\n usersList: any,\n permissions: any\n}\n\nclass UserMaint extends React.Component<Prop, {}> { \n \n componentDidUpdate(prevProps: Prop) {\n if (this.props.usersList.userMaint.instance !== prevProps.usersList.userMaint.instance) {\n this.closeCollapsed();\n }\n } \n\n onDrawerClose = () => {\n if (this.props.usersList.refreshOnUpdate) {\n this.props.getUsers(this, null, null, this.props.usersList.tableConfig.pagination.current, this.props.usersList.searchText, true);\n }\n \n this.props.userMaintClose(this);\n };\n\n onTabChange = (key:string) => {\n this.props.userMaintTabChange(this, key);\n }\n\n closeCollapsed() { \n let active:any = document.querySelectorAll(\"[data-id=user-maint-drawer] .ant-collapse-item-active\"); \n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i]!.children[0].click(); \n }\n }\n }\n\n render() {\n\n const { userMaint } = this.props.usersList;\n const result = getPermissions(this.props.permissions.permissions.users);\n\n let iscreate = result[0];\n let isread = result[1];\n let isupdate = result[2];\n let isdelete = result[3];\n\n return (\n <Drawer\n data-id=\"user-maint-drawer\" \n title={userMaint.title}\n width={userMaint.width}\n onClose={this.onDrawerClose}\n visible={userMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"users-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n userMaint.activeTab === \"1\" &&\n <Button data-id=\"users-maint-submit-button\" type=\"primary\" form=\"userMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n </Space>\n }\n >\n <Tabs data-id=\"users-maint-info-tabs\" activeKey={userMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n <TabPane data-id=\"users-maint-info-tab-button\" tab={userMaint.tabs[0].title} key=\"1\"> \n <UserMaintInfo iscreate={iscreate} isread={isread} isupdate={isupdate} />\n </TabPane> \n <TabPane data-id=\"users-maint-orgs-tab-button\" tab={userMaint.tabs[1].title} key=\"2\" disabled={userMaint.tabs[1].disabled}>\n <UserMaintOrgs iscreate={iscreate} isread={isread} isupdate={isupdate} isdelete={isdelete}/>\n </TabPane> \n <TabPane data-id=\"users-maint-subscriptions-tab-button\" tab={userMaint.tabs[2].title} key=\"3\" disabled={userMaint.tabs[2].disabled}>\n <UserMaintSubscriptions />\n </TabPane> \n <TabPane data-id=\"users-maint-subscriptions-tab-button\" tab={userMaint.tabs[3].title} key=\"4\" disabled={userMaint.tabs[3].disabled}>\n <ActivityMaintSubscription/>\n </TabPane>\n </Tabs> \n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n usersList: state.usersReducers.usersState.usersList,\n permissions: state.contextReducer.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(UserMaint);","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function acceptTermsAndConditions(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n templateOrgId: string\n) {\n \n return async (dispatch: any) => { \n Axios.put(\n appConfigs.server.URL + \"/ui/api/users/terms-and-conditions?templateId=\" + templateId + \"&templateOrgId=\" + templateOrgId,\n {},\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess();\n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n }\n}","import React from \"react\";\n\nimport { Modal, Button, Checkbox } from \"antd\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport { loadPage, getLoginUrl, loadingIndicatorStart, loadingIndicatorEnd, clientStorageClear } from \"../../utils/commonHelpers\";\n\nimport \"./terms.css\";\n\ninterface State {\n visible: boolean;\n acceptButtonDisabled: boolean;\n acceptCheckboxDisabled: boolean;\n}\n\ninterface Prop {\n context: any,\n visible: boolean,\n text: string,\n\n acceptTermsAndConditions: Function\n}\n\nclass Terms extends React.Component<Prop, State> { \n\n state:State = {\n visible: false,\n acceptButtonDisabled: true,\n acceptCheckboxDisabled: true\n }\n\n componentDidMount () { \n this.setState({ visible: this.props.visible }); \n if (this.props.visible) {\n this.setModal(); \n }\n } \n\n componentWillUnmount() {\n this.cleanModal();\n }\n \n componentDidUpdate(prevProps: Prop) {\n if (this.props.visible !== prevProps.visible) {\n this.setState({ visible: this.props.visible }); \n this.setModal(); \n } \n } \n\n setModal = () => {\n const me = this; \n\n setTimeout(function() {\n const \n body = document.querySelectorAll(\".ant-modal-body\")[0] as HTMLElement,\n mask = document.querySelectorAll(\".ant-modal-mask\")[0] as HTMLElement;\n \n if (body !== undefined) { \n mask.style.backgroundColor=\"#666\";\n body.addEventListener(\"scroll\", me.trackScrolling);\n }\n\n me.trackScrolling();\n }, 250); \n\n setTimeout(function() {\n loadingIndicatorEnd();\n }, 1000); \n }\n\n cleanModal = () => {\n const \n body = document.querySelectorAll(\".ant-modal-body\")[0] as HTMLElement,\n mask = document.querySelectorAll(\".ant-modal-mask\")[0] as HTMLElement;\n\n if (body !== undefined) { \n mask.style.backgroundColor=\"rgba(0, 0, 0, 0.45)\";\n body.removeEventListener(\"scroll\", this.trackScrolling);\n }\n }\n\n accept = (e: any) => {\n this.props.acceptTermsAndConditions(this, this.acceptTermsAndConditionsSuccess, null, this.props.context.termsAndConditions.templateId, this.props.context.termsAndConditions.orgId);\n }\n\n acceptTermsAndConditionsSuccess = () => {\n this.cleanModal();\n this.setState({ visible: false }); \n }\n\n reject = (e: any) => {\n e.preventDefault();\n\n const loginError = {\n \"stop\" : true, \n \"silent\": true\n };\n \n const loginPage = getLoginUrl();\n clientStorageClear();\n loadingIndicatorStart(); \n //==>\n window.sessionStorage.setItem(\"loginError\", JSON.stringify(loginError)); \n loadPage(loginPage);\n }\n\n isBottom() {\n const \n body = document.querySelectorAll(\".ant-modal-body\")[0] as HTMLElement,\n bodyHeight = (body.scrollHeight - body.offsetHeight - 10);\n\n return bodyHeight >= 0 && body.scrollTop >= bodyHeight;\n }\n\n trackScrolling = () => { \n if (this.isBottom()) {\n this.setState({ acceptCheckboxDisabled: false }); \n }\n }\n\n acceptCheckbox = (e: any) => {\n this.setState({ acceptButtonDisabled: !e.target.checked }); \n }\n\n render() {\n\n return (\n <Modal \n wrapClassName=\"terms-and-conditions-accept-container\" \n title={\n <>\n <div className=\"ant-modal-title\">{appConfigs.app.termsAndConditions.title}</div>\n <div className=\"mt-10\"><h5>{appConfigs.app.termsAndConditions.subTitle}</h5></div>\n </>\n }\n visible={this.state.visible}\n footer={\n <>\n <div data-id=\"terms-and-conditions-accept-checkbox\">\n <Checkbox key=\"back\" disabled={this.state.acceptCheckboxDisabled} onChange={this.acceptCheckbox}>I have read and accepted the Terms and Conditions</Checkbox>\n </div>\n <div className=\"mt-15\">\n <Button key=\"cancel\" onClick={this.reject}>\n Cancel\n </Button>\n <Button key=\"accept\" type=\"primary\" disabled={this.state.acceptButtonDisabled} onClick={this.accept}>\n Accept\n </Button>\n </div>\n </>\n }\n >\n <div dangerouslySetInnerHTML={{__html: this.props.text}}></div> \n </Modal>\n );\n }\n};\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Terms);\n ","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M91.124,15.645c12.928,0,23.406,10.479,23.406,23.406 c0,12.927-10.479,23.406-23.406,23.406c-12.927,0-23.406-10.479-23.406-23.406C67.718,26.125,78.197,15.645,91.124,15.645 L91.124,15.645z M2.756,0h117.322c1.548,0,2.802,1.254,2.802,2.802c0,0.848-0.368,1.622-0.996,2.139l-10.667,13.556 c-1.405-1.375-2.95-2.607-4.614-3.672l6.628-9.22H9.43l37.975,46.171c0.59,0.516,0.958,1.254,0.958,2.102v49.148l21.056-9.623 V57.896c1.651,1.9,3.548,3.582,5.642,4.996v32.133c0,1.105-0.627,2.064-1.586,2.506l-26.476,12.758 c-1.327,0.773-3.023,0.332-3.798-1.033c-0.258-0.441-0.368-0.92-0.368-1.4V55.02L0.803,4.756c-1.07-1.106-1.07-2.839,0-3.945 C1.355,0.258,2.056,0,2.756,0L2.756,0z M96.93,28.282c1.328-1.349,3.489-1.355,4.825-0.013c1.335,1.342,1.341,3.524,0.013,4.872 l-5.829,5.914l5.836,5.919c1.317,1.338,1.299,3.506-0.04,4.843c-1.34,1.336-3.493,1.333-4.81-0.006l-5.797-5.878l-5.807,5.889 c-1.329,1.349-3.489,1.355-4.826,0.013c-1.335-1.342-1.341-3.523-0.013-4.872l5.83-5.913l-5.836-5.919 c-1.317-1.338-1.3-3.507,0.04-4.843c1.339-1.336,3.492-1.333,4.81,0.006l5.796,5.878L96.93,28.282L96.93,28.282z\"\n}));\n\nvar SvgFilterRemove = function SvgFilterRemove(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n width: \"122.88px\",\n height: \"110.668px\",\n viewBox: \"0 0 122.88 110.668\",\n enableBackground: \"new 0 0 122.88 110.668\",\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgFilterRemove, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/filter-remove.74337d7d.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useEffect, useState} from 'react';\nimport { Modal, Row, Col,Button, message, Alert } from 'antd';\nimport { appConfigs } from '../utils/configurations';\nimport { withOktaAuth } from '@okta/okta-react';\nimport {OktaAuth} from '@okta/okta-auth-js'\nimport { clientStorageClear, getToken, loadingIndicatorStart, getPermissions } from '../utils/commonHelpers';\nimport moment, { min } from 'moment';\nimport history from '../utils/history';\nimport { connect } from \"react-redux\";\nimport {setOktaLastLogin} from \"../pages/Users/actions\";\n\ninterface Props {\n authService?: any,\n setOktaLastLogin:Function,\n context: any,\n permissions:any,\n}\nexport const authConfig = {\n pkce: true,\n issuer: appConfigs.okta.oidc.issuer,\n clientId: appConfigs.okta.oidc.clientId,\n redirectUri: window.location.origin\n}\n\nconst TimeOutHandler: React.FC<Props> = (props)=>{\n const authClient = new OktaAuth(authConfig);\n const[showExpiredModal,setExipredModal]=useState(false);\n const[showNotExpiredModal,setNotExipredModal]=useState(false);\n const[seconds,setSecs]=useState('');\n const[isLastMinute,setLastMinute]=useState(false);\n const[minutes,setMin]=useState(0)\n const[loading,setLoad]=useState(false);\n const [events, setEvents] = useState(['click', 'load', 'scroll']);\n let timer:any=undefined;\n const SECOND_MS = 1000; //execution time\n const pad = (n:number) => ('0' + n).slice(-2);\n const timeoutsettings = getPermissions(props.permissions.permissions.timeout_settings);\n let cantimeoutRead = timeoutsettings[1];\n const startTimer=()=>{\n if(timer){\n clearInterval(timer)\n }\n timer=setInterval(()=>{\n let token=getToken();\n if(token==null || isLastMinute)\n {\n clearInterval(timer);\n setNotExipredModal(false);\n }\n else\n {\n if (cantimeoutRead) {\n return;\n }\n const expirationTime = new Date(token.expiresAt * 1000);\n const now = new Date();\n // const minute = 1000 * 60 * 4;\n const diff=moment.duration(expirationTime.getTime()-now.getTime());\n const diffMin = diff.minutes();\n const diffSecs = diff.seconds();\n if( diffMin < 15){\n setMin(diffMin);\n setSecs(pad(Math.sign(diffSecs)==-1?0:diffSecs));\n if(diffMin==0 && Math.sign(diffSecs)==-1){\n setLastMinute(true);\n setExipredModal(true);\n }\n else\n {\n setNotExipredModal(true);\n }\n }else{\n setNotExipredModal(false);\n startTimer();\n }\n \n }\n \n },SECOND_MS)\n }\n \n \n const renewToken=()=>{\n authClient.token.getWithoutPrompt()\n .then(function(res) {\n var tokens = res.tokens;\n //authClient.tokenManager.add('accessToken', token);\n authClient.tokenManager.setTokens(tokens);\n props.setOktaLastLogin(null,setOktaLastLoginSuccess,setOktaLastLoginFailure,props.context.user.oktaUserId);\n });\n }\n\n const setOktaLastLoginSuccess=()=>{\n resetSessionProps();\n }\n\n const setOktaLastLoginFailure=()=>{\n startTimer();\n resetSessionProps();\n }\n\n const resetSessionProps=()=>{\n deleteRefreshFlags();\n setNotExipredModal(false)\n setExipredModal(false);\n setLoad(false); \n }\n\n const handleReset = ()=>{\n setLoad(true);\n renewToken();\n }\n useEffect(()=>{\n let isPageRefreshed=localStorage.getItem(\"isPageRefreshed\") || \"\";\n\n if(cantimeoutRead){\n \n isPageRefreshed = \"NOT-EXPIRED\";\n \n //dev/stage msgiotdevuser18@outlook.com, prod: adminObject16@gmail.com, ssittp@taylorbigred.com\n if(isPageRefreshed!==\"\")\n {\n setNotExipredModal(false);\n renewToken();\n }\n subscribeEvents();\n startTimer();\n return (()=>{\n unsubscribeEvents();\n clearInterval(timer);\n })\n }\n });\n \n const handleRelogin=()=>{\n clearInterval(timer);\n setExipredModal(false);\n clientStorageClear();\n loadingIndicatorStart();\n localStorage.setItem(\"pathname\",history.location.pathname)\n props.authService.logout(window.location.origin + \"/login\");\n }\n\n const subscribeEvents=()=>{\n window.addEventListener(\"beforeunload\", setRefreshFlags);\n events.forEach((event) => {\n window.addEventListener(event, resetTimer);\n });\n }\n\n const unsubscribeEvents=()=>{\n window.removeEventListener(\"beforeunload\", deleteRefreshFlags);\n events.forEach(eventName=>{\n window.removeEventListener(eventName,resetTimer)\n })\n };\n\n const resetTimer=(eventType:any)=>{\n if(showNotExpiredModal)\n {\n renewToken();\n }\n else\n {\n startTimer();\n }\n }\n\n const setRefreshFlags= () => {\n localStorage.setItem(\"pathname\",history.location.pathname)\n localStorage.setItem(\"isPageRefreshed\",\"true\");\n };\n\n const deleteRefreshFlags=()=>{\n localStorage.removeItem(\"pathname\");\n localStorage.removeItem(\"isPageRefreshed\");\n }\n\n return (\n <>\n { \n !cantimeoutRead ?<Modal\n data-id=\"session-timeout-error\"\n title=\"IQAN Connect\"\n visible={showExpiredModal}\n closable={false}\n footer={\n <>\n \n <div className=\"mt-15\">\n <Button key=\"Logout\" type=\"primary\" onClick={handleRelogin}>\n Ok\n </Button>\n </div>\n \n \n </>\n }\n >\n \n <Row gutter={16}>\n <Col xs={21}>\n <div><h4>Session expired. Please login again.</h4></div>\n \n </Col>\n </Row>\n\n </Modal>:\"\"\n }\n {\n showNotExpiredModal && !cantimeoutRead ?\n <div className=\"session-info\">\n <span>Your session expires in <strong>{minutes+1}:{seconds}</strong> minutes</span>\n \n <Button type=\"primary\" loading={loading} size=\"small\" onClick={handleReset}>\n Reset\n </Button>\n \n </div>:\"\"\n \n }\n </>\n \n\n );\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n setOktaLastLogin\n \n })(withOktaAuth(TimeOutHandler));\n","import React from \"react\";\nimport { Layout, Dropdown, Menu, Button, Avatar, Row, Col, message, Badge, Tooltip, Card} from \"antd\";\nimport Icon, {\n SettingOutlined,\n DownOutlined,\n UserOutlined,\n LogoutOutlined,\n CloseCircleOutlined,\n SwapOutlined,\n FormOutlined,\n AppstoreAddOutlined,\n RightOutlined, \n WarningOutlined,\n BellOutlined\n} from \"@ant-design/icons\";\n\nimport OrgSelector from \"../pages/OrgSelector/OrgSelector\";\nimport \"./header.css\";\n\nimport UserMaint from \"../pages/Users/UserMaint\";\nimport Terms from \"../pages/Terms/Terms\";\nimport { getDrawerWidth, reloadPage, refreshPage, loadingIndicatorStart } from \"../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as rootActions from \"../actions\";\nimport * as usersActions from \"../pages/Users/actions\";\nimport * as orgSelectorActions from \"../pages/OrgSelector/actions\";\nimport history from '../utils/history';\n\nimport { ReactComponent as filterRemove } from \"../assets/images/filter-remove.svg\";\n\nimport { withOktaAuth } from '@okta/okta-react';\nimport TimeOutHandler from \"./TimeOutHandler\";\nimport { appConfigs } from \"../utils/configurations\";\n\nconst { Header } = Layout;\n\ninterface Prop {\n supportModeSet: Function,\n supportModeUnSet: Function,\n getUser: Function,\n userMaintOpen: Function,\n userMaintClose: Function,\n orgSelectorOpen: Function,\n orgSelectorRemoveSelections: Function,\n orgSelectorIncludeSuborgs: Function,\n orgSelectorUserOrgSelectionGet: Function,\n fleetStatsVisibility: Function,\n notificationVisibility: Function,\n getOrgRoles: Function,\n supportMode: any,\n context: any,\n orgSelector: any,\n usersList: any,\n roleList: any,\n authService?: any,\n authClient?: any,\n permissions: any,\n stats: any,\n notifications: any,\n assetsList: any,\n}\n\ninterface State {\n orgSelectionVisible: boolean,\n}\n\nclass TopHeader extends React.Component<Prop, State> {\n\n constructor(props: any) {\n super(props);\n this.logout = this.logout.bind(this);\n }\n\n state = {\n orgSelectionVisible: false\n };\n\n componentDidMount() {\n\n history.listen((location, action) => {\n if (this.props.usersList.userMaint.visible) {\n this.props.userMaintClose(this);\n }\n }); \n }\n\n async logout(e:any) {\n e.preventDefault();\n localStorage.removeItem(\"pathname\");\n loadingIndicatorStart();\n //Clear out the Support Mode \n sessionStorage.clear(); \n //\n message.loading(\"Logging out...\", 0);\n\n const me = this;\n setTimeout(function () {\n window.localStorage.setItem(\"logoutInProgress\", \"true\");\n me.props.authService.logout(window.location.origin + \"/login\");\n }, 500); \n \n }\n\n myProfile = (e: any) => {\n e.preventDefault();\n this.props.getUser(this, this.myProfileShow, null, this.props.context.user.userId);\n this.props.getOrgRoles(this,null,null,this.props.context.appContext.orgId);\n }\n\n myProfileShow = (record: any) => {\n this.props.userMaintOpen(this, \"My Profile\", getDrawerWidth(), record, \"MyProfile\");\n };\n\n orgSelectorOpen = () => {\n this.props.orgSelectorOpen(this, \"Org Selector\", getDrawerWidth());\n };\n\n orgSelectorRemoveSelections = () => {\n this.props.orgSelectorRemoveSelections(this, this.orgSelectorRemoveSelectionsSuccess);\n };\n\n orgSelectorRemoveSelectionsSuccess = () => {\n message.success(\"Org selections are successfully removed\")\n refreshPage(history);\n };\n \n orgSelectorIncludeSuborgs = () => {\n this.props.orgSelectorIncludeSuborgs(this, this.orgSelectorIncludeSuborgsSuccess, null, !this.props.orgSelector.includeSuborgs);\n };\n\n orgSelectorIncludeSuborgsSuccess = () => {\n //message.success(\"Sub-Orgs setting has been successfully updated\")\n refreshPage(history);\n };\n\n supportModeUnSet = (e: any) => {\n this.props.supportModeUnSet(this, this.supportModeUnSetSuccess);\n }\n\n supportModeUnSetSuccess = () => {\n loadingIndicatorStart();\n setTimeout(function () {\n window.location.href = \"/map\"; \n }, 500); \n \n // setTimeout(function () {\n // reloadPage();\n // }, 250); \n }\n\n\n render() {\n\n const { user:contextUser, termsAndConditions, initialized:contextInitialized } = this.props.context;\n const href = window.location.href.toLowerCase();\n let showBanner = false; // 30Jan2025 - Domain migration completed. So not required to show banner\n if (href.includes(appConfigs.server.claytonServerURL.toLowerCase()) ||\n href.includes(appConfigs.server.hoistServerURL.toLowerCase()) ||\n href.includes(appConfigs.server.toyotaServerURL.toLowerCase())) \n {\n showBanner = false;\n } \n const userMenu = (\n <Menu> \n {\n (this.props.supportMode.orgId || \"\") === \"\" &&\n <Menu.Item data-id=\"header-org-selector-user-menu-my-profile\" key=\"1\">\n <a href=\"# \" onClick={(e) => { this.myProfile(e) }}>\n <UserOutlined className=\"pr-5\"/>\n My Profile\n </a>\n </Menu.Item>\n } \n {\n (this.props.supportMode.orgId || \"\") !== \"\" &&\n <Menu.Item data-id=\"header-org-selector-user-menu-exit-support-mode\" key=\"1\">\n <a href=\"# \" onClick={(e) => { this.supportModeUnSet(e) }}>\n <CloseCircleOutlined className=\"pr-5\"/>\n Exit Support Mode\n </a>\n </Menu.Item>\n } \n <Menu.Divider data-id=\"header-org-selector-user-menu-divider\"/> \n <Menu.Item data-id=\"header-org-selector-user-menu-logout\" key=\"2\">\n <a href=\"# \" onClick={(e) => { this.logout(e) }}>\n <LogoutOutlined className=\"pr-5\"/>\n Logout \n </a>\n </Menu.Item>\n </Menu>\n );\n\n const orgSelectorMenu = (\n <Menu>\n <Menu.Item data-id=\"header-org-selector-button-remove-all\" key=\"1\" icon={<CloseCircleOutlined />} onClick={this.orgSelectorRemoveSelections}>\n Remove All\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item data-id=\"header-org-selector-button-include-suborgs\" key=\"2\" icon={<AppstoreAddOutlined />} onClick={this.orgSelectorIncludeSuborgs}>\n {this.props.orgSelector.includeSuborgs ? \"Exclude\" : \"Include\"} Sub-Orgs\n </Menu.Item>\n <Menu.Item data-id=\"header-org-selector-button-open\" key=\"3\" icon={<FormOutlined />} onClick={this.orgSelectorOpen}>\n Open\n </Menu.Item>\n </Menu>\n );\n\n\n\n return (\n <>\n <Header id=\"header\" className=\"site-layout-background\">\n <Row>\n <Col flex={2} >\n\n <div className=\"global-header\">\n <div className=\"header-left-content\">\n \n {\n (contextInitialized || false) &&\n this.props.orgSelector.orgSelection.length > 0 &&\n <Dropdown.Button data-id=\"header-org-selector-button\" type=\"ghost\" onClick={this.orgSelectorOpen} overlay={orgSelectorMenu} className=\"header-org-selector-big\">\n <span><SettingOutlined className=\"pr-5\"/>Org Selector</span>\n {\n this.props.orgSelector.orgSelection.length > 0 &&\n <>\n <span className=\"pr-5\"></span>\n <Badge data-id=\"header-org-selector-badge_count\" className={\"site-badge-count-4\" + (this.props.orgSelector.includeSuborgs ? \" org-selector-has-sub-orgs\" : \"\")} count={this.props.orgSelector.orgSelection.length} style={{ backgroundColor: '#108ee9', marginBottom: 4 }} />\n </>\n }\n </Dropdown.Button>\n }\n\n \n {\n (contextInitialized || false) &&\n this.props.orgSelector.orgSelection.length === 0 &&\n <Button data-id=\"header-org-selector-button\" type=\"ghost\" block icon={<SettingOutlined />} onClick={this.orgSelectorOpen} className=\"header-org-selector-big\">\n <span>Org Selector</span><span>{this.props.orgSelector.orgSelection.length > 0 ? \" (\" + this.props.orgSelector.orgSelection.length + \")\" : \"\"}</span>\n </Button>\n }\n\n \n \n {\n (contextInitialized || false) &&\n <Button data-id=\"header-org-selector-button\" type=\"ghost\" icon={<SettingOutlined />} onClick={this.orgSelectorOpen} className=\"header-org-selector-small\">\n {\n this.props.orgSelector.orgSelection.length > 0 &&\n <>\n <span className=\"pr-5\"></span>\n <Badge data-id=\"header-org-selector-badge-sub-orgs\" className={\"site-badge-count-4\" + (this.props.orgSelector.includeSuborgs ? \" org-selector-has-sub-orgs\" : \"\")} count={this.props.orgSelector.orgSelection.length} style={{ backgroundColor: '#108ee9', marginBottom: 4 }} />\n </>\n }\n </Button>\n }\n\n\n \n { this.props.orgSelector.orgSelection.length > 0 &&\n <>\n <Button className='header-stats-big' loading={ this.props.stats.loading } onClick={() => this.props.fleetStatsVisibility(!this.props.stats.visible)} style={{ marginLeft: 5, backgroundColor: this.props.stats.visible ? \"#33b5e5\" : \"\", color: this.props.stats.visible ? \"white\" : \"\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\" }} type=\"ghost\">\n <span className='btn-flOv'>Fleet Overview</span>\n </Button>\n \n {\n this.props.context.user.contextUserIsAdmin && this.props.context.appContext.orgId == 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' && \n <Badge count={this.props.stats.data.expiredGateways > 0 ? this.props.stats.data.expiringSoon > 0 ? 2 : 0 : 1} >\n <Button className='header-notifications-big' loading={this.props.stats.loading} onClick={() => this.props.notificationVisibility(!this.props.stats.visible)} style={{ marginLeft: 5, backgroundColor: this.props.notifications.visible ? \"#33b5e5\" : \"#e5a733\", color: this.props.notifications.visible ? \"white\" : \"\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\" }} type=\"ghost\">\n <BellOutlined className=\"wiggle btn-notification\" style={{ fontSize: \"19px\", color: 'white' }} />\n </Button>\n </Badge>\n }\n\n \n <Button className='header-stats-small' loading={ this.props.stats.loading } onClick={() => this.props.fleetStatsVisibility(this.props.stats.visible)} style={{backgroundColor: this.props.stats.visible ? \"#33b5e5\" : \"\", color: this.props.stats.visible ? \"white\" : \"\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\" }} icon={<Icon className=\"btn-flOv\" component={filterRemove} style={{fontSize: 20 }} />}/>\n </>\n }\n\n \n\n\n \n\n <OrgSelector />\n <UserMaint />\n <Terms \n visible={termsAndConditions !== null && termsAndConditions.hasOwnProperty(\"text\") && (termsAndConditions.text || \"\") !== \"\"} \n text={termsAndConditions !== null ? termsAndConditions.text : \"\"}\n />\n </div>\n <div>\n <TimeOutHandler/>\n </div>\n \n </div>\n \n </Col>\n\n {\n showBanner ? (\n <> <Col flex={100}>\n { true &&\n <>\n <div style={{ color: 'red', fontWeight: \"bold\", textAlign: \"center\" }} className=\"blink\">\n <WarningOutlined className=\"pr-1\"/>\n\n <span style={{ whiteSpace: 'pre-wrap', overflowWrap: 'break-word', fontSize: 15, }}>The new URL <a style={{ color: 'red', textDecoration: 'underline' }} href=\"https://mobileiot.parker.com\" target=\"_blank\" rel=\"noopener noreferrer\">mobileiot.parker.com</a> will be live starting 01/30/2025.</span> \n </div>\n </>\n }\n </Col></>):\"\"\n }\n\n {/*{<Col flex={100}>\n { true &&\n <>\n <Tooltip title=\"AT&T network is down nationwide in some areas. Some assets may not be accessible due to the AT&T outage.\"> \n <div className=\"danger-banner show-banner\">\n <WarningOutlined className=\"pr-1\"/>\n <span style={{whiteSpace: 'pre-wrap', overflowWrap: 'break-word', fontSize: 15}}> AT&T network is down nationwide in some areas. Some assets may not be accessible due to the AT&T outage.</span>\n </div>\n </Tooltip>\n </>\n }\n </Col> }*/}\n\n <Col flex={2}>\n\n <div className=\"header-right-content\">\n <span style={{ float: 'right' }} className=\"header-user padding-left-15px\">\n {/*\n OPS-968 \n contextUser !== null && \n (contextUser.avatarUploadSrc || \"\") !== \"\" && \n <>\n {\n (this.props.supportMode.orgId || \"\") === \"\" &&\n <a href=\"# \" onClick={(e) => { this.myProfile(e) }} data-id=\"header-avatar\">\n <Avatar src={appConfigs.server.URL + contextUser.avatarUploadSrc} size=\"small\" />\n </a>\n } \n {\n (this.props.supportMode.orgId || \"\") !== \"\" &&\n <Avatar src={appConfigs.server.URL + contextUser.avatarUploadSrc} size=\"small\" />\n } \n </>\n */}\n {\n contextUser !== null && (contextUser.fullName || \"\") !== \"\" &&\n <>\n <a href=\"# \" onClick={(e) => { this.myProfile(e) }} data-id=\"header-avatar\">\n <Avatar size=\"small\" icon={<UserOutlined />} />\n </a>\n <Dropdown data-id=\"header-user-menu\" className=\"header-name\" overlay={userMenu} trigger={['click']} placement=\"bottomRight\">\n <a href=\"# \" className=\"ant-dropdown-link\">\n <span className=\"header-user-full-name\">{contextUser.fullName}</span><DownOutlined />\n </a>\n </Dropdown>\n </>\n }\n </span>\n </div>\n\n </Col>\n\n \n </Row> \n </Header>\n {\n (this.props.supportMode.orgId || \"\") !== \"\" &&\n <Header className=\"header-support\">\n <Row>\n <Col xs={2} md={6}> \n <strong>\n <RightOutlined className=\"pr-5\"/>\n <span className=\"support-mode-small\">SUPPORT MODE</span>\n </strong>\n </Col>\n <Col xs={22} md={18} style={{ textAlign: \"right\"}}>\n <Tooltip title=\"Exit Support Mode\"> \n <Button\n type=\"link\"\n icon={<CloseCircleOutlined />}\n onClick={(e) => { this.supportModeUnSet(e) }}>\n <span>{ this.props.supportMode.orgName }</span>\n </Button>\n </Tooltip>\n </Col>\n </Row>\n </Header>\n }\n { /* \n <Header className=\"site-layout-background\">\n <Row>\n {<Col flex={100}>\n { true &&\n <>\n <Tooltip title=\"We are aware of the SMS notification issues, and actively working with our SMS provider on this matter. We hope to get this resolved soon.\"> \n <div className=\"danger-banner show-banner\">\n <WarningOutlined className=\"pr-2\"/> \n <span style={{fontSize: 13}}> We are aware of the SMS notification issues, and actively working with our SMS provider on this matter. We hope to get this resolved soon.</span>\n </div>\n </Tooltip>\n </>\n }\n </Col> } \n </Row>\n </Header>\n */}\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n supportMode: state.supportModeReducer,\n context: state.contextReducer.context,\n orgSelector: state.orgSelectorReducers.orgSelectorState.orgSelector,\n usersList: state.usersReducers.usersState.usersList,\n permissions: state.contextReducer.data,\n roleList: state.usersReducers.usersState.roleList,\n stats: state.contextReducer.stats,\n notifications: state.contextReducer.notifications,\n assetsList: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.assetsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n ...usersActions, \n ...orgSelectorActions \n }\n)(withOktaAuth(TopHeader));\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M346.5 240H272v-74.5c0-8.8-7.2-16-16-16s-16 7.2-16 16V240h-74.5c-8.8 0-16 6-16 16s7.5 16 16 16H240v74.5c0 9.5 7 16 16 16s16-7.2 16-16V272h74.5c8.8 0 16-7.2 16-16s-7.2-16-16-16z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M256 76c48.1 0 93.3 18.7 127.3 52.7S436 207.9 436 256s-18.7 93.3-52.7 127.3S304.1 436 256 436c-48.1 0-93.3-18.7-127.3-52.7S76 304.1 76 256s18.7-93.3 52.7-127.3S207.9 76 256 76m0-28C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48z\"\n});\n\nvar SvgAddDevice = function SvgAddDevice(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 512 512\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAddDevice, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/add-device.e3a9f2f6.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M344.058,207.506c-16.568,0-30,13.432-30,30v76.609h-254v-76.609c0-16.568-13.432-30-30-30c-16.568,0-30,13.432-30,30 v106.609c0,16.568,13.432,30,30,30h314c16.568,0,30-13.432,30-30V237.506C374.058,220.938,360.626,207.506,344.058,207.506z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M123.57,135.915l33.488-33.488v111.775c0,16.568,13.432,30,30,30c16.568,0,30-13.432,30-30V102.426l33.488,33.488 c5.857,5.858,13.535,8.787,21.213,8.787c7.678,0,15.355-2.929,21.213-8.787c11.716-11.716,11.716-30.71,0-42.426L208.271,8.788 c-11.715-11.717-30.711-11.717-42.426,0L81.144,93.489c-11.716,11.716-11.716,30.71,0,42.426 C92.859,147.631,111.855,147.631,123.57,135.915z\"\n}));\n\nvar SvgAddSoftware = function SvgAddSoftware(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"#000000\",\n height: \"800px\",\n width: \"800px\",\n id: \"Capa_1\",\n viewBox: \"0 0 374.116 374.116\",\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAddSoftware, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/add-software.925fc5db.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M263.2 710.5c13.8 0 25-11.2 25-25s-11.2-25-25-25c-82.6 0-149.8-67.2-149.8-149.8 0-82.6 67.2-149.8 149.8-149.8h0.1c14.9 0 27.2-12 27.5-26.9 1.2-58.1 24.8-112.6 66.3-153.3 41.6-40.8 96.6-63.3 154.9-63.3h0.4c58.3 0 113.3 22.5 154.9 63.3 41.5 40.7 65.1 95.2 66.3 153.3 0.3 14.9 12.6 26.9 27.5 26.9h0.1c82.6 0 149.8 67.2 149.8 149.8 0 82.6-67.2 149.8-149.8 149.8-13.8 0-25 11.2-25 25s11.2 25 25 25c110.2 0 199.8-89.6 199.8-199.8 0-103-78.3-188.1-178.6-198.7-6.2-63.3-34.1-122-80.1-167.1-51-50-118.5-77.6-189.9-77.6h-0.4c-71.5 0-138.9 27.6-189.9 77.6-46 45.1-74 103.8-80.1 167.1-100.2 10.6-178.6 95.7-178.6 198.7 0 110.2 89.7 199.8 199.8 199.8z\",\n fill: \"#dbdbdb\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M517.1 226c-49 0-88.9 39.9-88.9 88.9 0 40.4 27 74.5 63.9 85.4v371.1c-21.3 9.2-36.2 30.4-36.2 55.1 0 33.1 26.9 60 60 60s60-26.9 60-60c0-23.7-13.8-44.3-33.8-54V400.3c36.9-10.8 63.9-45 63.9-85.4 0-49-39.9-88.9-88.9-88.9z m0 127.9c-21.5 0-38.9-17.5-38.9-38.9s17.5-38.9 38.9-38.9S556 293.6 556 315s-17.5 38.9-38.9 38.9zM351.5 382.7c-33.1 0-60 26.9-60 60 0 25.9 16.4 48 39.5 56.4v308c0 18.9-15.4 34.4-34.4 34.4H259c-10.8-36.9-45-63.9-85.4-63.9-49 0-88.9 39.9-88.9 88.9s39.9 88.9 88.9 88.9c40.4 0 74.5-27 85.4-63.9h37.6c46.5 0 84.4-37.8 84.4-84.4V494.9c18.2-10.3 30.5-29.8 30.5-52.3 0-33.1-26.9-59.9-60-59.9zM173.6 905.4c-21.5 0-38.9-17.5-38.9-38.9s17.5-38.9 38.9-38.9 38.9 17.5 38.9 38.9-17.4 38.9-38.9 38.9zM853.5 777.5c-40.4 0-74.5 27-85.4 63.9h-37.6c-18.9 0-34.4-15.4-34.4-34.4V497.9c21.4-9.2 36.5-30.4 36.5-55.2 0-33.1-26.9-60-60-60s-60 26.9-60 60c0 23.6 13.7 44.1 33.5 53.9v310.5c0 46.5 37.8 84.4 84.4 84.4h37.6c10.8 36.9 45 63.9 85.4 63.9 49 0 88.9-39.9 88.9-88.9s-39.8-89-88.9-89z m0 127.9c-21.5 0-38.9-17.5-38.9-38.9s17.5-38.9 38.9-38.9 38.9 17.5 38.9 38.9-17.4 38.9-38.9 38.9z\",\n fill: \"#dbdbdb\"\n});\n\nvar SvgAiot = function SvgAiot(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n className: \"svg-icon\",\n style: {\n width: \"1em\",\n height: \"1em\",\n verticalAlign: \"middle\",\n fill: \"currentColor\",\n overflow: \"hidden\"\n },\n viewBox: \"0 0 1024 1024\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAiot, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/aiot.3913da9b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.73 21a2 2 0 0 1-3.46 0\"\n});\n\nvar SvgBell = function SvgBell(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"feather feather-bell\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBell, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/bell.86facacc.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M469.988,75c0-1.302-0.242-2.609-0.757-3.846l-25-60C442.678,7.427,439.037,5,435,5s-7.678,2.427-9.23,6.154l-25,60 c-0.516,1.237-0.757,2.544-0.757,3.846H400v340v40c0,5.523,4.478,10,10,10h50c5.522,0,10-4.477,10-10v-40V75H469.988z M435,41 l10,24h-20L435,41z M450,445h-30v-20h30V445z M450,405h-30V85h30V405z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M370,0H35c-5.523,0-10,4.477-10,10v30H10C4.477,40,0,44.477,0,50v410c0,5.523,4.477,10,10,10h320c5.522,0,10-4.477,10-10 v-30h30c5.522,0,10-4.477,10-10V10C380,4.477,375.522,0,370,0z M320,450H20V60h300V450z M360,410h-20V50c0-5.523-4.478-10-10-10 H45V20h315V410z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 40,\n y: 80,\n width: 65,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 40,\n y: 120,\n width: 65,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 95,\n y: 180,\n width: 205,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 40,\n y: 220,\n width: 260,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 40,\n y: 260,\n width: 260,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 40,\n y: 300,\n width: 260,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 40,\n y: 340,\n width: 260,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 40,\n y: 380,\n width: 215,\n height: 20\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 270,\n y: 380,\n width: 30,\n height: 20\n}))));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar SvgContracts = function SvgContracts(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 470 470\",\n style: {\n enableBackground: \"new 0 0 470 470\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgContracts, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/contracts.a160c643.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.000000,376.000000) scale(0.100000,-0.100000)\",\n fill: \"#fff\",\n stroke: \"none\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2411 2941 c-18 -32 8 -53 70 -56 30 -1 57 -3 60 -4 3 0 -25 -182 -62 -403 -38 -222 -68 -406 -69 -410 0 -5 -98 -8 -218 -8 l-218 0 -74 -75 -74 -75 -225 0 -225 0 -163 -163 -163 -163 0 -52 c0 -29 -3 -52 -7 -52 -4 0 -99 30 -210 67 -147 49 -206 64 -214 56 -17 -17 -319 -931 -313 -948 9 -23 53 -26 362 -23 l293 3 159 161 160 160 0 225 0 224 138 138 138 138 120 1 119 1 3 -50 3 -50 -51 -21 c-173 -72 -303 -213 -366 -397 -23 -67 -27 -97 -28 -185 0 -187 56 -322 189 -455 131 -131 263 -185 452 -185 120 0 220 27 321 87 58 34 176 145 198 186 10 17 34 18 374 17 l363 0 15 -23 c8 -12 48 -54 88 -94 79 -78 173 -131 279 -158 76 -19 234 -19 310 0 134 34 278 130 357 239 l28 39 115 1 c91 1 118 4 125 16 6 9 10 234 10 552 0 510 -1 538 -18 549 -10 6 -178 75 -373 153 l-354 142 -3 130 -3 129 76 75 c75 74 86 95 63 118 -24 24 -46 11 -131 -77 l-87 -88 0 -137 0 -136 -185 0 -185 0 2 412 3 413 61 1 c69 1 84 7 84 33 0 41 -2 41 -567 41 -519 0 -543 -1 -552 -19z m889 -257 c0 -152 -3 -194 -13 -194 -7 0 -178 -58 -380 -130 -202 -71 -373 -130 -381 -130 -10 0 0 75 40 318 30 174 54 320 54 324 0 7 656 17 673 10 4 -2 7 -91 7 -198z m2 -673 l-2 -401 -410 0 -410 0 0 208 c0 169 4 218 18 266 l18 59 164 58 c91 31 266 93 390 137 124 43 227 78 230 77 3 -2 4 -184 2 -404z m-902 -238 c0 -115 5 -215 10 -223 8 -13 69 -15 432 -18 233 -1 448 1 478 5 l55 8 3 218 2 217 209 0 208 0 351 -141 352 -141 0 -494 0 -494 -60 0 c-33 0 -60 3 -60 8 0 4 9 36 21 72 32 101 36 217 10 324 -31 127 -80 216 -173 308 -228 227 -576 250 -834 55 -73 -56 -120 -111 -168 -198 -47 -86 -63 -133 -76 -230 -13 -91 -2 -192 30 -285 l19 -54 -318 0 -317 0 22 68 c84 249 -6 537 -217 697 -127 96 -269 141 -416 132 l-83 -5 0 127 0 128 62 61 63 62 197 0 198 0 0 -207z m-600 27 l0 -40 -137 0 -138 0 -162 -162 -163 -163 0 -225 0 -226 -35 -34 -35 -34 0 320 0 319 138 137 137 138 195 3 c107 1 196 3 198 5 1 1 2 -16 2 -38z m-938 -342 l188 -63 0 -280 0 -279 -62 -63 -62 -63 -263 0 c-196 0 -263 3 -263 12 0 20 261 798 268 798 4 0 91 -28 194 -62z m1240 47 c197 -41 354 -188 416 -389 21 -70 21 -215 -2 -291 -56 -188 -201 -331 -386 -380 -30 -8 -95 -15 -143 -15 -225 0 -421 135 -508 352 -27 66 -37 227 -20 309 60 286 354 476 643 414z m1861 -16 c310 -104 458 -449 322 -747 -56 -123 -158 -220 -289 -275 -60 -26 -88 -31 -178 -35 -168 -7 -277 32 -398 144 -113 105 -170 237 -170 393 0 157 50 281 155 386 146 146 366 199 558 134z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1883 1210 c-198 -88 -203 -369 -8 -473 57 -31 173 -30 231 0 197 105 191 382 -11 474 -53 25 -156 24 -212 -1z m205 -97 c87 -64 95 -193 16 -267 -106 -98 -284 -17 -284 129 0 64 48 133 110 158 32 13 130 1 158 -20z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3692 1215 c-55 -24 -98 -63 -128 -117 -25 -46 -29 -64 -29 -128 0 -107 46 -183 140 -233 56 -30 174 -30 230 0 91 49 137 120 143 224 9 153 -102 270 -257 269 -37 -1 -81 -7 -99 -15z m203 -109 c116 -89 69 -274 -76 -301 -100 -19 -199 65 -199 169 0 50 40 117 86 144 55 32 137 27 189 -12z\"\n}));\n\nvar SvgKomatsu = function SvgKomatsu(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"513.000000pt\",\n height: \"376.000000pt\",\n viewBox: \"0 0 513.000000 376.000000\",\n preserveAspectRatio: \"xMidYMid meet\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgKomatsu, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/komatsu.38758a7e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12,\n cy: 10,\n r: 3\n});\n\nvar SvgMapPin = function SvgMapPin(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"feather feather-map-pin\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgMapPin, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/map-pin.b2f804bd.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m53.85 26.732h-33.7a2.283 2.283 0 0 1 -2.28-2.279v-2.464a2.283 2.283 0 0 1 2.28-2.281h33.7a2.283 2.283 0 0 1 2.28 2.281v2.464a2.283 2.283 0 0 1 -2.28 2.279zm-33.7-5.024a.281.281 0 0 0 -.28.281v2.464a.28.28 0 0 0 .28.279h33.7a.28.28 0 0 0 .28-.279v-2.464a.281.281 0 0 0 -.28-.281z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m52.837 21.712h-31.674a1 1 0 0 1 -1-1.031 16.778 16.778 0 0 1 12.167-15.63 1 1 0 0 1 .555 1.922 14.783 14.783 0 0 0 -10.655 12.739h29.54a14.783 14.783 0 0 0 -10.655-12.739 1 1 0 0 1 .555-1.922 16.778 16.778 0 0 1 12.166 15.63 1 1 0 0 1 -1 1.031z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m40.388 14.085a.976.976 0 0 1 -.142-.009 1 1 0 0 1 -.85-1.131l1.215-8.566a.332.332 0 0 0 -.329-.379h-6.564a.332.332 0 0 0 -.329.38l1.211 8.565a1 1 0 1 1 -1.981.281l-1.211-8.566a2.333 2.333 0 0 1 2.31-2.66h6.564a2.333 2.333 0 0 1 2.31 2.659l-1.215 8.567a1 1 0 0 1 -.989.859z\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m37 48.477a10.733 10.733 0 0 1 -5.824-1.714c-4.554-2.942-9.983-7.932-9.983-15v-6.031a1 1 0 0 1 1-1h29.614a1 1 0 0 1 1 1v6.033c0 7.066-5.429 12.056-9.983 15a10.733 10.733 0 0 1 -5.824 1.712zm-13.807-21.745v5.033c0 6.166 4.932 10.646 9.069 13.318a8.748 8.748 0 0 0 9.476 0c4.137-2.672 9.069-7.152 9.069-13.318v-5.033z\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m64.229 72h-54.458a1 1 0 0 1 -1-1 23.281 23.281 0 0 1 19.356-23.012 1 1 0 0 1 .816.222 31.327 31.327 0 0 0 3.194 2.356 8.966 8.966 0 0 0 9.728 0 31.362 31.362 0 0 0 3.192-2.355.993.993 0 0 1 .816-.222 23.279 23.279 0 0 1 19.356 23v.011a1 1 0 0 1 -1 1zm-53.435-2h52.412a21.275 21.275 0 0 0 -17.223-19.958 34.107 34.107 0 0 1 -3.03 2.2 10.978 10.978 0 0 1 -11.9 0 34.058 34.058 0 0 1 -3.032-2.2 21.275 21.275 0 0 0 -17.227 19.958z\"\n});\n\nvar SvgOperator = function SvgOperator(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"line_icons\",\n height: 512,\n viewBox: \"0 0 74 74\",\n width: 512,\n \"data-name\": \"line icons\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5, _ref6);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgOperator, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/operator.90ad8157.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M87,5H13c-2.2,0-4,1.8-4,4v82c0,2.2,1.8,4,4,4h20h34h20c2.2,0,4-1.8,4-4V9C91,6.8,89.2,5,87,5z M37,91V71h26v20H37z M67,91 V71c0-2.2-1.8-4-4-4H37c-2.2,0-4,1.8-4,4v20H13V9h74l0,82H67z M53,54c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S53,52.3,53,54z M69,54 c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S69,52.3,69,54z M37,22c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S37,20.3,37,22z M37,54 c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S37,52.3,37,54z M37,38c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S37,36.3,37,38z M53,22 c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S53,20.3,53,22z M53,38c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S53,36.3,53,38z M69,22 c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S69,20.3,69,22z M69,38c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S69,36.3,69,38z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"text\", {\n x: 0,\n y: 115,\n fill: \"#000000\",\n fontSize: \"5px\",\n fontWeight: \"bold\",\n fontFamily: \"'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif\"\n}, \"Created by IconMark\");\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"text\", {\n x: 0,\n y: 120,\n fill: \"#000000\",\n fontSize: \"5px\",\n fontWeight: \"bold\",\n fontFamily: \"'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif\"\n}, \"from the Noun Project\");\n\nvar SvgOrganization = function SvgOrganization(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 100 125\",\n style: {\n enableBackground: \"new 0 0 100 100\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgOrganization, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/organization.e7f17c9c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m119.1,294.6h9.1v21.1c0,11.3 9.1,20.4 20.4,20.4s20.4-9.1 20.4-20.3v-21.1h9.1c11.3,0 20.4-9.1 20.4-20.4 0-11.3-9.1-20.4-20.4-20.4h-9.1v-139.5c0-11.3-9.1-20.4-20.4-20.4s-20.4,9.1-20.4,20.4v139.4h-9.1c-11.3,0-20.4,9.1-20.4,20.4 1.42109e-14,11.3 9.1,20.4 20.4,20.4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m226.5,186.6h9.1v129.1c0,11.3 9.1,20.4 20.4,20.4s20.4-9.1 20.4-20.4v-129.1h9.1c11.3,0 20.4-9.1 20.4-20.4s-9.1-20.4-20.4-20.4h-9.1v-31.4c0-11.3-9.1-20.4-20.4-20.4s-20.4,9.1-20.4,20.4v31.4h-9.1c-11.3,0-20.4,9.1-20.4,20.4s9.1,20.4 20.4,20.4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m333.9,245.5h9.1v70.3c0,11.3 9.1,20.4 20.4,20.4 11.3,0 20.4-9.1 20.4-20.4v-70.3h9.1c11.3,0 20.4-9.1 20.4-20.4s-9.1-20.4-20.4-20.4h-9.1v-90.2c0-11.3-9.1-20.4-20.4-20.4-11.3,0-20.4,9.1-20.4,20.4v90.2h-9.1c-11.3,0-20.4,9.1-20.4,20.4s9.1,20.4 20.4,20.4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M480.6,11H31.4C20.2,11,11,20.1,11,31.4v367.4c0,11.3,9.1,20.4,20.4,20.4h204.1v41h-74c-11.3,0-20.4,9.1-20.4,20.4 s9.1,20.4,20.4,20.4h188.9c11.3,0,20.4-9.1,20.4-20.4s-9.1-20.4-20.4-20.4h-74v-41h204.1c11.3,0,20.4-9.1,20.4-20.4V31.4 C501,20.1,491.8,11,480.6,11z M460.1,378.4H51.9V51.8h408.3V378.4z\"\n})));\n\nvar SvgSettingsAdmin = function SvgSettingsAdmin(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 512 512\",\n enableBackground: \"new 0 0 512 512\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgSettingsAdmin, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/settings-admin.b8a184dc.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15,22a1,1,0,0,1-1-1c0-2.32,1.09-3.42,2.47-4.81l.69-.7c2.12-2.22,2.78-3.39,1.33-4.84a3.76,3.76,0,0,0-4.18-.94c-.85.35-1.31.93-1.31,1.29a1,1,0,0,1-2,0,3.69,3.69,0,0,1,2.54-3.14A5.78,5.78,0,0,1,19.9,9.24c3.07,3.06.23,6-1.3,7.63-.24.26-.48.5-.71.73C16.63,18.87,16,19.51,16,21A1,1,0,0,1,15,22Zm.71,2.71A1,1,0,0,0,16,24a1,1,0,1,0-2,0,1,1,0,0,0,1.71.71ZM30,16A14,14,0,1,0,16,30,14,14,0,0,0,30,16Zm-2,0A12,12,0,1,1,16,4,12,12,0,0,1,28,16Z\",\n \"data-name\": \"36-FAQ\"\n});\n\nvar SvgSupport = function SvgSupport(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgSupport, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/support.178a618e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"0460FF20-FA54-45E2-A9A2-0967C05B1244\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with sketchtool.\");\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Admin\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Notifications\",\n transform: \"translate(-34.000000, -181.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"left-rail-collapsed\",\n transform: \"translate(-1.000000, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Tractor\",\n transform: \"translate(35.000000, 182.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.137931, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"line\", {\n x1: 0.862068966,\n y1: 19.3103448,\n x2: 3.62068966,\n y2: 8.27586207,\n id: \"Line-2\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.0344828,8.27586207 L16.0342667,8.9180942 C14.7730629,10.1912715 13.9655172,12.0508688 13.9655172,13.7931034 C13.9655172,14.6865216 14.1778726,15.6441517 14.5548624,16.5515335 L10.5172414,16.5517241 L10.5172414,16.5517241 C10.5172414,15.02818 9.28216483,13.7931034 7.75862069,13.7931034 L7.75862069,9.79489126 L9.31034483,8.27586207 L16.0344828,8.27586207 Z\",\n id: \"Combined-Shape-Copy-3\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.5,\n strokeLinejoin: \"round\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-31\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.5,\n cx: 7.75862069,\n cy: 16.8965517,\n r: 2.75862069\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-32\",\n fill: \"#FFFFFF\",\n cx: 7.75862069,\n cy: 16.8965517,\n r: 1\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.5517241,3.10344828 L21.5517665,9.02175305 C20.9128368,8.76311467 20.2144303,8.62068966 19.4827586,8.62068966 C18.5137895,8.62068966 17.6031617,8.87047888 16.8117555,9.30917724 L16.0344828,9.31034483 L16.0344828,4.33677936 L17.4137931,3.10344828 L21.5517241,3.10344828 Z\",\n id: \"Combined-Shape\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.5,\n strokeLinejoin: \"round\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-33\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.5,\n cx: 19.4827586,\n cy: 14.137931,\n r: 5.51724138\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-34\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.5,\n cx: 19.4827586,\n cy: 14.137931,\n r: 1.37931034\n}), /*#__PURE__*/React.createElement(\"line\", {\n x1: 16.0344828,\n y1: 0.344827586,\n x2: 22.9310345,\n y2: 0.344827586,\n id: \"Line-3-Copy-10\",\n stroke: \"#FFFFFF\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\"\n}))))));\n\nvar SvgTractor = function SvgTractor(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"14px\",\n height: \"14px\",\n viewBox: \"0 0 26 22\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3, _ref4);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTractor, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tractor.c81af35c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"update\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.9,61.57a5.36,5.36,0,0,1,10.71,0A61.3,61.3,0,0,1,17.54,104.48v12.35a5.36,5.36,0,0,1-10.72,0V89.31A5.36,5.36,0,0,1,12.18,84H40a5.36,5.36,0,1,1,0,10.71H23a50.6,50.6,0,0,0,88.87-33.1ZM106.6,5.36a5.36,5.36,0,1,1,10.71,0V33.14A5.36,5.36,0,0,1,112,38.49H84.44a5.36,5.36,0,1,1,0-10.71H99A50.6,50.6,0,0,0,10.71,61.57,5.36,5.36,0,1,1,0,61.57,61.31,61.31,0,0,1,91.07,8,61.83,61.83,0,0,1,106.6,20.27V5.36Z\"\n});\n\nvar SvgUpdateSoftware = function SvgUpdateSoftware(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n \"data-name\": \"Layer 1\",\n viewBox: \"0 0 122.61 122.88\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgUpdateSoftware, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/update-software.18b36f91.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 9,\n cy: 7,\n r: 4\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23 21v-2a4 4 0 0 0-3-3.87\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 3.13a4 4 0 0 1 0 7.75\"\n});\n\nvar SvgUsers = function SvgUsers(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"feather feather-users\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgUsers, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/users.fcd0300a.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m482 205.667969v25.269531h-33.730469v-18.445312l-38.097656-47.222657h-27.496094v-51.871093h-87.921875v-25.398438h42.578125v-88h-187.332031v88h42.578125v25.398438h-59.835937v42.378906h-74.929688v61.539062h-27.8125v-34.125h-30v98.25h30v-34.125h27.8125v72.324219h86.214844l37.65625 41.570313h266.585937v-24.3125h33.730469v24.101562h30v-155.332031zm-129.324219-62.269531v51.871093h43.152344l22.441406 27.816407v108.125h-195.691406v-187.8125zm-172.675781-85.398438v-28h127.332031v28zm42.578125 30h42.175781v25.398438h-42.175781zm-134.765625 97.777344h44.929688v103.863281h-44.929688zm74.929688 109.835937v-152.214843h29.835937v185.15625zm285.527343 11.285157v-45.960938h33.730469v45.960938zm0 0\"\n});\n\nvar Svg035Motor = function Svg035Motor(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: \"512pt\",\n viewBox: \"0 -75 512 512\",\n width: \"512pt\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(Svg035Motor, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/035-motor.e8c38fd1.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"tools-measures-service-mechanic-repair\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"bg\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"outline\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n x: 11,\n y: 20,\n width: 2,\n height: 24\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2,51.918A10,10,0,1,0,17,43.2V20.276A10.1,10.1,0,0,0,15.336,2.059,1,1,0,0,0,14,3v7.554H10V3a1,1,0,0,0-1.336-.941A9.919,9.919,0,0,0,5.33,4.053,10.11,10.11,0,0,0,7,20.276V43.2A10.034,10.034,0,0,0,2,51.918ZM8.449,18.787A8.1,8.1,0,0,1,8,4.563v6.991a1,1,0,0,0,1,1h6a1,1,0,0,0,1-1V4.564a8.106,8.106,0,0,1-.449,14.223,1,1,0,0,0-.551.894v24.11a1,1,0,0,0,.551.894,8,8,0,1,1-7.1,0A1,1,0,0,0,9,43.791V19.681A1,1,0,0,0,8.449,18.787Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.2,52.6l3,4a1,1,0,0,0,.8.4h4a1,1,0,0,0,.8-.4l3-4a1,1,0,0,0,0-1.2l-3-4A1,1,0,0,0,14,47H10a1,1,0,0,0-.8.4l-3,4A1,1,0,0,0,6.2,52.6ZM10.5,49h3l2.25,3L13.5,55h-3L8.25,52Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59,35.838V33a1,1,0,0,0-1-1V27a1,1,0,0,0-.232-.641l-1.487-1.785A6.988,6.988,0,0,0,58,20V13a1,1,0,0,0-.1-.447l-5-10A1,1,0,0,0,52,2H48a1,1,0,0,0-.9.553l-5,10A1,1,0,0,0,42,13v7a6.982,6.982,0,0,0,1.72,4.574l-1.488,1.785A1,1,0,0,0,42,27v5a1,1,0,0,0-1,1v2.838l-2.949,8.846A1,1,0,0,0,38,45V58a4,4,0,0,0,8,0V45.162l2.949-8.846A1,1,0,0,0,49,36V33a1,1,0,0,0-1-1V29.3L49.535,27h.93L52,29.3V32a1,1,0,0,0-1,1v3a1,1,0,0,0,.051.316L54,45.162V58a4,4,0,0,0,8,0V45a1,1,0,0,0-.051-.316ZM51,4h.382L56,13.236V20a4.989,4.989,0,0,1-1.018,3.016L53,20.64c.064-.072.113-.155.171-.232s.129-.165.187-.254a3.936,3.936,0,0,0,.211-.389c.045-.089.095-.175.133-.269a3.983,3.983,0,0,0,.148-.476c.022-.083.053-.161.07-.246A4.031,4.031,0,0,0,54,18a3.949,3.949,0,0,0-.076-.75c-.015-.079-.04-.154-.06-.231a3.933,3.933,0,0,0-.147-.473c-.034-.085-.073-.167-.112-.249a3.953,3.953,0,0,0-.217-.4c-.049-.078-.1-.154-.152-.229a4.044,4.044,0,0,0-.3-.358c-.057-.062-.11-.126-.171-.185a3.841,3.841,0,0,0-.429-.354c-.043-.031-.08-.068-.125-.1a4,4,0,0,0-.628-.341c-.062-.027-.128-.043-.192-.067a3.762,3.762,0,0,0-.4-.138Zm1,14a2,2,0,1,1-2-2A2,2,0,0,1,52,18ZM47,35.838l-2.949,8.846A1,1,0,0,0,44,45V58a2,2,0,0,1-4,0V45.162l2.949-8.846A1,1,0,0,0,43,36V34h4Zm-.832-7.393A1.006,1.006,0,0,0,46,29v3H44V27.362l1.227-1.471c.02.013.043.021.064.034a7.081,7.081,0,0,0,.859.459c.051.022.1.044.153.065a6.879,6.879,0,0,0,.929.319c.015,0,.029.011.044.015Zm5.664-3A1,1,0,0,0,51,25H49a5.012,5.012,0,0,1-5-5V13.236L48.618,4H49V14.127a3.762,3.762,0,0,0-.4.138c-.064.024-.13.04-.192.067a4,4,0,0,0-.628.341c-.045.03-.082.067-.125.1a3.841,3.841,0,0,0-.429.354c-.061.059-.114.123-.171.185a4.044,4.044,0,0,0-.3.358c-.054.075-.1.151-.152.229a3.953,3.953,0,0,0-.217.4c-.039.082-.078.164-.112.249a3.933,3.933,0,0,0-.147.473c-.02.077-.045.152-.06.231A3.949,3.949,0,0,0,46,18a4,4,0,0,0,4,4h1.532l2.635,3.163L56,27.362V32H54V29a1.006,1.006,0,0,0-.168-.555ZM60,58a2,2,0,0,1-4,0V45a1,1,0,0,0-.051-.316L53,35.838V34h4v2a1,1,0,0,0,.051.316L60,45.162Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26,28H25a1,1,0,0,0-1,1v4a1,1,0,0,0,1,1h3V52.838l-.949,2.846a.989.989,0,0,0-.031.512l1,5A1,1,0,0,0,29,62h4a1,1,0,0,0,.98-.8l1-5a.989.989,0,0,0-.031-.512L34,52.838V34h3a1,1,0,0,0,1-1V29a1,1,0,0,0-1-1H36a1,1,0,0,1,0-2h1a1,1,0,0,0,1-1V9a6.951,6.951,0,0,0-.4-2.313l0-.021c0-.013-.012-.025-.016-.038a7.014,7.014,0,0,0-.974-1.8c-.027-.037-.054-.074-.082-.11a7.073,7.073,0,0,0-.652-.732l-.062-.056a6.9,6.9,0,0,0-.728-.6c-.023-.017-.045-.035-.069-.052a7.032,7.032,0,0,0-.844-.506c-.036-.019-.073-.035-.11-.053a6.876,6.876,0,0,0-.909-.372l-.013-.005a6.986,6.986,0,0,0-.952-.228c-.066-.011-.131-.021-.2-.03a6.271,6.271,0,0,0-1.972,0c-.066.009-.131.018-.2.03a6.986,6.986,0,0,0-.952.228l-.013,0a6.881,6.881,0,0,0-.909.373c-.037.018-.074.034-.11.053a7.032,7.032,0,0,0-.844.506c-.024.017-.046.035-.069.052a6.9,6.9,0,0,0-.728.6l-.062.056a7.106,7.106,0,0,0-.653.733c-.027.035-.054.072-.081.108a7.02,7.02,0,0,0-.974,1.8c0,.013-.012.025-.016.038l0,.021A6.951,6.951,0,0,0,24,9V25a1,1,0,0,0,1,1h1a1,1,0,0,1,0,2Zm6.18,32H29.82l-.787-3.936.916-2.748A1,1,0,0,0,30,53V34h2V53a1,1,0,0,0,.051.316l.916,2.748ZM27.422,5.519c.048-.049.1-.093.149-.14a5.188,5.188,0,0,1,.543-.448c.044-.031.085-.066.13-.1a5.032,5.032,0,0,1,.7-.383c.066-.03.133-.06.2-.087a4.915,4.915,0,0,1,.781-.243c.056-.013.113-.02.169-.031a4.506,4.506,0,0,1,1.8,0c.056.011.113.018.169.031a4.915,4.915,0,0,1,.781.243c.068.027.135.057.2.087a5.032,5.032,0,0,1,.7.383c.045.03.086.065.13.1a5.188,5.188,0,0,1,.543.448c.049.047.1.091.149.14a4.935,4.935,0,0,1,.4.481H27.026A4.935,4.935,0,0,1,27.422,5.519ZM26,24V9a5,5,0,0,1,.1-1h9.8A5,5,0,0,1,36,9V24a3,3,0,0,0,0,6v2H26V30a3,3,0,0,0,0-6Z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 30,\n y: 10,\n width: 2,\n height: 14\n}));\n\nvar SvgToolsMeasuresServiceMechanicRepair = function SvgToolsMeasuresServiceMechanicRepair(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3, _ref4);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgToolsMeasuresServiceMechanicRepair, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tools-measures-service-mechanic-repair.a018b02b.svg\";\nexport { ForwardRef as ReactComponent };","import Icon, {\n BarChartOutlined,\n CloudServerOutlined,\n FieldTimeOutlined,\n FormOutlined,\n FundOutlined,\n FundProjectionScreenOutlined,\n IdcardOutlined,\n MenuFoldOutlined,\n MenuUnfoldOutlined,\n PlayCircleOutlined,\n SettingOutlined,\n SnippetsOutlined\n} from \"@ant-design/icons\";\nimport { Button, Layout, Menu } from \"antd\";\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { ReactComponent as AddDeviceIcon } from \"../assets/images/add-device.svg\";\nimport { ReactComponent as AddSoftwareIcon } from \"../assets/images/add-software.svg\";\nimport { ReactComponent as AIOTIcon } from \"../assets/images/aiot.svg\";\nimport { ReactComponent as BellIcon } from \"../assets/images/bell.svg\";\nimport { ReactComponent as ContractsIcon } from \"../assets/images/contracts.svg\";\nimport { ReactComponent as Komatsu } from \"../assets/images/komatsu.svg\";\nimport { ReactComponent as MapIcon } from \"../assets/images/map-pin.svg\";\nimport { ReactComponent as OperatorIcon } from \"../assets/images/operator.svg\";\nimport { ReactComponent as OrganizationIcon } from \"../assets/images/organization.svg\";\nimport { ReactComponent as AdminSettingsIcon } from \"../assets/images/settings-admin.svg\";\nimport { ReactComponent as SupportIcon } from \"../assets/images/support.svg\";\nimport { ReactComponent as TractorIcon } from \"../assets/images/tractor.svg\";\nimport { ReactComponent as UpdateSoftwareIcon } from \"../assets/images/update-software.svg\";\nimport { ReactComponent as UsersIcon } from \"../assets/images/users.svg\";\nimport { ReactComponent as ControllerIcon } from \"../assets/images/vehicle-icons/maintenance/035-motor.svg\";\nimport { ReactComponent as AppsIcon } from \"../assets/images/vehicle-icons/maintenance/tools-measures-service-mechanic-repair.svg\";\nimport \"./leftSider.css\";\n\nimport { connect } from \"react-redux\";\nimport * as rootActions from \"../actions\";\n\nimport { getPermissions, getToken } from \"../utils/commonHelpers\";\nimport { appConfigs } from \"../utils/configurations\";\nimport history from '../utils/history';\n\nconst { Sider,Header } = Layout;\nconst { SubMenu } = Menu;\n\ninterface Prop {\n context: any,\n orgReportAccess: any,\n supportMode: any,\n userOrgAccess: any,\n permissions: any\n}\n\ninterface State {\n collapsed: boolean,\n selection: string\n}\n\nclass LeftSider extends React.Component<Prop, State> {\n\n state = {\n collapsed: false,\n selection: \"\"\n };\n \n componentDidMount() {\n this.setState({\n selection: \"/\" + window.location.pathname.split(\"/\")[1]\n });\n\n history.listen((event: any) => {\n if ((event.pathname || \"\") !== \"\") {\n const pathname = event.pathname.split(\"/\");\n let finalPathname = pathname[1].toLowerCase();\n\n switch (finalPathname) {\n case \"template\":\n finalPathname = \"templates\";\n break;\n default:\n }\n\n if (\"countries#templates#users#organizations#assets#alerts#map#refresh#not-found#operators#geo#roles#reportschedules#tutorials#controllers#admin#ota#videotutorials#iqanopen#releasenotes#userguide#questionmanagement#operatorsmanagement#operatorshistory#danareports\".indexOf(finalPathname) === -1) {\n console.log(\"Not found 404:\" + finalPathname)\n history.push(\"/not-found\")\n }\n\n this.setState({\n selection: \"/\" + finalPathname\n });\n }\n });\n\n }\n\n onCollapse = (collapsed: boolean) => {\n this.setState({ collapsed });\n\n };\n\n goToReport=(selectedOrgId:any,supportmode:any)=>{\n let token = getToken();\n let reportURL = `${appConfigs.server.reportServerURL}?OrgId=${selectedOrgId}&supportmode=${supportmode}&token=${token.value||token.idToken}`;\n const win = window.open(reportURL, \"_blank\");\n win?.focus();\n }\n\n render() {\n\n const { user: contextUser, orgSettings, appContext, initialized: contextInitialized } = this.props.context;\n //Getting Users list for Left side bar menu access\n let contractsUsersList = this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'contracts')[0]?.usersList;\n let controllersUsersList = this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'controllers')[0]?.usersList;\n let aiotUsersList = this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'aiot')[0]?.usersList;\n let applicationsUsersList = this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'applications')[0]?.usersList;\n let contractsOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'contracts')[0]?.orgsList;\n let applicationsOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'applications')[0]?.orgsList;\n let aiotOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'aiot')[0]?.orgsList;\n let controllersOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'controllers')[0]?.orgsList;\n let iqanopenOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'iqanopen')[0]?.orgsList;\n let iqanopenUsersList = this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'iqanopen')[0]?.usersList;\n\n let orgReportAccess = this.props.orgReportAccess ? true : false;\n let isAdmin = this.props.context.user.contextUserIsAdmin;\n let isUserAdminToOrg = this.props.userOrgAccess ? true : false;\n //getting permissions for reports to enable reports menu for users.\n const reportPermissions = getPermissions(this.props.permissions.permissions.reports);\n const assetPermissions = getPermissions(this.props.permissions.permissions.assets);\n const userPermissions = getPermissions(this.props.permissions.permissions.users);\n const rolePermissions = getPermissions(this.props.permissions.permissions.role_settings);\n const templatePermissions = getPermissions(this.props.permissions.permissions.templates);\n const orgPermissions = getPermissions(this.props.permissions.permissions.org_options);\n const dm1Permissions = getPermissions(this.props.permissions.permissions.dm1_settings);\n const alertPermissions = getPermissions(this.props.permissions.permissions.alert_settings);\n const oprPermission = getPermissions(this.props.permissions.permissions.operator_support);\n \n //report access logic for barko_guest\n // \n\n // let isBarko = false;\n // if(this.props.context.appContext.roleName.toLowerCase() === \"barko_guest\"){\n // const barkoId = '17ad9f98-33df-48a0-8c4f-99468e22e129';\n // for(let i=0; i<this.props.context.user.homeOrg.orgTree.length; i++){ \n // if(this.props.context.user.homeOrg.orgTree[i].orgId === barkoId){\n // isBarko = true;\n // }\n // }\n // } \n\n //let reportAccess = ((isAdmin || reportPermissions[1]) && orgReportAccess && (isUserAdminToOrg || isBarko));\n \n // Reports can access by admins / users with report permission AND org should have access to reports\n let reportAccess = ((isAdmin || reportPermissions[1]) && orgReportAccess);\n let selectedOrgId = this.props.context.appContext.orgId;\n\n //let oktaStorage = window.localStorage.getItem(\"okta-token-storage\") || \"\";\n let supportModeString: string = window.sessionStorage.getItem(\"support-mode\") || \"{}\";\n let supportmode = false;\n if (supportModeString !== \"{}\") {\n supportmode = true;\n }\n\n const href = window.location.href.toLowerCase();\n let showHelp = true;\n if (href.includes(appConfigs.server.claytonServerURL.toLowerCase()) ||\n href.includes(appConfigs.server.hoistServerURL.toLowerCase()) ||\n href.includes(appConfigs.server.toyotaServerURL.toLowerCase())) \n {\n showHelp = false;\n } \n\n // let token = getToken();\n // let reportURL = `${appConfigs.server.reportServerURL}?OrgId=${selectedOrgId}&supportmode=${supportmode}&token=${token.value||token.idToken}`;\n return (\n <div>\n <Sider trigger={null} \n style={{ \n overflow: 'auto',\n height: '100vh',\n left: 0,\n }}\n breakpoint=\"md\"\n // collapsedWidth=\"100\"\n collapsible\n collapsed={this.state.collapsed}\n onCollapse={this.onCollapse}\n >\n { <div style={{ display: \"flex\" }}> <Button\n type=\"text\"\n icon={this.state.collapsed ? <MenuUnfoldOutlined style={{color:\"white\"}} /> : <MenuFoldOutlined style={{color:\"white\"}} />}\n onClick={() =>this.state.collapsed ? this.setState({ collapsed:false }) : this.setState({ collapsed:true })}\n style={{\n fontSize: '16px',\n width: 64,\n height: 20,\n marginLeft: \"auto\"\n }}\n /></div>\n }\n {\n this.props.context.orgSettings.logo &&\n <Link to=\"/map\">\n {this.state.collapsed ? <img style={{width:\"50%\"}} src={appConfigs.server.URL + orgSettings.logo} className=\"div-organization-logo\" alt=\"\" />\n : <img src={appConfigs.server.URL + orgSettings.logo} className=\"div-organization-logo\" alt=\"\" />}\n </Link>\n }\n <div className=\"sider-content\">\n {\n \n (contextInitialized || false) &&\n <Menu\n theme=\"dark\"\n selectedKeys={[\n this.state.selection\n ]}\n mode=\"inline\"\n id=\"topMenu\"\n >\n \n \n <Menu.Item data-id=\"left-side-menu-map\" key=\"/map\" className=\"menuItem\">\n {this.state.collapsed ? <Link to={{ pathname: \"/map\" }} >\n <Icon type=\"setting\" component={MapIcon} />\n \n </Link> : <Link to={{ pathname: \"/map\" }} >\n <Icon type=\"setting\" component={MapIcon} />\n Map\n </Link>}\n {/* <Link to=\"/map\">\n {this.state.collapsed ? <Icon type=\"setting\" component={BellIcon} /> : <Icon type=\"setting\" component={MapIcon} /> } \n \n </Link> */}\n </Menu.Item>\n \n {\n (isAdmin || alertPermissions[1]) &&\n <Menu.Item data-id=\"left-side-menu-alerts\" key=\"/alerts\" className=\"menuItem\">\n {this.state.collapsed ? <Link to={{ pathname: \"/alerts\" }} >\n <Icon type=\"setting\" component={BellIcon} />\n \n </Link> :\n <Link to={{ pathname: \"/alerts\" }} >\n <Icon type=\"setting\" component={BellIcon} />\n Alerts\n </Link>}\n </Menu.Item>\n }\n {\n (isAdmin || assetPermissions[1]) &&\n <Menu.Item data-id=\"left-side-menu-assets\" key=\"/assets\" className=\"menuItem\">\n <Link to=\"/assets\">\n {this.state.collapsed ? \n (this.props.context.appContext.orgId == '616c4c61-865d-11eb-871a-13cc80610287') ? (\n <>\n <Icon type=\"setting\" component={Komatsu} style={{marginLeft: '-5px', verticalAlign: \"middle\", fontSize: \"25px\" }} />\n <span style={{ marginLeft: '-9px' }}> </span>\n </>\n ) : (\n <>\n <Icon type=\"setting\" component={TractorIcon} />\n \n </>\n )\n : \n (this.props.context.appContext.orgId == '616c4c61-865d-11eb-871a-13cc80610287') ? (\n <>\n <Icon type=\"setting\" component={Komatsu} style={{marginLeft: '-5px', verticalAlign: \"middle\", fontSize: \"25px\" }} />\n <span style={{ marginLeft: '-9px' }}> Assets </span>\n </>\n ) : (\n <>\n <Icon type=\"setting\" component={TractorIcon} />\n Assets\n </>\n )\n }\n </Link>\n </Menu.Item>\n }\n {\n (isAdmin) && (appConfigs.app.enableCumminsUI) &&\n (\n this.props.context.appContext.userId === 'ce3bb3a0-9619-11eb-87b2-239c76a096d7' || // muaz - dev\n this.props.context.appContext.userId === 'a9d07dc0-1257-11eb-949d-3f27d8f5ffc0' || // Will - dev\n this.props.context.appContext.userId === '150a5ea0-bf0b-11ed-b524-5f3c8839e6fa' || // Polash - dev\n this.props.context.appContext.userId === '6eb1fbc0-0ffe-11eb-b4af-c7f0a7c1b411' || // ying - dev\n this.props.context.appContext.userId === 'cad29b40-1d5f-11ea-abaa-a34583f0c422' || // Ravi Teja - Dev\n this.props.context.appContext.userId === '83cc2900-0b6d-11ee-b4fd-3306c58aa61b' || // Vanaja - dev\n this.props.context.appContext.userId === '152bd120-309b-11ec-bc2d-bb7291a0ceba' || // Raja - dev\n this.props.context.appContext.userId === 'ba085340-afa0-11ee-b3af-9f9a6f95957b' || // Rupa dev\n this.props.context.appContext.userId === '52f11900-5f65-11eb-9e05-ef71659b2f26' || // Sanath dev\n this.props.context.appContext.userId === '36a33e20-d65b-11ee-8c16-df16b4074be9' || // Satya - dev Cummins\n this.props.context.appContext.userId === '6554fa60-d65b-11ee-bd59-df284d80dc48' || // Abishek - dev Cummins\n this.props.context.appContext.userId === '054dda40-59ab-11eb-8ee0-bfaf65ef3261' || // msgiotdevuser18 - dev\n this.props.context.appContext.userId === '83c69fa0-5f65-11eb-8d03-678698c2e948' ||\t// sanath stage\n this.props.context.appContext.userId === 'a676c7c0-f69e-11eb-9313-f316c04c8311' ||\t// Ravi stage Parker \n this.props.context.appContext.userId === '8279a1a0-62fd-11ec-8f8f-53c130199102' || \t// Raja hekhar tage \n this.props.context.appContext.userId === 'fee680c0-9619-11eb-9d03-1f19554fcd07' || \t// Muaz stage\n this.props.context.appContext.userId === 'a5c3cb80-2b37-11eb-ada0-d3b3466952a6' || \t// Ying stage \n this.props.context.appContext.userId === 'a1e98d00-00f5-11ef-a551-2ba2814d1b76' || // Will stage\n this.props.context.appContext.userId === '163372c0-00f6-11ef-a2d9-23ab13c6deef' || // Polash stage Polash\n this.props.context.appContext.userId === '5868cc00-dbc4-11ee-9edf-7b6889274e51' || // Rupa stage\n this.props.context.appContext.userId === '3bf339c0-599f-11eb-b6ef-0754ed297eb6' ||// msgiotdevuser18 stage\n this.props.context.appContext.userId === 'f1a89780-070a-11ef-9b78-6b2fd5b0ce17' || // Satya stage Cummins\n this.props.context.appContext.userId === 'dc197ce0-070a-11ef-b25e-43b0aa52711a' || // Abishek stage Cummins\n this.props.context.appContext.userId === 'fd45a120-111f-11ec-8780-b750def983cc' || // msgiotdevuser15 Satya stage Cummins temp\n this.props.context.appContext.userId === '6c76fee0-3bfb-11eb-b5b5-ab15846f8785' // msgiotdevuser18 Abishek stage Cummins temp\n ) && \n <Menu.Item data-id=\"left-side-menu-csu\" key=\"/ota\" className=\"menuItem\">\n {this.state.collapsed ? <Link to=\"/ota\">\n <Icon type=\"setting\" component={TractorIcon} />\n \n </Link> : <Link to=\"/ota\">\n <Icon type=\"setting\" component={TractorIcon} />\n CSU \n </Link>}\n </Menu.Item>\n }\n {\n (this.props.context.appContext.userId === '21ced2c0-3db9-11ed-9280-db679e967b72' ||\n this.props.context.appContext.userId === '5664e840-6694-11ed-b5d8-976680d8c775' || \n this.props.context.appContext.userId === 'ce3bb3a0-9619-11eb-87b2-239c76a096d7' || //muaz\n this.props.context.appContext.userId === '1e9aa720-961a-11eb-bc08-ff40daac93b5' || \n this.props.context.appContext.userId === '25c1ec40-2bab-11eb-9f2e-2fc8ff0a0080' || \n this.props.context.appContext.userId === '6eb1fbc0-0ffe-11eb-b4af-c7f0a7c1b411' || // ying\n this.props.context.appContext.userId === '70c429b0-91a7-11e8-af90-51d20134150b' ||\n this.props.context.appContext.userId === '70c429b0-91a7-11e8-af90-51d20134150b' ||\n this.props.context.appContext.userId === '8d6bb5c0-1a34-11eb-a02f-2f84f79acdc7' ||\n this.props.context.appContext.userId === 'cad29b40-1d5f-11ea-abaa-a34583f0c422' || // Ravi Teja - Dev\n this.props.context.appContext.userId === 'afa49c60-e70b-11ec-bc58-63ef25306e1e' || // Ravi Teja \n this.props.context.appContext.userId === 'dba0aa40-5e6c-11ea-8269-67263d3b9573' || // Marcel \n this.props.context.appContext.userId === '83cc2900-0b6d-11ee-b4fd-3306c58aa61b' || // Vanaja - dev\n this.props.context.appContext.userId === '152bd120-309b-11ec-bc2d-bb7291a0ceba' || // Raja - dev\n this.props.context.appContext.userId === '70c429b0-91a7-11e8-af90-51d20134150b' || // Syed\n this.props.context.appContext.userId === '2fa250e0-931f-11ee-b300-63d17ef479fc' || // Lavanya K\n this.props.context.appContext.userId === 'da915c00-d3c9-11ed-92c5-b79e53de7502' || // Rupa prod\n this.props.context.appContext.userId === 'ba085340-afa0-11ee-b3af-9f9a6f95957b' || // Rupa dev\n this.props.context.appContext.userId === 'a44d5840-5f65-11eb-818b-7f8b88f38ec0' || // Sanath prod\n this.props.context.appContext.userId === '52f11900-5f65-11eb-9e05-ef71659b2f26' // Sanath dev\n ) &&\n (\n controllersUsersList == null\n ? false\n : controllersUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n ) &&\n <Menu.Item data-id=\"left-side-menu-user-controllers\" key=\"/controllers\">\n {this.state.collapsed ? <Link to=\"/controllers\">\n <Icon type=\"controllers\" component={ControllerIcon} />\n \n </Link> : <Link to=\"/controllers\">\n <Icon type=\"controllers\" component={ControllerIcon} />\n Controllers\n </Link>}\n </Menu.Item>\n }\n {\n (isAdmin || orgPermissions[1]) &&\n <Menu.Item data-id=\"left-side-menu-organizations\" key=\"/organizations\" className=\"menuItem\">\n {this.state.collapsed ? <Link to=\"/organizations\">\n <Icon type=\"setting\" component={OrganizationIcon} />\n \n </Link> : <Link to=\"/organizations\">\n <Icon type=\"setting\" component={OrganizationIcon} />\n Organizations\n </Link>}\n </Menu.Item>\n }\n {\n (isAdmin || userPermissions[1]) &&\n <Menu.Item data-id=\"left-side-menu-users\" key=\"/users\" className=\"menuItem\">\n {this.state.collapsed ? <Link to=\"/users\">\n <Icon type=\"setting\" component={UsersIcon} />\n \n </Link> : <Link to=\"/users\">\n <Icon type=\"setting\" component={UsersIcon} />\n Users\n </Link>}\n </Menu.Item>\n }\n {\n\n (isAdmin || rolePermissions[1]) &&\n <Menu.Item data-id=\"left-side-menu-roles\" key=\"/roles\" className=\"menuItem\">\n {this.state.collapsed ? <Link to=\"/roles\">\n <SettingOutlined />\n \n </Link> : <Link to=\"/roles\">\n <SettingOutlined />\n Roles\n </Link>}\n </Menu.Item>\n }\n {\n (isAdmin || templatePermissions[1]) &&\n <Menu.Item data-id=\"left-side-menu-templates\" key=\"/templates\" className=\"menuItem\">\n {this.state.collapsed ? <Link to=\"/templates\">\n <CloudServerOutlined />\n \n </Link> : <Link to=\"/templates\">\n <CloudServerOutlined />\n Templates\n </Link>}\n </Menu.Item>\n }\n{/*\n \n OPS 1149\n\n contextUser.contextUserIsSuperUser &&\n (this.props.supportMode.orgId || \"\") === \"\" &&\n <SubMenu data-id=\"left-side-menu-admin\" key=\"sub-admin\" title=\"Admin\" icon={<ToolOutlined />}>\n <Menu.Item data-id=\"left-side-menu-countries\" key=\"/countries\">\n <Link to=\"/countries\">\n <GlobalOutlined />\n Countries\n </Link>\n </Menu.Item>\n </SubMenu>\n */} \n \n {reportAccess && appConfigs.app.enableSchedule &&\n <SubMenu title=\"Reports\" key=\"/reports\" icon={<BarChartOutlined />} className=\"menuItem\">\n {(\n this.props.context.appContext.orgId === 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' ||\n this.props.context.appContext.orgId === '7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d' ||\n this.props.context.appContext.orgId === '4d5b9621-2b2b-11ee-8a6d-739e920ccfbe' \n ) ?\n <Menu.Item data-id=\"left-side-menu-reports\" key=\"/report\" className=\"menuItem\">\n <Link to=\"/reports\" onClick={(e)=>{this.state.collapsed ? this.setState({ collapsed:false }) : this.setState({ collapsed:true })}}>\n <FundProjectionScreenOutlined />\n Portal\n </Link>\n </Menu.Item>:\n <Menu.Item data-id=\"left-side-menu-reports\" key=\"/report\" className=\"menuItem\">\n <Link to={{pathname:history.location.pathname}} onClick={(e)=>this.goToReport(selectedOrgId,supportmode)}>\n <FundProjectionScreenOutlined />\n Portal\n </Link>\n </Menu.Item> }\n <Menu.Item data-id=\"left-side-menu-report-schedules\" key=\"/reportschedules\" className=\"menuItem\">\n <Link to=\"/reportschedules\">\n <FieldTimeOutlined />\n Schedules\n </Link>\n </Menu.Item>\n {\n (\n this.props.context.appContext.userId === 'cad29b40-1d5f-11ea-abaa-a34583f0c422' || // Ravi Teja - Dev \n this.props.context.appContext.userId === '83cc2900-0b6d-11ee-b4fd-3306c58aa61b' || // Vanaja - dev\n this.props.context.appContext.userId === '52f11900-5f65-11eb-9e05-ef71659b2f26' || // Sanath dev\n this.props.context.appContext.userId === 'b7f6f4c0-7b18-11ed-9392-03161eba83db' || // Eric dev\n this.props.context.appContext.userId === 'a9d07dc0-1257-11eb-949d-3f27d8f5ffc0' ||// Will dev\n this.props.context.appContext.userId === 'c0058c40-fd89-11ee-9cc8-0f6dba4705ee' // Sanath dev gmail id account\n ) &&\n <Menu.Item data-id=\"left-side-menu-DANA-report\" key=\"/dana\" className=\"menuItem\">\n <Link to=\"/danareports\">\n <FundOutlined />\n DANA\n </Link>\n </Menu.Item>\n }\n </SubMenu >\n }\n\n {(reportAccess && !appConfigs.app.enableSchedule)?\n <Menu.Item data-id=\"left-side-menu-reports\" key=\"/reports\" className=\"menuItem\">\n <Link to={{pathname:history.location.pathname}} onClick={(e)=>this.goToReport(selectedOrgId,supportmode)}> \n <BarChartOutlined />\n Reports\n </Link>\n </Menu.Item> : <> </>\n }\n \n {\n\n (isAdmin || oprPermission[1]) &&\n <Menu.Item data-id=\"left-side-menu-operators\" key=\"/operators\" className=\"menuItem\">\n {this.state.collapsed ? <Link to=\"/operators\">\n <Icon type=\"setting\" component={OperatorIcon} />\n \n \n </Link> : <Link to=\"/operators\">\n <Icon type=\"setting\" component={OperatorIcon} />\n \n Operators\n </Link>}\n </Menu.Item>\n }\n\n\n {\n // (isAdmin || oprPermission[1]) &&\n (\n // this.props.context.appContext.userId === '21ced2c0-3db9-11ed-9280-db679e967b72' ||\n // this.props.context.appContext.userId === '5664e840-6694-11ed-b5d8-976680d8c775' || \n // this.props.context.appContext.userId === 'ce3bb3a0-9619-11eb-87b2-239c76a096d7' || //muaz\n // this.props.context.appContext.userId === '1e9aa720-961a-11eb-bc08-ff40daac93b5' || \n // this.props.context.appContext.userId === '25c1ec40-2bab-11eb-9f2e-2fc8ff0a0080' || \n // this.props.context.appContext.userId === '6eb1fbc0-0ffe-11eb-b4af-c7f0a7c1b411' || // ying\n // this.props.context.appContext.userId === '70c429b0-91a7-11e8-af90-51d20134150b' ||\n // this.props.context.appContext.userId === '70c429b0-91a7-11e8-af90-51d20134150b' ||\n // this.props.context.appContext.userId === '8d6bb5c0-1a34-11eb-a02f-2f84f79acdc7' ||\n this.props.context.appContext.userId === 'cad29b40-1d5f-11ea-abaa-a34583f0c422' || // Ravi Teja - Dev \n this.props.context.appContext.userId === '83cc2900-0b6d-11ee-b4fd-3306c58aa61b' || // Vanaja - dev\n this.props.context.appContext.userId === '152bd120-309b-11ec-bc2d-bb7291a0ceba' || // Raja - dev\n this.props.context.appContext.userId === '150a5ea0-bf0b-11ed-b524-5f3c8839e6fa' || // polash techm dev\n this.props.context.appContext.userId === '163372c0-00f6-11ef-a2d9-23ab13c6deef' || // polash techm stage\n // this.props.context.appContext.userId === '70c429b0-91a7-11e8-af90-51d20134150b' || // Syed\n // this.props.context.appContext.userId === '2fa250e0-931f-11ee-b300-63d17ef479fc' || // Lavanya K\n // this.props.context.appContext.userId === 'da915c00-d3c9-11ed-92c5-b79e53de7502' || // Rupa prod\n // this.props.context.appContext.userId === 'ba085340-afa0-11ee-b3af-9f9a6f95957b' || // Rupa dev\n this.props.context.appContext.userId === 'c68a3460-10e7-11ee-b7ca-b7dab5628786' || // prapul dev test email for Taylor access\n this.props.context.appContext.userId === '7cb0a1a0-542f-11ed-b7bb-f305eb77c106' || // prapul dev\n this.props.context.appContext.userId === 'd64186e0-c0bb-11ee-ab9c-bfc605767884' || // prapul dev\n this.props.context.appContext.userId === '65975860-5276-11ee-8357-cfdf235dea49' || // Josh dev\n this.props.context.appContext.userId === 'f0ab9420-1018-11ee-8364-cb4b35830962' || // karuna parker dev\n this.props.context.appContext.userId === '96d03480-0431-11ee-9567-dfd4928f58e8' || // karuna Techm dev\n this.props.context.appContext.userId === 'c0058c40-fd89-11ee-9cc8-0f6dba4705ee' || // Sanath dev gmail id account\n this.props.context.appContext.userId === '52f11900-5f65-11eb-9e05-ef71659b2f26' || // Sanath dev\n // below are stage users access\n this.props.context.appContext.userId === 'a676c7c0-f69e-11eb-9313-f316c04c8311' || // ravi parker\n this.props.context.appContext.userId === '83c69fa0-5f65-11eb-8d03-678698c2e948' || // Sanath parker\n this.props.context.appContext.userId === '80e96cc0-7781-11eb-bb74-efbeb1fd550c' || //Sanath gmail\n this.props.context.appContext.userId === '3180fd00-0ed3-11ef-a364-7b24894b2d2b' || // josh parker\n this.props.context.appContext.userId === '8279a1a0-62fd-11ec-8f8f-53c130199102' || // rajasekhar techm\n this.props.context.appContext.userId === 'ef77ae80-3819-11ee-b6e7-875b48ebb37d' || // karuna techm stage\n this.props.context.appContext.userId === '94a456c0-3819-11ee-a7c5-8b26a0381d3f' || // prapul techm\n //below are prod users access\n\n this.props.context.appContext.userId === '907c9c80-0b69-11ec-8f31-0f790fdbae8a' || // Patsy Milroy prod\n this.props.context.appContext.userId === '606ca4a0-b7ae-11ef-87b4-cbba3733626e' || // polash techm prod\n this.props.context.appContext.userId === 'afa49c60-e70b-11ec-bc58-63ef25306e1e' || // ravi parker\n this.props.context.appContext.userId === '9bb0b810-1d5f-11ea-b10c-611371d47cc6' || // ravi techm\n this.props.context.appContext.userId === 'a44d5840-5f65-11eb-818b-7f8b88f38ec0' || // Sanath parker\n this.props.context.appContext.userId === 'c3ee3be0-66f7-11ef-9619-d7591cbd2f12' || //Sanath gmail\n this.props.context.appContext.userId === 'dba0aa40-5e6c-11ea-8269-67263d3b9573' || // Marcel\n this.props.context.appContext.userId === '946ffc80-645c-11ee-a54d-3f1b9e8fb7b0' || // josh parker\n this.props.context.appContext.userId === '8a209140-d985-11eb-87da-f7bca1133f68' || // rajasekhar techm\n this.props.context.appContext.userId === '69bfdee0-6af4-11ed-b1c9-df04de49673c' || // prapul techm\n this.props.context.appContext.userId === '1b47e2c0-4bb1-11e7-960f-235fe9bbfbdf' || // Stan Smith Taylor Prod\n this.props.context.appContext.userId === '008183a0-4aea-11e7-893e-f94b4bc7246b' || // Rob Fulton Taylor prod\n this.props.context.appContext.userId === 'e52d69c0-8584-11ee-9302-d3386a047683' || // Jackson Cook Taylor prod\n this.props.context.appContext.userId === '2deb1b40-c193-11ee-b2fc-0baafe57d170' || // Karuna parker prod\n this.props.context.appContext.userId === '910a8d40-08fd-11ee-9e3e-ab5787211252' || // Karuna Techm prod\n this.props.context.appContext.userId === '4081ed80-dc07-11ea-8214-673a5d69c136' // Heath Behel Taylor prod\n ) &&\n <SubMenu title=\"Taylor Access\" key=\"/taylor-operators\" icon={<Icon type=\"setting\" component={SupportIcon} />} className=\"subMenuItem\">\n <Menu.Item data-id=\"left-side-menu-taylor-operators\" key=\"/operatorsmanagement\">\n <Link to=\"/operatorsmanagement\"> \n Operator Management\n </Link>\n </Menu.Item>\n\n <Menu.Item data-id=\"left-side-menu-taylor-operators\" key=\"/operatorshistory\">\n <Link to=\"/operatorshistory\"> \n Operator History\n </Link>\n </Menu.Item>\n\n <Menu.Item data-id=\"left-side-menu-tutorials\" key=\"/questionmanagement\">\n <Link to=\"/questionmanagement\">\n Question Management\n </Link>\n </Menu.Item>\n </SubMenu >\n }\n\n\n\n {\n (iqanopenOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n &&\n (\n iqanopenUsersList == null\n ? false\n : iqanopenUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n ) &&\n \n <SubMenu title=\"Software Update Manager\" key=\"/iqanopen\" icon={<Icon type=\"support\" component={AdminSettingsIcon} />} className=\"subMenuItem\">\n {(\n this.props.context.appContext.userId === 'cad29b40-1d5f-11ea-abaa-a34583f0c422' || // Ravi Teja - Dev\n this.props.context.appContext.userId === 'afa49c60-e70b-11ec-bc58-63ef25306e1e' || // Ravi Teja \n this.props.context.appContext.userId === '83cc2900-0b6d-11ee-b4fd-3306c58aa61b' || // Vanaja - dev\n this.props.context.appContext.userId === 'a44d5840-5f65-11eb-818b-7f8b88f38ec0' || // Sanath prod\n this.props.context.appContext.userId === '52f11900-5f65-11eb-9e05-ef71659b2f26' || // Sanath dev\n this.props.context.appContext.userId === '65975860-5276-11ee-8357-cfdf235dea49' || // Josh dev\n this.props.context.appContext.userId === '946ffc80-645c-11ee-a54d-3f1b9e8fb7b0' // Josh prod\n ) && \n <Menu.Item data-id=\"left-side-menu-admin-controllers\" key=\"/Iqanopen/controllers\">\n <Link to=\"/Iqanopen/controllers\">\n <Icon type=\"add-devices\" component={AddDeviceIcon} />\n Add Device\n </Link>\n </Menu.Item>}\n \n {\n\n (iqanopenOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n &&\n (\n iqanopenUsersList == null\n ? false\n : iqanopenUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n ) &&\n <Menu.Item data-id=\"left-side-menu-admin-controllers\" key=\"/Iqanopen/Softwares\">\n <Link to=\"/Iqanopen/Softwares\">\n <Icon type=\"add-software\" component={AddSoftwareIcon} />\n Add Software\n </Link>\n </Menu.Item>\n }\n {\n (iqanopenOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n &&\n (\n iqanopenUsersList == null\n ? false\n : iqanopenUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n ) &&\n <Menu.Item data-id=\"left-side-menu-admin-applications\" key=\"/Iqanopen/UpdateDeviceSoftware\">\n <Link to=\"/Iqanopen/UpdateDeviceSoftware\">\n <Icon type=\"updatesoftware\" component={UpdateSoftwareIcon} />\n Update Device Software\n </Link>\n </Menu.Item>\n }\n </SubMenu >\n }\n {\n (contractsOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n &&\n (contractsUsersList == null\n ? false\n : contractsUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)) &&\n \n <SubMenu title=\"Admin\" key=\"/admin\" icon={<IdcardOutlined />} className=\"subMenuItem\">\n \n <Menu.Item data-id=\"left-side-menu-admin\" key=\"/contracts\" className=\"menuItem\">\n <Link to=\"/admin/contracts\">\n <Icon type=\"contracts\" component={ContractsIcon} />\n Contracts\n </Link>\n </Menu.Item>\n \n {\n (controllersOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n &&\n (\n controllersUsersList == null\n ? false\n : controllersUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n ) &&\n <Menu.Item data-id=\"left-side-menu-admin-controllers\" key=\"/admin/controllers\">\n <Link to=\"/admin/controllers\">\n <Icon type=\"admin-controllers\" component={ControllerIcon} />\n Controllers\n </Link>\n </Menu.Item>\n }\n {\n (applicationsOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n &&\n (\n applicationsUsersList == null\n ? false\n : applicationsUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n ) &&\n <Menu.Item data-id=\"left-side-menu-admin-applications\" key=\"/applications\">\n <Link to=\"/admin/applications\">\n <Icon type=\"Applications\" component={AppsIcon} />\n Applications\n </Link>\n </Menu.Item>\n }\n {\n (\n this.props.context.user.contextUserIsAdmin && \n (aiotOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId)) \n && (\n aiotUsersList == null\n ? false\n : aiotUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n )\n ) &&\n <Menu.Item data-id=\"left-side-menu-admin-aiot\" key=\"/aiot\">\n <Link to=\"/admin/aiot\">\n <Icon type=\"AIOTIcon\" component={AIOTIcon} />\n AIOT\n </Link>\n </Menu.Item>\n }\n \n </SubMenu >\n }\n\n {\n showHelp &&\n <SubMenu title=\"Help\" key=\"/help\" icon={<Icon type=\"support\" component={SupportIcon} />} className=\"subMenuItem\">\n {/* <Menu.Item data-id=\"left-side-menu-tutorials\" key=\"/tutorials\">\n <Link to=\"/tutorials\">\n <Icon type=\"tutorial\" component={VideoTutorialIcon} />\n Tutorials\n </Link>\n </Menu.Item> */}\n <Menu.Item data-id=\"left-side-menu-tutorials\" key=\"/releasenotes\">\n <Link to=\"/releasenotes\"> \n <SnippetsOutlined/> \n Release Notes\n </Link>\n </Menu.Item>\n\n <Menu.Item data-id=\"left-side-menu-tutorials\" key=\"/videotutorials\">\n <Link to=\"/videotutorials\">\n <PlayCircleOutlined />\n Tutorial Videos\n </Link>\n </Menu.Item>\n\n <Menu.Item data-id=\"left-side-menu-tutorials\" key=\"/userguide\">\n <Link to=\"/userguide\">\n <FormOutlined />\n User Guide\n </Link>\n </Menu.Item>\n\n {/* <Menu.Item data-id=\"left-side-menu-reports\" key=\"/report\">\n <Link to={{pathname:history.location.pathname}} >\n <CommentOutlined />\n Support\n </Link>\n </Menu.Item> */}\n\n {/* <Menu.Item data-id=\"left-side-menu-reports\" key=\"/report\">\n <Link to={{pathname:history.location.pathname}} >\n <CommentOutlined />\n Support\n </Link>\n </Menu.Item> */}\n </SubMenu >\n }\n </Menu>\n } \n </div>\n </Sider>\n </div>\n );\n }\n}\n\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n supportMode: state.supportModeReducer,\n orgReportAccess: state.reportReducer.orgAccess,\n userOrgAccess: state.userOrgAccessReducer.data.userOrgAccess\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n ...rootActions\n }\n)(LeftSider);","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"0460FF20-FA54-45E2-A9A2-0967C05B1244\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with sketchtool.\");\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Admin\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Notifications\",\n transform: \"translate(-34.000000, -181.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"left-rail-collapsed\",\n transform: \"translate(-1.000000, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Tractor\",\n transform: \"translate(35.000000, 182.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.137931, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"line\", {\n x1: 0.862068966,\n y1: 19.3103448,\n x2: 3.62068966,\n y2: 8.27586207,\n id: \"Line-2\",\n stroke: \"#000000\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.0344828,8.27586207 L16.0342667,8.9180942 C14.7730629,10.1912715 13.9655172,12.0508688 13.9655172,13.7931034 C13.9655172,14.6865216 14.1778726,15.6441517 14.5548624,16.5515335 L10.5172414,16.5517241 L10.5172414,16.5517241 C10.5172414,15.02818 9.28216483,13.7931034 7.75862069,13.7931034 L7.75862069,9.79489126 L9.31034483,8.27586207 L16.0344828,8.27586207 Z\",\n id: \"Combined-Shape-Copy-3\",\n stroke: \"#000000\",\n strokeWidth: 1.5,\n strokeLinejoin: \"round\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-31\",\n stroke: \"#000000\",\n strokeWidth: 1.5,\n cx: 7.75862069,\n cy: 16.8965517,\n r: 2.75862069\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-32\",\n fill: \"#000000\",\n cx: 7.75862069,\n cy: 16.8965517,\n r: 1\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.5517241,3.10344828 L21.5517665,9.02175305 C20.9128368,8.76311467 20.2144303,8.62068966 19.4827586,8.62068966 C18.5137895,8.62068966 17.6031617,8.87047888 16.8117555,9.30917724 L16.0344828,9.31034483 L16.0344828,4.33677936 L17.4137931,3.10344828 L21.5517241,3.10344828 Z\",\n id: \"Combined-Shape\",\n stroke: \"#000000\",\n strokeWidth: 1.5,\n strokeLinejoin: \"round\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-33\",\n stroke: \"#000000\",\n strokeWidth: 1.5,\n cx: 19.4827586,\n cy: 14.137931,\n r: 5.51724138\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval-Copy-34\",\n stroke: \"#000000\",\n strokeWidth: 1.5,\n cx: 19.4827586,\n cy: 14.137931,\n r: 1.37931034\n}), /*#__PURE__*/React.createElement(\"line\", {\n x1: 16.0344828,\n y1: 0.344827586,\n x2: 22.9310345,\n y2: 0.344827586,\n id: \"Line-3-Copy-10\",\n stroke: \"#000000\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\"\n}))))));\n\nvar SvgTractorBlack = function SvgTractorBlack(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"14px\",\n height: \"14px\",\n viewBox: \"0 0 26 22\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3, _ref4);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTractorBlack, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tractor-black.b1eaf479.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgGeofenceIcon = function SvgGeofenceIcon(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n style: {\n textIndent: 0,\n textAlign: \"start\",\n lineHeight: \"normal\",\n textTransform: \"none\",\n blockProgression: \"tb\",\n InkscapeFontSpecification: \"Bitstream Vera Sans\"\n },\n d: \"M 16 3 C 12.145666 3 9 6.1456661 9 10 C 9 11.13025 9.4447877 12.352614 10.03125 13.6875 C 10.617712 15.022386 11.363369 16.437076 12.125 17.75 C 13.648261 20.375848 15.1875 22.5625 15.1875 22.5625 L 16 23.75 L 16.8125 22.5625 C 16.8125 22.5625 18.351739 20.375848 19.875 17.75 C 20.636631 16.437076 21.382288 15.022386 21.96875 13.6875 C 22.555212 12.352614 23 11.13025 23 10 C 23 6.1456661 19.854334 3 16 3 z M 16 5 C 18.773666 5 21 7.2263339 21 10 C 21 10.52675 20.694788 11.649198 20.15625 12.875 C 19.617712 14.100802 18.863369 15.477174 18.125 16.75 C 17.053262 18.597498 16.508491 19.397585 16 20.15625 C 15.491509 19.397585 14.946738 18.597498 13.875 16.75 C 13.136631 15.477174 12.382288 14.100802 11.84375 12.875 C 11.305212 11.649198 11 10.52675 11 10 C 11 7.2263339 13.226334 5 16 5 z M 16 8 C 14.895431 8 14 8.8954305 14 10 C 14 11.104569 14.895431 12 16 12 C 17.104569 12 18 11.104569 18 10 C 18 8.8954305 17.104569 8 16 8 z M 10.90625 19.4375 C 7.03325 20.1395 4 21.68 4 24 C 4 27.283 10.037 29 16 29 C 21.963 29 28 27.283 28 24 C 28 21.68 24.96675 20.1395 21.09375 19.4375 L 19.875 21.28125 C 23.654 21.82925 26 23.088 26 24 C 26 25.194 22.012 27 16 27 C 9.988 27 6 25.194 6 24 C 6 23.088 8.346 21.82925 12.125 21.28125 L 10.90625 19.4375 z\",\n overflow: \"visible\",\n fontFamily: \"Bitstream Vera Sans\"\n }));\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgGeofenceIcon, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/geofenceIcon.9299039e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M406.2,173.55c-4.8,4.8-4.8,12.5,0,17.3l41.8,41.8H333.3v-63.9c0-6.8-5.5-12.3-12.3-12.3h-63.9V41.85l41.8,41.8 c2.4,2.4,5.5,3.6,8.7,3.6s6.3-1.2,8.7-3.6c4.8-4.8,4.8-12.5,0-17.3l-62.7-62.7c-2.3-2.3-5.4-3.6-8.7-3.6s-6.4,1.3-8.7,3.6 l-62.7,62.7c-4.8,4.8-4.8,12.5,0,17.3s12.5,4.8,17.3,0l41.8-41.8v114.7h-63.9c-6.8,0-12.3,5.5-12.3,12.3v63.9H41.8l41.8-41.8 c4.8-4.8,4.8-12.5,0-17.3s-12.5-4.8-17.3,0l-62.7,62.7c-4.8,4.8-4.8,12.5,0,17.3l62.7,62.7c2.4,2.4,5.5,3.6,8.7,3.6 s6.3-1.2,8.7-3.6c4.8-4.8,4.8-12.5,0-17.3l-41.8-41.8h114.7v63.9c0,6.8,5.5,12.3,12.3,12.3h63.9v114.7l-41.9-41.9 c-4.8-4.8-12.5-4.8-17.3,0s-4.8,12.5,0,17.3l62.7,62.7c2.3,2.3,5.4,3.6,8.7,3.6s6.4-1.3,8.7-3.6l62.7-62.7 c4.8-4.8,4.8-12.5,0-17.3s-12.5-4.8-17.3,0l-41.8,41.8v-114.7h63.9c6.8,0,12.3-5.5,12.3-12.3v-63.9h114.7l-42,41.8 c-4.8,4.8-4.8,12.5,0,17.3c2.4,2.4,5.5,3.6,8.7,3.6s6.3-1.2,8.7-3.6l62.7-62.7c2.3-2.3,3.6-5.4,3.6-8.7s-1.3-6.4-3.6-8.7 l-62.7-62.7C418.7,168.75,411,168.75,406.2,173.55z M308.8,308.85H181v-127.8h127.8L308.8,308.85L308.8,308.85z\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar SvgMoveGeofence = function SvgMoveGeofence(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 489.9 489.9\",\n style: {\n enableBackground: \"new 0 0 489.9 489.9\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgMoveGeofence, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/move-geofence.31e225d7.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M406.2,173.55c-4.8,4.8-4.8,12.5,0,17.3l41.8,41.8H333.3v-63.9c0-6.8-5.5-12.3-12.3-12.3h-63.9V41.85l41.8,41.8 c2.4,2.4,5.5,3.6,8.7,3.6s6.3-1.2,8.7-3.6c4.8-4.8,4.8-12.5,0-17.3l-62.7-62.7c-2.3-2.3-5.4-3.6-8.7-3.6s-6.4,1.3-8.7,3.6 l-62.7,62.7c-4.8,4.8-4.8,12.5,0,17.3s12.5,4.8,17.3,0l41.8-41.8v114.7h-63.9c-6.8,0-12.3,5.5-12.3,12.3v63.9H41.8l41.8-41.8 c4.8-4.8,4.8-12.5,0-17.3s-12.5-4.8-17.3,0l-62.7,62.7c-4.8,4.8-4.8,12.5,0,17.3l62.7,62.7c2.4,2.4,5.5,3.6,8.7,3.6 s6.3-1.2,8.7-3.6c4.8-4.8,4.8-12.5,0-17.3l-41.8-41.8h114.7v63.9c0,6.8,5.5,12.3,12.3,12.3h63.9v114.7l-41.9-41.9 c-4.8-4.8-12.5-4.8-17.3,0s-4.8,12.5,0,17.3l62.7,62.7c2.3,2.3,5.4,3.6,8.7,3.6s6.4-1.3,8.7-3.6l62.7-62.7 c4.8-4.8,4.8-12.5,0-17.3s-12.5-4.8-17.3,0l-41.8,41.8v-114.7h63.9c6.8,0,12.3-5.5,12.3-12.3v-63.9h114.7l-42,41.8 c-4.8,4.8-4.8,12.5,0,17.3c2.4,2.4,5.5,3.6,8.7,3.6s6.3-1.2,8.7-3.6l62.7-62.7c2.3-2.3,3.6-5.4,3.6-8.7s-1.3-6.4-3.6-8.7 l-62.7-62.7C418.7,168.75,411,168.75,406.2,173.55z M308.8,308.85H181v-127.8h127.8L308.8,308.85L308.8,308.85z\",\n fill: \"#fff\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"g\", null);\n\nvar SvgMoveGeofenceActive = function SvgMoveGeofenceActive(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 489.9 489.9\",\n style: {\n enableBackground: \"new 0 0 489.9 489.9\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgMoveGeofenceActive, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/move-geofence-active.8fd60a47.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 -1028.4)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m12 0c-4.4183 2.3685e-15 -8 3.5817-8 8 0 1.421 0.3816 2.75 1.0312 3.906 0.1079 0.192 0.221 0.381 0.3438 0.563l6.625 11.531 6.625-11.531c0.102-0.151 0.19-0.311 0.281-0.469l0.063-0.094c0.649-1.156 1.031-2.485 1.031-3.906 0-4.4183-3.582-8-8-8zm0 4c2.209 0 4 1.7909 4 4 0 2.209-1.791 4-4 4-2.2091 0-4-1.791-4-4 0-2.2091 1.7909-4 4-4z\",\n transform: \"translate(0 1028.4)\",\n fill: \"#e74c3c\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m12 3c-2.7614 0-5 2.2386-5 5 0 2.761 2.2386 5 5 5 2.761 0 5-2.239 5-5 0-2.7614-2.239-5-5-5zm0 2c1.657 0 3 1.3431 3 3s-1.343 3-3 3-3-1.3431-3-3 1.343-3 3-3z\",\n transform: \"translate(0 1028.4)\",\n fill: \"#c0392b\"\n}));\n\nvar SvgMarker = function SvgMarker(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n width: 24,\n fill: \"#c0392b\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgMarker, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/marker.d3c63ea7.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 -1028.4)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m12 0c-4.4183 2.3685e-15 -8 3.5817-8 8 0 1.421 0.3816 2.75 1.0312 3.906 0.1079 0.192 0.221 0.381 0.3438 0.563l6.625 11.531 6.625-11.531c0.102-0.151 0.19-0.311 0.281-0.469l0.063-0.094c0.649-1.156 1.031-2.485 1.031-3.906 0-4.4183-3.582-8-8-8zm0 4c2.209 0 4 1.7909 4 4 0 2.209-1.791 4-4 4-2.2091 0-4-1.791-4-4 0-2.2091 1.7909-4 4-4z\",\n transform: \"translate(0 1028.4)\",\n fill: \"#fcfcfc\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m12 3c-2.7614 0-5 2.2386-5 5 0 2.761 2.2386 5 5 5 2.761 0 5-2.239 5-5 0-2.7614-2.239-5-5-5zm0 2c1.657 0 3 1.3431 3 3s-1.343 3-3 3-3-1.3431-3-3 1.343-3 3-3z\",\n transform: \"translate(0 1028.4)\",\n fill: \"#b3b3b3\"\n}));\n\nvar SvgMarkerActive = function SvgMarkerActive(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n width: 24,\n fill: \"#c0392b\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgMarkerActive, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/markerActive.304ee33c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m145.96875 423.246094h-36.707031l84.6875-84.375-21.171875-21.253906-84.476563 84.164062v-36.203125h-30v87.667969h87.667969zm0 0\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m366.03125 423.246094v30h87.667969v-87.667969h-30v36.203125l-84.476563-84.164062-21.171875 21.253906 84.6875 84.375zm0 0\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m88.300781 110.21875 84.476563 84.164062 21.171875-21.253906-84.6875-84.375h36.707031v-30h-87.667969v87.667969h30zm0 0\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m339.222656 194.382812 84.476563-84.164062v36.203125h30v-87.667969h-87.667969v30h36.707031l-84.6875 84.375zm0 0\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m0 0v512h512v-512zm482 482h-452v-452h452zm0 0\"\n});\n\nvar SvgMaximize = function SvgMaximize(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: \"512pt\",\n viewBox: \"0 0 512 512\",\n width: \"512pt\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5, _ref6);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgMaximize, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/maximize.9c0571ce.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5,113.9c-13,0-23.5,10.5-23.5,23.5s10.5,23.5,23.5,23.5c13,0,23.5-10.5,23.5-23.5S76.5,113.9,63.5,113.9z M63.5,146.4 c-4.9,0-9-4.1-9-9c0-4.9,4.1-9,9-9c4.9,0,9,4.1,9,9C72.5,142.3,68.5,146.4,63.5,146.4z M211.3,112.9c-13,0-23.5,10.5-23.5,23.5 s10.5,23.5,23.5,23.5c13,0,23.5-10.5,23.5-23.5S224.3,112.9,211.3,112.9z M211.3,145.4c-4.9,0-9-4.1-9-9c0-4.9,4.1-9,9-9 c4.9,0,9,4.1,9,9C220.3,141.3,216.3,145.4,211.3,145.4z M0,124c0,4.6,3.7,8.2,8.2,8.2l22.6,1c0.9,0,1.7-0.7,1.9-1.5 c2.6-14.7,15.4-25.9,30.8-25.9s28.3,11.2,30.8,25.9c0.2,0.9,0.9,1.5,1.9,1.5h3.2l30.9-1V3H0V124z M22.4,49.2 c2.2-5.7,7.8-9.7,14.2-9.7c6,0,11.2,3.4,13.7,8.5c0.3,0,0.5-0.1,0.8-0.1h46.7c3.8,0,6.9,3.1,6.9,6.9v0c0,3.8-3.1,6.9-6.9,6.9H51.1 c-0.3,0-0.5,0-0.8-0.1c-2.5,5-7.7,8.5-13.7,8.5c-6.5,0-12-4-14.2-9.7h14.2V49.2H22.4z M254.1,115.4h-5v-22c0-7.5-6.1-13.6-13.7-13.6 h-24.3c-0.5,0-1-0.3-1.4-0.6l-38-37c-1.7-1.7-4.1-2.7-6.6-2.8h-27.5v92.8h40.9c0.9,0,1.7-0.7,1.9-1.5c2.6-14.7,15.4-25.9,30.8-25.9 s28.3,11.2,30.8,25.9c0.2,0.9,0.9,1.5,1.9,1.5h3.2c4.9,0,8.7-3.9,8.7-8.7v-6.3C256,116.3,255.1,115.4,254.1,115.4z M191.6,79.9 h-41.4c-1,0-1.9-0.9-1.9-1.9V51.6c0-1,0.9-1.9,1.9-1.9h13.9c0.5,0,1,0.3,1.5,0.6L193,76.6C194,77.9,193.2,79.9,191.6,79.9z\"\n});\n\nvar SvgServiceTruck = function SvgServiceTruck(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n baseProfile: \"tiny\",\n id: \"earth\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 256 163\",\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgServiceTruck, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/service-truck.3cba634f.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5,113.9c-13,0-23.5,10.5-23.5,23.5s10.5,23.5,23.5,23.5c13,0,23.5-10.5,23.5-23.5S76.5,113.9,63.5,113.9z M63.5,146.4 c-4.9,0-9-4.1-9-9c0-4.9,4.1-9,9-9c4.9,0,9,4.1,9,9C72.5,142.3,68.5,146.4,63.5,146.4z M211.3,112.9c-13,0-23.5,10.5-23.5,23.5 s10.5,23.5,23.5,23.5c13,0,23.5-10.5,23.5-23.5S224.3,112.9,211.3,112.9z M211.3,145.4c-4.9,0-9-4.1-9-9c0-4.9,4.1-9,9-9 c4.9,0,9,4.1,9,9C220.3,141.3,216.3,145.4,211.3,145.4z M0,124c0,4.6,3.7,8.2,8.2,8.2l22.6,1c0.9,0,1.7-0.7,1.9-1.5 c2.6-14.7,15.4-25.9,30.8-25.9s28.3,11.2,30.8,25.9c0.2,0.9,0.9,1.5,1.9,1.5h3.2l30.9-1V3H0V124z M22.4,49.2 c2.2-5.7,7.8-9.7,14.2-9.7c6,0,11.2,3.4,13.7,8.5c0.3,0,0.5-0.1,0.8-0.1h46.7c3.8,0,6.9,3.1,6.9,6.9v0c0,3.8-3.1,6.9-6.9,6.9H51.1 c-0.3,0-0.5,0-0.8-0.1c-2.5,5-7.7,8.5-13.7,8.5c-6.5,0-12-4-14.2-9.7h14.2V49.2H22.4z M254.1,115.4h-5v-22c0-7.5-6.1-13.6-13.7-13.6 h-24.3c-0.5,0-1-0.3-1.4-0.6l-38-37c-1.7-1.7-4.1-2.7-6.6-2.8h-27.5v92.8h40.9c0.9,0,1.7-0.7,1.9-1.5c2.6-14.7,15.4-25.9,30.8-25.9 s28.3,11.2,30.8,25.9c0.2,0.9,0.9,1.5,1.9,1.5h3.2c4.9,0,8.7-3.9,8.7-8.7v-6.3C256,116.3,255.1,115.4,254.1,115.4z M191.6,79.9 h-41.4c-1,0-1.9-0.9-1.9-1.9V51.6c0-1,0.9-1.9,1.9-1.9h13.9c0.5,0,1,0.3,1.5,0.6L193,76.6C194,77.9,193.2,79.9,191.6,79.9z\",\n fill: \"#fff\"\n});\n\nvar SvgServiceTruckActive = function SvgServiceTruckActive(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n baseProfile: \"tiny\",\n id: \"earth\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 256 163\",\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgServiceTruckActive, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/service-truck-active.9a24530e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.000000,376.000000) scale(0.100000,-0.100000)\",\n fill: \"#000000\",\n stroke: \"none\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2411 2941 c-18 -32 8 -53 70 -56 30 -1 57 -3 60 -4 3 0 -25 -182 -62 -403 -38 -222 -68 -406 -69 -410 0 -5 -98 -8 -218 -8 l-218 0 -74 -75 -74 -75 -225 0 -225 0 -163 -163 -163 -163 0 -52 c0 -29 -3 -52 -7 -52 -4 0 -99 30 -210 67 -147 49 -206 64 -214 56 -17 -17 -319 -931 -313 -948 9 -23 53 -26 362 -23 l293 3 159 161 160 160 0 225 0 224 138 138 138 138 120 1 119 1 3 -50 3 -50 -51 -21 c-173 -72 -303 -213 -366 -397 -23 -67 -27 -97 -28 -185 0 -187 56 -322 189 -455 131 -131 263 -185 452 -185 120 0 220 27 321 87 58 34 176 145 198 186 10 17 34 18 374 17 l363 0 15 -23 c8 -12 48 -54 88 -94 79 -78 173 -131 279 -158 76 -19 234 -19 310 0 134 34 278 130 357 239 l28 39 115 1 c91 1 118 4 125 16 6 9 10 234 10 552 0 510 -1 538 -18 549 -10 6 -178 75 -373 153 l-354 142 -3 130 -3 129 76 75 c75 74 86 95 63 118 -24 24 -46 11 -131 -77 l-87 -88 0 -137 0 -136 -185 0 -185 0 2 412 3 413 61 1 c69 1 84 7 84 33 0 41 -2 41 -567 41 -519 0 -543 -1 -552 -19z m889 -257 c0 -152 -3 -194 -13 -194 -7 0 -178 -58 -380 -130 -202 -71 -373 -130 -381 -130 -10 0 0 75 40 318 30 174 54 320 54 324 0 7 656 17 673 10 4 -2 7 -91 7 -198z m2 -673 l-2 -401 -410 0 -410 0 0 208 c0 169 4 218 18 266 l18 59 164 58 c91 31 266 93 390 137 124 43 227 78 230 77 3 -2 4 -184 2 -404z m-902 -238 c0 -115 5 -215 10 -223 8 -13 69 -15 432 -18 233 -1 448 1 478 5 l55 8 3 218 2 217 209 0 208 0 351 -141 352 -141 0 -494 0 -494 -60 0 c-33 0 -60 3 -60 8 0 4 9 36 21 72 32 101 36 217 10 324 -31 127 -80 216 -173 308 -228 227 -576 250 -834 55 -73 -56 -120 -111 -168 -198 -47 -86 -63 -133 -76 -230 -13 -91 -2 -192 30 -285 l19 -54 -318 0 -317 0 22 68 c84 249 -6 537 -217 697 -127 96 -269 141 -416 132 l-83 -5 0 127 0 128 62 61 63 62 197 0 198 0 0 -207z m-600 27 l0 -40 -137 0 -138 0 -162 -162 -163 -163 0 -225 0 -226 -35 -34 -35 -34 0 320 0 319 138 137 137 138 195 3 c107 1 196 3 198 5 1 1 2 -16 2 -38z m-938 -342 l188 -63 0 -280 0 -279 -62 -63 -62 -63 -263 0 c-196 0 -263 3 -263 12 0 20 261 798 268 798 4 0 91 -28 194 -62z m1240 47 c197 -41 354 -188 416 -389 21 -70 21 -215 -2 -291 -56 -188 -201 -331 -386 -380 -30 -8 -95 -15 -143 -15 -225 0 -421 135 -508 352 -27 66 -37 227 -20 309 60 286 354 476 643 414z m1861 -16 c310 -104 458 -449 322 -747 -56 -123 -158 -220 -289 -275 -60 -26 -88 -31 -178 -35 -168 -7 -277 32 -398 144 -113 105 -170 237 -170 393 0 157 50 281 155 386 146 146 366 199 558 134z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1883 1210 c-198 -88 -203 -369 -8 -473 57 -31 173 -30 231 0 197 105 191 382 -11 474 -53 25 -156 24 -212 -1z m205 -97 c87 -64 95 -193 16 -267 -106 -98 -284 -17 -284 129 0 64 48 133 110 158 32 13 130 1 158 -20z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3692 1215 c-55 -24 -98 -63 -128 -117 -25 -46 -29 -64 -29 -128 0 -107 46 -183 140 -233 56 -30 174 -30 230 0 91 49 137 120 143 224 9 153 -102 270 -257 269 -37 -1 -81 -7 -99 -15z m203 -109 c116 -89 69 -274 -76 -301 -100 -19 -199 65 -199 169 0 50 40 117 86 144 55 32 137 27 189 -12z\"\n}));\n\nvar SvgKomatsuBlack = function SvgKomatsuBlack(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"513.000000pt\",\n height: \"376.000000pt\",\n viewBox: \"0 0 513.000000 376.000000\",\n preserveAspectRatio: \"xMidYMid meet\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgKomatsuBlack, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/komatsu-black.5de822a3.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card/mapassetdisplay2\",\n transform: \"translate(-14.000000, -41.000000)\",\n fill: \"#DA1E28\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"noun_Stop_2636497\",\n transform: \"translate(14.000000, 41.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.4290526,0 L4.57094737,0 L0,4.57094737 L0,11.4290526 L4.57094737,16 L11.4290526,16 L16,11.4290526 L16,4.57094737 L11.4290526,0 Z M10.1625263,12 L7.88547368,9.71957895 L5.60842105,12 L3.88547368,10.2770526 L6.16252632,8 L3.90063158,5.728 L5.62357895,4 L7.88547368,6.26863158 L10.1473684,4 L11.8736842,5.728 L9.60673684,8 L11.8854737,10.2770526 L10.1625263,12 Z\",\n id: \"Shape\"\n}))));\n\nvar SvgCritical = function SvgCritical(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 16\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCritical, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/critical.b17123ec.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card/mapassetdisplay2\",\n transform: \"translate(-56.000000, -42.000000)\",\n fill: \"#ecc800\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"noun_Warning_170417\",\n transform: \"translate(56.000000, 42.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.8629045,12.5015557 L8.86986433,0.496577474 C8.48331437,-0.165525825 7.51693948,-0.165525825 7.13038952,0.496577474 L0.137349387,12.5015557 C-0.249200571,13.163659 0.22520165,14 0.998301564,14 L14.9843818,14 C15.7750522,14 16.2494544,13.163659 15.8629045,12.5015557 Z M7.78049627,4.17299315 C8.20218713,4.06845053 8.623878,4.27753578 8.81715297,4.66085874 C8.88743478,4.80024891 8.90500524,4.95706285 8.88743478,5.09645302 C8.85229388,5.53204729 8.83472343,5.96764157 8.81715297,6.42065961 C8.78201207,7.10018668 8.72930071,7.79713752 8.69415981,8.47666459 C8.67658935,8.68574984 8.67658935,8.8948351 8.6590189,9.12134412 C8.64144845,9.48724331 8.36032121,9.76602365 7.9913417,9.76602365 C7.63993265,9.76602365 7.34123496,9.48724331 7.3236645,9.13876789 C7.27095314,8.07591786 7.20067133,7.01306783 7.14795998,5.9502178 C7.13038952,5.67143746 7.11281907,5.37523335 7.09524862,5.09645302 C7.09524862,4.67828251 7.37637586,4.27753578 7.78049627,4.17299315 Z M8.00891215,12.1530803 C7.51693948,12.1530803 7.13038952,11.7523335 7.13038952,11.264468 C7.13038952,10.7766024 7.53450993,10.3758556 8.02648261,10.3758556 C8.51845528,10.3758556 8.90500524,10.7766024 8.90500524,11.2818917 C8.88743478,11.7523335 8.48331437,12.1530803 8.00891215,12.1530803 Z\",\n id: \"Shape\"\n}))));\n\nvar SvgWarning = function SvgWarning(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"16px\",\n height: \"14px\",\n viewBox: \"0 0 16 14\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgWarning, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/warning.1b2fd4fd.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card/mapassetdisplay2\",\n transform: \"translate(-105.000000, -42.000000)\",\n fill: \"#0F62FE\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card---With-Shadow\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-10\",\n transform: \"translate(97.000000, 35.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.203125,10.7734375 C12.625,10.7734375 12.9856771,10.6341146 13.2851562,10.3554688 C13.5846354,10.0768229 13.734375,9.73958333 13.734375,9.34375 C13.734375,8.94791667 13.5846354,8.609375 13.2851562,8.328125 C12.9856771,8.046875 12.625,7.90625 12.203125,7.90625 C11.78125,7.90625 11.4192708,8.046875 11.1171875,8.328125 C10.8151042,8.609375 10.6640625,8.94791667 10.6640625,9.34375 C10.6640625,9.73958333 10.8151042,10.0768229 11.1171875,10.3554688 C11.4192708,10.6341146 11.78125,10.7734375 12.203125,10.7734375 Z M11.09375,20.2109375 C11.5,20.2109375 11.8567708,20.1575521 12.1640625,20.0507812 C12.4713542,19.9440104 12.8828125,19.7890625 13.3984375,19.5859375 L13.3984375,19.5859375 L13.5703125,18.8828125 C13.4817708,18.9244792 13.3385417,18.9726562 13.140625,19.0273438 C12.9427083,19.0820312 12.765625,19.109375 12.609375,19.109375 C12.2760417,19.109375 12.0416667,19.0546875 11.90625,18.9453125 C11.7708333,18.8359375 11.703125,18.6302083 11.703125,18.328125 C11.703125,18.2083333 11.7239583,18.03125 11.765625,17.796875 C11.8072917,17.5625 11.8541667,17.3541667 11.90625,17.171875 L11.90625,17.171875 L12.546875,14.8984375 C12.609375,14.6901042 12.6523438,14.4609375 12.6757812,14.2109375 C12.6992188,13.9609375 12.7109375,13.7864583 12.7109375,13.6875 C12.7109375,13.2083333 12.5429688,12.8190104 12.2070312,12.5195312 C11.8710938,12.2200521 11.3932292,12.0703125 10.7734375,12.0703125 C10.4296875,12.0703125 10.0651042,12.1315104 9.6796875,12.2539062 C9.29427083,12.3763021 8.890625,12.5234375 8.46875,12.6953125 L8.46875,12.6953125 L8.296875,13.3984375 C8.421875,13.3515625 8.57161458,13.3020833 8.74609375,13.25 C8.92057292,13.1979167 9.09114583,13.171875 9.2578125,13.171875 C9.59635417,13.171875 9.82552083,13.2291667 9.9453125,13.34375 C10.0651042,13.4583333 10.125,13.6614583 10.125,13.953125 C10.125,14.1145833 10.1054688,14.2929688 10.0664062,14.4882812 C10.0273438,14.6835938 9.97916667,14.890625 9.921875,15.109375 L9.921875,15.109375 L9.28125,17.390625 C9.22395833,17.6302083 9.18229167,17.8450521 9.15625,18.0351562 C9.13020833,18.2252604 9.1171875,18.4114583 9.1171875,18.59375 C9.1171875,19.0625 9.29036458,19.4492188 9.63671875,19.7539062 C9.98307292,20.0585938 10.46875,20.2109375 11.09375,20.2109375 Z\",\n id: \"i\"\n}))))));\n\nvar SvgInformation = function SvgInformation(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"6px\",\n height: \"14px\",\n viewBox: \"0 0 6 14\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgInformation, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/information.f352286b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card/mapassetdisplay2\",\n transform: \"translate(-160.000000, -8.000000)\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card---With-Shadow\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Online\",\n transform: \"translate(160.000000, 8.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.2628906,6.48457031 C13.4578125,4.359375 11.4064453,2.84765625 9.00351563,2.84765625 C6.60058594,2.84765625 4.54921875,4.35761719 3.74414063,6.4828125 C2.23066406,6.88183594 1.11621094,8.26523437 1.12494838,9.90703125 C1.13554687,11.7421875 2.559375,13.2345703 4.35234375,13.3945312 C4.43496094,13.4015625 4.50527344,13.3365234 4.50527344,13.2539062 L4.50527344,12.1921875 C4.50527344,12.121875 4.45253906,12.0621094 4.38222656,12.0533203 C3.90761719,11.9935547 3.459375,11.7861328 3.11484375,11.446875 C2.69296875,11.0337891 2.4609375,10.4783203 2.4609375,9.88945312 C2.4609375,9.39726562 2.62089844,8.93320312 2.92148438,8.54648437 C3.21503906,8.1703125 3.628125,7.89785156 4.08339844,7.77832031 L4.74960938,7.60253906 L4.99394531,6.95742188 C5.14511719,6.55664062 5.35605469,6.18046875 5.62148438,5.84121094 C5.88339844,5.50371094 6.19453125,5.20839844 6.54257813,4.96230469 C7.26503906,4.45429688 8.11582031,4.18535156 9.00351563,4.18535156 C9.89121094,4.18535156 10.7419922,4.45429688 11.4644531,4.9640625 C11.8142578,5.21015625 12.1236328,5.50546875 12.3855469,5.84296875 C12.6509766,6.18222656 12.8619141,6.55839844 13.0130859,6.95917969 L13.2556641,7.60253906 L13.9201172,7.77832031 C14.8728516,8.03144531 15.5390625,8.89804688 15.5390625,9.88769531 C15.5390625,10.4783203 15.3070313,11.0320312 14.8851563,11.4451172 C14.5423828,11.7826172 14.0958984,11.9917969 13.6212891,12.0515625 C13.5509766,12.0603516 13.5,12.1201172 13.5,12.1904297 L13.5,13.2539062 C13.5,13.3365234 13.5720703,13.4015625 13.6546875,13.3945312 C15.4423828,13.2328125 16.8626953,11.7421875 16.8750743,9.91054687 C16.8855469,8.26875 15.7728516,6.88535156 14.2628906,6.48457031 L14.2628906,6.48457031 Z\",\n id: \"Path\",\n fill: \"#0CA30E\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.62519531,11.5382812 C6.65683594,10.9494141 6.90117187,10.4009766 7.31953125,9.98085937 C7.76601562,9.53261719 8.37421875,9.28125 9.00703125,9.28125 C9.64335938,9.28125 10.2427734,9.52910156 10.6945313,9.98085937 C10.7191406,10.0054687 10.7419922,10.0300781 10.7666016,10.0564453 L10.3271484,10.4009766 C10.2844219,10.4340289 10.2644048,10.4886343 10.2756465,10.5414702 C10.2868882,10.5943062 10.3274014,10.6360327 10.3798828,10.6488281 L12.1060547,11.0707031 C12.1939453,11.0917969 12.2800781,11.025 12.2800781,10.9353516 L12.2888672,9.1546875 C12.2888672,9.03691406 12.1552734,8.97011719 12.0621094,9.04394531 L11.6542969,9.36386719 C11.0109375,8.62558594 10.0652344,8.15800781 9.00878906,8.15800781 C7.12089844,8.15800781 5.58105469,9.65390625 5.50371094,11.5277344 C5.50019531,11.6068359 5.56347656,11.6736328 5.64433594,11.6736328 L6.48632812,11.6736328 C6.56015625,11.671875 6.62167969,11.6138672 6.62519531,11.5382812 L6.62519531,11.5382812 Z M12.3574219,11.671875 L11.5154297,11.671875 C11.4416016,11.671875 11.3800781,11.7298828 11.3748047,11.8054687 C11.3431641,12.3943359 11.0988281,12.9427734 10.6804687,13.3628906 C10.2339844,13.8111328 9.62578125,14.0625 8.99296875,14.0625 C8.35664062,14.0625 7.75722656,13.8146484 7.30546875,13.3628906 C7.28085937,13.3382812 7.25800781,13.3136719 7.23339844,13.2873047 L7.67285156,12.9427734 C7.71557808,12.9097211 7.73559523,12.8551157 7.72435353,12.8022798 C7.71311184,12.7494438 7.67259855,12.7077173 7.62011719,12.6949219 L5.89394531,12.2730469 C5.80605469,12.2519531 5.71992187,12.31875 5.71992187,12.4083984 L5.71289062,14.1908203 C5.71289062,14.3085937 5.84648438,14.3753906 5.93964844,14.3015625 L6.34746094,13.9816406 C6.99082031,14.7199219 7.93652344,15.1875 8.99296875,15.1875 C10.8808594,15.1875 12.4207031,13.6916016 12.4980469,11.8177734 C12.5015625,11.7386719 12.4382812,11.671875 12.3574219,11.671875 Z\",\n id: \"Shape\",\n fill: \"#0CA30E\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle\",\n fillOpacity: 0,\n fill: \"#000000\",\n x: 0,\n y: 0,\n width: 18,\n height: 18\n})))));\n\nvar SvgOnline = function SvgOnline(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"18px\",\n height: \"18px\",\n viewBox: \"0 0 18 18\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgOnline, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/online.b15a3d13.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Maps\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Home-Landing---map-cluster\",\n transform: \"translate(-1381.000000, -139.000000)\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-7\",\n transform: \"translate(1209.000000, 139.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"cloud-outlined\",\n transform: \"translate(172.000000, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.0761555,9.80470588 C17.9936975,6.96235294 15.2355567,4.94117647 12.0047269,4.94117647 C8.77389706,4.94117647 6.0157563,6.96 4.93329832,9.80235294 C2.90782563,10.3317647 1.41176471,12.1670588 1.41176471,14.3529412 C1.41176471,16.9529412 3.52704832,19.0588235 6.13629202,19.0588235 L17.863708,19.0588235 C20.4729517,19.0588235 22.5882353,16.9529412 22.5882353,14.3529412 C22.5882353,12.1717647 21.0969013,10.3364706 19.0761555,9.80470588 Z M19.9340861,16.4164706 C19.386255,16.9650561 18.640724,17.2726188 17.863708,17.2705982 L6.13629202,17.2705982 C5.3539916,17.2705982 4.61896008,16.9670588 4.06591387,16.4164706 C3.51480929,15.8701576 3.20591791,15.1271996 3.2079729,14.3529412 C3.2079729,13.6941176 3.42305672,13.0752941 3.82720588,12.5576471 C4.22298172,12.0561863 4.77096537,11.6955137 5.38944328,11.5294118 L6.28518908,11.2964706 L6.61370798,10.4352941 C6.81696429,9.89882353 7.10057773,9.39764706 7.45745798,8.94352941 C7.80978088,8.4934299 8.22712436,8.09776421 8.69590336,7.76941176 C9.66727941,7.08941176 10.811187,6.72941176 12.0047269,6.72941176 C13.1982668,6.72941176 14.3421744,7.08941176 15.3135504,7.76941176 C15.7838761,8.09882353 16.1998424,8.49411765 16.5519958,8.94352941 C16.9088761,9.39764706 17.1924895,9.90117647 17.3957458,10.4352941 L17.7219013,11.2941176 L18.6152836,11.5294118 C19.8986345,11.8705882 20.7920168,13.0305882 20.7920168,14.3529412 C20.7920168,15.1317647 20.4871324,15.8658824 19.9340861,16.4164706 L19.9340861,16.4164706 Z\",\n id: \"Shape\",\n fill: \"#8C8C8C\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle\",\n fillOpacity: 0,\n fill: \"#000000\",\n x: 0,\n y: 0,\n width: 24,\n height: 24\n})))));\n\nvar SvgOffline = function SvgOffline(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgOffline, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/offline.02e3a531.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card/mapassetdisplay2\",\n transform: \"translate(-140.000000, -41.000000)\",\n fill: \"#ff9900\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mini-Card---With-Shadow\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-7\",\n transform: \"translate(136.000000, 35.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"noun_Engine_1041523\",\n transform: \"translate(4.000000, 6.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.5565301,4.73374372 L17.9199697,4.73374372 C17.625677,4.73374372 17.3873613,4.98034124 17.3873613,5.28486108 L17.3873613,6.51980387 L16.4714166,6.51980387 L16.4714166,4.81439504 C16.4714166,4.5098752 16.2331009,4.26327768 15.9388082,4.26327768 L13.5660437,4.26327768 L13.5660437,3.08503521 C13.5660437,2.78100417 13.327728,2.53391785 13.0334353,2.53391785 L10.5843814,2.53391785 L10.5843814,1.10223471 L12.6000267,1.10223471 C12.8943194,1.10223471 13.1326351,0.854903997 13.1326351,0.551117357 C13.1326351,0.246597522 12.8943194,0 12.6000267,0 L5.36245723,0 C5.06816452,0 4.82984883,0.246597522 4.82984883,0.551117357 C4.82984883,0.855148395 5.06840071,1.10223471 5.36245723,1.10223471 L7.45887946,1.10223471 L7.45887946,2.53391785 L5.36245723,2.53391785 C5.06816452,2.53391785 4.82984883,2.78100417 4.82984883,3.08503521 L4.82984883,4.26327768 L2.89450816,4.26327768 C2.60021545,4.26327768 2.36189977,4.5098752 2.36189977,4.81439504 L2.36189977,8.30146486 L1.06521679,8.30146486 L1.06521679,4.81806101 C1.06521679,4.51354117 0.826664918,4.26694365 0.532608397,4.26694365 C0.238315686,4.26694365 0,4.51354117 0,4.81806101 L0,12.9973269 C0,13.3018467 0.238315686,13.5484443 0.532608397,13.5484443 C0.826901108,13.5484443 1.06521679,13.3018467 1.06521679,12.9973269 L1.06521679,9.40394397 L2.36166358,9.40394397 L2.36166358,12.9973269 C2.36166358,13.3018467 2.59997926,13.5484443 2.89427197,13.5484443 L7.87315668,13.5484443 L9.6542653,15.7981273 C9.75535461,15.9261918 9.90651619,16 10.0664168,16 L15.938572,16 C16.2328647,16 16.4711804,15.7534025 16.4711804,15.4488826 L16.4711804,12.7849451 L17.3871251,12.7849451 L17.3871251,14.2022087 C17.3871251,14.5062398 17.6254408,14.7533261 17.9197335,14.7533261 L19.5562939,14.7533261 C19.7768953,14.7533261 19.9748225,14.6123085 20.05371,14.3989491 C22.1643036,8.7000779 20.0981137,5.14335467 20.0090701,4.99427192 C19.9122322,4.83248049 19.7407583,4.73374372 19.5565301,4.73374372 Z M8.52456864,1.10223471 L9.51892844,1.10223471 L9.51892844,2.53391785 L8.52456864,2.53391785 L8.52456864,1.10223471 Z M19.1854756,13.6510914 L18.4523419,13.6510914 L18.4523419,12.2338277 C18.4523419,11.9293079 18.2140262,11.6827104 17.9197335,11.6827104 L15.938572,11.6827104 C15.6442793,11.6827104 15.4059636,11.9293079 15.4059636,12.2338277 L15.4059636,14.8975209 L10.3184315,14.8975209 L8.5373229,12.6478378 C8.43623359,12.5202621 8.285072,12.4459651 8.1249352,12.4459651 L3.42711656,12.4459651 L3.42711656,5.3655124 L5.36269342,5.3655124 C5.65698613,5.3655124 5.89530182,5.11891487 5.89530182,4.81439504 L5.89530182,3.63615257 L12.5008269,3.63615257 L12.5008269,4.81439504 C12.5008269,5.11891487 12.7391426,5.3655124 13.0334353,5.3655124 L15.4059636,5.3655124 L15.4059636,7.07092123 C15.4059636,7.37544106 15.6442793,7.62203858 15.938572,7.62203858 L17.3873613,7.62203858 L17.3873613,9.55131593 C17.3873613,9.85583576 17.625677,10.1024333 17.9199697,10.1024333 C18.2142624,10.1024333 18.4525781,9.85559137 18.4525781,9.55131593 L18.4525781,7.07092123 L18.4525781,5.83597843 L19.2343669,5.83597843 C19.6160499,6.67524096 20.6141888,9.49266042 19.1854756,13.6510914 Z\",\n id: \"Shape\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.4338419,8.01977336 L9.54301447,8.01977336 L10.8529371,5.81748773 C11.0085815,5.55596177 10.9149438,5.22258271 10.6435704,5.07258633 C10.3716949,4.92210609 10.026265,5.01331356 9.87062065,5.27483952 L8.07493708,8.29387965 C7.97452139,8.46298848 7.97502347,8.67080605 8.07644332,8.83894716 C8.17786316,9.00708827 8.36413427,9.11087609 8.56647188,9.11087609 L10.4128654,9.11087609 L9.08185541,11.1658266 C8.91591848,11.4213043 8.99700415,11.7578284 9.26210157,11.9170181 C9.35523713,11.9733877 9.45916736,12 9.56159137,12 C9.75037287,12 9.93488669,11.9092764 10.0423315,11.7433126 L11.9140799,8.85443066 C12.023031,8.68628955 12.0288049,8.4746011 11.9288913,8.30089561 C11.8292287,8.12791591 11.6396941,8.01977336 11.4338419,8.01977336 Z\",\n id: \"Path\"\n}))))));\n\nvar SvgEngine = function SvgEngine(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"21px\",\n height: \"16px\",\n viewBox: \"0 0 21 16\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgEngine, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/engine.56495d1f.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#7725b9\",\n className: \"st0\",\n d: \"M119.28,33.83v44.74h-10.46v-6.91H49.94v6.91l-10.46,0V33.83h-3.6v-6.88h8.8l4.91-15.26 c1.45-4.49,3.86-8.58,8.58-8.58h44.26c4.72,0,7.44,4,8.58,8.58l3.79,15.26h8.09v6.88H119.28L119.28,33.83L119.28,33.83z M3.7,58.62 c-2.82,3.72-5.06,7.89-2.73,14.01c1.51,3.97,4.99,7.23,9.38,9.04c-7.17-15.82,13.41-21.49,14.03-2.75 c6.89-5.72,6.83-14.15,1.78-20.97c-2.38-3.22-3.58-5.03-4.1-6.89c-0.3-1.01-0.36-2.03-0.36-3.32c-0.02-4.35,0.48-8.63,0.58-13.24 c0.17-8.7,13.54-13.09,8.83-25.46C29.6,5.07,26.12,1.82,21.73,0C28.9,15.82,8.32,21.49,7.7,2.75C0.81,8.47,0.87,16.9,5.92,23.72 c2.22,2.99,4.83,4.87,4.67,10.76c-0.17,4.09-0.44,8.31-0.71,12.41c-0.1,1.63-0.26,2.71-0.66,3.74c-0.71,1.86-2.15,3.54-5.51,7.94 L3.7,58.62L3.7,58.62z M65.11,57.85h28.09v7.28l-28.09,0V57.85L65.11,57.85L65.11,57.85z M42.98,40.89 c7.87,0.25,12.69,3.55,13.92,10.42H42.98V40.89L42.98,40.89z M114.78,40.89c-7.87,0.25-12.69,3.55-13.92,10.42h13.92V40.89 L114.78,40.89z M48.43,26.95h61.89l-2.77-12.79c-0.76-3.51-2.94-6.54-6.54-6.54H59.07c-3.59,0-5.44,3.11-6.54,6.54L48.43,26.95 L48.43,26.95L48.43,26.95z\"\n}));\n\nvar SvgCarRepairServicePurple = function SvgCarRepairServicePurple(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 122.88 81.68\",\n style: {\n enableBackground: \"new 0 0 122.88 81.68\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCarRepairServicePurple, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/car_repair_service_purple.1bdcb0f9.svg\";\nexport { ForwardRef as ReactComponent };","import React, { CSSProperties } from \"react\";\n\nimport Icon from \"@ant-design/icons\";\n\nimport { ReactComponent as CriticalSvg } from \"../../assets/images/map-status/critical.svg\";\nimport { ReactComponent as WarningSvg } from \"../../assets/images/map-status/warning.svg\";\nimport { ReactComponent as InfoSvg } from \"../../assets/images/map-status/information.svg\";\nimport { ReactComponent as OnlineSvg } from \"../../assets/images/map-status/online.svg\";\nimport { ReactComponent as OfflineSvg } from \"../../assets/images/map-status/offline.svg\";\nimport { ReactComponent as EngineSvg } from \"../../assets/images/map-status/engine.svg\";\nimport { ReactComponent as AssetDownSvg } from \"../../assets/images/vehicle-icons/maintenance/car_repair_service_purple.svg\";\n\ninterface IconProps {\n onClick?: (a: any) => void;\n style?: CSSProperties;\n}\n\nexport type Icon = React.FC<IconProps>;\n\nfunction customIcon(Svg: React.FC<any>): Icon {\n return ({ onClick, style }) => (\n <Icon component={Svg} onClick={onClick} style={style} />\n );\n}\n\nexport const OnlineIcon: Icon = customIcon(OnlineSvg);\nexport const OfflineIcon: Icon = customIcon(OfflineSvg);\nexport const CriticalIcon: Icon = customIcon(CriticalSvg);\nexport const WarningIcon: Icon = customIcon(WarningSvg);\nexport const InfoIcon: Icon = customIcon(InfoSvg);\nexport const DM1Icon: Icon = customIcon(EngineSvg);\nexport const AssetDown: Icon = customIcon(AssetDownSvg);\n","import React, { CSSProperties } from \"react\";\nimport { Row, Col, Tooltip } from \"antd\";\nimport {\n CriticalIcon,\n WarningIcon,\n DM1Icon,\n InfoIcon,\n OnlineIcon,\n OfflineIcon,\n Icon,\n AssetDown\n} from \"../../icons\";\n\nimport { Filters } from \"./models\";\n\nimport \"../../fleetOverview.css\";\n\nfunction filterIconStyle(active?: boolean): CSSProperties {\n return active ? \n {\n backgroundColor: \"white\",\n opacity: 1\n } : \n {};\n}\n\ninterface TitleBarProps {\n filters: Filters;\n toggleFilters: (k: keyof Filters) => void;\n assetCount: number;\n}\n\ninterface FilterButtonProps {\n onClick: () => void;\n active: boolean;\n Icon: Icon;\n label: string;\n}\n\nconst FilterButton: React.FC<FilterButtonProps> = (props) => (\n <Col span={3}>\n <Tooltip title={props.label}>\n <div>\n <props.Icon\n onClick={props.onClick}\n style={filterIconStyle(props.active)}\n />\n </div>\n </Tooltip>\n </Col>\n);\n\nconst FiltersBar: React.FC<TitleBarProps> = (props) => {\n const { filters } = props;\n\n const toggleFilter = (f: keyof Filters) => {\n return () => props.toggleFilters(f);\n };\n\n return (\n <div\n data-id=\"map-filters-bar\"\n >\n <Row\n justify=\"space-around\"\n align=\"middle\" \n >\n <FilterButton\n Icon={CriticalIcon}\n active={filters.critical}\n onClick={toggleFilter(\"critical\")}\n label=\"Critical Alerts\"\n />\n <FilterButton\n Icon={WarningIcon}\n active={filters.warning}\n onClick={toggleFilter(\"warning\")}\n label=\"Warning Alerts\"\n />\n <FilterButton\n Icon={InfoIcon}\n active={filters.info}\n onClick={toggleFilter(\"info\")}\n label=\"Info Messages\"\n />\n <FilterButton\n Icon={DM1Icon}\n active={filters.dm1}\n onClick={toggleFilter(\"dm1\")}\n label=\"DM1s\"\n />\n <FilterButton\n Icon={OnlineIcon}\n active={filters.online}\n onClick={toggleFilter(\"online\")}\n label=\"Online\"\n />\n <FilterButton\n Icon={OfflineIcon}\n active={filters.offline}\n onClick={toggleFilter(\"offline\")}\n label=\"Offline\"\n />\n <FilterButton\n Icon={AssetDown}\n active={filters.asset_down}\n onClick={toggleFilter(\"asset_down\")}\n label=\"Asset Down\"\n />\n </Row>\n </div>\n );\n};\n\nexport default FiltersBar;\n","import { AssetOverview, Filters } from \"../../models\";\n\ninterface FilterFunc {\n (asset: AssetOverview): boolean;\n}\n\nfunction filterStatus(\n status:\n | \"recentDm1Count\"\n | \"recentCriticalCount\"\n | \"recentWarningCount\"\n | \"recentInfoCount\"\n | \"assetCustomFields\"\n) {\n\n return (asset: AssetOverview) => {\n if(status !== 'assetCustomFields'){\n return asset[status] > 0;\n } else if (status === 'assetCustomFields' && asset[status]) {\n return asset[status].includes(`\"additional_info\":\"active\"`)\n } else {\n return false\n }\n }\n}\n\nexport function acceptAll(asset: AssetOverview) {\n return true;\n}\n\nexport function statusFilter(filters: Filters) {\n let conditions: FilterFunc[] = [];\n\n if (filters.critical) {\n conditions.push(filterStatus(\"recentCriticalCount\"));\n }\n\n if (filters.warning) {\n conditions.push(filterStatus(\"recentWarningCount\"));\n }\n\n if (filters.info) {\n conditions.push(filterStatus(\"recentInfoCount\"));\n }\n\n if (filters.dm1) {\n conditions.push(filterStatus(\"recentDm1Count\"));\n }\n\n if (filters.asset_down) {\n conditions.push(filterStatus(\"assetCustomFields\"));\n }\n\n if (conditions.length === 0) {\n return acceptAll;\n }\n\n return (asset: AssetOverview) => conditions.some((f) => f(asset));\n}\n\n\n","import { AssetOverview } from \"../../models\";\nimport { Filters } from \"./models\";\nimport { statusFilter, acceptAll } from './asset-filters';\n\nfunction onlineFilter(asset: AssetOverview) {\n return asset.connectionStatus === \"online\";\n}\n\nfunction offlineFilter(asset: AssetOverview) {\n return asset.connectionStatus === \"offline\";\n}\n\nfunction connectionFilter(filters: Filters) {\n if (filters.online === filters.offline) {\n return acceptAll;\n }\n\n if (filters.online) return onlineFilter;\n\n return offlineFilter;\n}\n\nexport default function filterAssets(\n assets: AssetOverview[],\n filters: Filters\n): AssetOverview[] {\n const connFilter = connectionFilter(filters);\n const statFilter = statusFilter(filters);\n\n return assets.filter((a) => connFilter(a) && statFilter(a));\n}\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { Row, Card, Col, Pagination, Empty, message, Grid, Tag, Divider, Button, Tooltip, Input } from \"antd\";\nimport Icon, { ZoomInOutlined } from \"@ant-design/icons\";\nimport { MapActions } from \"../../../../sharedComponents/GoogleMap\";\n\nimport history from '../../../../utils/history';\nimport { AssetOverview, ServiceTruck } from \"../../models\";\nimport { appConfigs } from \"../../../../utils/configurations\";\nimport { formatGps, formatSignals } from \"../../../../utils/commonHelpers\";\n\nimport onlineIcon from \"../../../../assets/images/map-status/online.png\";\nimport offlineIcon from \"../../../../assets/images/map-status/offline.png\";\nimport criticalIcon from \"../../../../assets/images/map-status/critical.png\";\nimport warningIcon from \"../../../../assets/images/map-status/warning.png\";\nimport infoIcon from \"../../../../assets/images/map-status/info.png\";\nimport dm1Icon from \"../../../../assets/images/map-status/dm1.png\";\nimport ReactDOMServer from \"react-dom/server\";\nimport { getTopThreeGeoTabAssets } from \"../../../ServiceTrucks/serviceTrucksHelper\";\n\nimport { ReactComponent as Tractor3 } from \"../../../../assets/images/vehicle-icons/vehicles/tractor_3.svg\";\nimport { width } from \"@amcharts/amcharts4/.internal/core/utils/Utils\";\n\nconst { TextArea } = Input;\nconst { useBreakpoint } = Grid;\n\ninterface AssetStatusProps {\n context: string;\n mastertag: string;\n alertType: string;\n status: string,\n icon: any;\n count: number;\n assetDrawerClose?: Function\n}\n\nfunction displayCount(count: number) {\n return count < 100 ? count : \"99+\";\n}\n\nconst goToAsset = (\n e: any, \n mastertag: string, \n assetDrawerClose?: Function\n) => {\n e.preventDefault();\n if (assetDrawerClose) {\n assetDrawerClose();\n }\n history.push(\"/assets/\" + mastertag);\n}; \n\nconst goToAlerts = (\n e: any, mastertag: \n string, alertType: string, \n status: string, \n assetDrawerClose?: Function\n) => {\n e.preventDefault();\n if (assetDrawerClose) {\n assetDrawerClose();\n }\n history.push({\n pathname: \"/alerts\",\n state: [{ \n mode: alertType, \n mastertag: mastertag,\n status: alertType === \"signal-alarms\" ? status : \"\"\n }]\n }); \n}; \n\nconst AssetName = (props:any) => {\n return (\n <div className=\"assets-list-asset-name\">\n {\n props.context !== \"tooltip\" &&\n <a href=\"# \" onClick={(e) => {goToAsset(e, props.mastertag, props.assetDrawerClose)}} title=\"Asset Overview\"> \n {props.name || props.mastertag}\n </a>\n }\n {\n props.context === \"tooltip\" &&\n <a href={\"/assets/\" + props.mastertag} title=\"Asset Overview\"> \n {props.name || props.mastertag}\n </a>\n }\n </div>\n );\n};\n\nconst AssetStatusBody = (props:any) => {\n return (\n <>\n <img src={props.icon} alt=\"\" title={props.status === \"Critical\"? \"Critical Alerts\":props.status === \"Warning\"? \"Warning Alerts\": props.status===\"Info\"? \"Info Messages\": props.status===\"dm1\"? \"DM1s\": props.status} />\n <span>\n {displayCount(props.count)}\n </span>\n </>\n );\n};\n\nconst AssetStatus: React.FC<AssetStatusProps> = (props) => {\n return (\n <Col span={6}>\n <div className=\"map-assets-list-element\">\n {\n props.context!== \"tooltip\" &&\n <a href=\"# \" onClick={(e) => {goToAlerts(e, props.mastertag, props.alertType, props.status, props.assetDrawerClose)}}> \n <AssetStatusBody\n status={props.status}\n icon={props.icon} \n count={props.count} \n />\n </a>\n }\n {\n props.context === \"tooltip\" &&\n <a href={\"/alerts/\" + props.alertType + \"/\" + props.mastertag + \"/\" + props.status}>\n <AssetStatusBody\n status={props.status}\n icon={props.icon} \n count={props.count} \n />\n </a>\n }\n </div>\n </Col>\n );\n};\n\nconst GeotabAssetInfo = (props: any) => {\n return (\n <>\n {/* <Col span={12}><span><b>VIN:</b> {props.GeotabAsset.VIN.substring(props.GeotabAsset.VIN.length-6)}</span></Col> */}\n <Col span={18}><span> {props.GeotabAsset.operatorName?.length > 0 ? props.GeotabAsset.operatorName : `${props.GeotabAsset.VIN.substring(props.GeotabAsset.VIN.length - 6)} - (No Name Assigned)`}</span></Col>\n <Col span={6}><span> {props.GeotabAsset.distance.toFixed(2)} <span style={{ fontSize: '10px' }}>mi.</span></span></Col>\n </>\n );\n}\n\n\n\ninterface Props {\n context: string;\n assets: AssetOverview[];\n assetsAll?: AssetOverview[];\n searchText?: string;\n filters?: any;\n assetDrawerClose?: Function;\n mapActions?: MapActions;\n geotabAssets?: ServiceTruck[];\n\n}\n\nconst AssetList: React.FC<Props> = (props) => {\n const deviceSize = useBreakpoint(); \n \n const [pagination] = useState<any>(\n { \n showSizeChanger: appConfigs.tables.showSizeChanger,\n showQuickJumper: appConfigs.tables.showQuickJumper,\n pageSize: appConfigs.tables.pageSize,\n defaultCurrent: appConfigs.tables.defaultCurrent,\n current: appConfigs.tables.defaultCurrent,\n total: appConfigs.tables.defaultTotal,\n hideOnSinglePage: appConfigs.tables.hideOnSinglePage,\n responsive: appConfigs.tables.responsive,\n showLessItems: appConfigs.tables.showLessItems, \n showTotal: (total:number, range:Array<number>) => `${range[0]} - ${range[1]} of ${total} asset${total > 1 ? 's' : ''}`,\n size: \"small\"\n }\n )\n \n const [pageCurrent, setPageCurrent] = useState<number>(1);\n const [searchText, setSearchText] = useState<string>(\"\");\n const [filters, setFilters] = useState<any>({});\n\n const pageChange = (value:number) => {\n setPageCurrent(value); \n }\n\n const componentMounted = useRef<boolean>(true);\n useEffect(\n () => {\n if (!componentMounted.current) {\n componentMounted.current = true;\n } \n else {\n if (props.searchText !== searchText && pageCurrent !== 1) {\n setPageCurrent(1);\n }\n if (JSON.stringify(props.filters) !== JSON.stringify(filters) && pageCurrent !== 1) {\n setPageCurrent(1);\n }\n setSearchText(props.searchText || \"\");\n setFilters(props.filters);\n } \n },\n [props.searchText, props.filters] //eslint-disable-line\n ); \n \n \n return (\n <div data-id=\"map-assets-list\">\n {\n props.assets.slice((pageCurrent - 1) * pagination.pageSize, pageCurrent * pagination.pageSize).map((asset, index) => (\n <Row key={asset.id + \".\" + index}>\n <Card>\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={20}>\n <AssetName \n context={props.context}\n name={asset.name}\n mastertag={asset.mastertag}\n assetDrawerClose={props.assetDrawerClose}\n />\n </Col>\n {props.context !== \"tooltip\" &&\n <Col span={2} className=\"assets-list-connection-status\">\n <ZoomInOutlined onClick = {() => { \n if (props.mapActions && asset.position && asset.position.longitude && asset.position.latitude && asset.position.longitude !==0 && asset.position.latitude !== 0) {\n props.mapActions.focusAsset(asset.position.latitude, asset.position.longitude);\n if(!deviceSize.xl && !deviceSize.xxl) {\n if(props.assetDrawerClose) {\n props.assetDrawerClose();\n }\n }\n } else {\n message.info('Asset not available on map');\n }\n }} />\n </Col>\n }\n <Col span={2} className=\"assets-list-connection-status\">\n {\n asset.connectionStatus === \"online\" &&\n <img src={onlineIcon} title=\"Online\" alt=\"\"/>\n }\n {\n asset.connectionStatus !== \"online\" &&\n <img src={offlineIcon} title=\"Offline\" alt=\"\"/> \n }\n </Col>\n </Row>\n\n <div className=\"assets-list-org-name\">\n {asset.orgName}\n </div>\n\n {/* {\n props.context === \"tooltip\" &&\n <div className=\"assets-list-position\">\n {formatGps(asset.position?.latitude || 0, asset.position?.longitude || 0)}\n </div>\n \n } */}\n {\n props.context === \"tooltip\" &&\n <div className=\"asset-list-position msg-wrapper\">\n {\n <div data-id=\"pinned-signals-tooltip\"> \n </div>\n }\n </div>\n }\n\n <Row gutter={8} className=\"assets-list-status-line\">\n <AssetStatus\n context={props.context}\n mastertag={asset.mastertag}\n alertType=\"signal-alarms\"\n status=\"Critical\"\n icon={criticalIcon}\n count={asset.recentCriticalCount}\n assetDrawerClose={props.assetDrawerClose}\n />\n <AssetStatus\n context={props.context}\n mastertag={asset.mastertag}\n alertType=\"signal-alarms\"\n status=\"Warning\"\n icon={warningIcon}\n count={asset.recentWarningCount}\n assetDrawerClose={props.assetDrawerClose}\n />\n <AssetStatus \n context={props.context}\n mastertag={asset.mastertag}\n alertType=\"signal-alarms\"\n status=\"Info\"\n icon={infoIcon} \n count={asset.recentInfoCount} \n assetDrawerClose={props.assetDrawerClose}\n />\n <AssetStatus \n context={props.context}\n mastertag={asset.mastertag}\n alertType=\"dm1-faults\" \n status=\"dm1\"\n icon={dm1Icon} \n count={asset.recentDm1Count} \n assetDrawerClose={props.assetDrawerClose}\n />\n\n { asset.tagsSorted?.length > 0 &&\n <Card>\n <Row justify=\"start\" align=\"top\">\n <Col>\n <span style={{ marginRight: \"3px\" }}><b>Tags: </b></span>\n {\n asset.tagsSorted\n .map((tag:any, index:number) => (\n <Tag key={index}>\n {tag}\n </Tag>\n ))\n }\n </Col>\n </Row>\n </Card>\n } \n \n </Row>\n \n </Card>\n {/* { props.geotabAssets && (props.geotabAssets.length > 0) && \n <Card>\n { \n props.context === \"tooltip\" && props.geotabAssets && (props.geotabAssets.length > 0) &&\n <Row style={{paddingBottom: '5px'}}>\n <Col span={20}>\n <h4>Top 3 Nearby Service Trucks </h4>\n </Col>\n </Row>\n }\n\n {\n props.context === \"tooltip\" && props.geotabAssets &&\n <Row style={{lineHeight: 1}}>\n <Col span={18}><h4 style={{color: '#349beb'}}>Operator</h4></Col>\n <Col span={6}><h4 style={{color: '#349beb'}}>Distance</h4></Col>\n {\n getTopThreeGeoTabAssets(asset, props.geotabAssets).map((geotabAsset: any) => (\n <GeotabAssetInfo GeotabAsset={geotabAsset} mapActions={props.mapActions} key={geotabAsset.VIN} />\n ))\n }\n </Row>\n }\n </Card>\n } */}\n </Row>\n ))}\n\n {\n props.assets.slice((pageCurrent - 1) * pagination.pageSize, pageCurrent * pagination.pageSize).length === 0 &&\n <Empty \n image={Empty.PRESENTED_IMAGE_SIMPLE} \n description={\n <>\n <span>\n No Data\n </span>\n {\n props.context === \"list-asset-search-global\" &&\n (props.searchText || \"\").length < 2 &&\n <>\n <br />\n <span>Need at least 2 letters for global search</span>\n </>\n }\n </>\n }\n />\n }\n\n <Pagination\n {...pagination}\n current={pageCurrent}\n onChange={pageChange}\n total={props.assets.length}\n />\n\n </div>\n );\n};\n\nexport default AssetList;\n","import { ServiceTruck } from \"../../FleetOverview2/models\";\nimport Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\n\nexport function openServiceTruckDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_SERVICE_TRUCK_DRAWER_OPEN\",\n\t\t});\n\t};\n}\n\nexport function closeServiceTruckDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_SERVICE_TRUCK_DRAWER_CLOSE\" });\n\t};\n}\n\nexport function openServiceTruckMaintDrawer(ServiceTruck: ServiceTruck) {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_SERVICE_TRUCK_MAINT_DRAWER_OPEN\",\n\t\t\tpayload: { ServiceTruck: ServiceTruck },\n\t\t});\n\t};\n}\n\nexport function closeServiceTruckMaintDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: \"SET_SERVICE_TRUCK_MAINT_DRAWER_CLOSE\",\n\t\t});\n\t};\n}\n\n\nexport function setServiceTruckMap(map: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"SET_SERVICE_TRUCK_MAP\", payload: { map: map } });\n\t};\n}\n\n\nexport function getServiceTrucks(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n){\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/fleet-overview/service_trucks\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.serviceTrucks);\n }\n \n dispatch({type: \"GET_SERVICE_TRUCKS_SUCCESS\", assets: response.data.data.serviceTrucks})\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(null, error);\n }\n errorResponse(null, error);\n });\n };\n}\n\n\nexport function updateServiceTrucksDetails(\n serviceTrucks: ServiceTruck,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n){\n return async (dispatch: any, getState: any) => {\n \n const { assets } = getState().serviceTruckReducer.serviceTruckState.serviceTruckList;\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/fleet-overview/service_truck_maint\",\n {\n responseType: \"json\", \n headers: {},\n params: {\n vin: serviceTrucks.VIN,\n orgId: serviceTrucks.orgId,\n operatorName: serviceTrucks.operatorName\n }\n }\n )\n .then(response => {\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(\"Details Updated Successfully\");\n }\n\n dispatch({\n type: \"UPDATE_SERVICE_TRUCK_SUCCESS\",\n params: {\n vin: response.data.data.vin,\n serviceTrucks: serviceTrucks,\n assets: assets\n }\n })\n })\n .catch(function (error) {\n \n if (callbackFnFailure != null) {\n callbackFnFailure([\"Error while updating details\"]);\n }\n // errorResponse(null, error);\n });\n };\n}","import React, { useState, useEffect } from \"react\";\n\nimport { Input, Affix } from \"antd\";\nimport { SyncOutlined } from \"@ant-design/icons\";\n\nimport FiltersBar from \"../filtersBar/FiltersBar\";\nimport { Filters } from \"../filtersBar/models\";\nimport filterAssets from \"../filtersBar/filter-assets\";\nimport AssetList from \"../assetList/AssetList\";\nimport { appConfigs } from \"../../../../utils/configurations\";\nimport { MapActions } from \"../../../../sharedComponents/GoogleMap\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../actions\";\n\nimport \"../../fleetOverview.css\";\n\nconst { Search } = Input;\n\ninterface Props {\n fleetOverviewState: any,\n clusterInfoSearch: Function,\n mapsAssetDrawerClose: Function,\n context: any,\n mapActions?: MapActions\n}\n\nconst ClusterInfo = (props:Props) => {\n\n const [container, setContainer] = useState<any>(null);\n const [searchText, setSearchText] = useState<string>(\"\");\n const [typingTimeout, setTypingTimeout] = useState<NodeJS.Timeout>();\n const [loading, setLoading] = useState<boolean>(true);\n const [filters, setFilters] = useState<Filters>({\n critical: false,\n warning: false,\n info: false,\n dm1: false,\n online: false,\n offline: false,\n asset_down: false\n });\n \n useEffect(() => {\n let isMounted = true; \n \n setTimeout(function () {\n if (isMounted) {\n setLoading(false);\n }\n }, 250); \n\n return () => { isMounted = false }; \n }, [])\n\n const toggleFilters = (f: keyof Filters) => {\n setFilters({\n ...filters,\n [f]: !filters[f],\n });\n }; \n\n const onSearchChange = (e: any) => {\n const searchText = e.target.value;\n \n if (typingTimeout) {\n clearTimeout(typingTimeout);\n }\n\n setTypingTimeout(\n setTimeout(function () {\n setSearchText(searchText);\n props.clusterInfoSearch(searchText);\n }, appConfigs.app.fleetOverview.assetSearchGlobalKeystrokeDelay)\n ) \n }\n \n const { assetDrawer } = props.fleetOverviewState;\n\n return (\n <>\n <div data-id=\"map-cluster-info\" ref={setContainer}> \n\n <Affix data-id=\"map-cluster-info-affix\" offsetTop={1} target={() => container}>\n <div> \n <FiltersBar\n assetCount={assetDrawer.cluster.assets.length}\n filters={filters}\n toggleFilters={toggleFilters}\n />\n\n <Search\n data-id=\"map-cluster-info-list-search-field\"\n key=\"tree-search-field\"\n placeholder=\"Filter assets\"\n size=\"middle\"\n allowClear\n onChange={onSearchChange}\n className=\"search-field\"\n /> \n </div> \n </Affix>\n\n {\n !loading &&\n <AssetList \n context=\"list-cluster\"\n assets={filterAssets(assetDrawer.cluster.filteredAssets, filters)} \n assetsAll={assetDrawer.cluster.assets} \n searchText={searchText}\n filters={filters}\n assetDrawerClose={props.mapsAssetDrawerClose}\n mapActions={props.mapActions}\n />\n }\n \n </div>\n\n {\n loading &&\n <div data-id=\"map-asset-list-loading\">\n <SyncOutlined spin className=\"pr-5\"/>\n </div>\n } \n </>\n );\n};\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context, \n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ClusterInfo);\n ","import React, { useEffect, useState } from \"react\";\n\nimport { Space, Input, Switch, Tooltip, Affix, Button } from \"antd\";\nimport Icon, { SyncOutlined, BorderOuterOutlined, SearchOutlined, CloseCircleOutlined } from \"@ant-design/icons\";\n\nimport FiltersBar from \"../filtersBar/FiltersBar\";\nimport { Filters } from \"../filtersBar/models\";\nimport filterAssets from \"../filtersBar/filter-assets\";\n\nimport AssetList from \"../assetList/AssetList\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../actions\";\nimport { MapActions } from \"../../../../sharedComponents/GoogleMap\";\nimport { ReactComponent as maximizeIcon } from \"../../../../assets/images/maximize.svg\";\n\nimport \"../../fleetOverview.css\";\n\nconst { Search } = Input;\n\ninterface Props {\n fleetOverviewState: any,\n getFleetOverview: Function,\n assetSearchSearch: Function,\n assetSearchReset: Function,\n assetZoomToFitFilter: Function,\n setAssetSearchValue: Function,\n setAssetSearchFilters: Function,\n setPreSearchAssetsList: Function,\n mapsAssetDrawerClose: Function,\n context: any,\n mapActions?: MapActions,\n map?: any \n}\n\nconst AssetSearch = (props:Props) => {\n \n const [container, setContainer] = useState<any>(null);\n const [allAssets, setAllAssets] = useState<any>(props.fleetOverviewState.preSearchAssetList);\n const [searchText, setSearchText] = useState<string>(props.fleetOverviewState.assetSearchValue);\n const [, setStartPage] = useState<number>(1);\n const [globalSearch, setGlobalSearch] = useState<boolean>(false);\n const [typingTimeout, setTypingTimeout] = useState<NodeJS.Timeout>();\n const [loading, setLoading] = useState<boolean>(true);\n const [filters, setFilters] = useState<Filters>({\n critical: false,\n warning: false,\n info: false,\n dm1: false,\n online: false,\n offline: false,\n asset_down: false\n });\n const [mapActions, setMapActions] = useState<MapActions>();\n \n useEffect(() => {\n let isMounted = true; \n\n setTimeout(function () {\n if (isMounted) {\n setLoading(false);\n }\n }, 250); \n \n setTypingTimeout(\n setTimeout(function () {\n props.setAssetSearchValue(searchText);\n setStartPage(1);\n if (globalSearch) {\n props.getFleetOverview(null, null, \"global-search\", searchText, null);\n }\n else {\n props.assetSearchSearch(searchText);\n }\n }, globalSearch ? appConfigs.app.fleetOverview.assetSearchKeystrokeDelay : appConfigs.app.fleetOverview.assetSearchGlobalKeystrokeDelay)\n ) \n\n return () => { isMounted = false }; \n }, [])\n\n const toggleFilters = (f: keyof Filters) => {\n setFilters({\n ...filters,\n [f]: !filters[f],\n });\n };\n\n const ZoomFitFiltered = (e: any) => {\n console.log('ZoomFitFiltered')\n console.log(props.fleetOverviewState, assetDrawer, filters)\n\n if (assetDrawer.assetSearch.assets.length > 0) {\n //Save current search value\n props.setAssetSearchValue(searchText);\n\n //Save current filter value\n props.setAssetSearchFilters(filters)\n \n // Object.keys(filters).map(filterKey => {\n // filtersp[filterKey]\n // })\n\n // let assetToZoom = assetDrawer.assetSearch.assets.filter((asset:any) => {\n // if(filters.critical && asset.recentCriticalCount > 0){\n // return asset;\n // } else if(filters.critical && asset.recentCriticalCount > 0){\n // return asset;\n // } else if(filters.critical && asset.recentWarningCount > 0){\n // return asset;\n // } else if(filters.critical && asset.recentInfoCount > 0){\n // return asset;\n // } else if(filters.critical && asset.recentDm1Count > 0){\n // return asset;\n // } else if(filters.critical && asset.connectionStatus == 'online'){\n // return asset;\n // } else if(filters.critical && asset.recentInfoCount == 'offline'){\n // return asset;\n // } else if(filters.critical && (JSON.stringify(asset.assetCustomFields).includes('asset_down') || JSON.stringify(asset.assetCustomFields).includes('active') )){\n // return asset;\n // } else if ()\n // })\n\n //filter markers\n props.assetZoomToFitFilter(assetDrawer.assetSearch.assets, props.mapActions)\n \n //zoom to fit filtered assets\n setTimeout(function () {\n props.map.setZoom(props.map.getZoom() + 1)\n\n let bounds = new google.maps.LatLngBounds();\n \n \n assetDrawer.assetSearch.assets.map((marker:any) => {\n bounds.extend(new google.maps.LatLng(marker.position.latitude, marker.position.longitude));\n });\n\n props.map.fitBounds(bounds)\n\n }, 200);\n }\n\n }\n\n\n const onSearchChange = (e: any) => {\n\n if(e.target.value === ''){\n props.assetZoomToFitFilter(allAssets, props.mapActions)\n props.setAssetSearchValue('');\n props.setAssetSearchFilters({\n critical: false,\n warning: false,\n info: false,\n dm1: false,\n online: false,\n offline: false,\n asset_down: false\n })\n\n setFilters({\n critical: false,\n warning: false,\n info: false,\n dm1: false,\n online: false,\n offline: false,\n asset_down: false\n });\n }\n\n const searchText = e.target.value;\n \n if (typingTimeout) {\n clearTimeout(typingTimeout);\n }\n\n setTypingTimeout(\n setTimeout(function () {\n setSearchText(searchText);\n setStartPage(1);\n if (globalSearch) {\n props.getFleetOverview(null, null, \"global-search\", searchText, null);\n }\n else {\n props.assetSearchSearch(searchText);\n }\n }, globalSearch ? appConfigs.app.fleetOverview.assetSearchKeystrokeDelay : appConfigs.app.fleetOverview.assetSearchGlobalKeystrokeDelay)\n ) \n }\n\n const onGlobalChange = (checked: boolean, e:any) => {\n setLoading(true); \n setTimeout(function () {\n setGlobalSearch(checked);\n if (checked) {\n if ((searchText || \"\") !== \"\") {\n props.getFleetOverview(getFleetOverviewSuccess, null, \"global-search\", searchText, null);\n }\n else {\n props.assetSearchReset();\n setLoading(false);\n }\n }\n else {\n props.assetSearchSearch(searchText);\n setLoading(false);\n }\n }, 250);\n \n }\n const getFleetOverviewSuccess = (assets:any) => {\n setLoading(false);\n }\n\n const { assetDrawer } = props.fleetOverviewState;\n\n return (\n \n <>\n <div data-id=\"map-asset-list\"ref={setContainer}> \n \n <Affix data-id=\"map-asset-list-affix\" offsetTop={1} target={() => container}>\n <div> \n <FiltersBar\n assetCount={assetDrawer.cluster.assets.length}\n filters={filters}\n toggleFilters={toggleFilters}\n />\n \n <div data-id=\"map-asset-list-header\"> \n <div> \n <Space>\n <Search\n data-id=\"map-asset-list-search-field\"\n key=\"tree-search-field\"\n placeholder=\"Filter assets by name, master tag, or tags\"\n size=\"middle\"\n allowClear\n defaultValue={searchText}\n onChange={onSearchChange}\n className=\"search-field\"\n suffix={\n <Tooltip \n title=\"Zoom Map to Fit Filtered Assets\" \n placement=\"topRight\"\n >\n <Icon onClick={ZoomFitFiltered} component={maximizeIcon} style={{ fontSize: 20, marginLeft: 3, marginRight: 1, height: '100%', borderLeft: '1px solid #b3b3b3', color: '#707070', cursor: 'pointer', paddingLeft: '4px' }} />\n </Tooltip>\n }\n /> \n {/* //commented as part of ops-1694 */}\n {/* <Tooltip title=\"Search all assets\"> \n <Switch \n checkedChildren=\"GLOBAL\"\n unCheckedChildren=\"GLOBAL\"\n onClick={onGlobalChange}\n /> \n </Tooltip> */}\n </Space>\n \n </div>\n </div>\n </div>\n </Affix>\n\n {\n !loading &&\n <AssetList \n context={\"list-asset-search\" + (globalSearch ? \"-global\" : \"\")}\n assets={filterAssets(assetDrawer.assetSearch.assets, filters)} \n assetsAll={props.fleetOverviewState.fleet.filteredAssets} \n searchText={searchText}\n filters={filters}\n assetDrawerClose={props.mapsAssetDrawerClose}\n mapActions={props.mapActions}\n />\n }\n \n </div>\n \n {\n loading &&\n <div data-id=\"map-asset-list-loading\">\n <SyncOutlined spin className=\"pr-5\"/>\n </div>\n }\n </>\n );\n};\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context, \n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetSearch);\n\nReact.memo(AssetSearch)\n ","import React from \"react\";\nimport { Drawer, Tooltip, Space, Row, Col } from \"antd\";\nimport { CloseOutlined, ZoomInOutlined } from \"@ant-design/icons\";\n\nimport ClusterInfo from \"./clusterInfo/ClusterInfo\";\nimport AssetSearch from \"./assetSearch/AssetSearch\";\nimport { MapActions } from \"../../../sharedComponents/GoogleMap\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\ninterface Prop {\n mapsAssetDrawerClose: Function,\n fleetOverviewState: any,\n context: any,\n mapActions?: MapActions,\n map?: any\n}\n\nclass AssetDrawer extends React.Component<Prop, {}> { \n \n onClose = () => { \n this.props.mapsAssetDrawerClose();\n };\n\n onZoom = () => {\n this.props.fleetOverviewState.assetDrawer.cluster.zoomTo();\n this.onClose();\n }\n\n render() {\n \n const { assetDrawer } = this.props.fleetOverviewState;\n\n return (\n <Drawer\n data-id=\"map-asset-drawer\" \n title={\n <Row align=\"middle\" data-id=\"map-cluster-info-title-bar\">\n <Col span={16}>\n {assetDrawer.title}\n </Col>\n <Col span={8}>\n <Space>\n {\n assetDrawer.mode === \"cluster\" &&\n <Tooltip title=\"Zoom Into Cluster\"> \n <ZoomInOutlined onClick={() => this.onZoom()} />\n </Tooltip>\n }\n <Tooltip title=\"Close\"> \n <CloseOutlined onClick={() => this.onClose()} />\n </Tooltip>\n </Space>\n </Col>\n </Row>\n }\n width={assetDrawer.width}\n closable={false}\n onClose={this.onClose}\n visible={assetDrawer.show}\n destroyOnClose={true}\n >\n \n {\n assetDrawer.mode === \"cluster\" &&\n <ClusterInfo mapActions={this.props.mapActions} />\n }\n {\n assetDrawer.mode === \"asset-search\" && \n <AssetSearch map={this.props.map} mapActions={this.props.mapActions} />\n }\n\n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context, \n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetDrawer);","import React from \"react\";\nimport { Switch, Row, Col, Tooltip } from \"antd\";\nimport { CloseCircleOutlined } from \"@ant-design/icons\";\nimport { Filters, FilterCounts } from \"../../models\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../actions\";\n\nexport interface Props {\n fleetOverviewState: any;\n filtersToggle: Function;\n filtersReset: Function;\n filters: Filters;\n filterCounts: FilterCounts;\n filterPreferences: Function;\n mapActions: any;\n}\n\ninterface State {\n isMapTableFiltersSet: boolean\n}\n\nconst FilterSwitch: React.FC<{\n active: boolean;\n toggle: () => void;\n label: string;\n color: string;\n count: number;\n}> = (props) => {\n const style = (props.active && (props.count > 0)) ? { backgroundColor: props.color } : {}; \n let active = (props.active && (props.count > 0)) ? true : false;\n return (\n <Row align=\"middle\" justify=\"space-between\">\n <Col span={8}>\n <Switch\n style={style}\n checked={active}\n onChange={props.toggle}\n size=\"small\"\n disabled={(props.count || 0) === 0}\n />\n </Col>\n <Col span={12}>\n {props.label}\n </Col>\n <Col span={4}>\n {`[${props.count < 100 ? props.count : \"99+\"}]`}\n </Col>\n </Row>\n );\n};\n\nconst FilterPanel = (props: Props) => {\n\n const filtersToggle = (filterName: string) => {\n let filter: any = props.filters;\n let value = filter[filterName] ? 'false' : 'true';\n props.filterPreferences('map', filterName, value,false, callbackFnSuccess);\n \n };\n const callbackFnSuccess = (filterData: any) => {\n props.filtersToggle(filterData.map, props.mapActions);\n }\n const filtersReset = (e: any) => {\n e.preventDefault();\n props.filterPreferences('map', 'null', 'null',true, callbackFnSuccess);\n props.filtersReset(props.mapActions);\n };\n\n return (\n <div data-id=\"map-filter-panel\">\n <span>Filters</span>\n {\n ((props.filters.critical && props.filterCounts.critical > 0) || (props.filters.warning && props.filterCounts.warning > 0) || (props.filters.info && props.filterCounts.info > 0) || (props.filters.dm1 && props.filterCounts.dm1 > 0)) &&\n <Tooltip title=\"Reset All Filters\">\n <a href=\"# \" onClick={(e) => { filtersReset(e)}} className=\"pl-5\">\n <CloseCircleOutlined />\n </a>\n </Tooltip>\n }\n <div className=\"mt-10\">\n <FilterSwitch\n active={props.filters.critical}\n toggle={() => filtersToggle(\"critical\")}\n label=\"Critical\"\n color=\"#d11515\"\n count={props.filterCounts.critical}\n />\n <FilterSwitch\n active={props.filters.warning}\n toggle={() => filtersToggle(\"warning\")}\n label=\"Warning\"\n color=\"#ecc800\"\n count={props.filterCounts.warning}\n />\n <FilterSwitch\n active={props.filters.info}\n toggle={() => filtersToggle(\"info\")}\n label=\"Info\"\n color=\"#1e90ff\"\n count={props.filterCounts.info}\n />\n <FilterSwitch\n active={props.filters.dm1}\n toggle={() => filtersToggle(\"dm1\")}\n label=\"DM1s\"\n color=\"#ff9900\"\n count={props.filterCounts.dm1}\n />\n </div>\n </div>\n );\n};\n\nconst mapStateToProps = (state:any) => {\n return {\n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(FilterPanel);\n","import { Space } from \"antd\";\nimport React from \"react\";\nimport { formatGps } from \"../../../utils/commonHelpers\";\n\nimport { AssetWithGps, ServiceTruck } from \"../models\";\nimport AssetList from \"./assetList/AssetList\";\nimport moment from \"moment\"\n\ninterface TooltipProps {\n asset: AssetWithGps;\n geotabAssets?: ServiceTruck[];\n}\n\nconst MarkerTooltip: React.FC<TooltipProps> = ({ asset, geotabAssets }) => {\n \n return (\n <div key={asset.id} data-id=\"map-marker-tooltip\">\n <AssetList \n assets={[asset]} \n assetsAll={[asset]} \n context=\"tooltip\"\n geotabAssets={geotabAssets}\n />\n </div>\n );\n};\n\nexport function markerTooltipFromAsset(asset: AssetWithGps, geotabAssets?: ServiceTruck[]) {\n return (\n <MarkerTooltip asset={asset} geotabAssets={geotabAssets}/>\n );\n}\n\nexport function markerTooltipFromGeotabAsset(geotabAsset: ServiceTruck){\n return(\n <div>\n <h3 style={{color: '#349beb', paddingTop: '7px'}}>Operator: {geotabAsset.operatorName?.length > 0 ? geotabAsset.operatorName : '(No Name Assigned)'}</h3>\n <Space direction=\"vertical\" size={5}>\n {/* <span>Vehicle ID: {geotabAsset.VIN.substring(geotabAsset.VIN.length-6)}</span> */}\n <span>Vehicle ID: {geotabAsset.vehicleName}</span>\n <span>Location: {formatGps(geotabAsset.latitude, geotabAsset.longitude)}</span>\n <span>Speed: {(geotabAsset.speed * 0.621371).toFixed(2).toString()} mph</span>\n <span>Last Updated: {moment(geotabAsset.dateTime).format('MMM Do YYYY, h:mm:ss A')}</span>\n </Space>\n </div>\n );\n}","import CriticalPin from \"../../assets/images/map-pins/critical-pin.svg\";\nimport Dm1Pin from \"../../assets/images/map-pins/dm1-pin.svg\";\nimport WarningPin from \"../../assets/images/map-pins/warning-pin.svg\";\nimport InfoPin from \"../../assets/images/map-pins/info-pin.svg\";\nimport OnlinePin from \"../../assets/images/map-pins/online-pin.svg\";\nimport OfflinePin from \"../../assets/images/map-pins/offline-pin.svg\";\nimport AssetDownPin from \"../../assets/images/map-pins/asset_down.svg\";\nimport ServiceTruckPin from \"../../assets/images/map-pins/servicetruck-pin.svg\";\nimport { AssetOverview } from './models';\n\nexport { CriticalPin, Dm1Pin, WarningPin, InfoPin, OnlinePin, OfflinePin };\n\nexport function getPin(asset: AssetOverview): string {\n if (asset.recentCriticalCount > 0) return CriticalPin;\n else if (asset.recentDm1Count > 0) return Dm1Pin;\n else if (asset.recentWarningCount > 0) return WarningPin;\n else if (asset.recentInfoCount > 0) return InfoPin;\n else if (asset.connectionStatus === \"online\") return OnlinePin;\n else if (asset.assetCustomFields?.includes(`\"additional_info\":\"active\"`) > 0) return AssetDownPin;\n else return OfflinePin;\n }\n\nexport function getGeotabPin():string {\n return ServiceTruckPin;\n}","import { ClusterIconStyle } from \"@google/markerclustererplus\";\n\nexport enum Status {\n normal = 0,\n info = 1,\n warning = 2,\n dm1 = 3,\n critical = 4,\n asset_down = 5\n}\n\nfunction encode(s: string): string {\n const encoded = window.btoa(s);\n\n return `data:image/svg+xml;base64, ${encoded}`;\n}\n\nconst COLOR_PROPS = {\n [Status.info]: {\n stroke: \"#105AE6\",\n fill: \"#0F62FE\"\n },\n [Status.normal]: {\n stroke: \"#209846\",\n fill: \"#24A148\"\n },\n [Status.warning]: {\n stroke: \"#E47E27\",\n fill: \"#ecc800\"\n },\n [Status.critical]: {\n stroke: \"#A01A21\",\n fill: \"#DA1E28\"\n },\n [Status.dm1]: {\n stroke: \"#BDA539\",\n fill: \"#ff9900\"\n },\n [Status.asset_down]: {\n stroke: \"#7725b9\",\n fill: \"#a240e3\"\n },\n};\n\nconst COLORS = Object.keys(COLOR_PROPS).map(Number);\n\nconst SIZE_PROPS = {\n small: {\n outer: 27,\n inner: 20\n },\n medium: {\n outer: 30,\n inner: 23\n },\n large: {\n outer: 33,\n inner: 26\n }\n};\n\nconst SIZES = Object.keys(SIZE_PROPS);\nconst N_SIZES = SIZES.length;\n\nexport type Color = keyof typeof COLOR_PROPS;\nexport type Size = keyof typeof SIZE_PROPS;\n\nfunction clusterIcon(color: Color, size: Size): ClusterIconStyle {\n\n const { outer, inner } = SIZE_PROPS[size];\n const imageSize = outer * 2;\n\n const { stroke, fill } = COLOR_PROPS[color];\n\n const url = encode(`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <svg width=\"${imageSize}px\" height=\"${imageSize}px\" viewBox=\"0 0 ${imageSize} ${imageSize}\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g id=\"Maps\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g fill=\"${fill}\">\n <circle id=\"Oval\" opacity=\"0.5\" cx=\"${outer}\" cy=\"${outer}\" r=\"${outer}\"></circle>\n <circle id=\"Oval\" stroke=\"${stroke}\" stroke-width=\"2\" cx=\"${outer}\" cy=\"${outer}\" r=\"${inner}\"></circle>\n </g>\n </g>\n </svg>`);\n\n return {\n url,\n height: imageSize,\n width: imageSize,\n fontWeight: \"bold\",\n textLineHeight: imageSize,\n textSize: 11,\n backgroundPosition: \"0 0\"\n };\n}\n\nexport function computeStyleIndex(color: Color, size: Size): number {\n const index1 = COLORS.indexOf(color);\n const index2 = SIZES.indexOf(size);\n\n const result = index1 * N_SIZES + index2;\n return result;\n}\n\nfunction generateStyles() {\n let result: ClusterIconStyle[] = [];\n\n for (const color of COLORS) {\n for (const size of SIZES) {\n const index = computeStyleIndex(color as Color, size as Size);\n const icon = clusterIcon(color as Color, size as Size);\n result[index] = icon;\n }\n }\n return result;\n}\n\nconst STYLES = generateStyles();\n\nexport default STYLES;\n","import ReactDOMServer from \"react-dom/server\";\nimport MarkerClusterer, {\n\tMarkerClustererOptions,\n} from \"@google/markerclustererplus\";\nimport { Cluster } from \"@google/markerclustererplus/dist/cluster\";\nimport CLUSTER_STYLES from \"./cluster-styles\";\nexport interface Marker {\n\ttooltip?: any;\n\ttooltipHandler?: string;\n\tlabel?: google.maps.MarkerLabel;\n\ttimestamp?: any;\n\tcolor?: string;\n\tvalue?: any;\n\tposition: google.maps.LatLngLiteral;\n\tid: string;\n\ticon?: ReturnType<google.maps.Marker[\"getIcon\"]>;\n\toptimized?: Boolean;\n\tshow?: Boolean;\n\tenabled?: Boolean;\n\tsignalId?: string;\n}\n\ninterface ClusterActions {\n\tzoomTo: () => void;\n}\n\nexport type ServiceTruckMarker = Marker & { VIN: string};\n\nexport interface ClusterClickHandler {\n\t(ids: ClusterIds, actions: ClusterActions): void;\n}\n\nconst DEFAULT_CLUSTER_OPTIONS: MarkerClustererOptions = {\n\timagePath:\n\t\t\"https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m\",\n\tstyles: CLUSTER_STYLES,\n\tminimumClusterSize: 2,\n\tmaxZoom: 20,\n\tzoomOnClick: false,\n\taverageCenter: true,\n};\n\ntype ClusterIds = Array<Marker[\"id\"]>;\n\ninterface OptionsWithClustering {\n\tclusterMarkers: boolean;\n\tonClusterClick?: ClusterClickHandler;\n\teventsOnMap?: boolean\n}\n\ninterface OptionsNoClustering {\n\tclusterMarkers: boolean;\n\tcalculator?: undefined;\n\teventsOnMap?: boolean\n\t// onClusterClick?: ClusterClickHandler;\n}\n\nexport type ClusteringOptions = OptionsWithClustering | OptionsNoClustering;\n\ninterface MarkerStore {\n\tmarker: google.maps.Marker;\n\ttooltip?: any;\n\tlabel?: google.maps.MarkerLabel;\n}\n\ntype MarkerArray = Array<MarkerStore & { id: Marker[\"id\"] }>;\n\nfunction setIcon(gmarker: google.maps.Marker, marker: Marker) {\n\tif (marker.icon) gmarker.setIcon(marker.icon);\n}\n\nexport default class MarkerManager {\n\tprivate _assets: any;\n\tpublic _infowindow: any;\n\tprivate _markers: Map<string, MarkerStore> = new Map();\n\tprivate _clusterer?: MarkerClusterer;\n\tprivate _clusterListener?: google.maps.MapsEventListener;\n\tprivate _bounds: google.maps.LatLngBounds = new google.maps.LatLngBounds();\n\tprivate _options: any;\n\tprivate _serviceTruckMarkers: Map<string,MarkerStore> = new Map(); \n\tprivate _serviceTrucks: any;\n\tprivate _toolTipOptions: any;\n\n\n\tconstructor(map: google.maps.Map, options?: any, geofenceOptions?: any, toolTipOptions?: any) {\n\t\tthis._options = options\n\t\tthis._toolTipOptions = toolTipOptions\n\t\tif (options?.clusterMarkers) {\n\t\t\tthis.setupClusterer(map, options);\n\t\t}\n\t}\n\n\tgetMarkers(): MarkerArray {\n\t\tconst result: MarkerArray = [];\n\n\t\tthis._markers.forEach(({ marker, tooltip, label }, id) => {\n\t\t\tresult.push({\n\t\t\t\tid,\n\t\t\t\tmarker,\n\t\t\t\ttooltip,\n\t\t\t\tlabel,\n\t\t\t});\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tprivate tooltipManager(\n\t\tmap: google.maps.Map,\n\t\tgmarker: google.maps.Marker,\n\t\tmarker: Marker\n\t) {\n\n\t\tif(this._toolTipOptions){\n\n\t\t\tthis._toolTipOptions.toggleMarkerToolTip(!this._toolTipOptions.tooltipVisibility)\n\t\t\tthis._toolTipOptions.updateToolTipMarkerDetails(marker, gmarker)\n\t\t\t\n\t\t} else {\n\n\t\t\tlet tooltip: any;\n\t\t\tlet tooltipHandler: any;\n\n\t\t\tif ((marker.tooltipHandler || \"\") !== \"\") {\n\t\t\t\ttooltipHandler = document.querySelectorAll(marker.tooltipHandler || \"\");\n\t\t\t\tif (tooltipHandler) {\n\t\t\t\t\twindow.sessionStorage.setItem(\"mapTooltipGenerator\", marker.id);\n\t\t\t\t\ttooltipHandler[0].click();\n\t\t\t\t\ttooltip = window.sessionStorage.getItem(\"mapTooltipGenerator\");\n\t\t\t\t\twindow.sessionStorage.removeItem(\"mapTooltipGenerator\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((marker.tooltip || \"\") !== \"\") {\n\t\t\t\tfor (const asset of this._assets) {\n\t\t\t\t\tif (asset.id === marker.id) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\ttooltip = ReactDOMServer.renderToString(asset.tooltip);\n\t\t\t\t\t\t} catch (error) {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._infowindow) {\n\t\t\t\tthis._infowindow.close();\n\t\t\t}\n\n\t\t\tthis._infowindow = new google.maps.InfoWindow({});\n\t\t\tthis._infowindow.setContent(tooltip);\n\t\t\tthis._infowindow.open(map, gmarker);\n\n\t\t\tif (tooltipHandler) {\n\t\t\t\twindow.sessionStorage.removeItem(\"mapTooltipLink\");\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tconst tooltipAnchors: any = document.querySelectorAll(\n\t\t\t\t\t\t\"[data-id=map-marker-tooltip] a\"\n\t\t\t\t\t);\n\t\t\t\t\tfor (let i = tooltipAnchors.length; i--; ) {\n\t\t\t\t\t\tlet href = tooltipAnchors[i].href.replace(window.location.origin, \"\");\n\t\t\t\t\t\ttooltipAnchors[i].onclick = function (e: any) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\twindow.sessionStorage.setItem(\"mapTooltipLink\", href);\n\t\t\t\t\t\t\tlet button: HTMLElement = document.querySelectorAll(\n\t\t\t\t\t\t\t\tmarker.tooltipHandler || \"\"\n\t\t\t\t\t\t\t)[0] as HTMLElement;\n\t\t\t\t\t\t\tbutton.click();\n\t\t\t\t\t\t};\n\t\t\t\t\t\ttooltipAnchors[i].setAttribute(\"href\", \"#\");\n\t\t\t\t\t}\n\t\t\t\t}, 250);\n\t\t\t}\n\n\t\t}\n\t\t\n\n\t\t\n\t}\n\n\tpublic updateMarkers(\n\t\tmarkers: Marker[],\n\t\tmap: google.maps.Map,\n\t\toptions?: ClusteringOptions,\n\t) {\n\t\tconst newMap: Map<string, MarkerStore> = new Map();\n\t\tthis._bounds = new google.maps.LatLngBounds();\n\t\tthis._assets = markers;\n\n\t\tif (!options?.clusterMarkers) {\n\t\t\tthis.clearClusterer()\n\t\t} else if (!this._clusterer && options?.clusterMarkers) {\n\t\t\tthis.setupClusterer(map, this._options);\n\t\t}\n\n\t\tconst updateMarker = (existing: MarkerStore, val: Marker) => {\n\t\t\texisting.marker.setPosition(val.position);\n\t\t\tsetIcon(existing.marker, val);\n\t\t\texisting.tooltip = val.tooltip;\n\n\t\t\tnewMap.set(val.id, existing);\n\t\t\t// Delete from old map, this will leave only unneeded markers in the old map\n\t\t\tthis._markers.delete(val.id);\n\n\t\t\tif (!options?.clusterMarkers) {\n\t\t\t\tif (this._infowindow) {\n\t\t\t\t\tthis._infowindow.close();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst addMarker = (marker: Marker, map: google.maps.Map) => {\n\t\t\tconst me = this;\n\t\t\tconst gmarker = new google.maps.Marker({\n\t\t\t\tposition: marker.position,\n\t\t\t\tlabel: marker.label,\n\t\t\t});\n\t\t\tsetIcon(gmarker, marker);\n\n\t\t\tnewMap.set(marker.id, { marker: gmarker, tooltip: marker.tooltip });\n\t\t\tif (!options?.clusterMarkers) {\n\t\t\t gmarker.setMap(map);\n\t\t\t}\n\n\t\t\tif (!options?.clusterMarkers) {\n\n\t\t\t\tif (options?.eventsOnMap) {\n\t\t\t\t\tgoogle.maps.event.addListener(gmarker, \"mouseover\", function () {\n\t\t\t\t\t\tme.tooltipManager(map, gmarker, marker);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tgoogle.maps.event.addListener(gmarker, \"click\", function () {\n\t\t\t\t\t\tme.tooltipManager(map, gmarker, marker);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// google.maps.event.addListener(gmarker, \"mouseout\", function () {\n\t\t\t\t// \tme._infowindow.close();\n\t\t\t\t// });\n\t\t\t} else {\n\t\t\t\tgmarker.addListener(\"click\", function () {\n\t\t\t\t\tme.tooltipManager(map, gmarker, marker);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._clusterer?.addMarker(gmarker);\n\t\t};\n\n\t\tconst deleteMarkers = (markers: IterableIterator<MarkerStore>) => {\n\t\t\tconst markerArray = Array.from(markers);\n\t\t\tmarkerArray.forEach(({ marker }) => marker.setMap(null));\n\t\t\tthis._clusterer?.removeMarkers(markerArray.map(({ marker }) => marker));\n\t\t};\n\n\t\tfor (const marker of markers) {\n\t\t\tif (marker) {\n\t\t\t\tconst existing = this._markers.get(marker.id);\n\t\t\t\tthis._bounds.extend(marker.position);\n\t\t\t\tif (marker.show === undefined || marker.show) {\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\tupdateMarker(existing, marker);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddMarker(marker, map);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdeleteMarkers(this._markers.values());\n\t\tthis._markers = newMap;\n\t}\n\n\tpublic tooltipServiceTruck(map: google.maps.Map, gmarker: google.maps.Marker, marker: ServiceTruckMarker){\n\t\tlet tooltip: any;\n\t\tlet tooltipHandler: any;\n\n\t\tif ((marker.tooltipHandler || \"\") !== \"\") {\n\t\t\ttooltipHandler = document.querySelectorAll(marker.tooltipHandler || \"\");\n\t\t\tif (tooltipHandler) {\n\t\t\t\twindow.sessionStorage.setItem(\"mapTooltipGenerator\", marker.VIN);\n\t\t\t\ttooltipHandler[0].click();\n\t\t\t\ttooltip = window.sessionStorage.getItem(\"mapTooltipGenerator\");\n\t\t\t\twindow.sessionStorage.removeItem(\"mapTooltipGenerator\");\n\t\t\t}\n\t\t}\n\n\t\tif ((marker.tooltip || \"\") !== \"\") {\n\t\t\tfor (const asset of this._serviceTrucks) {\n\t\t\t\tif (asset.VIN === marker.VIN) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttooltip = ReactDOMServer.renderToString(asset.tooltip);\n\t\t\t\t\t} catch (error) {}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this._infowindow) {\n\t\t\tthis._infowindow.close();\n\t\t}\n\n\t\tthis._infowindow = new google.maps.InfoWindow({});\n\t\tthis._infowindow.setContent(tooltip);\n\t\tthis._infowindow.open(map, gmarker);\n\n\t\tif (tooltipHandler) {\n\t\t\twindow.sessionStorage.removeItem(\"mapTooltipLink\");\n\t\t\tsetTimeout(function () {\n\t\t\t\tconst tooltipAnchors: any = document.querySelectorAll(\n\t\t\t\t\t\"[data-id=map-marker-tooltip] a\"\n\t\t\t\t);\n\t\t\t\tfor (let i = tooltipAnchors.length; i--; ) {\n\t\t\t\t\tlet href = tooltipAnchors[i].href.replace(window.location.origin, \"\");\n\t\t\t\t\ttooltipAnchors[i].onclick = function (e: any) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\twindow.sessionStorage.setItem(\"mapTooltipLink\", href);\n\t\t\t\t\t\tlet button: HTMLElement = document.querySelectorAll(\n\t\t\t\t\t\t\tmarker.tooltipHandler || \"\"\n\t\t\t\t\t\t)[0] as HTMLElement;\n\t\t\t\t\t\tbutton.click();\n\t\t\t\t\t};\n\t\t\t\t\ttooltipAnchors[i].setAttribute(\"href\", \"#\");\n\t\t\t\t}\n\t\t\t}, 250);\n\t\t}\n\n\n\n\t}\n\n\tpublic updateServiceTruckMarkers(markers: ServiceTruckMarker[], map: google.maps.Map){\n\n\t\tconst newMap: Map<string, MarkerStore> = new Map();\n\t\tthis._serviceTrucks = markers;\n\n\t\tconst updateMarker = (existing: MarkerStore, val: Marker) => {\n\t\t\texisting.marker.setPosition(val.position);\n\t\t\tsetIcon(existing.marker, val);\n\t\t\texisting.tooltip = val.tooltip;\n\n\t\t\tnewMap.set(val.id, existing);\n\t\t\t// Delete from old map, this will leave only unneeded markers in the old map\n\t\t\tthis._serviceTruckMarkers.delete(val.id);\n\n\t\t}\n\n\t\tconst addMarker = (marker: ServiceTruckMarker, map: google.maps.Map) => {\n\n\t\t\tconst me = this;\n\t\t\tconst gmarker = new google.maps.Marker({\n\t\t\t\tposition: marker.position,\n\t\t\t\tlabel: marker.label,\n\t\t\t});\n\t\t\tsetIcon(gmarker, marker);\n\t\t\tnewMap.set(marker.VIN, { marker: gmarker, tooltip: marker.tooltip });\n\t\t\tgmarker.setMap(map);\n\n\t\t\tgmarker.addListener(\"click\", function () {\n\t\t\t\tme.tooltipServiceTruck(map, gmarker, marker);\n\t\t\t});\n\n\t\t}\n\n\t\tconst deleteMarkers = (markers: IterableIterator<MarkerStore>) => {\n\t\t\tconst markerArray = Array.from(markers);\n\t\t\tmarkerArray.forEach(({ marker }) => marker.setMap(null));\n\t\t};\n\n\t\tfor (const marker of markers) {\n\t\t\tif (marker) {\n\t\t\t\tconst existing = this._serviceTruckMarkers.get(marker.id);\n\t\t\t\tif (marker.show === undefined || marker.show) {\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\tupdateMarker(existing, marker);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddMarker(marker, map);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdeleteMarkers(this._serviceTruckMarkers.values());\n\t\tthis._serviceTruckMarkers = newMap;\n\t}\n\n\tpublic destroy() {\n\t\tthis._clusterListener?.remove();\n\t}\n\n\tpublic clearClusterer() {\n\t\tthis.destroy()\n\t\tthis._clusterer = undefined\n\t}\n\n\tprivate setupClusterer(map: google.maps.Map, opts: OptionsWithClustering) {\n\t\tthis._clusterer = new MarkerClusterer(map, [], DEFAULT_CLUSTER_OPTIONS);\n\t\tif (opts.onClusterClick) {\n\t\t\tconst onClick = opts.onClusterClick;\n\t\t\tthis._clusterListener = this._clusterer.addListener(\n\t\t\t\t\"click\",\n\t\t\t\t(cluster: Cluster) => {\n\t\t\t\t\tconst bounds = cluster.getBounds();\n\t\t\t\t\tconst center = cluster.getCenter();\n\t\t\t\t\tconst map = cluster.getMap();\n\t\t\t\t\tconst maxZoom = (DEFAULT_CLUSTER_OPTIONS.maxZoom || 20) + 1;\n\t\t\t\t\tconst zoomTo = () => {\n\t\t\t\t\t\tmap.setZoom(map.getZoom() + 1);\n\t\t\t\t\t\tmap.setCenter(center);\n\t\t\t\t\t\tmap.fitBounds(bounds);\n\t\t\t\t\t\tmap.setZoom(Math.min(map.getZoom(), maxZoom));\n\t\t\t\t\t};\n\n\t\t\t\t\tif (this._infowindow) {\n\t\t\t\t\t\tthis._infowindow.close();\n\t\t\t\t\t}\n\n\t\t\t\t\tonClick(this.getMarkerIds(cluster.getMarkers()), { zoomTo });\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (opts.clusterMarkers) {\n\t\t\tthis.setClusterCalculator();\n\t\t}\n\t}\n\n\tpublic setClusterCalculator() {\n\t\tlet title = \"\";\n\t\t\n\t\tthis._clusterer?.setCalculator((markers, count) => {\n\t\t\ttitle = this.getTitle(markers);\n\t\t\treturn { text: title, title: title, index: this.getStyleIndex(markers) };\n\t\t});\n\t}\n\n\tprivate getTitle(markers: google.maps.Marker[]): string {\n\t\tif (markers.length > 99) {\n\t\t\treturn \"99+\";\n\t\t}\n\n\t\treturn markers.length.toString();\n\t}\n\n\tprivate getSizeIndex(markersLength: number): number {\n\t\tif (markersLength > 99) {\n\t\t\treturn 2; //large\n\t\t}\n\t\tif (markersLength > 50) {\n\t\t\treturn 1; //medium\n\t\t}\n\t\treturn 0; //small\n\t}\n\n\tprivate getStyleIndex(markers: google.maps.Marker[]): number {\n\t\tlet pins = \"\";\n\n\t\tmarkers.forEach((marker) => {\n\t\t\tif (\n\t\t\t\t(marker.getIcon()?.toString() || \"\").indexOf(\"critical\") !== -1 &&\n\t\t\t\tpins.indexOf(\"critical\") === -1\n\t\t\t) {\n\t\t\t\tpins += \"critical~\";\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(marker.getIcon()?.toString() || \"\").indexOf(\"dm1\") !== -1 &&\n\t\t\t\tpins.indexOf(\"dm1\") === -1\n\t\t\t) {\n\t\t\t\tpins += \"dm1~\";\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(marker.getIcon()?.toString() || \"\").indexOf(\"warning\") !== -1 &&\n\t\t\t\tpins.indexOf(\"warning\") === -1\n\t\t\t) {\n\t\t\t\tpins += \"warning~\";\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(marker.getIcon()?.toString() || \"\").indexOf(\"info\") !== -1 &&\n\t\t\t\tpins.indexOf(\"info\") === -1\n\t\t\t) {\n\t\t\t\tpins += \"info~\";\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(marker.getIcon()?.toString() || \"\").indexOf(\"asset_down\") !== -1 &&\n\t\t\t\tpins.indexOf(\"asset_down\") === -1\n\t\t\t) {\n\t\t\t\tpins += \"asset_down~\";\n\t\t\t}\n\t\t});\n\n\t\tpins = pins !== \"\" ? \"~\" + pins : \"\";\n\n\t\tif (pins.indexOf(\"asset_down\") !== -1) {\n\t\t\treturn 16 + this.getSizeIndex(markers.length);\n\t\t}\n\t\tif (pins.indexOf(\"critical\") !== -1) {\n\t\t\treturn 13 + this.getSizeIndex(markers.length);\n\t\t}\n\t\tif (pins.indexOf(\"dm1\") !== -1) {\n\t\t\treturn 10 + this.getSizeIndex(markers.length);\n\t\t}\n\t\tif (pins.indexOf(\"warning\") !== -1) {\n\t\t\treturn 7 + this.getSizeIndex(markers.length);\n\t\t}\n\t\tif (pins.indexOf(\"info\") !== -1) {\n\t\t\treturn 4 + this.getSizeIndex(markers.length);\n\t\t}\n\t\t\n\t\t\n\t\treturn 1 + this.getSizeIndex(markers.length);\n\t}\n\n\tpublic zoomToFit(map: google.maps.Map) {\n\t\t//zoom when markers are present\n\t\tif (this._markers.size > 0) {\n\t\t\t//OPS-1143\n\t\t\t//Going around the know Google Maps bug\n\t\t\tmap.setZoom(map.getZoom() + 1);\n\t\t\t//\n\t\t\tmap.fitBounds(this._bounds);\n\t\t}\n\t}\n\t//focus the asset when user clicks on any asset from drawer.\n\tpublic focusAsset(map: google.maps.Map, latitude: number, longitude: number) {\n\t\tif (longitude && latitude && longitude !== 0 && latitude !== 0) {\n\t\t\tconst bounds = new google.maps.LatLngBounds();\n\t\t\tconst loc = new google.maps.LatLng(latitude, longitude);\n\t\t\tbounds.extend(loc);\n\t\t\t//focus on the asset\n\t\t\tmap.fitBounds(bounds);\n\t\t\t//centre the asset\n\t\t\tmap.panToBounds(bounds);\n\t\t\t//map.setZoom(DEFAULT_CLUSTER_OPTIONS.maxZoom || 20);\n\t\t\t//map.panTo(new google.maps.LatLng(latitude, longitude));\n\t\t}\n\t}\n\n\tpublic closeInfoWindow(map: google.maps.Map) {}\n\n\tprivate getMarkerIds(markers: google.maps.Marker[]): ClusterIds {\n\t\tconst idLookup = new Map<google.maps.Marker, Marker[\"id\"]>();\n\t\tArray.from(this._markers.entries()).forEach(([id, store]) =>\n\t\t\tidLookup.set(store.marker, id)\n\t\t);\n\n\t\treturn markers.map((m) => idLookup.get(m) as Marker[\"id\"]);\n\t}\n}\n","interface Cache {\n [index: string]: Promise<void>\n}\n\nclass ScriptCache {\n private _scripts: Cache = {};\n\n loadScript(script: string): Promise<void> {\n\n if (this._scripts[script] !== undefined) {\n return this._scripts[script]\n }\n\n let scriptTag = document.createElement(\"script\");\n scriptTag.src = script;\n window.document.body.appendChild(scriptTag);\n\n let result = new Promise<void>((resolve, reject) => {\n scriptTag.addEventListener(\"load\", () => {\n resolve();\n });\n });\n\n this._scripts[script] = result;\n return result;\n }\n}\n\nexport default new ScriptCache();\n","import { useState, useEffect } from \"react\";\nimport scriptCache from \"../../lib/script-cache\";\n\nexport type GoogleMapsLib = typeof google.maps;\n\ndeclare global {\n interface Window {\n google: typeof google;\n }\n}\n\nconst GOOGLE_MAP_KEY = \"AIzaSyChUP2Cm0aMo89e0mE4LBZSbaXOW-Al9dI\";\nconst GOOGLE_URL = `https://maps.googleapis.com/maps/api/js?libraries=drawing,geometry&key=${GOOGLE_MAP_KEY}`;\n\nfunction loadLibs() {\n return scriptCache.loadScript(GOOGLE_URL);\n}\n\nexport default function useGoogleMapsLib(): GoogleMapsLib | undefined {\n const [lib, setLib] = useState<GoogleMapsLib>();\n\n useEffect(() => {\n loadLibs().then(() => setLib(google.maps));\n }, \n []\n );\n\n return lib;\n}\n","import { useState, useCallback } from \"react\";\n\ntype Node<T> = T | null;\n\nexport default function useDomNode<T>(): [Node<T>, (n: Node<T>) => void] {\n const [node, setNode] = useState<Node<T>>(null);\n\n const onChange = useCallback((n: Node<T>) => setNode(n), []);\n\n return [node, onChange];\n}\n","import { EventsMapMarkerOptions } from \"../../pages/Dashboard2/widgets/EventsLocationWidget/Widget\";\nimport { Marker } from \"./MarkerManager\";\n\nexport interface PolyLineOptions {\n\tpolyline: boolean;\n}\n\nexport interface EventsOnMap {\n\teventsOnMap?: boolean;\n}\n\nfunction compare(array1: Marker[], array2: Marker[]) {\n\tconst newArray1 = [...array1];\n\tconst newArray2 = [...array2];\n\treturn (\n\t\tnewArray1.length === newArray2.length &&\n\t\tnewArray1.every(function (value, index) {\n\t\t\treturn (\n\t\t\t\tvalue.position.lat === newArray2[index].position.lat &&\n\t\t\t\tvalue.position.lng === newArray2[index].position.lng\n\t\t\t);\n\t\t})\n\t);\n}\n\nfunction zoomToFit(markers: Marker[]) {\n\tlet bounds = new google.maps.LatLngBounds();\n\tfor (let i = 0; i < markers.length; i++) {\n\t\tbounds.extend(markers[i].position);\n\t}\n\treturn bounds;\n}\n\nexport function constructPoyline(\n\tmarkers: Marker[],\n\tmap: google.maps.Map,\n\tpolyLines?: google.maps.Polyline[],\n\toldmarkers?: Marker[]\n) {\n\t//compare old markers are same as new markers, if not then zoom to fit, if no change\n\t//means user has zoomed in and it should not come to previous state.\n\tif (!oldmarkers) {\n\t\tconst bounds = zoomToFit(markers);\n\t\tmap.fitBounds(bounds);\n\t} else {\n\t\tconst isFitBoundRequired = compare(markers, oldmarkers);\n\t\tif (!isFitBoundRequired) {\n\t\t\tconst bounds = zoomToFit(markers);\n\t\t\tmap.fitBounds(bounds);\n\t\t}\n\t}\n\n\t//map.setZoom(map.getZoom() + 1);\n\tlet polyLinePaths: google.maps.Polyline[] = [];\n\tpolyLinePaths.push(\n\t\tnew google.maps.Polyline({\n\t\t\tpath: markers.map((s) => s.position),\n\t\t\tstrokeColor: \"#6060FB\",\n\t\t\tstrokeWeight: 3,\n\t\t\tstrokeOpacity: 1.0,\n\t\t\teditable: false,\n\t\t\tdraggable: false,\n\t\t\tgeodesic: true,\n\t\t\tvisible: true,\n\t\t\ticons: [\n\t\t\t\t{\n\t\t\t\t\ticon: {\n\t\t\t\t\t\tpath: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\n\t\t\t\t\t},\n\t\t\t\t\toffset: \"25px\",\n\t\t\t\t\trepeat: \"50px\",\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\t);\n\n\t//clear the previous polyline from widget\n\tif (polyLines) {\n\t\tpolyLines?.map((p) => {\n\t\t\tp.setMap(null);\n\t\t});\n\t}\n\n\tpolyLinePaths.map((p) => {\n\t\tp.setMap(map);\n\t});\n\n\tlet oldMarkers = [...markers];\n\treturn { polyLinePaths, oldMarkers };\n}\n\nexport function constructPoylineWithEvents(\n\tmarkers: Marker[],\n\tmap: google.maps.Map,\n\tpolyLines?: google.maps.Polyline[],\n\toldmarkers?: Marker[],\n\tmapMarkerOptions?: EventsMapMarkerOptions\n) {\n\t//compare old markers are same as new markers, if not then zoom to fit, if no change\n\t//means user has zoomed in and it should not come to previous state.\n\tif (!oldmarkers) {\n\t\tconst bounds = zoomToFit(markers);\n\t\tmap.fitBounds(bounds);\n\t} else {\n\t\tconst isFitBoundRequired = compare(markers, oldmarkers);\n\t\tif (!isFitBoundRequired) {\n\t\t\tconst bounds = zoomToFit(markers);\n\t\t\tmap.fitBounds(bounds);\n\t\t}\n\t}\n\n\tif (polyLines) {\n\t\tpolyLines?.map((p) => {\n\t\t\tp.setMap(null);\n\t\t});\n\t}\n\n\tlet markerGroup: any = [];\n\tlet lastGrouping = 1;\n\tlet lastValue: boolean;\n\tlet skip = false;\n\n\tconst enabledSignalId = mapMarkerOptions?.SignalMapOptions.filter(\n\t\t(s) => s.EnableSignal == true\n\t)[0]?.SignalId;\n\n\t/* Filter through markers to create groups of markers that represents polylines based on markers values */\n\tmarkers.map((m, i) => {\n\t\tskip = false;\n\n\t\t/* Handles First Point */\n\t\tif (i == 0) {\n\t\t\tmarkerGroup[lastGrouping] = [];\n\t\t\tm.color = m.color == undefined ? \"#e0e0e0\" : m.color;\n\t\t\tlastValue = m.value == undefined ? false : m.value;\n\t\t\tmarkerGroup[lastGrouping].push(m);\n\t\t\tskip = true;\n\t\t}\n\n\t\tif (!skip) {\n\t\t\tif (\n\t\t\t\tm.value != undefined &&\n\t\t\t\tenabledSignalId !== undefined &&\n\t\t\t\tm.signalId !== undefined &&\n\t\t\t\tenabledSignalId == m.signalId\n\t\t\t) {\n\t\t\t\tif (lastValue == m.value && markers[i - 1].color == undefined) {\n\t\t\t\t\tlastGrouping++;\n\t\t\t\t\tmarkerGroup[lastGrouping] = [];\n\t\t\t\t\tmarkerGroup[lastGrouping].push(m);\n\t\t\t\t\tlastValue = m.value == undefined ? false : m.value;\n\t\t\t\t} else if (lastValue == m.value) {\n\t\t\t\t\tmarkerGroup[lastGrouping].push(m);\n\t\t\t\t\tlastValue = m.value == undefined ? false : m.value;\n\t\t\t\t} else {\n\t\t\t\t\tlastGrouping++;\n\t\t\t\t\tmarkerGroup[lastGrouping] = [];\n\t\t\t\t\tmarkerGroup[lastGrouping].push(m);\n\t\t\t\t\tlastValue = m.value == undefined ? false : m.value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (mapMarkerOptions?.ShowGPSPath) {\n\t\t\t\t\tmarkerGroup[lastGrouping].push(m);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tlet polyLinePaths: google.maps.Polyline[] = [];\n\tlet polyLinePath = new google.maps.Polyline({});\n\tmarkerGroup.map((m: any) => {\n\t\tpolyLinePath = new google.maps.Polyline({\n\t\t\tpath: m.map((s: any) => s.position),\n\t\t\tstrokeColor: m[0].color,\n\t\t\tstrokeWeight: 3,\n\t\t\tstrokeOpacity: 1.0,\n\t\t\teditable: false,\n\t\t\tdraggable: false,\n\t\t\tgeodesic: true,\n\t\t\tvisible: true,\n\t\t\ticons: !mapMarkerOptions?.ShowGPSMarker\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ticon: {\n\t\t\t\t\t\t\t\tpath: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\n\t\t\t\t\t\t\t\tscale: 3,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toffset: \"15px\",\n\t\t\t\t\t\t\trepeat: \"100px\",\n\t\t\t\t\t\t},\n\t\t\t\t ]\n\t\t\t\t: [],\n\t\t});\n\n\t\tpolyLinePaths.push(polyLinePath);\n\t\tpolyLinePath.setMap(map);\n\t});\n\n\tlet oldMarkers = [...markers];\n\treturn { polyLinePaths, oldMarkers };\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../utils/configurations\";\n\nconst DEFAULT_POLYOPTIONS = {\n\tfillColor: \"#f73e16\",\n\tstrokeWeight: 0.5,\n\tfillOpacity: 0.3,\n\teditable: true,\n\tdraggable: true,\n};\n\nexport type GeofenceShape = {\n\tshape: google.maps.MVCObject;\n\ttype: string;\n\tfenceName: string;\n\tfenceColor: string;\n\tdescription: string;\n\tid: string;\n\tgeoCoordinates: any;\n\tgatewayIds: string[];\n\tmastertags: string[];\n\tlatestPositionStatuses: any[];\n};\n\nfunction getGeofenceGateways(shape:any){\n\t\n\tlet mastertags:string[] = [];\n\tlet gatewayIds:string[] = [];\n\tlet latest_position_status_array:any = [];\n\n\tif (shape.gateways) {\n\t\tlet geofenceGateways: any = JSON.parse(shape.gateways);\n\n\t\tfor (let i = 0; i < geofenceGateways.length; i++) {\n\t\t\tmastertags.push(geofenceGateways[i].mastertag);\n\t\t\tgatewayIds.push(geofenceGateways[i].gatewayId);\n\n\t\t\tlatest_position_status_array.push({\n\t\t\t\t'status': geofenceGateways[i].latest_position_status,\n\t\t\t\t'updated_at': geofenceGateways[i].updated_at\n\t\t\t});\n\t\t}\n\t}\n\n\n\treturn [gatewayIds, mastertags, latest_position_status_array];\n}\n\nexport function removeShapes(\n\tgeoFences: any,\n\tmap: google.maps.Map\n) {\n\n\tgeoFences?.map((geofence: any) => {\n\t\tgeofence.shape.setMap(null)\n\t})\n\n\tgoogle.maps.event.clearListeners(map, 'bounds_changed');\n\n}\n\nexport function drawShapes(\n\tgeoFences: any,\n\tmap: google.maps.Map\n): GeofenceShape[] {\n\tvar shapesArr: GeofenceShape[] = [];\n\n\tfor (var i = 0; i < geoFences.length; i++) {\n\t\n\t\tlet gateways = getGeofenceGateways(geoFences[i]);\n\n\t\tif (geoFences[i].type === \"circle\") {\n\t\t\tlet circle = getCircle(geoFences[i], JSON.parse(geoFences[i].geoCoordinates), map);\n\t\t\tshapesArr.push({\n\t\t\t\tshape: circle,\n\t\t\t\ttype: geoFences[i].type,\n\t\t\t\tfenceName: geoFences[i].fenceName,\n\t\t\t\tfenceColor: geoFences[i].fenceColor,\n\t\t\t\tdescription: geoFences[i].description,\n\t\t\t\tid: geoFences[i].id,\n\t\t\t\tgeoCoordinates: geoFences[i].geoCoordinates,\n\t\t\t\tgatewayIds: gateways[0],\n\t\t\t\tmastertags: gateways[1],\n\t\t\t\tlatestPositionStatuses: gateways[2]\n\t\t\t});\n\t\t} else if (geoFences[i].type === \"rectangle\") {\n\t\t\tlet rect = getRectangle(geoFences[i], JSON.parse(geoFences[i].geoCoordinates), map);\n\t\t\tshapesArr.push({\n\t\t\t\tshape: rect,\n\t\t\t\ttype: geoFences[i].type,\n\t\t\t\tfenceName: geoFences[i].fenceName,\n\t\t\t\tfenceColor: geoFences[i].fenceColor,\n\t\t\t\tdescription: geoFences[i].description,\n\t\t\t\tid: geoFences[i].id,\n\t\t\t\tgeoCoordinates: geoFences[i].geoCoordinates,\n\t\t\t\tgatewayIds: gateways[0],\n\t\t\t\tmastertags: gateways[1],\n\t\t\t\tlatestPositionStatuses: gateways[2]\n\t\t\t});\n\t\t} else if (geoFences[i].type === \"polygon\") {\n\t\t\tlet polygon = getPolygon(geoFences[i], JSON.parse(geoFences[i].geoCoordinates), map);\n\t\t\tshapesArr.push({\n\t\t\t\tshape: polygon,\n\t\t\t\ttype: geoFences[i].type,\n\t\t\t\tfenceName: geoFences[i].fenceName,\n\t\t\t\tfenceColor: geoFences[i].fenceColor,\n\t\t\t\tdescription: geoFences[i].description,\n\t\t\t\tid: geoFences[i].id,\n\t\t\t\tgeoCoordinates: geoFences[i].geoCoordinates,\n\t\t\t\tgatewayIds: gateways[0],\n\t\t\t\tmastertags: gateways[1],\n\t\t\t\tlatestPositionStatuses: gateways[2]\n\t\t\t});\n\t\t}\n\t}\n\treturn shapesArr;\n}\n\nexport function addListenerToUpdateGeoCoords(element: any) {\n\tif (element.type === \"circle\") {\n\t\tlet shape = element.shape as google.maps.Circle;\n\t\tshape.addListener(\"radius_changed\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonCircle(shape));\n\t\t});\n\n\t\tshape.addListener(\"dragstart\", () => {\n\t\t\tgoogle.maps.event.clearListeners(shape, \"center_changed\");\n\t\t});\n\n\t\tshape.addListener(\"dragend\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonCircle(shape));\n\t\t\tshape.addListener(\"center_changed\", () => {\n\t\t\t\tupdateGeoCoords(element.id, jsonCircle(shape));\n\t\t\t});\n\t\t});\n\n\t\tshape.addListener(\"center_changed\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonCircle(shape));\n\t\t});\n\t} else if (element.type === \"rectangle\") {\n\t\tlet shape = element.shape as google.maps.Rectangle;\n\n\t\tshape.addListener(\"dragstart\", () => {\n\t\t\tgoogle.maps.event.clearListeners(shape, \"bounds_changed\");\n\t\t});\n\n\t\tshape.addListener(\"dragend\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonRectangle(shape));\n\t\t\tshape.addListener(\"bounds_changed\", () => {\n\t\t\t\tupdateGeoCoords(element.id, jsonRectangle(shape));\n\t\t\t});\n\t\t});\n\n\t\tshape.addListener(\"bounds_changed\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonRectangle(shape));\n\t\t});\n\t} else if (element.type === \"polygon\") {\n\t\tlet shape = element.shape as google.maps.Polygon;\n\n\t\tshape.addListener(\"dragstart\", () => {\n\t\t\tgoogle.maps.event.clearInstanceListeners(shape.getPath());\n\t\t});\n\n\t\tshape.addListener(\"dragend\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonPolygon(shape));\n\t\t\tshape.getPath().addListener(\"insert_at\", () => {\n\t\t\t\tupdateGeoCoords(element.id, jsonPolygon(shape));\n\t\t\t});\n\n\t\t\tshape.getPath().addListener(\"remove_at\", () => {\n\t\t\t\tupdateGeoCoords(element.id, jsonPolygon(shape));\n\t\t\t});\n\n\t\t\tshape.getPath().addListener(\"set_at\", () => {\n\t\t\t\tupdateGeoCoords(element.id, jsonPolygon(shape));\n\t\t\t});\n\t\t});\n\n\t\tshape.getPath().addListener(\"insert_at\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonPolygon(shape));\n\t\t});\n\n\t\tshape.getPath().addListener(\"remove_at\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonPolygon(shape));\n\t\t});\n\n\t\tshape.getPath().addListener(\"set_at\", () => {\n\t\t\tupdateGeoCoords(element.id, jsonPolygon(shape));\n\t\t});\n\t}\n}\n\n// export function addListeners(shapesArr: GeofenceShape[]) {\n// \tfor (let i = 0; i < shapesArr.length; i++) {\n// \t\taddListenerToUpdateGeoCoords(shapesArr[i]);\n// \t}\n// }\n\n// function getGeoFenceGateways(shape: GeofenceShape, callback: Function) {\n// \tAxios.get(appConfigs.server.URL + \"/ui/api/geofences/gateways\", {\n// \t\tresponseType: \"json\",\n// \t\theaders: {},\n// \t\tparams: {\n// \t\t\tgeofenceId: shape.id,\n// \t\t},\n// \t}).then((response) => {\n// \t\tlet geofenceGateways: any = response.data.data.geofencesGateways;\n\n// \t\tif (geofenceGateways.length > 0) {\n// \t\t\tfor (let i = 0; i < geofenceGateways.length; i++) {\n// \t\t\t\tshape.mastertags.push(geofenceGateways[i].mastertag);\n// \t\t\t\tshape.gatewayIds.push(geofenceGateways[i].gatewayId);\n// \t\t\t}\n// \t\t}\n\n// \t\tcallback(shape);\n// \t});\n// }\n\n// export function getGeoFenceGatewaysAll(\n// \tshapesArr: GeofenceShape[],\n// \tcallback: Function\n// ) {\n// \tshapesArr.forEach((shape) => {\n// \t\tgetGeoFenceGateways(shape, callback);\n// \t});\n// }\n\nfunction getMinMax(\n\tbounds: google.maps.LatLngBounds,\n\tminLat: number,\n\tminLng: number,\n\tmaxLat: number,\n\tmaxLng: number\n) {\n\tif (!minLat || minLat > bounds.getSouthWest().lat()) {\n\t\tminLat = bounds.getSouthWest().lat();\n\t}\n\n\tif (!minLng || minLng > bounds.getSouthWest().lng()) {\n\t\tminLng = bounds.getSouthWest().lng();\n\t}\n\n\tif (!maxLat || maxLat < bounds.getNorthEast().lat()) {\n\t\tmaxLat = bounds.getNorthEast().lat();\n\t}\n\n\tif (!maxLng || maxLng < bounds.getNorthEast().lng()) {\n\t\tmaxLng = bounds.getNorthEast().lng();\n\t}\n\n\treturn [minLat, minLng, maxLat, maxLng];\n}\n\nfunction getPolygonMinMax(\n\tpolygon: google.maps.Polygon,\n\tminLat: number,\n\tminLng: number,\n\tmaxLat: number,\n\tmaxLng: number\n) {\n\tvar arr = polygon.getPath();\n\n\tfor (let i = 0; i < arr.getLength(); i++) {\n\t\tlet lat = arr.getAt(i).lat();\n\t\tlet lng = arr.getAt(i).lng();\n\n\t\tminLat = minLat === undefined || minLat > lat ? lat : minLat;\n\t\tminLng = minLng === undefined || minLng > lng ? lng : minLng;\n\t\tmaxLat = maxLat === undefined || maxLat < lat ? lat : maxLat;\n\t\tmaxLng = maxLng === undefined || maxLng < lng ? lng : maxLng;\n\t}\n\n\treturn [minLat, minLng, maxLat, maxLng];\n}\n\nexport function getBoundForInitialZoom(\n\tshapesArr: GeofenceShape[]\n): google.maps.LatLngBounds {\n\tlet minLat: any, minLng: any, maxLat: any, maxLng: any;\n\n\tshapesArr.forEach((shape: GeofenceShape) => {\n\t\tif (shape.type === \"rectangle\") {\n\t\t\tlet rect = shape.shape as google.maps.Rectangle;\n\t\t\tlet minMax = getMinMax(rect.getBounds(), minLat, minLng, maxLat, maxLng);\n\t\t\tminLat = minMax[0];\n\t\t\tminLng = minMax[1];\n\t\t\tmaxLat = minMax[2];\n\t\t\tmaxLng = minMax[3];\n\t\t} else if (shape.type === \"circle\") {\n\t\t\tlet circle = shape.shape as google.maps.Circle;\n\t\t\tlet minMax = getMinMax(\n\t\t\t\tcircle.getBounds(),\n\t\t\t\tminLat,\n\t\t\t\tminLng,\n\t\t\t\tmaxLat,\n\t\t\t\tmaxLng\n\t\t\t);\n\t\t\tminLat = minMax[0];\n\t\t\tminLng = minMax[1];\n\t\t\tmaxLat = minMax[2];\n\t\t\tmaxLng = minMax[3];\n\t\t} else {\n\t\t\t// polygon\n\n\t\t\tlet polygon = shape.shape as google.maps.Polygon;\n\t\t\tlet minMax = getPolygonMinMax(polygon, minLat, minLng, maxLat, maxLng);\n\t\t\tminLat = minMax[0];\n\t\t\tminLng = minMax[1];\n\t\t\tmaxLat = minMax[2];\n\t\t\tmaxLng = minMax[3];\n\t\t}\n\t});\n\n\treturn new google.maps.LatLngBounds(\n\t\t{ lat: minLat, lng: minLng },\n\t\t{ lat: maxLat, lng: maxLng }\n\t);\n}\n\nexport function updateGeoCoords(id: any, geoCoordinates: any) {\n\tAxios.put(\n\t\tappConfigs.server.URL + \"/ui/api/geofences/changecoord\",\n\t\t{\n\t\t\tid: id,\n\t\t\tgeoCoordinates: geoCoordinates,\n\t\t},\n\t\t{\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {},\n\t\t}\n\t);\n}\n\nexport function jsonCircle(circle: google.maps.Circle) {\n\treturn JSON.stringify({\n\t\tcenter: {\n\t\t\tlat: circle.getCenter().lat(),\n\t\t\tlng: circle.getCenter().lng(),\n\t\t},\n\t\tradius: circle.getRadius(),\n\t});\n}\n\nexport function jsonRectangle(rect: google.maps.Rectangle) {\n\treturn JSON.stringify({\n\t\tnorth: rect.getBounds().getNorthEast().lat(),\n\t\tsouth: rect.getBounds().getSouthWest().lat(),\n\t\teast: rect.getBounds().getNorthEast().lng(),\n\t\twest: rect.getBounds().getSouthWest().lng(),\n\t});\n}\n\nexport function jsonPolygon(polygon: google.maps.Polygon) {\n\tvar arr = polygon.getPath();\n\tvar points = [];\n\n\tfor (let i = 0; i < arr.getLength(); i++) {\n\t\tpoints.push(arr.getAt(i));\n\t}\n\n\treturn JSON.stringify({ points: points });\n}\n\nfunction getCircle(geoFencesData: any, circleData: any, map: google.maps.Map) {\n\tvar lat = circleData.center.lat;\n\tvar lng = circleData.center.lng;\n\n\treturn new google.maps.Circle({\n\t\t...DEFAULT_POLYOPTIONS,\n\t\tfillColor: geoFencesData.fenceColor ? geoFencesData.fenceColor : \"#f73e16\",\n\t\tmap: map,\n\t\tcenter: { lat: lat, lng: lng },\n\t\tradius: circleData.radius,\n\t});\n}\n\nfunction getRectangle(geoFencesData: any, rectData: any, map: google.maps.Map) {\n\treturn new google.maps.Rectangle({\n\t\t...DEFAULT_POLYOPTIONS,\n\t\tfillColor: geoFencesData.fenceColor ? geoFencesData.fenceColor : \"#f73e16\",\n\t\tmap: map,\n\t\tbounds: {\n\t\t\tnorth: rectData.north,\n\t\t\tsouth: rectData.south,\n\t\t\teast: rectData.east,\n\t\t\twest: rectData.west,\n\t\t},\n\t});\n}\n\nfunction getPolygon(geoFencesData: any, polygonData: any, map: google.maps.Map) {\n\treturn new google.maps.Polygon({\n\t\t...DEFAULT_POLYOPTIONS,\n\t\tfillColor: geoFencesData.fenceColor ? geoFencesData.fenceColor : \"#f73e16\",\n\t\tmap: map,\n\t\tpaths: polygonData.points,\n\t});\n}\n\n\n","import {\n\tGeofenceShape,\n\tdrawShapes,\n\tjsonPolygon,\n\tjsonRectangle,\n\tjsonCircle,\n\taddListenerToUpdateGeoCoords,\n\tremoveShapes,\n} from \"../../pages/GeoFences/geofenceHelper\";\n\nconst DEFAULT_POLYOPTIONS = {\n\tfillColor: \"#f73e16\",\n\tstrokeWeight: 0.5,\n\tfillOpacity: 0.3,\n\teditable: true,\n\tdraggable: true,\n};\n\nexport interface Geofence {\n\tdescription: string;\n\tfenceName: string;\n\tfenceColor: string;\n\tgateways: any;\n\tgeoCoordinates: string;\n\tid: string;\n\tisActive: boolean;\n\torgId: string;\n\ttype: string;\n}\n\nexport interface DrawingOptions {\n\tdrawOverlays: boolean;\n}\n\nexport default class DrawingManager {\n\tprivate _drawerMgr?: google.maps.drawing.DrawingManager;\n\tprivate _geofences?: Geofence[];\n\tprivate _geofenceOptions?: any;\n\n\tconstructor(\n\t\tmap: google.maps.Map,\n\t\toptions?: DrawingOptions,\n\t\tgeofences?: Geofence[],\n\t\tgeofenceOptions?: any\n\t) {\n\t\t\n\t\tif (options?.drawOverlays) {\n\t\t\tthis.initilizeDrawingOnMap(map);\n\t\t}\n\t\t\n\t\tthis._geofences = geofences ? geofences : []\n\t\tthis._geofenceOptions = geofenceOptions\n\n\t\tif (geofences?.length && options?.drawOverlays) {\n\t\t\tthis.initilizeGeofences(map, geofences, geofenceOptions)\n\t\t}\n\t}\n\n\tprivate showHideContols(map: google.maps.Map, showHide: boolean) {\n\t\tif (!this._drawerMgr && showHide) {\n\t\t\tthis.initilizeDrawingOnMap(map);\n\t\t\tthis.initilizeGeofences(map, this._geofences ? this._geofences : [], this._geofenceOptions);\n\t\t}\n\n\t\tthis._drawerMgr?.setOptions({\n\t\t\tdrawingControl: showHide\n\t\t});\n\t}\n\n\tpublic updateGeofences(\n\t\tmap: google.maps.Map,\n\t\toptions?: DrawingOptions,\n\t\tgeofences?: any,\n\t\tgeofenceOptions?: any\n\t) {\n\t\tif (!this._drawerMgr && geofences?.length && options?.drawOverlays) {\n\t\t\tif (geofences[0]?.shape) {\n\t\t\t\tremoveShapes(geofences, map)\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tdrawShapes(geofences, map);\n\t\t\t\t}, 10);\n\t\t\t} else {\n\t\t\t\tthis.initilizeDrawingOnMap(map);\n\t\t\t\tthis.initilizeGeofences(map, geofences, geofenceOptions);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t\n\t\tif(this._drawerMgr && geofences?.length){\n\t\t\tif (geofenceOptions.geofencesArrangeEnabled) {\n\t\t\t\tgeofences.forEach((item:GeofenceShape, key: number) => {\n\t\t\t\t\tgeofences[key]?.shape?.set('draggable', true)\n\t\t\t\t});\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tgeofences.forEach((item:GeofenceShape, key: number) => {\n\t\t\t\t\tgeofences[key]?.shape?.set('draggable', false)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\n\tprivate initilizeGeofences(map: google.maps.Map, geofences: Geofence[], geofenceOptions: any, ) {\n\t\t\n\t\tgeofenceOptions?.setMap(map)\n\n\t\tlet getGeofencesShapes = drawShapes(geofences, map);\n\n\t\t\n\n\t\tconst addClickListener = (geofenceShape: GeofenceShape) => {\n\t\t\tgeofenceShape.shape.addListener(\n\t\t\t\t\"click\",\n\t\t\t\t(event: google.maps.MouseEvent) => {\n\t\t\t\t\tgeofenceOptions?.openDrawer(geofenceShape);\n\t\t\t\t\tgeofenceOptions?.setCurShape(geofenceShape);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tlet infoWindowDetails = new google.maps.InfoWindow({\n\t\t\t\tcontent: `\n\t\t\t\t\t<h1 style=\"color: #349beb\">${geofenceShape.fenceName ? geofenceShape.fenceName : `No Name`}</h1>\n\t\t\t\t\t${geofenceShape.description ? `<p><b>Description:</b> ${geofenceShape.description}</p>` : `` }\n\t\t\t\t`,\n\t\t\t\tpixelOffset: new google.maps.Size(0, -10),\n\t\t\t});\n\n\t\t\t//Adding Tooltip on Hover\n\t\t\tgeofenceShape.shape.addListener(\n\t\t\t\t\"mouseover\",\n\t\t\t\t(event: google.maps.MouseEvent) => {\n\t\t\t\t\tinfoWindowDetails.setPosition(event.latLng)\n\t\t\t\t\tinfoWindowDetails.open(map);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tgeofenceShape.shape.addListener(\n\t\t\t\t\"mousemove\",\n\t\t\t\t(event: any) => {\n\t\t\t\t\tinfoWindowDetails.setPosition(event.latLng)\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tgeofenceShape.shape.addListener(\n\t\t\t\t\"mouseout\",\n\t\t\t\t(event: google.maps.MouseEvent) => {\n\t\t\t\t\tinfoWindowDetails.close();\n\t\t\t\t}\n\t\t\t);\n\n\t\t};\n\n\t\tgetGeofencesShapes.forEach((item, key) => {\n\t\t\taddClickListener(item);\n\t\t\tif (geofenceOptions.canGeofencingEdit) {\n\t\t\t\taddListenerToUpdateGeoCoords(item);\n\t\t\t} else {\n\t\t\t\tgetGeofencesShapes[key].shape.set('draggable', false)\n\t\t\t}\n\t\t\tgeofenceOptions?.addShape(item);\n\t\t});\n\n\t\t/* Handles Newly Created Functions */\n\t\tthis._drawerMgr?.addListener(\n\t\t\t\"polygoncomplete\",\n\t\t\t(polygon: google.maps.Polygon) => {\n\t\t\t\tlet shape: GeofenceShape = {\n\t\t\t\t\tshape: polygon,\n\t\t\t\t\ttype: \"polygon\",\n\t\t\t\t\tfenceName: \"\",\n\t\t\t\t\tfenceColor: \"\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tid: \"\",\n\t\t\t\t\tgeoCoordinates: jsonPolygon(polygon),\n\t\t\t\t\tgatewayIds: [],\n\t\t\t\t\tmastertags: [],\n\t\t\t\t\tlatestPositionStatuses: [],\n\t\t\t\t};\n\n\t\t\t\taddClickListener(shape);\n\n\t\t\t\tgeofenceOptions?.addShape(shape);\n\t\t\t}\n\t\t);\n\n\t\tthis._drawerMgr?.addListener(\n\t\t\t\"circlecomplete\",\n\t\t\t(circle: google.maps.Circle) => {\n\t\t\t\tlet shape: GeofenceShape = {\n\t\t\t\t\tshape: circle,\n\t\t\t\t\ttype: \"circle\",\n\t\t\t\t\tfenceName: \"\",\n\t\t\t\t\tfenceColor: \"\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tid: \"\",\n\t\t\t\t\tgeoCoordinates: jsonCircle(circle),\n\t\t\t\t\tgatewayIds: [],\n\t\t\t\t\tmastertags: [],\n\t\t\t\t\tlatestPositionStatuses: [],\n\t\t\t\t};\n\n\t\t\t\taddClickListener(shape);\n\n\t\t\t\tgeofenceOptions?.addShape(shape);\n\t\t\t}\n\t\t);\n\n\t\tthis._drawerMgr?.addListener(\n\t\t\t\"rectanglecomplete\",\n\t\t\t(rect: google.maps.Rectangle) => {\n\t\t\t\tlet shape: GeofenceShape = {\n\t\t\t\t\tshape: rect,\n\t\t\t\t\ttype: \"rectangle\",\n\t\t\t\t\tfenceName: \"\",\n\t\t\t\t\tfenceColor: \"\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tid: \"\",\n\t\t\t\t\tgeoCoordinates: jsonRectangle(rect),\n\t\t\t\t\tgatewayIds: [],\n\t\t\t\t\tmastertags: [],\n\t\t\t\t\tlatestPositionStatuses: [],\n\t\t\t\t};\n\n\t\t\t\taddClickListener(shape);\n\n\t\t\t\tgeofenceOptions?.addShape(shape);\n\t\t\t}\n\t\t);\n\t}\n\n\n\tprivate initilizeDrawingOnMap(map: google.maps.Map) {\n\t\tthis._drawerMgr = new google.maps.drawing.DrawingManager({\n\t\t\t//drawingMode: google.maps.drawing.OverlayType.POLYGON,\n\t\t\tdrawingControlOptions: {\n\t\t\t\tdrawingModes: [\n\t\t\t\t\tgoogle.maps.drawing.OverlayType.CIRCLE,\n\t\t\t\t\tgoogle.maps.drawing.OverlayType.RECTANGLE,\n\t\t\t\t\tgoogle.maps.drawing.OverlayType.POLYGON,\n\t\t\t\t],\n\t\t\t},\n\t\t\trectangleOptions: DEFAULT_POLYOPTIONS,\n\t\t\tcircleOptions: DEFAULT_POLYOPTIONS,\n\t\t\tpolygonOptions: DEFAULT_POLYOPTIONS,\n\t\t\tmap: map,\n\t\t});\n\t\tthis.setUpOverlayCompleteListner(this._drawerMgr);\n\t}\n\n\tprivate setUpOverlayClickListner(newShape: any) {\n\t\tgoogle.maps.event.addListener(newShape, \"click\", (e) => {\n\t\t\t// const vertices = newShape.getPath();\n\t\t\t// for (let i = 0; i < vertices.getLength(); i++) {\n\t\t\t// const xy = vertices.getAt(i);\n\t\t\t// }\n\t\t\t// if (newShape.type === google.maps.drawing.OverlayType.POLYGON) {\n\t\t\t// let path = newShape.getPaths().getAt(e.path);\n\t\t\t// path.removeAt(e.vertex);\n\t\t\t// if (path.length < 3) {\n\t\t\t// newShape.setMap(null);\n\t\t\t// }\n\t\t\t// }\n\t\t\t// if (newShape.type === google.maps.drawing.OverlayType.POLYLINE) {\n\t\t\t// let path = newShape.getPath();\n\t\t\t// path.removeAt(e.vertex);\n\t\t\t// if (path.length < 2) {\n\t\t\t// newShape.setMap(null);\n\t\t\t// }\n\t\t\t// }\n\t\t});\n\t}\n\n\tprivate setUpOverlayCompleteListner(\n\t\tdrawingMgr: google.maps.drawing.DrawingManager\n\t) {\n\t\tgoogle.maps.event.addListener(drawingMgr, \"overlaycomplete\", (e) => {\n\t\t\tconst newShape = e.overlay;\n\t\t\tnewShape.type = e.type;\n\t\t\tif (e.type !== google.maps.drawing.OverlayType.MARKER) {\n\t\t\t\tdrawingMgr.setDrawingMode(null);\n\t\t\t\tthis.setUpOverlayClickListner(newShape);\n\t\t\t}\n\t\t});\n\t}\n}\n","import React from \"react\"\n\nexport interface MapContextInterface {\n map: google.maps.Map\n}\n\n/** Context to pass down the map instance to the OverlayViewContainer component */\nconst MapContext = React.createContext<MapContextInterface | null>(null);\n\nexport default MapContext;","/// <reference path=\"../../../node_modules/@types/googlemaps/index.d.ts\" />\nimport React, { useState, useEffect } from \"react\";\nimport MarkerManager, { Marker, ClusteringOptions, ServiceTruckMarker } from \"./MarkerManager\";\nimport useGoogleMapsLib, { GoogleMapsLib } from \"./use-google-maps-lib\";\nimport useDomNode from \"../../lib/use-dom-node\";\nimport { PolyLineOptions, constructPoyline, constructPoylineWithEvents, EventsOnMap } from \"./PolyLine\";\nimport DrawingManager, { DrawingOptions, Geofence } from \"./DrawingManager\";\nimport { EventsMapMarkerOptions } from \"../../pages/Dashboard2/widgets/EventsLocationWidget/Widget\";\nimport MapContext, { MapContextInterface } from \"../../pages/FleetOverview2/MapContext\";\n\nconst DEFAULT_CENTER = {\n lat: 41.996052,\n lng: -87.974322\n};\n\nconst DEFAULT_ZOOM = 4;\n\n// Wrap in a function so that we can delay until the\n// google library has actually been loaded\nexport const DEFAULT_MAP_OPTIONS = (): google.maps.MapOptions => ({\n zoom: DEFAULT_ZOOM,\n center: DEFAULT_CENTER,\n mapTypeControl: true,\n mapTypeControlOptions: {\n style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,\n mapTypeIds: [\"roadmap\", \"satellite\"],\n position: google.maps.ControlPosition.BOTTOM_LEFT,\n },\n streetViewControl: false,\n zoomControl: true,\n zoomControlOptions: {\n position: google.maps.ControlPosition.RIGHT_BOTTOM,\n },\n fullscreenControl: false,\n fullscreenControlOptions: {\n position: google.maps.ControlPosition.RIGHT_BOTTOM,\n },\n restriction: {\n latLngBounds: {\n east: 180,\n west: -180,\n north: 85,\n south: -85,\n },\n },\n minZoom: 2,\n rotateControl: false\n});\n\nexport const DEFAULT_MAP_OPTIONS_FOR_GEOFENCING = (): google.maps.MapOptions => ({\n zoom: DEFAULT_ZOOM,\n center: DEFAULT_CENTER,\n mapTypeControl: true,\n mapTypeControlOptions: {\n style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,\n mapTypeIds: [\"roadmap\", \"satellite\"],\n position: google.maps.ControlPosition.BOTTOM_LEFT,\n },\n streetViewControl: false,\n zoomControl: true,\n zoomControlOptions: {\n position: google.maps.ControlPosition.RIGHT_BOTTOM,\n },\n fullscreenControl: false,\n fullscreenControlOptions: {\n position: google.maps.ControlPosition.RIGHT_BOTTOM,\n },\n restriction: {\n latLngBounds: {\n east: 180,\n west: -180,\n north: 85,\n south: -85,\n },\n },\n minZoom: 2,\n rotateControl: false\n});\n\nexport interface MapActions {\n zoomToFit: () => void;\n focusAsset: (latitude: number, longitude: number) => void;\n}\n\ninterface PolyLineState {\n polyLines?: google.maps.Polyline[],\n markers?: Marker[]\n}\n\ninterface MapProps {\n markers: Marker[];\n mapOptions?: google.maps.MapOptions;\n eventsMapMarkerOptions?: EventsMapMarkerOptions;\n mapActionsRef?: (map: MapActions) => void;\n}\n\nexport interface GeofenceOptions {\n geofences?: Geofence[];\n geofenceOptions? : any\n}\n\nexport interface ServiceTrucksOptions {\n serviceTruckMarkers?: Marker[];\n serviceTruckOptions? : any\n}\n\nexport interface FleetOverviewOptions {\n fleetOverviewOptions?: any\n}\n\nexport interface ToolTipOptions {\n toolTipOptions? : any\n}\n\ntype Props = MapProps & ClusteringOptions & PolyLineOptions & EventsOnMap & DrawingOptions & GeofenceOptions & ServiceTrucksOptions & FleetOverviewOptions & ToolTipOptions;\n\n\nexport const GoogleMap: React.FC<Props> = (props ) => {\n const glib = useGoogleMapsLib();\n return glib ? <MapInternals lib={glib} {...props} /> : <></>;\n};\n\n\ninterface State {\n map: google.maps.Map;\n markerManager: MarkerManager; \n drawingManager: DrawingManager; \n}\n\nconst MapInternals: React.FC<Props & { lib: GoogleMapsLib }> = (props) => {\n const [mapNode, setMapNode] = useDomNode<HTMLDivElement>();\n const [state, setState] = useState<State>();\n const [hasRenderedMarkers, setMarkersRendered] = useState(false);\n const [, setDisplayMarkers] = useState<\n ReturnType<MarkerManager[\"getMarkers\"]>\n >([]);\n const [plylineState, setPlyLineState] = useState<PolyLineState>(); \n\n const { lib, mapOptions, markers, drawOverlays, geofences, geofenceOptions, toolTipOptions, serviceTruckMarkers, serviceTruckOptions, fleetOverviewOptions } = props;\n\n let map: google.maps.Map<HTMLDivElement>;\n\n const initializeMap = () => {\n if (mapNode) {\n if (drawOverlays) {\n map = new lib.Map(mapNode, {\n ...DEFAULT_MAP_OPTIONS_FOR_GEOFENCING(),\n ...mapOptions,\n });\n } else {\n map = new lib.Map(mapNode, {\n ...DEFAULT_MAP_OPTIONS(),\n ...mapOptions,\n });\n }\n const markerManager = new MarkerManager(map, props, geofenceOptions, toolTipOptions);\n let drawingManager = new DrawingManager(map, props, geofences, geofenceOptions);\n props.geofenceOptions?.setMap(map);\n props.geofenceOptions?.setDrawingManager(drawingManager);\n props.geofenceOptions?.setMarkerManager(markerManager);\n\n serviceTruckOptions?.setServiceTruckMap(map)\n fleetOverviewOptions?.setFleetOverviewMap(map)\n\n setState({\n markerManager,\n drawingManager,\n map\n });\n\n \n if (props.mapActionsRef) {\n props.mapActionsRef({\n zoomToFit: () => {\n markerManager.zoomToFit(map);\n },\n focusAsset: (latitude: number, longitude: number) => {\n markerManager.focusAsset(map, latitude, longitude);\n }\n });\n }\n\n map.addListener(\"click\", function() {\n if (markerManager._infowindow) {\n markerManager._infowindow.close();\n }\n });\n\n return () => {\n markerManager.destroy();\n };\n }\n };\n\n useEffect(initializeMap, [mapNode]);\n\n const updateGeofences = () => {\n if (state && geofences) {\n state.drawingManager.updateGeofences(state.map, props, geofences, geofenceOptions)\n }\n }\n\n const updateMarkers = () => {\n\n if (state && markers) {\n if (!props.clusterMarkers && !props.eventsOnMap && !props.geofenceOptions) {\n //need to display only recent marker and rest all should be connected by polyline\n const length = markers.length-1;\n const marker = [markers[length]];\n state.markerManager.updateMarkers(marker, state.map, props);\n } else {\n state.markerManager.updateMarkers(markers, state.map, props);\n }\n \n\n if (props.polyline) {\n //const a = constructPoyline(markers, state.map, polylineState);\n const { polyLinePaths, oldMarkers } = constructPoyline(markers, state.map, plylineState?.polyLines, plylineState?.markers); \n setPlyLineState({...plylineState, polyLines: polyLinePaths, markers: oldMarkers});\n }\n\n\n if (props.eventsOnMap) {\n\n const { polyLinePaths, oldMarkers } = constructPoylineWithEvents(markers, state.map, plylineState?.polyLines, plylineState?.markers, props.eventsMapMarkerOptions );\n\n setPlyLineState({...plylineState, polyLines: polyLinePaths, markers: oldMarkers});\n }\n \n setDisplayMarkers(state.markerManager.getMarkers());\n }\n }\n\n useEffect(updateMarkers, [state, markers]);\n useEffect(updateGeofences, [state, geofences, drawOverlays, geofenceOptions]);\n\n const firstMarkerRender = () => {\n if (markers.length > 0 && state?.markerManager && !hasRenderedMarkers) {\n setMarkersRendered(true);\n setTimeout(function () {\n if (props.clusterMarkers) {\n state.markerManager.zoomToFit(state.map);\n } \n }, 250); \n }\n };\n\n useEffect(firstMarkerRender, [state, markers, hasRenderedMarkers]);\n\n const updateServiceTruckMarkers = () => {\n if(state && serviceTruckMarkers){\n state?.markerManager.updateServiceTruckMarkers(serviceTruckMarkers as ServiceTruckMarker[], state.map);\n }\n };\n\n useEffect(updateServiceTruckMarkers, [serviceTruckMarkers, state]);\n\n const MapContextInterface: MapContextInterface = {\n map: state?.map!,\n };\n\n return (\n \n <>\n <div\n data-id=\"map-container\"\n ref={setMapNode} \n style={{ height: \"100%\" }} \n >\n <MapContext.Provider value={MapContextInterface}>{props.children}</MapContext.Provider>\n </div>\n </>\n );\n};","import { IssuesCloseOutlined, LoginOutlined, LogoutOutlined } from \"@ant-design/icons\";\nimport { Drawer, List, Table, Tag } from \"antd\";\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\n\ninterface Prop{\n visible:boolean,\n closeFenceAssetsDrawer:Function,\n mastertags:any,\n fenceName:any,\n gatewaysData:any\n}\n\nconst FenceAssets = (props: Prop) => {\n\n const columns = [\n {\n title:'Asset Name',\n dataIndex:'gatewayName',\n key: 'mastertag',\n sorter: (a:any, b:any) => { return a.fenceName.localeCompare(b.fenceName)},\n render:(text:any, record:any) => (\n <a href={'/assets/' + record.mastertag}> {record.gatewayName}</a>\n )\n }, \n {\n title:'Last Reported',\n dataIndex:'latest_position_status',\n key: 'latest_position_status',\n render: (text: any, record: any) => (\n <>\n {\n record?.latest_position_status?.status ?\n <span>\n {record.latest_position_status.status.includes('In') &&\n <Tag icon={<LoginOutlined style={{ fontSize: 15 }} />} style={{fontSize: 15, padding: 3, marginBottom: 8}} color=\"#009e1d\"> {record.latest_position_status.status} - {new Date(record.latest_position_status.updated_at).toLocaleString()}</Tag>}\n {record.latest_position_status.status.includes('Out') &&\n <Tag icon={<LogoutOutlined style={{ fontSize: 15 }} />} style={{fontSize: 15, padding: 3, marginBottom: 8}} color=\"#d60012\"> {record.latest_position_status.status} - {new Date(record.latest_position_status.updated_at).toLocaleString()}</Tag>}\n </span> :\n <Tag icon={<IssuesCloseOutlined style={{ fontSize: 15 }} />} style={{fontSize: 15, padding: 3, marginBottom: 8}}> No Info</Tag>\n }\n </>\n )\n } \n ]\n\n return (\n\n <Drawer data-id=\"user-fence-assets-drawer\"\n visible={props.visible}\n title=\"Geofence Assets Status\"\n width={\"400px\"}\n zIndex={3}\n destroyOnClose={true}\n onClose={() => props.closeFenceAssetsDrawer()}\n >\n\n <Table dataSource={props.gatewaysData} columns={columns} rowKey={(record) => record.mastertag} />\n \n {/* <List \n bordered \n header={<h3>{\"Geofence: \" + this.props.fenceName}</h3>}\n dataSource={this.props.gatewaysData}\n renderItem={\n (item: any) => (<List.Item><a href={'/assets/' + item.mastertag} >{item.gatewayName}</a></List.Item>)\n }\n /> */}\n\n </Drawer>\n\n );\n}\n\nconst mapStateToProps = (state:any) => {\n\n return {\n visible: state.geofencesReducer.geofencesState.geofencesList.fenceAssets.visible,\n mastertags: state.geofencesReducer.geofencesState.geofencesList.fenceAssets.mastertags,\n fenceName: state.geofencesReducer.geofencesState.geofencesList.fenceAssets.fenceName,\n gatewaysData: state.geofencesReducer.geofencesState.geofencesList.fenceAssets.gatewaysData\n };\n\n}\n\n\nexport default connect(\n mapStateToProps,actions\n)(FenceAssets);\n\n\n","import React from \"react\";\nimport { Drawer, Button, Form, Input, Popconfirm, message, Select, Row, Col, } from \"antd\";\nimport TextArea from \"antd/lib/input/TextArea\";\n\nimport Axios from \"axios\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport { ErrorAlert, SuccessAlert } from \"../../utils/Components/formAlerts\";\nimport { addListenerToUpdateGeoCoords, jsonCircle, jsonPolygon, jsonRectangle, updateGeoCoords } from \"./geofenceHelper\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\nimport { SketchPicker } from \"react-color\";\n\nconst colorPickerCover = {\n position: \"fixed\",\n top: \"0px\",\n right: \"0px\",\n bottom: \"0px\",\n left: \"0px\",\n} as React.CSSProperties;\n\nconst { Option } = Select;\n\ninterface Prop{\n visible: boolean,\n openDrawer: Function,\n closeDrawer: Function,\n setName: Function,\n setColor: Function,\n setDescription: Function,\n record: any,\n assetsList: any,\n setAssetsList:Function,\n mastertags: any,\n gatewayIds: any,\n changeInGateways:any,\n setChangeInGateways:Function,\n setShapeGateways:Function,\n resetChangeGateways:Function,\n updateShape:Function,\n updateShapeOnMap: Function,\n curShape:any,\n addShapeSubmit:Function\n removeShape: Function,\n permissions: any,\n stats: any,\n geofencesList: any,\n}\n\ninterface State {\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n isOpen: boolean;\n geoFenceColor: string;\n}\n\n\nclass ShapeInfo extends React.Component<Prop>{ \n \n state:State = {\n isOpen: false,\n geoFenceColor: this.props.record.fenceColor ? this.props.record.fenceColor : \"#f73e16\",\n }\n\n gateways: any = [];\n\n close = () => {\n this.props.closeDrawer();\n this.props.resetChangeGateways();\n this.setState({formError:false})\n this.setState({formSuccess:false})\n }\n\n\n onChange = (value:any, option:any) => {\n this.gateways = option;\n }\n\n onSelect = (value:any, option:any) => {\n this.props.setChangeInGateways({key: option.key, value: option.value, selected: true})\n }\n\n onDeSelect = (key:any, option:any) => {\n this.props.setChangeInGateways({key: option.key, value: option.value, selected: false})\n }\n \n sendGeofenceGateway = () => {\n\n this.props.changeInGateways.forEach( (item:any) => {\n\n if(item.selected){\n\n Axios.post(appConfigs.server.URL + \"/ui/api/geofences/gateway/add\",\n {\n gatewayId: item.key,\n geofenceId: this.props.record.id,\n mastertag: item.value\n }, \n {\n responseType: \"json\", \n headers: {},\n params: {}\n })\n\n }else{\n\n Axios.put(appConfigs.server.URL + \"/ui/api/geofences/gateway/delete\",\n {\n gatewayId: item.key,\n geofenceId: this.props.record.id \n }, \n {\n responseType: \"json\", \n headers: {},\n params: {}\n })\n \n }\n\n })\n\n this.props.resetChangeGateways();\n this.props.setShapeGateways(this.props.record.id, this.gateways);\n this.gateways = [];\n } \n \n\n onSubmitClick = (canGeofencingCreate: boolean, canGeofencingEdit: boolean) => {\n\n let record:any = this.props.record;\n let curShape:any = this.props.curShape;\n\n let changeInGateways:any[] = this.props.changeInGateways;\n let gateways = this.gateways;\n\n //check if we are creating or editing\n if (record.id === '') { //check if creation mode\n\n /* Prevent org to create more that 10 geofences if all of its gateways are lite gateways */\n if ((this.props.stats.data.gatewaysCount - this.props.stats.data.liteGatewaysCount) == 0 && this.props.geofencesList.fenceList.length > 10) {\n\n this.setState({ formError: true, formErrorMessage: [\"A maximum of 10 geofences limit reached, contact system administrator to upgrade\"] })\n \n } else {\n \n if (canGeofencingCreate) {\n\n Axios.post(appConfigs.server.URL + \"/ui/api/geofences\" , \n this.props.record,\n {\n responseType: \"json\", \n headers: {},\n params: {}\n }).then(response => {\n\n if( response.data.status === \"success\" ) {\n this.setState({formSuccess:true , formSuccessMessage: \"Sucess\"})\n\n if (record.id === '') {\n \n // Update to lastest coordinates for the newly added shape in the database\n if(record.type === \"circle\"){\n updateGeoCoords(response.data.data.geofenceId, jsonCircle(curShape.shape));\n }else if(record.type === \"rectangle\"){\n updateGeoCoords(response.data.data.geofenceId, jsonRectangle(curShape.shape));\n }else if(record.type === \"polygon\"){\n updateGeoCoords(response.data.data.geofenceId, jsonPolygon(curShape.shape));\n }\n\n this.props.addShapeSubmit(curShape.shape, record, response.data.data.geofenceId);\n addListenerToUpdateGeoCoords({\n id: response.data.data.geofenceId,\n shape: curShape.shape,\n type: record.type\n })\n\n this.props.setShapeGateways(response.data.data.geofenceId, gateways)\n \n changeInGateways.forEach((item:any) => {\n Axios.post(appConfigs.server.URL + \"/ui/api/geofences/gateway/add\",\n {\n gatewayId: item.key,\n geofenceId: response.data.data.geofenceId,\n mastertag: item.value\n }, \n {\n responseType: \"json\", \n headers: {},\n params: {}\n })\n })\n\n\n }\n\n }else {\n this.setState({formError:true , formErrorMessage: [\"Error couldn't submit\"]})\n return false\n }\n\n })\n\n if(this.props.record.id !== ''){\n this.props.updateShape(this.props.record.id, this.props.record);\n this.props.updateShapeOnMap(curShape, {fenceColor: this.state.geoFenceColor });\n if (changeInGateways.length > 0) {\n this.sendGeofenceGateway()\n }\n } else {\n this.props.updateShapeOnMap(curShape, {fenceColor: this.state.geoFenceColor });\n }\n\n } else {\n this.setState({formError:true , formErrorMessage: [\"You don't have creation permisison\"]})\n return false\n }\n\n }\n\n } else { // else is editing mode\n\n if (canGeofencingEdit) {\n\n Axios.post(appConfigs.server.URL + \"/ui/api/geofences\" , \n this.props.record,\n {\n responseType: \"json\", \n headers: {},\n params: {}\n }).then(response => {\n\n if( response.data.status === \"success\" ) {\n this.setState({formSuccess:true , formSuccessMessage: \"Sucess\"})\n\n if (record.id === '') {\n \n // Update to lastest coordinates for the newly added shape in the database\n if(record.type === \"circle\"){\n updateGeoCoords(response.data.data.geofenceId, jsonCircle(curShape.shape));\n }else if(record.type === \"rectangle\"){\n updateGeoCoords(response.data.data.geofenceId, jsonRectangle(curShape.shape));\n }else if(record.type === \"polygon\"){\n updateGeoCoords(response.data.data.geofenceId, jsonPolygon(curShape.shape));\n }\n\n this.props.addShapeSubmit(curShape.shape, record, response.data.data.geofenceId);\n addListenerToUpdateGeoCoords({\n id: response.data.data.geofenceId,\n shape: curShape.shape,\n type: record.type\n })\n\n this.props.setShapeGateways(response.data.data.geofenceId, gateways)\n \n changeInGateways.forEach((item:any) => {\n Axios.post(appConfigs.server.URL + \"/ui/api/geofences/gateway/add\",\n {\n gatewayId: item.key,\n geofenceId: response.data.data.geofenceId,\n mastertag: item.value\n }, \n {\n responseType: \"json\", \n headers: {},\n params: {}\n })\n })\n\n\n }\n\n }else {\n this.setState({formError:true , formErrorMessage: [\"Error couldn't submit\"]})\n return false\n }\n\n })\n\n if(this.props.record.id !== ''){\n this.props.updateShape(this.props.record.id, this.props.record);\n this.props.updateShapeOnMap(this.props.curShape, {fenceColor: this.state.geoFenceColor });\n if (changeInGateways.length > 0) {\n this.sendGeofenceGateway()\n }\n }\n\n } else {\n this.setState({formError:true , formErrorMessage: [\"You don't have editing permisison\"]})\n }\n\n }\n \n\n }\n\n\n onDelete = () => {\n let id:string = this.props.record.id;\n let shape:any = this.props.curShape;\n\n if(id === ''){\n message.success('Geofence has been deleted successfully');\n this.props.removeShape(shape);\n this.props.closeDrawer();\n return;\n }\n\n if(this.props.mastertags.length === 0){\n Axios.put( appConfigs.server.URL + `/ui/api/geofences/${id}/delete` ,\n {\n responseType: \"json\", \n headers: {},\n params: {\n geofenceId: id\n }\n }\n ).then (response => {\n if(response.data.status === \"success\"){\n \n message.success('Geofence has been deleted successfully');\n this.props.removeShape(shape);\n this.props.closeDrawer();\n }\n })\n }else{\n message.error('Remove all the assets attached to this geofence first')\n }\n \n }\n\n onColorSelect = (color:any) => {\n this.props.setColor(color.hex) \n this.setState({ geoFenceColor: color.hex });\n };\n\n render() {\n\n const geofencePermissions = getPermissions(this.props.permissions.permissions.geofencing);\n let canGeofencingCreate = geofencePermissions[0];\n // let canGeofencingRead = geofencePermissions[1];\n let canGeofencingEdit = geofencePermissions[2];\n let canGeofencingDelete = geofencePermissions[3];\n\n return (\n <Drawer\n zIndex={3}\n data-id=\"user-maint-drawer\" \n title={`Geofence: ${this.props.record.fenceName}`}\n width={\"400px\"}\n onClose={this.close}\n visible={this.props.visible}\n destroyOnClose={true}\n footer={\n <Row justify=\"space-between\">\n {canGeofencingDelete &&\n <Col span={12}>\n <Popconfirm title=\"Are you sure to delete this geofence?\" okText=\"Yes\" cancelText=\"No\" onConfirm={this.onDelete}>\n <Button type=\"primary\" size=\"middle\" danger>\n Delete\n </Button>\n </Popconfirm>\n </Col>\n } {!canGeofencingDelete && <Col span={12}></Col> }\n {(canGeofencingEdit || canGeofencingCreate) &&\n <Col span={12}>\n <Button style={{ float: 'right' }} data-id=\"assets-maint-submit-button\" type=\"primary\" form=\"shapeInfoForm\" key=\"submit\" onClick={() => this.onSubmitClick(canGeofencingCreate, canGeofencingEdit)} htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n </Col>\n }\n </Row>\n }\n > \n \n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"assets-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"assets-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n \n {\n <Form layout=\"vertical\" > \n\n <Form.Item style={{marginTop:10}} label=\"Name\">\n <Input \n disabled={ (!canGeofencingEdit && this.props.record.id !== '' ) || (!canGeofencingCreate && this.props.record.id === '' ) } \n placeholder=\"Name\" \n defaultValue={this.props.record.fenceName}\n onChange={(e) => {this.props.setName(e.target.value)}}\n />\n </Form.Item>\n\n <Form.Item style={{marginTop:10}} label=\"Color\">\n \n <Input \n disabled={ (!canGeofencingEdit && this.props.record.id !== '' ) || (!canGeofencingCreate && this.props.record.id === '' ) }\n value={this.props.record.fenceColor ? this.props.record.fenceColor : \"#f73e16\"}\n readOnly={true}\n onFocus={() => {\n this.setState({isOpen: !this.state.isOpen});\n }}\n style={{ width: \"85%\" }}\n />\n \n <Button\n style={{\n marginLeft: \"8px\",\n width: \"5%\",\n background: this.props.record.fenceColor ? this.props.record.fenceColor : \"#f73e16\",\n }}\n shape= \"circle\"\n onClick={() => {\n this.setState({isOpen: !this.state.isOpen});\n }}\n >\n \n </Button>\n <div>\n {this.state.isOpen ? (\n <>\n <div\n style={{\n position: \"absolute\",\n zIndex: 5,\n right: 0,\n marginTop: '8px',\n marginRight: '15px',\n }}\n >\n <div\n style={colorPickerCover}\n onClick={() => {\n this.setState({isOpen: !this.state.isOpen});\n }}\n />\n <SketchPicker\n color={ this.props.record.fenceColor ? this.props.record.fenceColor : \"#f73e16\" }\n onChange={ this.onColorSelect }\n />\n </div>\n </>\n ) : null}\n </div>\n </Form.Item>\n \n <Form.Item style={{marginTop: -20}} label=\"Description\">\n <TextArea disabled={(!canGeofencingEdit && this.props.record.id !== '' ) || (!canGeofencingCreate && this.props.record.id === '' )} autoSize={{ minRows: 3, maxRows: 5 }} defaultValue={this.props.record.description} onChange={(e) => {this.props.setDescription(e.target.value)}} placeholder=\"Description\" />\n </Form.Item>\n \n <Form.Item style={{marginTop:10, display: 'none'}} label=\"Shape\">\n <Input value={this.props.record.type} disabled={true} />\n </Form.Item>\n\n <Form.Item style={{marginTop:10}} label=\"Asset Master Tag\">\n <Select \n mode=\"multiple\"\n defaultValue={this.props.mastertags}\n showSearch\n onChange={this.onChange}\n onSelect={this.onSelect}\n optionFilterProp=\"children\"\n filterOption={(input, option) => {\n return (option?.children[0]?.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option?.children[2]?.toLowerCase().indexOf(input.toLowerCase()) >= 0)\n }}\n onDeselect={this.onDeSelect}\n disabled={ (!canGeofencingEdit && this.props.record.id !== '' ) || (!canGeofencingCreate && this.props.record.id === '' ) }\n >\n {\n this.props.assetsList.map((item:any) => (\n (this.props.record.gatewayId === item.key) ? \n <Option selected key={item.gatewayId} value={item.mastertag}>{item.nickname} / {item.mastertag}</Option>\n : \n <Option key={item.gatewayId} value={item.mastertag}>{item.nickname} / {item.mastertag}</Option>\n ))\n \n }\n </Select>\n </Form.Item>\n \n </Form>\n \n }\n \n </Drawer>\n );\n }\n}\n\n\nconst mapStateToProps = (state:any) => {\n\n return {\n visible: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.visible,\n record: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.record,\n assetsList: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.assetsList,\n mastertags: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.mastertags,\n gatewayIds: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.gatewayIds,\n changeInGateways: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.changeInGateways,\n curShape: state.geofencesReducer.geofencesState.geofencesList.geoFenceMaint.curShape,\n permissions: state.contextReducer.data,\n stats: state.contextReducer.stats,\n geofencesList: state.geofencesReducer.geofencesState.geofencesList,\n }\n}\n\nexport default connect(\n mapStateToProps,\n actions\n)(ShapeInfo);\n\n\n\n","import React from \"react\";\nimport { Drawer, Button, Tabs, Space, Form, Radio, Input, Table } from \"antd\";\nimport * as actions from \"./actions\";\nimport { connect } from \"react-redux\";\nimport { UnorderedListOutlined } from \"@ant-design/icons\";\n\nconst { Search } = Input;\n\ninterface Props{\n fenceList: any[],\n fenceListDrawerVisible: boolean,\n fenceTableList: any[],\n map: google.maps.Map,\n closeFenceListDrawer: Function,\n openDrawer:Function,\n openFenceAssetsDrawer:Function,\n setFenceMastertags:Function,\n changeOnSearch:Function\n}\n\n\nconst FenceListDrawer = (props: Props) => {\n\n const close = () => {\n props.closeFenceListDrawer();\n }\n\n const onClickListIcon = (record:any) => {\n\n //props.closeFenceListDrawer();\n props.openFenceAssetsDrawer();\n props.setFenceMastertags(record.mastertags, record.fenceName, record.latestPositionStatuses);\n \n }\n\n const onFenceNameClicked = (record: any) => {\n \n let shape = null\n\n if(record.type === \"circle\"){\n shape = record.shape as google.maps.Circle;\n props.map.setZoom(props.map.getZoom() + 1)\n props.map.fitBounds(shape.getBounds());\n }else if(record.type === \"rectangle\"){\n shape = record.shape as google.maps.Rectangle;\n props.map.setZoom(props.map.getZoom() + 1)\n props.map.fitBounds(shape.getBounds());\n } else if (record.type === \"polygon\") {\n shape = record.shape as google.maps.Polygon;\n let bounds = getBoundsForPolygon(shape as google.maps.Polygon);\n if (bounds !== null) {\n props.map.setZoom(props.map.getZoom() + 1)\n props.map.fitBounds(bounds);\n }\n }\n\n props.openDrawer(record);\n props.closeFenceListDrawer();\n }\n\n const getBoundsForPolygon = (polygon:google.maps.Polygon) => {\n \n var arr = polygon.getPath();\n var minLat, minLng, maxLat, maxLng = undefined;\n\n for(let i = 0; i < arr.getLength(); i++){\n\n let lat = arr.getAt(i).lat();\n let lng = arr.getAt(i).lng();\n\n minLat = (minLat === undefined || minLat > lat) ? lat : minLat;\n minLng = (minLng === undefined || minLng > lng) ? lng : minLng;\n maxLat = (maxLat === undefined || maxLat < lat) ? lat : maxLat;\n maxLng = (maxLng === undefined || maxLng < lng) ? lng : maxLng;\n }\n\n if(minLat && minLng && maxLat && maxLng){\n let southWest = new google.maps.LatLng(minLat, minLng);\n let northEast = new google.maps.LatLng(maxLat, maxLng);\n return new google.maps.LatLngBounds(southWest, northEast);\n }\n\n return null;\n }\n\n\n\n const onSearch = (value:string) => {\n props.changeOnSearch(value);\n }\n\n const onChange = (event:any) => {\n let target = event.target;\n if(target){\n props.changeOnSearch(target.value);\n }\n }\n\n\n const columns = [\n {\n title:'Name',\n dataIndex:'fenceName',\n key: 'name',\n sorter: (a:any, b:any) => { return a.fenceName.localeCompare(b.fenceName)},\n render:(text:any, record:any) => (\n <a onClick={() => {onFenceNameClicked(record)}}> {record.fenceName}</a>\n )\n }, \n {\n title: 'Assets Status',\n dataIndex: 'fenceName',\n key: 'assets',\n render:(text:any, record:any) => (\n <Button shape=\"circle-outline\" onClick={() => onClickListIcon(record)} icon={ <UnorderedListOutlined />}></Button>\n )\n } \n ];\n\n \n return (\n \n <Drawer data-id=\"user-fencelist-drawer\" \n visible={props.fenceListDrawerVisible}\n title=\"Geofences List\"\n width={\"450px\"}\n destroyOnClose={true}\n onClose={close}\n zIndex={3}\n >\n {\n <Search\n data-id=\"assets-maint-subscriptions-search-field\"\n placeholder=\"Search by Name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onChange}\n style={{marginBottom: 20, width: '100%'}}\n /> \n }\n {\n <Table dataSource={props.fenceTableList} columns={columns} rowKey={(record) => record.id} />\n }\n\n\n </Drawer>\n \n );\n\n \n}\n\nconst mapStateToProps = (state:any) => {\n\n return {\n fenceList: state.geofencesReducer.geofencesState.geofencesList.fenceList,\n fenceListDrawerVisible: state.geofencesReducer.geofencesState.geofencesList.fenceListDrawerVisible,\n map: state.geofencesReducer.geofencesState.geofencesList.map,\n fenceTableList: state.geofencesReducer.geofencesState.geofencesList.fenceTableList\n }\n\n}\n\n\nexport default connect(\n mapStateToProps,\n actions\n)(FenceListDrawer);\n","export const GeofenceTheme:google.maps.MapTypeStyle[] = [\n {\n \"featureType\": \"administrative\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#0f0e11\"\n }\n ]\n },\n {\n \"featureType\": \"landscape\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#f6f6f6\"\n }\n ]\n },\n {\n \"featureType\": \"landscape.man_made\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#736100\"\n }\n ]\n },\n {\n \"featureType\": \"landscape.natural.terrain\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"transit.station.airport\",\n \"elementType\": \"labels\",\n \"stylers\": [\n {\n \"visibility\": \"on\"\n }\n ]\n },\n {\n \"featureType\": \"poi.attraction\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"poi.business\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"poi.government\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"poi.medical\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"poi.place_of_worship\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"poi.school\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n {\n \"featureType\": \"poi.sports_complex\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffe289\"\n }\n ]\n },\n \n {\n \"featureType\": \"poi\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"simplified\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"saturation\": -100\n },\n {\n \"lightness\": 45\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"simplified\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"visibility\": \"simplified\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#ffce3d\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#ffbf00\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"labels.icon\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"visibility\": \"on\"\n },\n {\n \"color\": \"#ffbf00\"\n },\n ]\n },\n {\n \"featureType\": \"transit\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"on\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#ecece8\"\n },\n {\n \"visibility\": \"on\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#d9d9d9\"\n }\n ]\n }\n \n];\n","import React, { useEffect, useState } from \"react\";\nimport { Drawer, Button, Tabs, Space, Form, Radio, Input, Table } from \"antd\";\nimport * as actions from \"./actions\";\nimport { connect } from \"react-redux\";\nimport { ServiceTruck } from \"../FleetOverview2/models\";\n\nconst { Search } = Input;\n\ninterface Props{\n serviceTruckList: any,\n serviceTruckListDrawerVisible: boolean,\n map: any,\n openServiceTruckMaintDrawer: Function,\n closeServiceTruckDrawer: Function,\n openServiceTruckDrawer: Function,\n}\n\n\nconst ServiceTrucksListDrawer = (props: Props) => {\n\n const [serviceTrucks, setServiceTrucks] = useState<ServiceTruck[]>(props.serviceTruckList.assets);\n \n const serviceTrucksProp = props.serviceTruckList.assets\n\n useEffect(() => {\n setServiceTrucks(serviceTrucksProp)\n }, [serviceTrucksProp]);\n \n\n const close = () => {\n props.closeServiceTruckDrawer();\n }\n\n const focusOnServiceTruck = (record: ServiceTruck) => {\n \n\n if (props.map && record.longitude && record.latitude && record.longitude !== 0 && record.latitude !== 0) {\n\t\t\tconst bounds = new google.maps.LatLngBounds();\n\t\t\tconst loc = new google.maps.LatLng(record.latitude, record.longitude);\n bounds.extend(loc);\n \n props.map.setZoom(props.map.getZoom() + 1);\n\n props.map.fitBounds(bounds);\n \n props.map.panToBounds(bounds);\n \n props.closeServiceTruckDrawer();\n }\n \n props.openServiceTruckMaintDrawer(record);\n \n }\n\n const onSearch = (searchValue: string) => {\n if (searchValue.length > 0) {\n\n let filteredServiceTrucksList = props.serviceTruckList.assets.filter((item: ServiceTruck) =>\n {\n return (\n item.vehicleName.toLowerCase().indexOf(searchValue.toLowerCase()) >= 0 ||\n item.operatorName?.toLowerCase().indexOf(searchValue.toLowerCase()) >= 0\n )\n }\n );\n setServiceTrucks(filteredServiceTrucksList)\n\n } else {\n setServiceTrucks(props.serviceTruckList.assets)\n }\n \n }\n\n const onChange = (event:any) => {\n let target = event.target;\n\n if (target) {\n if (target.value.length > 0) {\n\n let filteredServiceTrucksList = props.serviceTruckList.assets.filter((item: ServiceTruck) =>\n {\n return (\n item.vehicleName.toLowerCase().indexOf(target.value.toLowerCase()) >= 0 ||\n item.operatorName?.toLowerCase().indexOf(target.value.toLowerCase()) >= 0\n )\n }\n );\n setServiceTrucks(filteredServiceTrucksList)\n \n } else {\n setServiceTrucks(props.serviceTruckList.assets)\n }\n }\n }\n\n\n const columns = [\n {\n title:'Vehicle ID',\n dataIndex:'vehicleName',\n key: 'name',\n sorter: (a:any, b:any) => { return a.VIN.localeCompare(b.VIN)},\n render:(text:any, record:ServiceTruck) => (\n <a onClick={() => {focusOnServiceTruck(record)}}>{ record.vehicleName }</a>\n )\n }, \n {\n title: 'Operator Name',\n dataIndex: 'operatorName',\n key: 'assets',\n sorter: (a: any, b: any) => { if (a.operatorName && b.operatorName) { return a.operatorName.localeCompare(b.operatorName) } },\n render:(text:any, record:ServiceTruck) => ( \n <span>{ record.operatorName==='None' ? '' : record.operatorName }</span> \n )\n } \n ];\n\n \n return (\n \n <Drawer\n visible={props.serviceTruckListDrawerVisible}\n title=\"Service Trucks List\"\n width={\"450px\"}\n destroyOnClose={true}\n onClose={close}\n zIndex={3}\n >\n {\n <Search\n placeholder=\"Search by Vehicle ID or Operator Name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onChange}\n style={{marginBottom: 20, width: '100%'}}\n /> \n }\n {\n <Table pagination={{ showSizeChanger: false, defaultPageSize: 20, simple: true }} dataSource={serviceTrucks} columns={columns} rowKey={(record) => record.VIN} showSorterTooltip={false}/>\n }\n\n </Drawer>\n \n );\n\n \n}\n\nconst mapStateToProps = (state:any) => {\n\n return {\n serviceTruckList: state.serviceTruckReducer.serviceTruckState.serviceTruckList,\n serviceTruckListDrawerVisible: state.serviceTruckReducer.serviceTruckState.serviceTruckListDrawerVisible,\n map: state.serviceTruckReducer.serviceTruckState.map,\n }\n\n}\n\n\nexport default connect(\n mapStateToProps,\n actions\n)(ServiceTrucksListDrawer);\n","import React, { useEffect, useState } from \"react\";\nimport { Drawer, Button, Space, Form, Input, Popconfirm, message, Select, Row, Col, } from \"antd\";\nimport TextArea from \"antd/lib/input/TextArea\";\n\nimport Axios from \"axios\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport { ErrorAlert, SuccessAlert } from \"../../utils/Components/formAlerts\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\nimport { ServiceTruck } from \"../FleetOverview2/models\";\n\n\nconst { Option } = Select;\n\ninterface Prop{\n closeServiceTruckMaintDrawer: Function,\n updateServiceTrucksDetails: Function,\n serviceTruckMaint: ServiceTruck,\n serviceTruckList: any,\n serviceTruckMintDrawerVisible: any,\n map: any,\n permissions: any,\n}\n\ninterface State {\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n ServiceTruckNew?: ServiceTruck;\n}\n\n\nconst ServiceTrucksMaint = (props: Prop) => {\n\n const [formError, setFormError] = useState<boolean>(false);\n const [formErrorMessage, setFormErrorMessage] = useState<string[]>([]);\n const [formSuccess, setFormSuccess] = useState<boolean>(false);\n const [formSuccessMessage, setFormSuccessMessage] = useState<string>(\"\");\n const [serviceTrucks, setServiceTrucks] = useState<ServiceTruck>(props.serviceTruckMaint);\n \n const serviceTruckMaint = props.serviceTruckMaint\n\n useEffect(() => {\n setServiceTrucks(serviceTruckMaint)\n }, [serviceTruckMaint]);\n\n\n const close = () => {\n props.closeServiceTruckMaintDrawer();\n setFormError(false)\n setFormErrorMessage([])\n setFormSuccess(false)\n setFormSuccessMessage(\"\")\n }\n\n\n const setOperatorName = (value: any) => {\n if (value) {\n setServiceTrucks({ ...serviceTruckMaint, operatorName: value.trim(), orgId: props.serviceTruckMaint.orgId ? props.serviceTruckMaint.orgId : '' })\n } else {\n setServiceTrucks({ ...serviceTruckMaint, operatorName: '' })\n }\n }\n \n const onSubmitClick = () => { \n if (serviceTrucks.operatorName) {\n setFormError(false)\n setFormErrorMessage([])\n props.updateServiceTrucksDetails(serviceTrucks, callbackFnSuccess ,callbackFnFailure)\n\n } else {\n setFormError(true)\n setFormErrorMessage([\"Operator name cannot be empty\"])\n }\n\n }\n\n const callbackFnSuccess = (message: string) => {\n setFormError(false)\n setFormErrorMessage([\"\"])\n\n setFormSuccess(true)\n setFormSuccessMessage(message)\n }\n\n\n const callbackFnFailure = (messages: string[]) => {\n setFormSuccess(false)\n setFormSuccessMessage(\"\")\n\n setFormError(true)\n setFormErrorMessage(messages)\n }\n\n\n return (\n <Drawer\n zIndex={3}\n data-id=\"user-maint-drawer\" \n title={`Vehicle ID: ${props.serviceTruckMaint?.vehicleName}`}\n width={\"400px\"}\n onClose={close}\n visible={props.serviceTruckMintDrawerVisible}\n destroyOnClose={true}\n footer={\n <Row justify=\"space-between\">\n {\n <Col span={24}>\n <Button style={{ float: 'right' }} data-id=\"assets-maint-submit-button\" type=\"primary\" form=\"serviceTruckForm\" key=\"submit\" onClick={() => onSubmitClick() } htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n </Col>\n }\n </Row>\n }\n > \n\n {formSuccess && !formError && <SuccessAlert data-id=\"assets-maint-info-success-message\" message={formSuccessMessage}/>}\n {formError && !formSuccess && <ErrorAlert data-id=\"assets-maint-info-error-message\" message={formErrorMessage}/>}\n \n {\n <Form layout=\"vertical\" > \n\n <Form.Item style={{marginTop:10}} label=\"Operator Name\">\n <Input placeholder=\"Operator Name\" defaultValue={props.serviceTruckMaint.operatorName} onChange={ (e) => setOperatorName(e.target.value) }/>\n </Form.Item>\n \n </Form>\n }\n \n </Drawer>\n );\n\n}\n\n\nconst mapStateToProps = (state:any) => {\n\n return {\n serviceTruckMaint: state.serviceTruckReducer.serviceTruckState.serviceTruckMaint,\n serviceTruckList: state.serviceTruckReducer.serviceTruckState.serviceTruckList,\n serviceTruckMintDrawerVisible: state.serviceTruckReducer.serviceTruckState.serviceTruckMintDrawerVisible,\n map: state.serviceTruckReducer.serviceTruckState.map,\n permissions: state.contextReducer.data,\n }\n}\n\nexport default connect(\n mapStateToProps,actions\n)(ServiceTrucksMaint);\n\n\n\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"aeroplane\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"aeroplane\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M56.27,32.25,61,41.94H54.58L50,35.51H38.49l8.16,19.61H40.12L25.78,35.51H5.49a3.26,3.26,0,0,1-3.26-3.26h0A3.26,3.26,0,0,1,5.49,29H25.78L40.12,9.38h6.53L38.49,29H50l4.56-6.43H61l-4.72,9.69\"\n}));\n\nvar SvgAeroplane = function SvgAeroplane(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icons\",\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAeroplane, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/aeroplane.38472aa5.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"33. Aircraft\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"_33._Aircraft\",\n \"data-name\": \"33. Aircraft\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M46.41,21.21c-6.12-5.13-12-4.21-20-4.21C18.09,8.68,18.59,9,18,9c-7.59,0-7.5-.18-7.88.53S9.81,10,14.46,17H9.54L5.83,11.45C5.41,10.81,5,11,1,11a1,1,0,0,0-1,1.24l2.49,9.94A9,9,0,0,0,11.25,29H15.8l-5.63,8.45A1,1,0,0,0,11,39c7.47,0,7.29.12,7.71-.29L21.41,36H25a3,3,0,0,0,1.8-5.39L28.41,29H43.59A4.41,4.41,0,0,0,46.41,21.21Zm-7.1.08c.37-.38.55-.29,3.23-.29a14.58,14.58,0,0,1,2.85,2H40A1,1,0,0,1,39.31,21.29ZM17.59,11l6,6H16.87l-4-6Zm0,26H12.87l6.67-10c9.37,0,8.17-.12,7.75.29ZM25,34H23.41l1.93-1.93A1,1,0,0,1,25,34Zm18.59-7c-15.11,0-13.3.12-12.88-.29A1,1,0,0,0,30,25c-11.71,0-11.41-.19-11.83.45l-1,1.55H11.25a7,7,0,0,1-6.79-5.3L2.28,13H4.46l3.71,5.55c.43.65.47.45,8.16.45,20.37,0,19.65-.15,22.13.44A3,3,0,0,0,40,25h6A2.42,2.42,0,0,1,43.59,27Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M30,21v1a1,1,0,0,0,2,0V21A1,1,0,0,0,30,21Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M26,21v1a1,1,0,0,0,2,0V21A1,1,0,0,0,26,21Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M22,21v1a1,1,0,0,0,2,0V21A1,1,0,0,0,22,21Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M18,21v1a1,1,0,0,0,2,0V21A1,1,0,0,0,18,21Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M14,21v1a1,1,0,0,0,2,0V21A1,1,0,0,0,14,21Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M10,21v1a1,1,0,0,0,2,0V21A1,1,0,0,0,10,21Z\"\n}));\n\nvar SvgAircraft = function SvgAircraft(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAircraft, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Aircraft.0009c61a.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"ambulance\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M29,19a1,1,0,0,0,1-1V16.76a2.05,2.05,0,0,0-1.42-2l-1.69-.56-.52-3A4.17,4.17,0,0,0,22.09,8H19V5.89A1.88,1.88,0,0,0,17.11,4h0L4,4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h.08a4,4,0,0,0,0,.5,3.52,3.52,0,1,0,1-2.49H5L4,22,4,6,17,6V22H14a1,1,0,0,0,0,2h5.88a2.73,2.73,0,0,0-.05.5,3.6,3.6,0,0,0,6.44,2.11A3.38,3.38,0,0,0,27,24.5a4,4,0,0,0,0-.5H28a2,2,0,0,0,2-2,1,1,0,0,0-1-1,1,1,0,0,0-1,1H25.9a3.56,3.56,0,0,0-2.49-1,3.65,3.65,0,0,0-2.52,1H19V16h6.79l2.21.76V18A1,1,0,0,0,29,19ZM7.5,23A1.5,1.5,0,1,1,6,24.5,1.5,1.5,0,0,1,7.5,23Zm15.91,0a1.6,1.6,0,0,1,1.28.61,1.43,1.43,0,0,1,0,1.78,1.6,1.6,0,0,1-1.28.61,1.5,1.5,0,1,1,0-3Zm1-11.43L24.82,14H19V10h3.09A2.22,2.22,0,0,1,24.4,11.57Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M10,18a1,1,0,0,0,1-1V15h2a1,1,0,0,0,0-2H11V11a1,1,0,0,0-2,0v2H7a1,1,0,0,0,0,2H9v2A1,1,0,0,0,10,18Z\"\n}));\n\nvar SvgAmbulance = function SvgAmbulance(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAmbulance, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ambulance.2fb61c71.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"_225698728\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225699184\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M590.614 1353.36c46.1941,0 88.0701,18.7606 118.335,48.9993 30.2599,30.2374 49.037,72.0804 49.037,118.244 0,46.1563 -18.7772,88.0016 -49.037,118.24 -30.2634,30.2386 -72.1406,49.0016 -118.335,49.0016 -46.1941,0 -87.9473,-18.763 -118.208,-49.0016 -30.3851,-30.2386 -49.0359,-72.0839 -49.0359,-118.24 0,-46.1634 18.6496,-88.0052 49.0359,-118.244 30.261,-30.2386 72.0142,-48.9969 118.208,-48.9969l0 -0.00236221z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225699256\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1326.91 1353.36c46.1953,0 88.0678,18.7606 118.332,48.9993 30.2658,30.2374 49.0323,72.0804 49.0323,118.244 0,46.1563 -18.7677,88.0016 -49.0323,118.24 -30.2646,30.2386 -72.1371,49.0016 -118.332,49.0016 -46.1953,0 -88.069,-18.763 -118.332,-49.0016 -30.2599,-30.2386 -49.0335,-72.0839 -49.0335,-118.24 0,-46.1634 18.7713,-88.0052 49.0335,-118.244 30.2658,-30.2386 72.1359,-48.9969 118.332,-48.9969l0 -0.00236221z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225699424\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M824.932 727.96l0 -39.6213c0,-61.3418 35.5748,-100.714 81.0296,-117.995 16.7988,-6.29528 34.9536,-9.50316 52.8662,-9.50316 17.9055,0 35.9422,3.20788 52.7398,9.50316 45.5788,17.2807 81.0308,56.654 81.0308,117.996l0 39.6201 -267.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225698944\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M992.298 393.598c0,-18.5138 -15.0673,-33.4477 -33.4701,-33.4477 -18.5244,0 -33.4772,14.9339 -33.4772,33.4477l0 103.432c0,18.5138 14.9528,33.4488 33.4772,33.4488 18.404,0 33.4701,-14.9351 33.4701,-33.4488l0 -103.432z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225698824\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1147.44 454.323c9.1441,-15.9213 3.7063,-36.2859 -12.3473,-45.4193 -15.9343,-9.13465 -36.3166,-3.70394 -45.4595,12.2185l-51.7524 89.6079c-9.14292,16.0441 -3.70985,36.2859 12.2291,45.5445 16.0547,9.13465 36.4335,3.57874 45.5741,-12.3437l51.7559 -89.6079z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225698776\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M827.898 421.122c-9.13938,-15.9225 -29.5217,-21.3532 -45.4607,-12.2185 -15.9331,9.13347 -21.4914,29.4992 -12.2232,45.4193l51.7524 89.6068c9.13938,15.9225 29.5193,21.4795 45.4548,12.3449 15.939,-9.25985 21.4914,-29.4992 12.228,-45.5445l-51.7512 -89.6079z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225698200\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1164.73 1143.17c-16.4232,0 -31.3713,-6.79134 -42.2433,-17.524 -10.8662,-10.8638 -17.5382,-25.8024 -17.5382,-42.2126l0 -119.355c0,-16.415 6.67205,-31.3477 17.5382,-42.2103 10.8721,-10.7398 25.8201,-17.5252 42.2433,-17.5252l169.719 -0.0011811c0,-5.43308 191.822,198.469 231.719,238.83l-401.438 -0.0011811zm-331.774 -13.8236l-150.566 0 0 150.457 -66.9485 0 0 -150.457 -150.571 0 0 -66.8977 150.571 0 0 -150.457 66.9485 0 0 150.457 150.566 0 0 66.8977zm863.774 26.537c-23.8347,-11.9728 -51.88,-26.0433 -79.7965,-51.2233 -54.717,-49.6193 -329.667,-343.249 -356.967,-343.249l-886.869 0c-32.2394,0 -61.513,13.2083 -82.7599,34.4362 -21.1205,21.1051 -34.3382,50.4792 -34.3382,82.6973l0 535.054c0,32.2122 13.2177,61.4646 34.3382,82.5733 21.2469,21.2256 50.5205,34.4327 82.7599,34.4327l17.0457 0c-0.122835,-3.33071 -0.248032,-6.6626 -0.248032,-9.9945 0,-53.3245 20.9988,-104.173 58.7941,-141.82 37.7977,-37.7658 88.5638,-58.7493 141.925,-58.7493 53.4839,0 104.251,20.9835 142.047,58.7493 37.8,37.6465 58.793,88.4953 58.793,141.82 0,3.33189 -0.11811,6.66378 -0.242126,9.9945l335.106 0c-0.122835,-3.33071 -0.246851,-6.6626 -0.246851,-9.9945 0,-53.3245 21.1252,-104.173 58.9217,-141.82 37.6725,-37.7658 88.565,-58.7493 141.921,-58.7493 53.3599,0 104.249,20.9835 141.925,58.7493 37.7965,37.6465 58.9182,88.4953 58.9182,141.82 0,3.33189 -0.124016,6.66378 -0.246851,9.9945l100.547 0c30.5079,0 62.1296,-12.5894 87.6969,-32.2122 25.4445,-19.624 45.5788,-46.9052 53.3587,-76.5225 15.7323,-60.3497 22.8095,-104.774 22.8862,-138.458 0.180709,-79.7812 -38.9055,-99.3225 -95.269,-127.528z\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgAmbulance1 = function SvgAmbulance1(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAmbulance1, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Ambulance1.8bcc5727.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"43. Ambulance car\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"_43._Ambulance_car\",\n \"data-name\": \"43. Ambulance car\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M48,29.76a7.43,7.43,0,0,0-3.54-4.65c-1.42-.8-1.86-.75-8.94-2-5.38-5.37-6-6.45-8.68-6.95L26,12.76A1,1,0,0,0,25,12H21a1,1,0,0,0-1,.76L19.22,16H3a3,3,0,0,0-3,3V35a3,3,0,0,0,3,3H6.1a5,5,0,0,0,9.8,0H32.1a5,5,0,0,0,9.8,0H45a3,3,0,0,0,3-3C48,29.63,48,29.93,48,29.76ZM43.72,27a5,5,0,0,1,1.81,2H44A1,1,0,0,1,43.72,27ZM32.59,23H24V18C28.24,18,27.79,18.21,32.59,23ZM21.78,14h2.44l.5,2H21.28ZM11,40a3,3,0,1,1,3-3A3,3,0,0,1,11,40Zm26,0a3,3,0,1,1,3-3A3,3,0,0,1,37,40Zm8-4H41.9a5,5,0,0,0-9.8,0H15.9a5,5,0,0,0-9.8,0H3a1,1,0,0,1-1-1V32H3a1,1,0,0,0,0-2H2V19a1,1,0,0,1,1-1H22v5a2,2,0,0,0,2,2c13.09,0,9.17-.31,17.6,1.21A3,3,0,0,0,44,31h2v4A1,1,0,0,1,45,36Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M37.92,36.62A1,1,0,1,0,37,38,1,1,0,0,0,37.92,36.62Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M10.8,36a1,1,0,1,0,.58,1.9A1,1,0,0,0,10.8,36Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M15,22H14V21a1,1,0,0,0-1-1H9a1,1,0,0,0-1,1v1H7a1,1,0,0,0-1,1v4a1,1,0,0,0,1,1H8v1a1,1,0,0,0,1,1h4a1,1,0,0,0,1-1V28h1a1,1,0,0,0,1-1V23A1,1,0,0,0,15,22Zm-1,4H13a1,1,0,0,0-1,1v1H10V27a1,1,0,0,0-1-1H8V24H9a1,1,0,0,0,1-1V22h2v1a1,1,0,0,0,1,1h1Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M27,27H25a1,1,0,0,0,0,2h2A1,1,0,0,0,27,27Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M24,9V7a1,1,0,0,0-2,0V9A1,1,0,0,0,24,9Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M18.05,11.46a1,1,0,0,0,1.41-1.41L18.05,8.64a1,1,0,0,0-1.41,1.41Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M27.24,11.76c.6,0,.83-.42,2.12-1.71A1,1,0,1,0,28,8.64l-1.41,1.41A1,1,0,0,0,27.24,11.76Z\"\n}));\n\nvar SvgAmbulanceCar = function SvgAmbulanceCar(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAmbulanceCar, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/AmbulanceCar.dcc64aab.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"31. ATV\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"_31._ATV\",\n \"data-name\": \"31. ATV\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M10,29a3,3,0,1,0,3,3A3,3,0,0,0,10,29Zm0,4a1,1,0,0,1,0-2A1,1,0,0,1,10,33Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M38,29a3,3,0,1,0,3,3A3,3,0,0,0,38,29Zm0,4a1,1,0,0,1,0-2A1,1,0,0,1,38,33Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M47.51,22.16c-.59-1.36-1.25-1.81-5.34-5.9,2-2,.13-6.26-3.5-6.26H38c-.51,0-.22.33-1.11-1.45C36.52,7.8,36.4,8,30,8a1,1,0,0,0,0,2h5.38l.25.49A6,6,0,0,0,32,15.56L29.59,18H15.41c-2.27-2.27-1.66-2-3.41-2a4,4,0,0,0-4-4H1a1,1,0,0,0,0,2H4v2H1a1,1,0,0,0-1,1v5c0,.56-.07.34,4.15,4.56A8,8,0,1,0,17.41,35h13.2C33.88,43.1,46,40.77,46,32a7.86,7.86,0,0,0-.47-2.65,5.92,5.92,0,0,0,2.34-5.88A1,1,0,0,0,47.51,22.16ZM45.07,22H42.5a1.5,1.5,0,0,1-.37-2.95C44.94,21.86,44.88,21.78,45.07,22Zm-8.54-9.71C37.12,13.47,37.26,14,38,14a1,1,0,0,0,.89-1.45c-.3-.61-.32-.55-.22-.55,2.26,0,3,3,1.66,3h-6.2A4,4,0,0,1,36.53,12.29ZM27.61,20l-2,2H19.58l-2.09-2ZM6,14H8a2,2,0,0,1,2,2H6ZM4.17,23.76,2.41,22H5.83A3,3,0,0,1,4.17,23.76ZM10,38a6,6,0,1,1,6-6A6,6,0,0,1,10,38Zm7.93-5a7.77,7.77,0,0,0-.19-3c13.87,0,12.53-.05,12.49.11A8,8,0,0,0,30.06,33ZM38,38a6,6,0,1,1,6-6A6,6,0,0,1,38,38Zm6.61-10.47A8,8,0,0,0,31.1,28H16.92A8,8,0,0,0,10,24a9.56,9.56,0,0,0-4.36,1.23A4.94,4.94,0,0,0,8,21a1,1,0,0,0-1-1H2V18H12.59c2.21,2.21.9.94,5.9,5.72.42.4.27.28,7.58.28.65,0,.22.13,7.34-7h6.68c.77.78.61.34-.07,1a3.51,3.51,0,0,0,2.48,6H46A3.87,3.87,0,0,1,44.61,27.53Z\"\n}));\n\nvar SvgAtv = function SvgAtv(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAtv, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ATV.c2e41b1c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"bicycle\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"bicycle\"\n}, /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"17.99 21.27 39.69 26.04 50.71 41.63 33.46 41.63 17.99 21.27\"\n}), /*#__PURE__*/React.createElement(\"polyline\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"28.31 11.26 20.77 11.26 12.51 40.98\"\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 33.46,\n y1: 41.63,\n x2: 43.4,\n y2: 16.55\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 47.34,\n y1: 16.55,\n x2: 39.46,\n y2: 16.55\n}), /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 50.71,\n cy: 41.63,\n r: 10.57\n}), /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 12.51,\n cy: 40.98,\n r: 10.57\n}));\n\nvar SvgBicycle = function SvgBicycle(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icons\",\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBicycle, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/bicycle.feab0856.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"50. Boat\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M47.84,33.45c-.44-.66,1-.49-22.84,0V31H43a1,1,0,0,0,1-1.13l-.64-4.7A32.32,32.32,0,0,0,24.4.08C24.13,0,24.72,0,16,0a1,1,0,0,0-1,1V6a1,1,0,0,0,1,1h6.81L8.16,29.45A1,1,0,0,0,9,31H23v2.52C-.87,34,.52,33.8.13,34.51s-.53.08,7,13c.44.76-1.44.5,33.86.5.9,0,.49.32,6.91-13.58A1,1,0,0,0,47.84,33.45ZM25,6.07a27.31,27.31,0,0,1,0,19.54ZM41.37,25.44,41.85,29H25.67a29.25,29.25,0,0,0,1-24.23l-.7-1.69A30.32,30.32,0,0,1,41.37,25.44ZM17,2h6V5H17Zm6,8.36V29H10.85ZM40.36,46H8.57L2.72,36,45.42,35Z\"\n});\n\nvar SvgBoat = function SvgBoat(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"_50._Boat\",\n \"data-name\": \"50. Boat\",\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBoat, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Boat.4f5c0197.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M132.89 232.56c-27.48,0 -49.83,22.35 -49.83,49.83 0,27.48 22.35,49.83 49.83,49.83 27.48,0 49.83,-22.35 49.83,-49.83 0,-27.48 -22.35,-49.83 -49.83,-49.83zm0 110.74c-33.58,0 -60.91,-27.33 -60.91,-60.91 0,-33.58 27.33,-60.91 60.91,-60.91 33.58,0 60.91,27.33 60.91,60.91 0,33.58 -27.33,60.91 -60.91,60.91z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"188.26,271.32 232.56,271.32 232.56,260.24 188.26,260.24 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"188.26,304.54 232.56,304.54 232.56,293.46 188.26,293.46 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M343.3 282.39l-11.07 0 0 -105.21 -68.91 0 -25.22 40.35 0 42.71 -11.08 0 0 -45.88 30.15 -48.25 75.06 0c6.1,0 11.07,4.97 11.07,11.07l0 105.21z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M121.76 227.81l-10.96 -1.58 10.39 -72.76c0.77,-5.42 5.49,-9.51 10.96,-9.51l22.89 0 0 83.06 -11.08 0 0 -71.98 -11.81 0 -10.39 72.77z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"77.52,193.8 121.82,193.8 121.82,182.72 77.52,182.72 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"77.52,215.95 121.82,215.95 121.82,204.87 77.52,204.87 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M138.43 11.07l0 11.08 177.2 0 -0.02 -11.08 -177.18 0zm177.18 22.15l-177.18 0c-6.11,0 -11.08,-4.96 -11.08,-11.07l0 -11.08c0,-6.1 4.97,-11.07 11.08,-11.07l177.18 0c6.11,0 11.08,4.97 11.08,11.07l0 11.08c0,6.11 -4.97,11.07 -11.08,11.07z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"310.11,172.28 293.5,28.32 304.5,27.05 321.11,171.02 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"287.97,172.28 271.36,28.32 282.35,27.05 298.96,171.02 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"146.48,150.13 135.49,148.87 149.54,27.05 160.54,28.32 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"168.63,150.13 157.63,148.87 171.69,27.05 182.69,28.32 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"149.5,155.04 287.93,155.04 287.93,143.96 149.5,143.96 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"149.5,177.18 238.1,177.18 238.1,166.11 149.5,166.11 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"199.34,199.34 221.48,199.34 221.48,188.26 199.34,188.26 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M337.76 210.41l-55.37 0c-9.16,0 -16.61,-7.45 -16.61,-16.61l0 -22.15 11.07 0 0 22.15c0,3.05 2.49,5.54 5.54,5.54l55.37 0 0 11.07z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"287.93,204.87 299,204.87 299,171.65 287.93,171.65 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"310.08,204.87 321.15,204.87 321.15,171.65 310.08,171.65 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"27.11,318.09 17.19,313.14 44.3,258.94 44.3,193.8 55.37,193.8 55.37,261.55 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M11.07 310.08l35.34 0 25.57 -51.14 0 -87.29 -16.61 0 0 11.07 -11.07 0 0 -24.26 -22.15 -11.07 0 0.8 11.07 22.15 0 69.06 -22.15 44.3 0 26.38zm42.19 11.07l-53.26 0 0 -40.07 22.15 -44.29 0 -63.83 -11.08 -22.15 0 -21.34 44.3 22.15 0 8.95 27.69 0 0 100.98 -29.8 59.6z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M197.89 121.82l58.26 0 -6.47 -66.45 -45.32 0 -6.47 66.45zm70.47 11.07l-82.68 0 8.63 -88.59 65.42 0 8.63 88.59z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"199.34,88.59 254.71,88.59 254.71,77.52 199.34,77.52 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"210.41,110.74 232.56,110.74 232.56,99.67 210.41,99.67 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M282.39 232.56c-27.48,0 -49.83,22.35 -49.83,49.83 0,27.48 22.35,49.83 49.83,49.83 27.48,0 49.84,-22.35 49.84,-49.83 0,-27.48 -22.36,-49.83 -49.84,-49.83zm0 110.74c-33.58,0 -60.91,-27.33 -60.91,-60.91 0,-33.58 27.33,-60.91 60.91,-60.91 33.58,0 60.91,27.33 60.91,60.91 0,33.58 -27.33,60.91 -60.91,60.91z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M132.89 265.78c-9.16,0 -16.61,7.45 -16.61,16.61 0,9.16 7.45,16.61 16.61,16.61 9.16,0 16.61,-7.45 16.61,-16.61 0,-9.16 -7.45,-16.61 -16.61,-16.61zm0 44.3c-15.26,0 -27.69,-12.42 -27.69,-27.69 0,-15.27 12.43,-27.69 27.69,-27.69 15.27,0 27.69,12.42 27.69,27.69 0,15.27 -12.42,27.69 -27.69,27.69z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M282.39 265.78c-9.16,0 -16.61,7.45 -16.61,16.61 0,9.16 7.45,16.61 16.61,16.61 9.16,0 16.61,-7.45 16.61,-16.61 0,-9.16 -7.45,-16.61 -16.61,-16.61zm0 44.3c-15.26,0 -27.68,-12.42 -27.68,-27.69 0,-15.27 12.42,-27.69 27.68,-27.69 15.27,0 27.69,12.42 27.69,27.69 0,15.27 -12.42,27.69 -27.69,27.69z\"\n}));\n\nvar SvgBulldozerWheels = function SvgBulldozerWheels(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"338px\",\n height: \"338px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 343.3 343.3\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBulldozerWheels, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/bulldozerWheels.0334b819.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"bus\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M27.61,12H27V4.53A2.54,2.54,0,0,0,24.47,2H7.53A2.54,2.54,0,0,0,5,4.53V12H4.39A2.39,2.39,0,0,0,2,14.39V17a1,1,0,0,0,1,1H6a1,1,0,0,0,1-1H25v3H22a2.07,2.07,0,0,0-2,2.16V24H12V22.16A2.07,2.07,0,0,0,10,20H6a1,1,0,0,0-1,1v2.47A2.54,2.54,0,0,0,7.53,26H8v1a3,3,0,0,0,6,0V26h4v1a3,3,0,0,0,6,0V26h.47A2.54,2.54,0,0,0,27,23.47V18h2a1,1,0,0,0,1-1V14.39A2.39,2.39,0,0,0,27.61,12ZM4,14.39A.4.4,0,0,1,4.39,14H5v2H4ZM18,15v-.5a1.5,1.5,0,0,1,3,0V15Zm5,0v-.5a3.5,3.5,0,0,0-7,0V15H7V7H22a1,1,0,0,0,0-2H7V4.53A.53.53,0,0,1,7.53,4H24.47a.53.53,0,0,1,.53.53V15ZM7,23.47V22l2.94,0a.25.25,0,0,1,.06.19V24H7.53A.53.53,0,0,1,7,23.47ZM12,27a1,1,0,0,1-2,0V26h2Zm10,0a1,1,0,0,1-2,0V26h2Zm2.47-3H22V22.16c0-.09,0-.15,0-.16h3v1.47A.53.53,0,0,1,24.47,24ZM28,16H27V14h.61a.4.4,0,0,1,.39.39Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M14,20h4a1,1,0,0,0,0-2H14a1,1,0,0,0,0,2Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M14,23h4a1,1,0,0,0,0-2H14a1,1,0,0,0,0,2Z\"\n}));\n\nvar SvgBus = function SvgBus(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBus, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/bus.cd13b938.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"bus\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"bus\"\n}, /*#__PURE__*/React.createElement(\"polyline\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"2.69 35.05 13.26 35.03 13.26 25.19 6.48 25.19\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 47.42,\n cy: 47.01,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 17.34,\n cy: 47.01,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 19.44,\n y: 25.19,\n width: 11.78,\n height: 10.06,\n transform: \"translate(50.67 60.43) rotate(-180)\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 37.03,\n y: 25.19,\n width: 11.78,\n height: 10.06,\n transform: \"translate(85.84 60.43) rotate(-180)\"\n}), /*#__PURE__*/React.createElement(\"polyline\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"60.52 35.25 54.63 35.25 54.63 25.19 60.52 25.19\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M51.5,47h6a3,3,0,0,0,3-3v-22a3,3,0,0,0-3-3H10.68c-1.65,0-2.46,1.28-3,3l-1.2,3.11-3.8,9.87v9a3,3,0,0,0,3,3h7.58\"\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 21.42,\n y1: 47.01,\n x2: 43.34,\n y2: 47.01\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 2.69,\n y1: 41.39,\n x2: 7.3,\n y2: 41.39\n}));\n\nvar SvgBus1 = function SvgBus1(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icons\",\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBus1, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/bus1.7a959334.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"17. Bus\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"_17._Bus\",\n \"data-name\": \"17. Bus\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M48,17a5,5,0,0,0-5-5H3a3,3,0,0,0-3,3V29a3,3,0,0,0,3,3H6.1a5,5,0,0,0,9.8,0H32.1a5,5,0,0,0,9.8,0H45a3,3,0,0,0,3-3C48,28.13,48,32.76,48,17Zm-2,9H45a1,1,0,0,1,0-2h1Zm-.86-11.12A3.76,3.76,0,0,1,46,18H40V14C42.78,14,44,13.75,45.12,14.88ZM33,18V14h5v4ZM13,18V14h6v4Zm8-4h6v4H21ZM11,14v4H6l0-4ZM2,24H3.83A3,3,0,0,1,2,25.83Zm9,10a3,3,0,1,1,3-3A3,3,0,0,1,11,34Zm26,0a3,3,0,1,1,3-3A3,3,0,0,1,37,34Zm8-4H41.9a5,5,0,0,0-9.8,0H15.9a5,5,0,0,0-9.8,0H3a1,1,0,0,1-1-1V27.9C5.91,27.1,7.08,22,5,22H2V15a1,1,0,0,1,1-1H4l0,4a2,2,0,0,0,2,2H28a1,1,0,0,0,1-1V14h2v5a1,1,0,0,0,1,1H46v2H45a3,3,0,0,0,0,6h1v1A1,1,0,0,1,45,30Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M37.68,30.29A1,1,0,1,0,37,32,1,1,0,0,0,37.68,30.29Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M11.68,30.29a1,1,0,1,0,0,1.42A1,1,0,0,0,11.68,30.29Z\"\n}));\n\nvar SvgBus2 = function SvgBus2(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBus2, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Bus2.013c5c32.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M368.88 615.908l1310.24 0c31.0725,0 59.2985,12.6957 79.7398,33.137 20.4473,20.4473 33.1406,48.6804 33.1406,79.7434l0 461.018c0,31.063 -12.698,59.2926 -33.1441,79.7363 -18.9626,18.965 -44.6244,31.2614 -73.0323,32.9433 0.453544,-5.17087 0.686221,-10.3843 0.686221,-15.6248 0,-47.1355 -18.5882,-91.9961 -51.913,-125.32 -33.3236,-33.3236 -78.1831,-51.9119 -125.319,-51.9119 -47.1343,0 -91.9961,18.5894 -125.32,51.9119 -33.3225,33.3236 -51.9119,78.1855 -51.9119,125.32 0,5.30906 0.238583,10.5886 0.703938,15.8256l-617.503 0c0.465355,-5.23701 0.703938,-10.5165 0.703938,-15.8256 0,-47.1343 -18.5894,-91.9961 -51.9119,-125.32 -33.3236,-33.3225 -78.1855,-51.9119 -125.32,-51.9119 -47.1355,0 -91.995,18.5882 -125.319,51.9119 -21.6803,21.6792 -37.1209,48.2433 -45.2658,77.1379 -0.375591,1.33228 -0.735827,2.67047 -1.07953,4.01221 -3.66851,14.2902 -5.56772,29.113 -5.56772,44.1697 0,5.24056 0.232677,10.4539 0.686221,15.6248 -28.4079,-1.68189 -54.0721,-13.9736 -73.0382,-32.9398 -20.4414,-20.4414 -33.137,-48.6674 -33.137,-79.7398l0 -461.018c0,-31.076 12.6898,-59.3044 33.1335,-79.7469 20.4425,-20.4437 48.6709,-33.1335 79.7469,-33.1335zm1359.12 525.019l0 -64.0016 -84.6698 0c-17.6728,0 -32.0008,14.328 -32.0008,32.0008 0,17.6728 14.328,32.0008 32.0008,32.0008l84.6698 0zm0 -141.911l0 -270.228 -1408 0 0 270.228 1408 0z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"288,721.046 1760,721.046 1760,785.047 288,785.047 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"288,947.514 1760,947.514 1760,1011.52 288,1011.52 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"515.981,753.047 515.981,979.515 451.98,979.515 451.98,753.047 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"708.223,753.047 708.223,979.515 644.221,979.515 644.221,753.047 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"900.463,753.047 900.463,979.515 836.461,979.515 836.461,753.047 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1092.7,753.047 1092.7,979.515 1028.7,979.515 1028.7,753.047 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1284.94,753.047 1284.94,979.515 1220.94,979.515 1220.94,753.047 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1477.19,753.047 1477.19,979.515 1413.18,979.515 1413.18,753.047 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1509.28 1141.63c40.1008,0 76.4091,16.2579 102.692,42.5398 26.2831,26.2831 42.5398,62.5926 42.5398,102.692 0,40.1008 -16.2567,76.4091 -42.5398,102.692 -26.2831,26.2831 -62.5914,42.5398 -102.692,42.5398 -40.1008,0 -76.4091,-16.2567 -102.692,-42.5398 -26.2831,-26.2831 -42.5398,-62.5914 -42.5398,-102.692 0,-40.0985 16.2579,-76.4091 42.5398,-102.692 26.2831,-26.2819 62.5937,-42.5398 102.692,-42.5398z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M538.72 1141.63c40.0985,0 76.4091,16.2579 102.692,42.5398 26.2819,26.2831 42.5398,62.5937 42.5398,102.692 0,40.1008 -16.2567,76.4091 -42.5398,102.692 -26.2831,26.2831 -62.5914,42.5398 -102.692,42.5398 -40.1008,0 -76.4091,-16.2567 -102.692,-42.5398 -26.2831,-26.2831 -42.5398,-62.5914 -42.5398,-102.692 0,-40.0996 16.2567,-76.4091 42.5398,-102.692 26.2831,-26.2819 62.5914,-42.5398 102.692,-42.5398z\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgBus3 = function SvgBus3(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgBus3, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Bus3.f6652434.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1072,272 1072,623.998 976,623.998 976,272 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"336,239.999 1712,239.999 1712,335.999 336,335.999 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1664 797.471c0,-60.9378 -24.9071,-116.315 -65.0327,-156.441 -40.1256,-40.1256 -95.5028,-65.0327 -156.441,-65.0327l-370.529 0 -96.0001 0 -370.527 0c-60.9378,0 -116.315,24.9071 -156.441,65.0327 -40.1256,40.1256 -65.0327,95.5028 -65.0327,156.441l0 773.056c0,60.9378 24.9071,116.315 65.0327,156.441 40.1256,40.1256 95.5028,65.0327 156.441,65.0327l837.056 0c60.9378,0 116.315,-24.9071 156.441,-65.0327 40.1256,-40.1256 65.0327,-95.5028 65.0327,-156.441l0 -773.056zm-608.001 34.5284l470.738 0c20.1142,0 38.4237,8.25119 51.717,21.5445 13.2933,13.2933 21.5445,31.6028 21.5457,51.717l-0.0011811 429.476c0,20.1142 -8.25119,38.4237 -21.5445,51.717 -13.2933,13.2933 -31.6028,21.5445 -51.717,21.5445l-470.738 0 0 -575.999zm-534.74 0l470.738 0 0 575.999 -470.738 0c-20.1142,0 -38.4237,-8.25119 -51.717,-21.5445 -13.2012,-13.2012 -21.4299,-31.35 -21.5433,-51.3l0 -0.0779528 0 -430.154 0 -0.0779528c0.113386,-19.95 8.34213,-38.0988 21.5433,-51.3 13.2933,-13.2933 31.6028,-21.5445 51.717,-21.5445z\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgCableCar = function SvgCableCar(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCableCar, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/CableCar.e69c3c7b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"6. Cabriolet car\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"_6._Cabriolet_car\",\n \"data-name\": \"6. Cabriolet car\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M36.71,29.29a1,1,0,0,0-1.42,1.42A1,1,0,0,0,36.71,29.29Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M12.38,29.08a1,1,0,0,0-1.09,1.63C12.47,31.83,13.85,29.65,12.38,29.08Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M25,23H23a1,1,0,0,0,0,2h2A1,1,0,0,0,25,23Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M43.82,20.46l-8.38-1.4c-3.44-2.95-4.95-4.57-8.19-5.53a1,1,0,0,0-.56,1.92c2.55.76,3.79,2,5.61,3.55H22V17a1,1,0,0,0-2,0v2H13V18a1,1,0,0,0-2,0v1H2a1,1,0,0,0-.53,1.83C-.16,24.11,0,23.52,0,27a4,4,0,0,0,4,4H7.1a5,5,0,0,0,9.8,0H31.1a5,5,0,0,0,9.8,0H44a4,4,0,0,0,4-4V25.39A5,5,0,0,0,43.82,20.46ZM12,33a3,3,0,1,1,3-3A3,3,0,0,1,12,33Zm24,0a3,3,0,1,1,3-3A3,3,0,0,1,36,33Zm8-4H40.9a5,5,0,0,0-9.8,0H16.9a5,5,0,0,0-9.8,0H4a2,2,0,0,1-2-2c0-1.88-.1-2.54.31-3.37C3.42,21.41,3.46,21,4.24,21c36.12,0,28.32-.39,39.25,1.43A3,3,0,0,1,46,25H45a1,1,0,0,0,0,2h1A2,2,0,0,1,44,29Z\"\n}));\n\nvar SvgCabrioletCar = function SvgCabrioletCar(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCabrioletCar, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/CabrioletCar.cd1e339e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"camper\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M29.36,14.82,24.5,8.34A3.33,3.33,0,0,0,21.83,7H4.41A2.41,2.41,0,0,0,2,9.41V11a1,1,0,0,0,2,0V9.41A.42.42,0,0,1,4.41,9H21.83a1.33,1.33,0,0,1,1.07.54l.35.46H16a1,1,0,0,0-1,1v6a1,1,0,0,0,1,1h9a1,1,0,0,0,0-2H17V12h7.75l3,4a1.13,1.13,0,0,1,.24.71v6.55a.73.73,0,0,1-.72.72h-.63a3.48,3.48,0,0,0-6.3,0h-8.7a3.48,3.48,0,0,0-6.3,0H4.72A.73.73,0,0,1,4,23.28V15a1,1,0,0,0-2,0v8.28A2.72,2.72,0,0,0,4.72,26h.33A3.48,3.48,0,0,0,12,26h8.1A3.48,3.48,0,0,0,27,26h.33A2.72,2.72,0,0,0,30,23.28V16.73A3.18,3.18,0,0,0,29.36,14.82ZM8.5,27A1.5,1.5,0,0,1,7,25.5a1.53,1.53,0,0,1,0-.3A1.5,1.5,0,1,1,8.5,27Zm15,0A1.5,1.5,0,0,1,22,25.5a1.45,1.45,0,0,1,0-.3A1.5,1.5,0,1,1,23.5,27Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M13,18a1,1,0,0,0,1-1V11a1,1,0,0,0-1-1H6a1,1,0,0,0-1,1v6a1,1,0,0,0,1,1ZM7,12h5v4H7Z\"\n}));\n\nvar SvgCamper = function SvgCamper(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCamper, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/camper.741751e2.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \".cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px;}\"));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"title\", null, \"car_1\");\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"car_1\"\n}, /*#__PURE__*/React.createElement(\"line\", {\n className: \"cls-1\",\n x1: 2.43,\n y1: 33.45,\n x2: 7.03,\n y2: 33.45\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n className: \"cls-1\",\n cx: 48.03,\n cy: 41.64,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n className: \"cls-1\",\n cx: 13.89,\n cy: 41.64,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"line\", {\n className: \"cls-1\",\n x1: 17.97,\n y1: 41.64,\n x2: 43.94,\n y2: 41.64\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M52.11,41.64h5.73A2.82,2.82,0,0,0,60.79,39V29.92a3.51,3.51,0,0,0-1-2.42l-8.46-8a3.12,3.12,0,0,0-2.28-1H27.51a3.63,3.63,0,0,0-2.87,1.41L18,28.56\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M44.83,18.51,50,27.26a.78.78,0,0,1-.57,1.31l-34.89,0H5.82a3.4,3.4,0,0,0-3.39,3.4v7c0,1.47,1.47,2.66,3.28,2.66H9.8\"\n}), /*#__PURE__*/React.createElement(\"line\", {\n className: \"cls-1\",\n x1: 32.61,\n y1: 18.53,\n x2: 32.61,\n y2: 28.56\n}));\n\nvar SvgCar1 = function SvgCar1(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icons\",\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), _ref2, title === undefined ? _ref3 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref4);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCar1, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/car_1.afe9e837.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"car_2\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"car_2\"\n}, /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 2.54,\n y1: 33.44,\n x2: 7.15,\n y2: 33.44\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 48.14,\n cy: 41.63,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 14,\n cy: 41.63,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 18.08,\n y1: 41.63,\n x2: 44.05,\n y2: 41.63\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M9.91,41.63H5.82C4,41.63,2.54,40.44,2.54,39v-7a3.4,3.4,0,0,1,3.4-3.4h7.44a3.35,3.35,0,0,0,2.25-.86l9.07-8.12a4,4,0,0,1,2.68-1H46.1a2.2,2.2,0,0,1,1.86,1l4.87,7.8A2.51,2.51,0,0,0,55,28.53h3.74a2.09,2.09,0,0,1,2.19,2V39A2.81,2.81,0,0,1,58,41.63H52.22\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M13.4,28.53H44.5a1.27,1.27,0,0,0,1.11-1.85l-4.17-8.17\"\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 33.56,\n y1: 18.52,\n x2: 33.56,\n y2: 28.53\n}));\n\nvar SvgCar2 = function SvgCar2(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icons\",\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCar2, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/car_2.43db3a31.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"car_3\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"car_3\"\n}, /*#__PURE__*/React.createElement(\"polyline\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"57.06 33.05 60.49 33.05 60.49 25.01 57.06 25.01\"\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 2.43,\n y1: 33.94,\n x2: 7.03,\n y2: 33.94\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 45.41,\n cy: 42.13,\n rx: 3.73,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 13.89,\n cy: 42.13,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 17.97,\n y1: 42.13,\n x2: 41.68,\n y2: 42.13\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M49.14,42.13h5.5a2.55,2.55,0,0,0,2.42-2.66V20.85A2.83,2.83,0,0,0,54.24,18h-26a3.24,3.24,0,0,0-2.7,1.4l-1.88,2.77L19,29H51.48a1.27,1.27,0,0,0,1.31-1.23V23.42a1.27,1.27,0,0,0-1.31-1.23H23.63\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M19.14,29H5.82a3.4,3.4,0,0,0-3.39,3.4v7c0,1.47,1.47,2.66,3.28,2.66H9.8\"\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 45.08,\n y1: 22.19,\n x2: 45.08,\n y2: 29.03\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 33.12,\n y1: 22.19,\n x2: 33.12,\n y2: 29.03\n}));\n\nvar SvgCar3 = function SvgCar3(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icons\",\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCar3, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/car_3.a5735602.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"car_4\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"car_4\"\n}, /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 2.43,\n y1: 33.94,\n x2: 7.03,\n y2: 33.94\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 48.03,\n cy: 42.13,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n cx: 13.89,\n cy: 42.13,\n rx: 4.08,\n ry: 3.85\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x1: 17.97,\n y1: 42.13,\n x2: 43.94,\n y2: 42.13\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M52.11,42.13h5.73a2.82,2.82,0,0,0,2.95-2.66V31a2.09,2.09,0,0,0-2.19-2H34.45V19.24A1.22,1.22,0,0,0,33.23,18h-7.5a4.25,4.25,0,0,0-3.28,1.4l-2.28,2.77L14.55,29H28a1.44,1.44,0,0,0,1.59-1.23V23.42A1.44,1.44,0,0,0,28,22.19H20.14\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M14.55,29H5.82a3.4,3.4,0,0,0-3.39,3.4v7c0,1.47,1.47,2.66,3.28,2.66H9.8\"\n}));\n\nvar SvgCar4 = function SvgCar4(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icons\",\n viewBox: \"0 0 64 64\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCar4, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/car_4.cfd6e8c2.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"car\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M19,18H13a1,1,0,0,0,0,2h6a1,1,0,0,0,0-2Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M19,21H13a1,1,0,0,0,0,2h6a1,1,0,0,0,0-2Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M29,20H24.34A2.34,2.34,0,0,0,22,22.34V24H10V22.34A2.34,2.34,0,0,0,7.66,20H4V18.1A1.1,1.1,0,0,1,5.1,17H26.9a1.1,1.1,0,0,1,.94.52,1,1,0,1,0,1.7-1A3.12,3.12,0,0,0,29,15.8s0,0,0-.06L26.53,6.8A3.81,3.81,0,0,0,22.86,4H9.14A3.81,3.81,0,0,0,5.47,6.8L4.13,11.74A1,1,0,0,0,4.83,13a1,1,0,0,0,1.23-.7L7.4,7.32A1.81,1.81,0,0,1,9.14,6H22.86A1.81,1.81,0,0,1,24.6,7.32L26.69,15H25a4,4,0,0,0-8,0H5.1A3.1,3.1,0,0,0,2,18.1v4.8A3.09,3.09,0,0,0,5,26v.51a3.5,3.5,0,0,0,7,0V26h8v.5a3.5,3.5,0,0,0,7,0V26a3.09,3.09,0,0,0,3-3.09V21A1,1,0,0,0,29,20Zm-8-7a2,2,0,0,1,2,2H19A2,2,0,0,1,21,13Zm3,9.34a.34.34,0,0,1,.34-.34H28v.52A1.48,1.48,0,0,1,26.52,24H24ZM7.66,22a.34.34,0,0,1,.34.34V24H5.48A1.48,1.48,0,0,1,4,22.52V22ZM10,26.5a1.5,1.5,0,0,1-3,0V26h3ZM23.5,28A1.5,1.5,0,0,1,22,26.5V26h3v.5A1.5,1.5,0,0,1,23.5,28Z\"\n}));\n\nvar SvgCar = function SvgCar(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCar, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/car.fc86c818.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1254.24 1244.51l-433.094 0c-3.86103,-44.1626 -23.054,-85.5355 -54.6898,-117.173 -35.5736,-35.5725 -83.4556,-55.4138 -133.773,-55.4138 -50.3174,0 -98.1993,19.8402 -133.773,55.415 -31.1327,31.1327 -50.2146,71.6906 -54.4937,115.06 -139.675,-13.5473 -182.608,-90.8292 -182.608,-188.582 0,-79.9075 32.2087,-171.97 59.5146,-250.018 5.93032,-16.9512 11.6126,-33.1925 17.361,-50.726 9.81969,-29.954 23.061,-59.0126 42.4985,-81.4701 22.0311,-25.4563 50.7626,-41.9079 89.1296,-41.9079l702.175 0 16.2496 4.50118 480.452 283.503c7.85079,4.63111 15.8504,8.95512 23.7142,13.2047 48.6213,26.2725 93.2894,50.4118 93.2894,115.546l0 64.8095c0,36.6697 -14.987,69.9922 -39.124,94.128 -24.1382,24.1382 -57.4595,39.124 -94.1292,39.124l-21.7736 0c-3.86103,-44.1626 -23.0528,-85.5355 -54.691,-117.173 -35.5736,-35.5725 -83.4544,-55.4138 -133.772,-55.4138 -50.3185,0 -98.1993,19.8402 -133.773,55.415 -31.637,31.637 -50.8288,73.0075 -54.6898,117.171zm445.774 -190.07c17.6728,0 32.0008,-14.328 32.0008,-32.0008 0,-17.6728 -14.328,-32.0008 -32.0008,-32.0008l-121.634 0c-17.6728,0 -32.0008,14.328 -32.0008,32.0008 0,17.6728 14.328,32.0008 32.0008,32.0008l121.634 0zm-1338.82 -170.156l1148.51 13.4847 -345.845 -204.073 -693.553 0c-17.3232,0 -30.5469,7.71733 -40.8792,19.6559 -12.9272,14.9362 -22.4705,36.5103 -29.9977,59.4709 -4.80355,14.6528 -11.1898,32.9032 -17.8618,51.9756 -6.68504,19.1091 -13.6843,39.1146 -20.3764,59.4863z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M632.684 1103.93c43.4008,0 82.6985,17.5961 111.145,46.0418 28.4457,28.4469 46.0418,67.7445 46.0418,111.145 0,43.402 -17.5949,82.6997 -46.0418,111.147 -28.4469,28.4457 -67.7434,46.0418 -111.145,46.0418 -43.4032,0 -82.7009,-17.5961 -111.145,-46.0418 -28.4469,-28.4469 -46.0418,-67.7445 -46.0418,-111.147 0,-43.402 17.5949,-82.6985 46.0418,-111.145 28.4445,-28.4457 67.7422,-46.0418 111.145,-46.0418z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1442.7 1103.93c43.402,0 82.6985,17.5961 111.145,46.0418 28.4469,28.4469 46.0418,67.7445 46.0418,111.145 0,43.402 -17.5949,82.6997 -46.0418,111.147 -28.4469,28.4457 -67.7434,46.0418 -111.145,46.0418 -43.4032,0 -82.6997,-17.5949 -111.145,-46.0418 -28.4469,-28.4469 -46.0418,-67.7445 -46.0418,-111.147 0,-43.402 17.5949,-82.6985 46.0418,-111.145 28.4457,-28.4469 67.7422,-46.0418 111.145,-46.0418z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"328.56,854.479 1546.11,854.479 1546.11,918.48 328.56,918.48 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1049.08,661.698 1049.08,886.479 985.076,886.479 985.076,661.698 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"789.873,661.698 789.873,886.479 725.872,886.479 725.872,661.698 \"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgCargoShip = function SvgCargoShip(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCargoShip, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/CargoShip.5097854b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"_225717664\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225511648\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 470.557,\n y: 938.713,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225511816\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 720.463,\n y: 938.713,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225511792\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 970.369,\n y: 938.713,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225511552\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 470.557,\n y: 688.807,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225721288\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 720.463,\n y: 688.807,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225707920\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 1220.27,\n y: 938.713,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225701488\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 970.369,\n y: 688.807,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225726160\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 470.557,\n y: 438.902,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"_225719392\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n x: 720.463,\n y: 438.902,\n width: 218.172,\n height: 218.172,\n rx: 27.7677,\n ry: 27.7677\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225717256\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1749.91 1188.62l-1451.82 0 -42.091 0 11.7201 40.5355 79.3335 274.37c8.47914,29.3256 24.15,56.9327 47.8205,76.656 21.3851,17.8205 48.5091,28.9181 81.7194,28.9181l1094.81 0c33.2055,0 60.3331,-11.1 81.717,-28.9205 23.6717,-19.7268 39.3461,-47.3363 47.8229,-76.6536l79.3335 -274.37 11.7201 -40.5355 -42.091 0zm-174.926 147.442c0,-19.6618 15.939,-35.5996 35.6008,-35.5996 19.6618,0 35.6008,15.9378 35.6008,35.5996 0,19.663 -15.939,35.6008 -35.6008,35.6008 -19.6618,0 -35.6008,-15.9378 -35.6008,-35.6008zm-117.317 0c0,-19.6618 15.939,-35.5996 35.6008,-35.5996 19.6618,0 35.6008,15.9378 35.6008,35.5996 0,19.663 -15.939,35.6008 -35.6008,35.6008 -19.6618,0 -35.6008,-15.9378 -35.6008,-35.6008zm-117.317 0c0,-19.6618 15.939,-35.5996 35.5996,-35.5996 19.663,0 35.602,15.9378 35.602,35.5996 0,19.663 -15.939,35.6008 -35.602,35.6008 -19.6606,0 -35.5996,-15.9378 -35.5996,-35.6008zm-117.317 0c0,-19.6618 15.939,-35.5996 35.5996,-35.5996 19.663,0 35.602,15.9378 35.602,35.5996 0,19.663 -15.939,35.6008 -35.602,35.6008 -19.6606,0 -35.5996,-15.9378 -35.5996,-35.6008zm-117.317 0c0,-19.6618 15.9378,-35.5996 35.5996,-35.5996 19.663,0 35.602,15.9378 35.602,35.5996 0,19.663 -15.939,35.6008 -35.602,35.6008 -19.6618,0 -35.5996,-15.9378 -35.5996,-35.6008zm-117.318 0c0,-19.6618 15.9378,-35.5996 35.6008,-35.5996 19.663,0 35.6008,15.9378 35.6008,35.5996 0,19.663 -15.9378,35.6008 -35.6008,35.6008 -19.663,0 -35.6008,-15.9378 -35.6008,-35.6008zm-117.318 0c0,-19.6618 15.939,-35.5996 35.602,-35.5996 19.6618,0 35.5996,15.9378 35.5996,35.5996 0,19.663 -15.9378,35.6008 -35.5996,35.6008 -19.663,0 -35.602,-15.9378 -35.602,-35.6008zm-81.7146 -35.5996c19.6606,0 35.5996,15.9378 35.5996,35.5996 0,19.663 -15.939,35.6008 -35.5996,35.6008 -19.663,0 -35.602,-15.9378 -35.602,-35.6008 0,-19.6618 15.939,-35.5996 35.602,-35.5996zm-117.317 0c19.6606,0 35.5996,15.9378 35.5996,35.5996 0,19.663 -15.939,35.6008 -35.5996,35.6008 -19.663,0 -35.602,-15.9378 -35.602,-35.6008 0,-19.6618 15.939,-35.5996 35.602,-35.5996zm-117.318 0c19.6618,0 35.6008,15.9378 35.6008,35.5996 0,19.663 -15.939,35.6008 -35.6008,35.6008 -19.6618,0 -35.6008,-15.9378 -35.6008,-35.6008 0,-19.6618 15.939,-35.5996 35.6008,-35.5996zm-117.317 0c19.6618,0 35.6008,15.9378 35.6008,35.5996 0,19.663 -15.939,35.6008 -35.6008,35.6008 -19.6618,0 -35.6008,-15.9378 -35.6008,-35.6008 0,-19.6618 15.939,-35.5996 35.6008,-35.5996z\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgCargoShip1 = function SvgCargoShip1(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCargoShip1, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/CargoShip1.5ca6fa44.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"5. Coupe car\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"_5._Coupe_car\",\n \"data-name\": \"5. Coupe car\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M36.71,29.29a1,1,0,0,0-1.42,1.42A1,1,0,0,0,36.71,29.29Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M11.29,29.29A1,1,0,0,0,12,31a1,1,0,0,0,1-.8A1,1,0,0,0,11.29,29.29Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M25,23H23a1,1,0,0,0,0,2h2A1,1,0,0,0,25,23Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M43.82,20.46l-8.38-1.4c-4.8-4.11-7.21-7.25-17.69-5.75-3.31.47-4.72.54-6.81,1.68C2.76,19.45,1.37,19.73.55,22.18-.1,24.12,0,23.64,0,27a4,4,0,0,0,4,4H7.1a5,5,0,0,0,9.8,0H31.1a5,5,0,0,0,9.8,0H44a4,4,0,0,0,4-4V25.39A5,5,0,0,0,43.82,20.46ZM23.56,15c4.27,0,6.61,2.18,8.74,4H13.87l2.29-3.44A35.4,35.4,0,0,1,23.56,15ZM2.39,23c.72,0,1-.05,1.32.31A1,1,0,0,1,3,25H2A4.2,4.2,0,0,1,2.39,23ZM12,33a3,3,0,1,1,3-3A3,3,0,0,1,12,33Zm24,0a3,3,0,1,1,3-3A3,3,0,0,1,36,33Zm8-4H40.9a5,5,0,0,0-9.8,0H16.9a5,5,0,0,0-9.8,0H4a2,2,0,0,1-2-2H3a3,3,0,0,0,.84-5.87c.11-.05,8.31-4.63,9.57-5l-1.2,1.8A2,2,0,0,0,13.87,21c25.26,0,18.82-.37,29.62,1.43A3,3,0,0,1,46,25H45a1,1,0,0,0,0,2h1A2,2,0,0,1,44,29Z\"\n}));\n\nvar SvgCoupeCar = function SvgCoupeCar(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCoupeCar, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/CoupeCar.2cf6def1.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"crane\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M28.58,14.81l-1.7-.56-.51-2.9A4.18,4.18,0,0,0,22.09,8H19.75A1.7,1.7,0,0,0,18,9.65V21H10a3.48,3.48,0,0,0-4.9,0H5L4,21l0-3H15a1,1,0,0,0,0-2h-.88L15,8.11a1,1,0,0,0-.5-1l-9-5-.06,0-.13,0L5.07,2H4.93l-.23.05-.13,0a.85.85,0,0,0-.19.14l-.1.07,0,0a1.09,1.09,0,0,0-.14.23l0,.06A1.05,1.05,0,0,0,4,3v8A1,1,0,0,0,4.66,12a.5.5,0,0,1,.32.63.53.53,0,0,1-.25.29.51.51,0,0,1-.38,0A.47.47,0,0,1,4,12.62a1,1,0,0,0-1.94.51,2.48,2.48,0,0,0,1.64,1.73,2.38,2.38,0,0,0,.79.13A2.49,2.49,0,0,0,6,10.5V6.12L9,10.26,8.13,16H4a2,2,0,0,0-2,2V21a2,2,0,0,0,2,2h.08a4,4,0,0,0,0,.5,3.5,3.5,0,0,0,7,0A4,4,0,0,0,11,23h8.93a2.73,2.73,0,0,0-.05.5,3.6,3.6,0,0,0,6.44,2.11A3.38,3.38,0,0,0,27,23.5a4,4,0,0,0,0-.5H28a2,2,0,0,0,2-2V16.76A2.05,2.05,0,0,0,28.58,14.81ZM10.81,9.42,8.39,6l4.54,2.52L12.1,16H10.15L11,10.14A1,1,0,0,0,10.81,9.42ZM22.09,10a2.23,2.23,0,0,1,2.31,1.69L24.81,14H20V10ZM7.5,25A1.5,1.5,0,1,1,9,23.5,1.5,1.5,0,0,1,7.5,25Zm17.19-.61a1.6,1.6,0,0,1-1.28.61,1.5,1.5,0,1,1,0-3,1.6,1.6,0,0,1,1.28.61,1.43,1.43,0,0,1,0,1.78ZM26,21H25.9a3.56,3.56,0,0,0-2.49-1,3.65,3.65,0,0,0-2.52,1H20V16h5.79l2.21.76L28,21Z\"\n}));\n\nvar SvgCrane = function SvgCrane(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCrane, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/crane.638beab1.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M336.969 945.103l1098.19 0c24.9378,0 47.6339,10.1551 64.0583,26.5713 16.4327,16.4162 26.6008,39.0945 26.6008,64.0205l0 226.884c0,25.0453 -10.1681,47.7225 -26.6008,64.1351 -16.4244,16.4197 -39.1205,26.5795 -64.0583,26.5795l-14.0043 0c-11.0563,-43.6087 -33.7335,-83.7237 -66.2138,-116.182 -47.3504,-47.3185 -111.093,-73.7316 -178.048,-73.7316 -66.991,0 -130.746,26.4083 -178.155,73.715 -32.511,32.4402 -55.1268,72.5764 -66.1418,116.198l-161.539 0c-11.0551,-43.6087 -33.7311,-83.7237 -66.2138,-116.183 -47.354,-47.3185 -111.091,-73.7304 -178.049,-73.7304 -66.991,0 -130.74,26.4095 -178.149,73.7138 -28.2461,28.1858 -49.0241,62.178 -61.2154,99.2186 -2.69646,-2.09291 -5.25827,-4.35118 -7.6689,-6.76064 -14.6599,-14.6492 -23.7614,-34.8437 -23.7614,-57.1689l0 -246.375c0,-22.324 9.10158,-42.5233 23.7614,-57.1678 14.6516,-14.6457 34.8673,-23.7366 57.2079,-23.7366l0 -0.0011811z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1296.39 996.714c-7.20709,-9.32835 -19.7398,-26.3386 -36.1689,-48.6579 -63.117,-85.5142 -185.693,-251.932 -189.591,-251.932l-738.745 0c-2.60197,0 -5.20394,1.41851 -7.21418,3.54331 -2.83347,3.18898 -4.60866,7.91457 -4.60866,13.3465l0 295.393 -64.0642 0 0 -295.393c0,-21.4973 8.15316,-41.2193 21.1583,-55.7481 13.9476,-15.5906 33.3319,-25.1575 54.7288,-25.1575l738.745 0c36.0473,0 171.504,183.781 241.126,278.269 17.2559,23.387 30.3744,41.1036 34.9878,47.0055l-50.354 39.3307z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"727.26,664.117 727.26,977.11 663.2,977.11 663.2,664.117 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1480.55 413.015l208.976 0c26.1236,0 49.7622,10.6287 66.9001,27.7559 17.1414,17.1236 27.776,40.7469 27.776,66.8504 0,26.1012 -10.6347,49.7256 -27.776,66.8493 -17.1378,17.1272 -40.7776,27.7559 -66.9001,27.7559l-208.976 0 0 -189.212zm-1106.35 0l1074.79 0 0 189.212 -1074.79 0c-26.1213,0 -49.7622,-10.6287 -66.9024,-27.7559 -17.1343,-17.1248 -27.776,-40.7469 -27.776,-66.8493 0,-26.1036 10.6417,-49.7268 27.776,-66.8504 17.1402,-17.1284 40.7811,-27.7559 66.9024,-27.7559l0 0z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1698.15,590.533 1698.15,1053.06 1634.09,1053.06 1634.09,590.533 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1792 1128.29c-6.38504,23.9729 -20.5666,44.4071 -39.4748,58.9347 -18.7937,14.4095 -42.0839,22.7929 -67.0229,22.7929 -30.4925,0 -58.0371,-12.398 -78.0119,-32.3575 -19.9748,-19.9666 -32.2677,-47.4804 -32.2677,-77.9564 0.0011811,-30.3532 12.2929,-57.991 32.2677,-77.9528 19.9748,-19.9583 47.5193,-32.2418 78.0119,-32.2418l0 64.0158c-12.763,0 -24.3484,5.19567 -32.7449,13.4599 -8.39056,8.39174 -13.4728,19.963 -13.4728,32.7189 0.0011811,12.7595 5.08229,24.3319 13.4728,32.7177 8.39764,8.38465 19.9807,13.5827 32.7449,13.5827 10.5213,0 20.4508,-3.54095 28.2484,-9.56694 7.92048,-6.02599 13.8307,-14.5276 16.5473,-24.6862l44.9185 -35.4343 16.7835 51.9733z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"695.938,601.518 695.938,653.134 631.874,653.134 631.874,601.518 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"977.726,601.518 977.726,653.134 913.781,653.134 913.781,601.518 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M593.695 1482.03c-17.139,17.1295 -40.7764,27.7559 -66.9001,27.7559 -26.1213,0 -49.878,-10.6264 -67.0182,-27.7559 -17.0244,-17.0055 -27.6567,-40.7469 -27.6567,-66.8445 0,-26.1071 10.6323,-49.7256 27.6567,-66.854 17.1402,-17.126 40.8957,-27.7559 67.0182,-27.7559 26.1236,0 49.7611,10.6299 66.9001,27.7559 17.1402,17.1272 27.7807,40.7469 27.7807,66.854 0,26.0977 -10.6406,49.839 -27.7807,66.8445zm88.5296 -222.282c-39.7134,-39.6851 -94.6725,-64.3666 -155.43,-64.3666 -60.7548,0 -115.719,24.6815 -155.547,64.3666 -39.8386,39.8067 -64.4245,94.7233 -64.4245,155.438 0,60.7052 24.5858,115.626 64.4245,155.428 39.828,39.8079 94.7918,64.3713 155.547,64.3713 60.7571,0 115.716,-24.5634 155.43,-64.3713 39.8374,-39.802 64.539,-94.7233 64.539,-155.428 0,-60.7146 -24.7016,-115.631 -64.539,-155.438z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M526.794 1384.59c-8.50867,0 -16.1929,3.4252 -21.6284,8.97875 -5.55945,5.54882 -8.98583,13.2236 -8.98583,21.6154 0,8.5004 3.42638,16.0571 8.98583,21.6106 5.43544,5.54882 13.1197,8.97875 21.6284,8.97875 8.39174,0 16.076,-3.42874 21.6319,-8.97875 5.55473,-5.55355 8.98111,-13.1102 8.98111,-21.6106 0,-8.39174 -3.42638,-16.0665 -8.98111,-21.6154 -5.55591,-5.55355 -13.2402,-8.97875 -21.6319,-8.97875z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1176.89 1384.59c-8.51457,0 -16.1941,3.4252 -21.6343,8.97875 -5.55355,5.54882 -8.98111,13.2236 -8.98111,21.6154 0,8.5004 3.42756,16.0571 8.98111,21.6106 5.44016,5.54882 13.1197,8.97875 21.6343,8.97875 8.39056,0 16.0701,-3.42874 21.6284,-8.97875 5.55827,-5.55355 8.98465,-13.1102 8.98465,-21.6106 0.0011811,-8.39174 -3.42756,-16.0665 -8.98465,-21.6154 -5.55827,-5.55355 -13.2378,-8.97875 -21.6284,-8.97875z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1243.79 1482.03c-17.1378,17.1295 -40.7811,27.7559 -66.9001,27.7559 -26.1248,0 -49.8815,-10.6264 -67.0241,-27.7559 -17.0197,-17.0055 -27.6544,-40.7469 -27.6544,-66.8445 0,-26.1071 10.6347,-49.7256 27.6544,-66.854 17.1425,-17.126 40.8992,-27.7559 67.0241,-27.7559 26.1189,0 49.7622,10.6299 66.9001,27.7559 17.1425,17.1272 27.776,40.7469 27.776,66.854 0.0011811,26.0977 -10.6347,49.839 -27.776,66.8445zm88.5284 -222.282c-39.7134,-39.6851 -94.6772,-64.3666 -155.428,-64.3666 -60.7536,0 -115.721,24.6815 -155.552,64.3666 -39.8327,39.8067 -64.4174,94.7233 -64.4174,155.438 0,60.7052 24.5847,115.626 64.4174,155.428 39.8327,39.8079 94.7989,64.3713 155.552,64.3713 60.7524,0 115.714,-24.5634 155.428,-64.3713 39.8339,-39.802 64.5402,-94.7233 64.5402,-155.428 0,-60.7146 -24.7075,-115.631 -64.5402,-155.438z\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgCrane1 = function SvgCrane1(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCrane1, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Crane1.1821c4ed.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"12. Crossover car\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"_12._Crossover_car\",\n \"data-name\": \"12. Crossover car\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M48,25.76a7.28,7.28,0,0,0-3.5-4.63c-1.47-.83-1.9-.77-9-2.06C29.91,13.5,29.1,12,26.34,12H8.74a4,4,0,0,0-3.47,2c-2.88,5-3.08,5.37-3.17,5.55S2,19.53,2,26H1a1,1,0,0,0-1,1v4a1,1,0,0,0,1,1H7.1a5,5,0,0,0,9.8,0H31.1a5,5,0,0,0,9.8,0,40.28,40.28,0,0,0,4.59-.74,3,3,0,0,0,2.51-3A17.1,17.1,0,0,0,48,25.76ZM43.72,23a5,5,0,0,1,1.81,2H44A1,1,0,0,1,43.72,23ZM32.59,19H24.87l-.72-5C28.31,14,27,13.44,32.59,19ZM13.5,19c-2.57-3.43-2.53-2.67-1-5h3.32l-.72,5Zm4.37-5h4.26l.72,5h-5.7ZM5,21a1,1,0,0,1,0,2H4V21Zm7,13a3,3,0,1,1,3-3A3,3,0,0,1,12,34Zm24,0a3,3,0,1,1,3-3A3,3,0,0,1,36,34Zm9.16-4.71C40.83,30,41,30,40.9,30a5,5,0,0,0-9.8,0H16.9a5,5,0,0,0-9.8,0H2V28H3a1,1,0,0,0,1-1V25H5c3.93,0,4.15-6-.28-6,3-5.27,2.32-5,5.41-5a3,3,0,0,0-.08,3.73L12.2,20.6c.43.58-1.17.4,22.71.4l6.69,1.22A3,3,0,0,0,44,27h2v1.31A1,1,0,0,1,45.16,29.29Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M36.92,30.62a1,1,0,1,0-1.75.94A1,1,0,0,0,36.92,30.62Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M12.38,30.08A1,1,0,1,0,13,31,1,1,0,0,0,12.38,30.08Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M28,23H26a1,1,0,0,0,0,2h2A1,1,0,0,0,28,23Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M20,23H18a1,1,0,0,0,0,2h2A1,1,0,0,0,20,23Z\"\n}));\n\nvar SvgCrossoverCar = function SvgCrossoverCar(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCrossoverCar, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/CrossoverCar.fa015d50.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"delivery_truck\",\n \"data-name\": \"delivery truck\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M29,19a1,1,0,0,0,1-1V16.76a2.05,2.05,0,0,0-1.42-2l-1.69-.56-.52-3A4.17,4.17,0,0,0,22.09,8H19V5.89A1.88,1.88,0,0,0,17.11,4h0L4,4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h.08a4,4,0,0,0,0,.5,3.52,3.52,0,1,0,1-2.49H5L4,22,4,6,17,6V22H14a1,1,0,0,0,0,2h5.88a2.73,2.73,0,0,0-.05.5,3.6,3.6,0,0,0,6.44,2.11A3.38,3.38,0,0,0,27,24.5a4,4,0,0,0,0-.5H28a2,2,0,0,0,2-2,1,1,0,0,0-1-1,1,1,0,0,0-1,1H25.9a3.56,3.56,0,0,0-2.49-1,3.65,3.65,0,0,0-2.52,1H19V16h6.79l2.21.76V18A1,1,0,0,0,29,19ZM7.5,23A1.5,1.5,0,1,1,6,24.5,1.5,1.5,0,0,1,7.5,23Zm15.91,0a1.6,1.6,0,0,1,1.28.61,1.43,1.43,0,0,1,0,1.78,1.6,1.6,0,0,1-1.28.61,1.5,1.5,0,1,1,0-3ZM22.09,10a2.22,2.22,0,0,1,2.31,1.57L24.82,14H19V10Z\"\n}));\n\nvar SvgDeliveryTruck = function SvgDeliveryTruck(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgDeliveryTruck, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/deliveryTruck.1a938318.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"_225487840\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225489328\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M368.88 413.711l1310.24 0c31.0725,0 59.2985,12.6957 79.7398,33.137 20.4473,20.4473 33.1406,48.6804 33.1406,79.7434l0 431.118 -1536 0 0 -431.118c0,-31.076 12.6898,-59.3044 33.1335,-79.7469 20.4425,-20.4437 48.6709,-33.1335 79.7469,-33.1335zm-48.8788 331.607l1408 0 0 -218.726 -1408 0 0 218.726z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225489112\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"288,518.849 1760,518.849 1760,582.851 288,582.851 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225489016\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"515.981,550.85 515.981,777.318 451.98,777.318 451.98,550.85 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225489256\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"708.223,550.85 708.223,777.318 644.221,777.318 644.221,550.85 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225489520\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"900.463,550.85 900.463,777.318 836.461,777.318 836.461,550.85 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225489592\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1092.7,550.85 1092.7,777.318 1028.7,777.318 1028.7,550.85 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225489496\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1284.94,550.85 1284.94,777.318 1220.94,777.318 1220.94,550.85 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225489568\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1477.19,550.85 1477.19,777.318 1413.18,777.318 1413.18,550.85 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225488992\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M368.88 818.103l1310.24 0c31.0725,0 59.2985,12.6957 79.7398,33.137 20.4473,20.4473 33.1406,48.6804 33.1406,79.7434l0 461.018c0,31.063 -12.698,59.2926 -33.1441,79.7363 -18.9626,18.965 -44.6244,31.2614 -73.0323,32.9433 0.453544,-5.17087 0.686221,-10.3843 0.686221,-15.6248 0,-47.1355 -18.5882,-91.9961 -51.913,-125.32 -33.3236,-33.3236 -78.1831,-51.9119 -125.319,-51.9119 -47.1343,0 -91.9961,18.5894 -125.32,51.9119 -33.3225,33.3236 -51.9119,78.1855 -51.9119,125.32 0,5.30906 0.238583,10.5886 0.703938,15.8256l-617.503 0c0.465355,-5.23701 0.703938,-10.5165 0.703938,-15.8256 0,-47.1343 -18.5894,-91.9961 -51.9119,-125.32 -33.3236,-33.3225 -78.1855,-51.9119 -125.32,-51.9119 -47.1355,0 -91.995,18.5882 -125.319,51.9119 -21.6803,21.6792 -37.1209,48.2433 -45.2658,77.1379 -0.375591,1.33228 -0.735827,2.67047 -1.07953,4.01221 -3.66851,14.2902 -5.56772,29.113 -5.56772,44.1697 0,5.24056 0.232677,10.4539 0.686221,15.6248 -28.4079,-1.68189 -54.0721,-13.9736 -73.0382,-32.9398 -20.4414,-20.4414 -33.137,-48.6674 -33.137,-79.7398l0 -461.018c0,-31.076 12.6898,-59.3044 33.1335,-79.7469 20.4425,-20.4437 48.6709,-33.1335 79.7469,-33.1335zm1359.12 525.019l0 -64.0016 -84.6698 0c-17.6728,0 -32.0008,14.328 -32.0008,32.0008 0,17.6728 14.328,32.0008 32.0008,32.0008l84.6698 0zm0 -141.911l0 -270.228 -1408 0 0 270.228 1408 0z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488416\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"288,923.241 1760,923.241 1760,987.243 288,987.243 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488344\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"288,1149.71 1760,1149.71 1760,1213.71 288,1213.71 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488176\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"515.981,955.242 515.981,1181.71 451.98,1181.71 451.98,955.242 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488200\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"708.223,955.242 708.223,1181.71 644.221,1181.71 644.221,955.242 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488824\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"900.463,955.242 900.463,1181.71 836.461,1181.71 836.461,955.242 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488128\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1092.7,955.242 1092.7,1181.71 1028.7,1181.71 1028.7,955.242 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488632\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1284.94,955.242 1284.94,1181.71 1220.94,1181.71 1220.94,955.242 \"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"_225488656\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"1477.19,955.242 1477.19,1181.71 1413.18,1181.71 1413.18,955.242 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225488224\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1509.28 1343.82c40.1008,0 76.4091,16.2579 102.692,42.5398 26.2831,26.2831 42.5398,62.5926 42.5398,102.692 0,40.1008 -16.2567,76.4091 -42.5398,102.692 -26.2831,26.2831 -62.5914,42.5398 -102.692,42.5398 -40.1008,0 -76.4091,-16.2567 -102.692,-42.5398 -26.2831,-26.2831 -42.5398,-62.5914 -42.5398,-102.692 0,-40.0985 16.2579,-76.4091 42.5398,-102.692 26.2831,-26.2819 62.5937,-42.5398 102.692,-42.5398z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225488560\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M538.72 1343.82c40.0985,0 76.4091,16.2579 102.692,42.5398 26.2819,26.2831 42.5398,62.5937 42.5398,102.692 0,40.1008 -16.2567,76.4091 -42.5398,102.692 -26.2831,26.2831 -62.5914,42.5398 -102.692,42.5398 -40.1008,0 -76.4091,-16.2567 -102.692,-42.5398 -26.2831,-26.2831 -42.5398,-62.5914 -42.5398,-102.692 0,-40.0996 16.2567,-76.4091 42.5398,-102.692 26.2831,-26.2819 62.5914,-42.5398 102.692,-42.5398z\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgDoubleBus = function SvgDoubleBus(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgDoubleBus, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/DoubleBus.2259feea.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_x0020_1\"\n}, /*#__PURE__*/React.createElement(\"metadata\", {\n id: \"CorelCorpID_0Corel-Layer\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M409.895 876.533l780.225 0c42.4016,0 80.7839,17.348 108.66,45.1996 27.874,27.8551 45.2339,66.2126 45.2339,108.581l0 172.073c0,3.53859 -0.113386,6.96497 -0.35315,10.5 -48.0697,-47.2052 -112.201,-73.402 -179.527,-73.402 -68.1426,0 -132.873,26.7862 -181.056,74.941 -38.7437,38.7095 -63.7819,88.2792 -71.9316,141.737l-158.263 0c-8.14843,-53.4579 -33.0721,-103.028 -71.9268,-141.737 -48.1914,-48.1548 -112.913,-74.941 -181.062,-74.941 -68.0315,0 -132.872,26.7862 -180.944,74.941 -18.0697,17.941 -33.0697,38.237 -44.7615,60.0721 -0.946064,-1.76929 -1.89095,-3.54331 -2.71772,-5.3126 -9.92245,-20.3008 -15.4725,-42.9579 -15.4725,-66.7985l0 -172.073c0,-42.3685 17.3634,-80.7249 45.2374,-108.581 27.8717,-27.8516 66.2564,-45.1996 108.658,-45.1996l0 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1500.04 812.566l199.957 0c25.2732,0 48.3048,10.3866 64.9571,27.0272 16.6536,16.6382 27.0473,39.6532 27.0473,64.9099l0.0011811 259.881 0 67.0347 -52.0855 -42.3685 -320.072 -259.761 -11.8158 -9.68032 0 -15.1051c0,-25.2567 10.2815,-48.2717 26.9339,-64.9099 16.6536,-16.6406 39.6839,-27.0272 65.0764,-27.0272l0 0z\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n points: \"958.746,707.058 1388.43,459.097 1411.81,445.643 1429.05,466.532 1724.56,824.369 1675.31,864.849 1653.94,838.886 1537.83,862.843 1401.42,667.165 1074.85,933.3 1034.57,883.853 1001.97,755.8 990.634,762.291 \"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M782.998 748.601l0 -175.733 82.2048 0 80.7875 175.733 -162.992 0zm-32.5973 0l-131.687 0c-21.4961,0 -40.7504,-7.43623 -54.45,-19.3559 -12.5197,-10.9772 -20.1969,-25.6099 -20.1969,-41.5418l0 -53.8193c0,-15.9319 7.67717,-30.6851 20.1969,-41.5418 13.6996,-11.9197 32.954,-19.474 54.45,-19.474l131.687 0 0 175.733zm333.304 146.695l-160.038 -347.685 -1.17992 -2.59725c-26.9292,-58.5355 -53.3823,-116.13 -127.795,-116.13l-279.442 0c-44.8831,0 -85.7481,18.4099 -115.274,47.9174 -29.6457,29.504 -47.9528,70.3382 -47.9528,115.187l0 185.407c0,44.8489 18.3071,85.6831 47.9528,115.186 29.5264,29.6268 70.3914,47.9185 115.273,47.9185l539.404 0 49.839 0 -20.7862 -45.2044z\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"_225490576\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225491536\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M499.895 1171.46c61.8874,0 117.872,25.0252 158.382,65.5016 40.6264,40.4835 65.6717,96.5387 65.6717,158.269 0,61.8426 -25.0453,117.782 -65.6717,158.258 -40.5107,40.4847 -96.495,65.6245 -158.382,65.6245 -61.7705,0 -117.874,-25.1398 -158.385,-65.6245 -40.5095,-40.4764 -65.5501,-96.4158 -65.5501,-158.258 0,-61.7304 25.0406,-117.784 65.5501,-158.269 40.5118,-40.4764 96.6142,-65.5016 158.385,-65.5016l0 0zm0.0401575 116.815c28.4492,0 55.5485,11.2087 75.6827,31.3004 20.1414,20.0988 31.4055,47.2311 31.4055,75.6922 0,28.4811 -11.2524,55.5804 -31.4055,75.6898 -20.1343,20.0906 -47.2276,31.3418 -75.6827,31.3418 -28.4398,0 -55.5886,-11.2606 -75.7005,-31.3571 -20.126,-20.1118 -31.3477,-47.2193 -31.3477,-75.6745 0,-28.4362 11.2347,-55.578 31.3477,-75.6768 20.113,-20.0977 47.2666,-31.3158 75.7005,-31.3158z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225490600\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M499.935 1320.28c20.7402,0 39.5032,8.38701 53.08,21.952 13.6146,13.5673 22.0087,32.3528 22.0087,53.041 0,20.726 -8.3941,39.4737 -22.0087,53.0386 -13.5768,13.5673 -32.3398,21.9933 -53.08,21.9933 -20.7024,0 -39.5044,-8.42599 -53.0811,-21.9933 -13.5756,-13.565 -21.9673,-32.3126 -21.9673,-53.0386 0,-20.6882 8.39174,-39.4737 21.9673,-53.041 13.578,-13.565 32.3788,-21.952 53.0811,-21.952l0 0z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n id: \"_225490504\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225491080\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1164.08 1171.46c61.8874,0 117.872,25.0252 158.382,65.5016 40.6264,40.4835 65.6717,96.5387 65.6717,158.269 0,61.8426 -25.0453,117.782 -65.6717,158.258 -40.5107,40.4847 -96.495,65.6245 -158.382,65.6245 -61.7705,0 -117.874,-25.1398 -158.385,-65.6245 -40.5095,-40.4764 -65.5501,-96.4158 -65.5501,-158.258 0,-61.7304 25.0406,-117.784 65.5501,-158.269 40.5118,-40.4764 96.6142,-65.5016 158.385,-65.5016l0 0zm0.0401575 116.815c28.4492,0 55.5485,11.2087 75.6827,31.3004 20.1414,20.0988 31.4055,47.2311 31.4055,75.6922 0,28.4811 -11.2524,55.5804 -31.4055,75.6898 -20.1343,20.0906 -47.2276,31.3418 -75.6827,31.3418 -28.4398,0 -55.5886,-11.2606 -75.7005,-31.3571 -20.126,-20.1118 -31.3477,-47.2193 -31.3477,-75.6745 0,-28.4362 11.2347,-55.578 31.3477,-75.6768 20.113,-20.0977 47.2666,-31.3158 75.7005,-31.3158z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"_225490960\",\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n d: \"M1164.12 1320.28c20.7402,0 39.5032,8.38701 53.08,21.952 13.6146,13.5673 22.0087,32.3528 22.0087,53.041 0,20.726 -8.3941,39.4737 -22.0087,53.0386 -13.5768,13.5673 -32.3398,21.9933 -53.08,21.9933 -20.7024,0 -39.5044,-8.42599 -53.0811,-21.9933 -13.5756,-13.565 -21.9673,-32.3126 -21.9673,-53.0386 0,-20.6882 8.39174,-39.4737 21.9673,-53.041 13.578,-13.565 32.3788,-21.952 53.0811,-21.952l0 0z\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 2,\n width: 2048,\n height: 2048\n});\n\nvar SvgEscavator = function SvgEscavator(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlSpace: \"preserve\",\n width: \"2048px\",\n height: \"2048px\",\n style: {\n shapeRendering: \"geometricPrecision\",\n textRendering: \"geometricPrecision\",\n imageRendering: \"optimizeQuality\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n viewBox: \"0 0 2048 2048\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgEscavator, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Escavator.2312913f.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"current\",\n stroke: \"current\",\n strokeWidth: 1,\n d: \"M18.42,9.21a7,7,0,0,0-13.36,1.9A4,4,0,0,0,6,19H17a5,5,0,0,0,1.42-9.79ZM17,17H6a2,2,0,0,1,0-4,1,1,0,0,0,1-1,5,5,0,0,1,9.73-1.61,1,1,0,0,0,.78.66A3,3,0,0,1,17,17Z\"\n});\n\nvar SvgCloud = function SvgCloud(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCloud, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/cloud.e2906b4d.svg\";\nexport { ForwardRef as ReactComponent };","import { ReactComponent as aeroplane } from '../../assets/images/vehicle-icons/vehicles/aeroplane.svg';\nimport { ReactComponent as Aircraft } from '../../assets/images/vehicle-icons/vehicles/Aircraft.svg';\nimport { ReactComponent as ambulance } from '../../assets/images/vehicle-icons/vehicles/ambulance.svg';\nimport { ReactComponent as Ambulance1 } from '../../assets/images/vehicle-icons/vehicles/Ambulance1.svg';\nimport { ReactComponent as AmbulanceCar } from '../../assets/images/vehicle-icons/vehicles/AmbulanceCar.svg';\nimport { ReactComponent as ATV } from '../../assets/images/vehicle-icons/vehicles/ATV.svg';\nimport { ReactComponent as bicycle } from '../../assets/images/vehicle-icons/vehicles/bicycle.svg';\nimport { ReactComponent as Boat } from '../../assets/images/vehicle-icons/vehicles/Boat.svg';\nimport { ReactComponent as bulldozerWheels } from '../../assets/images/vehicle-icons/vehicles/bulldozerWheels.svg';\nimport { ReactComponent as bus } from '../../assets/images/vehicle-icons/vehicles/bus.svg';\nimport { ReactComponent as bus1 } from '../../assets/images/vehicle-icons/vehicles/bus1.svg';\nimport { ReactComponent as Bus2 } from '../../assets/images/vehicle-icons/vehicles/Bus2.svg';\nimport { ReactComponent as Bus3 } from '../../assets/images/vehicle-icons/vehicles/Bus3.svg';\nimport { ReactComponent as CableCar } from '../../assets/images/vehicle-icons/vehicles/CableCar.svg';\nimport { ReactComponent as CabrioletCar } from '../../assets/images/vehicle-icons/vehicles/CabrioletCar.svg';\nimport { ReactComponent as camper } from '../../assets/images/vehicle-icons/vehicles/camper.svg';\nimport { ReactComponent as car_1 } from '../../assets/images/vehicle-icons/vehicles/car_1.svg';\nimport { ReactComponent as car_2 } from '../../assets/images/vehicle-icons/vehicles/car_2.svg';\nimport { ReactComponent as car_3 } from '../../assets/images/vehicle-icons/vehicles/car_3.svg';\nimport { ReactComponent as car_4 } from '../../assets/images/vehicle-icons/vehicles/car_4.svg';\nimport { ReactComponent as car } from '../../assets/images/vehicle-icons/vehicles/car.svg';\nimport { ReactComponent as CargoShip } from '../../assets/images/vehicle-icons/vehicles/CargoShip.svg';\nimport { ReactComponent as CargoShip1 } from '../../assets/images/vehicle-icons/vehicles/CargoShip1.svg';\nimport { ReactComponent as CoupeCar } from '../../assets/images/vehicle-icons/vehicles/CoupeCar.svg';\nimport { ReactComponent as crane } from '../../assets/images/vehicle-icons/vehicles/crane.svg';\nimport { ReactComponent as Crane1 } from '../../assets/images/vehicle-icons/vehicles/Crane1.svg';\nimport { ReactComponent as CrossoverCar } from '../../assets/images/vehicle-icons/vehicles/CrossoverCar.svg';\nimport { ReactComponent as deliveryTruck } from '../../assets/images/vehicle-icons/vehicles/deliveryTruck.svg';\nimport { ReactComponent as DoubleBus } from '../../assets/images/vehicle-icons/vehicles/DoubleBus.svg';\n// import { ReactComponent as ElectricTrain } from '../../assets/images/vehicle-icons/vehicles/ElectricTrain.svg';\nimport { ReactComponent as Escavator } from '../../assets/images/vehicle-icons/vehicles/Escavator.svg';\n// import { ReactComponent as FireBrigade } from '../../assets/images/vehicle-icons/vehicles/FireBrigade.svg';\n// import { ReactComponent as FireEngine } from '../../assets/images/vehicle-icons/vehicles/FireEngine.svg';\n// import { ReactComponent as FlyingAirplane } from '../../assets/images/vehicle-icons/vehicles/FlyingAirplane.svg';\n// import { ReactComponent as forklift } from '../../assets/images/vehicle-icons/vehicles/forklift.svg';\n// import { ReactComponent as Forklifter } from '../../assets/images/vehicle-icons/vehicles/Forklifter.svg';\n// import { ReactComponent as GolfCar } from '../../assets/images/vehicle-icons/vehicles/GolfCar.svg';\n// import { ReactComponent as HatchbackCar } from '../../assets/images/vehicle-icons/vehicles/HatchbackCar.svg';\n// import { ReactComponent as Helicopter } from '../../assets/images/vehicle-icons/vehicles/Helicopter.svg';\n// import { ReactComponent as Helicopter1 } from '../../assets/images/vehicle-icons/vehicles/Helicopter1.svg';\n// import { ReactComponent as hellicopter } from '../../assets/images/vehicle-icons/vehicles/hellicopter.svg';\n// import { ReactComponent as IcecreamVan } from '../../assets/images/vehicle-icons/vehicles/IcecreamVan.svg';\n// import { ReactComponent as IndustrialTractor } from '../../assets/images/vehicle-icons/vehicles/IndustrialTractor.svg';\n// import { ReactComponent as JetSki } from '../../assets/images/vehicle-icons/vehicles/JetSki.svg';\n// import { ReactComponent as LandingAirplane } from '../../assets/images/vehicle-icons/vehicles/LandingAirplane.svg';\n// import { ReactComponent as lift } from '../../assets/images/vehicle-icons/vehicles/lift.svg';\n// import { ReactComponent as LiftbackCar } from '../../assets/images/vehicle-icons/vehicles/LiftbackCar.svg';\n// import { ReactComponent as lifter } from '../../assets/images/vehicle-icons/vehicles/lifter.svg';\n// import { ReactComponent as Lifter1 } from '../../assets/images/vehicle-icons/vehicles/Lifter1.svg';\n// import { ReactComponent as LimousineCar } from '../../assets/images/vehicle-icons/vehicles/LimousineCar.svg';\n// import { ReactComponent as loader } from '../../assets/images/vehicle-icons/vehicles/loader.svg';\n// import { ReactComponent as LogisticsShip } from '../../assets/images/vehicle-icons/vehicles/LogisticsShip.svg';\n// import { ReactComponent as metro } from '../../assets/images/vehicle-icons/vehicles/metro.svg';\n// import { ReactComponent as MinibusCar } from '../../assets/images/vehicle-icons/vehicles/MinibusCar.svg';\n// import { ReactComponent as MinivanCar } from '../../assets/images/vehicle-icons/vehicles/MinivanCar.svg';\n// import { ReactComponent as MonsterTruck } from '../../assets/images/vehicle-icons/vehicles/MonsterTruck.svg';\n// import { ReactComponent as motorcicle } from '../../assets/images/vehicle-icons/vehicles/motorcicle.svg';\n// import { ReactComponent as MotorSport } from '../../assets/images/vehicle-icons/vehicles/MotorSport.svg';\n// import { ReactComponent as NewsVan } from '../../assets/images/vehicle-icons/vehicles/NewsVan.svg';\n// import { ReactComponent as Pickup } from '../../assets/images/vehicle-icons/vehicles/Pickup.svg';\n// import { ReactComponent as PickupCar } from '../../assets/images/vehicle-icons/vehicles/PickupCar.svg';\n// import { ReactComponent as pickupTruck } from '../../assets/images/vehicle-icons/vehicles/pickupTruck.svg';\n// import { ReactComponent as Plane } from '../../assets/images/vehicle-icons/vehicles/Plane.svg';\n// import { ReactComponent as PoliceCar } from '../../assets/images/vehicle-icons/vehicles/PoliceCar.svg';\n// import { ReactComponent as RoadsterCar } from '../../assets/images/vehicle-icons/vehicles/RoadsterCar.svg';\n// import { ReactComponent as RVCar } from '../../assets/images/vehicle-icons/vehicles/RVCar.svg';\n// import { ReactComponent as SafariJeep } from '../../assets/images/vehicle-icons/vehicles/SafariJeep.svg';\n// import { ReactComponent as Scooter } from '../../assets/images/vehicle-icons/vehicles/Scooter.svg';\n// import { ReactComponent as Sedan } from '../../assets/images/vehicle-icons/vehicles/Sedan.svg';\n// import { ReactComponent as SedanCar } from '../../assets/images/vehicle-icons/vehicles/SedanCar.svg';\n// import { ReactComponent as Segway } from '../../assets/images/vehicle-icons/vehicles/Segway.svg';\n// import { ReactComponent as ship } from '../../assets/images/vehicle-icons/vehicles/ship.svg';\n// import { ReactComponent as SmallYacht } from '../../assets/images/vehicle-icons/vehicles/SmallYacht.svg';\n// import { ReactComponent as smartCar } from '../../assets/images/vehicle-icons/vehicles/smartCar.svg';\n// import { ReactComponent as SpeedBoat } from '../../assets/images/vehicle-icons/vehicles/SpeedBoat.svg';\n// import { ReactComponent as SportsCar } from '../../assets/images/vehicle-icons/vehicles/SportsCar.svg';\n// import { ReactComponent as Steamboat } from '../../assets/images/vehicle-icons/vehicles/Steamboat.svg';\n// import { ReactComponent as StretchCar } from '../../assets/images/vehicle-icons/vehicles/StretchCar.svg';\n// import { ReactComponent as Submarine } from '../../assets/images/vehicle-icons/vehicles/Submarine.svg';\n// import { ReactComponent as SUVCar } from '../../assets/images/vehicle-icons/vehicles/SUVCar.svg';\n// import { ReactComponent as tank } from '../../assets/images/vehicle-icons/vehicles/tank.svg';\n// import { ReactComponent as TargaCar } from '../../assets/images/vehicle-icons/vehicles/TargaCar.svg';\n// import { ReactComponent as tractor_1 } from '../../assets/images/vehicle-icons/vehicles/tractor_1.svg';\n// import { ReactComponent as tractor_2 } from '../../assets/images/vehicle-icons/vehicles/tractor_2.svg';\n// import { ReactComponent as tractor_3 } from '../../assets/images/vehicle-icons/vehicles/tractor_3.svg';\n// import { ReactComponent as Tractor } from '../../assets/images/vehicle-icons/vehicles/Tractor.svg';\n// import { ReactComponent as Tractor1 } from '../../assets/images/vehicle-icons/vehicles/Tractor1.svg';\n// import { ReactComponent as trailer } from '../../assets/images/vehicle-icons/vehicles/trailer.svg';\n// import { ReactComponent as Trailer1 } from '../../assets/images/vehicle-icons/vehicles/Trailer1.svg';\n// import { ReactComponent as Trailer2 } from '../../assets/images/vehicle-icons/vehicles/Trailer2.svg';\n// import { ReactComponent as train } from '../../assets/images/vehicle-icons/vehicles/train.svg';\n// import { ReactComponent as Train2 } from '../../assets/images/vehicle-icons/vehicles/Train2.svg';\n// import { ReactComponent as TrainTracks } from '../../assets/images/vehicle-icons/vehicles/TrainTracks.svg';\n// import { ReactComponent as tram } from '../../assets/images/vehicle-icons/vehicles/tram.svg';\n// import { ReactComponent as Tram1 } from '../../assets/images/vehicle-icons/vehicles/Tram1.svg';\n// import { ReactComponent as trolley_bus } from '../../assets/images/vehicle-icons/vehicles/trolley_bus.svg';\n// import { ReactComponent as TrolleyBus } from '../../assets/images/vehicle-icons/vehicles/TrolleyBus.svg';\n// import { ReactComponent as truck_1 } from '../../assets/images/vehicle-icons/vehicles/truck_1.svg';\n// import { ReactComponent as truck_2 } from '../../assets/images/vehicle-icons/vehicles/truck_2.svg';\n// import { ReactComponent as truck_3 } from '../../assets/images/vehicle-icons/vehicles/truck_3.svg';\n// import { ReactComponent as truck_4 } from '../../assets/images/vehicle-icons/vehicles/truck_4.svg';\n// import { ReactComponent as truck_5 } from '../../assets/images/vehicle-icons/vehicles/truck_5.svg';\n// import { ReactComponent as truck_6 } from '../../assets/images/vehicle-icons/vehicles/truck_6.svg';\n// import { ReactComponent as truck_7 } from '../../assets/images/vehicle-icons/vehicles/truck_7.svg';\n// import { ReactComponent as Truck } from '../../assets/images/vehicle-icons/vehicles/Truck.svg';\n// import { ReactComponent as truck2 } from '../../assets/images/vehicle-icons/vehicles/truck2.svg';\n// import { ReactComponent as van } from '../../assets/images/vehicle-icons/vehicles/van.svg';\n// import { ReactComponent as VanCar } from '../../assets/images/vehicle-icons/vehicles/VanCar.svg';\n// import { ReactComponent as WagonCar } from '../../assets/images/vehicle-icons/vehicles/WagonCar.svg';\n// import { ReactComponent as yacht } from '../../assets/images/vehicle-icons/vehicles/yacht.svg';\n// import { ReactComponent as Yacht1 } from '../../assets/images/vehicle-icons/vehicles/Yacht1.svg';\nimport { ReactComponent as cloud } from '../../assets/images/map-status/cloud.svg';\n\nexport const assetsIcons:any = {\n aeroplane: {name: 'aeroplane', icon: aeroplane},\n Aircraft: {name: 'Aircraft', icon: Aircraft},\n ambulance: {name: 'ambulance', icon: ambulance},\n Ambulance1: {name: 'Ambulance1', icon: Ambulance1},\n AmbulanceCar: {name: 'AmbulanceCar', icon: AmbulanceCar},\n ATV: {name: 'ATV', icon: ATV},\n bicycle: {name: 'bicycle', icon: bicycle},\n Boat: {name: 'Boat', icon: Boat},\n bulldozerWheels: {name: 'bulldozerWheels', icon: bulldozerWheels},\n bus: {name: 'bus', icon: bus},\n bus1: {name: 'bus1', icon: bus1},\n Bus2: {name: 'Bus2', icon: Bus2},\n Bus3: {name: 'Bus3', icon: Bus3},\n CableCar: {name: 'CableCar', icon: CableCar},\n CabrioletCar: {name: 'CabrioletCar', icon: CabrioletCar},\n camper: {name: 'camper', icon: camper},\n car_1: {name: 'car_1', icon: car_1},\n car_2: {name: 'car_2', icon: car_2},\n car_3: {name: 'car_3', icon: car_3},\n car_4: {name: 'car_4', icon: car_4},\n car: {name: 'car', icon: car},\n CargoShip: {name: 'CargoShip', icon: CargoShip},\n CargoShip1: {name: 'CargoShip1', icon: CargoShip1},\n CoupeCar: {name: 'CoupeCar', icon: CoupeCar},\n crane: {name: 'crane', icon: crane},\n Crane1: {name: 'Crane1', icon: Crane1},\n CrossoverCar: {name: 'CrossoverCar', icon: CrossoverCar},\n deliveryTruck: {name: 'deliveryTruck', icon: deliveryTruck},\n DoubleBus: {name: 'DoubleBus', icon: DoubleBus},\n // ElectricTrain: {name: 'ElectricTrain', icon: ElectricTrain},\n Escavator: {name: 'Escavator', icon: Escavator},\n // FireBrigade: {name: 'FireBrigade', icon: FireBrigade},\n // FireEngine: {name: 'FireEngine', icon: FireEngine},\n // FlyingAirplane: {name: 'FlyingAirplane', icon: FlyingAirplane},\n // forklift: {name: 'forklift', icon: forklift},\n // Forklifter: {name: 'Forklifter', icon: Forklifter},\n // GolfCar: {name: 'GolfCar', icon: GolfCar},\n // HatchbackCar: {name: 'HatchbackCar', icon: HatchbackCar},\n // Helicopter: {name: 'Helicopter', icon: Helicopter},\n // Helicopter1: {name: 'Helicopter1', icon: Helicopter1},\n // hellicopter: {name: 'hellicopter', icon: hellicopter},\n // IcecreamVan: {name: 'IcecreamVan', icon: IcecreamVan},\n // IndustrialTractor: {name: 'IndustrialTractor', icon: IndustrialTractor},\n // JetSki: {name: 'JetSki', icon: JetSki},\n // LandingAirplane: {name: 'LandingAirplane', icon: LandingAirplane},\n // lift: {name: 'lift', icon: lift},\n // LiftbackCar: {name: 'LiftbackCar', icon: LiftbackCar},\n // lifter: {name: 'lifter', icon: lifter},\n // Lifter1: {name: 'Lifter1', icon: Lifter1},\n // LimousineCar: {name: 'LimousineCar', icon: LimousineCar},\n // loader: {name: 'loader', icon: loader},\n // LogisticsShip: {name: 'LogisticsShip', icon: LogisticsShip},\n // metro: {name: 'metro', icon: metro},\n // MinibusCar: {name: 'MinibusCar', icon: MinibusCar},\n // MinivanCar: {name: 'MinivanCar', icon: MinivanCar},\n // MonsterTruck: {name: 'MonsterTruck', icon: MonsterTruck},\n // motorcicle: {name: 'motorcicle', icon: motorcicle},\n // MotorSport: {name: 'MotorSport', icon: MotorSport},\n // NewsVan: {name: 'NewsVan', icon: NewsVan},\n // Pickup: {name: 'Pickup', icon: Pickup},\n // PickupCar: {name: 'PickupCar', icon: PickupCar},\n // pickupTruck: {name: 'pickupTruck', icon: pickupTruck},\n // Plane: {name: 'Plane', icon: Plane},\n // PoliceCar: {name: 'PoliceCar', icon: PoliceCar},\n // RoadsterCar: {name: 'RoadsterCar', icon: RoadsterCar},\n // RVCar: {name: 'RVCar', icon: RVCar},\n // SafariJeep: {name: 'SafariJeep', icon: SafariJeep},\n // Scooter: {name: 'Scooter', icon: Scooter},\n // Sedan: {name: 'Sedan', icon: Sedan},\n // SedanCar: {name: 'SedanCar', icon: SedanCar},\n // Segway: {name: 'Segway', icon: Segway},\n // ship: {name: 'ship', icon: ship},\n // SmallYacht: {name: 'SmallYacht', icon: SmallYacht},\n // smartCar: {name: 'smartCar', icon: smartCar},\n // SpeedBoat: {name: 'SpeedBoat', icon: SpeedBoat},\n // SportsCar: {name: 'SportsCar', icon: SportsCar},\n // Steamboat: {name: 'Steamboat', icon: Steamboat},\n // StretchCar: {name: 'StretchCar', icon: StretchCar},\n // Submarine: {name: 'Submarine', icon: Submarine},\n // SUVCar: {name: 'SUVCar', icon: SUVCar},\n // tank: {name: 'tank', icon: tank},\n // TargaCar: {name: 'TargaCar', icon: TargaCar},\n // tractor_1: {name: 'tractor_1', icon: tractor_1},\n // tractor_2: {name: 'tractor_2', icon: tractor_2},\n // tractor_3: {name: 'tractor_3', icon: tractor_3},\n // Tractor: {name: 'Tractor', icon: Tractor},\n // Tractor1: {name: 'Tractor1', icon: Tractor1},\n // trailer: {name: 'trailer', icon: trailer},\n // Trailer1: {name: 'Trailer1', icon: Trailer1},\n // Trailer2: {name: 'Trailer2', icon: Trailer2},\n // train: {name: 'train', icon: train},\n // Train2: {name: 'Train2', icon: Train2},\n // TrainTracks: {name: 'TrainTracks', icon: TrainTracks},\n // tram: {name: 'tram', icon: tram},\n // Tram1: {name: 'Tram1', icon: Tram1},\n // trolley_bus: {name: 'trolley_bus', icon: trolley_bus},\n // TrolleyBus: {name: 'TrolleyBus', icon: TrolleyBus},\n // truck_1: {name: 'truck_1', icon: truck_1},\n // truck_2: {name: 'truck_2', icon: truck_2},\n // truck_3: {name: 'truck_3', icon: truck_3},\n // truck_4: {name: 'truck_4', icon: truck_4},\n // truck_5: {name: 'truck_5', icon: truck_5},\n // truck_6: {name: 'truck_6', icon: truck_6},\n // truck_7: {name: 'truck_7', icon: truck_7},\n // Truck: {name: 'Truck', icon: Truck},\n // truck2: {name: 'truck2', icon: truck2},\n // van: {name: 'van', icon: van},\n // VanCar: {name: 'VanCar', icon: VanCar},\n // WagonCar: {name: 'WagonCar', icon: WagonCar},\n // yacht: {name: 'yacht', icon: yacht},\n // Yacht1: {name: 'Yacht1', icon: Yacht1}\n cloud: {name: 'cloud', icon: cloud}\n}\n\nexport default function getAssetIcon(iconName: string) {\n if(iconName){\n return assetsIcons[iconName].icon\n } else {\n return assetsIcons.cloud.icon\n }\n}\n\n\n","import React, { useEffect, useState, useCallback, CSSProperties, useRef, useContext } from \"react\";\nimport ReactDOMServer from 'react-dom/server'\nimport { Popover, Tooltip, Button, Row, Col, Card, Input, Divider, Tag, Form, message, Select } from \"antd\";\n\nimport Icon, { BorderOuterOutlined, CloseOutlined, FilterOutlined, RadarChartOutlined, UnorderedListOutlined } from \"@ant-design/icons\";\nimport onlineIcon from \"../../assets/images/map-status/online.png\";\nimport offlineIcon from \"../../assets/images/map-status/offline.png\";\nimport criticalIcon from \"../../assets/images/map-status/critical.png\";\nimport warningIcon from \"../../assets/images/map-status/warning.png\";\nimport infoIcon from \"../../assets/images/map-status/info.png\";\nimport dm1Icon from \"../../assets/images/map-status/dm1.png\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport history from '../../utils/history';\nimport moment from \"moment\"\nimport tzlookup from \"tz-lookup\";\n\nimport \"./MapToolTip.css\";\nimport { formatGps, formatSignals } from \"../../utils/commonHelpers\";\nimport { getTopThreeGeoTabAssets } from \"../ServiceTrucks/serviceTrucksHelper\";\nimport getAssetIcon, { assetsIcons } from \"./VehicleIcons\";\nimport { errorResponse, resetFormErrors, successResponse } from \"../../utils/apiHelpers/apiHelpers\";\n\nimport TextArea from \"antd/lib/input/TextArea\";\nimport { appConfigs } from \"../../utils/configurations\";\nconst { Option } = Select;\nfunction displayCount(count: number) {\n return count < 100 ? count : \"99+\";\n}\n\ninterface Position {\n lat: number;\n lng: number;\n}\n\ninterface Props { \n context: any,\n fleetOverviewState: any,\n serviceTruckState: any,\n permissions: any,\n toggleMarkerToolTip: any,\n position?: Position\n getPreferedSignals: Function,\n updateToolTipAssetDetails: Function,\n updateToolTipOverlay: Function,\n submitAssetDown: Function,\n getFleetOverview: Function\n}\n\nconst goToAlerts = (\n e: any, mastertag: \n string, alertType: string, \n status: string, \n) => {\n e.preventDefault();\n history.push({\n pathname: \"/alerts\",\n state: [{ \n mode: alertType, \n mastertag: mastertag,\n status: alertType === \"signal-alarms\" ? status : \"\"\n }]\n }); \n}; \n\nconst AssetStatusBody = (props:any) => {\n return (\n <>\n <img style={{marginTop: \"-3px\"}} src={props.icon} alt=\"\" title={props.status === \"Critical\"? \"Critical Alerts\":props.status === \"Warning\"? \"Warning Alerts\": props.status===\"Info\"? \"Info Messages\": props.status===\"dm1\"? \"DM1s\": props.status}/>\n <span style={{marginLeft: \"5px\"}}> {displayCount(props.count)} </span>\n </>\n );\n};\n\ninterface AssetStatusProps {\n context: string;\n mastertag: string;\n alertType: string;\n status: string,\n icon: any;\n count: number;\n}\n\n\nconst AssetStatus: React.FC<AssetStatusProps> = (props) => {\n return (\n <Col span={6}>\n <div className=\"map-assets-list-element\">\n <a href=\"# \" onClick={(e) => {goToAlerts(e, props.mastertag, props.alertType, props.status)}}> \n <AssetStatusBody\n status={props.status}\n icon={props.icon} \n count={props.count} \n />\n </a>\n </div>\n </Col>\n );\n};\n\nconst GeotabAssetInfo = (props: any) => {\n return (\n <>\n {/* <Col span={12}><span><b>VIN:</b> {props.GeotabAsset.VIN.substring(props.GeotabAsset.VIN.length-6)}</span></Col> */}\n <Col span={18}><span> {props.GeotabAsset.operatorName?.length > 0 ? props.GeotabAsset.operatorName : `${props.GeotabAsset.VIN.substring(props.GeotabAsset.VIN.length - 6)} - (No Name Assigned)`}</span></Col>\n <Col span={6}><span> {props.GeotabAsset.distance.toFixed(2)} <span style={{ fontSize: '10px' }}>mi.</span></span></Col>\n </>\n );\n}\n\nfunction useOutsideClick(ref:any, props:any) {\n useEffect(() => {\n\n let moved:any;\n\n function handleClickOutside(event:any) {\n if (!moved) {\n if (ref.current && !ref.current.contains(event.target)) {\n props.toggleMarkerToolTip(false)\n props.fleetOverviewState.tooltip.overlay.setMap(null)\n }\n }\n }\n\n let downListener = () => { moved = false }\n let moveListener = () => { moved = true }\n\n document.addEventListener('mousedown', downListener)\n document.addEventListener('mousemove', moveListener)\n document.addEventListener('mouseup', handleClickOutside)\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"mousemove\", handleClickOutside);\n document.removeEventListener(\"mouseup\", handleClickOutside);\n };\n\n }, [ref]);\n}\n\n\nlet tooltipSubmenu:any = {\n iconSelection: false,\n reportAssetDown: false\n}\n\nconst MapToolTip = (props:Props) => { \n \n const wrapperRef = useRef(null);\n const inputRef = useRef<TextArea>(null);\n useOutsideClick(wrapperRef, props);\n\n const [assetDetails, setAssetDetails] = useState<any>();\n const [pinnedSingals, setPinnedSignals] = useState<any>(null);\n const [showSubMenu, setShowSubMenu] = useState<any>(tooltipSubmenu);\n const [sideMenuHeight, setSideMenuHeight] = useState(50);\n\n const [form] = Form.useForm();\n\n \n\n\n const showSubMenuVisibilty = (menuName: string) => {\n inputRef.current?.focus();\n let NewSubmenuState:any = {}\n\n setSideMenuHeight(document.getElementsByClassName(\"map-marker-tooltip\")[0]?.clientHeight)\n\n for (const [key, value] of Object.entries(tooltipSubmenu)) {\n if(key === menuName){\n if(showSubMenu[menuName] === true){\n NewSubmenuState[key] = false;\n } else {\n NewSubmenuState[key] = true;\n }\n } else {\n NewSubmenuState[key] = false;\n }\n }\n\n setShowSubMenu(NewSubmenuState)\n }\n\n\n const submitAssetDown = (values: any) => {\n if(assetDetails.assetCustomFields?.additional_info === 'active' || values.description?.length>=5){\n values.description = assetDetails.assetCustomFields?.additional_info === 'active' ? '' : values.description\n values.assetId = assetDetails.id\n values.customFieldId = assetDetails.assetCustomFields ? assetDetails.assetCustomFields.id : 0\n values.clearDownStatus = assetDetails.assetCustomFields?.additional_info === 'active' ? 'inactive' : 'active'\n values.assetDownCategory = assetDetails.assetCustomFields?.additional_info === 'active' ? '' : values.category\n values.mastertag=assetDetails?.mastertag;\n values.orgId=assetDetails?.orgId;\n values.orgName=assetDetails?.orgName;\n values.assetName=assetDetails?.name || assetDetails?.mastertag;\n props.submitAssetDown(onFinishSuccess, onFinishFailure, values);\n }\n else{\n message.error(\"Please enter atleast 5 characters\")\n inputRef.current?.focus();\n return\n }\n }\n const focusAddDescription=()=>{\n inputRef.current?.focus();\n return\n }\n const onFinishSuccess = (description:any) => { \n showSubMenuVisibilty('reportAssetDown')\n props.getFleetOverview(null, null, 'map', null, 'useEffect')\n form.resetFields() \n message.success(\"SUCCESS\"); \n }\n\n const onFinishFailure = (error: any) => { \n console.log(error);\n message.error(\"Error while submitting, please try again later or contact system admin\")\n }\n\n\n\n const closeOverlayToolTip = () => {\n props.toggleMarkerToolTip(false)\n setPinnedSignals(null)\n props.fleetOverviewState.tooltip.overlay.setMap(null)\n \n }\n\n const getPrefereSignalsSuccess = (response: any) => {\n const { assetId, signals = []} = response; \n let assets: any; \n if(signals.length > 0) { \n setPinnedSignals(formatSignals(signals)) \n }\n }\n\n const getAssetDetails = (assetId:string) => {\n\n if(assetId){\n if (assetId.length === 36) {\n props.fleetOverviewState.fleet.filteredAssets.forEach(function(asset:any, index:number) {\n if (asset.id === assetId) {\n let tmpAsset = Object.assign({}, asset)\n if(asset.assetCustomFields){\n tmpAsset.location = tzlookup(asset.position.latitude, asset.position.longitude);\n\n tmpAsset.assetCustomFields = JSON.parse(asset.assetCustomFields);\n tmpAsset.zone=moment.tz(tmpAsset.location).format('z');\n if(Number.isSafeInteger(parseInt(tmpAsset.zone))){\n tmpAsset.zone=tmpAsset.location;\n }\n }\n props.updateToolTipAssetDetails(tmpAsset) \n setAssetDetails(tmpAsset) \n props.getPreferedSignals(getPrefereSignalsSuccess, assetId);\n props.fleetOverviewState.tooltip.overlay.draw();\n \n if(tmpAsset.assetCustomFields?.additional_info === 'active'){\n form.setFieldsValue({\n description: tmpAsset.assetCustomFields?.field_value,\n category:tmpAsset.assetCustomFields?.additional_properties?.AssetDownCategory\n });\n }else{\n form.resetFields();\n }\n \n \n }\n });\n } \n }\n\n }\n\n useEffect(() => {\n getAssetDetails(props.fleetOverviewState.tooltip.marker?.id)\n \n }, [props.fleetOverviewState.tooltip.marker])\n\n\n\n const goToAsset = (\n e: any, \n mastertag: string, \n ) => {\n e.preventDefault();\n history.push(\"/assets/\" + mastertag);\n }; \n \n const FindAssetTimeZone = (coordinates: any, updated_at: any) => {\n var locale_date_str = new Date(updated_at).toLocaleString(\"en-US\",\n {\n timeZone: tzlookup(coordinates.latitude, coordinates.longitude) \n });\n var geo_local_date_str = new Date(locale_date_str);\n return geo_local_date_str;\n }\n const AssetIconSelected = (icon: any) => {\n // console.log(icon);\n };\n const onCategoryClick = (e:any) => {\n e.nativeEvent.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n };\n return (\n \n <div ref={wrapperRef} className=\"box map-marker-tooltip\" >\n <Row style={{ }} justify=\"start\" align=\"top\" className={showSubMenu.iconSelection ? 'show-submenu' : 'hide-submenu'} >\n <Col span={24}>\n <Divider style={{ margin: 0, padding: 0}} orientation=\"center\" plain>\n Select Asset Icon\n </Divider>\n </Col>\n \n <Col style={{marginTop: '5px'}} span={24}>\n <Row justify=\"center\" align=\"top\">\n {\n Object.values(assetsIcons).map((icon:any) => {\n return (\n <Col key={icon.name} onClick={() => AssetIconSelected(icon.name)} className=\"icon-col\" span={4}>\n <Icon style={{fontSize: '30px'}} component={icon.icon} />\n </Col>\n )\n })\n }\n </Row>\n </Col>\n\n </Row>\n\n <Row style={{ }} justify=\"start\" align=\"top\" className={showSubMenu.reportAssetDown ? 'show-submenu' : 'hide-submenu'}>\n <Col span={24}>\n <Divider style={{ margin: 0, padding: 0}} orientation=\"center\" plain>\n Flag Asset Down\n </Divider>\n </Col>\n\n <Col style={{marginTop: '5px'}} span={24}>\n <Row justify=\"center\" align=\"top\">\n <Col className=\"asset-down-form-col\" span={24}>\n <Form\n form={form}\n onFinish={submitAssetDown}\n autoComplete=\"off\"\n style={{padding: \"0px\", margin:\"0px\" }}\n initialValues={{\n [\"category\"]: \"mechanical\" \n }} \n >\n <Form.Item name=\"category\" label=\"Category\">\n <Select\n style={{width: \"100%\", fontSize:\"15px\"}}\n onMouseDown={onCategoryClick}\n disabled={\n assetDetails?.assetCustomFields?.additional_info ===\n \"active\"\n ? true\n : false\n }\n >\n <Option value=\"mechanical\">Mechanical</Option>\n <Option value=\"accident\">Accident</Option>\n <Option value=\"other\">Other</Option>\n </Select>\n </Form.Item>\n <Form.Item\n name=\"description\"\n style={{padding: \"0px\", marginTop:\"15px\" }}\n >\n <TextArea \n style={{width: \"100%\", fontSize:\"15px\", color:\"rgba(0,0,0,.65)\"}} \n placeholder=\"Add Description (Mandatory)\"\n disabled={assetDetails?.assetCustomFields?.additional_info === 'active' ? true : false}\n rows={3}\n maxLength={255}\n ref={inputRef}\n onClick={focusAddDescription}\n className=\"assetDownDesc\"\n />\n </Form.Item>\n\n { assetDetails?.assetCustomFields?.additional_info === 'active' &&\n <div style={{ marginTop: '-10px' }}>\n <span><b>Reporter Name:</b> {assetDetails?.assetCustomFields?.reportername}</span><br />\n\n <span><b>Reported At ({assetDetails.zone}):</b> {moment(FindAssetTimeZone(assetDetails?.position, assetDetails?.assetCustomFields?.updated_at)).format('MMM Do YYYY, h:mm:ss A')}</span>\n </div>\n }\n\n <Form.Item\n style={{padding: \"0px\", margin:\"0px\", paddingTop: '5px'}}\n >\n <Button\n htmlType=\"submit\"\n block\n type=\"primary\"\n danger\n style={{padding: \"0px\", margin:\"0px\",\n background: assetDetails?.assetCustomFields?.additional_info === 'active' ? '#1eb17f' : '#ff3333', borderColor: assetDetails?.assetCustomFields?.additional_info === 'active' ? '#1eb17f' : '#ff3333',}}\n disabled={!props.context.user.contextUserIsAdmin && assetDetails?.assetCustomFields?.additional_info === 'active'}\n >\n {\n assetDetails?.assetCustomFields?.additional_info === 'active' ? 'Remove Flag' : 'Add Flag'\n }\n </Button>\n </Form.Item>\n \n </Form>\n </Col>\n </Row>\n </Col>\n </Row>\n\n <Row justify=\"start\" align=\"top\" style={{padding: \"0px\", margin:\"0px\"}}>\n <Col span={24}>\n <Card \n size='small'\n style={{ width: '100%' }}\n >\n <Tooltip title=\"Close\">\n <Button\n type=\"primary\"\n danger\n shape=\"circle\"\n onClick={closeOverlayToolTip}\n icon={<CloseOutlined />}\n style={{position: 'absolute', marginTop: '-30px', right: '-20px'}}\n />\n </Tooltip> \n\n <Row>\n <Col className=\"tooltip-header\" span={24}>\n <Row>\n <Col span={20}>\n <span className=\"map-tooltip-title\" onClick={(e) => {goToAsset(e, assetDetails?.mastertag)}}>{assetDetails?.name || assetDetails?.mastertag} </span>\n <br />\n <span className=\"map-tooltip-org\"> {assetDetails?.orgName} </span> \n </Col>\n\n <Col /* onClick={() => showSubMenuVisibilty('iconSelection')} */ style={{ width: '100%'}} span={4} className=\"assets-list-connection-status\">\n {/* <img width=\"35\" src={onlineIcon} title=\"Online\" alt=\"\"/> */}\n {/* <img width=\"35\" src={offlineIcon} title=\"Offline\" alt=\"\"/> */}\n {\n assetDetails?.connectionStatus === \"online\" &&\n <Tooltip title=\"Asset is Online\">\n <Icon style={{fontSize: '30px', stroke:\"#52D298\", color: \"transparent\"}} component={getAssetIcon(assetDetails?.iconName)} />\n \n </Tooltip>\n }\n {\n assetDetails?.connectionStatus !== \"online\" &&\n <Tooltip title=\"Asset is Offline\">\n <Icon style={{fontSize: '30px', stroke:\"#bfbfbf\", strokeWidth: 1, color: \"transparent\"}} component={getAssetIcon(assetDetails?.iconName)} />\n </Tooltip> \n }\n </Col>\n\n { pinnedSingals && \n <Col span={24}>\n {/* <Divider style={{ marginTop: '15px', padding: 0}} orientation=\"center\" plain>\n Pinned Signals List\n </Divider> */}\n <br />\n <span style={{ whiteSpace: \"pre-line\" }} className=\"map-tooltip-subtitle\"> { pinnedSingals.split(\"<br/>\").join(\"\\n\") } </span>\n </Col>\n }\n </Row>\n \n \n </Col>\n\n \n \n {/* <Col style={{ marginTop: 0, padding: 0}} span={24}>\n <Divider style={{ margin: 0, padding: 0}} orientation=\"center\" plain>\n Alarms Details\n </Divider>\n </Col> */}\n\n <Col className=\"tooltip-links\" span={24}>\n <Row gutter={8} className=\"assets-list-status-line\">\n <AssetStatus\n context={props.context}\n mastertag={assetDetails?.mastertag}\n alertType=\"signal-alarms\"\n status=\"Critical\"\n icon={criticalIcon}\n count={assetDetails?.recentCriticalCount}\n />\n <AssetStatus\n context={props.context}\n mastertag={assetDetails?.mastertag}\n alertType=\"signal-alarms\"\n status=\"Warning\"\n icon={warningIcon}\n count={assetDetails?.recentWarningCount}\n />\n <AssetStatus \n context={props.context}\n mastertag={assetDetails?.mastertag}\n alertType=\"signal-alarms\"\n status=\"Info\"\n icon={infoIcon} \n count={assetDetails?.recentInfoCount} \n />\n <AssetStatus \n context={props.context}\n mastertag={assetDetails?.mastertag}\n alertType=\"dm1-faults\" \n status=\"dm1\"\n icon={dm1Icon} \n count={assetDetails?.recentDm1Count} \n />\n \n </Row>\n </Col>\n \n { assetDetails && props.serviceTruckState.serviceTruckList.assets && (props.serviceTruckState.serviceTruckList.assets.length > 0) &&\n <>\n <Col style={{ marginTop: '2px', padding: 0}} span={24}>\n <Divider style={{ margin: 0, padding: 5}} orientation=\"center\" plain>\n Nearest 3 Service Trucks\n </Divider>\n </Col>\n\n \n <Col style={{ marginTop: '2px', padding: 0}} span={24}>\n <Row className='closest-service-truck-list' >\n <Col span={18}><h4 style={{color: '#349beb'}}>Operator</h4></Col>\n <Col span={6}><h4 style={{color: '#349beb'}}>Distance</h4></Col>\n {\n getTopThreeGeoTabAssets(assetDetails, props.serviceTruckState.serviceTruckList.assets).map((geotabAsset: any) => (\n <GeotabAssetInfo GeotabAsset={geotabAsset} key={geotabAsset.VIN} />\n ))\n }\n </Row>\n </Col>\n </>\n }\n\n\n <Col style={{ marginTop: '5px', padding: 0}} span={24}>\n <Divider style={{ margin: 0, padding: 5}} />\n </Col>\n\n <Col span={24} style={{padding: \"0px\", margin:\"0px\", paddingBottom: \"2px\"}} >\n \n <Tooltip\n title={\n assetDetails?.assetCustomFields?.additional_info !== 'active' && \"This action will mark the asset as down and necessitate the inclusion of an issue description for incident report\"}\n >\n <Button\n block\n type=\"dashed\"\n danger\n style={{padding: \"0px\", margin:\"0px\"}}\n onClick={() => showSubMenuVisibilty('reportAssetDown')}\n >\n { assetDetails?.assetCustomFields?.additional_info === 'active' ? (\n <span>View Asset Down Info</span>\n ): (\n <span>Report Asset Down</span> \n )\n }\n \n </Button>\n </Tooltip>\n </Col>\n\n </Row>\n\n \n\n \n </Card>\n </Col>\n </Row>\n \n </div>\n\n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState,\n serviceTruckState: state.serviceTruckReducer.serviceTruckState,\n permissions: state.contextReducer.data,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(MapToolTip);","import { AssetOverview, ServiceTruck } from \"../FleetOverview2/models\";\n\nexport function getTopThreeGeoTabAssets(asset: AssetOverview, geotabAssets:ServiceTruck[]){\n\n if(asset.position && geotabAssets.length > 0){\n \n let closeGeoTabAssets:any = [];\n let assetLatLng = new google.maps.LatLng(asset.position?.latitude, asset.position?.longitude);\n\n geotabAssets.forEach((geotabAsset:ServiceTruck) => {\n\n let geotabAssetLatLng = new google.maps.LatLng(geotabAsset.latitude, geotabAsset.longitude);\n let distance:number = google.maps.geometry.spherical.computeDistanceBetween(assetLatLng, geotabAssetLatLng) * (0.000621371);\n let newEntry = {...geotabAsset, distance: distance};\n\n closeGeoTabAssets.push(newEntry);\n });\n\n closeGeoTabAssets = closeGeoTabAssets.sort((a:any,b:any) => a.distance - b.distance);\n\n let topThreeGeoTabAssets = [closeGeoTabAssets[0], closeGeoTabAssets[1], closeGeoTabAssets[2]];\n\n // console.log(topThreeGeoTabAssets);\n return topThreeGeoTabAssets;\n }\n\n return [];\n}","\nimport React, { useContext } from \"react\"\nimport { useEffect, useState } from \"react\"\nimport ReactDOM from \"react-dom\"\nimport MapContext from \"./MapContext\"\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\ninterface OverLayProps {\n // children: JSX.Element|JSX.Element[],\n children?: React.ReactNode\n context: any,\n permissions: any,\n fleetOverviewState: any,\n geofencesList: any,\n permissionsset: any,\n toggleMarkerToolTip: Function,\n updateToolTipOverlay: Function\n\n}\n\n\nclass OverlayViewContainer extends React.Component<OverLayProps> {\n\n public overlay:any = new google.maps.OverlayView();\n public el:any = null; \n \n componentWillUnmount() {\n this.overlay.setMap(null);\n this.props.toggleMarkerToolTip(false)\n if(this.props.fleetOverviewState.tooltip.overlay){\n this.props.fleetOverviewState.tooltip.overlay.setMap(null)\n }\n delete this.overlay\n }\n\n render() {\n\n return (\n <MapContext.Consumer>\n {(map: any) => {\n if (map && this.props.fleetOverviewState.tooltip.marker?.position && this.props.fleetOverviewState.tooltip.visibility) {\n \n this.el = this.el || createOverlayElement();\n\n let me = this;\n\n this.overlay.onAdd = function() {\n me.props.toggleMarkerToolTip(true)\n this.getPanes().floatPane.appendChild(me.el);\n };\n\n this.overlay.onRemove = function() {\n if (me.el.parentElement) {\n me.props.toggleMarkerToolTip(false)\n me.el.parentElement.removeChild(me.el);\n }\n };\n\n this.overlay.draw = function() {\n const divPosition = this.getProjection().fromLatLngToDivPixel(\n me.props.fleetOverviewState.tooltip.marker.position\n );\n\n var divWidth = document.getElementsByClassName(\"map-marker-overview\")[0]?.clientWidth;\n var divHeight = document.getElementsByClassName(\"map-marker-overview\")[0]?.clientHeight;\n // console.log(`divWidth`, divWidth)\n // console.log(`divHeight`, divHeight)\n\n //TODO: if the opened tooltip is outside of map borders then move the map to fit the tooltip \n\n me.el.style.left = (divPosition.x - (divWidth/2)) + 'px';\n me.el.style.top = (divPosition.y - (divHeight + (divHeight * 0.12))) + 'px';\n\n };\n \n if(this.overlay){\n this.overlay.setMap(map.map);\n this.props.updateToolTipOverlay(this.overlay)\n return ReactDOM.createPortal( this.props.children, this.el);\n } else {\n return null\n }\n\n \n } else {\n return null;\n }\n }}\n </MapContext.Consumer>\n );\n }\n}\n\n\nfunction createOverlayElement() {\n const el = document.createElement('div');\n el.classList.add(\"map-marker-overview\");\n el.style.position = 'relative';\n el.style.display = 'inline-block';\n el.style.margin = '0 0 0 0';\n el.style.padding = '0 0 0 0';\n el.style.width = '350px';\n el.style.zIndex = '19999';\n return el;\n}\n\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState,\n geofencesList: state.geofencesReducer.geofencesState.geofencesList,\n permissionsset: state.permissionsReducer \n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OverlayViewContainer);","import React, { useEffect, useState, useCallback, CSSProperties } from \"react\";\nimport ReactDOMServer from 'react-dom/server'\nimport { Popover, Tooltip, Button } from \"antd\";\n\nimport { BorderOuterOutlined, FilterOutlined, RadarChartOutlined, UnorderedListOutlined } from \"@ant-design/icons\";\nimport Icon from \"@ant-design/icons\";\nimport { ReactComponent as TractorIconBlack } from \"../../assets/images/tractor-black.svg\";\nimport { ReactComponent as TractorIconWhite } from \"../../assets/images/tractor.svg\";\nimport { ReactComponent as geofenceIcon } from \"../../assets/images/geofenceIcon.svg\";\nimport { ReactComponent as moveGeofence } from \"../../assets/images/move-geofence.svg\";\nimport { ReactComponent as moveGeofenceActive } from \"../../assets/images/move-geofence-active.svg\";\nimport { ReactComponent as markerIcon } from \"../../assets/images/marker.svg\";\nimport { ReactComponent as markerActive } from \"../../assets/images/markerActive.svg\";\nimport { ReactComponent as zoomInIcon } from \"../../assets/images/zoomin.svg\";\nimport { ReactComponent as maximizeIcon } from \"../../assets/images/maximize.svg\";\nimport { ReactComponent as serviceTruck } from \"../../assets/images/service-truck.svg\";\nimport { ReactComponent as serviceTruckActive } from \"../../assets/images/service-truck-active.svg\";\nimport { ReactComponent as expandIcon } from \"../../assets/images/expand.svg\";\nimport { ReactComponent as KomatsuIconBlack } from \"../../assets/images/komatsu-black.svg\";\nimport { ReactComponent as KomatsuIconWhite } from \"../../assets/images/komatsu.svg\";\n\n\nimport AssetDrawer from \"./overlays/AssetDrawer\";\nimport FilterPanel from \"./overlays/filterPanel/FilterPanel\";\nimport { markerTooltipFromAsset, markerTooltipFromGeotabAsset } from \"./overlays/MarkerTooltip\";\n\nimport { getGeotabPin, getPin } from \"./map-pins\";\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport usePolling from \"../../lib/use-polling\";\nimport { Map, Marker, MapActions } from \"../../sharedComponents/GoogleMap\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport history from '../../utils/history';\nimport { formatSignals, getOrgPermissionByName, getPermissions } from \"../../utils/commonHelpers\";\nimport FenceAssets from \"../GeoFences/FenceAssets\";\nimport GeofenceMaint from \"../GeoFences/GeofenceMaint\";\nimport FenceListDrawer from \"../GeoFences/FenceListDrawer\";\nimport { GeofenceTheme } from \"../../sharedComponents/GoogleMap/geofenceStyle\";\nimport { DEFAULT_MAP_OPTIONS, DEFAULT_MAP_OPTIONS_FOR_GEOFENCING } from \"../../sharedComponents/GoogleMap/Map\";\nimport { getBoundForInitialZoom } from \"../GeoFences/geofenceHelper\";\nimport { ServiceTruckMarker } from \"../../sharedComponents/GoogleMap/MarkerManager\";\nimport ServiceTrucksListDrawer from \"../ServiceTrucks/ServiceTrucksListDrawer\";\nimport ServiceTrucksMaint from \"../ServiceTrucks/ServiceTrucksMaint\";\nimport MapToolTip from \"./MapToolTip\";\nimport OverlayViewContainer from \"./OverlayViewContainer\";\ninterface Prop { \n getFleetOverview: Function, \n mapsAssetDrawerClusterOpen: Function,\n mapsAssetDrawerAssetSearchOpen: Function,\n mapsAssetDrawerClose: Function,\n fleetOverviewState: any,\n serviceTruckState: any,\n context: any,\n permissions: any,\n mapMode?: \"satellite\" | \"roadmap\",\n getPreferedSignals: Function,\n getServiceTrucks: Function \n toggleMarkerToolTip: Function,\n updateToolTipMarkerDetails: Function \n}\n\n\ninterface Props {\n getGeoFences: Function,\n getAllAssetsList: Function,\n openDrawer:Function,\n openFenceListDrawer:Function,\n setCurShape:Function,\n addShape:Function,\n setMap:Function,\n setServiceTruckMap:Function,\n setFleetOverviewMap:Function,\n setDrawingManager:Function,\n setMarkerManager:Function,\n geofencesList: any,\n removeShapesFromMap:Function,\n addShapesToMap:Function\n updateShapeOnMap:Function\n clearGeoFencesState: Function,\n openServiceTruckDrawer: Function,\n uiPreferences: any\n}\n\n\nconst FleetOverview = (props:(Prop & Props)) => { \n\n const [mapActions, setMapActions] = useState<MapActions>();\n const [pollingEnabled, setPollingEnabled] = useState<boolean>(false);\n const [showServiceTrucks, setShowServiceTrucks] = useState <boolean>(false);\n const [serviceTruckMarkers, setserviceTruckMarkers] = useState < ServiceTruckMarker []>([]);\n const [isShowingGeofences, setShowingGeofenes] = useState(false);\n const [isGeofencesArrangeEnabled, setGeofenceArrangement] = useState(false);\n const [isShowingGeofencesMarkers, setShowingGeofenesMarkers] = useState(false);\n const result = getPermissions(props.permissions.permissions.assets);\n let isread = result[1];\n \n\n const geofencePermissions = getPermissions(props.permissions.permissions.geofencing);\n let canGeofencingCreate = geofencePermissions[0];\n let canGeofencingRead = geofencePermissions[1];\n let canGeofencingEdit = geofencePermissions[2];\n\n const { fenceList, fenceListLoaded, map, drawingManager, markerManager } = props.geofencesList;\n const { orgLevelPermissions } = props.permissions.permissions\n\n const geofenceOptions = {\n openDrawer: props.openDrawer,\n setCurShape: props.setCurShape,\n addShape: props.addShape,\n setMap: props.setMap,\n setDrawingManager: props.setDrawingManager,\n setMarkerManager: props.setMarkerManager,\n canGeofencingEdit: canGeofencingEdit,\n geofencesArrangeEnabled: isGeofencesArrangeEnabled\n }\n\n const toolTipOptions = {\n tooltipVisibility: props.fleetOverviewState.tooltip.visibility,\n toggleMarkerToolTip: props.toggleMarkerToolTip,\n updateToolTipMarkerDetails: props.updateToolTipMarkerDetails \n }\n\n const serviceTruckOptions = {\n setServiceTruckMap: props.setServiceTruckMap,\n }\n\n const fleetOverviewOptions = {\n setFleetOverviewMap: props.setFleetOverviewMap,\n }\n\n const hasGeoTabAccess = getOrgPermissionByName(orgLevelPermissions, 'GeotabFeature', 'AllowGeoTabFeatureAccess')\n\n const loadFleetOverview = (originator: string) => {\n if (originator === \"usePolling\" && !pollingEnabled) {\n //\n //Prevent usePolling and useEffect fireing the API in the same time on component load event\n //\n return;\n }\n props.mapsAssetDrawerClose();\n props.getFleetOverview(loadFleetOverviewSuccess(originator), null, \"map\", null, originator,props.uiPreferences);\n }\n \n const loadFleetOverviewSuccess = (originator: string) => { \n if (originator === \"useEffect\") {\n setPollingEnabled(true);\n }\n }\n\n const getFleetMarkers = (assets:any): Marker[] => {\n return assets.map(assetToMarker);\n }\n\n const assetToMarker = (asset:any, index:number): any => {\n return {\n id: asset.id,\n position: {\n lat: asset.position.latitude,\n lng: asset.position.longitude,\n }, \n tooltipHandler: \"[data-id=map-tooltip-handler]\",\n icon: getPin(asset)\n };\n } \n\n const tooltipGenerator = () => {\n const assetId:string = window.sessionStorage.getItem(\"mapTooltipGenerator\") || \"\";\n //\n // is assetId uuid?\n //\n if (assetId.length === 36) {\n props.fleetOverviewState.fleet.filteredAssets.forEach(function(asset:any, index:number) {\n if (asset.id === assetId) { \n window.sessionStorage.setItem(\"mapTooltipGenerator\", ReactDOMServer.renderToString(markerTooltipFromAsset(asset, props.serviceTruckState.serviceTruckList.assets))); \n props.getPreferedSignals(getPrefereSignalsSuccess, assetId);\n }\n });\n } \n else\n {\n props.serviceTruckState.serviceTruckList.assets.forEach((geotabAsset:any) => {\n if(geotabAsset.VIN === assetId){\n window.sessionStorage.setItem(\"mapTooltipGenerator\", ReactDOMServer.renderToString(markerTooltipFromGeotabAsset(geotabAsset))); \n }\n })\n }\n\n\n } \n\n const getPrefereSignalsSuccess = (response: any) => {\n const { assetId, signals = []} = response; \n let assets: any; \n if(signals.length > 0) { \n if(document.querySelectorAll('[data-id=pinned-signals-tooltip]').length > 0) {\n const value = formatSignals(signals);\n document.querySelectorAll('[data-id=pinned-signals-tooltip]')[0].innerHTML = value; \n }\n }\n }\n\n const tooltipLink = () => {\n const link:string = window.sessionStorage.getItem(\"mapTooltipLink\") || \"\";\n\n if ((link || \"\") !== \"\") { \n window.sessionStorage.removeItem(\"mapTooltipLink\"); \n if (link.startsWith(\"/alerts\")) {\n const linkArr = link.split(\"/\");\n history.push({\n pathname: linkArr[1],\n state: [{ \n mode: linkArr[2], \n mastertag: linkArr[3], \n status: linkArr.length === 5 ? linkArr[4] : \"\"\n }]\n }); \n }\n else {\n history.push(link);\n }\n } \n }\n \n usePolling(\n () => {\n loadFleetOverview(\"usePolling\");\n }, \n appConfigs.app.fleetOverview.mapDataPoolingRate\n );\n\n const loadFleetOverviewCallback = useCallback(loadFleetOverview, []) \n\n useEffect(() => {\n props.getGeoFences();\n props.getAllAssetsList();\n if(!props.serviceTruckState.serviceTruckList.assets.length && hasGeoTabAccess){\n props.getServiceTrucks();\n }\n return () => {\n props.clearGeoFencesState();\n }\n }, []) \n\n useEffect(() => {\n loadFleetOverviewCallback(\"useEffect\");\n },\n [loadFleetOverviewCallback]\n );\n\n const decideMapWidth = (): CSSProperties => { \n return {\n height: \"100%\",\n width: \"100%\",\n position: \"absolute\"\n } \n } \n\n const serviceTruckToMarker = (asset:any, index:number): any => {\n return {\n id: asset.id,\n position: {\n lat: asset.latitude,\n lng: asset.longitude,\n }, \n tooltipHandler: \"[data-id=map-tooltip-handler]\",\n icon: getGeotabPin(),\n VIN: asset.VIN\n };\n } \n \n const getserviceTruckMarkers = (assets:any): ServiceTruckMarker[] => {\n if(!assets){\n return [];\n }\n \n return assets.map(serviceTruckToMarker);\n }\n\n useEffect(() => {\n //Check permission\n if (hasGeoTabAccess) {\n const intervalId = setInterval(() => {\n props.getServiceTrucks();\n }, appConfigs.app.fleetOverview.mapGeoTabDataPoolingRate);\n\n return () => clearInterval(intervalId);\n }\n }, [props.serviceTruckState.serviceTruckList.assets])\n\n\n const toggleserviceTruckMarkers = () => {\n setShowServiceTrucks(!showServiceTrucks);\n }\n\n useEffect(() => {\n\n if (hasGeoTabAccess) {\n if (!showServiceTrucks) {\n setserviceTruckMarkers([])\n } else {\n setserviceTruckMarkers(getserviceTruckMarkers(props.serviceTruckState.serviceTruckList.assets));\n }\n }\n\n }, [showServiceTrucks]);\n\n \n\n const toggleGeofences = () => {\n if (isShowingGeofences) {\n props.removeShapesFromMap();\n map.setMapTypeId(props.mapMode || \"roadmap\")\n } else {\n map.setMapTypeId('roadmap')\n props.addShapesToMap();\n }\n setShowingGeofenesMarkers(false);\n setTimeout(() => {\n setShowingGeofenes(!isShowingGeofences);\n }, 10)\n \n }\n \n\n const toggleGeofencesMarkers = () => {\n setShowingGeofenesMarkers(!isShowingGeofencesMarkers);\n }\n\n\n const toggleGeofencesArrange = () => {\n setGeofenceArrangement(!isGeofencesArrangeEnabled);\n }\n\n const zoomToFixGeofences = () => {\n map.setZoom(map.getZoom() + 1)\n map.fitBounds(getBoundForInitialZoom(fenceList))\n }\n\n const zoomToFixServiceTrucks = () => {\n\n if (serviceTruckMarkers.length > 0) {\n\n map.setZoom(map.getZoom() + 1)\n\n let bounds = new google.maps.LatLngBounds();\n \n serviceTruckMarkers.map(marker => {\n bounds.extend(new google.maps.LatLng(marker.position.lat, marker.position.lng));\n });\n \n map.fitBounds(bounds)\n }\n }\n \n useEffect(() => {\n\n if (map&& isShowingGeofences) {\n map.setOptions({ ...DEFAULT_MAP_OPTIONS_FOR_GEOFENCING, styles: GeofenceTheme });\n } else if (map && !isShowingGeofences) {\n map.setOptions({ ...DEFAULT_MAP_OPTIONS, styles: [] });\n }\n\n if (drawingManager) {\n if (canGeofencingCreate) {\n drawingManager.showHideContols(map, isShowingGeofences)\n } else {\n drawingManager.showHideContols(map, canGeofencingCreate)\n }\n }\n\n }, [isShowingGeofences, isShowingGeofencesMarkers]);\n\n\n return ( \n <div style={decideMapWidth()}>\n\n <Map\n markers={!isShowingGeofences || isShowingGeofencesMarkers ? getFleetMarkers(props.fleetOverviewState.fleet.filteredAssets) : []}\n clusterMarkers={!isShowingGeofencesMarkers}\n onClusterClick={(ids: any, actions: any) => {\n props.mapsAssetDrawerClusterOpen(ids, actions.zoomTo,);\n }}\n mapActionsRef={setMapActions}\n mapOptions={{ mapTypeId: props.mapMode || \"roadmap\" }}\n polyline={false}\n drawOverlays={isShowingGeofences}\n geofences={fenceList}\n geofenceOptions={geofenceOptions}\n toolTipOptions={toolTipOptions}\n serviceTruckOptions={serviceTruckOptions}\n fleetOverviewOptions={fleetOverviewOptions}\n serviceTruckMarkers={serviceTruckMarkers}\n >\n <OverlayViewContainer>\n <MapToolTip />\n </OverlayViewContainer> \n </Map>\n\n \n \n\n {canGeofencingRead &&\n <>\n <FenceListDrawer></FenceListDrawer>\n <GeofenceMaint></GeofenceMaint>\n <FenceAssets></FenceAssets>\n\n\n <Tooltip title={`${!isShowingGeofences ? 'Show' : 'Hide'} geofences`} placement=\"topLeft\">\n <Button\n style={{\n backgroundColor: isShowingGeofences ? '#00a628' : 'white',\n color: isShowingGeofences ? 'white' : 'grey',\n }}\n className='geofenceButton'\n size=\"large\"\n shape=\"circle\"\n icon={<Icon type=\"setting\" component={geofenceIcon} style={{fontSize: 24}} />}\n onClick={() => {\n toggleGeofences();\n }}\n />\n </Tooltip>\n\n <Tooltip title=\"Enable Geofence Rearrangement\" placement=\"bottom\">\n <Button\n style={{\n backgroundColor: isGeofencesArrangeEnabled ? '#00a628' : 'white',\n }}\n className={`${isShowingGeofences ? 'rearrangeGeofenceEnabled': 'rearrangeGeofenceDisabled'}`}\n type=\"default\"\n onClick={() => { toggleGeofencesArrange() }}\n size=\"large\"\n shape=\"circle\"\n icon={<Icon component={isGeofencesArrangeEnabled ? moveGeofenceActive : moveGeofence} style={{fontSize: 24, marginTop: 1 }} />}\n ></Button>\n </Tooltip>\n\n <Tooltip title=\"Geofences List\" placement=\"bottom\">\n <Button\n className={`${isShowingGeofences ? 'geofenceEnabled': 'geofenceDisabled'}`}\n type=\"default\"\n onClick={() => { props.openFenceListDrawer() }}\n size=\"large\"\n shape=\"circle\"\n icon={ <UnorderedListOutlined style={{ fontSize: '20px', textAlign: 'center' }} /> }\n ></Button>\n </Tooltip>\n\n <Tooltip title={`${!isShowingGeofencesMarkers ? 'Show' : 'Hide'} assets`} placement=\"bottom\">\n <Button\n style={{\n backgroundColor: isShowingGeofencesMarkers ? '#00a628' : 'white',\n }}\n className={`${isShowingGeofences ? 'showMarkerEnabled': 'showMarkerDisabled'}`}\n type=\"default\"\n onClick={() => { toggleGeofencesMarkers() }}\n size=\"large\"\n shape=\"circle\"\n icon={<Icon component={isShowingGeofencesMarkers ? markerActive : markerIcon} style={{fontSize: 24 }} />}\n ></Button>\n </Tooltip>\n\n\n <Tooltip title={`Zoom to fit geofences`} placement=\"bottom\">\n <Button\n className={`${isShowingGeofences ? 'zoomToFitGeofencesEnabled': 'zoomToFitGeofencesDisabled'}`}\n type=\"default\"\n onClick={() => { zoomToFixGeofences() }}\n size=\"large\"\n shape=\"circle\"\n disabled={!fenceList.length}\n icon={<Icon component={maximizeIcon} style={{fontSize: 22, marginRight: 1, marginTop: 2 }} />}\n ></Button>\n </Tooltip>\n </>\n }\n\n\n {hasGeoTabAccess &&\n \n <>\n <ServiceTrucksListDrawer></ServiceTrucksListDrawer>\n <ServiceTrucksMaint></ServiceTrucksMaint>\n \n <Tooltip\n title={`${!showServiceTrucks ? 'Show' : 'Hide'} Service Trucks`}\n placement=\"bottomLeft\"\n >\n <Button\n style={{\n backgroundColor: showServiceTrucks ? '#00a628' : 'white',\n }}\n size=\"large\"\n shape=\"circle\"\n className=\"serviceTruckBtn\"\n icon={<Icon component={showServiceTrucks ? serviceTruckActive : serviceTruck} style={{fontSize: 22 }} />}\n onClick={() => {\n toggleserviceTruckMarkers();\n }}\n />\n </Tooltip>\n \n <Tooltip title={`Zoom to fit service trucks`} placement=\"bottom\">\n <Button\n className={`${showServiceTrucks ? 'zoomToFitServiceTrucksEnabled': 'zoomToFitServiceTrucksDisabled'}`}\n type=\"default\"\n onClick={() => { zoomToFixServiceTrucks() }}\n size=\"large\"\n shape=\"circle\"\n disabled={!props.serviceTruckState.serviceTruckList?.assets?.length}\n icon={<Icon component={maximizeIcon} style={{fontSize: 22, marginRight: 1, marginTop: 2 }} />}\n ></Button>\n </Tooltip>\n \n \n <Tooltip title=\"Service trucks list\" placement=\"bottom\">\n <Button\n className={`${showServiceTrucks ? 'serviceTrucksEnabled': 'serviceTrucksDisabled'}`}\n type=\"default\"\n onClick={() => { props.openServiceTruckDrawer() }}\n size=\"large\"\n shape=\"circle\"\n icon={ <UnorderedListOutlined style={{ fontSize: '20px', textAlign: 'center' }} /> }\n ></Button>\n </Tooltip>\n \n </>\n \n }\n <Popover\n content={\n <FilterPanel \n filters={props.fleetOverviewState.filters}\n filterCounts={props.fleetOverviewState.filterCounts}\n mapActions={mapActions}\n />\n }\n placement=\"left\"\n >\n <Button\n data-id=\"map-filter\"\n size=\"large\"\n icon={<FilterOutlined />}\n shape=\"circle\"\n ghost={ \n (props.fleetOverviewState.filters.critical && (props.fleetOverviewState.filterCounts.critical > 0)) || (props.fleetOverviewState.filters.warning && (props.fleetOverviewState.filterCounts.warning > 0)) ||\n (props.fleetOverviewState.filters.info && (props.fleetOverviewState.filterCounts.info > 0)) || (props.fleetOverviewState.filters.dm1 && (props.fleetOverviewState.filterCounts.dm1 > 0))\n } \n />\n </Popover>\n \n <Tooltip \n title=\"Asset List\" \n placement=\"left\"\n >\n <Button\n data-id=\"map-asset-search\"\n size=\"large\"\n shape=\"circle\"\n icon={\n (props.context.appContext.orgId == '616c4c61-865d-11eb-871a-13cc80610287') ? (\n <Icon type=\"setting\" component={props.fleetOverviewState.assetDrawer.assetSearch.show ? KomatsuIconWhite : KomatsuIconBlack} style={{ fontSize: \"30px\", marginTop: '-3px' }} />\n ) : (\n <Icon type=\"setting\" component={props.fleetOverviewState.assetDrawer.assetSearch.show ? TractorIconWhite : TractorIconBlack} />\n )\n \n }\n onClick={() => {\n props.mapsAssetDrawerAssetSearchOpen();\n }}\n ghost={ \n (props.fleetOverviewState.assetSearchValue !== '' || Object.values(props.fleetOverviewState.assetSearchFilters).some(value => value === true))\n }\n />\n </Tooltip>\n\n <Tooltip \n title=\"Zoom to Fit\" \n placement=\"left\"\n >\n <Button\n data-id=\"map-zoom-to-fit\"\n size=\"large\"\n shape=\"circle\"\n icon={<Icon component={maximizeIcon} style={{fontSize: 22, marginRight: 1, marginTop: 2 }} />}\n onClick={() => {\n props.mapsAssetDrawerClose();\n if (mapActions) {\n mapActions.zoomToFit();\n }\n }}\n />\n </Tooltip>\n\n <Button\n data-id=\"map-tooltip-handler\"\n onClick={() => { \n tooltipLink();\n tooltipGenerator(); \n }}\n />\n {\n isread &&\n <AssetDrawer map={props.fleetOverviewState.map} mapActions={mapActions} />\n } \n \n \n </div> \n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState,\n serviceTruckState: state.serviceTruckReducer.serviceTruckState,\n uiPreferences: state.contextReducer.context.user.uiPreferences,\n permissions: state.contextReducer.data,\n geofencesList: state.geofencesReducer.geofencesState.geofencesList,\n permissionsset: state.permissionsReducer \n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(React.memo(FleetOverview));\n\n\n ","import { useEffect } from \"react\";\n\nexport type PollFunc = () => void;\nexport type AsyncPollFunc = () => Promise<void>;\n\nexport default function usePolling(\n pollFunc: PollFunc | AsyncPollFunc,\n msInterval: number\n) {\n useEffect(() => {\n let cancelPolling = false;\n\n const innerPoll = () => {\n // Prevent loop from setting another poll if the cancel happened while\n // the previous poll was already in progress\n if (cancelPolling) return;\n\n setTimeout(() => {\n if (cancelPolling) return;\n // Promise.resolve will unwrap any inner promises allowing this to work with both sync\n // and async functions.\n Promise.resolve(pollFunc()).then(innerPoll);\n }, msInterval);\n };\n\n innerPoll();\n return () => {\n cancelPolling = true;\n };\n }, [pollFunc, msInterval]);\n}\n","import { \n DBWidgetConfig, \n SignalCollection,\n Rule \n} from \"./models\";\n\nimport { AssetDashboardResponse, Datapoint } from \"./api\";\n\nexport function constructAssetData(\n apiResponse: any,\n mastertag: string\n): AssetDashboardResponse {\n function constructSignalCollection(datapoint: Datapoint): SignalCollection {\n const { _id, name, type, values = [] } = datapoint;\n return {\n id: _id,\n name,\n type,\n signals:\n values?.map((v) => {\n return {\n id: v._id,\n name: v.name || v.label,\n units: v.unit,\n };\n }) || [],\n };\n }\n\n const assets = apiResponse.data.assets[0];\n const datapoints = (JSON.parse(assets[\"datapoints\"]) || []) as Datapoint[];\n const widgets = (JSON.parse(assets[\"widgets\"]) || []) as DBWidgetConfig[];\n const rawRules = JSON.parse(assets[\"signalRules\"]) || [];\n const rulesList = rawRules?.flatMap((s: any) => s.conditions) || [];\n\n function formatRules(rule: any): Rule {\n const {\n CriticalHigh,\n WarningHigh,\n InfoHigh,\n InfoLow,\n WarningLow,\n CriticalLow,\n } = rule.Value;\n return {\n signalId: rule.SignalId,\n criticalHigh: CriticalHigh,\n warningHigh: WarningHigh,\n infoHigh: InfoHigh,\n infoLow: InfoLow,\n warningLow: WarningLow,\n criticalLow: CriticalLow,\n };\n }\n\n const rules: Rule[] = rulesList?.map(formatRules) || [];\n\n const { nickname } = assets;\n\n const asset: AssetDashboardResponse = {\n asset: {\n ...assets,\n id: assets.gatewayId,\n name: nickname,\n template: {\n signalCollections: datapoints.map(constructSignalCollection) || [],\n rules: rules,\n },\n widgets: widgets,\n },\n };\n return asset;\n}\n\n","import {\n SignalId,\n Template,\n Signal,\n SignalDatapoint,\n EventData,\n WidGetSignalConfig,\n SignalCollectionId,\n} from \"../models\";\nimport { DataStore, State, WidgetState } from \"../state\";\nimport { Layout } from \"react-grid-layout\";\nimport moment, { Moment } from \"moment\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport const DATE_FORMAT = \"EEE MMM dd yyyy HH:mm:ss\";\n\nexport function signalLabel(\n signal: { name: string; units: string },\n amCharts: boolean = true\n): string {\n const openBracket = amCharts ? \"[[\" : \"[\";\n const closeBracket = amCharts ? \"]]\" : \"]\";\n\n let signalName = signal.name;\n if (signal.units) {\n signalName += ` ${openBracket}${signal.units || \"-\"}${closeBracket}`;\n }\n\n return signalName;\n}\n\nexport const TOOLTIP_FORMAT = \"{dateX}\\n{name}: {valueY}\";\nexport const TOOLTIP_FORMAT_H = \"{dateX}\\n{name}: {valueX}\";\nexport const TOOLTIP_COLOR = \"#333\";\n\nexport const NUMBER_FORMAT = \"#.######\";\n\nexport function formatDate(date: Date): string {\n const dateString = date.toString();\n const idx = dateString.indexOf(\"GMT\");\n return dateString.slice(0, idx);\n}\n\nexport function inputSignalMapper<T>(\n mapFunc: (meta: Signal, data: SignalDatapoint[]) => T\n) {\n return (signalIds: SignalId[], template: Template, data: DataStore) => {\n const result: T[] = [];\n\n for (let id of signalIds) {\n const signalData = data.get(id);\n const signalMeta = template.signals.find((s) => s.id === id);\n\n if (!!signalData && !!signalMeta) {\n result.push(mapFunc(signalMeta, signalData));\n }\n }\n\n return result;\n };\n}\n\nexport function extendRange(\n limit: number,\n percent: number,\n direction: \"min\" | \"max\"\n) {\n const sign = Math.sign(limit);\n const dir = direction === \"max\" ? 1 : -1;\n\n return limit * (1 + (dir * sign * percent) / 100);\n}\n\nexport function addDateAndTime(dateVal: Moment, timeVal?: Moment) {\n //let newDate = moment(dateVal, \"ddd MMM D YYYY HH:mm:ss ZZ\");\n if (timeVal) {\n dateVal = dateVal.set({\n h: timeVal.toDate().getHours(),\n m: timeVal.toDate().getMinutes(),\n s: timeVal.toDate().getSeconds(),\n ms: 0\n });\n } \n return dateVal;\n}\n\nexport function getUnixDate(dateVal: Moment): number {\n return dateVal.valueOf();\n}\n\nexport function validateForms(startDate: Moment, endDate: Moment, startTime: Moment, endTime: Moment) : Promise<any> {\n if (startDate) {\n let startDateTime = addDateAndTime(startDate, startTime);\n if( startDateTime > moment()) {\n return Promise.reject(\n \"Start must come before current time\"\n );\n }\n if(endDate) {\n const unixStartDate = getUnixDate(startDateTime);\n const unixEndDateTime = getUnixDate(addDateAndTime(endDate, endTime));\n if (endDate < startDate) {\n return Promise.reject(\n \"Start must come before End proposed\"\n );\n }\n if (\n moment.duration(unixEndDateTime - unixStartDate).asDays() > appConfigs.app.assetOverview.startdateenddatedaysdiff\n ) {\n return Promise.reject(\n \"Start and End can be no more than 7 days apart\"\n );\n }\n }\n } \n return Promise.resolve();\n}\n\nexport function exportValidateForms(startDate: Moment, endDate: Moment, startTime: Moment, endTime: Moment) : Promise<any> {\n if (startDate) {\n let startDateTime = addDateAndTime(startDate, startTime);\n if( startDateTime > moment()) {\n return Promise.reject(\n \"Start must come before current time\"\n );\n }\n if(endDate) {\n const unixStartDate = getUnixDate(startDateTime);\n const unixEndDateTime = getUnixDate(addDateAndTime(endDate, endTime));\n if (endDate < startDate) {\n return Promise.reject(\n \"Start must come before End proposed\"\n );\n }\n if (\n moment.duration(unixEndDateTime - unixStartDate).asDays() > appConfigs.app.assetOverview.exportstartdateenddatedaysdiff\n ) {\n return Promise.reject(\n `Start and End can be no more than ${appConfigs.app.assetOverview.exportstartdateenddatedaysdiff} days apart`\n );\n }\n }\n } \n return Promise.resolve();\n}\n\nexport function constructRows(\n response: any,\n signals: SignalId[]\n): Map<SignalId, SignalDatapoint[]> {\n let dataSet = new Map<SignalId, SignalDatapoint[]>();\n //Get the response data from api and remove undefined entry\n const responseDataSet = response.map((res: any) => res.data).filter(Boolean);\n if (responseDataSet.length === 0) {\n return dataSet;\n }\n //if there are 3 diff datapoint request, there would be 3 array of array\n //Flatmap will make the collection to a single one dimensional array\n const eventsArrays: EventData[] = responseDataSet.flatMap((res: any) => res);\n //get the unique signal ids present in the event array.\n const ids = new Set(\n eventsArrays.flatMap((event) =>\n event.signals.flatMap((signal) => signal._id)\n )\n );\n const signalIds = Array.from(ids);\n //filtered the signals with the widget signals\n const filteredSignals = signalIds.filter((s) => signals.indexOf(s) > -1);\n\n function constrcuctSignalMap(id: SignalId): SignalDatapoint[] {\n const signalCollections = eventsArrays.filter(\n (event) => event.signals.findIndex((signal) => signal._id === id) > -1\n );\n const signalDataPointArray = signalCollections.reduce(\n (acc: SignalDatapoint[], current) => {\n acc.push({\n timestamp: new Date(current.createdAt),\n value: current.signals.filter((s) => s._id === id)[0].value,\n });\n return acc;\n },\n []\n );\n return signalDataPointArray.sort(\n (cur, next) => cur.timestamp.getTime() - next.timestamp.getTime()\n );\n }\n\n filteredSignals.forEach((id) => {\n dataSet.set(id, constrcuctSignalMap(id));\n });\n\n return dataSet;\n}\n\n","import { WidgetFilterConfig } from \".\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { WidgetConfig } from \"../widgets\";\nimport { addDateAndTime, getUnixDate } from \"../widgets/common\";\n\nfunction addUrlParams(url: string, filterConfig?: WidgetFilterConfig): string {\n if (filterConfig?.datapoint) {\n url += `?limit=${filterConfig.datapoint}`;\n }\n if(filterConfig?.startDate) {\n let unixDate = getUnixDate(addDateAndTime(filterConfig?.startDate, filterConfig?.startTime));\n if (url.indexOf(\"?\") > 0) url += `&startDate=${unixDate}`;\n else url += `?startDate=${unixDate}`;\n }\n if(filterConfig?.endDate) {\n let unixDate = getUnixDate(addDateAndTime(filterConfig?.endDate, filterConfig?.endTime));\n if (url.indexOf(\"?\") > 0) url += `&endDate=${unixDate}`;\n else url += `?endDate=${unixDate}`;\n }\n return url;\n }\n \n export function constructUrl(\n gatewayId: string,\n datapointId: string,\n filterConfig?: WidgetFilterConfig,\n type?: WidgetConfig[\"type\"]\n ): string {\n let url: string = `${appConfigs.server.URL}/ui/api/assets/gateway/${gatewayId}/datapoint/${datapointId}/events`;\n switch (type) {\n case \"text\":\n case \"boolean\":\n case \"bar\":\n case \"gauge\":\n case \"tracker\":\n url += \"/last\";\n return url;\n case \"line\":\n case \"map\":\n case \"clusterbar\":\n return addUrlParams(url, filterConfig);\n default:\n url += \"/last\";\n return url;\n }\n }","import Axios from \"axios\";\nimport { Asset, DBWidgetConfig } from \"./models\";\nimport { DbLayoutConfig } from \"./state\";\nimport { constructAssetData } from \"./AssetApiResp\";\nimport { WidgetConfig } from \"./widgets\";\nimport { WidgetFilterConfig } from \"./WidgetFilterForm\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { constructUrl } from \"./WidgetFilterForm/FilterApi\";\n\nexport interface AssetDashboardResponse {\n asset: Asset;\n}\ninterface DbSignal {\n _id: string;\n unit: string;\n name: string;\n label: string;\n}\n\nexport interface Datapoint {\n _id: string;\n type: string;\n name: string;\n values: DbSignal[];\n}\n\nexport async function loadAssetDashboard(\n mastertag: string\n): Promise<AssetDashboardResponse> { \n const { data } = await Axios.get(\n `${appConfigs.server.URL}/ui/api/assets?mastertag=${mastertag}&allData=true`,\n {\n params: {\n alertInterval: appConfigs.app.assetOverview.alertsInterval,\n },\n }\n );\n return constructAssetData(data, mastertag);\n}\n\nexport async function loadSignalsData(\n gatewayId: string,\n signalCollectionId: string[],\n filterConfig?: WidgetFilterConfig,\n type?: WidgetConfig[\"type\"]\n): Promise<any> {\n let promiseArray = signalCollectionId\n .map((datapoint) =>\n Axios.get(constructUrl(gatewayId, datapoint, filterConfig, type))\n )\n .map((p) => p.catch((e) => e));\n return Promise.all(promiseArray);\n}\n\nexport function saveWidget(\n templateId: string,\n widgetDetails: DBWidgetConfig\n): Promise<any> {\n return Axios.put(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/widget`,\n widgetDetails,\n {\n responseType: \"json\",\n }\n );\n}\n\nexport function deleteWidget(\n templateId: string,\n widgetId: string\n): Promise<any> {\n return Axios.delete(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/widget/${widgetId}`\n );\n}\n\nexport function saveLayoutChange(\n templateId: string,\n layout: (DbLayoutConfig & { _id: string })[]\n): Promise<any> {\n return Axios.put(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/widget/layout`,\n layout,\n {\n responseType: \"json\",\n }\n );\n}\n\nexport function getAlerts(mastertag: string): Promise<any> {\n const dmAlertsUrl = Axios.get(\n `${appConfigs.server.URL}/ui/api/alerts/dm1?mastertag=${mastertag}`\n );\n const restAlertsUrl = Axios.get(\n `${appConfigs.server.URL}/ui/api/alerts/signals?mastertag=${mastertag}`\n );\n return Promise.all([dmAlertsUrl, restAlertsUrl]);\n}\n\nexport function csvExportApi(url: string): Promise<any> {\n return Axios.get(url);\n}\n","import { DataStore, DbLayoutConfig } from \"./state\";\nimport { AxisRange } from \"./widgets/models\";\nimport { LineOptions } from \"./widgets/LineChart\";\nimport { TrackerOptions } from \"./widgets/TrackerWidget\";\nimport { GaugeOptions } from \"./widgets/GaugeWidget\";\nimport { BarOptions } from \"./widgets/BarChart\";\nimport { ClusterBarOptions } from \"./widgets/ClusterBar\";\n\nexport type SignalId = string;\ntype widgetId = string;\nexport type SignalCollectionId = string;\ntype SignalValue = number;\n\nexport interface Rule {\n signalId: SignalId;\n criticalHigh?: number;\n warningHigh?: number;\n infoHigh?: number;\n infoLow?: number;\n warningLow?: number;\n criticalLow?: number;\n}\n\nexport interface SignalCollection {\n id: SignalCollectionId;\n name: string;\n type: string | null;\n signals: Signal[];\n}\n\nexport interface Signal {\n id: SignalId;\n name: string;\n units: string;\n}\n\nexport interface CommonWidgetConfig extends LineWidgetConfig{\n title: string;\n signals: SignalId[];\n}\n\nexport interface LineWidgetConfig {\n rightYAxisSignals?:SignalId[];\n}\n\nexport interface CommonWidgetProps {\n signals: SignalId[];\n data: DataStore;\n template: Template; \n}\n\nexport interface LineWidgetProps{\n rightYAxisSignals?:SignalId[];\n rightYAxisData:DataStore;\n}\n\nexport interface SignalDatapoint {\n timestamp: Date;\n value: SignalValue;\n}\n\nexport interface Asset {\n id: string;\n name: string;\n mastertag: string;\n orgId: string;\n template: {\n signalCollections: SignalCollection[];\n rules: Rule[];\n };\n templateId: string;\n templateName: string;\n orgName: string;\n widgets: DBWidgetConfig[];\n alertDm1Count: number;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n mac: string;\n userRole: string; \n isRead: boolean;\n isUpdate: boolean; \n operatorId: string;\n operatorIdValue: string;\n accessCardValue: string;\n operatorsHistoryId: string;\n isassetUpdate: boolean;\n istemplatesRead: boolean;\n}\n\nexport interface EventSignals {\n _id: string;\n name: string;\n value: number;\n uom: string;\n}\n\nexport interface EventData {\n signalCollectionID: SignalCollectionId;\n orgID: string;\n createdAt: string;\n timestamp: string;\n signals: EventSignals[];\n}\n\nexport interface WidGetSignalConfig {\n name: string;\n datapointId: SignalCollectionId;\n signalId: SignalId;\n}\n\nexport interface DBWidgetConfig {\n _id: widgetId;\n type: string;\n signals: WidGetSignalConfig[];\n sizeX?: number;\n sizeY?: number;\n row?: number;\n col?: number;\n title: string;\n settings?: LineOptions | BarOptions | GaugeOptions | TrackerOptions | ClusterBarOptions;\n rightYAxisSignals?: any[];\n}\n\nexport class Template {\n constructor(\n public readonly signalCollections: SignalCollection[],\n public readonly rules: Rule[]\n ) {}\n\n get signals(): Signal[] {\n const signals = this.signalCollections.map((sc) => sc.signals);\n return signals.reduce((result, signals) => result.concat(signals), []);\n }\n}\n","import { SignalDatapoint, Template, SignalId, DBWidgetConfig, LineWidgetConfig } from \"./models\";\nimport { WidgetConfig } from \"./widgets\";\nimport { Layout } from \"react-grid-layout\";\nimport { AssetDashboardResponse } from \"./api\";\nimport { WidgetFilterConfig } from \"./WidgetFilterForm\";\n\nexport type DataStore = Map<SignalId, SignalDatapoint[]>;\n\nexport interface State {\n loaded: true;\n widgets: WidgetState[];\n template: Template; \n layout: Layout[];\n columns: number; \n asset: {\n name: string;\n id: string;\n mastertag: string;\n templateId: string;\n templateName: string;\n alertDm1Count: number;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n mac: string; \n orgId: string;\n orgName: string;\n userRole: string; \n isRead: boolean;\n isUpdate: boolean; \n operatorId: string;\n operatorIdValue: string;\n accessCardValue: string;\n operatorsHistoryId: string;\n isassetUpdate: boolean;\n istemplatesRead: boolean;\n };\n}\ninterface UpdateLayout {\n type: \"update-layout\";\n columns: number;\n}\n\ninterface SaveLayout {\n type: \"save-layout\";\n layout: Layout[];\n}\n\ninterface SaveLayoutSuccess {\n type: \"save-layout-success\";\n layout: Layout[];\n}\n\ninterface DeleteWidget {\n type: \"delete-widget\";\n id: WidgetState[\"id\"];\n}\n\ninterface AddWidget {\n type: \"add-widget\";\n id: string;\n widget: DBWidgetConfig;\n}\n\ninterface UpdateWidget {\n type: \"update-widget\";\n id: WidgetState[\"id\"];\n config: DBWidgetConfig;\n}\n\ninterface UpdateWidgetFilter {\n type: \"update-filter\";\n id: WidgetState[\"id\"];\n config: WidgetFilterConfig;\n}\n\ninterface ClearWidgetFilter {\n type: \"clear-filter\";\n id: WidgetState[\"id\"];\n}\n\nexport interface DbLayoutConfig {\n sizeX?: number;\n sizeY?: number;\n row?: number;\n col?: number;\n}\n\nexport type DbLayout = DbLayoutConfig & { _id: string };\n\nexport type WidgetState = WidgetConfig & {\n id: string;\n} & DbLayoutConfig &\n WidgetFilterConfig & LineWidgetConfig;\n\nexport type Action =\n | UpdateLayout\n | SaveLayout\n | DeleteWidget\n | AddWidget\n | UpdateWidget\n | SaveLayoutSuccess\n | UpdateWidgetFilter\n | ClearWidgetFilter;\n\nexport function bindActions(dispatch: (action: Action) => void) {\n return {\n updateLayout: (columns: number) =>\n dispatch({ type: \"update-layout\", columns }),\n saveLayout: (layout: Layout[]) => dispatch({ type: \"save-layout\", layout }),\n saveLayoutSuccess: (layout: Layout[]) =>\n dispatch({ type: \"save-layout-success\", layout }),\n deleteWidget: (id: string) => dispatch({ type: \"delete-widget\", id }),\n addWidget: (id: string, widget: DBWidgetConfig) =>\n dispatch({ type: \"add-widget\", id, widget }),\n updateWidget: (id: WidgetState[\"id\"], config: DBWidgetConfig) =>\n dispatch({ type: \"update-widget\", id, config }),\n updateWidgetFilter: (id: WidgetState[\"id\"], config: WidgetFilterConfig) =>\n dispatch({ type: \"update-filter\", id, config }),\n clearWidgetFilter: (id: WidgetState[\"id\"]) =>\n dispatch({ type: \"clear-filter\", id }),\n };\n}\n///If column lenegth is 4, then widgets has to be displayed\n// how ever it is coming from DB\nexport function computeLayout(\n widgets: WidgetState[],\n columns: number\n): Layout[] {\n if (columns < 4) {\n return widgets.map((w, i) => ({\n i: w.id,\n x: i % 1,\n y: Math.floor(i / 1),\n h: 1,\n w: columns,\n }));\n } else {\n const layout = widgets.map((w) => {\n return {\n i: w.id,\n x: w.col === undefined ? 1 : w.col,\n y: w.row === undefined ? 1 : w.row,\n w: w.sizeX || 1,\n h: w.sizeY || 1,\n };\n });\n return layout;\n }\n}\n\nexport function initState(\n data: AssetDashboardResponse,\n columns: number,\n context: any\n): State {\n const { asset } = data;\n const { template } = asset;\n\n const dataStore: DataStore = new Map<SignalId, SignalDatapoint[]>();\n const widgets: DBWidgetConfig[] = asset.widgets;\n\n // We are using a unique widget id so that React can tell the difference\n // between widgets even as we create/delete them. This prevents a re-render\n // of existing widgets and greatly improves performance. The counter is reset anytime\n // the component is unmounted. It is highly unlikely that this counter will ever\n // wrap-around as we would need to create 18014398509481982 widgets in one instance.\n let widgetIdCounter = Number.MIN_SAFE_INTEGER;\n const initWidget = (w: DBWidgetConfig): WidgetState => {\n return {\n ...w,\n type: w.type as \"boolean\",\n id: w._id,\n signals: w.signals.map((s) => s.signalId),\n ...(w.rightYAxisSignals && w.rightYAxisSignals.length>0 ? {rightYAxisSignals:\n w.rightYAxisSignals.map((s) => s.signalId)} : {})\n };\n };\n\n const widgs = widgets.map(initWidget);\n\n return {\n loaded: true,\n asset: { ...asset },\n template: new Template(template.signalCollections, template.rules), \n columns,\n widgets: widgs,\n layout: computeLayout(widgs, columns) \n };\n}\n\nfunction updateLayout(state: State, action: UpdateLayout): State {\n if (state.columns === action.columns) return state;\n\n return {\n ...state,\n columns: action.columns,\n layout: computeLayout(state.widgets, action.columns),\n };\n}\n\nfunction deleteWidget(state: State, action: DeleteWidget): State {\n const widgets = state.widgets.filter((w) => w.id !== action.id);\n\n return {\n ...state,\n widgets: widgets,\n layout: computeLayout(widgets, state.columns),\n };\n}\n\nfunction addWidget(state: State, action: AddWidget): State {\n const newWidget: WidgetState = {\n ...action.widget,\n signals: action.widget.signals.map((s) => s.signalId),\n type: action.widget.type as \"boolean\",\n id: action.id,\n ...(action.widget.rightYAxisSignals && action.widget.rightYAxisSignals.length>0 ? {rightYAxisSignals:\n action.widget.rightYAxisSignals.map((s) => s.signalId)} : {})\n };\n const widgets = state.widgets.concat(newWidget);\n return {\n ...state,\n widgets, \n layout: computeLayout(widgets, state.columns),\n };\n}\n\nfunction updateWidget(state: State, action: UpdateWidget): State {\n const newWidget: WidgetState = {\n ...action.config,\n id: action.id,\n signals: action.config.signals.map((s) => s.signalId),\n type: action.config.type as \"boolean\",\n ...(action.config.rightYAxisSignals && action.config.rightYAxisSignals.length>0 ? {rightYAxisSignals:\n action.config.rightYAxisSignals.map((s) => s.signalId)} : {})\n };\n\n return {\n ...state,\n widgets: state.widgets.map((w) => (w.id === action.id ? newWidget : w)),\n };\n}\n\nfunction updateWidgetLayout(\n widgetState: WidgetState[],\n layout: Layout[]\n): WidgetState[] {\n return widgetState.map((wg) => {\n const { w, h, x, y } = layout.filter((l) => l.i === wg.id)[0];\n return {\n ...wg,\n sizeX: w,\n sizeY: h,\n col: x,\n row: y,\n };\n });\n}\n\nfunction updateWidgetFilter(state: State, action: UpdateWidgetFilter): State {\n const widget = state.widgets.filter((w) => w.id === action.id)[0];\n const { startDate, endDate, datapoint, startTime, endTime } = action.config;\n\n const newWidget: WidgetState = {\n ...widget,\n startDate,\n startTime,\n endTime,\n endDate,\n datapoint,\n };\n return {\n ...state,\n widgets: state.widgets.map((w) => (w.id === action.id ? newWidget : w)),\n };\n}\n\nfunction clearWidgetFilter(state: State, action: ClearWidgetFilter): State {\n const widget = state.widgets.filter((w) => w.id === action.id)[0];\n const newWidget: WidgetState = {\n ...widget,\n startDate: undefined,\n endDate: undefined,\n datapoint: 50,\n };\n return {\n ...state,\n widgets: state.widgets.map((w) => (w.id === action.id ? newWidget : w)),\n };\n}\n\nexport function reducer(state: State, action: Action): State {\n switch (action.type) {\n case \"update-layout\":\n return updateLayout(state, action);\n\n case \"save-layout\":\n return {\n ...state,\n layout: action.layout,\n };\n case \"save-layout-success\":\n return {\n ...state,\n widgets: updateWidgetLayout(state.widgets, action.layout),\n };\n case \"delete-widget\":\n return deleteWidget(state, action);\n\n case \"add-widget\":\n return addWidget(state, action);\n\n case \"update-widget\":\n return updateWidget(state, action);\n case \"update-filter\":\n return updateWidgetFilter(state, action);\n case \"clear-filter\":\n return clearWidgetFilter(state, action);\n\n default:\n return state;\n }\n}\n","import {\n XYChart,\n DateAxis,\n ValueAxis,\n XYCursor,\n LineSeries,\n Legend,\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\n\nimport {\n signalLabel,\n TOOLTIP_FORMAT,\n DATE_FORMAT,\n NUMBER_FORMAT,\n} from \"../common\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport interface Options {\n axisRange?: AxisRange;\n rightYAxisRange?:AxisRange;\n enableRightYAxis?: boolean;\n}\n\nexport type TimeSeriesSignal = {\n name: string;\n units: string;\n values: Array<{ timestamp: Date; value: number }>;\n};\n\nclass LineChart {\n private _chart: XYChart;\n private count = 0 ;\n constructor(ref: HTMLDivElement, series: TimeSeriesSignal[],rightAxisSeries:TimeSeriesSignal[], opts?: Options) {\n const chart = amCore.create(ref, XYChart);\n \n const xAxis = chart.xAxes.push(new DateAxis());\n xAxis.cursorTooltipEnabled = false;\n\n const yAxis = chart.yAxes.push(new ValueAxis());\n yAxis.cursorTooltipEnabled = false;\n yAxis.min = opts?.axisRange?.min;\n yAxis.max = opts?.axisRange?.max;\n\n const cursor = (chart.cursor = new XYCursor());\n cursor.lineY.disabled = true;\n // Show only one tooltip\n // https://www.amcharts.com/docs/v4/concepts/chart-cursor/#Relation_to_series\n cursor.maxTooltipDistance = -1;\n\n chart.legend = new Legend();\n chart.legend.itemContainers.template.paddingTop = 1;\n chart.legend.itemContainers.template.paddingBottom = 1;\n chart.legend.itemContainers.template.paddingLeft=1;\n chart.legend.itemContainers.template.paddingRight=1;\n chart.legend.itemContainers.template.tooltipText=\"{name}\";\n\n chart.dateFormatter.dateFormat = DATE_FORMAT;\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n \n this._chart = chart;\n \n series.forEach(this.addSeries);\n \n if(opts?.enableRightYAxis){\n //right value axis\n const rightYAxis = chart.yAxes.push(new ValueAxis());\n rightYAxis.cursorTooltipEnabled = false;\n rightYAxis.min = opts?.rightYAxisRange?.min;\n rightYAxis.max = opts?.rightYAxisRange?.max;\n rightYAxis.renderer.opposite = true;\n rightAxisSeries.forEach(item=>this.addRightAxisSeries(item,rightYAxis))\n } \n \n }\n \n addSeries = (dataSeries: TimeSeriesSignal) => {\n\n const series = new LineSeries();\n \n series.dataFields = {\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n series.data = dataSeries.values; \n series.strokeWidth = 2;\n \n series.stroke = amCore.color(appConfigs.colorCodes.colorCodesLineChart[this.count]);\n \n series.name = signalLabel(dataSeries);\n series.tooltipText = TOOLTIP_FORMAT;\n\n this._chart.series.push(series);\n\n this.count++;\n };\n\n addRightAxisSeries=(dataSeries: TimeSeriesSignal,rightYAxis:ValueAxis)=>{\n const series2 = new LineSeries();\n \n series2.dataFields = {\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n series2.data = dataSeries.values; \n series2.strokeWidth = 2;\n \n series2.stroke = amCore.color(appConfigs.colorCodes.colorCodesLineChart[this.count]);\n \n series2.name = signalLabel(dataSeries);\n series2.tooltipText = TOOLTIP_FORMAT;\n \n series2.yAxis=rightYAxis;\n\n this._chart.series.push(series2);\n\n this.count++;\n }\n\n destroy() {\n this._chart?.dispose();\n }\n}\n\nexport default LineChart;","import React, { useRef, useLayoutEffect } from \"react\";\nimport LineChart, { Options } from \"./LineChart\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nimport { CommonWidgetProps, LineWidgetProps } from \"../../models\";\nimport { inputSignalMapper } from \"../common\";\nimport { Empty } from \"antd\";\n\nconst createSignalSeries = inputSignalMapper((meta, data) => ({\n ...meta,\n values: data,\n}));\n\ninterface LineChartProps extends CommonWidgetProps,LineWidgetProps {\n settings?: Options;\n errorCode?: string;\n}\n\nconst Widget: React.FC<LineChartProps> = (props) => {\n const chartRef = useRef<LineChart>();\n const [node, setNode] = useDomNode<HTMLDivElement>();\n\n const { template, data, signals, settings,rightYAxisSignals,rightYAxisData } = props;\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new LineChart(\n node,\n createSignalSeries(signals, template, data),\n createSignalSeries((rightYAxisSignals ||[]), template, rightYAxisData),\n settings\n );\n return () => chartRef.current?.destroy();\n }\n }, [node, signals, template, settings, data,rightYAxisSignals,rightYAxisData]);\n\n if (props.errorCode === \"404\") {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />;\n } else if (props.errorCode === \"500\") {\n return <Empty description=\"signal Id is null\" />;\n } else {\n return <div style={{ height: \"100%\" }} ref={setNode} />;\n }\n};\n\nexport default Widget;\n","interface EventHandler<T> {\n (t: T): void;\n}\ninterface EventListener {\n remove: () => void;\n}\n\nexport default class Event<T = void> {\n private _listeners: Map<symbol, EventHandler<T>> = new Map();\n\n trigger(t: T) {\n this._listeners.forEach((l) => l(t));\n }\n\n subscribe(listener: EventHandler<T>): EventListener {\n const id = Symbol();\n this._listeners.set(id, listener);\n return {\n remove: () => this._listeners.delete(id),\n };\n }\n}\n","import React from \"react\";\nimport { Card, Row } from \"antd\";\n\ninterface Props {\n title?: string;\n}\n\nconst SectionTitle: React.FC<Props> = (props) => {\n return props.title ? (\n <h3 style={{ marginTop: \"18px\", marginBottom: \"-12px\" }}>{props.title}</h3>\n ) : (\n <></>\n );\n};\n\nconst Container: React.FC<Props> = (props) => {\n return (\n <>\n <SectionTitle title={props.title} />\n <Row>\n <Card style={{ width: \"100%\" }}>{props.children}</Card>\n </Row>\n </>\n );\n};\n\nexport default Container;\n","import React from \"react\";\nimport { Form } from \"antd\";\n\ntype FormProps = React.ComponentProps<typeof Form>;\n\n/* eslint-disable no-template-curly-in-string */\nconst validationMessages: FormProps[\"validateMessages\"] = {\n required: \"${label} is required\",\n types: {\n number: \"${label} must be a number\",\n },\n};\n\nexport default validationMessages","import React, { useState, useEffect } from \"react\";\nimport {\n WidgetConfig,\n getEditForm,\n DETAILS as WIDGET_DETAILS,\n} from \"../widgets\";\nimport { Template } from \"../models\";\nimport { Form, Select, ConfigProvider } from \"antd\";\nimport Container from \"./Container\";\nimport Event from \"../../../lib/event\";\nimport validationMessages from \"./validation-messages\";\n\ntype WidgetType = WidgetConfig[\"type\"] | undefined;\ntype FormInstance = ReturnType<typeof Form.useForm>[0];\n\ninterface Props {\n config?: WidgetConfig;\n template: Template;\n onFinish: EditFormProps[\"onFinish\"];\n submitTrigger: Event;\n onDualChange:EditFormProps[\"onDualChange\"];\n enabledualaxis:EditFormProps[\"enabledualaxis\"];\n}\n\nexport interface EditFormProps {\n config?: WidgetConfig;\n template: Template;\n onFinish: (cfg: WidgetConfig) => void;\n form: FormInstance;\n layout?: \"horizontal\" | \"vertical\";\n onDualChange:(checked:boolean)=>void;\n enabledualaxis:boolean;\n}\n\nconst TypeSelectForm: React.FC<{\n onTypeChange: (t: WidgetType) => void;\n}> = (props) => {\n return (\n <Container>\n <Form layout=\"vertical\" /* Here for styling only */>\n <Form.Item\n label=\"Widget Type\"\n name=\"type\"\n required\n rules={[{ required: true }]}\n >\n <Select\n onChange={(value: WidgetConfig[\"type\"]) =>\n props.onTypeChange(value)\n }\n options={WIDGET_DETAILS.map((wd) => ({\n value: wd.type,\n label: wd.name,\n }))}\n />\n </Form.Item>\n </Form>\n </Container>\n );\n};\n\nconst EditFormContainer: React.FC<Props> = (props) => {\n const [widgetType, setWidgetType] = useState<WidgetType>(props.config?.type);\n const mode = props.config ? \"edit\" : \"create\";\n\n const [form] = Form.useForm();\n\n useEffect(() => {\n const listener = props.submitTrigger.subscribe(() => form.submit());\n return () => listener.remove();\n }, [form, props.submitTrigger]);\n\n return (\n <div className=\"widget-edit-form\">\n <ConfigProvider form={{ validateMessages: validationMessages }}>\n {mode === \"create\" ? (\n <TypeSelectForm onTypeChange={typ => {\n setWidgetType(typ);\n form.resetFields();\n }} />\n ) : (\n <></>\n )}\n {widgetType ? (\n getEditForm(widgetType)({\n template: props.template,\n form: form,\n onFinish: props.onFinish,\n config: props.config,\n onDualChange:props.onDualChange,\n enabledualaxis:props.enabledualaxis\n })\n ) : (\n <></>\n )}\n </ConfigProvider>\n </div>\n );\n};\n\nexport default EditFormContainer;\n","import React from \"react\";\nimport * as LineChart from \"./LineChart\";\nimport * as BarChart from \"./BarChart\";\nimport * as BooleanWidget from \"./BooleanWidget\";\nimport * as TextWidget from \"./TextWidget\";\nimport * as TrackerWidget from \"./TrackerWidget\";\nimport * as GaugeWidget from \"./GaugeWidget\";\nimport * as LocationWidget from \"./LocationWidget\";\nimport { Template } from \"../models\";\nimport { DataStore } from \"../state\";\nimport { WidgetDetails } from \"./models\";\nimport { EditFormProps } from \"../WidgetEditForm\";\nimport * as ClusterBarWidget from \"./ClusterBar\";\n\nexport const DETAILS: WidgetDetails[] = [\n BarChart.details,\n BooleanWidget.details,\n GaugeWidget.details,\n LineChart.details,\n TextWidget.details,\n TrackerWidget.details,\n LocationWidget.details,\n ClusterBarWidget.details\n];\n\n// Combining the different widget types allows Typescript to use\n// discriminated unions to provide more type safety.\nexport type WidgetConfig =\n | LineChart.Config\n | BarChart.Config\n | BooleanWidget.Config\n | TextWidget.Config\n | TrackerWidget.Config\n | GaugeWidget.Config\n | LocationWidget.Config\n | ClusterBarWidget.Config;\n\nexport function createWidget(\n config: WidgetConfig,\n common: { template: Template; data: DataStore,rightYAxisData:DataStore },\n errorCode: string | undefined\n): JSX.Element {\n switch (config.type) {\n case \"line\":\n return <LineChart.Widget {...config} {...common} errorCode={errorCode} />;\n case \"bar\":\n return <BarChart.Widget {...config} {...common} />;\n case \"boolean\":\n return <BooleanWidget.Widget {...config} {...common} />;\n case \"text\":\n return <TextWidget.Widget {...config} {...common} />;\n case \"tracker\":\n return <TrackerWidget.Widget {...config} {...common} />;\n case \"gauge\":\n return <GaugeWidget.Widget {...config} {...common} />;\n case \"map\":\n return <LocationWidget.Widget {...config} {...common} />;\n case \"clusterbar\":\n return <ClusterBarWidget.Widget {...config} {...common} />;\n }\n}\n\nexport interface EditForm {\n form: JSX.Element;\n parser: (a: any) => WidgetConfig | undefined;\n}\n\nexport function getEditForm(\n type: WidgetConfig[\"type\"]\n): React.FC<EditFormProps> {\n switch (type) {\n case \"bar\":\n return BarChart.EditForm;\n case \"boolean\":\n return BooleanWidget.EditForm;\n case \"gauge\":\n return GaugeWidget.EditForm;\n case \"line\":\n return LineChart.EditForm;\n case \"text\":\n return TextWidget.EditForm;\n case \"tracker\":\n return TrackerWidget.EditForm;\n case \"map\":\n return LocationWidget.EditForm;\n case \"clusterbar\":\n return ClusterBarWidget.EditForm;\n default:\n return (props: EditFormProps) => <></>;\n }\n}\n","import React, {useState} from 'react';\nimport {Drawer, Button } from 'antd';\n\nimport { Template } from '../models';\nimport { WidgetConfig } from '../widgets';\nimport Event from '../../../lib/event';\nimport EditFormContainer from './EditFormContainer';\nimport { appConfigs } from '../../../utils/configurations';\n\ninterface Props {\n template: Template;\n onFinish: (wcfg: WidgetConfig) => void;\n title: string;\n visible: boolean;\n onClose: () => void;\n onDualChange:(checked:boolean)=>void;\n enabledualaxis:boolean;\n}\n\nconst WidgetEditDrawer: React.FC<Props> = (props) => {\n const [submitter] = useState(new Event());\n const drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n return (\n <Drawer\n width={drawerWidth}\n placement=\"right\"\n {...props}\n footer={\n <Button\n type=\"primary\"\n htmlType=\"button\"\n onClick={() => submitter.trigger()}\n >\n Save\n </Button>\n }\n onClose={props.onClose}\n destroyOnClose\n >\n <EditFormContainer\n {...props} \n onFinish={(cfg) => {\n props.onFinish(cfg);\n props.onClose();\n }}\n submitTrigger={submitter}\n />\n </Drawer>\n );\n};\n\nexport default WidgetEditDrawer;","import React, { useMemo } from \"react\";\n\nimport { Form, Select, Button } from \"antd\";\nimport { MinusCircleOutlined } from \"@ant-design/icons\";\n\ntype Value = string;\ntype ValueArray = Array<Value | undefined>;\n\ninterface Selectable {\n value: Value;\n label: string;\n}\n\ninterface Props {\n options: Selectable[];\n maxSelected?: number;\n value?: ValueArray;\n onChange?: (v: ValueArray) => void;\n valueLabel?: string;\n}\n\nconst SelectorList: React.FC<Props> = (props) => {\n // Must be optional to play nice with Ant Design's forms but won't\n // actually work without them\n const assertDefined = (propName: keyof Props) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n\n const { value = [], onChange } = props;\n\n const { add, remove, changeValue } = useMemo(() => {\n const triggerChange = (newValues: ValueArray) => {\n if (onChange) {\n onChange(newValues);\n }\n };\n\n const add = () => {\n triggerChange(value.concat(undefined));\n };\n\n const remove = (i: number) => {\n triggerChange([...value.slice(0, i), ...value.slice(i + 1)]);\n };\n\n const changeValue = (index: number, updatedValue: Value) => {\n const newVals = [...value];\n newVals[index] = updatedValue;\n triggerChange(newVals);\n };\n\n return { add, remove, changeValue };\n }, [onChange, value]);\n\n const filteredOptions = (v?: Value) => {\n return props.options.filter(\n (opt) => opt.value === v || !value.includes(opt.value)\n );\n };\n\n const maxReached = value.length >= (props.maxSelected || Infinity);\n const valueLabel = props.valueLabel ? `${props.valueLabel} ` : \"\";\n\n return (\n <div>\n {value.map((v, i) => (\n <Form.Item key={i}>\n <Select\n style={{ width: \"95%\" }}\n value={v}\n onChange={(v) => changeValue(i, v)}\n options={filteredOptions(v)}\n />\n <MinusCircleOutlined\n style={{ marginLeft: \"8px\" }}\n onClick={() => remove(i)}\n />\n </Form.Item>\n ))}\n <Button disabled={maxReached} onClick={add} type=\"dashed\">\n {maxReached ? `Max ${valueLabel}Added` : `Add ${valueLabel}`}\n </Button>\n </div>\n );\n};\n\nexport default SelectorList;\n","import React from 'react';\nimport { Form, Input } from 'antd'\n\nconst WidgetTitleFormField: React.FC = (props) => (\n <Form.Item\n name=\"title\"\n label=\"Widget Title\"\n required\n rules={[{ required: true }, { whitespace: true }]}\n >\n <Input />\n </Form.Item>\n);\n\nexport default WidgetTitleFormField;","import React from \"react\";\nimport { Form } from \"antd\";\n\nimport { Signal } from \"../models\";\nimport SelectorList from \"./SelectorList\";\n\ninterface Props {\n max?: number;\n signals: Signal[];\n}\n\nconst SignalSelectorList: React.FC<Props> = (props) => {\n const selectable = props.signals.map((s) => ({\n value: s.id,\n label: s.name,\n }));\n\n return (\n <Form.Item\n label=\"Signals\"\n name=\"signals\"\n required\n rules={[\n {\n validator(rule, value) {\n return !value || value.filter((v: any) => !!v).length < 1\n ? Promise.reject(\"At least one valid signal must be specified\")\n : Promise.resolve();\n },\n },\n ]}\n >\n <SelectorList\n options={selectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n />\n </Form.Item>\n );\n};\n\nexport default SignalSelectorList;\n","import { EditFormProps as EFPImport } from \"./EditFormContainer\";\nimport WidgetEditForm from './WidgetEditDrawer';\nimport SelectorList from './SelectorList';\nimport WidgetTitleFormField from './WidgetTitleFormField';\nimport Container from './Container';\nimport SignalSelectorList from './SignalSelectorList';\n\nexport { SelectorList, WidgetTitleFormField, Container, SignalSelectorList };\nexport type EditFormProps = EFPImport;\n\nexport default WidgetEditForm;","import React from \"react\";\nimport { Form } from \"antd\";\n\nimport { Signal } from \"../../models\";\nimport { SelectorList } from \"../../WidgetEditForm\";\n\n\ninterface Props {\n max?: number;\n signals: Signal[];\n}\n\nconst RightAxisSignals: React.FC<Props> = (props) => {\n const selectable = props.signals.map((s) => ({\n value: s.id,\n label: s.name,\n }));\n\n return (\n <Form.Item\n label=\"Signals on right axis\"\n name=\"rightYAxisSignals\"\n required\n rules={[\n {\n validator(rule, value) {\n return !value || value.filter((v: any) => !!v).length < 1\n ? Promise.reject(\"At least one valid signal must be specified\")\n : Promise.resolve();\n },\n },\n ]}\n >\n <SelectorList\n options={selectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n />\n </Form.Item>\n );\n};\n\nexport default RightAxisSignals;\n","import React from \"react\";\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport { Form, Row, Col, InputNumber, Card, Switch } from \"antd\";\nimport RightAxisSignals from \"./RightAxisSignals\";\n\nfunction sanitizeInputs(values: Config,enableRightYAxis:boolean): Config {\n return {\n title: values.title,\n settings: {...values.settings,...(!enableRightYAxis?{}:{enableRightYAxis:enableRightYAxis})},\n type: \"line\",\n signals: values.signals.filter((v) => !!v),\n rightYAxisSignals:values.rightYAxisSignals?.filter((v) => !!v)\n };\n}\n\nconst axisRangePath = (end: string) => [\"settings\", \"axisRange\", end];\n\nexport const EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"bar-chart-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config,props.enabledualaxis))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Line Chart Settings\">\n <Row>\n <WidgetTitleFormField />\n </Row>\n <Row>\n <div style={{display:'flex',flexWrap:'nowrap',marginBottom:'10px'}}>\n <div style={{color:'#000000',fontSize:'14px'}}>Dual Axis?</div>\n <div style={{marginLeft:'10px'}}><Switch checked={props.enabledualaxis} onChange={props.onDualChange}/></div> \n </div>\n </Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={10}>\n <Form.Item\n name={axisRangePath(\"min\")}\n label=\"Axis Min\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10} push=\"right\">\n <Form.Item\n name={axisRangePath(\"max\")}\n label=\"Axis Max\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n <SignalSelectorList max={6} signals={props.template.signals} />\n {\n props.enabledualaxis &&\n <RightAxisSignals max={6} signals={props.template.signals}/>\n } \n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;","import {\n XYChart,\n ColumnSeries,\n ValueAxis,\n CategoryAxis,\n XYCursor,\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\nimport {\n DATE_FORMAT,\n TOOLTIP_FORMAT,\n NUMBER_FORMAT,\n} from \"../common\";\n\nexport interface Signal {\n name: string\n timestamp: Date\n value: number\n}\n\nexport interface Options {\n axisRange?: AxisRange;\n}\n\nexport default class BarChart {\n private _chart: XYChart;\n\n constructor(ref: HTMLDivElement, signals: Signal[], opts?: Options) {\n const chart = (this._chart = amCore.create(ref, XYChart));\n const cursor = (this._chart.cursor = new XYCursor());\n cursor.lineX.disabled = true;\n cursor.lineY.disabled = true;\n\n const xAxis = new CategoryAxis();\n xAxis.dataFields.category = \"name\";\n xAxis.cursorTooltipEnabled = false;\n chart.xAxes.push(xAxis);\n\n const yAxis = new ValueAxis();\n yAxis.cursorTooltipEnabled = false;\n yAxis.min = opts?.axisRange?.min;\n yAxis.max = opts?.axisRange?.max;\n chart.yAxes.push(yAxis);\n\n const series = new ColumnSeries();\n series.dataFields = {\n categoryX: \"name\",\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n series.tooltipText = TOOLTIP_FORMAT;\n if(series.tooltip) {\n series.tooltip.pointerOrientation = \"vertical\";\n } \n \n\n chart.series.push(series); \n chart.dateFormatter.dateFormat = DATE_FORMAT;\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n chart.data = signals\n }\n\n public destroy() {\n this?._chart.dispose();\n }\n}\n","import React from \"react\";\nimport { Form, Row, Col, InputNumber, Card } from \"antd\";\n\nimport { Config } from \"./index\";\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport Container from \"../../WidgetEditForm/Container\";\nimport \"./BarChartEditForm.css\";\n\nfunction sanitizeInputs(values: Config): Config {\n return {\n title: values.title,\n settings: values.settings,\n type: \"bar\",\n signals: values.signals.filter((v) => !!v),\n };\n}\n\nconst axisRangePath = (end: string) => [\"settings\", \"axisRange\", end];\n\nexport const EditForm: React.FC<EditFormProps> = (props) => (\n <div className=\"bar-chart-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Bar Chart Settings\">\n <Row>\n <WidgetTitleFormField />\n </Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={10}>\n <Form.Item\n name={axisRangePath(\"min\")}\n label=\"Axis Min\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10} push=\"right\">\n <Form.Item\n name={axisRangePath(\"max\")}\n label=\"Axis Max\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n <SignalSelectorList max={6} signals={props.template.signals} />\n </Card>\n </Form>\n </div>\n);\n","import React, { useRef, useLayoutEffect } from \"react\";\nimport BarGraph, { Options, Signal } from \"./BarChart\";\nimport { CommonWidgetConfig, CommonWidgetProps } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport { inputSignalMapper, signalLabel } from \"../common\";\nimport { EditForm } from \"./BarChartEditForm\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nexport type BarOptions = Options;\n\nexport { EditForm };\n\nexport type Config = CommonWidgetConfig & { type: \"bar\"; settings?: Options };\n\nexport type Props = CommonWidgetProps & { settings?: Options };\n\nexport const details: WidgetDetails = {\n type: \"bar\",\n name: \"Bar Chart\",\n};\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n ...meta,\n ...data[0],\n name: signalLabel(meta),\n}));\n\nexport const Widget: React.FC<Props> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const chartRef = useRef<BarGraph>();\n\n const { template, data, settings, signals } = props;\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new BarGraph(\n node,\n createSignals(signals, template, data),\n settings\n );\n return () => chartRef.current?.destroy();\n }\n }, [node, template, settings, signals, data]);\n\n return <div style={{ height: \"100%\" }} ref={setNode} />;\n};\n","import React from \"react\";\nimport { Form, Card } from \"antd\";\n\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \"./BooleanWidget\";\n\nfunction sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"boolean\",\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"boolean-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Boolean Widget Settings\">\n <WidgetTitleFormField />\n <SignalSelectorList max={10} signals={props.template.signals} />\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import React from \"react\";\n\nexport interface Props {\n size: number | string;\n color: string;\n}\n\nconst Dot: React.FC<Props> = (props) => (\n <div\n {...props}\n style={{\n borderRadius: \"50%\",\n backgroundColor: props.color,\n height: props.size,\n width: props.size,\n }}\n />\n);\n\nexport default Dot;\n","import React from \"react\";\nimport { List, Tooltip } from \"antd\";\nimport Dot from \"../../../../sharedComponents/Dot\";\nimport { formatDate, inputSignalMapper, signalLabel } from \"../common\";\nimport { CommonWidgetProps, CommonWidgetConfig } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\n\ninterface Signal {\n name: string;\n values: { timestamp: Date; value: boolean }[];\n}\n\nexport const details: WidgetDetails = {\n type: \"boolean\",\n name: \"Boolean Widget\"\n}\n\nexport type Config = CommonWidgetConfig & { type: \"boolean\" };\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n name: signalLabel(meta, false),\n values: [\n {\n timestamp: data[0].timestamp,\n value: !!data[0].value,\n },\n ],\n}));\n\nconst BooleanWidget: React.FC<CommonWidgetProps> = (props) => {\n const { template, data } = props;\n const signals = createSignals(props.signals, template, data);\n\n return (\n <List\n dataSource={signals}\n renderItem={(signal) => (\n <List.Item>\n <List.Item.Meta title={signal.name} />\n <Tooltip\n title={formatDate(signal.values[0].timestamp)}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n >\n <div>\n <Dot\n color={signal.values[0].value ? \"green\" : \"red\"}\n size=\"20px\"\n />\n </div>\n </Tooltip>\n </List.Item>\n )}\n />\n );\n};\n\nexport default BooleanWidget;\n","import React from \"react\";\nimport { List, Tooltip } from \"antd\";\nimport { formatDate, inputSignalMapper, signalLabel } from \"../common\";\nimport { CommonWidgetProps } from \"../../models\";\n\ninterface Signal {\n name: string;\n values: Array<{\n timestamp: Date;\n value: number | string | boolean;\n }>;\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n name: signalLabel(meta, false),\n values: [{ ...data[0] }],\n}));\n\nfunction formatNumber(n: number | string | boolean): string | boolean {\n return typeof n === \"number\" ? n.toFixed(2) : n;\n}\n\nconst Widget: React.FC<CommonWidgetProps> = (props) => {\n const { template, data } = props;\n const signals = createSignals(props.signals, template, data);\n\n return (\n <List\n dataSource={signals}\n renderItem={(signal) => (\n <List.Item>\n <List.Item.Meta title={signal.name} />\n <Tooltip\n title={formatDate(signal.values[0].timestamp)}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n >\n <div>{formatNumber(signal.values[0].value)}</div>\n </Tooltip>\n </List.Item>\n )}\n />\n );\n};\n\nexport default Widget;\n","import React from \"react\";\nimport { Form, Card } from \"antd\";\n\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\n\nfunction sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"text\",\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Text Widget Settings\">\n <WidgetTitleFormField />\n <SignalSelectorList max={10} signals={props.template.signals} />\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import {\n XYChart,\n CategoryAxis,\n ValueAxis,\n StepLineSeries,\n XYCursor,\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\nimport { NUMBER_FORMAT, DATE_FORMAT } from \"../common\";\n\nconst DISPLAY_COLORS = {\n critical: \"#d11515\",\n warning: \"#ecc800\",\n normal: \"#ccc\",\n info: \"#1890ff\"\n};\n\nexport interface Signal {\n name: string;\n values: Array<{\n timestamp: Date;\n value: number;\n }>;\n}\ninterface Rule {\n criticalHigh?: number;\n warningHigh?: number;\n infoHigh?: number;\n infoLow?: number;\n warningLow?: number;\n criticalLow?: number;\n}\n\nexport interface Options {\n axisRange?: AxisRange;\n}\n\nexport interface Props {\n signal: Signal;\n rule?: Rule;\n opts?: Options;\n}\n\nfunction createRange(axis: ValueAxis, from: number, to: number, color: string) {\n const range = axis.axisRanges.create();\n range.value = from;\n range.endValue = to;\n range.axisFill.fill = amCore.color(color);\n range.axisFill.fillOpacity = 0.8;\n range.grid.disabled = true;\n range.label.disabled = true;\n}\n\nfunction createRanges(axis: ValueAxis, rule?: Rule) {\n const maxValue = 100000;\n const minValue = -100000;\n\n if (!rule) {\n createRange(axis, minValue, maxValue, DISPLAY_COLORS.normal);\n return;\n }\n\n let { criticalHigh, warningHigh, criticalLow, warningLow, infoHigh, infoLow } = rule;\n\n if (criticalHigh) {\n createRange(axis, criticalHigh, maxValue, DISPLAY_COLORS.critical);\n } else {\n criticalHigh = maxValue;\n }\n\n if (warningHigh) {\n createRange(axis, warningHigh, criticalHigh, DISPLAY_COLORS.warning);\n } else {\n warningHigh = criticalHigh;\n }\n\n if(infoHigh) {\n createRange(axis, infoHigh, warningHigh, DISPLAY_COLORS.info);\n } else {\n infoHigh = warningHigh;\n }\n\n if (criticalLow) {\n createRange(axis, minValue, criticalLow, DISPLAY_COLORS.critical);\n } else {\n criticalLow = minValue;\n }\n\n if (warningLow) {\n createRange(axis, criticalLow, warningLow, DISPLAY_COLORS.warning);\n } else {\n warningLow = criticalLow;\n }\n\n if(infoLow) {\n createRange(axis, warningLow, infoLow, DISPLAY_COLORS.info);\n } else {\n infoLow = warningLow;\n }\n\n createRange(axis, infoLow, infoHigh, DISPLAY_COLORS.normal);\n}\n\nclass Bullet {\n private _bullet: StepLineSeries;\n\n constructor(c: XYChart, toolTipText?: string) {\n const bullet = c.series.push(new StepLineSeries());\n bullet.dataFields = {\n categoryY: \"name\",\n valueX: \"value\",\n dateX: \"timestamp\",\n };\n bullet.stroke = amCore.color(\"#000\");\n bullet.strokeWidth = 3;\n\n bullet.startLocation = 0.15;\n bullet.endLocation = 0.85;\n\n if (bullet.tooltip && toolTipText) {\n const tip = bullet.tooltip;\n tip.getFillFromObject = false;\n tip.background.fill = amCore.color(\"#FFF\");\n tip.label.fill = amCore.color(\"#000\");\n bullet.tooltipText = toolTipText;\n }\n\n this._bullet = bullet;\n }\n}\n\nclass Cursor {\n private _cursor: XYCursor;\n constructor(c: XYChart) {\n const cur = new XYCursor();\n cur.lineX.disabled = true;\n cur.lineY.disabled = true;\n this._cursor = cur;\n c.cursor = cur;\n }\n}\n\nfunction firstNumber(\n inp: Array<undefined | null | number>\n): number | undefined {\n for (const i of inp) {\n if (typeof i === \"number\") return i;\n }\n\n return undefined;\n}\n\nfunction lowerBound(opts?: Options, rule?: Rule) {\n return firstNumber([\n opts?.axisRange?.min,\n rule?.criticalLow,\n rule?.warningLow,\n rule?.infoLow,\n ]);\n}\n\nfunction upperBound(opts?: Options, rule?: Rule) {\n return firstNumber([\n opts?.axisRange?.max,\n rule?.criticalHigh,\n rule?.warningHigh,\n rule?.infoLow,\n ]);\n}\n\nclass TrackerChart {\n private _chart: XYChart;\n private _bullet: Bullet;\n private _cursor: Cursor;\n\n constructor(\n ref: HTMLDivElement,\n signal: Signal,\n rule?: Rule,\n opts?: Options\n ) {\n const chart = (this._chart = amCore.create(ref, XYChart));\n chart.data = [{ ...signal.values[0], name: signal.name }];\n\n const yAxis = chart.yAxes.push(new CategoryAxis());\n yAxis.dataFields.category = \"name\";\n yAxis.renderer.grid.template.disabled = true;\n yAxis.renderer.labels.template.disabled = true;\n yAxis.cursorTooltipEnabled = false;\n\n const xAxis = chart.xAxes.push(new ValueAxis());\n xAxis.renderer.grid.template.disabled = true;\n xAxis.renderer.baseGrid.disabled = true;\n xAxis.renderer.fill = amCore.color(DISPLAY_COLORS.normal);\n xAxis.cursorTooltipEnabled = false;\n xAxis.min = lowerBound(opts, rule);\n xAxis.max = upperBound(opts, rule);\n xAxis.paddingLeft = 3;\n createRanges(xAxis, rule);\n\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n chart.dateFormatter.dateFormat = DATE_FORMAT;\n\n this._cursor = new Cursor(chart);\n this._bullet = new Bullet(chart, \"{dateX}\\n{name}: {valueX}\");\n }\n\n public destroy() {\n this._chart?.dispose();\n }\n}\n\nexport default TrackerChart;\n","import React, { useRef, useLayoutEffect, useMemo } from \"react\";\n\nimport TrackerChart, { Props as TrackerProps } from \"./TrackerChart\";\nimport { CommonWidgetProps, SignalId } from \"../../models\";\nimport { AxisRange } from \"../models\";\nimport { signalLabel } from \"../common\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\n\nexport interface SignalOpts {\n signalId: SignalId;\n opts: {\n axisRange?: AxisRange;\n };\n}\n\nconst TrackerComponent: React.FC<TrackerProps> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const chartRef = useRef<TrackerChart>();\n\n const { signal, rule, opts } = props;\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new TrackerChart(node, signal, rule, opts);\n return () => chartRef.current?.destroy();\n }\n }, [node, signal, rule, opts]);\n\n return (\n <>\n <span>{props.signal.name}</span>\n <div style={{ height: \"100%\" }} ref={setNode} />\n </>\n );\n};\n\nfunction useTrackerProps({\n template,\n data,\n signals,\n settings,\n}: TrackerWidgetProps): TrackerProps[] {\n return useMemo(() => {\n const result: TrackerProps[] = [];\n\n for (let id of signals) {\n const datapts = data.get(id);\n const metadata = template.signals.find((s) => s.id === id);\n if (datapts && metadata) {\n result.push({\n signal: {\n name: signalLabel(metadata, false),\n values: [{ ...datapts[0] }],\n },\n rule: template.rules && template.rules.length > 0 ? template.rules.find((r) => r.signalId === id): undefined,\n opts: settings && settings.length > 0 ? settings?.find((s) => s.signalId === id)?.opts: undefined,\n });\n }\n }\n\n return result;\n }, [template, data, signals, settings]);\n}\n\nexport interface TrackerWidgetProps extends CommonWidgetProps {\n settings?: SignalOpts[];\n}\n\nconst TrackerWidget: React.FC<TrackerWidgetProps> = (props) => {\n const settings = useTrackerProps(props);\n return (\n <>\n {settings.map((s, i) => (\n <div key={i} style={{ height: \"85px\" }}>\n <TrackerComponent {...s} />\n </div>\n ))}\n </>\n );\n};\n\nexport default TrackerWidget;\n","import React, { useCallback, useMemo } from \"react\";\nimport { Row, Col, Button, Form, Select, InputNumber } from \"antd\";\nimport { MinusCircleOutlined } from \"@ant-design/icons\";\n\nimport { SignalId } from \"../../models\";\n\nexport interface TrackerSignalField {\n id?: SignalId;\n max?: number;\n min?: number;\n}\n\ninterface Option {\n value: SignalId;\n label: string;\n}\n\ninterface TrackerSignalSelectorProps {\n options: Option[];\n onChange: (f: TrackerSignalField) => void;\n value: TrackerSignalField;\n showLabels?: boolean;\n onDelete: () => void;\n}\n\nconst TrackerSignalSelect: React.FC<TrackerSignalSelectorProps> = (props) => {\n const label = (l: string) => (props.showLabels ? l : undefined);\n\n const { onChange } = props;\n\n const triggerChange = useCallback(\n (field: TrackerSignalField) => {\n if (onChange) onChange(field);\n },\n [onChange]\n );\n\n return (\n <Row gutter={6}>\n <Col span={16}>\n <Form.Item label={label(\"Signal\")} required>\n <Select\n options={props.options}\n suffixIcon={<MinusCircleOutlined onClick={props.onDelete} />}\n onChange={(value: SignalId) =>\n triggerChange({ ...props.value, id: value })\n }\n value={props.value.id}\n />\n </Form.Item>\n </Col>\n <Col span={4}>\n <Form.Item label={label(\"Min\")}>\n <InputNumber\n onChange={(value) =>\n triggerChange({ ...props.value, min: value as number })\n }\n value={props.value.min}\n style={{ width: \"100%\" }}\n placeholder=\"Min\"\n />\n </Form.Item>\n </Col>\n <Col span={4}>\n <Form.Item label={label(\"Max\")} rules={[{ type: \"number\" }]}>\n <InputNumber\n onChange={(value) =>\n triggerChange({\n ...props.value,\n max: value as number,\n })\n }\n value={props.value.max}\n style={{ width: \"100%\" }}\n placeholder=\"Max\"\n />\n </Form.Item>\n </Col>\n </Row>\n );\n};\n\ntype Value = Array<TrackerSignalField>;\n\ninterface TrackerSignalSelectorListProps {\n options: Option[];\n value?: Value;\n onChange?: (value: Value) => void;\n max?: number;\n}\n\nconst TrackerSignalSelectorList: React.FC<TrackerSignalSelectorListProps> = (\n props\n) => {\n // Must be optional to play nice with Ant Design's forms but won't\n // actually work without them\n const assertDefined = (propName: keyof TrackerSignalSelectorListProps) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n\n const { value = [], onChange } = props;\n const selectedSignalIds = value\n .filter((v) => !!v)\n .map((v) => (v as TrackerSignalField).id);\n\n const filteredOptions = (v?: TrackerSignalField) => {\n return props.options.filter(\n (opt) => !selectedSignalIds.includes(opt.value) || opt.value === v?.id\n );\n };\n\n const { add, remove, update } = useMemo(() => {\n const triggerChange = (newValue: Value) => {\n if (onChange) onChange(newValue);\n };\n\n return {\n add() {\n triggerChange(value.concat({}));\n },\n remove(i: number) {\n triggerChange([...value.slice(0, i), ...value.slice(i + 1)]);\n },\n update(index: number, updatedValue: TrackerSignalField) {\n triggerChange(value.map((v, i) => (i === index ? updatedValue : v)));\n },\n };\n }, [onChange, value]);\n\n const maxReached = !!props.max && value.length >= props.max;\n\n return (\n <div>\n {value.map((v, i) => (\n <TrackerSignalSelect\n key={i}\n options={filteredOptions(v)}\n onDelete={() => remove(i)}\n showLabels={i === 0}\n onChange={(v) => update(i, v)}\n value={v}\n />\n ))}\n <Button\n style={{ width: \"100%\" }}\n type=\"dashed\"\n disabled={maxReached}\n onClick={add}\n >\n {maxReached ? \"Max Signals Added\" : \"Add Signal\"}\n </Button>\n </div>\n );\n};\n\nexport default TrackerSignalSelectorList;\n","import React from \"react\";\nimport { EditFormProps } from \"../../WidgetEditForm/EditFormContainer\";\nimport { WidgetTitleFormField, Container } from \"../../WidgetEditForm\";\nimport { SignalId } from \"../../models\";\nimport { Config } from \".\";\nimport { Form, Card, Row, Col } from \"antd\";\nimport TrackerSignalSelectorList, {\n TrackerSignalField,\n} from \"./TrackerSignalSelectorList\";\nimport { SignalOpts } from \"./Widget\";\n\ninterface Fields {\n signals: { id: SignalId; min?: number; max?: number }[];\n title: string;\n}\n\nfunction parseOptions(signalFields: Fields[\"signals\"]): Config[\"settings\"] {\n return signalFields\n .filter((s) => s.min !== undefined || s.max !== undefined)\n .map((s) => ({\n signalId: s.id,\n opts: {\n axisRange: {\n min: s.min,\n max: s.max,\n },\n },\n }));\n}\n\nfunction sanitizeInputs(f: Fields): Config {\n const validSignals = f.signals.filter((s) => !!s.id);\n\n return {\n title: f.title,\n signals: validSignals.map((s) => s.id),\n type: \"tracker\",\n settings: parseOptions(validSignals),\n };\n}\n\nfunction populateSignals(\n signals: Config[\"signals\"],\n opts: Config[\"settings\"]\n): Fields[\"signals\"] {\n return signals.map((id) => {\n let currentOpt: SignalOpts | undefined;\n if(Array.isArray(opts)) {\n currentOpt = opts?.find((opt) => opt.signalId === id);\n } \n \n const result = {\n id,\n min: currentOpt?.opts.axisRange?.min,\n max: currentOpt?.opts.axisRange?.max,\n };\n return result;\n });\n}\n\nfunction populateForm(c?: Config): Fields | undefined {\n if (!c) return undefined;\n\n return {\n title: c.title,\n signals: populateSignals(c.signals, c.settings),\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n const initialVals = populateForm(props.config as Config);\n\n return (\n <div className=\"tracker-widget-edit-form\">\n <Form\n layout=\"vertical\"\n onFinish={(fields) => props.onFinish(sanitizeInputs(fields as Fields))}\n form={props.form}\n initialValues={initialVals}\n >\n {/* <Container title=\"Tracker Widget Settings\">\n <WidgetTitleFormField />\n </Container> */}\n <Card title=\"Tracker Widget Settings\">\n <Row style={{ width: \"95%\" }}>\n <Col span={20}>\n <WidgetTitleFormField />\n </Col>\n </Row> \n <Form.Item\n name=\"signals\"\n rules={[\n {\n validator(rule, value) {\n return !value ||\n value.filter((v: TrackerSignalField) => !!v.id).length < 1\n ? Promise.reject(\"At least on valid signal must be selected\")\n : (value.filter((v: TrackerSignalField) => (v.min && v.max && v.min > v.max)).length > 0\n ? Promise.reject(\"Min value must be less than, or equal to, Max value\")\n : Promise.resolve());\n },\n },\n ]}\n >\n <TrackerSignalSelectorList\n options={props.template.signals.map((s) => ({\n value: s.id,\n label: s.name,\n }))}\n max={7} \n />\n </Form.Item>\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import * as amCore from \"@amcharts/amcharts4/core\";\nimport {\n ValueAxis,\n AxisRendererCircular,\n RadarChart,\n RadarColumnSeries,\n CategoryAxis,\n AxisRendererRadial,\n} from \"@amcharts/amcharts4/charts\";\nimport {\n TOOLTIP_FORMAT_H,\n NUMBER_FORMAT,\n DATE_FORMAT,\n extendRange,\n TOOLTIP_COLOR,\n} from \"../common\";\n\nexport interface Signal {\n name: string;\n values: Array<{ timestamp: Date; value: number }>;\n}\n\nexport interface Options {\n max: number;\n}\n\nexport default class Gauge {\n private _chart: RadarChart;\n\n constructor(ref: HTMLDivElement, signals: Signal[], opts?: Options) {\n const chart = (this._chart = amCore.create(ref, RadarChart));\n\n const maxValue =\n opts?.max || extendRange(signals[0].values[0].value, 20, \"max\");\n\n chart.data = [\n {\n name: signals[0].name,\n ...signals[0].values[0],\n maxValue,\n },\n ];\n chart.startAngle = -180;\n chart.endAngle = 0;\n chart.innerRadius = 80;\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n chart.dateFormatter.dateFormat = DATE_FORMAT;\n\n const xAxis = chart.xAxes.push(new ValueAxis<AxisRendererCircular>());\n xAxis.min = 0;\n xAxis.max = maxValue;\n xAxis.strictMinMax = true;\n xAxis.renderer.grid.template.disabled = true;\n xAxis.renderer.minGridDistance = 100;\n\n const yAxis = chart.yAxes.push(new CategoryAxis<AxisRendererRadial>());\n yAxis.dataFields.category = \"name\";\n yAxis.renderer.grid.template.disabled = true;\n yAxis.renderer.labels.template.disabled = true;\n\n const fillSeries = chart.series.push(new RadarColumnSeries());\n fillSeries.dataFields = {\n categoryY: \"name\",\n valueX: \"maxValue\",\n };\n fillSeries.clustered = false;\n fillSeries.columns.template.fill = new amCore.InterfaceColorSet().getFor(\n \"alternativeBackground\"\n );\n fillSeries.columns.template.fillOpacity = 0.08;\n fillSeries.columns.template.strokeWidth = 0;\n\n const valueSeries = chart.series.push(new RadarColumnSeries());\n valueSeries.dataFields = {\n categoryY: \"name\",\n valueX: \"value\",\n dateX: \"timestamp\",\n };\n valueSeries.clustered = false;\n valueSeries.name = chart.data[0].name;\n valueSeries.columns.template.fillOpacity = 0.5;\n valueSeries.columns.template.fill = amCore.color(\"#333\");\n valueSeries.columns.template.tooltipText = TOOLTIP_FORMAT_H;\n if (valueSeries.tooltip) {\n valueSeries.tooltip.getFillFromObject = false;\n valueSeries.tooltip.background.fill = amCore.color(TOOLTIP_COLOR);\n valueSeries.tooltip.pointerOrientation = \"vertical\";\n }\n\n const label = valueSeries.createChild(amCore.Label);\n\n const valueString = chart.data[0].value.toFixed(2);\n\n // Data formats don't actually work in labels for some reason so\n // it must be manually set.\n label.text = `[font-size: 20px]${valueString}[/]\\n[font-size: 10px]{name}`;\n label.align = \"center\";\n label.horizontalCenter = \"middle\";\n label.verticalCenter = \"bottom\";\n }\n\n public destroy() {\n this._chart.dispose();\n }\n}\n","import React, { useRef, useLayoutEffect } from \"react\";\n\nimport GaugeChart, { Options, Signal } from \"./Gauge\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { inputSignalMapper, signalLabel } from \"../common\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\n\ninterface Props extends CommonWidgetProps {\n settings?: Options;\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n name: signalLabel(meta),\n values: [data[0]],\n}));\n\nconst GaugeWidget: React.FC<Props> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const gaugeRef = useRef<GaugeChart>();\n\n const { signals, template, data, settings } = props;\n const signalList = createSignals(signals, template, data);\n\n useLayoutEffect(() => {\n if (node && data.size > 0 && signalList.length > 0) {\n const gauge = new GaugeChart(\n node,\n signalList,\n settings\n );\n gaugeRef.current = gauge;\n return () => gauge.destroy();\n }\n }, [node, signals, template, data, settings]);\n\n return <div style={{ height: \"100%\" }} ref={setNode} />;\n};\n\nexport default GaugeWidget;\n","import React from \"react\";\nimport { Form, Select, Row, Col, InputNumber, Card } from \"antd\";\n\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport { SignalId } from \"../../models\";\n\ntype Fields = Omit<Config, \"signals\"> & { signal: SignalId };\n\nfunction sanitizeInputs(f: Fields): Config {\n return {\n title: f.title,\n settings: f.settings,\n type: \"gauge\",\n signals: [f.signal],\n };\n}\n\nfunction populateForm(c?: Config): Fields | undefined {\n if (!c) return c;\n\n return {\n title: c.title,\n type: \"gauge\",\n settings: c.settings,\n signal: c.signals[0],\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n const selectable = props.template.signals.map((s) => ({\n value: s.id,\n label: s.name,\n }));\n\n return (\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Fields))}\n layout=\"vertical\"\n form={props.form}\n initialValues={populateForm(props.config as Config)}\n >\n <Card title=\"Gauge Widget Settings\">\n <WidgetTitleFormField />\n <Row justify=\"space-between\">\n <Col span={10}>\n <Form.Item name={[\"settings\", \"min\"]} label=\"Min Value\">\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10}>\n <Form.Item name={[\"settings\", \"max\"]} label=\"Max Value\">\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n <Form.Item label=\"Signal\" name=\"signal\">\n <Select options={selectable} />\n </Form.Item>\n </Card>\n </Form>\n );\n};\n\nexport default EditForm;\n","import React from \"react\";\n\nimport { formatDate } from '../common';\nimport { formatGps } from \"../../../../utils/commonHelpers\";\n\nconst formatOptions = {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n};\n\nfunction formatTimestamp(timestamp: Date): string {\n //return timestamp.toLocaleDateString(\"en-US\", formatOptions);\n return formatDate(timestamp);\n}\n\ninterface TootipProps {\n position: Position;\n timestamp: Date;\n}\n\nconst Tooltip: React.FC<TootipProps> = ({ position, timestamp }) => {\n return (\n <div>\n <span>Location: {formatGps(position.lat, position.lng)}</span>\n <br />\n <span>{formatTimestamp(timestamp)}</span> \n </div>\n );\n};\n\nexport default Tooltip;\n\ninterface Position {\n lat: number;\n lng: number;\n}\n\nexport function toolTipForAsset(\n position: Position,\n timestamp: Date\n) {\n return (\n <Tooltip position={position} timestamp={timestamp} />\n );\n}","import React from \"react\";\nimport { inputSignalMapper, signalLabel } from \"../common\";\nimport { CommonWidgetProps } from \"../../models\";\nimport {\n Map,\n Marker,\n MapActions,\n} from \"../../../../sharedComponents/GoogleMap\";\nimport { toolTipForAsset } from \"./Tooltip\";\nimport MapPin from \"../../../../assets/images/map-pin.png\";\n\ninterface Signal {\n name: string;\n values: Array<{\n timestamp: Date;\n value: number;\n }>;\n}\n\nfunction assetToMarker(signals: Signal[]): Marker[] {\n const latitude = signals.filter((s) => s.name.toLowerCase().indexOf('latitude') !== -1)[0] || [];\n const longitude = signals.filter((s) => s.name.toLowerCase().indexOf('longitude') !== -1)[0] || [];\n\n const markers = latitude.values.map((s, i) => {\n const lat = s.value;\n const timestamp = s.timestamp;\n const lng = longitude.values[i].value;\n return {\n id: `${i}`,\n position: {\n lat: lat,\n lng: lng,\n },\n tooltip: toolTipForAsset({ lat, lng }, timestamp),\n icon: MapPin,\n } as Marker;\n });\n\n return markers;\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n name: signalLabel(meta, false),\n values: data,\n}));\n\nconst Widget: React.FC<CommonWidgetProps> = (props) => {\n const { template, data } = props;\n const signals = createSignals(props.signals, template, data);\n\n return (\n <div style={{ height: \"100%\", position: \"relative\" }}>\n {signals.length > 1 ? (\n <Map\n data-id=\"map-container\"\n markers={assetToMarker(signals)}\n clusterMarkers={false}\n mapOptions={{ mapTypeId: \"satellite\" }}\n polyline={true}\n drawOverlays={false}\n ></Map>\n ) : (\n <></>\n )}\n </div>\n );\n};\n\nexport default Widget;\n","import React from \"react\";\nimport { Form } from \"antd\";\n\nimport { Signal } from \"../../models\";\nimport { SelectorList } from \"../../WidgetEditForm\";\n\ninterface Props {\n max?: number;\n signals: Signal[];\n}\n\nconst LocationSignalSelectorList: React.FC<Props> = (props) => {\n let signalArray: Signal[];\n signalArray =\n props.signals.filter(\n (s) =>\n s.name.toLowerCase().indexOf(\"longitude\") !== -1 ||\n s.name.toLowerCase().indexOf(\"latitude\") !== -1 \n ) || [];\n const selectable = signalArray.map((s) => ({\n value: s.id,\n label: s.name,\n }));\n\n return (\n <Form.Item\n label=\"Signals\"\n name=\"signals\"\n required\n rules={[\n {\n validator(rule, value) {\n return !value || value.filter((v: any) => !!v).length < 2\n ? Promise.reject(\"At least two valid signal must be specified\")\n : Promise.resolve();\n },\n },\n ]}\n >\n <SelectorList\n options={selectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n />\n </Form.Item>\n );\n};\n\nexport default LocationSignalSelectorList;\n","import React from \"react\";\nimport { Form, Card } from \"antd\";\n\n\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport LocationSignalSelectorList from \"./LocationSignalSelectorList\";\n\nfunction sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"map\",\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Location Widget Settings\">\n <WidgetTitleFormField />\n <LocationSignalSelectorList max={2} signals={props.template.signals} /> \n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import {\n XYChart,\n ColumnSeries,\n ValueAxis,\n Legend,\n DateAxis,\n XYCursor,\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\nimport {\n DATE_FORMAT,\n TOOLTIP_FORMAT,\n NUMBER_FORMAT,\n signalLabel,\n} from \"../common\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport interface Options {\n axisRange?: AxisRange;\n}\n\nexport type TimeSeriesSignal = {\n name: string;\n units: string;\n values: Array<{ timestamp: Date; value: number }>;\n};\n\nexport default class ClusterBarChart {\n private _chart: XYChart;\n private count = 0 ;\n constructor(ref: HTMLDivElement, series: TimeSeriesSignal[], opts?: Options) {\n const chart = amCore.create(ref, XYChart); \n chart.colors.step = 3;\n \n \n \n const xAxis = chart.xAxes.push(new DateAxis());\n xAxis.renderer.cellStartLocation = 0.1\n xAxis.renderer.cellEndLocation = 0.9\n xAxis.renderer.grid.template.location = 0;\n xAxis.cursorTooltipEnabled = false;\n\n const yAxis = chart.yAxes.push(new ValueAxis());\n yAxis.cursorTooltipEnabled = false;\n yAxis.min = opts?.axisRange?.min;\n yAxis.max = opts?.axisRange?.max;\n\n const cursor = (chart.cursor = new XYCursor());\n cursor.lineY.disabled = true;\n cursor.lineX.disabled = true;\n // Show only one tooltip\n // https://www.amcharts.com/docs/v4/concepts/chart-cursor/#Relation_to_series\n cursor.maxTooltipDistance = -1;\n\n chart.legend = new Legend();\n chart.legend.useDefaultMarker = false; \n chart.legend.itemContainers.template.tooltipText=\"{name}\";\n \n chart.dateFormatter.dateFormat = DATE_FORMAT;\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n \n this._chart = chart;\n \n series.forEach(this.addSeries);\n }\n \n addSeries = (dataSeries: TimeSeriesSignal) => {\n\n const series = new ColumnSeries();\n \n series.dataFields = {\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n \n series.data = dataSeries.values; \n series.strokeWidth = 4; \n series.paddingRight = 2;\n series.name = signalLabel(dataSeries);\n series.tooltipText = TOOLTIP_FORMAT;\n\n this._chart.series.push(series);\n\n this.count++;\n };\n\n destroy() {\n this._chart?.dispose();\n }\n}\n","import React, { useRef, useLayoutEffect } from \"react\";\nimport ClusterBarChart, { Options } from \"./ClusterBarChart\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { inputSignalMapper } from \"../common\";\n\n\nconst createSignalSeries = inputSignalMapper((meta, data) => ({\n ...meta,\n values: data,\n}));\n\ninterface Props extends CommonWidgetProps {\n settings?: Options;\n errorCode?: string;\n}\n\nexport const Widget: React.FC<Props> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const chartRef = useRef<ClusterBarChart>();\n\n const { template, data, settings, signals } = props;\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new ClusterBarChart(\n node,\n createSignalSeries(signals, template, data),\n settings\n );\n return () => chartRef.current?.destroy();\n }\n }, [node, template, settings, signals, data]);\n\n return <div style={{ height: \"100%\" }} ref={setNode} />;\n};\n\n\nexport default Widget;\n","import React from \"react\";\nimport { Form, Row, Col, InputNumber, Card } from \"antd\";\n\nimport { Config } from \"./index\";\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport \"./ClusterBarChartEditForm.css\";\n\nfunction sanitizeInputs(values: Config): Config {\n return {\n title: values.title,\n settings: values.settings,\n type: \"clusterbar\",\n signals: values.signals.filter((v) => !!v),\n };\n}\n\nconst axisRangePath = (end: string) => [\"settings\", \"axisRange\", end];\n\nexport const EditForm: React.FC<EditFormProps> = (props) => (\n <div className=\"bar-chart-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Cluster Widget Settings\">\n <Row>\n <WidgetTitleFormField />\n </Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={10}>\n <Form.Item\n name={axisRangePath(\"min\")}\n label=\"Axis Min\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10} push=\"right\">\n <Form.Item\n name={axisRangePath(\"max\")}\n label=\"Axis Max\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n <SignalSelectorList max={6} signals={props.template.signals} />\n </Card>\n </Form>\n </div>\n);\n","import Widget from './GaugeWidget';\nimport EditForm from './Editform';\nimport { WidgetDetails } from '../models';\nimport { CommonWidgetConfig } from '../../models';\nimport { Options } from './Gauge';\n\nexport type Config = CommonWidgetConfig & { type: \"gauge\"; settings?: Options };\n\nexport type GaugeOptions = Options;\n\nconst details: WidgetDetails = { type: \"gauge\", name: \"Gauge Widget\"}\n\nexport { Widget, details, EditForm };\n\n","import { WidgetDetails } from '../models';\nimport { CommonWidgetConfig } from '../../models';\nimport { Options } from './LineChart';\nimport Widget from './Widget';\nimport EditForm from './EditForm';\n\nexport const details: WidgetDetails = {\n type: \"line\",\n name: \"Line Chart\"\n}\n\nexport type LineOptions= Options;\n\nexport type Config = CommonWidgetConfig & {\n type: \"line\";\n settings?: Options;\n};\n\nexport { EditForm, Widget}","import { CommonWidgetConfig } from '../../models';\nimport { WidgetDetails } from '../models';\nimport Widget from './Widget'\nimport EditForm from './EditForm';\n\nexport type Config = CommonWidgetConfig & { type: \"text\" };\n\nexport const details: WidgetDetails = {\n type: \"text\",\n name: \"Text Widget\"\n}\n\nexport { EditForm, Widget }","import { WidgetDetails } from \"../models\";\nimport { CommonWidgetConfig } from \"../../models\";\nimport Widget, { SignalOpts } from \"./Widget\";\nimport EditForm from \"./EditForm\";\n\nexport const details: WidgetDetails = {\n type: \"tracker\",\n name: \"Tracker Widget\",\n};\nexport type TrackerOptions = SignalOpts;\n\nexport type Config = CommonWidgetConfig & {\n type: \"tracker\";\n settings?: SignalOpts[];\n};\n\nexport { EditForm, Widget };\n","import React from \"react\";\nimport { CommonWidgetConfig } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport Widget from \"./Widget\";\nimport EditForm from './EditForm';\n\nexport const details: WidgetDetails = {\n type: \"map\",\n name: \"Location Widget\",\n};\n\nexport type Config = CommonWidgetConfig & {\n type: \"map\";\n};\n\nexport { Widget, EditForm };\n","import { CommonWidgetConfig, CommonWidgetProps } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport { Options } from './ClusterBarChart';\nimport Widget from './Widget';\nimport { EditForm } from \"./ClusterBarChartEditForm\";\n\nexport type ClusterBarOptions = Options;\n\nexport type Config = CommonWidgetConfig & { type: \"clusterbar\"; settings?: Options };\n\nexport type Props = CommonWidgetProps & { settings?: Options };\n\nexport const details: WidgetDetails = {\n type: \"clusterbar\",\n name: \"Cluster Bar Widget\",\n};\n\nexport { EditForm, Widget}\n\n\n\n\n","import React, { useState, useEffect, CSSProperties } from \"react\";\nimport { Card, Space, message, Popconfirm } from \"antd\";\nimport {\n EditOutlined,\n DeleteOutlined,\n LoadingOutlined,\n ReloadOutlined,\n FilterOutlined,\n DownloadOutlined\n} from \"@ant-design/icons\";\nimport {\n Template,\n SignalDatapoint,\n SignalId,\n SignalCollectionId,\n} from \"./models\";\nimport { DataStore, WidgetState } from \"./state\";\nimport { loadSignalsData } from \"./api\";\nimport { createWidget } from \"./widgets\";\nimport { constructRows } from \"./widgets/common\";\nimport \"./WidgetContainer.css\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\n\nimport * as Api from \"./api\";\nimport { WidgetFilterConfig } from \"./WidgetFilterForm\";\nimport usePolling from \"../../lib/use-polling\";\nimport { appConfigs } from \"../../utils/configurations\";\n\ninterface WidgetControlProps {\n onEdit: () => void;\n onDelete: () => void;\n onFilter: () => void;\n onExport: () => void;\n userRole: string;\n isCreate: boolean;\n isRead: boolean;\n isUpdate: boolean;\n isDelete: boolean; \n //isIqanKey: boolean;//ops-2839: Remove the iqanconnect key permission check \n}\n\ninterface WidgetHeaderProps {\n onRefresh: () => void;\n onFilter: () => void;\n onExport: () => void;\n isLoading: boolean;\n widgetState: WidgetState;\n userRole: string;\n isCreate: boolean;\n isRead: boolean;\n isUpdate: boolean;\n isDelete: boolean; \n}\n\nconst WidgetHeader: React.FC<WidgetControlProps & WidgetHeaderProps> = (\n props\n) => {\n\n function confirm(e: any) {\n props.onDelete();\n }\n function cancel(e: any) {} \n\n const { type } = props.widgetState;\n return (\n <div style={{ width: \"100%\" }}>\n <Space>\n\n {props.isUpdate ? <EditOutlined onClick={props.onEdit} /> : ''}\n {props.isDelete ? \n <Popconfirm \n title=\"Are you sure to delete this widget?\"\n onConfirm={confirm}\n onCancel={cancel}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <DeleteOutlined />\n\n </Popconfirm> : '' }\n\n {props.isLoading ? (\n <LoadingOutlined />\n ) : (\n <ReloadOutlined onClick={props.onRefresh} />\n )}\n {type === \"line\" || type === \"map\" || type === \"clusterbar\" ? (\n <>\n <FilterOutlined onClick={props.onFilter} />\n {props.isCreate || props.isUpdate || props.userRole.toLowerCase() === \"barko_guest\" ? <DownloadOutlined onClick={props.onExport} /> : ''} \n </>\n ) : (\n <></>\n )}\n </Space>\n </div>\n );\n};\n\nexport interface Props extends WidgetControlProps {\n widgetState: WidgetState;\n template: Template;\n assetId: string;\n}\n\nconst WidgetContainer: React.FC<Props> = (props) => {\n const { widgetState, template, assetId } = props;\n const { signals, type , rightYAxisSignals} = widgetState;\n\n const [data, setData] = useState<DataStore>(\n new Map<SignalId, SignalDatapoint[]>()\n );\n\n const [rightYAxisData, setRightAxisData] = useState<DataStore>(\n new Map<SignalId, SignalDatapoint[]>()\n );\n\n const [isLoading, setLoading] = useState<boolean>(false);\n const [refreshTime, setRefreshTime] = useState<number>(0);\n const [error, setError] = useState<string>();\n const [signalArray, setSignalArray] = useState<SignalId[]>(signals);\n\n const onRefresh = () => {\n setRefreshTime(Date.now());\n };\n\n const { datapoint, startDate, endDate, startTime, endTime } = props.widgetState;\n const loadWidgets = () => {\n setLoading(true);\n loadData(signals, { \n startDate: startDate,\n startTime: startTime,\n endDate: endDate, \n endTime: endTime, \n datapoint: datapoint,\n });\n }\n\n //commented the code for auto refersh as requested in sprint 5\n // usePolling(\n // () => {\n // loadWidgets();\n // }, \n // appConfigs.app.assetOverview.autoRefreshPollingRate\n // );\n //filter\n const filterErrors = (response: any) => {\n const responseFilter = response.filter((res:any) => (res instanceof Error));\n if(responseFilter.length > 0) {\n responseFilter.forEach((error: any) => {\n let errorStatus:number = !error.response ? 999 : (error.response.status || 999);\n if(errorStatus === 401) {\n errorResponse(null, error);\n }\n }); \n }\n }\n\n const formatData = (response: any, signals: SignalId[]) => {\n const dataSet = constructRows(response, signals);\n setData(dataSet);\n setLoading(false);\n };\n\n const formatRightYAxisData = (response: any, signals: SignalId[]) => {\n const dataSet = constructRows(response, signals);\n setRightAxisData(dataSet);\n setLoading(false);\n };\n\n const loadData = async (\n signals: SignalId[],\n filterConfig: WidgetFilterConfig,\n isFormatRightYAxisData:boolean=false\n ) => {\n const datapointArray: SignalCollectionId[] = [];\n //find the signal collection id to make an api request\n signals.forEach((si) => {\n const datapoint = template.signalCollections.filter((s) =>\n s.signals.find((sg) => sg.id === si)\n )[0];\n if (datapoint && datapoint[\"id\"]) {\n datapointArray.push(datapoint.id);\n }\n });\n //stop the repeataion of datapoints\n const uniqsignalCollectionId = datapointArray\n .filter((elem, pos) => {\n return datapointArray.indexOf(elem) === pos;\n })\n .filter((x) => !!x);\n\n if (uniqsignalCollectionId.length > 0) {\n Api.loadSignalsData(assetId, uniqsignalCollectionId, filterConfig, type)\n .then((resp: any) => {\n filterErrors(resp);\n if(isFormatRightYAxisData){\n formatRightYAxisData(resp,signals)\n }\n else\n {\n formatData(resp, signals);\n }\n //ops-2440 \n // const responseData = resp.map((res: any) => res.data);\n // let iqanConnKey = false;\n // //const iqanConnKey = responseData.map((s: any) => s.signals.filter((r: any) => r.name === \"IQAN COnnect Key\")).length;\n // for(let i=0; i<responseData.length; i++){\n // if(responseData[i].hasOwnProperty(responseData[i].signals)){ //ops-2681 asset dashboard error fix\n // for (let j=0; j<responseData[i].signals.length;j++){\n // if(responseData[i].signals[j].name === \"IQAN Connect Key\" && props.isIqanKey===true){\n // formatData(resp, signals);\n // iqanConnKey = true;\n // }\n // else if(responseData[i].signals[j].name !== \"IQAN Connect Key\")\n // {\n // formatData(resp, signals);\n // }\n // }\n // }\n // }\n // if(iqanConnKey !== true){\n // formatData(resp, signals);\n // }\n })\n .catch((err) => {\n errorResponse(null, err);\n setError(err.message);\n setLoading(false);\n });\n } else {\n setLoading(false);\n setError(\"500\");\n }\n };\n\n function compare(array1: SignalId[], array2: SignalId[]) {\n const newArray1 = [...array1];\n const newArray2 = [...array2];\n return (\n newArray1.length === newArray2.length &&\n newArray1.sort().every(function (value, index) {\n return value === newArray2.sort()[index];\n })\n );\n }\n\n const updateSignalArrayState = (signals: SignalId[]) => {\n const a = compare(signals, signalArray);\n if (!a) {\n setSignalArray(signals);\n }\n };\n\n updateSignalArrayState(signals);\n\n \n\n useEffect(() => {\n if (signalArray.length > 0) {\n setLoading(true);\n loadData(signals, { \n startDate: startDate,\n startTime: startTime,\n endDate: endDate, \n endTime: endTime, \n datapoint: datapoint,\n });\n if(rightYAxisSignals && rightYAxisSignals.length)\n {\n loadData((rightYAxisSignals||[]),{startDate: startDate,\n startTime: startTime,\n endDate: endDate, \n endTime: endTime, \n datapoint: datapoint},true)\n }\n }\n }, [signalArray, refreshTime, datapoint, startDate, endDate, startTime, endTime]);\n\n const widgetPadding = (): CSSProperties => {\n switch (type) {\n case \"text\":\n case \"boolean\":\n return { padding: \"0px 15px 0px 15px\" };\n default:\n return { padding: \"0\" };\n }\n };\n\n const bodyStyle: CSSProperties = {\n height: \"calc(100% - 58px)\",\n ...widgetPadding(),\n };\n\n return (\n <Card\n style={{ width: \"100%\", height: \"100%\" }}\n title={props.widgetState.title}\n extra={\n <WidgetHeader {...props} onRefresh={onRefresh} isLoading={isLoading} />\n }\n // Makes the body the size of the card minus the size of the header\n bodyStyle={bodyStyle}\n >\n <div style={{ height: \"100%\" }}>\n {createWidget(widgetState, { template, data,rightYAxisData }, error)}\n </div>\n </Card>\n );\n};\n\nexport default WidgetContainer;\n","import { Layout } from \"react-grid-layout\";\nimport { WidgetConfig } from \".\";\nimport { DBWidgetConfig, Template, WidGetSignalConfig } from \"../models\";\nimport { computeLayout, DbLayoutConfig, WidgetState } from \"../state\";\n\n///Db requires to save the signals in with 3 attributes, signal id, name\n///and name. Before saving underline function fetch the datapoint and name\n/// from Template object for respective signals received from edit and add functionality\n\nfunction constructSignalArray(\n signalId: string,\n template: Template\n ): WidGetSignalConfig {\n const datapoint = template.signalCollections.filter((s) =>\n s.signals.find((sv) => sv.id === signalId)\n )[0];\n const signal = datapoint.signals.filter((s) => s.id === signalId)[0];\n return {\n name: signal.name,\n signalId: signalId,\n datapointId: datapoint.id,\n };\n }\n \n ///create the layout as required by DB from state sizeX, sizeY, row and col attributes.\n function constructLayout(widgetState: WidgetState) {\n return {\n sizeX: widgetState.sizeX,\n sizeY: widgetState.sizeY,\n row: widgetState.row,\n col: widgetState.col,\n };\n } \n \n export function saveLayoutDb(\n layout: Layout[]\n ): (DbLayoutConfig & { _id: string })[] {\n function constructDbLayout(layout: Layout): DbLayoutConfig & { _id: string } {\n const { i, x, y, w, h } = layout;\n return {\n col: x,\n row: y,\n sizeX: w,\n sizeY: h,\n _id: i,\n };\n }\n return layout.map(constructDbLayout);\n }\n\n///before send a api request to save the edit widget details.\nexport function editWidgetStructureForDb(\n widgetId: string,\n cfg: WidgetConfig,\n template: Template,\n widgetState: WidgetState\n ): DBWidgetConfig {\n const cnfg: any = cfg;\n // console.log(cnfg);\n \n return {\n _id: widgetId,\n type: cfg.type,\n title: cfg.title,\n ...constructLayout(widgetState),\n signals: cfg.signals.map((s) => constructSignalArray(s, template)),\n ...(cfg.rightYAxisSignals && cfg.rightYAxisSignals.length>0 ? {rightYAxisSignals:\n cfg.rightYAxisSignals.map((s) => constructSignalArray(s, template))} : {}),\n settings: cnfg.settings,\n };\n }\n \n ///function to construct the widget struture out of various paremeters\n ///before send a api request to save the Add widget details.\n export function addWidgetStructureForDb(\n widgetId: string,\n cfg: WidgetConfig,\n template: Template,\n widgetState: WidgetState[],\n widgetColumns:number\n ): DBWidgetConfig {\n const cnfg: any = cfg;\n let layout: Layout[] = [];\n \n if (widgetState.length === 0) {\n layout = [\n {\n i: widgetId, //dummy id which will be over-written later\n x: 0,\n y: 0,\n w: 1,\n h: 1,\n },\n ];\n } else {\n layout = computeLayout(widgetState, widgetColumns);\n }\n \n const newLayout = layoutAlgorithm(widgetState, layout);\n \n return {\n _id: widgetId,\n type: cfg.type,\n title: cfg.title,\n ...newLayout,\n signals: cfg.signals.map((s) => constructSignalArray(s, template)),\n ...(cfg.rightYAxisSignals && cfg.rightYAxisSignals.length>0 ? {rightYAxisSignals:\n cfg.rightYAxisSignals.map((s) => constructSignalArray(s, template))} : {}),\n settings: cnfg.settings,\n };\n }\n \n ///Algorithm steps\n ///step 1: sort by y and find the element with same y\n ///step 2: Accumulate the value of w for all y's in step1\n ///step 3: Check or 1 or more space available beside x in the same row\n ///step 4: If yes, create the new layout having y same as step 1 and x=accumulated w (step2)\n ///step 4 cont..: if no, y=previous element y+1, x=0, w=1, h=1\n \n function layoutAlgorithm(\n widgetState: WidgetState[],\n layout: Layout[]\n ): DbLayoutConfig {\n //if there are no widgets currently on the page\n if (widgetState.length === 0) {\n return {\n sizeX: 1,\n sizeY: 1,\n row: 0,\n col: 0,\n };\n }\n const sortedLayout = layout.sort(function (a, b) {\n return a[\"y\"] - b[\"y\"];\n });\n \n const lastElementY = sortedLayout[sortedLayout.length - 1].y;\n const lastRowcumulativeW = sortedLayout.reduce((acc, current) => {\n if (current.y === lastElementY) {\n acc += current.w;\n }\n return acc;\n }, 0);\n \n let newElementY = 0;\n let newElementX = 0;\n if (4 - lastRowcumulativeW >= 1) {\n newElementX = lastRowcumulativeW;\n newElementY = lastElementY;\n } else {\n newElementY = lastElementY + 1;\n }\n \n return {\n sizeX: 1,\n sizeY: 1,\n row: newElementY,\n col: newElementX,\n };\n }","import React, { useEffect, useState } from \"react\";\nimport * as Api from \"./api\";\nimport { appConfigs } from \"../../utils/configurations\";\n\nconst getConnectionStatus = (response: any): boolean => {\n const errorresponseFilter = response.filter((res:any) => (res instanceof Error));\n const responseFilter = response.filter((res:any) => !(res instanceof Error));\n if(responseFilter.length > 0) {\n const deviceConnectedText = appConfigs.app.assetOverview.deviceconnectedtext;\n const responseData = response.map((res: any) => res.data) || [];\n const { signals } = responseData[0];\n if (signals) {\n const { value } = signals[0];\n if (value === deviceConnectedText) {\n return true;\n }\n }\n } \n return false;\n};\n\nexport const useAssetStatus = (gatewayId: string): boolean => {\n const [assetStatus, setAssetStatus] = useState<boolean>(false);\n const datapointId = [\n appConfigs.app.assetOverview.connectdisconnectdatapointid,\n ];\n useEffect(() => {\n if (gatewayId) {\n Api.loadSignalsData(gatewayId, datapointId)\n .then((response) => setAssetStatus(getConnectionStatus(response)))\n .catch((err) => {\n console.log(err);\n });\n }\n }, []);\n\n return assetStatus;\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Maps\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Home-Landing---map-closeup---offline-w/signals\",\n transform: \"translate(-646.000000, -198.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"GREY\",\n transform: \"translate(646.000000, 198.000000)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval\",\n fill: \"#8C8C8C\",\n cx: 13,\n cy: 13,\n r: 13\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"cloud-outlined\",\n transform: \"translate(3.000000, 6.000000)\",\n fill: \"#FFFFFF\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.978491,4.56768382 C15.0257025,2.06582108 12.597964,0.286764706 9.75416065,0.286764706 C6.91035731,0.286764706 4.48261883,2.06375 3.52983029,4.56561275 C1.74699235,5.03160539 0.430147059,6.64704657 0.430147059,8.57107843 C0.430147059,10.8596201 2.29203732,12.7132353 4.58871537,12.7132353 L14.9112846,12.7132353 C17.2079627,12.7132353 19.0698529,10.8596201 19.0698529,8.57107843 C19.0698529,6.65118873 17.7571683,5.03574755 15.978491,4.56768382 Z M16.7336487,10.3874142 C16.2514432,10.8702837 15.5952206,11.141003 14.9112846,11.1392245 L4.58871537,11.1392245 C3.90012802,11.1392245 3.25314716,10.8720466 2.76635127,10.3874142 C2.28126442,9.906545 2.00937566,9.25258719 2.01118448,8.57107843 C2.01118448,7.99117647 2.20050305,7.44648284 2.55623851,6.99084559 C2.9046037,6.54945561 3.38694347,6.23198863 3.93133288,6.08578431 L4.7197758,5.88074755 L5.00894088,5.12273284 C5.18784877,4.65052696 5.43748769,4.20938725 5.75161666,3.80966912 C6.06173421,3.41348778 6.42908342,3.06521954 6.8417066,2.77620098 C7.6967199,2.17765931 8.70359687,1.86078431 9.75416065,1.86078431 C10.8047244,1.86078431 11.8116014,2.17765931 12.6666147,2.77620098 C13.0805992,3.06615196 13.4467363,3.41409314 13.7567046,3.80966912 C14.0708336,4.20938725 14.3204725,4.65259804 14.4993804,5.12273284 L14.7864652,5.87867647 L15.5728278,6.08578431 C16.7024439,6.38609069 17.4888065,7.40713235 17.4888065,8.57107843 C17.4888065,9.25660539 17.2204446,9.90278186 16.7336487,10.3874142 L16.7336487,10.3874142 Z\",\n id: \"Shape\"\n})))));\n\nvar SvgOfflinePin = function SvgOfflinePin(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"26px\",\n height: \"26px\",\n viewBox: \"0 0 26 26\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgOfflinePin, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/offline-pin.33793a06.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Maps\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Home-Landing---map-closeup---offline-w/signals\",\n transform: \"translate(-774.000000, -244.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"GREEN\",\n transform: \"translate(774.000000, 244.000000)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval\",\n fill: \"#0CA30E\",\n cx: 13,\n cy: 13,\n r: 13\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Online\",\n transform: \"translate(4.000000, 4.000000)\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.2628906,6.48457031 C13.4578125,4.359375 11.4064453,2.84765625 9.00351563,2.84765625 C6.60058594,2.84765625 4.54921875,4.35761719 3.74414063,6.4828125 C2.23066406,6.88183594 1.11621094,8.26523437 1.12494838,9.90703125 C1.13554687,11.7421875 2.559375,13.2345703 4.35234375,13.3945312 C4.43496094,13.4015625 4.50527344,13.3365234 4.50527344,13.2539062 L4.50527344,12.1921875 C4.50527344,12.121875 4.45253906,12.0621094 4.38222656,12.0533203 C3.90761719,11.9935547 3.459375,11.7861328 3.11484375,11.446875 C2.69296875,11.0337891 2.4609375,10.4783203 2.4609375,9.88945312 C2.4609375,9.39726562 2.62089844,8.93320312 2.92148438,8.54648437 C3.21503906,8.1703125 3.628125,7.89785156 4.08339844,7.77832031 L4.74960938,7.60253906 L4.99394531,6.95742188 C5.14511719,6.55664062 5.35605469,6.18046875 5.62148438,5.84121094 C5.88339844,5.50371094 6.19453125,5.20839844 6.54257813,4.96230469 C7.26503906,4.45429688 8.11582031,4.18535156 9.00351563,4.18535156 C9.89121094,4.18535156 10.7419922,4.45429688 11.4644531,4.9640625 C11.8142578,5.21015625 12.1236328,5.50546875 12.3855469,5.84296875 C12.6509766,6.18222656 12.8619141,6.55839844 13.0130859,6.95917969 L13.2556641,7.60253906 L13.9201172,7.77832031 C14.8728516,8.03144531 15.5390625,8.89804688 15.5390625,9.88769531 C15.5390625,10.4783203 15.3070313,11.0320312 14.8851563,11.4451172 C14.5423828,11.7826172 14.0958984,11.9917969 13.6212891,12.0515625 C13.5509766,12.0603516 13.5,12.1201172 13.5,12.1904297 L13.5,13.2539062 C13.5,13.3365234 13.5720703,13.4015625 13.6546875,13.3945312 C15.4423828,13.2328125 16.8626953,11.7421875 16.8750743,9.91054687 C16.8855469,8.26875 15.7728516,6.88535156 14.2628906,6.48457031 L14.2628906,6.48457031 Z\",\n id: \"Path\",\n fill: \"#FFFFFF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.62519531,11.5382812 C6.65683594,10.9494141 6.90117187,10.4009766 7.31953125,9.98085937 C7.76601562,9.53261719 8.37421875,9.28125 9.00703125,9.28125 C9.64335938,9.28125 10.2427734,9.52910156 10.6945313,9.98085937 C10.7191406,10.0054687 10.7419922,10.0300781 10.7666016,10.0564453 L10.3271484,10.4009766 C10.2844219,10.4340289 10.2644048,10.4886343 10.2756465,10.5414702 C10.2868882,10.5943062 10.3274014,10.6360327 10.3798828,10.6488281 L12.1060547,11.0707031 C12.1939453,11.0917969 12.2800781,11.025 12.2800781,10.9353516 L12.2888672,9.1546875 C12.2888672,9.03691406 12.1552734,8.97011719 12.0621094,9.04394531 L11.6542969,9.36386719 C11.0109375,8.62558594 10.0652344,8.15800781 9.00878906,8.15800781 C7.12089844,8.15800781 5.58105469,9.65390625 5.50371094,11.5277344 C5.50019531,11.6068359 5.56347656,11.6736328 5.64433594,11.6736328 L6.48632812,11.6736328 C6.56015625,11.671875 6.62167969,11.6138672 6.62519531,11.5382812 L6.62519531,11.5382812 Z M12.3574219,11.671875 L11.5154297,11.671875 C11.4416016,11.671875 11.3800781,11.7298828 11.3748047,11.8054687 C11.3431641,12.3943359 11.0988281,12.9427734 10.6804687,13.3628906 C10.2339844,13.8111328 9.62578125,14.0625 8.99296875,14.0625 C8.35664062,14.0625 7.75722656,13.8146484 7.30546875,13.3628906 C7.28085937,13.3382812 7.25800781,13.3136719 7.23339844,13.2873047 L7.67285156,12.9427734 C7.71557808,12.9097211 7.73559523,12.8551157 7.72435353,12.8022798 C7.71311184,12.7494438 7.67259855,12.7077173 7.62011719,12.6949219 L5.89394531,12.2730469 C5.80605469,12.2519531 5.71992187,12.31875 5.71992187,12.4083984 L5.71289062,14.1908203 C5.71289062,14.3085937 5.84648438,14.3753906 5.93964844,14.3015625 L6.34746094,13.9816406 C6.99082031,14.7199219 7.93652344,15.1875 8.99296875,15.1875 C10.8808594,15.1875 12.4207031,13.6916016 12.4980469,11.8177734 C12.5015625,11.7386719 12.4382812,11.671875 12.3574219,11.671875 Z\",\n id: \"Shape\",\n fill: \"#FFFFFF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle\",\n fillOpacity: 0,\n fill: \"#000000\",\n x: 0,\n y: 0,\n width: 18,\n height: 18\n})))));\n\nvar SvgOnlinePin = function SvgOnlinePin(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"26px\",\n height: \"26px\",\n viewBox: \"0 0 26 26\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgOnlinePin, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/online-pin.f271c3b5.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport { Tooltip } from \"antd\";\nimport { ReactComponent as OfflinePin } from \"../../assets/images/map-pins/offline-pin.svg\";\nimport { ReactComponent as OnlinePin } from \"../../assets/images/map-pins/online-pin.svg\";\n\ninterface Props {\n assetStatus: boolean;\n}\nconst AssetStatus: React.FC<Props> = ({ assetStatus }) => {\n if (assetStatus) {\n return (\n <Tooltip title=\"Online\">\n <OnlinePin style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n );\n } else {\n return (\n <Tooltip title=\"Offline\">\n <OfflinePin style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n );\n }\n};\n\nexport default AssetStatus;\n","import React, { CSSProperties, Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Space, Typography,Tooltip,Row,Col, Badge } from \"antd\";\nimport history from '../../utils/history';\nimport { stringToUrlString } from \"../../utils/commonHelpers\";\nimport { useAssetStatus } from \"./useAssetStatus\";\nimport AssetStatus from \"./AssetStatus\";\nimport Icon from \"@ant-design/icons\";\nimport { BarcodeOutlined, FileTextOutlined, CaretLeftOutlined } from \"@ant-design/icons\";\nimport { ReactComponent as TractorIcon } from \"../../assets/images/tractor-black.svg\";\nimport { ReactComponent as BellSvg } from \"../../assets/images/bell.svg\";\nimport { ReactComponent as Dm1Pin } from \"../../assets/images/map-pins/dm1-pin.svg\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport { ReactComponent as OperatorIcon } from \"../../assets/images/operator.svg\";\n\nconst { Title } = Typography;\n\ninterface Props {\n name: string;\n id: string;\n mastertag: string;\n templateId: string;\n templateName: string;\n alertDm1Count: number;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n mac: string;\n userRole: string; \n isRead: boolean;\n isUpdate: boolean;\n operatorId: string;\n operatorIdValue: string;\n accessCardValue: string;\n operatorsHistoryId: string;\n isOprRead: any;\n isOprUpdate:any\n isassetUpdate: boolean;\n istemplatesRead: boolean;\n}\n\nconst Header: React.FC<Props> = ({\n name, id, mastertag, templateName, templateId, mac, alertInfoCount, alertDm1Count, alertWarningCount, alertCriticalCount, userRole, isRead, isUpdate, operatorId, accessCardValue, operatorIdValue, operatorsHistoryId, isOprRead, isOprUpdate, isassetUpdate, istemplatesRead\n }) => {\n const styles: CSSProperties = {\n fontSize: \"14px\",\n fontWeight: 400,\n verticalAlign: \"text-bottom\",\n marginRight: \"10px\"\n };\n\n const goToDetails = (e: any,templateName: string, templateId: string) => {\n e.preventDefault();\n history.push(\"/template/details/\" + stringToUrlString(templateName) + \"/\" + templateId);\n };\n\n const goToAsset = (e: any, mac?:string) => {\n e.preventDefault(); \n history.push(\"/assets\" + ((mac || \"\") === \"\" ? \"\" : \"/\" + mac + \"/details\"));\n };\n\n const assetStatus = useAssetStatus(id);\n\n const goToOperators = (e: any, id: string, operatorsHistoryId?: string,isOperator?:boolean) => {\n e.preventDefault();\n history.push({pathname:\"/operators/\" + stringToUrlString(id) + ((operatorsHistoryId || \"\") === \"\" ? \"\" : \"/\" + operatorsHistoryId),state:{isOperator:isOperator}});\n };\n\n //const oprIdValue = (operatorIdValue || \"\") === \"\" ? accessCardValue : operatorIdValue;\n //const operatorHistoryId = (accessCardValue || \"\") !== \"\" ? operatorsHistoryId : \"\";\n\n return ( \n <Row> \n <Col>\n {/* <Space direction=\"horizontal\" align=\"center\" size=\"middle\"> */}\n <div className=\"column\"> \n <Title style={styles} level={4}>\n <Tooltip title=\"Go To Previous Page\">\n <div style={{ position: \"relative\", top: \"6px\", left: \"5px\"}}>\n <BackNavigation />\n </div>\n </Tooltip>\n </Title> \n <Title style={styles} level={4}>\n <AssetStatus assetStatus={assetStatus} />\n </Title> \n <Title style={styles} level={4}> \n <Tooltip title=\"AssetName\"> \n <Icon type=\"setting\" component={TractorIcon} style={{ verticalAlign: \"middle\", fontSize: '22px'}} />\n </Tooltip> {name}\n </Title>\n {istemplatesRead ? \n <Title style={styles} level={4}>\n <Tooltip title=\"Template\"><FileTextOutlined style={{ verticalAlign: \"middle\", fontSize: '22px' }} /></Tooltip> \n <a href=\"# \" onClick={(e) => goToDetails(e, templateName, templateId)}>{templateName}</a>\n </Title> : <Title style={styles} level={4}>\n <Tooltip title=\"Template\"><FileTextOutlined style={{ verticalAlign: \"middle\", fontSize: '22px' }} /></Tooltip> \n {templateName}\n </Title>\n } \n {isassetUpdate ? \n <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\"><BarcodeOutlined style={{ verticalAlign: \"middle\", fontSize: '22px'}} /></Tooltip>\n <a href=\"# \" onClick={(e) => goToAsset(e, mac)}> {mac} </a>\n </Title> : <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\"><BarcodeOutlined style={{ verticalAlign: \"middle\", fontSize: '22px'}} /></Tooltip>\n {mac} \n </Title>\n }\n {\n (isOprRead && isOprUpdate) && (operatorIdValue || accessCardValue) ?\n <Title style={styles} level={4}>\n <Tooltip title={(operatorIdValue || \"\") === \"\" ? \"RFID\" : \"OperatorID\"}>\n <Icon type=\"setting\" component={OperatorIcon} style={{ verticalAlign: \"middle\", fontSize: '22px' }} />\n </Tooltip> {\n (operatorIdValue || \"\") === \"\" ?\n <a href=\"# \" onClick={(e) => goToOperators(e, accessCardValue, operatorsHistoryId,false)}> {accessCardValue} </a>\n : <a href=\"# \" onClick={(e) => goToOperators(e, operatorIdValue, operatorId,true)}> {operatorIdValue} </a>\n }\n </Title> : \"\"\n \n } \n\n </div>\n <div className=\"asset-header asset-header1\">\n <Title style={styles} level={4}>\n <div style={{ position: \"relative\", top: \"6px\", left: \"5px\"}}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip>\n </div>\n </Title> \n <Title style={styles} level={4}>\n <AssetStatus assetStatus={assetStatus} />\n </Title> \n <Title style={styles} level={4}> \n <Tooltip title=\"AssetName\"> \n <Icon type=\"setting\" component={TractorIcon} style={{ verticalAlign: \"middle\", fontSize: '22px'}} />\n </Tooltip> {name}\n </Title>\n {/* <Title style={styles} level={4}> \n <Link to={{\n pathname:\"/alerts/signal-alarms/\" + mastertag \n }}>\n <Badge count={alertInfoCount + alertWarningCount + alertCriticalCount}>\n <Tooltip title=\"Signal Alarms\" >\n <BellSvg style={{ verticalAlign: \"middle\" }} /> \n </Tooltip> \n </Badge>\n </Link>\n </Title> */}\n {/* <Title style={styles} level={4}> \n <Link to={{\n pathname:\"/alerts/dm1-faults/\" + mastertag\n //state:[{mastertag:mastertag, mode:\"1\"}]\n }}>\n <Badge count={alertInfoCount + alertWarningCount + alertCriticalCount}>\n <Tooltip title=\"DM1 Faults\" >\n <Dm1Pin style={{ verticalAlign: \"middle\" }} /> \n </Tooltip> \n </Badge>\n </Link> \n </Title> */}\n </div>\n {/* <div className=\"asset-header asset-header2\"> */}\n <div className=\"asset-header\">\n {isRead ? \n <Title style={styles} level={4}>\n <Tooltip title=\"Template\"><FileTextOutlined style={{ verticalAlign: \"middle\", fontSize: '22px' }} /></Tooltip> \n <a href=\"# \" onClick={(e) => goToDetails(e, templateName, templateId)}>{templateName}</a>\n </Title> : <Title style={styles} level={4}>\n <Tooltip title=\"Template\"><FileTextOutlined style={{ verticalAlign: \"middle\", fontSize: '22px' }} /></Tooltip> \n {templateName}\n </Title>\n }\n {isRead && isUpdate ?\n <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\"><BarcodeOutlined style={{ verticalAlign: \"middle\", fontSize: '22px'}} /></Tooltip>\n <a href=\"# \" onClick={(e) => goToAsset(e, mac)}> {mac} </a>\n </Title> : <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\"><BarcodeOutlined style={{ verticalAlign: \"middle\", fontSize: '22px'}} /></Tooltip>\n {mac} \n </Title>\n }\n {\n (isOprRead && isOprUpdate) && (operatorIdValue || accessCardValue) ?\n <Title style={styles} level={4}>\n <Tooltip title={(operatorIdValue || \"\") === \"\" ? \"RFID\" : \"OperatorID\"}>\n <Icon type=\"setting\" component={OperatorIcon} style={{ verticalAlign: \"middle\", fontSize: '22px' }} />\n </Tooltip> {\n (operatorIdValue || \"\") === \"\" ?\n <a href=\"# \" onClick={(e) => goToOperators(e, accessCardValue, operatorsHistoryId,false)}> {accessCardValue} </a>\n : <a href=\"# \" onClick={(e) => goToOperators(e, operatorIdValue, operatorId,true)}> {operatorIdValue} </a>\n }\n </Title> : \"\"\n } \n </div>\n {/* </Space> */}\n </Col>\n </Row>\n );\n};\n\nexport default Header;\n","import React, { useState } from \"react\";\nimport moment, { Moment } from \"moment\";\nimport {\n Form,\n Card,\n Row,\n Col,\n DatePicker,\n TimePicker,\n Select,\n Button,\n Input,\n} from \"antd\";\nimport { FilterFormProps } from \"./FilterFormContainer\";\nimport { WidgetFilterConfig } from \".\";\nimport { addDateAndTime, getUnixDate, validateForms } from \"../widgets/common\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nconst datapointValues = appConfigs.app.assetOverview.datapointlimits.map(\n (d) => ({\n value: d,\n label: d,\n })\n);\n\nfunction sanitizeInputs(c: WidgetFilterConfig): WidgetFilterConfig {\n return {\n startDate: c.startDate,\n endDate: c.endDate,\n startTime: c.startTime,\n endTime: c.endTime,\n datapoint: c.datapoint,\n };\n}\n\nconst FilterForm: React.FC<FilterFormProps> = (props) => {\n const [datapoint, setDatapoint] = useState(props.config?.datapoint || 50);\n\n const initialValues: WidgetFilterConfig = {\n startDate: props.config?.startDate ? props.config?.startDate : moment().subtract(1, \"days\"),\n startTime: props.config?.startTime ? props.config?.startTime : moment().subtract(1, \"days\"),\n endDate: props.config?.endDate ? props.config?.endDate : moment(),\n endTime: props.config?.endTime ? props.config?.endTime : moment(),\n datapoint: props.config?.datapoint\n };\n\n const onStartTimeChange = (time: Moment | null) => {\n if (!props.form.getFieldValue(\"startDate\"))\n props.form.setFieldsValue({ startDate: moment() });\n };\n\n const onEndTimeChange = (time: Moment | null) => {\n if (!props.form.getFieldValue(\"endDate\"))\n props.form.setFieldsValue({ endDate: moment() });\n };\n\n const onDateChange = (date: Moment | null, timeFieldName: string) => {\n props.form.setFieldsValue({ [timeFieldName]: (date ? moment(\"00:00:00\", \"HH:mm:ss\") : null) });\n };\n\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) =>\n props.onFinish(sanitizeInputs(values as WidgetFilterConfig))\n }\n layout=\"vertical\"\n form={props.form}\n initialValues={initialValues}\n >\n <Card title=\"Filter Widget\">\n <Row></Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={24}>\n <Form.Item label=\"Start Date\">\n <Input.Group compact>\n <Form.Item\n noStyle\n name=\"startDate\" \n dependencies={[\"startTime\", \"endDate\", \"endTime\"]}\n rules={[\n ({ getFieldValue }) => ({\n validator(rule, value) {\n return validateForms(\n value,\n getFieldValue(\"endDate\"),\n getFieldValue(\"startTime\"),\n getFieldValue(\"endTime\")\n );\n },\n }),\n ]}\n >\n <DatePicker inputReadOnly onChange={(date) => onDateChange(date, \"startTime\")} />\n </Form.Item>\n <Form.Item noStyle name=\"startTime\">\n <TimePicker inputReadOnly onChange={onStartTimeChange} />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n <Row>\n <Col>\n <Form.Item label=\"End Date\">\n <Input.Group compact>\n <Form.Item noStyle name=\"endDate\">\n <DatePicker inputReadOnly onChange={(date) => onDateChange(date, \"endTime\")} />\n </Form.Item>\n <Form.Item noStyle name=\"endTime\">\n <TimePicker inputReadOnly onChange={onEndTimeChange} />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={24}>\n <Form.Item name=\"datapoint\" label=\"Datapoint Limit\">\n <Select\n style={{ width: \"95%\" }}\n onChange={(v) => setDatapoint(v)}\n value={datapoint}\n options={datapointValues}\n />\n </Form.Item>\n </Col>\n </Row>\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default FilterForm;\n","import React, { useState, useEffect } from \"react\";\nimport { DETAILS as WIDGET_DETAILS } from \"../widgets\";\nimport { Template } from \"../models\";\nimport { Form, Select, ConfigProvider } from \"antd\";\nimport Event from \"../../../lib/event\";\nimport FilterForm from \"./FilterForm\";\nimport { WidgetFilterConfig } from \".\";\nimport validationMessages from \"./validation-messages\";\n\ntype FormInstance = ReturnType<typeof Form.useForm>[0];\n\ninterface Props {\n config?: WidgetFilterConfig;\n onFinish: FilterFormProps[\"onFinish\"];\n submitTrigger: Event;\n}\n\nexport interface FilterFormProps {\n config?: WidgetFilterConfig;\n onFinish: (wfg: WidgetFilterConfig) => void;\n form: FormInstance;\n layout?: \"horizontal\" | \"vertical\";\n}\n\nconst FilterFormContainer: React.FC<Props> = (props) => {\n const [form] = Form.useForm();\n\n useEffect(() => {\n const listener = props.submitTrigger.subscribe(() => form.submit());\n return () => listener.remove();\n }, [form, props.submitTrigger]);\n\n const filterProps: FilterFormProps = {\n config: props.config,\n form: form,\n onFinish: props.onFinish,\n layout: \"vertical\",\n };\n\n return (\n <div className=\"widget-filter-form\">\n <FilterForm {...filterProps} />\n </div>\n );\n};\n\nexport default FilterFormContainer;\n","import React, {useState} from 'react';\nimport {Drawer, Button } from 'antd';\nimport { WidgetFilterConfig } from '.';\nimport Event from '../../../lib/event';\nimport FilterFormContainer from './FilterFormContainer';\nimport { appConfigs } from '../../../utils/configurations';\n\ninterface Props { \n config?: WidgetFilterConfig;\n onFinish: (wfg: WidgetFilterConfig) => void; \n title: string;\n visible: boolean;\n onClose: () => void;\n \n}\n\n\nconst WidgetFilterDrawer: React.FC<Props> = (props) => {\n const [submitter] = useState(new Event());\n const drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n return (\n <Drawer\n width={drawerWidth}\n placement=\"right\"\n {...props}\n footer={\n \n <Button\n type=\"primary\"\n htmlType=\"button\"\n onClick={() => submitter.trigger()}\n >\n Save\n </Button>\n }\n onClose={props.onClose}\n destroyOnClose\n >\n <FilterFormContainer\n {...props}\n onFinish={(cfg) => {\n props.onFinish(cfg);\n props.onClose(); \n }}\n submitTrigger={submitter}\n />\n </Drawer>\n );\n};\n\nexport default WidgetFilterDrawer;","import React, { useState } from \"react\";\nimport moment, { Moment } from \"moment\";\nimport {\n Form,\n Card,\n Row,\n Col,\n DatePicker,\n TimePicker,\n Select,\n Input,\n} from \"antd\";\nimport { ExportFormProps } from \"./ExportFormContainer\";\nimport { WidgetExportConfig } from \".\";\nimport { exportValidateForms } from \"../widgets/common\";\nconst { Option } = Select;\n\nfunction sanitizeInputs(c: WidgetExportConfig): WidgetExportConfig {\n return {\n startDate: c.startDate,\n endDate: c.endDate,\n startTime: c.startTime,\n endTime: c.endTime,\n };\n}\n\nconst ExportForm: React.FC<ExportFormProps> = (props) => {\n const initialValues: WidgetExportConfig = {\n startDate: props.config?.startDate\n ? props.config?.startDate\n : moment().subtract(1, \"days\"),\n startTime: props.config?.startTime\n ? props.config?.startTime\n : moment().subtract(1, \"days\").set({\n hour: 0,\n minute: 0,\n second: 0,\n }),\n endDate: props.config?.endDate ? props.config?.endDate : moment(),\n endTime: props.config?.endTime\n ? props.config?.endTime\n : moment().set({\n hour: 0,\n minute: 0,\n second: 0,\n }),\n };\n\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) =>\n props.onFinish(sanitizeInputs(values as WidgetExportConfig))\n }\n layout=\"vertical\"\n form={props.form}\n initialValues={initialValues}\n >\n <Card title=\"Export Widget\">\n <Row>\n <Col>\n <Form.Item label=\"Start Date\">\n <Input.Group compact>\n <Form.Item\n noStyle\n name=\"startDate\"\n dependencies={[\"startTime\", \"endDate\", \"endTime\"]}\n rules={[\n { required: true, message: \"Start Date required\" },\n ({ getFieldValue }) => ({\n validator(rule, value) {\n return exportValidateForms(\n value,\n getFieldValue(\"endDate\"),\n getFieldValue(\"startTime\"),\n getFieldValue(\"endTime\")\n );\n },\n }),\n ]}\n >\n <DatePicker inputReadOnly />\n </Form.Item>\n <Form.Item\n noStyle\n name=\"startTime\"\n rules={[\n {\n required: true,\n message: \"Start Time required\",\n },\n ]}\n >\n <TimePicker inputReadOnly />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n <Row>\n <Col>\n <Form.Item label=\"End Date\">\n <Input.Group compact>\n <Form.Item noStyle name=\"endDate\">\n <DatePicker inputReadOnly />\n </Form.Item>\n <Form.Item\n noStyle\n name=\"endTime\"\n rules={[\n {\n required: true,\n message: \"End Time required\",\n },\n ]}\n >\n <TimePicker inputReadOnly />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default ExportForm;\n","import React, { useState, useEffect } from \"react\";\nimport { \n DETAILS as WIDGET_DETAILS,\n} from \"../widgets\";\nimport { Template } from \"../models\";\nimport { Form, Select, ConfigProvider } from \"antd\";\nimport Event from \"../../../lib/event\";\nimport ExportForm from \"./ExportForm\";\nimport { WidgetExportConfig } from '.';\nimport validationMessages from \"./validation-messages\";\n\ntype FormInstance = ReturnType<typeof Form.useForm>[0];\n\ninterface Props {\n config?: WidgetExportConfig;\n onFinish: ExportFormProps[\"onFinish\"];\n submitTrigger: Event;\n}\n\nexport interface ExportFormProps {\n config?: WidgetExportConfig; \n onFinish: (wfg: WidgetExportConfig) => void;\n form: FormInstance;\n layout?: \"horizontal\" | \"vertical\";\n}\n\n\nconst ExportFormContainer: React.FC<Props> = (props) => {\n const [form] = Form.useForm();\n\n useEffect(() => {\n const listener = props.submitTrigger.subscribe(() => form.submit());\n return () => listener.remove();\n }, [form, props.submitTrigger]);\n\n const filterProps: ExportFormProps = {\n config: props.config,\n form: form,\n onFinish: props.onFinish,\n layout: \"vertical\"\n }\n\n return (\n <div className=\"widget-export-form\"> \n <ExportForm {...filterProps} />\n </div>\n );\n};\n\nexport default ExportFormContainer;\n","import React, { useState } from \"react\";\nimport { Drawer, Button } from \"antd\";\nimport { WidgetExportConfig } from \".\";\nimport Event from \"../../../lib/event\";\nimport ExportFormContainer from \"./ExportFormContainer\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\ninterface Props {\n config?: WidgetExportConfig;\n onFinish: (wfg: WidgetExportConfig) => void;\n title: string;\n visible: boolean;\n onClose: () => void;\n}\n\nconst WidgetExportDrawer: React.FC<Props> = (props) => {\n const [submitter] = useState(new Event());\n const drawerWidth: number = Math.min(\n window.innerWidth,\n appConfigs.settings.drawers.defaultWidth\n );\n\n return (\n <Drawer\n width={drawerWidth}\n placement=\"right\"\n {...props}\n footer={\n <Button\n type=\"primary\"\n htmlType=\"button\"\n onClick={() => submitter.trigger()}\n >\n Save\n </Button>\n }\n onClose={props.onClose}\n destroyOnClose\n >\n <ExportFormContainer\n {...props}\n onFinish={(cfg) => {\n props.onFinish(cfg);\n props.onClose();\n }}\n submitTrigger={submitter}\n />\n </Drawer>\n );\n};\n\nexport default WidgetExportDrawer;\n","import moment, { Moment } from \"moment\";\nimport { WidgetExportConfig } from \".\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { State, WidgetState } from \"../state\";\nimport * as Api from \"../api\";\nimport { addDateAndTime } from \"../widgets/common\";\n\n\nfunction lastTimeStamp(apiResponse: any) {\n const lastDatapoint = apiResponse[apiResponse.length - 1];\n const utc = moment.utc(lastDatapoint[\"timestamp\"]);\n return moment.utc(lastDatapoint[\"timestamp\"]);\n}\n\nfunction nextDayTimeStamp(startDate: Moment) {\n let tomorrow = startDate.add(1, \"days\");\n return tomorrow.set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\n}\n\nexport function exportCsv(\n state: State,\n widgetState: WidgetState,\n cnfg: WidgetExportConfig\n): Promise<any> {\n const datapointArray: any = [];\n widgetState.signals.forEach((si) => {\n const datapoint = state.template.signalCollections.filter((s) =>\n s.signals.find((sg) => sg.id === si)\n )[0];\n\n if (datapoint && datapoint[\"id\"]) {\n datapointArray.push({ datapointId: datapoint.id, name: datapoint.name });\n }\n });\n //stop the repeataion of datapoints\n const uniqsignalCollectionId = datapointArray\n .filter((elem: any, pos1: any, arr: any) => {\n return arr.findIndex((t:any)=>(t.datapointId === elem.datapointId))===pos1\n })\n .filter((x: any) => !!x);\n\n let startDate = addDateAndTime(cnfg.startDate, cnfg.startTime);\n let endDate = addDateAndTime(cnfg.endDate, cnfg.endTime);\n\n const promises = uniqsignalCollectionId.map((elem: any) => fetchDataSlice(startDate, endDate, 3000, elem.datapointId, elem.name, state.asset.id));\n return Promise.all(promises);\n}\n\nasync function fetchDataSlice(\n startDate: Moment,\n stopDate: Moment,\n limit: number,\n datapointId: string,\n datapointName: string,\n gatewayId: string\n) {\n const MAX_DATAPOINT_LIMIT = appConfigs.app.assetOverview.maxdatapointlimit;\n const MAX_API_LIMIT = appConfigs.app.assetOverview.maxapilimit;\n let eventData: any = [];\n\n let startDate1 = startDate.clone();\n let stopDate1 = stopDate.clone();\n\n const formatResponse = (responseData: any) => ({\n datapointId: datapointId,\n datapointName: datapointName,\n datapointRecords: responseData,\n });\n\n \n while (\n stopDate1.valueOf() > startDate1.valueOf() &&\n eventData.length < MAX_DATAPOINT_LIMIT\n ) {\n try { \n let { data } = await getDataFromApi(\n startDate1,\n stopDate1,\n limit,\n gatewayId,\n datapointId\n );\n //sort the from asc to desc\n data = data.sort((a: any, b: any) => {\n const timeStamp1 = moment(a[\"timestamp\"]).valueOf();\n const timeStamp2 = moment(b[\"timestamp\"]).valueOf();\n return timeStamp1 - timeStamp2\n });\n if (data.length < MAX_API_LIMIT || data.length === 0) {\n startDate1 = nextDayTimeStamp(startDate1);\n }\n if (data.length >= MAX_API_LIMIT) {\n startDate1 = lastTimeStamp(data).add(10, \"milliseconds\");\n }\n let remainingRecordToFetch =\n MAX_DATAPOINT_LIMIT - (eventData.length + data.length);\n if (remainingRecordToFetch < MAX_API_LIMIT) {\n limit = remainingRecordToFetch;\n }\n eventData = [...eventData, ...data]; \n } catch (error) {\n throw new Error(`Error in fetching data: ${error}`); \n }\n }\n return formatResponse(eventData);\n}\n\nasync function getDataFromApi(\n startDate: Moment,\n stopDate: Moment,\n limit: number,\n gatewayId: string,\n datapointId: string\n): Promise<any> {\n let conString = `${appConfigs.server.URL}/ui/api/assets/gateway/${gatewayId}/datapoint/${datapointId}/events`;\n\n conString += `?limit=${limit}`;\n\n conString += `&startDate=${startDate.valueOf()}`;\n let currDayEndDateTime = moment(startDate);\n currDayEndDateTime.set({\n hour: 23,\n minute: 59,\n second: 59,\n millisecond: 999,\n });\n let currDayEndEpochTime = currDayEndDateTime.valueOf();\n\n if (currDayEndDateTime.valueOf() > stopDate.valueOf()) {\n conString += `&endDate=${stopDate.valueOf()}`;\n } else {\n conString += `&endDate=${currDayEndEpochTime}`;\n }\n return Api.csvExportApi(conString);\n}\n","import { SignalCollection, Template } from \"../models\";\nimport { State, WidgetState } from \"../state\";\n\ninterface CsvHeader {\n label: string;\n key: string;\n}\n\nfunction fetchSignalDetails(\n event: any,\n datapointName: string,\n mastertag: string,\n name: string,\n org: string\n) {\n const { timestamp, signals = [] } = event;\n let eventsArray = signals.reduce((cum: object, elem: any) => {\n let name = elem.name;\n if (elem.uom !== \"\") {\n name += `(${elem.uom})`;\n }\n return { ...cum, [name]: elem.value };\n }, {});\n return {\n ...eventsArray,\n timestamp: timestamp,\n mastertag: mastertag,\n assetName: name,\n orgName: org,\n signalCollectionName: datapointName,\n };\n}\n\nfunction createHeader(arrayOfObj: any, headerArray: any) {\n let notPresentKeys = Object.keys(arrayOfObj).filter((k: string) => {\n return headerArray.findIndex((s: any) => s.key == k) === -1;\n });\n const headerKeys = notPresentKeys.reduce((cum1: any, elem1: any) => {\n return [...cum1, { label: elem1, key: elem1 }];\n }, []);\n headerArray = [...headerArray, ...headerKeys];\n return headerArray;\n}\n//sort the export response data by signal collection order\nfunction sortResponse(response: any, template: Template) {\n let sortedExportEvents: any = [];\n const { signalCollections } = template;\n const newSignalCollections = [...signalCollections];\n if (signalCollections.length > 0) {\n const sortedSignalCollections = sortSignalCollection(newSignalCollections);\n sortedSignalCollections.forEach((current: SignalCollection) => {\n const newResponse = response.filter(\n (elem: any) => elem.datapointId === current.id\n );\n if (newResponse.length > 0) {\n sortedExportEvents = [...sortedExportEvents, newResponse[0]];\n }\n });\n }\n return sortedExportEvents;\n}\n//sort the signal collection by alphabet.\nfunction sortSignalCollection(\n signalCollections: SignalCollection[]\n): SignalCollection[] {\n const sortedSignalCollections = signalCollections.sort(\n (elem1: SignalCollection, elem2: SignalCollection) => {\n return elem2.name.toLocaleLowerCase() < elem1.name.toLocaleLowerCase()\n ? 1\n : elem2.name.toLocaleLowerCase() > elem1.name.toLocaleLowerCase()\n ? -1\n : 0;\n }\n );\n return sortedSignalCollections;\n}\n\nexport function prepareWidgetEvents(\n response: any,\n state: State,\n widgetState: WidgetState\n) {\n const { template } = state;\n const { mastertag, name, orgName } = state.asset;\n if (template.signalCollections.length > 1) {\n response = sortResponse(response, template);\n }\n let headerArray: CsvHeader[] = [\n { label: \"Time Stamp (UTC)\", key: \"timestamp\" },\n { label: \"Organization Name\", key: \"orgName\" },\n { label: \"Master Tag\", key: \"mastertag\" },\n { label: \"Asset Name\", key: \"assetName\" },\n { label: \"Signal Collection Name\", key: \"signalCollectionName\" },\n ];\n\n const eventsArrays = response.reduce((eventArray: any, curElemenet: any) => {\n let isHeaderKeysAdded = false;\n const singleEventArray = curElemenet.datapointRecords.reduce(\n (eventDataArray: any, current: any) => {\n const arrayOfObj = fetchSignalDetails(\n current,\n curElemenet.datapointName,\n mastertag,\n name,\n orgName\n );\n \n headerArray = createHeader(arrayOfObj, headerArray);\n eventDataArray = [...eventDataArray, arrayOfObj];\n return eventDataArray;\n },\n []\n );\n eventArray = [...eventArray, ...singleEventArray];\n return eventArray;\n }, []);\n\n return {\n eventHeader: headerArray,\n eventArray: eventsArrays,\n };\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Maps\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Home-Landing---map-closeup---offline-w/signals\",\n transform: \"translate(-856.000000, -340.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"YELLOW\",\n transform: \"translate(856.000000, 340.000000)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval\",\n fill: \"#ff9900\",\n cx: 13,\n cy: 13,\n r: 13\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-7\",\n transform: \"translate(4.000000, 6.000000)\",\n fill: \"#FFFFFF\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"noun_Engine_1041523\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.1119638,4.14202575 L15.6799735,4.14202575 C15.4224674,4.14202575 15.2139412,4.35779859 15.2139412,4.62425344 L15.2139412,5.70482839 L14.4124895,5.70482839 L14.4124895,4.21259566 C14.4124895,3.9461408 14.2039633,3.73036797 13.9464572,3.73036797 L11.8702882,3.73036797 L11.8702882,2.69940581 C11.8702882,2.43337865 11.661762,2.21717812 11.4042559,2.21717812 L9.26133375,2.21717812 L9.26133375,0.964455374 L11.0250234,0.964455374 C11.2825295,0.964455374 11.4910557,0.748040998 11.4910557,0.482227687 C11.4910557,0.215772832 11.2825295,0 11.0250234,0 L4.69215008,0 C4.43464396,0 4.22611773,0.215772832 4.22611773,0.482227687 C4.22611773,0.748254846 4.43485062,0.964455374 4.69215008,0.964455374 L6.52651953,0.964455374 L6.52651953,2.21717812 L4.69215008,2.21717812 C4.43464396,2.21717812 4.22611773,2.43337865 4.22611773,2.69940581 L4.22611773,3.73036797 L2.53269464,3.73036797 C2.27518852,3.73036797 2.0666623,3.9461408 2.0666623,4.21259566 L2.0666623,7.26378175 L0.932064696,7.26378175 L0.932064696,4.21580338 C0.932064696,3.94934853 0.723331804,3.73357569 0.466032348,3.73357569 C0.208526226,3.73357569 0,3.94934853 0,4.21580338 L0,11.372661 C0,11.6391159 0.208526226,11.8548887 0.466032348,11.8548887 C0.72353847,11.8548887 0.932064696,11.6391159 0.932064696,11.372661 L0.932064696,8.22845098 L2.06645563,8.22845098 L2.06645563,11.372661 C2.06645563,11.6391159 2.27498186,11.8548887 2.53248798,11.8548887 L6.8890121,11.8548887 L8.44748214,13.8233614 C8.53593528,13.9354178 8.66820167,14 8.80811471,14 L13.9462505,14 C14.2037566,14 14.4122829,13.7842272 14.4122829,13.5177723 L14.4122829,11.186827 L15.2137345,11.186827 L15.2137345,12.4269327 C15.2137345,12.6929598 15.4222607,12.9091603 15.6797668,12.9091603 L17.1117571,12.9091603 C17.3047834,12.9091603 17.4779697,12.7857699 17.5469962,12.5990805 C19.3937657,7.61256816 17.5858495,4.50043533 17.5079363,4.36998793 C17.4232032,4.22842043 17.2731635,4.14202575 17.1119638,4.14202575 Z M7.45899756,0.964455374 L8.32906239,0.964455374 L8.32906239,2.21717812 L7.45899756,2.21717812 L7.45899756,0.964455374 Z M16.7872912,11.944705 L16.1457992,11.944705 L16.1457992,10.7045993 C16.1457992,10.4381444 15.937273,10.2223716 15.6797668,10.2223716 L13.9462505,10.2223716 C13.6887444,10.2223716 13.4802182,10.4381444 13.4802182,10.7045993 L13.4802182,13.0353308 L9.02862757,13.0353308 L7.47015754,11.0668581 C7.38170439,10.9552294 7.249438,10.8902195 7.1093183,10.8902195 L2.99872699,10.8902195 L2.99872699,4.69482335 L4.69235674,4.69482335 C4.94986287,4.69482335 5.15838909,4.47905051 5.15838909,4.21259566 L5.15838909,3.18163349 L10.9382235,3.18163349 L10.9382235,4.21259566 C10.9382235,4.47905051 11.1467498,4.69482335 11.4042559,4.69482335 L13.4802182,4.69482335 L13.4802182,6.18705607 C13.4802182,6.45351093 13.6887444,6.66928376 13.9462505,6.66928376 L15.2139412,6.66928376 L15.2139412,8.35740144 C15.2139412,8.62385629 15.4224674,8.83962913 15.6799735,8.83962913 C15.9374796,8.83962913 16.1460059,8.62364245 16.1460059,8.35740144 L16.1460059,6.18705607 L16.1460059,5.10648113 L16.8300711,5.10648113 C17.1640437,5.84083584 18.0374152,8.30607787 16.7872912,11.944705 Z\",\n id: \"Shape\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.0046117,7.01730169 L8.35013766,7.01730169 L9.49632,5.09030176 C9.63250878,4.86146655 9.55057585,4.56975987 9.31312412,4.43851304 C9.07523308,4.30684282 8.77298185,4.38664937 8.63679307,4.61548458 L7.06556995,7.2571447 C6.97770622,7.40511492 6.97814554,7.58695529 7.0668879,7.73407876 C7.15563027,7.88120223 7.31861748,7.97201658 7.4956629,7.97201658 L9.11125721,7.97201658 L7.94662348,9.77009824 C7.80142867,9.99364124 7.87237863,10.2880999 8.10433888,10.4273909 C8.18583249,10.4767143 8.27677144,10.5 8.36639245,10.5 C8.53157626,10.5 8.69302586,10.4206168 8.78704005,10.2753986 L10.4248199,7.74762683 C10.5201521,7.60050336 10.5252043,7.41527597 10.4377798,7.26328366 C10.3505751,7.11192642 10.1847323,7.01730169 10.0046117,7.01730169 Z\",\n id: \"Path\"\n}))))));\n\nvar SvgDm1Pin = function SvgDm1Pin(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"26px\",\n height: \"26px\",\n viewBox: \"0 0 26 26\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgDm1Pin, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/dm1-pin.8d0988fa.svg\";\nexport { ForwardRef as ReactComponent };","import React,{CSSProperties} from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Space, Badge, Switch,Tooltip,Row,Col } from \"antd\";\nimport { ReactComponent as BellSvg } from \"../../assets/images/bell.svg\";\nimport { ReactComponent as Dm1Pin } from \"../../assets/images/map-pins/dm1-pin.svg\";\nimport { InputNumberProps } from \"antd/lib/input-number\";\nimport history from '../../utils/history';\nimport { stringToUrlString } from \"../../utils/commonHelpers\";\n\ninterface Props { \n onLayoutViewChange: (checked: boolean) => void;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n alertDm1Count: number;\n name: string;\n mastertag?: string;\n userRole: string;\n isCreate: boolean;\n isRead: boolean;\n isUpdate: boolean;\n isDelete: boolean;\n}\n\nconst PageHeaderExtra: React.FC<Props> = (props) => {\n const { \n onLayoutViewChange,\n alertInfoCount,\n alertWarningCount,\n alertCriticalCount,\n alertDm1Count,\n name,\n mastertag,\n userRole,\n isCreate,\n isRead,\n isUpdate,\n isDelete,\n } = props;\n\n const styles: CSSProperties = {\n fontSize: \"14px\",\n fontWeight: 400,\n verticalAlign: \"text-bottom\",\n marginRight: \"10px\",\n };\n\n return ( \n <>\n {/* <Space key=\"page-header-space\" direction=\"horizontal\" size=\"small\" className=\"asset-header\"> */}\n <Space key=\"page-header-space\" direction=\"horizontal\" size=\"small\" >\n \n <Link to={{\n pathname: \"/alerts\",\n state: [{ mode: \"signal-alarms\", mastertag: mastertag }]\n }}>\n {/*<Badge count={alertInfoCount + alertWarningCount + alertCriticalCount}>*/}\n <Tooltip title=\"Signal Alarms\" >\n <BellSvg style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n {/*</Badge>*/}\n </Link>\n \n <Link to={{\n pathname: \"/alerts\",\n state: [{ mode: \"dm1-faults\", mastertag: mastertag }]\n }}>\n {/*<Badge count={alertInfoCount + alertWarningCount + alertCriticalCount}>*/}\n <Tooltip title=\"DM1 Faults\" >\n <Dm1Pin style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n {/*</Badge>*/}\n </Link> \n\n {isUpdate ?\n <Switch\n key=\"layoutView\"\n checkedChildren=\"Off\"\n unCheckedChildren=\"On\"\n onChange={onLayoutViewChange}\n /> : ''\n } \n </Space> \n {/* <Space key=\"page-header-space\" direction=\"horizontal\" size=\"small\" className=\"asset-header\">\n <Link to={{\n pathname:\"/alerts/signal-alarms/\" + mastertag\n //state:[{mastertag:mastertag, mode:\"2\"}]\n }}>\n <Badge count={alertInfoCount + alertWarningCount + alertCriticalCount}>\n <Tooltip title=\"Signal Alarms\" >\n <BellSvg style={{ verticalAlign: \"middle\" }} /> \n </Tooltip> \n </Badge>\n </Link>\n <Link to={{\n pathname:\"/alerts/dm1-faults/\" + mastertag\n //state:[{mastertag:mastertag, mode:\"1\"}]\n }}>\n <Badge count={alertInfoCount + alertWarningCount + alertCriticalCount}>\n <Tooltip title=\"DM1 Faults\" >\n <Dm1Pin style={{ verticalAlign: \"middle\" }} /> \n </Tooltip> \n </Badge>\n </Link>\n </Space> */}\n </>\n );\n};\n\n\nexport default PageHeaderExtra;","import React, { useReducer, useEffect, useMemo, useState, useRef } from \"react\";\nimport { Grid, Button, PageHeader, Empty, message } from \"antd\";\nimport { SizeMe } from \"react-sizeme\";\nimport GridLayout, { ReactGridLayoutProps, Layout } from \"react-grid-layout\";\nimport { CSVLink } from \"react-csv\";\nimport \"react-grid-layout/css/styles.css\";\nimport {\n reducer,\n bindActions,\n initState,\n WidgetState,\n computeLayout,\n} from \"./state\";\nimport { WidgetConfig } from \"./widgets\";\nimport WidgetContainer from \"./WidgetContainer\";\nimport { PlusOutlined, CalculatorFilled } from \"@ant-design/icons\";\nimport WidgetEditDrawer from \"./WidgetEditForm\";\nimport * as Api from \"./api\";\nimport { loadingIndicatorEnd, loadingIndicatorStart, uuidv4, getPermissions } from \"../../utils/commonHelpers\";\nimport {\n editWidgetStructureForDb,\n addWidgetStructureForDb,\n saveLayoutDb,\n} from \"./widgets/widgetapi\";\nimport { DBWidgetConfig } from \"./models\";\nimport Header from \"./Header\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\nimport \"./AssetDashboard.css\";\nimport { useAssetStatus } from \"./useAssetStatus\";\nimport AssetStatus from \"./AssetStatus\";\nimport { WidgetFilterConfig, WidgetFilterDrawer } from \"./WidgetFilterForm\";\nimport {\n WidgetExportConfig,\n WidgetExportDrawer,\n exportCsv,\n prepareWidgetEvents,\n} from \"./WidgetExportForm\";\nimport { useAssetAlerts } from \"./useAssetAlerts\";\nimport PageHeaderExtra from \"./PageHeaderExtra\";\nimport { useExport } from \"./WidgetExportForm/useExport\";\nimport { connect } from \"react-redux\";\n//import { getPermissions } from \"../../actions/permissions\";\n\nconst { useBreakpoint } = Grid;\n\ntype Breakpoints = ReturnType<typeof useBreakpoint>;\n\nfunction columnNumber(breakpoints: Breakpoints) {\n if (breakpoints.xl) {\n return 4;\n } else if (breakpoints.lg) {\n return 3;\n } else if (breakpoints.md) {\n return 2;\n } else {\n return 1;\n }\n}\n\ninterface EditState {\n visible: boolean;\n title: string;\n onFinish: (cfg: WidgetConfig) => void;\n config?: WidgetConfig;\n onDualChange: (checked: boolean) => void;\n enabledualaxis:boolean;\n}\n\ninterface PageHeaderExtraProps {\n onLayoutViewChange: (checked: boolean) => void;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n alertDm1Count: number;\n name: string;\n mastertag: string;\n userRole: string; \n isCreate: boolean;\n isRead: boolean;\n isUpdate: boolean;\n isDelete: boolean;\n}\n\ninterface FilterState {\n visible: boolean;\n title: string;\n onFinish: (cfg: WidgetFilterConfig) => void;\n config?: WidgetFilterConfig;\n}\n\ninterface ExportState {\n visible: boolean;\n title: string;\n onFinish: (cfg: WidgetExportConfig) => void;\n}\n\ninterface Props{\n context: any,\n permissions: any\n}\n\nconst DEFAULT_FILTER_STATE: FilterState = {\n visible: false,\n title: \"\",\n onFinish: (cfg) => {},\n};\n\nconst DEFAULT_EXPORT_STATE: ExportState = {\n visible: false,\n title: \"\",\n onFinish: (cfg) => {},\n};\n\nconst DEFAULT_EDIT_STATE: EditState = {\n visible: false,\n title: \"\",\n onFinish: (cfg) => {},\n onDualChange:(checked)=>{},\n enabledualaxis:false\n};\n\nconst GRID_SETTINGS: ReactGridLayoutProps = {\n rowHeight: 400,\n compactType: \"vertical\",\n containerPadding: [0, 0],\n isDraggable: false,\n isResizable: false,\n};\n\nconst AssetDashboard: React.FC<{ initialData: Api.AssetDashboardResponse, context: any, permissions: any}> = (\n props\n) => {\n const columns = columnNumber(useBreakpoint());\n \n const [state, dispatch] = useReducer(\n reducer,\n initState(props.initialData, columns, props.context)\n );\n\n const { contextUser, appContext} = props.context; \n\n const result = getPermissions(props.permissions.permissions.asset_widgets);\n const assets = getPermissions(props.permissions.permissions.assets);\n const templates = getPermissions(props.permissions.permissions.templates);\n //ops-2839: Remove the iqanconnect key permission check \n //const iqanKey = getPermissions(props.permissions.permissions.iqan_key);\n \n // let isBarko = false;\n // if(appContext.roleName.toLowerCase() === 'guest'){\n // const barkoId = '17ad9f98-33df-48a0-8c4f-99468e22e129'; \n // for(let i=0; i< props.context.user.homeOrg.orgTree.length; i++){ \n // if(props.context.user.homeOrg.orgTree[i].orgId === barkoId){\n // isBarko = true;\n // }\n // } \n // }\n \n const permissionResult = getPermissions(props.permissions.permissions.operator_support);\n let isOprRead = permissionResult[1];\n let isOprUpdate = permissionResult[2]; \n\n const [editState, setEditState] = useState<EditState>(DEFAULT_EDIT_STATE);\n //enable and disable the layout resizing option\n const [gridResize, setGridResize] = useState<ReactGridLayoutProps>(\n GRID_SETTINGS\n );\n const [filterState, setFilterState] = useState<FilterState>(\n DEFAULT_FILTER_STATE\n );\n const [exportState, setExportState] = useState<ExportState>(\n DEFAULT_EXPORT_STATE\n );\n const csvLink = useRef<any>(null);\n const assetStatus = useAssetStatus(state.asset.id);\n const [\n dataForDownload,\n setDataForDownload,\n bDownloadReady,\n setDownloadReady,\n exportHeader,\n setexportHeader,\n exportFileName,\n setExportFileName,\n ] = useExport(csvLink); \n\n const {\n addWidget,\n deleteWidget,\n updateLayout,\n saveLayout,\n updateWidget,\n saveLayoutSuccess,\n clearWidgetFilter,\n updateWidgetFilter,\n } = useMemo(() => bindActions(dispatch), [dispatch]);\n\n useEffect(() => {\n updateLayout(columns);\n }, [columns, updateLayout]);\n\n \n\n const createNewWidget = () => {\n let widgetColumns:number;\n if(appContext.orgId==='4d5b9621-2b2b-11ee-8a6d-739e920ccfbe'){\n widgetColumns=6;\n }else{\n widgetColumns=4;\n }\n const uuid = uuidv4();\n setEditState({\n visible: true,\n title: \"Create New Widget\",\n onFinish: (cfg) => saveWidgets(uuid, cfg, \"Add\",widgetColumns),\n onDualChange:(checked)=>onDualChange(checked),\n enabledualaxis:false\n });\n };\n\n const saveWidgets = (widgetId: string, cfg: WidgetConfig, action: string,widgetColumns:number) => {\n let signalStructure: DBWidgetConfig;\n const cnfg: any = cfg;\n if (action === \"Edit\") {\n const widgetState =\n state.widgets.filter((w) => w.id === widgetId)[0] || [];\n signalStructure = editWidgetStructureForDb(\n widgetId,\n cfg,\n state.template,\n widgetState\n );\n } else {\n signalStructure = addWidgetStructureForDb(\n widgetId,\n cfg,\n state.template,\n state.widgets,\n widgetColumns\n );\n }\n\n Api.saveWidget(state.asset.templateId, signalStructure)\n .then((data) => {\n if (action === \"Edit\") {\n updateWidget(widgetId, signalStructure);\n } else {\n addWidget(widgetId, signalStructure);\n }\n })\n .catch((error) => {\n errorResponse(null, error);\n message.error(\"Errror in saving the widget\");\n });\n // hideEditForm();\n };\n\n const deleteWidgt = (widgetId: string) => {\n Api.deleteWidget(state.asset.templateId, widgetId)\n .then((data) => {\n deleteWidget(widgetId);\n })\n .catch((error) => {\n errorResponse(null, error);\n message.error(\"Errror in deleting the selected widget\");\n });\n // hideEditForm();\n };\n\n const editWidget = (w: WidgetState) => {\n let widgetColumns:number;\n if(appContext.orgId==='4d5b9621-2b2b-11ee-8a6d-739e920ccfbe'){\n widgetColumns=6;\n }else{\n widgetColumns=4;\n }\n setEditState({\n visible: true,\n title: \"Edit Widget\",\n onFinish: (cfg) => saveWidgets(w.id, cfg, \"Edit\",widgetColumns),\n config: w,\n onDualChange:(checked)=>onDualChange(checked),\n enabledualaxis:w.rightYAxisSignals && w.rightYAxisSignals?.length>0?true:false\n });\n };\n\n const filerWidget = (wid: string, cfg: WidgetFilterConfig) => {\n updateWidgetFilter(wid, cfg);\n };\n\n const exprtWidget = (widgetState: WidgetState, cfg: WidgetExportConfig) => {\n exportCsv(state, widgetState, cfg)\n .then((data) => {\n loadingIndicatorStart();\n const csvExportDetails = prepareWidgetEvents(data, state, widgetState);\n \n setexportHeader(csvExportDetails.eventHeader);\n setExportFileName(`${state.asset.name}_${widgetState.title}_${cfg.startDate.format('YYYY-MM-DD')}_${cfg.endDate.format('YYYY-MM-DD')}.csv`);\n setDataForDownload(csvExportDetails.eventArray);\n setDownloadReady(true);\n loadingIndicatorEnd();\n })\n .catch((error) => {\n errorResponse(null, error);\n setDownloadReady(false);\n loadingIndicatorEnd();\n });\n };\n\n const filterWidget = (w: WidgetState) => {\n const config: WidgetFilterConfig = {\n startDate: w.startDate,\n startTime: w.startTime,\n endDate: w.endDate,\n endTime: w.endTime,\n datapoint: w.datapoint || 50,\n };\n setFilterState({\n visible: true,\n title: \"Widget Filter\",\n onFinish: (cfg) => filerWidget(w.id, cfg),\n config: config,\n });\n };\n\n const exportWidget = (w: WidgetState) => {\n setExportState({\n visible: true,\n title: \"Widget Export\",\n onFinish: (cfg) => exprtWidget(w, cfg),\n });\n };\n\n const hideEditForm = () => {\n setEditState((s) => ({\n ...s,\n visible: false,\n }));\n };\n\n const hideFilterForm = () => {\n setFilterState((s) => ({\n ...s,\n visible: false,\n }));\n };\n\n const hideExportForm = () => {\n setExportState((s) => ({\n ...s,\n visible: false,\n }));\n };\n\n const onLayoutViewChange = (checked: boolean) => {\n setGridResize({\n ...GRID_SETTINGS,\n isDraggable: checked,\n isResizable: checked,\n });\n if (!checked) {\n const newLayout = saveLayoutDb(state.layout);\n Api.saveLayoutChange(state.asset.templateId, newLayout)\n .then((data) => saveLayoutSuccess(state.layout))\n .catch((err) => {\n errorResponse(null, err);\n message.error(\"Error occured while saving the new layout\");\n });\n }\n };\n\n const NewWidgetButton = ({ label }: { label: string }) => (\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={createNewWidget} className=\"asset-buttonwidth\">\n {label}\n </Button> \n );\n\n const {\n alertDm1Count = 0,\n alertInfoCount = 0,\n alertWarningCount = 0,\n alertCriticalCount = 0, \n name,\n mastertag,\n isRead = result[1],\n isUpdate = result[2],\n isassetUpdate = assets[2],\n istemplatesRead = templates[1]\n } = state.asset;\n\n const pageHeaderExtraProps: PageHeaderExtraProps = {\n onLayoutViewChange: (checked: boolean) => onLayoutViewChange(checked),\n alertDm1Count,\n alertInfoCount,\n alertWarningCount,\n alertCriticalCount,\n name,\n mastertag,\n userRole: appContext.roleName, \n isCreate: result[0],\n isRead: result[1],\n isUpdate: result[2],\n isDelete: result[3] \n };\n \n const onDualChange=(checked: boolean)=>{\n setEditState((prevState) => (\n { \n ...prevState, \n enabledualaxis:checked \n }));\n }\n\n return (\n <>\n <PageHeader\n title=\"\"\n subTitle={state.loaded ? <Header isOprRead={isOprRead} isOprUpdate={isOprUpdate} {...state.asset } /> : null}\n //added a key\n extra={\n state.columns === 4\n ? [\n <PageHeaderExtra\n key=\"pageHeaderExtra\"\n {...pageHeaderExtraProps}\n />,\n result[0] === true ?\n <NewWidgetButton key=\"widgetAdd\" label=\"Add Widget\" /> : '',\n ]\n : \n result[0] === true ? [<NewWidgetButton key=\"widgetAdd\" label=\"Add Widget\" />] : '' \n }\n >\n <PageContent>\n { \n state.widgets.length > 0 ? (\n <SizeMe>\n {({ size }) => (\n <>\n <GridLayout\n {...gridResize}\n cols={state.columns}\n width={size.width || 200}\n layout={state.layout}\n onLayoutChange={saveLayout}\n >\n \n { \n state.widgets.map((w) => {\n return (\n <div key={w.id}>\n <WidgetContainer\n widgetState={w}\n assetId={state.asset.id}\n template={state.template}\n onEdit={() => editWidget(w)}\n onDelete={() => deleteWidgt(w.id)}\n onFilter={() => filterWidget(w)}\n onExport={() => exportWidget(w)}\n userRole={appContext.roleName}\n isCreate={result[0]}\n isRead={result[1]}\n isUpdate={result[2]}\n isDelete={result[3]} \n //isIqanKey={iqanKey[1]} //ops-2839: Remove the iqanconnect key permission check \n ></WidgetContainer>\n </div>\n );\n })}\n </GridLayout>\n </>\n )}\n </SizeMe>\n ) : ( appContext.roleName === \"admin\" || appContext.roleName === \"user\" ?\n <Empty description=\"This dashboard has no widgets\">\n <NewWidgetButton label=\"Create a Widget\" />\n </Empty> : ''\n )\n }\n \n <WidgetEditDrawer\n {...editState}\n template={state.template}\n onClose={hideEditForm}\n />\n <WidgetFilterDrawer {...filterState} onClose={hideFilterForm} />\n <WidgetExportDrawer {...exportState} onClose={hideExportForm} />\n </PageContent>\n </PageHeader>\n <CSVLink\n data={dataForDownload}\n headers={exportHeader}\n filename={exportFileName}\n className=\"hidden\"\n ref={csvLink}\n target=\"_blank\"\n />\n </>\n );\n};\n\nconst PageContent: React.FC = ({ children }) => {\n return <div className=\"pagecontent\">{children}</div>;\n};\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data, \n };\n};\n\nexport default connect(\n mapStateToProps\n)(AssetDashboard);\n","import React, { useEffect, useState } from \"react\";\nexport const useExport = (csvLink: any) => {\n const [dataForDownload, setDataForDownload] = useState<any>([]);\n const [bDownloadReady, setDownloadReady] = useState(false);\n const [exportHeader, setexportHeader] = useState<any>([]);\n const [exportFileName, setExportFileName] = useState<string>();\n\n useEffect(() => {\n if (csvLink && csvLink.current && bDownloadReady) {\n csvLink.current.link.click();\n setDownloadReady(false);\n }\n }, [bDownloadReady]);\n\n return [\n dataForDownload,\n setDataForDownload,\n bDownloadReady,\n setDownloadReady,\n exportHeader,\n setexportHeader,\n exportFileName,\n setExportFileName\n ];\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport * as Api from \"./api\";\nimport AssetDashboard from \"./AssetDashboard\";\nimport { Result } from \"antd\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\n\nconst ErrorPage: React.FC = () => (\n <Result\n status=\"error\"\n title=\"Failed to Load Dashboard\"\n subTitle=\"Unfortunately we couldn't fetch the data to make this page work. Try refreshing the page or contact support\"\n />\n);\n\nconst DashboardPage: React.FC = () => {\n const { assetId } = useParams();\n const [initialData, setInitialData] = useState<Api.AssetDashboardResponse>();\n const [errorOccurred, setErrorOccurred] = useState(false);\n\n useEffect(() => {\n if (assetId) {\n Api.loadAssetDashboard(assetId)\n .then(setInitialData)\n .catch((error) => {\n errorResponse(null, error);\n setErrorOccurred(true)\n });\n }\n }, [assetId]);\n\n if (initialData) {\n return <AssetDashboard initialData={initialData} />;\n } else if (errorOccurred) {\n return <ErrorPage />;\n } else {\n return <></>;\n }\n};\n\nexport default DashboardPage;\n","import Dashboard from './Dashboard';\nexport default Dashboard;\n","import { \n DBWidgetConfig, \n SignalCollection,\n Rule, \n Dashboard,\n TextMessage,\n C2DWlist\n} from \"./models\";\n\nimport { AssetDashboardResponse, Datapoint } from \"./api\";\nimport { debug } from \"console\";\n\nexport function constructAssetData(\n apiResponse: any,\n mastertag: string\n): AssetDashboardResponse {\n function constructSignalCollection(datapoint: Datapoint): SignalCollection {\n const { _id, name, type, values = [] } = datapoint;\n let orgCmdPgnSpns = apiResponse.data.assets[0].orgCmdPgnSpns;\n return {\n id: _id,\n name,\n type,\n signals:\n values?.map((v) => {\n if (type===\"Command\") {\n let pgnSpns= v.pgn === null ? \"0-0\" : (v.spn === null ? v.pgn + '-' + '0': v.pgn + '-' + v.spn);\n if ( orgCmdPgnSpns !== null && orgCmdPgnSpns != '-' && orgCmdPgnSpns.includes(pgnSpns)) {\n return {\n id: v._id,\n name: v.name || v.label,\n format: v.format,\n color: \"#000000\", // TODO \n units: v.unit, \n pgn: v.pgn\n };\n } else { // The org allowed comand PgnSpns does not incude this cmd signal\n return {\n id: v._id,\n name: \"NA-CMD\",\n format: v.format, \n color: \"#000000\",\n units: v.unit, \n pgn: \"\"\n };\n }\n } else { // Not command collection\n return {\n id: v._id,\n name: v.name || v.label,\n format: v.format, // response signal might be text format need to convert to ascii\n color: \"#000000\", // TODO \n units: v.unit, \n pgn: \"\"\n };\n }\n }).filter(v => v.name != \"NA-CMD\") || [],\n };\n }\n\n function constructDashboardCollecton(dashboard: Dashboard) {\n if (dashboard.widgets) {\n dashboard.widgets.map(w => w.signals.map(s => s.color ? s.color : \"#0D62F2\" ));\n }\n return dashboard;\n }\n\n const assets = apiResponse.data.assets[0];\n const datapoints = assets[\"datapoints\"] !== undefined ? ((JSON.parse(assets[\"datapoints\"]) || []) as Datapoint[]) : null;\n const widgets = assets[\"widgets\"] !== undefined ? ((JSON.parse(assets[\"widgets\"]) || []) as DBWidgetConfig[]) : null;\n const rawRules = assets[\"signalRules\"] !== undefined ? (JSON.parse(assets[\"signalRules\"]) || []) : null;\n const rulesList = rawRules?.flatMap((s: any) => s.conditions) || [];\n const Dashboards = assets[\"tabs\"] !== undefined ? ((JSON.parse(assets[\"tabs\"]) || []) as Dashboard[]) : null;\n const c2dMsgs = assets[\"c2dMessages\"] !== undefined ? ((JSON.parse(assets[\"c2dMessages\"]) || []) as TextMessage[]) : null;\n\n //added c2dWhitelist here\n // console.log(\"assets from dashboard API response\", assets)\n const c2dWhitelist = assets[\"c2dWhitelist\"] !== undefined ?((JSON.parse(assets[\"c2dWhitelist\"])|| []) as C2DWlist[]): null;\n\n function formatRules(rule: any): Rule {\n const {\n CriticalHigh,\n WarningHigh,\n InfoHigh,\n InfoLow,\n WarningLow,\n CriticalLow,\n } = rule.Value;\n return {\n signalId: rule.SignalId,\n criticalHigh: CriticalHigh,\n warningHigh: WarningHigh,\n infoHigh: InfoHigh,\n infoLow: InfoLow,\n warningLow: WarningLow,\n criticalLow: CriticalLow,\n };\n }\n\n const rules: Rule[] = rulesList?.map(formatRules) || [];\n\n const { nickname } = assets;\n const { assetDownDesc } = assets;\n const asset: AssetDashboardResponse = {\n asset: {\n ...assets,\n id: assets.gatewayId,\n name: nickname,\n template: {\n signalCollections: datapoints?.map(constructSignalCollection) || [],\n rules: rules,\n },\n widgets: widgets || [],\n dashboards: Dashboards?.map(constructDashboardCollecton) || [], \n c2dMessages: c2dMsgs || [],\n c2dWhitelist: c2dWhitelist || [],\n assetDownDesc:assetDownDesc\n }\n };\n return asset;\n}\n\n","import {\n SignalId,\n Template,\n Signal,\n SignalDatapoint,\n EventData,\n WidGetSignalConfig,\n SignalCollectionId,\n WidgetSignalId,\n AlertSignalDatapointData,\n} from \"../models\";\nimport { DataStore, State, WidgetState } from \"../state\";\nimport { Layout } from \"react-grid-layout\";\nimport moment, { Moment } from \"moment\";\nimport tzlookup from \"tz-lookup\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport const DATE_FORMAT = \"EEE MMM dd yyyy HH:mm:ss\";\n\nexport function signalLabel(\n signal: { name: string; units: string },\n userPreference?: any,\n amCharts: boolean = true\n): string {\n const openBracket = amCharts ? \"[[\" : \"[\";\n const closeBracket = amCharts ? \"]]\" : \"]\";\n\n const temperatureFUnitsArray = ['°F', 'Deg F', 'Degrees F'];\n const temperatureCUnitsArray = ['°C', 'Deg C', 'Degrees C'];\n \n let signalName = signal.name;\n if (signal.units) {\n \n if ( temperatureFUnitsArray.some(substring => signal.units.includes(substring)) || signal.units === 'F' ) {\n signal.units = \"°F\";\n }\n if ( temperatureCUnitsArray.some(substring => signal.units.includes(substring)) || signal.units === 'C' ) {\n signal.units = \"°C\";\n }\n\n if (signal.units === \"°F\" || signal.units === \"°C\") {\n signalName += ` ${openBracket}${userPreference || \"°F\"}${closeBracket}`;\n }\n else {\n signalName += ` ${openBracket}${signal.units || \"-\"}${closeBracket}`;\n }\n }\n \n return signalName;\n}\n\nexport const TOOLTIP_FORMAT = \"{dateX}\\n{name}: {valueY}\";\nexport const TOOLTIP_FORMAT_H = \"{dateX}\\n{name}: {valueX}\";\nexport const TOOLTIP_COLOR = \"#333\";\n\nexport const NUMBER_FORMAT = \"#.######\";\n\nexport function formatDate(date: Date): string {\n const dateString = moment(date).format(\"ddd MMM DD YYYY HH:mm:ss\").toString();\n // const dateString = date.toString();\n //const idx = dateString.indexOf(\"GMT\");\n return dateString\n // return dateString.slice(0, idx);\n }\n\nexport function inputSignalMapper<T>(\n mapFunc: (meta: Signal, data: SignalDatapoint[], userPreference: any) => T\n) {\n return (signalIds: WidgetSignalId[], template: Template, data: DataStore,userPreference?: any) => {\n const result: T[] = [];\n\n for (let index = 0; index < signalIds.length; index++) {\n const id = signalIds[index];\n if (id.id) {\n const signalData = data.get(id.id);\n const signalMeta = template.signals.find((s) => s.id === id.id);\n if (!!signalData && !!signalMeta) {\n if (id.color === \"#000000\" || id.color == null) {\n signalMeta!.color = appConfigs.colorCodes.colorCodesLineChart[index];\n } else {\n signalMeta!.color = id.color;\n }\n result.push(mapFunc(signalMeta, signalData,userPreference));\n }\n } else {\n let signalId = String(id);\n const signalData = data.get(signalId);\n const signalMeta = template.signals.find((s) => s.id === signalId);\n if (!!signalData && !!signalMeta) {\n signalMeta!.color = \"#000000\"; \n result.push(mapFunc(signalMeta, signalData,userPreference));\n }\n } \n }\n\n return result;\n };\n}\n\nexport function extendRange(\n limit: number,\n percent: number,\n direction: \"min\" | \"max\"\n) {\n const sign = Math.sign(limit);\n const dir = direction === \"max\" ? 1 : -1;\n\n return limit * (1 + (dir * sign * percent) / 100);\n}\n\nexport function addDateAndTime(dateVal: Moment, timeVal?: Moment) {\n //let newDate = moment(dateVal, \"ddd MMM D YYYY HH:mm:ss ZZ\");\n if (timeVal) {\n dateVal = dateVal.set({\n h: timeVal.toDate().getHours(),\n m: timeVal.toDate().getMinutes(),\n s: timeVal.toDate().getSeconds(),\n ms: 0\n });\n } \n return dateVal;\n}\n\nexport function getUnixDate(dateVal: Moment): number {\n return dateVal.valueOf();\n}\n\nexport function validateForms(startDate: Moment, endDate: Moment, startTime: Moment, endTime: Moment) : Promise<any> {\n if (startDate) {\n let startDateTime = addDateAndTime(startDate, startTime);\n if( startDateTime > moment()) {\n return Promise.reject(\n \"Start must come before current time\"\n );\n }\n if(endDate) {\n const unixStartDate = getUnixDate(startDateTime);\n const unixEndDateTime = getUnixDate(addDateAndTime(endDate, endTime));\n const unixCurrentDate = getUnixDate(moment());\n if (endDate < startDate) {\n return Promise.reject(\n \"Start must come before End proposed\"\n );\n }\n if (\n moment.duration(unixEndDateTime - unixStartDate).asDays() > appConfigs.app.assetOverview.startdateenddatedaysdiff\n ) {\n return Promise.reject(\n \"Start and End can be no more than 7 days apart\"\n );\n }\n // Cosmos will have past 90 days of data\n // So Start & End date can't be past 90 days\n // if (\n // moment.duration(unixCurrentDate - unixStartDate).asDays() > appConfigs.app.assetOverview.cosmosdataretentiondays\n // || \n // moment.duration(unixCurrentDate - unixEndDateTime).asDays() > appConfigs.app.assetOverview.cosmosdataretentiondays\n // ) {\n // return Promise.reject(\n // \"Start/End Date cannot be past 90 days\"\n // );\n // } \n }\n } \n return Promise.resolve();\n}\n\nexport function exportValidateForms(startDate: Moment, endDate: Moment, startTime: Moment, endTime: Moment) : Promise<any> {\n if (startDate) {\n let startDateTime = addDateAndTime(startDate, startTime);\n if( startDateTime > moment()) {\n return Promise.reject(\n \"Start must come before current time\"\n );\n }\n if(endDate) {\n const unixStartDate = getUnixDate(startDateTime);\n const unixEndDateTime = getUnixDate(addDateAndTime(endDate, endTime));\n const unixCurrentDate = getUnixDate(moment());\n if (endDate < startDate) {\n return Promise.reject(\n \"Start must come before End proposed\"\n );\n }\n if (\n moment.duration(unixEndDateTime - unixStartDate).asDays() > appConfigs.app.assetOverview.exportstartdateenddatedaysdiff\n ) {\n return Promise.reject(\n `Start and End can be no more than ${appConfigs.app.assetOverview.exportstartdateenddatedaysdiff} days apart`\n );\n }\n // Cosmos will have past 90 days of data\n // So Start & End date can't be past 90 days\n // if (\n // moment.duration(unixCurrentDate - unixStartDate).asDays() > appConfigs.app.assetOverview.cosmosdataretentiondays\n // || \n // moment.duration(unixCurrentDate - unixEndDateTime).asDays() > appConfigs.app.assetOverview.cosmosdataretentiondays\n // ) {\n // return Promise.reject(\n // \"Start/End Date cannot be past 90 days\"\n // );\n // } \n }\n } \n return Promise.resolve();\n}\n\nexport function constructRows(\n response: any,\n signals: WidgetSignalId[]\n): Map<SignalId, SignalDatapoint[] | AlertSignalDatapointData[]> {\n let dataSet = new Map<SignalId, SignalDatapoint[] | AlertSignalDatapointData[]>();\n //Get the response data from api and remove undefined entry\n const responseDataSet = response.map((res: any) => res.data).filter(Boolean);\n if (responseDataSet.length === 0) {\n return dataSet;\n }\n //if there are 3 diff datapoint request, there would be 3 array of array\n //Flatmap will make the collection to a single one dimensional array\n const eventsArrays: EventData[] = responseDataSet.flatMap((res: any) => res);\n //get the unique signal ids present in the event array.\n const ids = new Set(\n eventsArrays.flatMap((event) =>\n event.signals.flatMap((signal) => signal._id)\n )\n );\n const signalIds = Array.from(ids);\n //filtered the signals with the widget signals\n const filteredSignals = signalIds.filter((s) => signals.findIndex(x => (x.id ? x.id : x) === s) > -1);\n\n function constrcuctSignalMap(id: SignalId): SignalDatapoint[] {\n const signalCollections = eventsArrays.filter(\n (event) => event.signals.findIndex((signal) => signal._id === id) > -1\n );\n const signalDataPointArray = signalCollections.reduce(\n (acc: SignalDatapoint[] | AlertSignalDatapointData[], current) => {\n\n if(current.signals.filter((s) => s._id === id)[0].hasOwnProperty('severity')){\n acc.push({\n timestamp: new Date(current.createdAt),\n value: current.signals.filter((s) => s._id === id)[0].value,\n severity: current.signals.filter((s) => s._id === id)[0]?.severity,\n ruleName: current.signals.filter((s) => s._id === id)[0]?.name\n });\n } else {\n acc.push({\n timestamp: new Date(current.createdAt),\n value: current.signals.filter((s) => s._id === id)[0].value,\n });\n }\n\n return acc;\n },\n []\n );\n return signalDataPointArray.sort(\n (cur, next) => cur.timestamp.getTime() - next.timestamp.getTime()\n );\n }\n\n filteredSignals.forEach((id) => {\n dataSet.set(id, constrcuctSignalMap(id));\n });\n\n return dataSet;\n}\n\nexport function findTimezone(timezone: any){\n let location:any\n let timezoneDetails:any\n if(timezone.coordinates.latitude && timezone.coordinates.longitude){\n location = tzlookup(timezone.coordinates.latitude, timezone.coordinates.longitude);\n timezoneDetails= moment.tz(location).format('z');\n }\n timezoneDetails=(timezone.isGpsSignalAvailable && timezone.value==\"asset\" && timezoneDetails)?timezoneDetails:(moment().tz(moment.tz.guess()).format('z'))\n return {\n timezone:timezoneDetails\n }\n\n}\n\nexport function FindAssetTimeZone(coordinates: any, updated_at: any){\n var location = tzlookup(coordinates.latitude, coordinates.longitude);\n var timezone= moment.tz(location).format('z');\n var locale_date_str = new Date(updated_at).toLocaleString(\"en-US\",\n {\n timeZone: tzlookup(coordinates.latitude, coordinates.longitude) \n });\n var geo_local_date_str = new Date(locale_date_str);\n return {\n timezoneDetails:{\n \"timezone\":timezone,\n \"geo_local_date_str\":geo_local_date_str\n }\n};\n}\n\n","import { WidgetFilterConfig } from \".\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { WidgetConfig } from \"../widgets\";\nimport { addDateAndTime, getUnixDate } from \"../widgets/common\";\n\nexport function addUrlParams(\n url: string,\n filterConfig?: WidgetFilterConfig\n): string {\n if (filterConfig?.datapoint) {\n url += `?limit=${filterConfig.datapoint}`;\n }\n if (filterConfig?.startDate) {\n let unixDate = getUnixDate(\n addDateAndTime(filterConfig?.startDate, filterConfig?.startTime)\n );\n if (url.indexOf(\"?\") > 0) url += `&startDate=${unixDate}`;\n else url += `?startDate=${unixDate}`;\n }\n if (filterConfig?.endDate) {\n let unixDate = getUnixDate(\n addDateAndTime(filterConfig?.endDate, filterConfig?.endTime)\n );\n if (url.indexOf(\"?\") > 0) url += `&endDate=${unixDate}`;\n else url += `?endDate=${unixDate}`;\n }\n // if(filterConfig?.filter) {\n // if (url.indexOf(\"?\") > 0) url += `&filter=${filterConfig.filter}`;\n // else url += `?filter=${filterConfig.filter}`;\n // }\n return url;\n}\n\nexport function constructUrl(\n gatewayId: string,\n datapointId: string,\n filterConfig?: WidgetFilterConfig,\n type?: WidgetConfig[\"type\"]\n): string {\n let url: string = `${appConfigs.server.URL}/ui/api/assets/gateway/${gatewayId}/datapoint/${datapointId}/events`;\n switch (type) {\n case \"text\":\n case \"boolean\":\n case \"bar\":\n case \"gauge\":\n case \"tracker\":\n url += \"/last\";\n return url;\n case \"line\":\n return addUrlParams(url, filterConfig);\n case \"map\":\n case \"clusterbar\":\n case \"chat\":\n return addUrlParams(url, filterConfig);\n case \"command2\":\n return addUrlParams(url, filterConfig);\n case \"map events\":\n url = `${appConfigs.server.URL}/ui/api/assets/gateway/${gatewayId}/datapoint/${datapointId}/alerts`;\n return addUrlParams(url, filterConfig);\n default:\n url += \"/last\";\n return url;\n }\n}\n","import Axios from \"axios\";\nimport { Asset, C2DWlist, DBWidgetConfig, TextMessage} from \"./models\";\nimport { DbLayoutConfig } from \"./state\";\nimport { constructAssetData } from \"./AssetApiResp\";\nimport { WidgetConfig } from \"./widgets\";\nimport { WidgetFilterConfig } from \"./WidgetFilterForm\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { constructUrl } from \"./WidgetFilterForm/FilterApi\";\nimport { Moment } from \"moment\";\nimport { hexToString, loadingIndicatorStart } from \"../../utils/commonHelpers\";\nimport { addUrlParams } from \"./WidgetFilterForm/FilterApi\";\n\nexport interface AssetDashboardResponse {\n asset: Asset;\n}\ninterface DbSignal {\n _id: string;\n unit: string;\n name: string;\n label: string;\n pgn: string;\n spn: string;\n format: string;\n}\n\nexport interface Datapoint {\n _id: string;\n type: string;\n name: string;\n values: DbSignal[];\n}\n\nexport async function loadAssetDashboard(\n mastertag: string,\n mode: string\n): Promise<AssetDashboardResponse> {\n const { data } = await Axios.get(\n `${appConfigs.server.URL}/ui/api/assets?mastertag=${mastertag}&allData=true`,\n {\n params: {\n alertInterval: appConfigs.app.assetOverview.alertsInterval,\n mode: mode,\n },\n }\n );\n return constructAssetData(data, mastertag);\n}\n\nexport async function loadSignalsData(\n gatewayId: string,\n signalCollectionId: string[],\n filterConfig?: WidgetFilterConfig,\n type?: WidgetConfig[\"type\"]\n //filterTransients?: boolean\n): Promise<any> {\n let promiseArray = signalCollectionId\n .map((datapoint) =>\n Axios.get(constructUrl(gatewayId, datapoint, filterConfig, type))\n )\n .map((p) => p.catch((e) => e));\n return Promise.all(promiseArray);\n}\n\nfunction formatD2CText(v: string): string {\n var msg = hexToString(v);\n // remove the deliminator from the single/multi text frame\n const lastFrameStartPos = msg.length - 9;\n const delimiterPos = msg.indexOf(\"*\", lastFrameStartPos);\n msg = msg.substring(1, delimiterPos);\n return msg;\n}\n\nexport async function loadC2DMessageData(\n gatewayId: string,\n filterConfig?: WidgetFilterConfig\n): Promise<TextMessage[]> {\n let c2dMsg: TextMessage[] = [];\n try {\n let msgData = await Axios.get(\n addUrlParams(\n `${appConfigs.server.URL}/ui/api/assets/${gatewayId}/c2d-messages`,\n filterConfig\n )\n );\n msgData?.data?.data?.messages.forEach((m: any, index: number) => {\n c2dMsg.push({\n signalId: m.signalId,\n firstName: m.firstName,\n lastName: m.lastName,\n type: m.messageType,\n timestamp: new Date(m.messageTime),\n text: m.messageText,\n });\n });\n return c2dMsg;\n } catch (e) {\n console.log(e);\n throw e;\n }\n}\n\nexport async function loadC2DWhitelistData(\n\tgatewayId: string,\n\tfilterConfig?: WidgetFilterConfig\n): Promise<C2DWlist[]> {\n\tlet c2dwhtlst:C2DWlist[] = [];\t\n\ttry {\n\t\t let msgData = await Axios.get(addUrlParams(`${appConfigs.server.URL}/ui/api/assets/${gatewayId}/c2d-messages`, filterConfig));\n\t\t msgData?.data?.data?.messages.forEach( (m: any, index: number) => {\n\t\t\tc2dwhtlst.push({\n\t\t\t\twhitelistMessages:m.whitelistMessages\n\t\t\t});\n\t\t})\n\t\treturn c2dwhtlst;\n\t} catch (e) {\n\t\tconsole.log(e)\n\t\tthrow e;\n\t}\n\n}\n\nexport async function loadSignalsDataTimescale(\n interval: string,\n reading: string,\n signalsNCollectionId: string[],\n startDate: Moment,\n endDate: Moment,\n type: string,\n customFilters: string[],\n requiredSignals: string[]\n): Promise<any> {\n let promiseArray = signalsNCollectionId\n .map(async (dataPoint) => {\n let signalDetails = dataPoint.split(\"~\");\n return await Axios.get(\n `${appConfigs.server.URL}/ui/api/timescale/${signalDetails[0]}/${\n signalDetails[1]\n }/${signalDetails[2]}/${type}?startDate=${startDate.valueOf()}&endDate=${endDate.valueOf()}&interval=${interval}&reading=${reading}&customFilters=${customFilters}&requiredSignals=${requiredSignals}`\n );\n })\n .map((p) =>\n p\n .then((resp: any) => {\n loadingIndicatorStart();\n return resp;\n })\n .catch((e) => e)\n );\n return Promise.all(promiseArray);\n}\n\nexport function saveWidget(\n templateId: string,\n widgetDetails: DBWidgetConfig,\n dashboardId: number\n): Promise<any> {\n return Axios.put(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/dashboards/${dashboardId}/widget`,\n widgetDetails,\n {\n responseType: \"json\",\n }\n );\n}\n\nexport function deleteWidget(\n templateId: string,\n widgetId: string,\n dashboardId: number\n): Promise<any> {\n return Axios.delete(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/dashboards/${dashboardId}/widget/${widgetId}`\n );\n}\n\nexport function saveLayoutChange(\n templateId: string,\n layout: (DbLayoutConfig & { _id: string })[],\n dashboardId: number\n): Promise<any> {\n return Axios.put(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/dashboards/${dashboardId}/widget/layout`,\n layout,\n {\n responseType: \"json\",\n }\n );\n}\n\nexport function getAlerts(mastertag: string): Promise<any> {\n const dmAlertsUrl = Axios.get(\n `${appConfigs.server.URL}/ui/api/alerts/dm1?mastertag=${mastertag}`\n );\n const restAlertsUrl = Axios.get(\n `${appConfigs.server.URL}/ui/api/alerts/signals?mastertag=${mastertag}`\n );\n return Promise.all([dmAlertsUrl, restAlertsUrl]);\n}\n\nexport function csvExportApi(url: string): Promise<any> {\n return Axios.get(url);\n}\n\nexport function getDashboard(mastertag: string, dashboardId: number) {\n return Axios.get(\n `${appConfigs.server.URL}/ui/api/assets/${mastertag}/dashboards/${dashboardId}`\n );\n}\n\nexport function invokeCommand(\n gatewayId: string,\n commandId: string,\n commandInfo: string,\n testMode: number\n): Promise<any> {\n const data = { desiredPayload: commandInfo };\n return Axios.put(\n `${appConfigs.server.URL}/ui/api/controllers/${gatewayId}/commands/${commandId}?directMethodTestMode=${testMode}`,\n data, {\n headers: {\n 'Content-Type': 'application/json; charset=utf-8'\n }\n }\n );\n}\n\nexport function getCommandStatus(\n gatewayId: string,\n commandId: string\n): Promise<any> {\n return Axios.get(\n `${appConfigs.server.URL}/ui/api/controllers/${gatewayId}/command-status/${commandId}`\n );\n}\n\nexport function getCommandResponseSignalIds(\n templateId: string,\n commandId: string\n): Promise<any> {\n return Axios.get(\n `${appConfigs.server.URL}/ui/api/signals/template/${templateId}/command-response-signals/${commandId}`\n );\n}\n","import moment from \"moment\";\nimport \"moment-timezone\";\nimport React, { useEffect, useState } from \"react\";\nimport { DataStore } from \"../state\";\nimport { findTimezone } from \"../widgets/common\";\n\ninterface CsvHeader {\n\tlabel: string;\n\tkey: string;\n}\n\nexport const useExportGPSEvents = (csvLink: any) => {\n\tconst [dataForDownload, setDataForDownload] = useState<any>([]);\n\tconst [bDownloadReady, setDownloadReady] = useState(false);\n\tconst [exportHeader, setExportHeader] = useState<CsvHeader[]>([]);\n\tconst [exportFileName, setExportFileName] = useState<string>();\n\n\tuseEffect(() => {\n\t\tif (csvLink && csvLink.current && bDownloadReady) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcsvLink.current.link.click();\n\t\t\t}, 1);\n\t\t\tsetDownloadReady(false);\n\t\t}\n\t}, [bDownloadReady]);\n\n\treturn [\n\t\tdataForDownload,\n\t\tsetDataForDownload,\n\t\tbDownloadReady,\n\t\tsetDownloadReady,\n\t\texportHeader,\n\t\tsetExportHeader,\n\t\texportFileName,\n\t\tsetExportFileName,\n\t];\n};\n\nexport const groupBy = (items: any[], key: string | number) => {\n\tlet groupsObj = items.reduce(\n\t\t(result: { [x: string]: any }, item: { [x: string]: string | number }) => ({\n\t\t\t...result,\n\t\t\t[item[key]]: [...(result[item[key]] || []), item],\n\t\t}),\n\t\t{}\n\t);\n\treturn [groupsObj];\n};\n\nexport const sortObjByKey = (arr: any[]) => {\n\tlet sortedArray: any = [];\n\tlet sortObj = Object.keys(arr[0])\n\t\t.sort((a, b) => {\n\t\t\tlet dateA: any = new Date(a);\n\t\t\tlet dateB: any = new Date(b);\n\t\t\treturn dateA - dateB;\n\t\t})\n\t\t.reduce(function (result: any, key: any) {\n\t\t\tresult[key] = arr[0][key];\n\t\t\treturn result;\n\t\t}, {});\n\n\tObject.keys(sortObj).map(function (key) {\n\t\tsortedArray.push({ [key]: sortObj[key] });\n\t\treturn sortedArray;\n\t});\n\n\treturn sortedArray;\n};\n\nexport const prepareWidgetGPSEvents = (data: DataStore, state: any) => {\n\tlet details=findTimezone(state.timezone)\n\tlet headerArray: CsvHeader[] = [\n\t\t{ label: (\"Time Stamp\"+\" (\").concat(details?.timezone)+(\")\"),key: \"timestamp\"},\n\t\t//{ label: (\"Time Stamp\"+\" (\").concat(moment().tz(moment.tz.guess()).format('z'))+(\")\"), key: \"timestamp\" },\n\t\t{ label: \"Organization Name\", key: \"orgName\" },\n\t\t{ label: \"Master Tag\", key: \"mastertag\" },\n\t\t{ label: \"Asset Name\", key: \"assetName\" },\n\t\t{ label: \"Latitude\", key: \"latitude\" },\n\t\t{ label: \"Longitude\", key: \"longitude\" },\n\t];\n\n\tlet notPresentKeys: any[] = [];\n\tconst tempUnits = [\"°C\", \"°F\"];\n let checkStr: any;\n data.forEach((d: any, k: any) => {\n let signalunit: any;\n d.every((val: any) => {\n checkStr = tempUnits.some(temp => val.ruleName.includes(temp));\n return false;\n })\n if (!checkStr) {\n state.template.signalCollections.filter((sc: any) => {\n let signal = sc.signals.find((sg: any) => sg.id === k);\n if (signal && (signal.units == \"°C\" || signal.units == \"°F\")) {\n signalunit = signal.units;\n d.filter((data: any) => {\n // Convert to °C\n if (signal.units == \"°F\" && state.temperature.value == \"°C\" && state.temperature.value != null) {\n data.value = (data.value - 32) * 5 / 9;\n\t\t\t\t\t\t\tdata.value=Math.round(data.value*100)/100;\n }\n // Convert to °F\n if (signal.units == \"°C\" && (state.temperature.value == \"°F\" || state.temperature.value == null)) {\n data.value = (data.value * 9 / 5) + 32;\n\t\t\t\t\t\t\tdata.value=Math.round(data.value*100)/100;\n }\n })\n }\n });\n }\n if (headerArray.findIndex((s: any) => s.key.toLowerCase() == d[0].ruleName.toLowerCase()) === -1) {\n if (!checkStr && signalunit) {\n d.filter((rule: any) => {\n rule.ruleName += `(${state.temperature.value})`;\n })\n }\n notPresentKeys.push(d[0].ruleName);\n }\n });\n\t// data.forEach((d: any, k: any) => {\n\t// \tif (\n\t// \t\theaderArray.findIndex(\n\t// \t\t\t(s: any) => s.key.toLowerCase() == d[0].ruleName.toLowerCase()\n\t// \t\t) === -1\n\t// \t) {\n\t// \t\tnotPresentKeys.push(d[0].ruleName);\n\t// \t}\n\t// });\n\tconst headerKeys = notPresentKeys.reduce((cum1: any, elem1: any) => {\n\t\treturn [...cum1, { label: elem1, key: elem1.toLowerCase() }];\n\t}, []);\n\theaderArray = [...headerArray, ...headerKeys];\n\n\tlet dataToDownload: any = [];\n\tlet formattedData: any = [];\n\tformattedData = sortObjByKey(\n\t\tgroupBy(\n\t\t\tArray.from(data.entries())\n\t\t\t\t.flat()\n\t\t\t\t.filter((i: any) => Array.isArray(i))\n\t\t\t\t.flat(),\n\t\t\t\"timestamp\"\n\t\t)\n\t);\n\n\tlet tmpRow: any = [];\n\tformattedData.forEach((dateGroup: any) => {\n\t\tObject.keys(dateGroup).forEach((date) => {\n\t\t\ttmpRow = [];\n\t\t\ttmpRow.push([]);\n\t\t\tdateGroup[date].forEach((signalData: any, key: number) => {\n\t\t\t\theaderArray.forEach((header: CsvHeader) => {\n\t\t\t\t\tif (header.key.toLowerCase() == signalData.ruleName.toLowerCase()) {\n\t\t\t\t\t\ttmpRow[tmpRow.length - 1][signalData.ruleName.toLowerCase()] =\n\t\t\t\t\t\t\tsignalData.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\tdataToDownload.push({\n\t\t\t\ttimestamp: moment(date).format(),\n\t\t\t\torgName: state.asset.orgName,\n\t\t\t\tmastertag: state.asset.mastertag,\n\t\t\t\tassetName: state.asset.name,\n\t\t\t});\n\n\t\t\ttmpRow.forEach((tmpRowKey: any) => {\n\t\t\t\tObject.keys(tmpRowKey).forEach((key) => {\n\t\t\t\t\tdataToDownload[dataToDownload.length - 1][key.toLowerCase()] =\n\t\t\t\t\t\ttmpRowKey[key];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\treturn {\n\t\teventHeader: headerArray,\n\t\teventArray: dataToDownload,\n\t};\n};\n","import {\n XYChart,\n ColumnSeries,\n ValueAxis,\n CategoryAxis,\n XYCursor,\n Legend\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\nimport {\n DATE_FORMAT,\n TOOLTIP_FORMAT,\n NUMBER_FORMAT,\n findTimezone,\n} from \"../common\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport interface Signal {\n name: string\n timestamp: Date\n value: number\n color: string;\n}\n\nexport interface Options {\n axisRange?: AxisRange;\n}\n\nexport default class BarChartClass {\n private _chart: XYChart;\n\n constructor(ref: HTMLDivElement, signals: Signal[], opts?: Options, timezone?:any) {\n const chart = (this._chart = amCore.create(ref, XYChart));\n const cursor = (this._chart.cursor = new XYCursor());\n cursor.lineX.disabled = true;\n cursor.lineY.disabled = true;\n\n chart.paddingLeft = 0;\n chart.marginLeft = 0;\n chart.marginTop = 12;\n\n const xAxis = new CategoryAxis();\n xAxis.dataFields.category = \"name\";\n xAxis.cursorTooltipEnabled = false;\n chart.xAxes.push(xAxis);\n\n const yAxis = new ValueAxis();\n yAxis.cursorTooltipEnabled = false;\n yAxis.min = opts?.axisRange?.min;\n yAxis.max = opts?.axisRange?.max;\n chart.yAxes.push(yAxis);\n\n let legend = new Legend();\n legend.parent = chart.chartContainer;\n legend.itemContainers.template.togglable = false;\n legend.marginTop = 20;\n const series = new ColumnSeries();\n series.dataFields = {\n categoryX: \"name\",\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n var tooltipDetails:any;\n if (signals && signals.length > 0) {\n tooltipDetails= findTimezone(timezone);\n }\n \n if(tooltipDetails){\n series.tooltipText = \"{dateX}\"+\" \"+tooltipDetails?.timezone+\"\\n{name}: {valueY}\";\n }\n if(series.tooltip) {\n series.tooltip.pointerOrientation = \"vertical\";\n } \n if (signals && signals.length > 0) {\n series.columns.template.adapter.add(\"fill\", function (fill, target) {\n let index = target.dataItem!.index ? target.dataItem!.index : 0;\n return signals[index].color ? amCore.color(signals[index].color) : amCore.color(appConfigs.colorCodes.colorCodesLineChart[index]);\n });\n }\n //Below line to remove labels on xAxis\n xAxis.renderer.labels.template.disabled = true;\n chart.series.push(series); \n chart.dateFormatter.dateFormat = DATE_FORMAT;\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n chart.data = signals;\n series.events.on(\"ready\", function(ev) {\n var legenddata: any = [];\n series.columns.each(function(column) {\n legenddata.push({\n name: column.dataItem?.categories.categoryX,\n fill: column.fill\n });\n });\n legend.data = legenddata;\n }); \n }\n\n public destroy() {\n this?._chart.dispose();\n }\n}\n","import React, { useRef, useLayoutEffect } from \"react\";\nimport BarChartClass, { Options, Signal } from \"./BarChartClass\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport { inputSignalMapper, signalLabel } from \"../common\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\ninterface Props extends CommonWidgetProps {\n settings?: Options;\n}\n\nexport const details: WidgetDetails = {\n type: \"bar\",\n name: \"Bar Chart\",\n};\n\nconst createSignals = inputSignalMapper<Signal>((meta, data, userPreference) => ({\n ...meta,\n ...data[0],\n userPreference,\n name: signalLabel(meta,userPreference),\n}));\n\nconst Widget: React.FC<Props> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const chartRef = useRef<BarChartClass>();\n\n const { template, data, settings, signals,state } = props;\n\n let barChartData = createSignals(signals, template, data,state.temperature.value)\n\n /* updating barChartData with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n barChartData = barChartData.map((signal: any) => {\n if (props.signalRData.data.hasOwnProperty(signal.id)){\n signal.value = props.signalRData.data[signal.id][0].value\n signal.timestamp = new Date(props.signalRData.data[signal.id][0].bt - props.signalRData.data[signal.id][0].time)\n }\n return signal\n })\n }\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new BarChartClass(\n node,\n barChartData,\n settings,\n state.timezone\n );\n return () => chartRef.current?.destroy();\n }\n }, [node, template, settings, signals, data, barChartData]);\n\n return <div style={{ height: \"100%\" }} ref={setNode} />;\n};\n\n\n// export default Widget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(Widget);\n","import React from \"react\";\nimport { Card, Row } from \"antd\";\n\ninterface Props {\n title?: string;\n}\n\nconst SectionTitle: React.FC<Props> = (props) => {\n return props.title ? (\n <h3 style={{ marginTop: \"18px\", marginBottom: \"-12px\" }}>{props.title}</h3>\n ) : (\n <></>\n );\n};\n\nconst Container: React.FC<Props> = (props) => {\n return (\n <>\n <SectionTitle title={props.title} />\n <Row>\n <Card style={{ width: \"100%\" }}>{props.children}</Card>\n </Row>\n </>\n );\n};\n\nexport default Container;\n","import React from \"react\";\nimport { Form } from \"antd\";\n\ntype FormProps = React.ComponentProps<typeof Form>;\n\n/* eslint-disable no-template-curly-in-string */\nconst validationMessages: FormProps[\"validateMessages\"] = {\n required: \"${label} is required\",\n types: {\n number: \"${label} must be a number\",\n },\n};\n\nexport default validationMessages","import { Col, ConfigProvider, Form, Row } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport barWidget from \"../../../assets/images/widgets/bar_widget.jpg\";\nimport booleanWidget from \"../../../assets/images/widgets/boolean_widget.jpg\";\nimport chatHistoryWidget from \"../../../assets/images/widgets/chat_history_widget.jpg\";\nimport clusterWidget from \"../../../assets/images/widgets/cluster_widget.jpg\";\nimport commandWidget from \"../../../assets/images/widgets/command_widget.jpg\";\nimport gaugeWidget from \"../../../assets/images/widgets/gauge_widget.jpg\";\nimport gpsEventWidget from \"../../../assets/images/widgets/gps_event_widget.jpg\";\nimport informationWidget from \"../../../assets/images/widgets/information_widget.jpg\";\nimport lineWidget from \"../../../assets/images/widgets/line_widget.jpg\";\nimport locationWidget from \"../../../assets/images/widgets/location_widget.jpg\";\nimport textWidget from \"../../../assets/images/widgets/text_widget.jpg\";\nimport trackerWidget from \"../../../assets/images/widgets/tracker_widget.jpg\";\nimport Event from \"../../../lib/event\";\nimport { Template } from \"../models\";\nimport {\n getEditForm,\n DETAILS as WIDGET_DETAILS,\n WidgetConfig\n} from \"../widgets\";\nimport Container from \"./Container\";\nimport \"./form-item.css\";\nimport validationMessages from \"./validation-messages\";\n\ntype WidgetType = WidgetConfig[\"type\"] | undefined;\ntype FormInstance = ReturnType<typeof Form.useForm>[0];\n\ninterface Props {\n config?: WidgetConfig;\n template: Template;\n onFinish: EditFormProps[\"onFinish\"];\n submitTrigger: Event;\n onDualChange:EditFormProps[\"onDualChange\"];\n enabledualaxis:EditFormProps[\"enabledualaxis\"];\n assetDetails?: any;\n}\n\nexport interface EditFormProps {\n config?: WidgetConfig;\n template: Template;\n assetDetails? : any;\n onFinish: (cfg: WidgetConfig) => void;\n form: FormInstance;\n layout?: \"horizontal\" | \"vertical\";\n onDualChange:(checked:boolean)=>void;\n enabledualaxis: boolean;\n}\n\nexport interface AssetProps {\n assetDetails?: any;\n}\n\nconst TypeSelectForm: React.FC<{\n onTypeChange: (t: WidgetType) => void;\n} & AssetProps> = (props) => {\n\n /* If it's Lite asset it cannot view map events */\n let FILTERED_WIDGETS:any = []\n WIDGET_DETAILS.filter((wd) => {\n if(!props.assetDetails?.noOfSignals){\n FILTERED_WIDGETS.push({\n value: wd.type,\n label: wd.name,\n })\n } else if (props.assetDetails?.noOfSignals > 0 && wd.type != 'map events') {\n FILTERED_WIDGETS.push({\n value: wd.type,\n label: wd.name,\n })\n }\n })\n //Getting parentOrg to enable information widget only for GS Global and its Sub Orgs\n const parentOrgPath = props.assetDetails?.orgPathId?.includes(\"~\") ? props.assetDetails?.orgPathId.split('~') : [props.assetDetails?.orgPathId];\n const orgId = props.assetDetails?.orgId;\n debugger;\n let parentOrg:any;\n if (parentOrgPath.length > 1) {\n parentOrg=parentOrgPath[1]\n }else{\n parentOrg=parentOrgPath[0]\n }\n return (\n <Container>\n <>\n {/* <Form layout=\"vertical\">\n <Form.Item\n label=\"Widget Type\"\n name=\"type\"\n required\n rules={[{ required: true }]}\n >\n <Select\n listHeight={310}\n onChange={(value: WidgetConfig[\"type\"]) =>\n props.onTypeChange(value)\n }\n options={FILTERED_WIDGETS}\n />\n </Form.Item>\n </Form> */}\n <Row>\n <Col style={{ textAlign: 'left', padding: '0px', margin: '0px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <h3>Select Widget Type:</h3>\n </Col>\n </Row>\n\n <Row gutter={[16, 16]}>\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('bar')} className=\"container\">\n <img width='100' height='100' src={barWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Bar Widget</div>\n </div>\n <div className=\"title\">\n <h2>Bar Widget</h2>\n </div>\n </div>\n </Col>\n\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('line')} className=\"container\">\n <img width='175' height='100' src={lineWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Line Widget</div>\n </div>\n <div className=\"title\">\n <h2>Line Widget</h2>\n </div>\n </div>\n </Col>\n\n <Col style={{ textAlign: 'center' }} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('clusterbar')} className=\"container\">\n <img width='175' height='100' src={clusterWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Cluster Widget</div>\n </div>\n <div className=\"title\">\n <h2>Cluster Widget</h2>\n </div>\n </div>\n </Col>\n\n\n\n \n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('map')} className=\"container\">\n <img width='100' height='100' src={locationWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Location Widget</div>\n </div>\n <div className=\"title\">\n <h2>Location Widget</h2>\n </div>\n </div>\n </Col>\n\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('gauge')} className=\"container\">\n <img width='160' height='100' src={gaugeWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Gauge Widget</div>\n </div>\n <div className=\"title\">\n <h2>Gauge Widget</h2>\n </div>\n </div>\n </Col>\n\n {!props.assetDetails?.noOfSignals && \n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('map events') } className=\"container\">\n <img width='175' height='100' src={gpsEventWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">GPS Event Widget</div>\n </div>\n <div className=\"title\">\n <h2>GPS Event Widget</h2>\n </div>\n </div>\n </Col>\n }\n\n \n\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('text')} className=\"container\">\n <img width='150' height='50' src={textWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Text Widget</div>\n </div>\n <div className=\"title\">\n <h2>Text Widget</h2>\n </div>\n </div>\n </Col>\n\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('boolean')} className=\"container\">\n <img width='150' height='50' src={booleanWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Boolean Widget</div>\n </div>\n <div className=\"title\">\n <h2>Boolean Widget</h2>\n </div>\n </div>\n </Col>\n\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('tracker')} className=\"container\">\n <img width='150' height='50' src={trackerWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Tracker Widget</div>\n </div>\n <div className=\"title\">\n <h2>Tracker Widget</h2>\n </div>\n </div>\n </Col>\n {props.assetDetails.orgCmdPgnSpns !== null && props.assetDetails.orgCmdPgnSpns !== \"-\" &&\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('command')} className=\"container\">\n <img width='150' height='50' src={commandWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Command Widget</div>\n </div>\n <div className=\"title\">\n <h2>Command Widget</h2>\n </div>\n <div style={{color: \"red\" ,paddingBottom:'12px' }}>\n <strong>C2D text only for TP1/TP2 Premium/Standard</strong>\n </div>\n </div>\n </Col>}\n \n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('chat')} className=\"container\">\n <img width='150' height='50' src={chatHistoryWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Chat History Widget</div>\n </div>\n <div className=\"title\">\n <h2>Chat History Widget</h2>\n </div>\n <div style={{color: \"red\" ,paddingBottom:'12px' }}>\n <strong>Only for TP1/TP2 Premium/Standard </strong>\n </div>\n </div>\n </Col>\n {(orgId==='c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' || orgId==='42b57533-b9e3-4112-b3df-d4a014c96848'\n || orgId==='4d5b9621-2b2b-11ee-8a6d-739e920ccfbe' || orgId==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d'\n ) && \n //show only if org is either Parker or IQANconnect \n // or Toyota Material Handling Heavy Duty (4d5b9621-2b2b-11ee-8a6d-739e920ccfbe) \n // or GS Global Resources (7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d)\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('command2')} className=\"container\">\n <img width='150' height='50' src={chatHistoryWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Command Chat History Widget</div>\n </div>\n <div className=\"title\">\n <h2>Command Chat History Widget</h2>\n </div>\n <div style={{color: \"red\" ,paddingBottom:'12px' }}>\n <strong>Only for TP1/TP2 Premium/Standard </strong>\n </div>\n </div>\n </Col>\n }\n {parentOrg==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d' &&\n <Col style={{ textAlign: 'center'}} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div onClick={() => props.onTypeChange('information')} className=\"container\">\n <img width='100%' height='50' src={informationWidget} className=\"image\" />\n <div className=\"overlay\">\n <div className=\"text\">Information Widget</div>\n </div>\n <div className=\"title\">\n <h2>Information Widget</h2>\n </div>\n </div>\n </Col>}\n </Row>\n \n </>\n </Container>\n );\n};\n\nconst EditFormContainer: React.FC<Props> = (props) => {\n const [widgetType, setWidgetType] = useState<WidgetType>(props.config?.type);\n const mode = props.config ? \"edit\" : \"create\";\n\n const [form] = Form.useForm();\n\n useEffect(() => {\n const listener = props.submitTrigger.subscribe(() => form.submit());\n return () => listener.remove();\n }, [form, props.submitTrigger]);\n\n return (\n <div className=\"widget-edit-form\">\n <ConfigProvider form={{ validateMessages: validationMessages }}>\n {mode === \"create\" ? (\n <TypeSelectForm\n onTypeChange={typ => {\n setWidgetType(typ);\n form.resetFields();\n }}\n assetDetails={props.assetDetails}\n />\n ) : (\n <></>\n )}\n {widgetType ? (\n getEditForm(widgetType)({\n template: props.template,\n assetDetails: props.assetDetails,\n form: form,\n onFinish: props.onFinish,\n config: props.config,\n onDualChange:props.onDualChange,\n enabledualaxis: props.enabledualaxis,\n })\n ) : (\n <></>\n )}\n </ConfigProvider>\n </div>\n );\n};\n\nexport default EditFormContainer;\n","import React from \"react\";\nimport { Template } from \"../models\";\nimport { DataStore, State } from \"../state\";\nimport { EditFormProps } from \"../WidgetEditForm\";\nimport * as BarChart from \"./BarChart\";\nimport * as BooleanWidget from \"./BooleanWidget\";\nimport * as ChatHistory from \"./Chat\";\nimport * as ClusterBarWidget from \"./ClusterBar\";\nimport * as CommandWidget from \"./CommandWidget\";\nimport * as CommandWidgetNew from \"./CommandWidget-new\";\nimport * as EventsLocationWidget from \"./EventsLocationWidget\";\nimport * as GaugeWidget from \"./GaugeWidget\";\nimport * as InformationWidget from \"./InformationWidget\";\nimport * as LineChart from \"./LineChart\";\nimport * as LocationWidget from \"./LocationWidget\";\nimport { WidgetDetails } from \"./models\";\nimport * as TextWidget from \"./TextWidget\";\nimport * as TrackerWidget from \"./TrackerWidget\";\n\nexport const DETAILS: WidgetDetails[] = [\n BarChart.details,\n BooleanWidget.details,\n GaugeWidget.details,\n LineChart.details,\n ChatHistory.details,\n TextWidget.details,\n CommandWidget.details,\n CommandWidgetNew.details,\n TrackerWidget.details,\n LocationWidget.details,\n EventsLocationWidget.details,\n ClusterBarWidget.details,\n InformationWidget.details\n];\n\n// Combining the different widget types allows Typescript to use\n// discriminated unions to provide more type safety.\nexport type WidgetConfig =\n | LineChart.Config\n | ChatHistory.Config\n | BarChart.Config\n | BooleanWidget.Config\n | TextWidget.Config\n | CommandWidget.Config\n | CommandWidgetNew.Config\n | TrackerWidget.Config\n | GaugeWidget.Config\n | LocationWidget.Config\n | EventsLocationWidget.Config\n | ClusterBarWidget.Config\n | InformationWidget.Config;\n\nexport type InformationWidgetConfig = InformationWidget.Config\nexport function createWidget(\n config: WidgetConfig,\n common: { template: Template; data: DataStore,rightYAxisData:DataStore, state: State },\n errorCode: string | undefined\n): JSX.Element {\n //console.log(\"config:\",config)\n switch (config.type) {\n case \"line\":\n return <LineChart.Widget {...config} {...common} errorCode={errorCode} />;\n case \"chat\":\n return <ChatHistory.Widget {...config} {...common} />;\n case \"bar\":\n return <BarChart.Widget {...config} {...common} />;\n case \"boolean\":\n return <BooleanWidget.Widget {...config} {...common} />;\n case \"text\":\n return <TextWidget.Widget {...config} {...common} />;\n case \"command\":\n return <CommandWidget.Widget {...config} {...common} />;\n case \"command2\":\n return <CommandWidgetNew.Widget {...config} {...common} />;\n case \"tracker\":\n return <TrackerWidget.Widget {...config} {...common} />;\n case \"gauge\":\n return <GaugeWidget.Widget {...config} {...common} />;\n case \"map\":\n return <LocationWidget.Widget {...config} {...common} />;\n case \"map events\":\n return <EventsLocationWidget.Widget {...config} {...common} />;\n case \"clusterbar\":\n return <ClusterBarWidget.Widget {...config} {...common} />;\n case \"information\":\n return <InformationWidget.Widget {...config} {...common} />;\n }\n}\n\nexport interface EditForm {\n form: JSX.Element;\n parser: (a: any) => WidgetConfig | undefined;\n}\n\nexport function getEditForm(\n type: WidgetConfig[\"type\"]\n): React.FC<EditFormProps> {\n switch (type) {\n case \"bar\":\n return BarChart.EditForm;\n case \"boolean\":\n return BooleanWidget.EditForm;\n case \"gauge\":\n return GaugeWidget.EditForm;\n case \"line\":\n return LineChart.EditForm;\n case \"text\":\n return TextWidget.EditForm;\n case \"chat\":\n return ChatHistory.EditForm;\n case \"command\":\n return CommandWidget.EditForm;\n case \"command2\":\n return CommandWidgetNew.EditForm;\n case \"tracker\":\n return TrackerWidget.EditForm;\n case \"map\":\n return LocationWidget.EditForm;\n case \"map events\":\n return EventsLocationWidget.EditForm;\n case \"clusterbar\":\n return ClusterBarWidget.EditForm;\n case \"information\":\n return InformationWidget.EditForm;\n default:\n return (props: EditFormProps) => <></>;\n }\n}\n","import React, { Children, useMemo } from \"react\";\n\nimport { Form, Select, Button, Tooltip } from \"antd\";\nimport { MinusCircleOutlined } from \"@ant-design/icons\";\n\ntype Value = string;\ntype ValueArray = Array<Value | undefined>;\n\ninterface Selectable {\n value: Value;\n label: string;\n}\n\ninterface Props {\n options: Selectable[];\n maxSelected?: number;\n value?: ValueArray;\n onChange?: (v: ValueArray) => void;\n valueLabel?: string;\n orgCmdPgnSpns? : string;\n}\n\nconst SelectorList: React.FC<Props> = (props) => {\n // Must be optional to play nice with Ant Design's forms but won't\n // actually work without them\n const assertDefined = (propName: keyof Props) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n\n const { value = [], onChange } = props;\n\n const { add, remove, changeValue } = useMemo(() => {\n const triggerChange = (newValues: ValueArray) => {\n if (onChange) {\n onChange(newValues);\n }\n };\n\n const add = () => {\n triggerChange(value.concat(undefined));\n };\n\n const remove = (i: number) => {\n triggerChange([...value.slice(0, i), ...value.slice(i + 1)]);\n };\n\n const changeValue = (index: number, updatedValue: Value) => {\n const newVals = [...value];\n newVals[index] = updatedValue;\n triggerChange(newVals);\n };\n\n return { add, remove, changeValue };\n }, [onChange, value]);\n\n const filteredOptions = (v?: Value) => {\n return props.options.filter(\n (opt) => opt.value === v || !value.includes(opt.value)\n );\n };\n\n const onSearch = (val: string) => {\n return props.options.filter(\n (opt) => opt.label === val || !value.includes(opt.label)\n );\n }\n\n const maxReached = value.length >= (props.maxSelected || Infinity);\n const valueLabel = props.valueLabel ? `${props.valueLabel} ` : \"\";\n const tooltipMsg = value.length >= (props.maxSelected || Infinity) ? 'Max value added': \n (props.orgCmdPgnSpns != null && props.orgCmdPgnSpns === '-' ? \"Remote control is not enabled for the org\": \"Add signal\");\n return (\n <div>\n {value.map((v, i) => (\n <Form.Item key={i}>\n <Select\n showSearch\n style={{ width: \"95%\" }}\n value={v}\n onChange={(v) => changeValue(i, v)}\n options={filteredOptions(v)}\n optionFilterProp={'label'}\n onSearch={onSearch}\n />\n <MinusCircleOutlined\n style={{ marginLeft: \"8px\" }}\n onClick={() => remove(i)}\n />\n </Form.Item>\n ))}\n <Tooltip title={tooltipMsg}> \n <Button disabled={maxReached || props.orgCmdPgnSpns != null && (props.orgCmdPgnSpns === '-')} onClick={add} type=\"dashed\">\n {maxReached ? `Max ${valueLabel}Added` : `Add ${valueLabel}`}\n </Button>\n </Tooltip>\n </div>\n );\n};\n\nexport default SelectorList;","import React from 'react';\nimport { Form, Input } from 'antd'\n\nconst WidgetTitleFormField: React.FC = (props) => (\n <Form.Item\n name=\"title\"\n label=\"Widget Title\"\n required\n rules={[{ required: true }, { whitespace: true }]}\n >\n <Input />\n </Form.Item>\n);\n\nexport default WidgetTitleFormField;","import React, { useMemo, useState } from \"react\";\n\nimport { Form, Button, Select, Input } from \"antd\";\nimport { MinusCircleOutlined } from \"@ant-design/icons\";\nimport { SketchPicker } from \"react-color\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\ntype Value = string;\ntype ValueArray = Array<any | undefined>;\n\ninterface SignalValue {\n id: Value;\n label: string;\n color: string;\n value: string;\n}\n\ninterface Selectable {\n value: SignalValue;\n label: string;\n}\ninterface Props {\n options: SignalValue[];\n maxSelected?: number;\n value?: ValueArray;\n onChange?: (v: ValueArray) => void;\n valueLabel?: string;\n}\n\nconst ColorSelectorList: React.FC<Props> = (props) => {\n // Must be optional to play nice with Ant Design's forms but won't\n // actually work without them\n const assertDefined = (propName: keyof Props) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n\n const { value = [], onChange } = props;\n\n let temp = [];\n let tempColor = [];\n for (let index = 0; index < value.length; index++) {\n temp.push(false);\n let c = ((value[index].color === \"#000000\" || value[index].color == null) ? appConfigs.colorCodes.colorCodesLineChart[index] : value[index].color);\n tempColor.push(c);\n }\n const [isOpen, setIsOpen] = useState(temp);\n const [dcolor, setDcolor] = useState(tempColor);\n\n const { add, remove, changeValue } = useMemo(() => {\n const triggerChange = (newValues: ValueArray) => {\n if (onChange) {\n onChange(newValues);\n }\n };\n\n const add = () => {\n triggerChange(value.concat({ id: '', color: \"#000000\" }));\n };\n\n const remove = (i: number) => {\n triggerChange([...value.slice(0, i), ...value.slice(i + 1)]);\n };\n\n const changeValue = (index: number, updatedValue: Value) => {\n const newVals = [...value];\n if (newVals.length > 0) {\n let obj = { id: updatedValue, color: appConfigs.colorCodes.colorCodesLineChart[index] };\n newVals[index] = obj;\n triggerChange(newVals);\n }\n };\n\n return { add, remove, changeValue };\n }, [onChange, value]);\n\n const filteredOptions = (v?: SignalValue) => {\n return props.options.filter(\n (opt) => opt.id === v?.id || !value.some(e=>e.id === opt.id) //!value.includes({ id: opt.id, color: opt.color })\n );\n };\n\n const onSearch = (val: string) => {\n return props.options.filter(\n (opt) => opt.label === val || !value.includes(opt.label)\n );\n }\n\n const maxReached = value.length >= (props.maxSelected || Infinity);\n const valueLabel = props.valueLabel ? `${props.valueLabel} ` : \"\";\n\n const colorPickerCover = {\n position: \"fixed\",\n top: \"0px\",\n right: \"0px\",\n bottom: \"0px\",\n left: \"0px\",\n } as React.CSSProperties;\n\n return (\n <div>\n {value.map((v, i) => (\n <Form.Item key={i}>\n <Select\n showSearch\n style={{ width: \"70%\" }}\n value={v?.id}\n onChange={(v) => changeValue(i, v)}\n options={filteredOptions(v)}\n optionFilterProp={'label'}\n onSearch={onSearch}\n />\n <Input\n value={v.color || dcolor[i] }\n style={{ marginLeft: \"8px\", width: \"15%\" }}\n />\n <Button\n style={{\n marginLeft: \"8px\",\n width: \"5%\",\n background: v.color || dcolor[i],\n }}\n shape= \"circle\"\n onClick={() => {\n isOpen[i] = true;\n setIsOpen([...isOpen]);\n }}\n >\n .\n </Button>\n <MinusCircleOutlined\n style={{ marginLeft: \"8px\" }}\n onClick={() => remove(i)}\n />\n <div>\n {isOpen[i] ? (\n v ? (\n <>\n <div\n style={{\n position: \"absolute\",\n zIndex: 5,\n right: 0,\n }}\n >\n <div\n style={colorPickerCover}\n onClick={() => {\n isOpen[i] = false;\n setIsOpen([...isOpen]);\n }}\n />\n <SketchPicker\n color={v.color || dcolor[i]}\n onChange={(c) => {\n v.color = c.hex;\n dcolor[i] = c.hex;\n setDcolor([...dcolor]);\n }}\n />\n </div>\n </>\n ) : null\n ) : null}\n </div>\n </Form.Item>\n ))}\n <Button disabled={maxReached} onClick={add} type=\"dashed\">\n {maxReached ? `Max ${valueLabel}Added` : `Add ${valueLabel}`}\n </Button>\n </div>\n );\n};\n\nexport default ColorSelectorList;\n","import React, { useMemo, useState } from \"react\";\n\nimport { Form, Button, Select, Input, Row } from \"antd\";\nimport { MinusCircleOutlined } from \"@ant-design/icons\";\nimport { SketchPicker } from \"react-color\";\nimport \"./form-item.css\";\nimport { Rule } from \"../models\";\n\ntype Value = string;\ntype ValueArray = Array<any | undefined>;\n\ninterface SignalValue {\n id: Value;\n label: string;\n color: string;\n value: string;\n}\n\ninterface Selectable {\n value: SignalValue;\n label: string;\n}\ninterface Props {\n options: SignalValue[];\n maxSelected?: number;\n value?: ValueArray;\n onChange?: (v: ValueArray) => void;\n valueLabel?: string;\n labels: string[];\n rules: Rule[];\n}\n\nconst ColorSelectorList: React.FC<Props> = (props) => {\n // Must be optional to play nice with Ant Design's forms but won't\n // actually work without them\n const assertDefined = (propName: keyof Props) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n\n const { value = [], onChange } = props;\n\n let onTemp = [];\n let offTemp = [];\n let onTempColor = [];\n let OffTempColor = [];\n\n for (let index = 0; index < value.length; index++) {\n onTemp.push(false);\n offTemp.push(false);\n let c =\n value[index].color === \"#000000\" || value[index].color == null\n ? \"#008000$#FF0000\"\n : // ? appConfigs.colorCodes.colorCodesLineChart[index]\n value[index].color;\n let s = c.split(\"$\");\n onTempColor.push(s[0]);\n OffTempColor.push(s[1]);\n }\n const [isOnOpen, setIsOnOpen] = useState(onTemp);\n const [onColor, setOnColor] = useState(onTempColor);\n const [isOffOpen, setIsOffOpen] = useState(offTemp);\n const [Offcolor, setOffcolor] = useState(OffTempColor);\n\n const { add, remove, changeValue } = useMemo(() => {\n const triggerChange = (newValues: ValueArray) => {\n if (onChange) {\n onChange(newValues);\n }\n };\n\n const add = () => {\n triggerChange(value.concat({ id: \"\", color: \"#008000$#FF0000\" }));\n };\n\n const remove = (i: number) => {\n triggerChange([...value.slice(0, i), ...value.slice(i + 1)]);\n };\n\n const changeValue = (index: number, updatedValue: Value) => {\n const newVals = [...value];\n if (newVals.length > 0) {\n let obj = {\n id: updatedValue,\n color: \"#008000$#FF0000\", //appConfigs.colorCodes.colorCodesLineChart[index],\n };\n newVals[index] = obj;\n triggerChange(newVals);\n }\n };\n\n return { add, remove, changeValue };\n }, [onChange, value]);\n\n const filteredOptions = (v?: SignalValue) => {\n return props.options.filter(\n (opt) => opt.id === v?.id || !value.some((e) => e.id === opt.id) //!value.includes({ id: opt.id, color: opt.color })\n );\n };\n\n const onSearch = (val: string) => {\n return props.options.filter(\n (opt) => opt.label === val || !value.includes(opt.label)\n );\n };\n\n let isRules = false;\n if (value.length > 0) {\n for (let index = 0; index < value.length; index++) {\n const element = value[index];\n let rule = props.rules.filter((sig) => sig.signalId === element.id); //.length;\n if (rule.length > 0) {\n if (\n rule[0].criticalHigh &&\n rule[0].criticalLow &&\n rule[0].warningHigh &&\n rule[0].warningLow\n ) {\n isRules = true;\n }\n }\n }\n }\n\n const maxReached = value.length >= (props.maxSelected || Infinity);\n const valueLabel = props.valueLabel ? `${props.valueLabel} ` : \"\";\n const onLabel = props.labels.length === 2 ? props.labels[0] : \"On\";\n const offLabel = props.labels.length === 2 ? props.labels[1] : \"On\";\n\n let labelText = \"\";\n if (onLabel === \"Fill\") {\n if (isRules) {\n labelText = \"*Rules are available for the selected signal.\";\n } else {\n labelText = \"*Rules are not available for the selected signal.\";\n }\n }\n\n const colorPickerCover = {\n position: \"fixed\",\n top: \"0px\",\n right: \"0px\",\n bottom: \"0px\",\n left: \"0px\",\n } as React.CSSProperties;\n\n const labelStyle = {\n marginLeft: \"2px\",\n textAlign: \"left\",\n display: \"block\",\n float: \"left\",\n width: \"50%\",\n } as React.CSSProperties;\n\n const label1Style = {\n marginLeft: \"8px\",\n display: \"block\",\n textAlign: \"left\",\n float: \"left\",\n width: \"22%\",\n } as React.CSSProperties;\n\n const label2Style = {\n marginLeft: \"2px\",\n textAlign: \"left\",\n display: \"block\",\n float: \"left\",\n width: \"20%\",\n } as React.CSSProperties;\n\n return (\n <div>\n <Form.Item>\n <label style={labelStyle}>Name</label>\n <label style={label1Style}>{onLabel}</label>\n <label style={label2Style}>{offLabel}</label>\n </Form.Item>\n <Form.Item className=\"form-item\">\n {value.map((v, i) => (\n <Form.Item key={i}>\n <Select\n showSearch\n style={{ width: \"50%\" }}\n value={v?.id}\n onChange={(v) => changeValue(i, v)}\n options={filteredOptions(v)}\n optionFilterProp={\"label\"}\n onSearch={onSearch}\n />\n <Input\n disabled={isRules}\n value={v.color.split(\"$\")[0] || onColor[i]}\n style={{ marginLeft: \"8px\", width: \"15%\" }}\n />\n <Button\n disabled={isRules}\n style={{\n marginLeft: \"8px\",\n width: \"5%\",\n background: v.color.split(\"$\")[0] || onColor[i],\n }}\n shape=\"circle\"\n onClick={() => {\n isOnOpen[i] = true;\n setIsOnOpen([...isOnOpen]);\n }}\n >\n .\n </Button>\n <Input\n disabled={isRules}\n value={v.color.split(\"$\")[1] || Offcolor[i]}\n style={{ marginLeft: \"8px\", width: \"15%\" }}\n />\n <Button\n disabled={isRules}\n style={{\n marginLeft: \"8px\",\n width: \"5%\",\n background: v.color.split(\"$\")[1] || Offcolor[i],\n }}\n shape=\"circle\"\n onClick={() => {\n isOffOpen[i] = true;\n setIsOffOpen([...isOffOpen]);\n }}\n >\n .\n </Button>\n <MinusCircleOutlined\n style={{ marginLeft: \"8px\" }}\n onClick={() => remove(i)}\n />\n <div>\n {isOnOpen[i] ? (\n v ? (\n <>\n <div\n style={{\n position: \"absolute\",\n zIndex: 5,\n right: 0,\n }}\n >\n <div\n style={colorPickerCover}\n onClick={() => {\n isOnOpen[i] = false;\n setIsOnOpen([...isOnOpen]);\n }}\n />\n <SketchPicker\n color={\n (v.color ? v.color.split(\"$\")[0] : v.color) ||\n onColor[i]\n }\n onChange={(c) => {\n if (v.color) {\n let s = v.color.split(\"$\");\n v.color = c.hex + \"$\" + s[1];\n } else {\n v.color = c.hex + \"$#FF0000\";\n }\n onColor[i] = c.hex;\n setOnColor([...onColor]);\n }}\n />\n </div>\n </>\n ) : null\n ) : isOffOpen[i] ? (\n v ? (\n <>\n <div\n style={{\n position: \"absolute\",\n zIndex: 5,\n right: 0,\n }}\n >\n <div\n style={colorPickerCover}\n onClick={() => {\n isOffOpen[i] = false;\n setIsOffOpen([...isOffOpen]);\n }}\n />\n <SketchPicker\n color={\n (v.color ? v.color.split(\"$\")[1] : v.color) ||\n Offcolor[i]\n }\n onChange={(c) => {\n if (v.color) {\n let s = v.color.split(\"$\");\n v.color = s[0] + \"$\" + c.hex;\n } else {\n v.color = \"#008000$\" + c.hex;\n }\n Offcolor[i] = c.hex;\n setOffcolor([...Offcolor]);\n }}\n />\n </div>\n </>\n ) : null\n ) : null}\n </div>\n </Form.Item>\n ))}\n <Button disabled={maxReached} onClick={add} type=\"dashed\">\n {maxReached ? `Max ${valueLabel}Added` : `Add ${valueLabel}`}\n </Button>\n <Form.Item>\n <Row justify=\"space-between\">\n <span>{labelText}</span>\n </Row>\n </Form.Item>\n </Form.Item>\n </div>\n );\n};\n\nexport default ColorSelectorList;\n","import React from \"react\";\nimport { Form } from \"antd\";\n\nimport { Rule, Signal } from \"../models\";\nimport ColorSelectorList from \"./ColorSelectorList\";\nimport BooleanSelectorList from \"./BooleanSelectorList\";\nimport SelectorList from \"./SelectorList\";\n\ninterface Props {\n max?: number;\n signals: Signal[];\n rules: Rule[];\n isColor?: string;\n orgCmdPgnSpns? : string;\n}\n\nconst SignalSelectorList: React.FC<Props> = (props) => {\n //console.log(\"SignalSelectorList props:\",props);\n const gaugelabels = [\"Fill\",\"Remain\"];\n const boolLabels = [\"ON\",\"OFF\"];\n const colorSelectable = props.signals.map((s) => ({\n id: s.id,\n label: s.name,\n color: s.color,\n value: s.id,\n }));\n const selectable = props.signals.map((s) => ({\n value: s.id,\n label: s.name,\n }));\n let isColor = props.isColor;\n //console.log(\"SignalSelectorList props\",props)\n return (\n <Form.Item\n label=\"Signals\"\n name=\"signals\"\n required\n rules={[\n {\n validator(rule, value) {\n if (value) {\n if (value.length === 0) {\n return Promise.reject(\n \"At least one valid signal must be specified\"\n );\n }\n let res = value.filter((v: any) => {\n if (v) {\n if (v?.id !== \"\") {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n });\n if (res.length < 1) {\n return Promise.reject(\n \"At least one valid signal must be specified\"\n );\n } else {\n return Promise.resolve();\n }\n } else {\n return Promise.reject(\n \"At least one valid signal must be specified\"\n );\n }\n },\n },\n ]}\n >\n {isColor === \"boolean\" ? (\n <BooleanSelectorList\n options={colorSelectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n rules={props.rules}\n labels= {boolLabels} />\n ) : isColor === \"gauge\" ? (\n <BooleanSelectorList\n options={colorSelectable}\n maxSelected={props.max}\n rules={props.rules}\n valueLabel=\"Signal\"\n labels= {gaugelabels} />\n ) : isColor === \"color\" ? (\n <ColorSelectorList\n options={colorSelectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n />\n ) : (\n <SelectorList\n options={selectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n orgCmdPgnSpns = {props.orgCmdPgnSpns}\n />\n )}\n </Form.Item>\n );\n};\n\nexport default SignalSelectorList;\n","import React from \"react\";\nimport { Form ,Row,Col, InputNumber} from \"antd\";\n\nimport { Rule, Signal } from \"../../models\";\nimport BooleanSelectorList from \"../../WidgetEditForm/BooleanSelectorList\";\nimport ColorSelectorList from \"../../WidgetEditForm/ColorSelectorList\";\nimport SelectorList from \"../../../Dashboard/WidgetEditForm/SelectorList\";\n\n\ninterface Props {\n max?: number;\n signals: Signal[];\n rules: Rule[];\n isColor: string;\n}\nconst rightYAxisRange = (end: string) => [\"settings\", \"rightYAxisRange\", end];\nconst RightAxisSignals: React.FC<Props> = (props) => {\n const gaugelabels = [\"Fill\",\"Remain\"];\n const boolLabels = [\"ON\",\"OFF\"];\n const colorSelectable = props.signals.map((s) => ({\n id: s.id,\n label: s.name,\n color: s.color,\n value: s.id,\n }));\n const selectable = props.signals.map((s) => ({\n value: s.id,\n label: s.name,\n }));\n let isColor = props.isColor;\n \n return (\n <>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={10}>\n <Form.Item\n name={rightYAxisRange(\"min\")}\n label=\"Right Axis Min\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10} push=\"right\">\n <Form.Item\n name={rightYAxisRange(\"max\")}\n label=\"Right Axis Max\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n \n <Form.Item\n label=\"Signals on right axis\"\n name=\"rightYAxisSignals\"\n required\n rules={[\n {\n validator(rule, value) {\n if (value) {\n if (value.length === 0) {\n return Promise.reject(\n \"At least one valid signal must be specified\"\n );\n }\n let res = value.filter((v: any) => {\n if (v) {\n if (v?.id !== \"\") {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n });\n if (res.length < 1) {\n return Promise.reject(\n \"At least one valid signal must be specified\"\n );\n } else {\n return Promise.resolve();\n }\n } else {\n return Promise.reject(\n \"At least one valid signal must be specified\"\n );\n }\n },\n },\n ]}\n >\n {isColor === \"boolean\" ? (\n <BooleanSelectorList\n options={colorSelectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n rules={props.rules}\n labels={boolLabels} />\n ) : isColor === \"gauge\" ? (\n <BooleanSelectorList\n options={colorSelectable}\n maxSelected={props.max}\n rules={props.rules}\n valueLabel=\"Signal\"\n labels={gaugelabels} />\n ) : isColor === \"color\" ? (\n <ColorSelectorList\n options={colorSelectable}\n maxSelected={props.max}\n valueLabel=\"Signal\" />\n ) : (\n <SelectorList\n options={selectable}\n maxSelected={props.max}\n valueLabel=\"Signal\" />\n )}\n </Form.Item>\n </>\n );\n};\n\nexport default RightAxisSignals;\n","import { EditFormProps as EFPImport } from \"./EditFormContainer\";\nimport WidgetEditForm from './WidgetEditDrawer';\nimport SelectorList from './SelectorList';\nimport WidgetTitleFormField from './WidgetTitleFormField';\nimport Container from './Container';\nimport SignalSelectorList from './SignalSelectorList';\nimport RightAxisSignals from \"../widgets/LineChart/RightAxisSignals\";\n\nexport { SelectorList, WidgetTitleFormField, Container, SignalSelectorList,RightAxisSignals};\nexport type EditFormProps = EFPImport;\n\nexport default WidgetEditForm;","import React, {useState} from 'react';\nimport {Drawer, Button } from 'antd';\n\nimport { Template } from '../models';\nimport { WidgetConfig } from '../widgets';\nimport Event from '../../../lib/event';\nimport EditFormContainer from './EditFormContainer';\nimport { appConfigs } from '../../../utils/configurations';\n\ninterface Props {\n template: Template;\n onFinish: (wcfg: WidgetConfig) => void;\n title: string;\n visible: boolean;\n onClose: () => void;\n onDualChange:(checked:boolean)=>void;\n enabledualaxis: boolean;\n assetDetails?: any;\n}\n\nconst WidgetEditDrawer: React.FC<Props> = (props) => {\n const [submitter] = useState(new Event());\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n \n return (\n <Drawer\n width={drawerWidth}\n placement=\"right\"\n {...props}\n footer={\n <Button\n type=\"primary\"\n htmlType=\"button\"\n onClick={() => submitter.trigger()}\n >\n Save\n </Button>\n }\n onClose={props.onClose}\n destroyOnClose\n >\n <EditFormContainer\n {...props}\n onFinish={(cfg) => {\n props.onFinish(cfg);\n props.onClose();\n }}\n submitTrigger={submitter}\n />\n </Drawer>\n );\n};\n\nexport default WidgetEditDrawer;","import React from \"react\";\nimport { Form, Row, Col, InputNumber, Card } from \"antd\";\n\nimport { Config } from \"./index\";\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport Container from \"../../WidgetEditForm/Container\";\nimport \"./BarChartEditForm.css\";\n\nfunction sanitizeInputs(values: Config): Config {\n return {\n title: values.title,\n settings: values.settings,\n type: \"bar\",\n signals: values.signals.filter((v) => !!v),\n };\n}\n\nconst axisRangePath = (end: string) => [\"settings\", \"axisRange\", end];\n\nconst EditForm: React.FC<EditFormProps> = (props) => (\n <div className=\"bar-chart-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Bar Chart Settings\">\n <Row>\n <WidgetTitleFormField />\n </Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={10}>\n <Form.Item\n name={axisRangePath(\"min\")}\n label=\"Axis Min\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10} push=\"right\">\n <Form.Item\n name={axisRangePath(\"max\")}\n label=\"Axis Max\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n <SignalSelectorList max={6} signals={props.template.signals} rules= {[]} isColor={\"color\"} />\n </Card>\n </Form>\n </div>\n);\n\n\nexport default EditForm;","import React from \"react\";\nimport { Form, Card } from \"antd\";\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \"./BooleanWidget\";\n\nfunction sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"boolean\",\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"boolean-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Boolean Widget Settings\">\n <WidgetTitleFormField />\n <SignalSelectorList max={10} signals={props.template.signals} rules= {[]} isColor={\"boolean\"} />\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import React from \"react\";\nimport { List, Tooltip } from \"antd\";\nimport Dot from \"../../../../sharedComponents/Dot\";\nimport { findTimezone, formatDate, inputSignalMapper, signalLabel } from \"../common\";\nimport { CommonWidgetProps, CommonWidgetConfig } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\ninterface Signal {\n signalId: string;\n name: string;\n color: string;\n values: { timestamp: Date; value: boolean; }[];\n}\n\nexport const details: WidgetDetails = {\n type: \"boolean\",\n name: \"Boolean Widget\"\n}\n\nexport type Config = CommonWidgetConfig & { type: \"boolean\" };\n\nconst createSignals = inputSignalMapper<Signal>((meta, data,userPreference) => ({\n signalId: meta.id,\n name: signalLabel(meta,userPreference, false),\n color: meta.color,\n values: [\n {\n timestamp: data[0].timestamp,\n value: !!data[0].value,\n },\n ],\n}));\n\nconst BooleanWidget: React.FC<CommonWidgetProps> = (props) => {\n const { template, data, state } = props;\n let signals = createSignals(props.signals, template, data,state.temperature.value);\n\n /* updating with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n signals = signals.map((signal: Signal) => {\n if (props.signalRData.data.hasOwnProperty(signal.signalId)){\n signal.values[0].value = !!props.signalRData.data[signal.signalId][0].value\n signal.values[0].timestamp = new Date(props.signalRData.data[signal.signalId][0].bt - props.signalRData.data[signal.signalId][0].time)\n }\n return signal\n })\n }\n\n var onColor = \"#008000\";\n var offColor = \"#FF0000\";\n var details:any;\n if (signals && signals.length > 0) {\n if (signals[0].color) {\n let arr = signals[0].color.split(\"$\");\n onColor = arr[0];\n offColor = arr[1];\n }\n details=findTimezone(state.timezone);\n }\n return (\n <List\n dataSource={signals}\n renderItem={(signal) => (\n <List.Item>\n <List.Item.Meta title={signal.name} />\n <Tooltip\n title={formatDate(signal.values[0].timestamp)+\" \".concat(details?.timezone)}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n >\n <div>\n <Dot\n // color={signal.values[0].value ? onColor : offColor}\n color={signal.color? \n (signal.values[0].value ? signal.color.split(\"$\")[0] : signal.color.split(\"$\")[1]) \n : (signal.values[0].value ? onColor : offColor)}\n size=\"20px\"\n />\n </div>\n </Tooltip>\n </List.Item>\n )}\n />\n );\n};\n\n// export default BooleanWidget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(BooleanWidget);\n","import React from \"react\";\nimport { Form, Card } from \"antd\";\nimport { Signal } from \"../../models\"\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n } from \"../../WidgetEditForm\";\n import { Config } from \".\";\n\n function sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"chat\"\n };\n }\n\n const EditForm: React.FC<EditFormProps> = (props) => {\n const chatSignals: Signal[] = [];\n const orgCmdPgnSpns: string = props.assetDetails.orgCmdPgnSpns; \n \n props.template.signalCollections.map((collection)=>{\n if(collection.type && collection.type === \"none\" || collection.type && collection.type === \"Command\" ){\n collection.signals.filter((signal)=>(signal.format===\"text\" && \n (collection.type != \"Command\" || \n collection.type === \"Command\" && orgCmdPgnSpns.indexOf(\"65305\")!==-1))) // this org is supporting command\n .map((signal)=> {\n chatSignals.push(signal)\n })\n }\n });\n\n return (\n <div className=\"chat-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Chat History Widget Settings\">\n <WidgetTitleFormField />\n <SignalSelectorList max={10} signals={chatSignals} orgCmdPgnSpns={orgCmdPgnSpns} rules= {[]} />\n </Card>\n </Form>\n </div>\n );\n };\n \n export default EditForm;\n ","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { hexToString } from \"../../../../utils/commonHelpers\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { State } from \"../../state\";\nimport { findTimezone, inputSignalMapper } from \"../common\";\nimport \"./ChatWidget.css\";\n\ninterface Signal {\n signalId: string;\n values: Array<{\n timestamp: Date;\n value: number;\n }>;\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n signalId: meta.id,\n values: data,\n}));\n\nexport type TimeSeriesMessage = {\n signalId: string,\n firstName: string, \n lastName: string,\n type: string, \n timestamp: Date; \n text: string \n}\n\ninterface ChatPlayWidgetProps extends CommonWidgetProps{\n state: State; \n}\n\nfunction formatD2CText(v: string): string {\n // v = \"0x2a6d61655420694\"; // \"0x006d6165542069486d616554206948\"\n var msg = hexToString(v);\n // console.log(\"rawhex\", v)\n // console.log(\"raw msg\", msg)\n // remove the deliminator from the single/multi text frame\n // if (msg.length <=9) {\n // const lastFrameStartPos = msg.length -9;\n // // console.log(\"lastFrameStartPos\", lastFrameStartPos)\n // const delimiterPos = msg.indexOf(\"*\", lastFrameStartPos);\n // // console.log(\"delimiterPos\", lastFrameStartPos)\n // if (delimiterPos >=0) { // only applicable to singleframe, since multi-frame does not have delimiter,\n // // therefore, multi-frame delimiterPos = -1\n // msg = msg.substring(0, delimiterPos );\n // // console.log(\"msg returned\", msg)\n // } \n // } \n if (msg.charAt(msg.length-1)=='*'){\n msg = msg.replace(msg.substring(msg.length-1), \"\");\n console.log(msg);\n }\n return msg;\n}\n\n// O(n log n) time & O(n) space\nlet mergeTwo = (arr1:TimeSeriesMessage[], arr2:TimeSeriesMessage[]) => {\n let result = [...arr1, ...arr2];\n\n let sortedResult = result.sort((a,b) => b.timestamp.getTime()-a.timestamp.getTime());\n \n return sortedResult; \n}\n\n// const getTextSignalValues = (signals: any, state: any) => {\n// const adjustedC2DSeries = [{ firstName:\"Me\", lastName:\"Cloud\", type:\"C2D-SELF\", timestamp: new Date(\"2022-06-01T13:00:00\"), text:\"Morging, guys!\"}, \n// { firstName:\"Other\", lastName:\"Cloud\", type:\"C2D-OTHER\", timestamp: new Date(\"2021-03-01T13:05:00\"), text:\"Does any truck need service today?\"}, \n// { firstName:\"Me\", lastName:\"Cloud\", type:\"C2D-SELF\", timestamp: new Date(\"2022-06-01T13:05:00\"), text:\"Truck1 had time-to-service alerts \"},\n// { firstName:\"Me\", lastName:\"Cloud\", type:\"C2D-SELF\", timestamp: new Date(\"2022-06-01T14:00:00\"), text:\"The service truck is only available after 2p!\"}];// C2DSeries; \n// const adjustedD2CSeries =[ \n// { firstName:\"\", lastName:\"Device\", type:\"D2C\", timestamp: new Date(\"2022-06-01T13:20:00\"), text:\"Please send service truck to central station by noon\"},\n// { firstName:\"\", lastName:\"Device\", type:\"D2C\", timestamp: new Date(\"2022-06-01T14:20:00\"), text:\"See you at 2pm\"}]; // D2CSeries; \n// let messages = mergeTwo(adjustedC2DSeries, adjustedD2CSeries);\n\n// return messages;\n\n// }\n\nconst getD2CMessages = (props: ChatPlayWidgetProps) => {\n\n var D2CMessages:TimeSeriesMessage[] = []; //getD2CMessages((signals, state )\n \n const { template, data, signals, signalRData } = props;\n let D2CTextSignalValues = createSignals(signals, template, data);\n \n D2CTextSignalValues.map((signal: any) => {\n signal.values.forEach((signalData: any, index: number) => {\n D2CMessages.push({\n signalId: signalData.signalId,\n firstName: signalData.ruleName, \n lastName: \"D\",\n type: \"D2C\",\n timestamp: new Date(signalData.timestamp),\n text: formatD2CText(signalData.value)\n });\n });\n });\n\n return D2CMessages;\n};\n\nconst getAllMessages =(( props:ChatPlayWidgetProps) => {\n let d2c:TimeSeriesMessage[] = getD2CMessages(props );\n let c2d:TimeSeriesMessage[] = [];\n const { signals } = props;\n \n signals.map((s) => s.toString()).forEach((widgetSignalId) => {\n props.state.asset.c2dMessages.forEach((msg) => {\n if (widgetSignalId == msg.signalId) {\n c2d.push({\n signalId: msg.signalId,\n firstName: msg.firstName, \n lastName: msg.lastName,\n text: msg.text,\n type: msg.type,\n timestamp: new Date(msg.timestamp)\n });\n } \n });\n \n })\n\n var widgetSignals: TimeSeriesMessage[] = [];\n mergeTwo(c2d, d2c).forEach((msg: TimeSeriesMessage) => {\n widgetSignals.push(msg)\n });\n return widgetSignals;\n\n});\n\nconst formatShortDateTime = ((d:Date) => {\n let month = d.getMonth() < 9 ? \"0\" + (d.getMonth() + 1).toString(): (d.getMonth()+1).toString();\n let day = d.getDate() < 10 ? \"0\" + (d.getDate()).toString(): (d.getDate()).toString();\n let hr = d.getHours() < 10 ? \"0\" + (d.getHours()).toString(): (d.getHours()).toString();\n let mi = d.getMinutes() < 10 ? \"0\" + (d.getMinutes()).toString(): (d.getMinutes()).toString();\n return d.getFullYear() + \n \"-\" + month + \n \"-\" + day +\n \" \" + hr +\n \":\" + mi;\n});\n\nconst Widget: React.FC<ChatPlayWidgetProps> = (props:ChatPlayWidgetProps) => {\n\n let widgetSignals: TimeSeriesMessage[] = getAllMessages(props);\n\n return (\n <div className=\"widgetcontent\">\n {\n widgetSignals && widgetSignals.length > 0 && widgetSignals.map((signal:any) => {\n let details=findTimezone(props.state.timezone);\n let aligns = signal.type===\"C2D-SELF\"?\"left-side\":(signal.type===\"C2D-OTHER\"?\"right-side-cloud\": \"right-side-gateway\");\n return (\n <div>\n <div className={aligns}>\n <strong>{signal.firstName + \" \" + signal.lastName + \" \"}</strong> \n <em style= {{ fontSize:\"80%\"}}>{formatShortDateTime(signal.timestamp).concat(details?.timezone)}</em>\n </div>\n <div className={aligns} >{signal.text}\n </div>\n </div>\n )\n })\n }\n </div>\n );\n\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps\n)(Widget);\n","import {\n XYChart,\n ColumnSeries,\n ValueAxis,\n Legend,\n DateAxis,\n XYCursor,\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\nimport {\n DATE_FORMAT,\n TOOLTIP_FORMAT,\n NUMBER_FORMAT,\n signalLabel,\n findTimezone,\n} from \"../common\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport interface Options {\n axisRange?: AxisRange;\n}\n\nexport type TimeSeriesSignal = {\n name: string;\n color: string;\n units: string;\n userPreferences:any;\n values: Array<{ timestamp: Date; value: number }>;\n};\n\nexport default class ClusterBarChart {\n private _chart: XYChart;\n private count = 0 ;\n private timezone:any;\n constructor(ref: HTMLDivElement, series: TimeSeriesSignal[], opts?: Options,state?:any) {\n const chart = amCore.create(ref, XYChart); \n chart.colors.step = 3;\n \n \n \n const xAxis = chart.xAxes.push(new DateAxis());\n xAxis.renderer.cellStartLocation = 0.1\n xAxis.renderer.cellEndLocation = 0.9\n xAxis.renderer.grid.template.location = 0;\n xAxis.cursorTooltipEnabled = false;\n this.timezone=state.timezone;\n const yAxis = chart.yAxes.push(new ValueAxis());\n yAxis.cursorTooltipEnabled = false;\n yAxis.min = opts?.axisRange?.min;\n yAxis.max = opts?.axisRange?.max;\n\n const cursor = (chart.cursor = new XYCursor());\n cursor.lineY.disabled = true;\n cursor.lineX.disabled = true;\n // Show only one tooltip\n // https://www.amcharts.com/docs/v4/concepts/chart-cursor/#Relation_to_series\n cursor.maxTooltipDistance = -1;\n\n chart.legend = new Legend();\n chart.legend.maxWidth = 1000000;\n chart.legend.useDefaultMarker = true;\n // chart.legend.labels.template.truncate = false;\n chart.legend.labels.template.maxWidth = 1000000;\n chart.legend.valueLabels.template.align = \"left\";\n chart.legend.valueLabels.template.textAlign = \"start\";\n chart.legend.contentAlign = \"left\";\n chart.legend.itemContainers.template.paddingTop = 1;\n chart.legend.itemContainers.template.paddingBottom = 1;\n chart.legend.itemContainers.template.tooltipText = \"{name}\";\n\n chart.legend.markers.template.width = 15;\n chart.legend.markers.template.height = 15;\n\n chart.paddingLeft = 0;\n chart.marginLeft = 0;\n chart.marginTop = 12;\n\n chart.dateFormatter.dateFormat = DATE_FORMAT;\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n \n this._chart = chart;\n \n series.forEach(this.addSeries);\n }\n \n addSeries = (dataSeries: TimeSeriesSignal) => {\n\n const series = new ColumnSeries();\n \n series.dataFields = {\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n series.fill = dataSeries.color ? amCore.color(dataSeries.color) : amCore.color(appConfigs.colorCodes.colorCodesLineChart[this.count]);\n\n series.data = dataSeries.values; \n series.strokeWidth = 4; \n series.paddingRight = 2;\n series.name = signalLabel(dataSeries,dataSeries.userPreferences);\n var tooltipDetails:any;\n if(dataSeries && dataSeries.values.length>0){\n tooltipDetails=findTimezone(this.timezone);\n }\n series.tooltipText = \"{dateX}\"+\" \"+tooltipDetails?.timezone+\"\\n{name}: {valueY}\";\n\n this._chart.series.push(series);\n\n this.count++;\n };\n\n destroy() {\n this._chart?.dispose();\n }\n}\n","import React, { useRef, useLayoutEffect } from \"react\";\nimport ClusterBarChart, { Options } from \"./ClusterBarChart\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { inputSignalMapper } from \"../common\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\n\nconst createSignalSeries = inputSignalMapper((meta, data, userPreferences) => ({\n ...meta,\n values: data,\n userPreferences\n}));\n\ninterface Props extends CommonWidgetProps {\n signalRData?: any;\n settings?: Options;\n errorCode?: string;\n}\n\nexport const Widget: React.FC<Props> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const chartRef = useRef<ClusterBarChart>();\n\n const { template, data, settings, signals,state } = props;\n\n let clusterData = createSignalSeries(signals, template, data,state.temperature.value);\n\n /* updating clusterData with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n clusterData = clusterData.map((signal: any) => {\n if (props.signalRData.data.hasOwnProperty(signal.id)) {\n props.signalRData.data[signal.id].forEach((signalData:any, index: number) => {\n signal.values.push({\n value: signalData.value,\n timestamp: new Date(signalData.bt - signalData.time)\n })\n });\n }\n return signal\n })\n }\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new ClusterBarChart(\n node,\n clusterData,\n settings,\n state\n );\n return () => chartRef.current?.destroy();\n }\n }, [node, template, settings, signals, data, clusterData]);\n\n return <div style={{ height: \"100%\" }} ref={setNode} />;\n};\n\n\n// export default Widget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(Widget);\n","import React from \"react\";\nimport { Form, Row, Col, InputNumber, Card } from \"antd\";\n\nimport { Config } from \"./index\";\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport \"./ClusterBarChartEditForm.css\";\n\nfunction sanitizeInputs(values: Config): Config {\n return {\n title: values.title,\n settings: values.settings,\n type: \"clusterbar\",\n signals: values.signals.filter((v) => !!v),\n };\n}\n\nconst axisRangePath = (end: string) => [\"settings\", \"axisRange\", end];\n\nexport const EditForm: React.FC<EditFormProps> = (props) => (\n <div className=\"bar-chart-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Cluster Widget Settings\">\n <Row>\n <WidgetTitleFormField />\n </Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={10}>\n <Form.Item\n name={axisRangePath(\"min\")}\n label=\"Axis Min\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10} push=\"right\">\n <Form.Item\n name={axisRangePath(\"max\")}\n label=\"Axis Max\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n <SignalSelectorList max={6} signals={props.template.signals} rules= {[]} isColor={\"color\"} />\n </Card>\n </Form>\n </div>\n);\n","import React from \"react\";\nimport { Form, Card } from \"antd\";\nimport { Signal } from \"../../models\";\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n SignalSelectorList,\n } from \"../../WidgetEditForm\";\n import { Config } from \".\";\n\n function sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"command\",\n };\n }\n\n const EditForm: React.FC<EditFormProps> = (props) => {\n const commandSignals: Signal[] = [];\n const orgCmdPgnSpns: string = props.assetDetails.orgCmdPgnSpns; \n props.template.signalCollections.map((collection)=>{\n if((collection.type) && (collection.type === \"Command\"))\n {\n collection.signals.map((signal)=>{\n commandSignals.push(signal)\n });\n }\n });\n\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Command Widget Settings\">\n <WidgetTitleFormField />\n <SignalSelectorList max={10} signals={commandSignals} orgCmdPgnSpns={orgCmdPgnSpns} rules= {[]} />\n </Card>\n </Form>\n </div>\n );\n };\n \n export default EditForm;\n ","import { DataStore, DbLayoutConfig, RemoteControl } from \"./state\";\nimport { AxisRange } from \"./widgets/models\";\nimport { LineOptions } from \"./widgets/LineChart\";\nimport { TrackerOptions } from \"./widgets/TrackerWidget\";\nimport { GaugeOptions } from \"./widgets/GaugeWidget\";\nimport { BarOptions } from \"./widgets/BarChart\";\nimport { ClusterBarOptions } from \"./widgets/ClusterBar\";\n\nexport type SignalId = string;\ntype widgetId = string;\nexport type SignalCollectionId = string;\ntype SignalValue = number;\n\nexport interface WidgetSignalId {\n id: string,\n color: string\n}\n\nexport interface Rule {\n signalId: SignalId;\n criticalHigh?: number;\n warningHigh?: number;\n infoHigh?: number;\n infoLow?: number;\n warningLow?: number;\n criticalLow?: number;\n}\n\nexport interface SignalCollection {\n id: SignalCollectionId;\n name: string;\n type: string | null;\n signals: Signal[];\n}\n\nexport interface Signal {\n format: string;\n id: SignalId;\n name: string;\n color: string;\n units: string;\n pgn: string;\n}\n\nexport interface WidgetFilterSetting {\n aggregate: string;\n granularity: string;\n}\n\n\nexport interface CommonWidgetConfig extends LineWidgetConfig{\n title: string;\n signals: WidgetSignalId[];\n}\n\nexport interface LineWidgetConfig {\n rightYAxisSignals?:WidgetSignalId[];\n timescaleAPIZooming?: Function;\n widgetFilterSetting?: WidgetFilterSetting;\n}\n\nexport interface CommonWidgetProps {\n signals: WidgetSignalId[];\n data: DataStore;\n template: Template; \n signalRData?: any; \n state:any;\n informationValue?:string;\n}\nexport interface InformationWidgetProps {\n template: Template; \n}\nexport interface LineWidgetProps{\n rightYAxisSignals?:WidgetSignalId[];\n rightYAxisData: DataStore;\n timescaleAPIZooming?: Function;\n widgetFilterSetting?: WidgetFilterSetting;\n}\n\nexport interface SignalDatapoint {\n timestamp: Date;\n value: SignalValue;\n}\n\nexport interface AlertSignalDatapointData {\n timestamp: Date;\n value: SignalValue;\n severity?: string;\n ruleName?: string;\n}\n\nexport interface Dashboard {\n dashboardId: number,\n title: string,\n bgimageurl: string,\n isNewDashboard:boolean,\n isdefaultDashboard: boolean,\n widgets: DBWidgetConfig[];\n}\n\nexport interface TextMessage {\n signalId: string,\n firstName: string,\n lastName: string,\n type: string, \n text: string,\n timestamp: Date\n}\n\nexport interface C2DWlist{\n whitelistMessages: string\n}\n\nexport interface Asset {\n id: string;\n name: string; \n gatewayId: string,\n mastertag: string;\n orgId: string;\n template: {\n signalCollections: SignalCollection[];\n rules: Rule[];\n };\n datapoints: any,\n templateId: string;\n templateName: string;\n orgName: string;\n orgPathId: string;\n //widgets: DBWidgetConfig[];\n alertDm1Count: number;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n mac: string;\n dashboards: Dashboard[];\n userRole: string; \n isRead: boolean;\n isUpdate: boolean; \n operatorId: string;\n operatorIdValue: string;\n accessCardValue: string;\n operatorsHistoryId: string;\n connectionStatus: string;\n remoteControl: RemoteControl[];\n orgCmdPgnSpns: string;\n c2dMessages: TextMessage[];\n c2dWhitelist: C2DWlist[];\n resetTimestamp: string;\n resetlocationLatitude: number;\n resetlocationLongitude: number;\n blockedassetOrgId: string;\n assetDownDesc:string;\n}\n\nexport interface EventSignals {\n _id: string;\n name: string;\n value: number;\n uom: string;\n severity?: string;\n}\n\nexport interface EventData {\n signalCollectionID: SignalCollectionId;\n orgID: string;\n createdAt: string;\n timestamp: string;\n signals: EventSignals[];\n}\n\nexport interface WidGetSignalConfig {\n name: string;\n color: string;\n datapointId: SignalCollectionId;\n signalId: SignalId;\n}\n\nexport interface DBWidgetConfig {\n _id: widgetId;\n type: string;\n signals: WidGetSignalConfig[];\n sizeX?: number;\n sizeY?: number;\n row?: number;\n col?: number;\n title: string;\n settings?: LineOptions | BarOptions | GaugeOptions | TrackerOptions | ClusterBarOptions;\n rightYAxisSignals?: any[];\n informationValue?:string;\n}\n\nexport interface PermissionProps {\n userRole: string;\n isCreate?: boolean;\n isRead?: boolean;\n isUpdate?: boolean;\n isDelete?: boolean;\n isAssetUpdate?: boolean;\n isTemplatesRead?: boolean;\n isOprRead?: boolean;\n isOprUpdate?:boolean;\n\n}\n\nexport interface LineWidgetSignalsConfigs {\n collectionId: string;\n signalId: string;\n agg: string;\n axis: string; \n units: string; \n}\n\nexport class Template {\n constructor(\n public readonly signalCollections: SignalCollection[],\n public readonly rules: Rule[]\n ) {}\n\n get signals(): Signal[] {\n const signals = this.signalCollections.map((sc) => sc.signals);\n return signals.reduce((result, signals) => result.concat(signals), []);\n }\n}\nexport interface Information{\n name: string\n}\nexport interface InformationWidgetConfig{\n title: string;\n informationValue:string;\n}\n","import { Layout } from \"react-grid-layout\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { AssetDashboardResponse } from \"./api\";\nimport { AlertSignalDatapointData, C2DWlist, DBWidgetConfig, Dashboard, LineWidgetConfig, SignalDatapoint, SignalId, Template, TextMessage } from \"./models\";\nimport { WidgetFilterConfig } from \"./WidgetFilterForm\";\nimport { WidgetConfig } from \"./widgets\";\n\nexport type DataStore = Map<SignalId, SignalDatapoint[] | AlertSignalDatapointData[]>;\n\nexport interface State {\n loaded: true;\n dashboards: DashboardState[];\n //widgets: WidgetState[];\n template: Template;\n layout: Layout[];\n columns: number;\n asset: {\n orgPathId: string;\n name: string;\n id: string;\n mastertag: string;\n gatewayId: string;\n datapoints: any;\n templateId: string;\n templateName: string;\n alertDm1Count: number;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n mac: string;\n orgId: string;\n orgName: string;\n operatorId: string;\n operatorIdValue: string;\n accessCardValue: string;\n operatorsHistoryId: string;\n connectionStatus: string;\n contractEndDate?: string;\n remoteControl: RemoteControl[];\n orgCmdPgnSpns: string;\n c2dMessages: TextMessage[];\n c2dWhitelist: C2DWlist[];\n resetTimestamp: string;\n resetlocationLatitude: number;\n resetlocationLongitude: number;\n blockedassetOrgId: string;\n assetDownDesc:string;\n };\n activeDashboard: string;\n temperature: {\n value: string;\n checked: boolean;\n };\n timezone: {\n value: string;\n //checked: boolean;\n isGpsSignalAvailable: boolean;\n gpsSignalColId: string[];\n coordinates: {\n latitude: any;\n longitude: any;\n }\n };\n}\ninterface UpdateLayout {\n type: \"update-layout\";\n dashboardId: number;\n columns: number;\n}\n\ninterface SaveLayout {\n type: \"save-layout\";\n layout: Layout[];\n}\n\ninterface SaveLayoutSuccess {\n type: \"save-layout-success\";\n dashboardId: number;\n layout: Layout[];\n}\n\ninterface DeleteWidget {\n type: \"delete-widget\";\n dashboardId: number;\n id: WidgetState[\"id\"];\n}\n\ninterface AddWidget {\n type: \"add-widget\";\n dashboardId: number;\n id: string;\n widget: DBWidgetConfig;\n}\n\ninterface UpdateWidget {\n type: \"update-widget\";\n dashboardId: number;\n id: WidgetState[\"id\"];\n config: DBWidgetConfig;\n}\n\ninterface UpdateWidgetFilter {\n type: \"update-filter\";\n dashboardId: number;\n id: WidgetState[\"id\"];\n config: WidgetFilterConfig;\n}\n\ninterface AssetPreferences {\n type: \"asset-preferences\";\n filterPreferences: any;\n}\n\ninterface UpdateC2DMessages {\n type: \"c2d-messages\";\n c2dMessages: any;\n}\n\ninterface GPSCoordinates {\n type: \"gps-coordinates\";\n coordinates: any;\n}\n\ninterface ClearWidgetFilter {\n type: \"clear-filter\";\n dashboardId: number;\n id: WidgetState[\"id\"];\n}\n\nexport interface RemoteControl {\n commandId: string,\n gatewayId: string,\n responseInfo: any,\n}\n\ninterface CommandStatus {\n type: \"command-status\";\n commandId: string;\n gatewayId: string;\n responseInfo: any;\n}\n\nexport interface DbLayoutConfig {\n sizeX?: number;\n sizeY?: number;\n row?: number;\n col?: number;\n}\n\nexport interface LoadWidgetsOnTabClick {\n type: 'load-widgets-on-tab-click',\n dashboardId: number,\n columns: number,\n widgets: DBWidgetConfig[]\n}\n\nexport interface DashboardState {\n dashboardId: number,\n title: string,\n bgimageurl:string,\n isdefaultDashboard: boolean,\n isNewDashboard: boolean,\n widgets: WidgetState[]\n}\n\nexport interface AddDashboard {\n type: 'add-dashboard'\n dashboardId: number,\n title: string,\n bgimageurl: string,\n isdefaultDashboard: boolean\n}\n\nexport interface DeleteDashboard {\n type: 'delete-dashboard'\n dashboardId: number\n}\n\nexport interface ActivateDashboard {\n type: 'activate-dashboard'\n dashboardId: number\n}\n\nexport interface UpdateDashboardTitle {\n type: 'update-dashboard-title',\n dashboardId: number,\n title: string\n}\n\n\nexport type DbLayout = DbLayoutConfig & { _id: string };\n\nexport type WidgetState = WidgetConfig & {\n id: string;\n} & DbLayoutConfig &\n WidgetFilterConfig & LineWidgetConfig;\n\nexport type Action =\n | UpdateLayout\n | SaveLayout\n | DeleteWidget\n | AddWidget\n | UpdateWidget\n | SaveLayoutSuccess\n | UpdateWidgetFilter\n | ClearWidgetFilter\n | LoadWidgetsOnTabClick\n | AddDashboard\n | DeleteDashboard\n | ActivateDashboard\n | AssetPreferences\n | GPSCoordinates\n | UpdateDashboardTitle\n | UpdateC2DMessages\n | CommandStatus;\n\n\nexport function bindActions(dispatch: (action: Action) => void) {\n return {\n updateLayout: (columns: number, dashboardId: number) =>\n dispatch({ type: \"update-layout\", dashboardId, columns }),\n assetPreferences: (filterPreferences: any) =>\n dispatch({ type: \"asset-preferences\", filterPreferences }),\n c2dMessages: (c2dMessages: any) =>\n dispatch({ type: \"c2d-messages\", c2dMessages }),\n gpsCoordinates: (coordinates: any) =>\n dispatch({ type: \"gps-coordinates\", coordinates }),\n saveLayout: (layout: Layout[]) => dispatch({ type: \"save-layout\", layout }),\n saveLayoutSuccess: (dashboardId: number, layout: Layout[]) =>\n dispatch({ type: \"save-layout-success\", dashboardId, layout }),\n deleteWidget: (dashboardId: number, id: string) => dispatch({ type: \"delete-widget\", dashboardId, id }),\n addWidget: (dashboardId: number, id: string, widget: DBWidgetConfig) =>\n dispatch({ type: \"add-widget\", dashboardId, id, widget }),\n updateWidget: (dashboardId: number, id: WidgetState[\"id\"], config: DBWidgetConfig) =>\n dispatch({ type: \"update-widget\", dashboardId, id, config }),\n updateWidgetFilter: (dashboardId: number, id: WidgetState[\"id\"], config: WidgetFilterConfig) =>\n dispatch({ type: \"update-filter\", dashboardId, id, config }),\n clearWidgetFilter: (dashboardId: number, id: WidgetState[\"id\"]) =>\n dispatch({ type: \"clear-filter\", dashboardId, id }),\n loadWidgetsOnTabClick: (dashboardId: number, columns: number, widgets: DBWidgetConfig[],) =>\n dispatch({ type: \"load-widgets-on-tab-click\", dashboardId, columns, widgets }),\n addDashboard: (dashboardId: number, title: string, bgimageurl:string, isdefaultDashboard: boolean) => dispatch({ type: \"add-dashboard\", dashboardId, title, bgimageurl, isdefaultDashboard }),\n deleteDashboard: (dashboardId: number) => dispatch({ type: \"delete-dashboard\", dashboardId }),\n activateDashboard: (dashboardId: number) => dispatch({ type: 'activate-dashboard', dashboardId }),\n updateDashboardTitle: (dashboardId: number, title: string) => dispatch({ type: \"update-dashboard-title\", dashboardId, title }),\n commandStatus: (gatewayId: string, commandId: string, responseInfo: any) => dispatch({ type: \"command-status\", gatewayId, commandId, responseInfo }),\n };\n}\n///If column lenegth is 4, then widgets has to be displayed\n// how ever it is coming from DB\nexport function computeLayout(\n widgets: WidgetState[],\n columns: number\n): Layout[] {\n //console.log(\"computeLayout state.ts:\",columns)\n if(columns < 4){\n return widgets.map((w, i) => ({\n i: w.id,\n x: i % 1,\n y: Math.floor(i / 1),\n h: 1,\n w: columns,\n }));\n } else {\n const layout = widgets.map((w) => {\n return {\n i: w.id,\n x: w.col === undefined ? 1 : w.col,\n y: w.row === undefined ? 1 : w.row,\n w: w.sizeX || 1,\n h: w.sizeY || 1,\n };\n });\n\n return layout;\n }\n}\n\nexport function initState(\n data: AssetDashboardResponse,\n columns: number,\n userAssetPreferences?: any,\n coordinates?: any\n\n //context: any,\n //dashboardId: number\n): State {\n let widgets: DBWidgetConfig[] = [];\n let widgs: WidgetState[] = [];\n let layout: Layout[] = [];\n const { asset } = data;\n const { template, dashboards } = asset;\n if ((!asset.remoteControl) || (asset.remoteControl && asset.remoteControl.length === 0)) {\n asset.remoteControl = [];\n }\n\n if (!asset.orgCmdPgnSpns) {\n asset.orgCmdPgnSpns = '-';\n }\n\n\n // const dashboard = asset.tabs.length > 0 && asset.tabs.filter((tab: Tab) => tab.dashboardId === dashboardId);\n // if(dashboard && dashboard.length > 0) {\n // if(dashboard[0] && dashboard[0].widgets && dashboard[0].widgets.length > 0) {\n // widgets = dashboard[0].widgets;\n // }\n // }\n\n // We are using a unique widget id so that React can tell the difference\n // between widgets even as we create/delete them. This prevents a re-render\n // of existing widgets and greatly improves performance. The counter is reset anytime\n // the component is unmounted. It is highly unlikely that this counter will ever\n // wrap-around as we would need to create 18014398509481982 widgets in one instance.\n let widgetIdCounter = Number.MIN_SAFE_INTEGER;\n const initWidget = (w: DBWidgetConfig): WidgetState => {\n return {\n ...w,\n type: w.type as \"boolean\",\n id: w._id,\n signals: w.signals && w.signals.map((s, i) => { return getSignalObject(s, w.type, i) }) || [],\n ...(w.rightYAxisSignals && w.rightYAxisSignals.length > 0 ? {\n rightYAxisSignals:\n w.rightYAxisSignals.map((s, i) => { return getSignalObject(s, w.type, i) })\n } : {})\n };\n };\n\n const initDashboard = (d: Dashboard): DashboardState => {\n widgs = d.widgets && d.widgets.map(initWidget) || [];\n layout = computeLayout(widgs, columns);\n \n return {\n ...d,\n dashboardId: d.dashboardId,\n bgimageurl: d.bgimageurl,\n isdefaultDashboard: d.isdefaultDashboard !== null ? d.isdefaultDashboard : false,\n widgets: widgs\n }\n }\n let isGpsSignalAvailable = false;\n let gpsCollectionId: string[] = [];\n let timezoneCheckedValue = null;\n let preferences = false;\n let temperatureCheckedValue = null;\n JSON.parse(data.asset.datapoints)?.filter((ele: any) => {\n if (ele.type?.toLowerCase() === \"gps\") {\n isGpsSignalAvailable = true;\n gpsCollectionId.push(ele._id);\n }\n });\n if (gpsCollectionId.length <= 0) {\n gpsCollectionId = [];\n }\n var latlong: any = [];\n if (coordinates != undefined) {\n latlong.latitude = coordinates.latitude;\n latlong.longitude = coordinates.longitude;\n }\n if (userAssetPreferences != null && userAssetPreferences != undefined) {\n preferences = userAssetPreferences.assets != undefined ? (userAssetPreferences.assets.temperature == \"°C\" ? true : false) : false;\n temperatureCheckedValue = userAssetPreferences.assets != undefined ? (userAssetPreferences.assets.temperature ? userAssetPreferences.assets.temperature : null) : null;\n timezoneCheckedValue = userAssetPreferences.assets != undefined ? (userAssetPreferences.assets.timezone ? userAssetPreferences.assets.timezone : null) : null;\n }\n let temperature = {\n checked: preferences,\n value: temperatureCheckedValue\n }\n let timezone = {\n value: timezoneCheckedValue,\n isGpsSignalAvailable: isGpsSignalAvailable,\n gpsSignalColId: gpsCollectionId,\n coordinates: latlong\n }\n\n\n return {\n loaded: true,\n asset: { ...asset },\n template: new Template(template.signalCollections, template.rules),\n columns,\n dashboards: dashboards && dashboards.length > 0 && dashboards.map(initDashboard) || [],\n layout: layout,\n activeDashboard: dashboards && dashboards.length > 0 && dashboards[0].dashboardId.toString() || \"0\",\n temperature: temperature,\n timezone: timezone\n };\n\n}\n\nfunction getWidgets(dashboardId: number, dashboards: DashboardState[]): WidgetState[] {\n let widgets: WidgetState[] = [];\n\n const dashboard = dashboards.find((d) => d.dashboardId === dashboardId);\n if (dashboard && dashboard.widgets.length > 0) {\n widgets = dashboard.widgets;\n }\n return widgets;\n}\n\nfunction UpdateAssetPreferences(state: State, action: any): State {\n state.temperature.checked = action.filterPreferences.temperature == \"°C\" ? true : false;\n state.temperature.value = action.filterPreferences.temperature;\n state.timezone.value = action.filterPreferences.timezone;\n return state;\n}\n\nfunction UpdateC2DMessages(state: State, action: any): State {\n state.asset.c2dMessages = action.c2dMessages;\n return state;\n}\n\nfunction UpdateGPSCoordinates(state: State, action: any): State {\n state.timezone.coordinates.latitude = action.coordinates.latitude;\n state.timezone.coordinates.longitude = action.coordinates.longitude;\n return state;\n}\n\nfunction updateLayout(state: State, action: UpdateLayout): State {\n const dashboardArray = state.dashboards.find((dashboard) => dashboard.dashboardId === action.dashboardId)\n let DashboardObj;\n if(dashboardArray){\n DashboardObj =JSON.parse(JSON.stringify(dashboardArray));\n }else{\n DashboardObj=null;\n }\n const widgets = getWidgets(action.dashboardId, state.dashboards);\n let widgetcolumns:number;\n const parentOrgPath = state?.asset?.orgPathId?.includes(\"~\") ? state?.asset?.orgPathId.split('~') : [state?.asset?.orgPathId];\n let parentOrg:any;\n if (parentOrgPath.length > 1) {\n parentOrg=parentOrgPath[1]\n }else{\n parentOrg=parentOrgPath[0]\n }\n if(parentOrg==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d' && DashboardObj?.isNewDashboard){\n widgetcolumns=8;\n }else{\n widgetcolumns=4;\n }\n const layout = computeLayout(widgets, widgetcolumns);\n\n return {\n ...state,\n columns: action.columns,\n layout: layout\n };\n}\n\nfunction deleteWidget(state: State, action: DeleteWidget): State {\n const widgets = getWidgets(action.dashboardId, state.dashboards);\n const newWidgets = widgets.filter((w) => w.id !== action.id);\n\n return {\n ...state,\n dashboards: state.dashboards.map((d: DashboardState) => {\n if (d.dashboardId === action.dashboardId) {\n return { ...d, widgets: newWidgets }\n } else {\n return d;\n }\n }),\n //widgets: widgets,\n layout: computeLayout(newWidgets, state.columns),\n };\n}\n\nfunction addWidget(state: State, action: AddWidget): State {\n //console.log(\"add widget Action\",action);\n const newWidget: WidgetState = {\n ...action.widget,\n signals: action.widget.signals.map((s, i) => { return getSignalObject(s, action.widget.type, i) }),\n type: action.widget.type as \"boolean\",\n id: action.id,\n ...(action.widget.rightYAxisSignals && action.widget.rightYAxisSignals.length > 0 ? {\n rightYAxisSignals:\n action.widget.rightYAxisSignals.map((s, i) => { return getSignalObject(s, action.widget.type, i) })\n } : {})\n };\n\n const newDashboards = state.dashboards.map((d: DashboardState) => {\n if (d.dashboardId === action.dashboardId) {\n return { ...d, widgets: d.widgets.concat(newWidget) }\n } else {\n return d;\n }\n });\n \n const widgets = getWidgets(action.dashboardId, newDashboards);\n return {\n ...state,\n dashboards: newDashboards,\n layout: computeLayout(widgets, state.columns),\n };\n}\n\nfunction updateWidget(state: State, action: UpdateWidget): State {\n const newWidget: WidgetState = {\n ...action.config,\n id: action.id,\n signals: action.config.signals.map((s, i) => { return getSignalObject(s, action.config.type, i) }),\n type: action.config.type as \"boolean\",\n ...(action.config.rightYAxisSignals && action.config.rightYAxisSignals.length > 0 ? {\n rightYAxisSignals:\n action.config.rightYAxisSignals.map((s, i) => { return getSignalObject(s, action.config.type, i) })\n } : {})\n };\n\n\n const newDashboards = state.dashboards.map((d: DashboardState) => {\n if (d.dashboardId === action.dashboardId) {\n return { ...d, widgets: d.widgets.map((w) => (w.id === action.id ? newWidget : w)) }\n } else {\n return d;\n }\n });\n\n return {\n ...state,\n dashboards: newDashboards\n };\n}\n\nfunction updateWidgetLayout(\n dashboards: DashboardState[],\n layout: Layout[],\n dashboardId: number\n): DashboardState[] {\n // console.log(\"updateWidgetLayout\");\n const newDashboards = dashboards.map((d: DashboardState) => {\n if (d.dashboardId === dashboardId) {\n return {\n ...d, widgets: d.widgets.map((wg) => {\n const { w, h, x, y } = layout.filter((l) => l.i === wg.id)[0];\n return {\n ...wg,\n sizeX: w,\n sizeY: h,\n col: x,\n row: y\n }\n })\n }\n } else {\n return d;\n }\n });\n return newDashboards;\n}\n\nfunction updateWidgetFilter(state: State, action: UpdateWidgetFilter): State {\n\n const { startDate, endDate, datapoint, startTime, endTime } = action.config;\n\n const newDashboards = state.dashboards.map((d: DashboardState) => {\n if (d.dashboardId === action.dashboardId) {\n return {\n ...d, widgets: d.widgets.map((w) => (w.id === action.id ?\n {\n ...w,\n startDate,\n startTime,\n endTime,\n endDate,\n datapoint\n } : w))\n }\n } else {\n return d;\n }\n });\n\n\n return {\n ...state,\n dashboards: newDashboards\n };\n}\n\nfunction clearWidgetFilter(state: State, action: ClearWidgetFilter): State {\n const newDashboards = state.dashboards.map((d: DashboardState) => {\n if (d.dashboardId === action.dashboardId) {\n return {\n ...d, widgets: d.widgets.map((w) => (w.id === action.id ?\n {\n ...w,\n startDate: undefined,\n endDate: undefined,\n datapoint: 50,\n } : w))\n }\n } else {\n return d;\n }\n });\n\n return {\n ...state,\n dashboards: newDashboards\n };\n}\n\nfunction getSignalObject(s: any, wtype: string, index: number) {\n if (wtype === \"clusterbar\" || wtype === \"line\" || wtype === \"text\" || wtype === \"bar\" || wtype === \"tracker\") {\n if (s.color === \"#000000\") {\n return { id: s.signalId, color: appConfigs.colorCodes.colorCodesLineChart[index] };\n } else {\n return { id: s.signalId, color: s.color };\n }\n } else if (wtype === \"boolean\" || wtype === \"gauge\" || wtype === \"map events\") {\n if (s.color) {\n if (s.color.includes('$')) {\n return { id: s.signalId, color: s.color };\n } else {\n return { id: s.signalId, color: \"#008000$#FF0000\" };\n }\n } else {\n return { id: s.signalId, color: \"#008000$#FF0000\" };\n }\n } else {\n return s.signalId;\n }\n}\n\n\nfunction loadWidgetsOnTabClick(state: State, action: LoadWidgetsOnTabClick): State {\n const initWidget = (w: DBWidgetConfig): WidgetState => {\n return {\n ...w,\n type: w.type as \"boolean\",\n id: w._id,\n signals: w.signals && w.signals.map((s, i) => { return getSignalObject(s, w.type, i) }) || [],\n ...(w.rightYAxisSignals && w.rightYAxisSignals.length > 0 ? {\n rightYAxisSignals:\n w.rightYAxisSignals.map((s, i) => { return getSignalObject(s, w.type, i) })\n } : {})\n };\n };\n const widgets = action.widgets && action.widgets.length > 0 && action.widgets.map(initWidget) || [];\n return {\n ...state,\n dashboards: state.dashboards.map((d: DashboardState) => {\n if (d.dashboardId === action.dashboardId) {\n return { ...d, widgets: widgets }\n } else {\n return d\n }\n }),\n layout: computeLayout(widgets, action.columns),\n activeDashboard: action.dashboardId.toString()\n }\n}\n\nfunction addDashboard(state: State, action: AddDashboard): State {\n return {\n ...state,\n dashboards: [...state.dashboards, { dashboardId: action.dashboardId, title: action.title, bgimageurl:action.bgimageurl, widgets: [], isdefaultDashboard: action.isdefaultDashboard, isNewDashboard: true }],\n activeDashboard: action.dashboardId.toString()\n }\n}\n\nfunction deleteDashboard(state: State, action: DeleteDashboard): State {\n let activeDashboardId: number = -1;\n let newLayout: Layout[] = [];\n //const deletedDashboardIndex: number = state.dashboards.findIndex(d=>d.dashboardId === action.dashboardId);\n //const activeDashboardIndex = deletedDashboardIndex > -1 ? (deletedDashboardIndex -1) : 0;\n // if(+activeDashboardIndex > 0) {\n // activeDashboardId = state.dashboards[+activeDashboardIndex].dashboardId;\n // } \n\n const remainingDashboards = state.dashboards.filter(d => d.dashboardId !== action.dashboardId);\n if (remainingDashboards.length > 0) {\n activeDashboardId = remainingDashboards[0].dashboardId;\n newLayout = computeLayout(remainingDashboards[0].widgets, state.columns);\n }\n\n return {\n ...state,\n dashboards: remainingDashboards,\n activeDashboard: activeDashboardId.toString(),\n layout: newLayout\n }\n}\n\nfunction activateDashboard(state: State, action: ActivateDashboard): State {\n return {\n ...state,\n activeDashboard: action.dashboardId.toString()\n }\n}\n\n\nfunction updateDashboardTitle(state: State, action: UpdateDashboardTitle): State {\n return {\n ...state,\n dashboards: state.dashboards.map((d: DashboardState) => {\n if (d.dashboardId === action.dashboardId) {\n return { ...d, title: action.title }\n } else {\n return d;\n }\n })\n }\n}\n\nfunction commandStatus(state: State, action: CommandStatus): State {\n if (state.asset.remoteControl && state.asset.remoteControl.length > 0) {\n let dataset: Boolean = false;\n state.asset.remoteControl.map((remoteData: any) => {\n if (remoteData.gatewayId === action.gatewayId && remoteData.commandId === action.commandId && !dataset) {\n remoteData.responseInfo = action.responseInfo\n dataset = true\n }\n });\n if (!dataset) {\n state.asset.remoteControl.push({\n gatewayId: action.gatewayId,\n commandId: action.commandId, responseInfo: action.responseInfo\n });\n }\n }\n else {\n state.asset.remoteControl.push({\n gatewayId: action.gatewayId,\n commandId: action.commandId, responseInfo: action.responseInfo\n });\n }\n return state;\n}\n\nexport function reducer(state: State, action: Action): State {\n switch (action.type) {\n case \"update-layout\":\n return updateLayout(state, action);\n\n case \"save-layout\":\n return {\n ...state,\n layout: action.layout,\n };\n case \"save-layout-success\":\n return {\n ...state,\n dashboards: updateWidgetLayout(state.dashboards, action.layout, action.dashboardId)\n //widgets: updateWidgetLayout(state.widgets, action.layout),\n };\n case \"delete-widget\":\n return deleteWidget(state, action);\n case \"add-widget\":\n return addWidget(state, action);\n case \"update-widget\":\n return updateWidget(state, action);\n case \"update-filter\":\n return updateWidgetFilter(state, action);\n case \"clear-filter\":\n return clearWidgetFilter(state, action);\n case \"load-widgets-on-tab-click\":\n return loadWidgetsOnTabClick(state, action);\n case \"add-dashboard\":\n return addDashboard(state, action);\n case \"delete-dashboard\":\n return deleteDashboard(state, action);\n case \"activate-dashboard\":\n return activateDashboard(state, action);\n case \"update-dashboard-title\":\n return updateDashboardTitle(state, action);\n case \"command-status\":\n return commandStatus(state, action);\n case \"asset-preferences\":\n return UpdateAssetPreferences(state, action);\n case \"gps-coordinates\":\n return UpdateGPSCoordinates(state, action);\n case 'c2d-messages' :\n return UpdateC2DMessages(state, action)\n default:\n return state;\n }\n}\n","import { Button, Form, Input, InputNumber, message, Radio, Select, Spin, Switch, Tooltip } from 'antd';\nimport React, { useEffect, useMemo, useReducer, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { hexToString, localizeUtcDate } from \"../../../../utils/commonHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\nimport * as Api from \"../../api\";\nimport \"./CommandWidget.css\";\n\nimport {\n bindActions,\n reducer,\n RemoteControl,\n State\n} from \"../../state\";\n\n\ninterface Prop {\n gatewayId: any,\n signaldata: any,\n state: State,\n signalRData: any, \n context: any\n}\n\n\n\nfunction capitalizeFirstLetter(str: string) {\n if (!str) {\n return str;\n } else {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n \n }\n\nfunction formatNumber(n: number | string | boolean, type: string = ''): string | boolean {\n if (type.includes(\"latitude\") || type.includes(\"longitude\")) {\n return typeof n === \"number\" ? n.toFixed(10) : n;\n } else if (typeof n === \"string\" && (type.includes(\"IQAN Connect Key\") ||\n type.includes(\"text\"))) {\n var msg = hexToString(n);\n //msg = msg.substring(1, msg.length-1);\n if (type.includes(\"text\")) {\n if (msg.length <=9) {\n const lastFrameStartPos = msg.length -9;\n const delimiterPos = msg.indexOf(\"*\", lastFrameStartPos);\n if (delimiterPos >=0) { // only applicable to singleframe, since multi-frame does not have delimiter,\n // therefore, multi-frame delimiterPos = -1\n msg = msg.substring(0, delimiterPos);\n } \n } \n }\n return msg;\n } else {\n return typeof n === \"number\" ? n.toFixed(2) : n;\n }\n }\n \nlet intialReportedData:RemoteControl={commandId:\"\", gatewayId:\"\", responseInfo:{}}\nconst { TextArea } = Input;\nconst CommandControl: React.FC<Prop> = (props) => {\n const [reportedValue, setReportedValue] = useState(intialReportedData);\n const [loading, isLoading] = useState(false);\n const [form]=Form.useForm();\n const [state,dispatch] = useReducer(\n reducer,\n props.state\n );\n const disptachMethods = useMemo(() => bindActions(dispatch), [dispatch]);\n const [fakeTest, setFakeTest] = React.useState(0);\n const onChangeFakeTest = (e:any) => {\n setFakeTest(e.target.value);\n };\n const orgCmdPgnSpns = state.asset.orgCmdPgnSpns;\n\n const msgsList = props.state.asset.c2dWhitelist;\n \n const [textAreaValue, setTextAreaValue] = useState('');\n\n const [selectedOption, setSelectedOption] = useState('');\n\n function handleTextAreaChange(event:any) {\n setTextAreaValue(event.target.value);\n }\n\n function handleOptionChange(value:any) {\n setSelectedOption(value.slice(1,-1));\n setTextAreaValue(value.slice(1,-1));\n }\n\n function handleButtonClick() {\n form.setFieldsValue({\n [props.signaldata.label]: selectedOption\n });\n setTextAreaValue('');\n }\n\n useEffect(() => {\n if (Object.keys(props.signalRData.data).length > 0) { \n Api.getCommandResponseSignalIds(state.asset.templateId, props.signaldata._id)\n .then((resp: any) => {\n if ( resp?.data?.data?.respSignals?.length > 0) {\n reportedValue.responseInfo.id = resp.data.data.respSignals[0].responseSignalId;\n reportedValue.responseInfo.name = resp.data.data.respSignals[0].responseSignalName;\n \n if (props.signalRData.data.hasOwnProperty(props.signaldata._id)){\n reportedValue.responseInfo.reportedPayload = props.signalRData.data[reportedValue.responseInfo.id][0].value\n reportedValue.responseInfo.reportedTime = new Date(props.signalRData.data[reportedValue.responseInfo.id][0].bt - \n props.signalRData.data[reportedValue.responseInfo.id][0].time)\n } else {\n Api.getCommandStatus(props.gatewayId,props.signaldata._id)\n .then((data:any) => {\n \n disptachMethods.commandStatus(props.gatewayId,props.signaldata._id,data.data);\n setReportedValue(state.asset.remoteControl.filter((data:any)=> data.gatewayId===props.gatewayId && data.commandId===props.signaldata._id)[0])\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error.response.data.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n }\n } \n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n \n } else { \n \n Api.getCommandStatus(props.gatewayId,props.signaldata._id)\n .then((data:any) => {\n disptachMethods.commandStatus(props.gatewayId,props.signaldata._id,data.data);\n setReportedValue(state.asset.remoteControl.filter((data:any)=> data.gatewayId===props.gatewayId && data.commandId===props.signaldata._id)[0])\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n \n }\n }, [props,reportedValue]);\n\n const onFinish = (values: any) => {\n isLoading(true);\n if(props.signaldata.format === 'boolean' && values[props.signaldata.label] === undefined ){\n values[props.signaldata.label]=false;\n }\n if(values[props.signaldata.label] === false && props.signaldata.format === 'boolean' )\n {\n values[props.signaldata.label] = \"0\";\n }\n if(values[props.signaldata.label] === true && props.signaldata.format === 'boolean' )\n {\n values[props.signaldata.label] = \"1\";\n }\n const testMode = appConfigs.app.enableCommandSignalFakeTesting?(fakeTest || 0):0\n Api.invokeCommand(props.gatewayId,props.signaldata._id,values[props.signaldata.label],testMode)\n .then((data:any) => {\n message.success(\"Request message sent to gateway successfully\");\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Gateway failed to receive the request message\")\n });\n isLoading(false);\n };\n\n let respValue = reportedValue?.responseInfo?.requestId === null ? null: ( (props.signaldata.format === 'boolean') ?\n reportedValue.responseInfo.reportedPayload === 0 ?'OFF' :'ON'\n : formatNumber(reportedValue.responseInfo.reportedPayload , props.signaldata.format));\n\n let respTimeUtc = reportedValue?.responseInfo?.reportedTime;\n let dateFormatOptions = {\n year: 'numeric', \n month: '2-digit', \n day: 'numeric', \n hour: \"2-digit\", \n minute: \"2-digit\", \n second: \"2-digit\" , \n hour12: true\n };\n let respTimeLocal = respTimeUtc === null? null: localizeUtcDate(respTimeUtc, dateFormatOptions);\n let allowedSingleFrameUsersDev = [\n '6eb1fbc0-0ffe-11eb-b4af-c7f0a7c1b411','70c429b0-91a7-11e8-af90-51d20134150b',\n '152bd120-309b-11ec-bc2d-bb7291a0ceba','e704a550-4e6b-11ea-8fc9-5f6f1264b2c7',\n 'cad29b40-1d5f-11ea-abaa-a34583f0c422','96d03480-0431-11ee-9567-dfd4928f58e8',\n '7cb0a1a0-542f-11ed-b7bb-f305eb77c106','13131860-537d-11ee-a2ea-233ac79fb151',\n 'ce3bb3a0-9619-11eb-87b2-239c76a096d7','054dda40-59ab-11eb-8ee0-bfaf65ef3261',\n '521a6300-67b3-11eb-a256-dba62bf2eb52' \n ];\n let allowedSingleFrameUsersStag = [\n 'a5c3cb80-2b37-11eb-ada0-d3b3466952a6','70c429b0-91a7-11e8-af90-51d20134150b',\n '8279a1a0-62fd-11ec-8f8f-53c130199102','e95b17a0-07ce-11ea-8c1e-29af9f5c9993',\n '9bb0b810-1d5f-11ea-b10c-611371d47cc6','ef77ae80-3819-11ee-b6e7-875b48ebb37d',\n '94a456c0-3819-11ee-a7c5-8b26a0381d3f','dba0aa40-5e6c-11ea-8269-67263d3b9573',\n 'fee680c0-9619-11eb-9d03-1f19554fcd07','3bf339c0-599f-11eb-b6ef-0754ed297eb6'\n ];\n let allowedSingleFrameUsersProd = [\n '25c1ec40-2bab-11eb-9f2e-2fc8ff0a0080','70c429b0-91a7-11e8-af90-51d20134150b',\n '8a209140-d985-11eb-87da-f7bca1133f68','e95b17a0-07ce-11ea-8c1e-29af9f5c9993',\n '9bb0b810-1d5f-11ea-b10c-611371d47cc6','910a8d40-08fd-11ee-9e3e-ab5787211252',\n '69bfdee0-6af4-11ed-b1c9-df04de49673c', 'dba0aa40-5e6c-11ea-8269-67263d3b9573',\n 'f0e97000-2f9f-11ee-a86c-135fbbccefd5', '1e9aa720-961a-11eb-bc08-ff40daac93b5',\n 'fe97d7c0-2bae-11eb-b7a8-aba558bbe8c6'\n ];\n \n return(\n <>\n \n {orgCmdPgnSpns.includes((props.signaldata.pgn === null? '0' : props.signaldata.pgn) + '-' + \n (props.signaldata.spn === null? '0' : props.signaldata.spn)) \n &&\n <div className=\"rowdiv\">\n <Form form = {form} name={ props.signaldata.label } layout=\"inline\" onFinish={ onFinish }>\n <Form.Item name=\"commandId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n {\n (props.signaldata.format === 'integer' || props.signaldata.format === 'float') &&\n <Form.Item label={ props.signaldata.label } name = { props.signaldata.label } \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { min: parseInt(props.signaldata.min), type:\"number\", message: 'Minimum value allowed '+props.signaldata.min+'.' },\n { max: parseInt(props.signaldata.max), type:\"number\", message: 'Maximum value allowed '+props.signaldata.max+'.' },\n ]}>\n <InputNumber style={{width:100}} /> \n </Form.Item>\n }\n {\n (props.signaldata.format === 'hex') &&\n <Form.Item label={ props.signaldata.label } name = { props.signaldata.label } \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { min: parseInt(props.signaldata.min), type:\"hex\", message: 'Minimum value allowed '+parseInt(props.signaldata.min).toString(16)+'.' },\n { max: parseInt(props.signaldata.max), type:\"hex\", message: 'Maximum value allowed '+parseInt(props.signaldata.max).toString(16)+'.' },\n ]}>\n <InputNumber style={{width:100}} /> \n </Form.Item>\n }\n {\n (props.signaldata.format === 'integer' || props.signaldata.format === 'float' || props.signaldata.format === 'hex') &&\n <Form.Item>\n <div> { props.signaldata.unit } </div> \n </Form.Item>\n }\n {\n (props.signaldata.format === 'boolean') &&\n <Form.Item name={ props.signaldata.label } label={ props.signaldata.label } valuePropName=\"checked\">\n <Switch />\n </Form.Item>\n }\n\n {\n (props.signaldata.format === 'text') &&\n <Form.Item label={ props.signaldata.label} name = { props.signaldata.label }\n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { min: parseInt(props.signaldata.min), message: 'Minimum length of the message is '+props.signaldata.min+'.' },\n { max: parseInt(props.signaldata.max), message: 'Maximum length of the message is '+props.signaldata.max+'.' },\n ]} >\n \n <Input.TextArea style={{ width: 300 }} rows={5} value={textAreaValue} onChange={handleTextAreaChange} /> \n </Form.Item>\n }\n {\n (props.signaldata.format === 'text') &&\n // appConfigs.app.enableCommandSignalFakeTesting && // temporarily enable single-frame for dev and stage for testing\n // props.context.appContext.orgId === 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n // (allowedSingleFrameUsersDev.includes(props.context.appContext.userId) ||\n // allowedSingleFrameUsersStag.includes(props.context.appContext.userId) ||\n // allowedSingleFrameUsersProd.includes(props.context.appContext.userId) ) &&\n <Form.Item label=\"Message list\">\n <Select style={{ width: 300 }} onChange={handleOptionChange}>\n {msgsList.map((option, index) => (\n <Select.Option key={index} value={JSON.stringify(option)}>\n {option}\n </Select.Option>\n ))}\n </Select>\n <Button onClick={handleButtonClick}>Add message</Button>\n </Form.Item>\n }\n\n { appConfigs.app.enableCommandSignalFakeTesting &&\n props.context.appContext.orgId == \"c6adcb40-be92-11e6-9ed6-a5bc9cb5279b\" && // enable faketesting only for Parker org\n <Form.Item label='Test Mode:'>\n <div className=\"TestMode\">\n <Radio.Group onChange={onChangeFakeTest} value={setFakeTest}>\n <Radio value={1}>Success Test</Radio>\n <Radio value={2}>Fail Test</Radio>\n <Radio value={0}>Real Test</Radio>\n </Radio.Group>\n </div>\n </Form.Item>\n }\n <Form.Item>\n <Spin size=\"small\" spinning={loading} />\n {props.state.asset.connectionStatus !== \"ONLINE\" ?\n <Tooltip placement=\"bottomRight\" title=\"Gateway Offline\">\n <Button type=\"primary\" htmlType=\"submit\" disabled={true}>Send</Button>\n </Tooltip>\n :\n <Button type=\"primary\" htmlType=\"submit\" >Send</Button>\n }\n </Form.Item>\n </Form>\n </div>\n }\n\n { reportedValue && reportedValue.responseInfo && reportedValue.commandId!==null && reportedValue.commandId!==\"\"&&\n orgCmdPgnSpns.includes(props.signaldata.pgn + '-' + props.signaldata.spn) &&\n <div className=\"responserowdiv\">\n <Form layout=\"inline\">\n { reportedValue && reportedValue.responseInfo && reportedValue.commandId!==null && reportedValue.commandId!==\"\"&&\n <Form.Item label= \"Reported Value:\" >\n <Tooltip placement=\"bottomRight\" title={respTimeLocal}>\n <div> \n <strong>{(respValue === null || respTimeLocal === null) ? \"\" : respValue} </strong>\n <em style= {{color: \"blue\", fontSize: \"70%\" }} >\n { (respValue === null || respTimeLocal === null ) ? \"\" : \" as of \" + respTimeLocal\n }\n </em>\n </div>\n </Tooltip>\n \n </Form.Item>\n }\n\n </Form>\n </div>\n }\n </>\n \n ) \n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n signalRData: state.contextReducer.signalRData \n };\n };\n\nexport default connect(\n mapStateToProps,\n // actions\n )(CommandControl);","import React from \"react\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { State } from \"./../../state\";\nimport CommandControl from \"./CommandControl\";\n\nconst getCommandWidgetSignals = (signals:any, state: any) => {\n const commandSignals:any[] =[];\n if(signals.length > 0){\n signals.map((signal:any) => {\n if(JSON.parse(state.asset.datapoints).length > 0){\n JSON.parse(state.asset.datapoints).map((collection:any) => {\n if(collection.type && collection.type === \"Command\" ){\n collection.values.map((value:any) => {\n if(value._id == signal){\n commandSignals.push(value);\n }\n })\n }\n })\n }\n })\n }\n return commandSignals;\n}\n\ninterface CommandWidgettProps extends CommonWidgetProps{\n state: State; \n}\n\nconst Widget: React.FC<CommandWidgettProps> = (props) => {\n const { template, data, state } = props; \n let widgetSignals = getCommandWidgetSignals(props.signals, state); \n return (\n <div>\n {\n widgetSignals && widgetSignals.length > 0 && widgetSignals.map((signal:any) => \n <CommandControl gatewayId={state.asset.gatewayId} signaldata = {signal} state = {state}></CommandControl>\n )\n }\n </div>\n );\n};\n\nexport default Widget;\n\n","import { Card, Form } from \"antd\";\nimport React from \"react\";\nimport { Signal } from \"../../models\";\n\nimport { Config } from \".\";\nimport {\n EditFormProps,\n SignalSelectorList,\n WidgetTitleFormField,\n} from \"../../WidgetEditForm\";\n\n function sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"command2\",\n };\n }\n\n const EditForm: React.FC<EditFormProps> = (props) => {\n const commandChatSignals: Signal[] = [];\n const orgCmdPgnSpns: string = props.assetDetails.orgCmdPgnSpns; \n // props.template.signalCollections.map((collection)=>{\n // if((collection.type) && (collection.type === \"Command\"))\n // {\n // collection.signals.map((signal)=>{\n // commandChatSignals.push(signal)\n // });\n // }\n // });\n props.template.signalCollections.map((collection)=>{\n if(collection.type && collection.type === \"none\" || collection.type && collection.type === \"Command\" ){\n collection.signals.filter((signal)=>(signal.format===\"text\" && \n (collection.type != \"Command\" || \n collection.type === \"Command\" && orgCmdPgnSpns.indexOf(\"65305\")!==-1))) // this org is supporting command\n .map((signal)=> {\n commandChatSignals.push(signal)\n })\n }\n });\n\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Command Chat Widget Settings\">\n <WidgetTitleFormField />\n <SignalSelectorList max={10} signals={commandChatSignals} orgCmdPgnSpns={orgCmdPgnSpns} rules= {[]} />\n </Card>\n </Form>\n </div>\n );\n };\n \n export default EditForm;\n ","import { Button, Form, Input, InputNumber, message, Select, Spin, Switch, Tooltip } from 'antd';\nimport React, { useEffect, useMemo, useReducer, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { hexToString, localizeUtcDate } from \"../../../../utils/commonHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\nimport * as Api from \"../../api\";\nimport \"./CommandWidget.css\";\n\nimport { errorResponse } from '../../../../utils/apiHelpers/apiHelpers';\nimport {\n bindActions,\n reducer,\n RemoteControl,\n State\n} from \"../../state\";\n\n\ninterface Prop {\n gatewayId: any,\n signaldata: any,\n state: State,\n signalRData: any,\n context: any,\n refreshState: any,\n refreshChange: any\n}\n\n\n\nfunction capitalizeFirstLetter(str: string) {\n if (!str) {\n return str;\n } else {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n \n }\n\nfunction formatNumber(n: number | string | boolean, type: string = ''): string | boolean {\n if (type.includes(\"latitude\") || type.includes(\"longitude\")) {\n return typeof n === \"number\" ? n.toFixed(10) : n;\n } else if (typeof n === \"string\" && (type.includes(\"IQAN Connect Key\") ||\n type.includes(\"text\"))) {\n var msg = hexToString(n);\n //msg = msg.substring(1, msg.length-1);\n if (type.includes(\"text\")) {\n // if (msg.length <=9) {\n // const lastFrameStartPos = msg.length -9;\n // const delimiterPos = msg.indexOf(\"*\", lastFrameStartPos);\n // if (delimiterPos >=0) { // only applicable to singleframe, since multi-frame does not have delimiter,\n // // therefore, multi-frame delimiterPos = -1\n // msg = msg.substring(0, delimiterPos);\n // } \n // } \n if (msg.charAt(msg.length-1)=='*'){\n msg = msg.replace(msg.substring(msg.length-1), \"\");\n //console.log(msg);\n }\n }\n return msg;\n } else {\n return typeof n === \"number\" ? n.toFixed(2) : n;\n }\n }\n \nlet intialReportedData:RemoteControl={commandId:\"\", gatewayId:\"\", responseInfo:{}}\nconst { TextArea } = Input;\nconst CommandControl: React.FC<Prop> = (props) => {\n const [reportedValue, setReportedValue] = useState(intialReportedData);\n const [loading, isLoading] = useState(false);\n const [form]=Form.useForm();\n const [state,dispatch] = useReducer(\n reducer,\n props.state\n );\n const disptachMethods = useMemo(() => bindActions(dispatch), [dispatch]);\n const [fakeTest, setFakeTest] = React.useState(0);\n const onChangeFakeTest = (e:any) => {\n setFakeTest(e.target.value);\n };\n const orgCmdPgnSpns = state.asset.orgCmdPgnSpns;\n\n const msgsList = props.state.asset.c2dWhitelist;\n \n const [textAreaValue, setTextAreaValue] = useState('');\n\n const [selectedOption, setSelectedOption] = useState('');\n\n function handleTextAreaChange(event:any) {\n setTextAreaValue(event.target.value);\n }\n\n function handleOptionChange(value:any) {\n setSelectedOption(value.slice(1,-1));\n setTextAreaValue(value.slice(1,-1));\n }\n\n function handleButtonClick() {\n form.setFieldsValue({\n [props.signaldata.label]: selectedOption\n });\n setTextAreaValue('');\n }\n\n useEffect(() => {\n if (Object.keys(props.signalRData.data).length > 0) { \n Api.getCommandResponseSignalIds(state.asset.templateId, props.signaldata._id)\n .then((resp: any) => {\n if ( resp?.data?.data?.respSignals?.length > 0) {\n reportedValue.responseInfo.id = resp.data.data.respSignals[0].responseSignalId;\n reportedValue.responseInfo.name = resp.data.data.respSignals[0].responseSignalName;\n \n if (props.signalRData.data.hasOwnProperty(props.signaldata._id)){\n reportedValue.responseInfo.reportedPayload = props.signalRData.data[reportedValue.responseInfo.id][0].value\n reportedValue.responseInfo.reportedTime = new Date(props.signalRData.data[reportedValue.responseInfo.id][0].bt - \n props.signalRData.data[reportedValue.responseInfo.id][0].time)\n } else {\n Api.getCommandStatus(props.gatewayId,props.signaldata._id)\n .then((data:any) => {\n \n disptachMethods.commandStatus(props.gatewayId,props.signaldata._id,data.data);\n setReportedValue(state.asset.remoteControl.filter((data:any)=> data.gatewayId===props.gatewayId && data.commandId===props.signaldata._id)[0])\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error.response.data.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n }\n } \n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n \n } else { \n \n Api.getCommandStatus(props.gatewayId,props.signaldata._id)\n .then((data:any) => {\n disptachMethods.commandStatus(props.gatewayId,props.signaldata._id,data.data);\n setReportedValue(state.asset.remoteControl.filter((data:any)=> data.gatewayId===props.gatewayId && data.commandId===props.signaldata._id)[0])\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n \n }\n }, [props,reportedValue]);\n\n const onFinish = (values: any) => {\n isLoading(true);\n if(props.signaldata.format === 'boolean' && values[props.signaldata.label] === undefined ){\n values[props.signaldata.label]=false;\n }\n if(values[props.signaldata.label] === false && props.signaldata.format === 'boolean' )\n {\n values[props.signaldata.label] = \"0\";\n }\n if(values[props.signaldata.label] === true && props.signaldata.format === 'boolean' )\n {\n values[props.signaldata.label] = \"1\";\n }\n const testMode = appConfigs.app.enableCommandSignalFakeTesting?(fakeTest || 0):0\n Api.invokeCommand(props.gatewayId,props.signaldata._id,values[props.signaldata.label],testMode)\n .then((data:any) => {\n message.success(\"Request message sent to gateway successfully\");\n Api.loadC2DMessageData(props.gatewayId, undefined)\n .then((c2dResp: any) => {\n disptachMethods.c2dMessages(c2dResp);\n setTextAreaValue('');\n form.setFieldsValue({[props.signaldata.label]:''})\n props.refreshChange(!props.refreshState);\n\n \n })\n .catch((err1) => {\n errorResponse(null, err1);\n \n });\n\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Gateway failed to receive the request message\")\n });\n isLoading(false);\n };\n\n let respValue = reportedValue?.responseInfo?.requestId === null ? null: ( (props.signaldata.format === 'boolean') ?\n reportedValue.responseInfo.reportedPayload === 0 ?'OFF' :'ON'\n : formatNumber(reportedValue.responseInfo.reportedPayload , props.signaldata.format));\n\n let respTimeUtc = reportedValue?.responseInfo?.reportedTime;\n let dateFormatOptions = {\n year: 'numeric', \n month: '2-digit', \n day: 'numeric', \n hour: \"2-digit\", \n minute: \"2-digit\", \n second: \"2-digit\" , \n hour12: true\n };\n let respTimeLocal = respTimeUtc === null? null: localizeUtcDate(respTimeUtc, dateFormatOptions);\n let allowedSingleFrameUsersDev = [\n '6eb1fbc0-0ffe-11eb-b4af-c7f0a7c1b411','70c429b0-91a7-11e8-af90-51d20134150b',\n '152bd120-309b-11ec-bc2d-bb7291a0ceba','e704a550-4e6b-11ea-8fc9-5f6f1264b2c7',\n 'cad29b40-1d5f-11ea-abaa-a34583f0c422','96d03480-0431-11ee-9567-dfd4928f58e8',\n '7cb0a1a0-542f-11ed-b7bb-f305eb77c106','13131860-537d-11ee-a2ea-233ac79fb151',\n 'ce3bb3a0-9619-11eb-87b2-239c76a096d7','054dda40-59ab-11eb-8ee0-bfaf65ef3261',\n '521a6300-67b3-11eb-a256-dba62bf2eb52' \n ];\n let allowedSingleFrameUsersStag = [\n 'a5c3cb80-2b37-11eb-ada0-d3b3466952a6','70c429b0-91a7-11e8-af90-51d20134150b',\n '8279a1a0-62fd-11ec-8f8f-53c130199102','e95b17a0-07ce-11ea-8c1e-29af9f5c9993',\n '9bb0b810-1d5f-11ea-b10c-611371d47cc6','ef77ae80-3819-11ee-b6e7-875b48ebb37d',\n '94a456c0-3819-11ee-a7c5-8b26a0381d3f','dba0aa40-5e6c-11ea-8269-67263d3b9573',\n 'fee680c0-9619-11eb-9d03-1f19554fcd07','3bf339c0-599f-11eb-b6ef-0754ed297eb6'\n ];\n let allowedSingleFrameUsersProd = [\n '25c1ec40-2bab-11eb-9f2e-2fc8ff0a0080','70c429b0-91a7-11e8-af90-51d20134150b',\n '8a209140-d985-11eb-87da-f7bca1133f68','e95b17a0-07ce-11ea-8c1e-29af9f5c9993',\n '9bb0b810-1d5f-11ea-b10c-611371d47cc6','910a8d40-08fd-11ee-9e3e-ab5787211252',\n '69bfdee0-6af4-11ed-b1c9-df04de49673c', 'dba0aa40-5e6c-11ea-8269-67263d3b9573',\n 'f0e97000-2f9f-11ee-a86c-135fbbccefd5', '1e9aa720-961a-11eb-bc08-ff40daac93b5',\n 'fe97d7c0-2bae-11eb-b7a8-aba558bbe8c6'\n ];\n \n return(\n <>\n \n {orgCmdPgnSpns.includes((props.signaldata.pgn === null? '0' : props.signaldata.pgn) + '-' + \n (props.signaldata.spn === null? '0' : props.signaldata.spn)) \n &&\n <div className=\"rowdiv\">\n <Form form = {form} name={ props.signaldata.label } layout=\"vertical\" style={{width:\"100%\"}} onFinish={ onFinish }>\n <Form.Item name=\"commandId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n {\n (props.signaldata.format === 'integer' || props.signaldata.format === 'float') &&\n <Form.Item label={ props.signaldata.label } name = { props.signaldata.label } \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { min: parseInt(props.signaldata.min), type:\"number\", message: 'Minimum value allowed '+props.signaldata.min+'.' },\n { max: parseInt(props.signaldata.max), type:\"number\", message: 'Maximum value allowed '+props.signaldata.max+'.' },\n ]}>\n <InputNumber style={{width:100}} /> \n </Form.Item>\n }\n {\n (props.signaldata.format === 'hex') &&\n <Form.Item label={ props.signaldata.label } name = { props.signaldata.label } \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { min: parseInt(props.signaldata.min), type:\"hex\", message: 'Minimum value allowed '+parseInt(props.signaldata.min).toString(16)+'.' },\n { max: parseInt(props.signaldata.max), type:\"hex\", message: 'Maximum value allowed '+parseInt(props.signaldata.max).toString(16)+'.' },\n ]}>\n <InputNumber style={{width:100}} /> \n </Form.Item>\n }\n {\n (props.signaldata.format === 'integer' || props.signaldata.format === 'float' || props.signaldata.format === 'hex') &&\n <Form.Item>\n <div> { props.signaldata.unit } </div> \n </Form.Item>\n }\n {\n (props.signaldata.format === 'boolean') &&\n <Form.Item name={ props.signaldata.label } label={ props.signaldata.label } valuePropName=\"checked\">\n <Switch style={{width:100}} />\n </Form.Item>\n }\n\n {\n (props.signaldata.format === 'text') &&\n // appConfigs.app.enableCommandSignalFakeTesting && // temporarily enable single-frame for dev and stage for testing\n // props.context.appContext.orgId === 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n // (allowedSingleFrameUsersDev.includes(props.context.appContext.userId) ||\n // allowedSingleFrameUsersStag.includes(props.context.appContext.userId) ||\n // allowedSingleFrameUsersProd.includes(props.context.appContext.userId) ) &&\n <Form.Item label=\"Message list\">\n <div className=\"common-container\" >\n <Select \n // style={{width:\"100%\"}}\n style={{flex:\"1\", minWidth:\"200px\"}}\n onChange={handleOptionChange}>\n {msgsList.map((option, index) => (\n <Select.Option key={index} value={JSON.stringify(option)}>\n {option}\n </Select.Option>\n ))}\n </Select>\n <Button\n style={{whiteSpace:\"nowrap\"}}\n // style={{marginTop:'10px'}}\n onClick={handleButtonClick}>Add message</Button>\n </div>\n </Form.Item>\n }\n <div className='c2d-wrapper'>\n{\n (props.signaldata.format === 'text') &&\n <Form.Item className='c2d-container' label={ props.signaldata.label} name = { props.signaldata.label }\n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { min: parseInt(props.signaldata.min), message: 'Minimum length of the message is '+props.signaldata.min+'.' },\n { max: parseInt(props.signaldata.max), message: 'Maximum length of the message is '+props.signaldata.max+'.' },\n ]} >\n \n <Input.TextArea className='c2d-textarea' value={textAreaValue} onChange={handleTextAreaChange} /> \n </Form.Item>\n }\n <Form.Item className='send-button-container'>\n <Spin size=\"small\" spinning={loading} />\n {props.state.asset.connectionStatus !== \"ONLINE\" ?\n <Tooltip placement=\"bottomRight\" title=\"Gateway Offline\">\n <Button className='send-button' type=\"primary\" htmlType=\"submit\" disabled={true}>Send</Button>\n </Tooltip>\n :\n <Button className='send-button' type=\"primary\" htmlType=\"submit\" >Send</Button>\n }\n </Form.Item>\n </div>\n {/* { appConfigs.app.enableCommandSignalFakeTesting &&\n props.context.appContext.orgId == \"c6adcb40-be92-11e6-9ed6-a5bc9cb5279b\" && // enable faketesting only for Parker org\n <Form.Item label='Test Mode:'>\n <div className=\"TestMode\">\n <Radio.Group style={{width:\"100%\"}} onChange={onChangeFakeTest} value={setFakeTest}>\n <Radio style={{marginRight:\"16px\", marginBottom:\"8px\"}} value={1}>Success Test</Radio>\n <Radio style={{marginRight:\"16px\", marginBottom:\"8px\"}} value={2}>Fail Test</Radio>\n <Radio style={{marginRight:\"16px\", marginBottom:\"8px\"}} value={0}>Real Test</Radio>\n </Radio.Group>\n </div>\n </Form.Item>\n } */}\n \n </Form>\n </div>\n }\n\n { reportedValue && reportedValue.responseInfo && reportedValue.commandId!==null && reportedValue.commandId!==\"\"&&\n orgCmdPgnSpns.includes(props.signaldata.pgn + '-' + props.signaldata.spn) &&\n <div className=\"responserowdiv\">\n <Form layout=\"inline\">\n { reportedValue && reportedValue.responseInfo && reportedValue.commandId!==null && reportedValue.commandId!==\"\"&&\n <Form.Item style={{width:'100%'}} label= \"Reported Value:\" >\n <Tooltip placement=\"bottomRight\" title={respTimeLocal}>\n <div> \n <strong>{(respValue === null || respTimeLocal === null) ? \"\" : respValue} </strong>\n <em style= {{color: \"blue\", fontSize: \"70%\" }} >\n { (respValue === null || respTimeLocal === null ) ? \"\" : \" as of \" + respTimeLocal\n }\n </em>\n </div>\n </Tooltip>\n \n </Form.Item>\n }\n\n </Form>\n </div>\n }\n </>\n \n ) \n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n signalRData: state.contextReducer.signalRData \n };\n };\n\nexport default connect(\n mapStateToProps,\n // actions\n )(CommandControl);","import React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { hexToString } from \"../../../../utils/commonHelpers\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { State } from \"../../state\";\nimport { findTimezone, inputSignalMapper } from \"../common\";\nimport CommandControl from \"./CommandControl\";\nimport \"./CommandWidget.css\";\n\nexport type TimeSeriesMessage = {\n signalId: string,\n firstName: string, \n lastName: string,\n type: string, \n timestamp: Date; \n text: string \n}\n\nconst getD2CMessages = (props: CommandWidgettProps) => {\n\n var D2CMessages:TimeSeriesMessage[] = []; //getD2CMessages((signals, state )\n \n const { template, data, signals, signalRData } = props;\n let D2CTextSignalValues = createSignals(signals, template, data);\n \n //if (Object.keys(props.signalRData.data).length > 0) {\n D2CTextSignalValues = D2CTextSignalValues.map((signal: any) => {\n // if (props.signalRData.data.hasOwnProperty(signal.id)) {\n signal.values.forEach((signalData: any, index: number) => {\n D2CMessages.push({\n signalId: signalData.signalId,\n firstName: signalData.ruleName, \n lastName: \"D\",\n type: \"D2C\",\n timestamp: new Date(signalData.timestamp),\n text: formatD2CText(signalData.value)\n });\n });\n //}\n return signal;\n });\n//}\n\nif (Object.keys(props.signalRData.data).length > 0) {\n D2CTextSignalValues = D2CTextSignalValues.map((signal: any) => {\n if (props.signalRData.data.hasOwnProperty(signal.signalId)) {\n props.signalRData.data[signal.signalId].forEach((signalData: any, index: number) => {\n D2CMessages.push({\n signalId: signalData.signalId,\n firstName: signalData.name, \n lastName: \"D\",\n type: \"D2C\",\n timestamp: new Date(signalData.bt-signalData.time),\n text: formatD2CText(signalData.value)\n });\n });\n }\n return signal;\n });\n} \n D2CMessages = D2CMessages.reduce((result:TimeSeriesMessage[], item:TimeSeriesMessage) => {\n if (item.firstName !=\"C2D Data\") {\n result.push(item);\n }\n return result;\n}, []);\n\n let uniqueD2CMessages = D2CMessages.filter(\n (object, index, self) =>\n index === self.findIndex((t) => JSON.stringify(t) === JSON.stringify(object))\n );\n return uniqueD2CMessages;\n};\n\ninterface Signal {\n signalId: string;\n values: Array<{\n timestamp: Date;\n value: number;\n }>;\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n signalId: meta.id,\n values: data,\n}));\n\nfunction formatD2CText(v: string): string {\n // v = \"0x2a6d61655420694\"; // \"0x006d6165542069486d616554206948\"\n var msg = hexToString(v);\n // console.log(\"rawhex\", v)\n // console.log(\"raw msg\", msg)\n // remove the deliminator from the single/multi text frame\n // if (msg.length <=9) {\n // const lastFrameStartPos = msg.length -9;\n // // console.log(\"lastFrameStartPos\", lastFrameStartPos)\n // const delimiterPos = msg.indexOf(\"*\", lastFrameStartPos);\n // // console.log(\"delimiterPos\", lastFrameStartPos)\n // if (delimiterPos >=0) { // only applicable to singleframe, since multi-frame does not have delimiter,\n // // therefore, multi-frame delimiterPos = -1\n // msg = msg.substring(0, delimiterPos );\n // // console.log(\"msg returned\", msg)\n // }\n // }\n if (msg.charAt(msg.length-1)=='*'){\n msg = msg.replace(msg.substring(msg.length-1), \"\");\n // console.log(msg);\n }\n return msg;\n}\n\n// O(n log n) time & O(n) space\nlet mergeTwo = (arr1:TimeSeriesMessage[], arr2:TimeSeriesMessage[]) => {\n let result = [...arr1, ...arr2];\n\n let sortedResult = result.sort((a,b) => b.timestamp.getTime()-a.timestamp.getTime());\n \n return sortedResult; \n}\n\n\nconst getAllMessages =(( props:CommandWidgettProps) => {\n let d2c:TimeSeriesMessage[] = getD2CMessages(props );\n let c2d:TimeSeriesMessage[] = [];\n const { signals } = props;\n \n signals.map((s) => s.toString()).forEach((widgetSignalId) => {\n props.state.asset.c2dMessages.forEach((msg) => {\n if (widgetSignalId == msg.signalId) {\n c2d.push({\n signalId: msg.signalId,\n firstName: msg.firstName, \n lastName: msg.lastName,\n text: msg.text,\n type: msg.type,\n timestamp: new Date(msg.timestamp)\n });\n } \n });\n \n })\n\n var widgetSignals: TimeSeriesMessage[] = [];\n mergeTwo(d2c, c2d).forEach((msg: TimeSeriesMessage) => {\n widgetSignals.push(msg)\n });\n return widgetSignals;\n\n});\n\nconst getCommandWidgetSignals = (signals:any, state: any) => {\n const commandSignals:any[] =[];\n if(signals.length > 0){\n signals.map((signal:any) => {\n if(JSON.parse(state.asset.datapoints).length > 0){\n JSON.parse(state.asset.datapoints).map((collection:any) => {\n if(collection.type && collection.type === \"Command\" ){\n collection.values.map((value:any) => {\n if(value._id == signal){\n commandSignals.push(value);\n }\n })\n }\n })\n }\n })\n }\n return commandSignals;\n}\n\nconst formatShortDateTime = ((d:Date) => {\n let month = d.getMonth() < 9 ? \"0\" + (d.getMonth() + 1).toString(): (d.getMonth()+1).toString();\n let day = d.getDate() < 10 ? \"0\" + (d.getDate()).toString(): (d.getDate()).toString();\n let hr = d.getHours() < 10 ? \"0\" + (d.getHours()).toString(): (d.getHours()).toString();\n let mi = d.getMinutes() < 10 ? \"0\" + (d.getMinutes()).toString(): (d.getMinutes()).toString();\n let ss = d.getSeconds() < 10 ? \"0\" + (d.getSeconds()).toString(): (d.getSeconds()).toString();\n return d.getFullYear() + \n \"-\" + month + \n \"-\" + day +\n \" \" + hr +\n \":\" + mi +\n \":\" + ss;\n});\n\ninterface CommandWidgettProps extends CommonWidgetProps{\n state: State; \n}\n\nconst Widget: React.FC<CommandWidgettProps> = (props) => {\n const { template, data, state } = props;\n const [widgetSignalsD2C, setWidgetSignalsD2C] = useState<TimeSeriesMessage[]>([]);\n const [widgetSignals, setWidgetSignals] = useState<any[]>([]);\n const [messagescount, setMessagesCount] = useState(0);\n //const [c2dMessagecount, setC2DMessagesCount] = useState(props.state.asset.c2dMessages.length);\n const [refresh, setRefresh] = useState(false);\n useEffect(() => {\n \n let allMessages:any[] = getAllMessages(props);\n let allC2DMessages = getCommandWidgetSignals(props.signals, state)\n setMessagesCount(allMessages.length);\n //setC2DMessagesCount(allC2DMessages.length);\n setWidgetSignalsD2C(allMessages);\n setWidgetSignals(allC2DMessages);\n },[props.data, props.signalRData, props.signals, state.asset.c2dMessages.length, messagescount, refresh ]);\n\n const refreshUpdate:any = (value:boolean) =>{\n setRefresh(value);\n }\n\n return (\n <div className=\"history\">\n <div className=\"widgetchatcontent\">\n {\n widgetSignalsD2C && widgetSignalsD2C.length > 0 && widgetSignalsD2C.map((signal:any) => {\n let details=findTimezone(props.state.timezone);\n let aligns = signal.type===\"C2D-SELF\"?\"left-side\":(signal.type===\"C2D-OTHER\"?\"right-side-cloud\": \"right-side-gateway\");\n let alignsmessage = signal.type===\"C2D-SELF\"?\"left-side-message\":(signal.type===\"C2D-OTHER\"?\"right-side-cloud-message\": \"right-side-gateway-message\");\n let alignsparent = signal.type===\"C2D-SELF\"?\"left-side-parent\":(signal.type===\"C2D-OTHER\"?\"right-side-cloud-parent\": \"right-side-gateway-parent\");\n return (\n <div className={alignsparent}>\n <div className={aligns}>\n <strong>{signal.firstName + \" \" + signal.lastName + \" \"}</strong> \n <em style= {{ fontSize:\"80%\"}}>{formatShortDateTime(signal.timestamp).concat(details?.timezone)}</em>\n </div>\n { (signal.type===\"C2D-SELF\")?\n (<div>\n\n <div className={alignsmessage} >{signal.text}\n </div>\n <div className=\"emptydiv\"></div>\n </div>):\n \n (<div>\n <div className=\"emptydiv\"></div>\n <div className={alignsmessage} >{signal.text}\n </div>\n \n </div>)\n\n }\n </div>\n )\n })\n }\n </div>\n\n <div>\n {\n widgetSignals && widgetSignals.length > 0 && widgetSignals.map((signal:any) => \n <CommandControl gatewayId={state.asset.gatewayId} refreshState = {refresh} signaldata = {signal} state = {state} refreshChange = {refreshUpdate}></CommandControl>\n )\n }\n </div>\n </div>\n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\n\nexport default connect(\n mapStateToProps\n)(Widget);\n// export default Widget;\n\n","import React from \"react\";\n\nimport { formatDate } from '../common';\nimport { formatGps } from \"../../../../utils/commonHelpers\";\n\nconst formatOptions = {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n};\n\nfunction formatTimestamp(timestamp: Date): string {\n //return timestamp.toLocaleDateString(\"en-US\", formatOptions);\n return formatDate(timestamp);\n}\n\ninterface TootipProps {\n position: Position;\n signalName: string;\n gpsTimestamp: Date;\n eventTimestamp: Date;\n signalValue: number;\n ruleName: string;\n timezone?:any;\n}\n\nconst Tooltip: React.FC<TootipProps> = ({ position, signalName, gpsTimestamp, eventTimestamp, signalValue, ruleName, timezone }) => {\n return (\n <div>\n {/* <span style={{ color: \"black \" }}><b style={{ fontWeight: 700 }}>Signal Name:</b> {signalName} </span>\n <br /> */}\n <span style={{ color: \"black \" }}><b style={{ fontWeight: 700 }}>Event Name:</b> {ruleName} </span>\n <br />\n <span><b style={{ fontWeight: 700 }}>Event Value:</b> { !!signalValue ? \"ON\" : \"OFF\" } </span>\n <br />\n <span><b style={{ fontWeight: 700 }}>Event Time:</b> {formatTimestamp(eventTimestamp)}</span> \n <hr />\n <span style={{ color: \"black \" }}><span><b style={{ fontWeight: 700 }}>Location:</b> {formatGps(position.lat, position.lng)}</span></span>\n <br />\n <span><b style={{ fontWeight: 700 }}>GPS Time:</b> {formatTimestamp(gpsTimestamp)}</span> \n </div>\n );\n};\n\nexport default Tooltip;\n\ninterface Position {\n lat: number;\n lng: number;\n}\n\nexport function toolTipForAssetEvents(\n position: Position,\n signalName: string,\n gpsTimestamp: Date,\n eventTimestamp: Date,\n signalValue: number,\n ruleName: string,\n timezone?:any\n) {\n return (\n <Tooltip position={position} signalName={signalName} gpsTimestamp={gpsTimestamp} eventTimestamp={eventTimestamp} signalValue={signalValue} ruleName={ruleName} timezone={timezone} />\n );\n}","import React from \"react\";\n\nimport { findTimezone, formatDate } from '../common';\nimport { formatGps } from \"../../../../utils/commonHelpers\";\n\nconst formatOptions = {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n};\n\nfunction formatTimestamp(timestamp: Date): string {\n //return timestamp.toLocaleDateString(\"en-US\", formatOptions);\n // console.log(\"timestamp\")\n //console.log(timestamp)\n return formatDate(timestamp);\n}\n\ninterface TootipProps {\n position: Position;\n timestamp: Date;\n title?: string;\n timezone?:any;\n}\n\nconst Tooltip: React.FC<TootipProps> = ({ position, timestamp, title,timezone }) => {\n var details=findTimezone(timezone);\n \n return (\n <div>\n {title !== undefined && <><span style={{ color: 'black' }}><b>{title}</b></span> <hr/></>}\n <span>Location: {formatGps(position.lat, position.lng)}</span>\n <br />\n <span>{formatTimestamp(timestamp)+\" \".concat(details?.timezone)}</span> \n </div>\n );\n};\n\nexport default Tooltip;\n\ninterface Position {\n lat: number;\n lng: number;\n}\n\nexport function toolTipForAsset(\n position: Position,\n timestamp: Date,\n title?: string,\n timezone?:any\n) {\n return (\n <Tooltip position={position} timestamp={timestamp} title={title} timezone={timezone} />\n );\n}","import React, { memo, useEffect, useState } from 'react'\r\nimport { Marker, MapActions } from \"../../../../sharedComponents/GoogleMap\";\r\nimport { CaretDownFilled, CaretLeftFilled, CaretRightFilled, CaretUpFilled, DownOutlined, UpOutlined } from '@ant-design/icons';\r\nimport { Card, Col, Divider, Row, Switch, Tag } from 'antd';\r\nimport { EventsMapMarkerOptions } from './Widget';\r\n\r\n\r\ninterface Props {\r\n markers?: Marker[],\r\n filterMapOption: Function,\r\n mapActions: MapActions | undefined,\r\n mapMarkerOptions: EventsMapMarkerOptions\r\n}\r\n\r\nconst mapOptionsBar = {\r\n backgroundColor: 'rgba(6, 27, 74, 0.85)',\r\n position: 'absolute',\r\n height: 'auto',\r\n top: '0',\r\n left: '0',\r\n zIndex: 2,\r\n width: '100%',\r\n color: '#fff',\r\n cursor: 'pointer',\r\n textAlign: 'center',\r\n MozUserSelect: 'none',\r\n khtmlUserSelect: 'none',\r\n WebkitUserSelect: 'none',\r\n msUserSelect: 'none',\r\n userSelect: 'none',\r\n} as React.CSSProperties;\r\n\r\nconst mapOptionsOpen = {\r\n backgroundColor: 'rgba(255, 255, 255, 0.85)',\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n zIndex: 2,\r\n color: '#000',\r\n textAlign: 'left',\r\n height: 'auto',\r\n width: '100%',\r\n marginTop: '20px',\r\n boxShadow: '0px 10px 10px #404040',\r\n WebkitTransition: 'max-height, 0.2s linear',\r\n MozTransition: 'max-height, 0.2s linear',\r\n msTransition: 'max-height, 0.2s linear',\r\n OTransition: 'max-height, 0.2s linear',\r\n transition: 'max-height, 0.2s linear',\r\n} as React.CSSProperties;\r\n \r\nconst mapOptionsClose = {\r\n backgroundColor: 'rgba(255, 255, 255, 0.85)',\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n zIndex: 2,\r\n color: '#000',\r\n textAlign: 'left',\r\n maxHeight: '0',\r\n overflow: 'hidden',\r\n width: '100%',\r\n marginTop: '20px',\r\n boxShadow: '0px 10px 10px #404040',\r\n WebkitTransition: 'max-height, 0.2s linear',\r\n MozTransition: 'max-height, 0.2s linear',\r\n msTransition: 'max-height, 0.2s linear',\r\n OTransition: 'max-height, 0.2s linear',\r\n transition: 'max-height, 0.2s linear',\r\n} as React.CSSProperties;\r\n\r\n\r\n\r\n\r\nconst mapStatsBar = {\r\n backgroundColor: 'rgba(130, 64, 123, 0.85)',\r\n position: 'absolute',\r\n bottom: '0',\r\n left: '0',\r\n zIndex: 1,\r\n width: 'auto',\r\n height: '85%',\r\n writingMode: 'vertical-lr',\r\n color: '#fff',\r\n cursor: 'pointer',\r\n textAlign: 'center',\r\n MozUserSelect: 'none',\r\n khtmlUserSelect: 'none',\r\n WebkitUserSelect: 'none',\r\n msUserSelect: 'none',\r\n userSelect: 'none',\r\n} as React.CSSProperties;\r\n\r\nconst mapStatsOpen = {\r\n backgroundColor: 'rgba(255, 255, 255, 0.85)',\r\n position: 'absolute',\r\n bottom: '0',\r\n left: '0',\r\n zIndex: 1,\r\n color: '#000',\r\n textAlign: 'center',\r\n marginLeft: '20px',\r\n height: '85%',\r\n width: '350px',\r\n borderTopRightRadius: '10px',\r\n boxShadow: '10px 0px 10px #404040',\r\n WebkitTransition: 'width, 0.2s linear',\r\n MozTransition: 'width, 0.2s linear',\r\n msTransition: 'width, 0.2s linear',\r\n OTransition: 'width, 0.2s linear',\r\n transition: 'width, 0.2s linear',\r\n} as React.CSSProperties;\r\n \r\nconst mapStatsClose = {\r\n backgroundColor: 'rgba(255, 255, 255, 0.85)',\r\n position: 'absolute',\r\n bottom: '0',\r\n left: '0',\r\n zIndex: 1,\r\n color: '#000',\r\n textAlign: 'center',\r\n marginLeft: '20px',\r\n overflow: 'hidden',\r\n height: '85%',\r\n width: '0px',\r\n borderTopRightRadius: '10px',\r\n boxShadow: '10px 0px 10px #404040',\r\n WebkitTransition: 'width, 0.2s linear',\r\n MozTransition: 'width, 0.2s linear',\r\n msTransition: 'width, 0.2s linear',\r\n OTransition: 'width, 0.2s linear',\r\n transition: 'width, 0.2s linear',\r\n} as React.CSSProperties;\r\n \r\n \r\nconst MapMenuOptions: React.FC<Props> = (props) => {\r\n\r\n const { mapMarkerOptions } = props;\r\n\r\n const [markerOptions, setMarkerOptions] = useState<EventsMapMarkerOptions>(mapMarkerOptions);\r\n const [showMapOptions, setShowMapOptions] = useState<Boolean>(false)\r\n const [showMapStats, setShowMapStats] = useState<Boolean>(false)\r\n\r\n useEffect(() => {\r\n setMarkerOptions(mapMarkerOptions);\r\n }, [mapMarkerOptions])\r\n\r\n const toggleMapOptions = (mapShowState: Boolean) => {\r\n setShowMapOptions(mapShowState)\r\n }\r\n\r\n const toggleMapStats = (showMapStats: Boolean) => {\r\n setShowMapStats(showMapStats)\r\n }\r\n\r\n const filterMapOption = (status: boolean, field: any, signalId: any) => {\r\n if (signalId) {\r\n\r\n if (field == 'EnableSignal') {\r\n mapMarkerOptions.SignalMapOptions.map((signal, index) => {\r\n mapMarkerOptions.SignalMapOptions[index].EnableSignal = false\r\n mapMarkerOptions.SignalMapOptions[index].ShowSignalMarker = false\r\n })\r\n\r\n let foundIndex = mapMarkerOptions.SignalMapOptions.findIndex(x => x.SignalId == signalId);\r\n mapMarkerOptions.SignalMapOptions[foundIndex].EnableSignal = status;\r\n mapMarkerOptions.SignalMapOptions[foundIndex].ShowSignalMarker = status;\r\n }\r\n\r\n let foundIndex = mapMarkerOptions.SignalMapOptions.findIndex(x => x.SignalId == signalId);\r\n mapMarkerOptions.SignalMapOptions[foundIndex][field] = status;\r\n \r\n } else {\r\n mapMarkerOptions[field] = status\r\n }\r\n setMarkerOptions(mapMarkerOptions) \r\n props.filterMapOption(mapMarkerOptions)\r\n }\r\n\r\n const showEventsStats = (signalId: string) => {\r\n\r\n mapMarkerOptions.SignalMapOptions.map((signal, index) => {\r\n mapMarkerOptions.SignalMapOptions[index].EnableSignal = false\r\n // mapMarkerOptions.SignalMapOptions[index].ShowSignalMarker = false\r\n })\r\n\r\n let foundIndex = mapMarkerOptions.SignalMapOptions.findIndex(x => x.SignalId == signalId);\r\n mapMarkerOptions.ShowGPSPath = true;\r\n mapMarkerOptions.SignalMapOptions[foundIndex].EnableSignal = true;\r\n mapMarkerOptions.SignalMapOptions[foundIndex].ShowSignalMarker = true;\r\n\r\n setMarkerOptions(mapMarkerOptions) \r\n props.filterMapOption(mapMarkerOptions)\r\n\r\n }\r\n\r\n return (\r\n <>\r\n <div onClick={() => toggleMapOptions(!showMapOptions)} style={mapOptionsBar} >\r\n {\r\n (showMapOptions) &&\r\n <>\r\n <CaretUpFilled />\r\n <span style={{ paddingRight: '5px', paddingLeft: '5px' }}>Map Options</span>\r\n <CaretUpFilled />\r\n </>\r\n }\r\n {\r\n (!showMapOptions) &&\r\n <>\r\n <CaretDownFilled />\r\n <span style={{ paddingRight: '5px', paddingLeft: '5px' }}>Map Options</span>\r\n <CaretDownFilled />\r\n </>\r\n }\r\n </div>\r\n\r\n <div\r\n style={showMapOptions ? mapOptionsOpen : mapOptionsClose}\r\n >\r\n \r\n <Row style={{ padding: '10px' }} justify=\"start\" align=\"top\" gutter={[4, 4]}>\r\n\r\n <Col span={24}>\r\n <Card title=\"General Options\" bordered={true}>\r\n <Card.Grid hoverable={false} style={{ width: '25%', textAlign: 'center' }}>\r\n <Switch checked={markerOptions.ShowGPSPath} onChange={(checked) => { filterMapOption(checked, 'ShowGPSPath', false) }} />\r\n <span style={{ marginLeft: '5px' }} >Show Tracking Path</span>\r\n </Card.Grid>\r\n <Card.Grid hoverable={false} style={{ width: '25%', textAlign: 'center' }}>\r\n <Switch checked={ markerOptions.ShowGPSMarker } onChange={(checked) => { filterMapOption(checked, 'ShowGPSMarker', false) }} />\r\n <span style={{ marginLeft: '5px' }} >Show GPS markers</span>\r\n </Card.Grid>\r\n <Card.Grid hoverable={false} style={{ width: '25%', textAlign: 'center' }}>\r\n <Switch checked={ markerOptions.ShowStartEndPoint } onChange={(checked) => { filterMapOption(checked, 'ShowStartEndPoint', false) }} />\r\n <span style={{ marginLeft: '5px' }} >Show Start/End Points</span>\r\n </Card.Grid>\r\n <Card.Grid hoverable={false} style={{ width: '25%', textAlign: 'center' }}>\r\n <Switch checked={ markerOptions.HideClusteredPoints } onChange={(checked) => { filterMapOption(checked, 'HideClusteredPoints', false) }} />\r\n <span style={{ marginLeft: '5px' }} >Hide Clustered Points</span>\r\n </Card.Grid>\r\n </Card>\r\n </Col>\r\n\r\n { markerOptions.SignalMapOptions.map((s) => {\r\n \r\n return (\r\n\r\n <Col key={s.SignalId} /* flex='auto' */ span={ 24/markerOptions.SignalMapOptions.length }>\r\n <Card title={ s.name } bordered={true}>\r\n <Switch checked={ s.EnableSignal } onChange={(checked) => { filterMapOption(checked, 'EnableSignal', s.SignalId) }} />\r\n <span style={{ marginLeft: '5px' }} >View Path</span>\r\n <br />\r\n <Switch checked={ s.ShowSignalMarker } onChange={(checked) => { filterMapOption(checked, 'ShowSignalMarker', s.SignalId) }} />\r\n <span style={{ marginLeft: '5px' }} >View Events</span>\r\n <hr />\r\n <span style={{ marginLeft: '5px' }} >Legends: [</span>\r\n <span style={{ marginLeft: '5px' }} >ON: </span>\r\n <span style={{ border: '1px solid black', minWidth: '10px', height: \"10px\", backgroundColor: s.color.split(\"$\")[0] }}> </span>\r\n <span style={{ marginLeft: '5px' }} > | OFF: </span>\r\n <span style={{ border: '1px solid black', minWidth: '10px', height: \"10px\", backgroundColor: s.color.split(\"$\")[1] }}> </span>\r\n <span style={{ marginLeft: '5px' }} >]</span>\r\n </Card>\r\n </Col>\r\n\r\n )\r\n })\r\n \r\n }\r\n\r\n </Row>\r\n \r\n </div>\r\n\r\n \r\n\r\n <div onClick={() => toggleMapStats(!showMapStats)} style={mapStatsBar} >\r\n {\r\n (showMapStats) &&\r\n <div style={{ transform: 'rotate(180deg)' }}>\r\n <CaretRightFilled />\r\n <span style={{ paddingRight: '5px', paddingLeft: '5px' }}>Hide Summary</span>\r\n <CaretRightFilled />\r\n </div>\r\n }\r\n {\r\n (!showMapStats) &&\r\n <div style={{ transform: 'rotate(180deg)' }}>\r\n <CaretLeftFilled />\r\n <span style={{ paddingRight: '5px', paddingLeft: '5px' }}>Show Summary</span>\r\n <CaretLeftFilled />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n style={showMapStats ? mapStatsOpen : mapStatsClose}\r\n >\r\n <Row style={{ padding: '10px', textAlign: 'left' }} justify=\"space-around\" align=\"top\" gutter={[4, 4]}>\r\n\r\n <Col span={24}>\r\n <Card title=\"Events Summary\" bordered={true}>\r\n <Card.Grid hoverable={false} style={{ width: '100%', textAlign: 'left', paddingTop: '15px', paddingBottom: '15px' }}>\r\n <span style={{ marginLeft: '5px' }} >Total Signals:</span>\r\n <Tag style={{ float: 'right' }} color=\"blue\">{ markerOptions.SignalMapOptions.length } Signals</Tag>\r\n </Card.Grid>\r\n <Card.Grid hoverable={false} style={{ width: '100%', textAlign: 'left', paddingTop: '15px', paddingBottom: '15px' }}>\r\n <span style={{ marginLeft: '5px' }} >Total Data Points:</span>\r\n <Tag style={{ float: 'right' }} color=\"blue\">{props.markers?.length} Data Points</Tag>\r\n </Card.Grid>\r\n </Card>\r\n </Col>\r\n\r\n </Row>\r\n\r\n <Row style={{ padding: '10px', textAlign: 'left', paddingTop: '0px' }} justify=\"space-around\" align=\"top\" gutter={[4, 4]}>\r\n\r\n <Col span={24}>\r\n <Card title=\"Legends\" style={{ paddingTop: '0px' }} bordered={true}>\r\n\r\n { markerOptions.SignalMapOptions.map((s, i) => {\r\n \r\n return (\r\n <Card.Grid key={i} hoverable={false} style={{ width: '100%', textAlign: 'left', paddingTop: '0px', paddingBottom: '10px' }}>\r\n <span style={{ marginLeft: '5px', fontSize: \"12px\" }} ><b>{ s.name }</b> </span><br />\r\n <span style={{ marginLeft: '5px' }} >[ON: </span>\r\n <span style={{ border: '1px solid black', minWidth: '10px', height: \"10px\", backgroundColor: s.color.split(\"$\")[0] }}> </span>\r\n <span style={{ marginLeft: '5px' }} > | OFF: </span>\r\n <span style={{ border: '1px solid black', minWidth: '10px', height: \"10px\", backgroundColor: s.color.split(\"$\")[1]}}> </span>\r\n <span style={{ marginLeft: '5px' }} >]</span>\r\n <span style={{ marginLeft: '5px', float: 'right' }} ><Tag style={{ cursor: 'pointer' }} onClick={() => { showEventsStats(s.SignalId) }} color=\"blue\">{props.markers?.filter((m) => m.signalId == s.SignalId).length} Event(s)</Tag></span>\r\n </Card.Grid>\r\n )\r\n })\r\n \r\n }\r\n \r\n </Card>\r\n </Col>\r\n\r\n </Row>\r\n\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\n\r\nexport default memo(MapMenuOptions)","import React, { memo, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { inputSignalMapper, signalLabel } from \"../common\";\nimport { CommonWidgetProps } from \"../../models\";\nimport {\n Map,\n Marker,\n MapActions,\n} from \"../../../../sharedComponents/GoogleMap\";\nimport { toolTipForAssetEvents } from \"./Tooltip\";\n// import MapPin from \"../../../../assets/images/map-pin.png\";\nimport { Tooltip, Button, Empty, Row, Col } from \"antd\";\nimport { AppstoreOutlined, BorderOuterOutlined, FilterOutlined } from \"@ant-design/icons\";\nimport { toolTipForAsset } from \"../LocationWidget/Tooltip\";\nimport useGoogleMapsLib from \"../../../../sharedComponents/GoogleMap/use-google-maps-lib\";\nimport { getDistance, getGPSEventsWidgetIconDetails } from \"../../../../utils/commonHelpers\";\nimport MapMenuOptions from \"./MapMenuOptions\";\nimport { WidgetState } from \"../../state\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\n\ninterface Signal {\n id: string;\n name: string;\n color?: string;\n values: Array<{\n timestamp: Date;\n value: number;\n severity?: string;\n ruleName?: string;\n uom?: string;\n }>;\n}\n\n\ninterface ObjectKeys {\n [key: string] : string | boolean | SignalMapOptions[];\n}\nexport interface SignalMapOptions extends ObjectKeys {\n EnableSignal: boolean;\n ShowSignalMarker: boolean;\n SignalId: string;\n name: string;\n color: string;\n}\n\n\nexport interface EventsMapMarkerOptions extends ObjectKeys {\n ShowGPSPath: boolean;\n ShowGPSMarker: boolean;\n ShowStartEndPoint: boolean;\n HideClusteredPoints: boolean;\n SignalMapOptions: SignalMapOptions[]\n}\n\n\nfunction assetToMarker(signals: Signal[], mapMarkerOptions?: EventsMapMarkerOptions,timezone?:any): Marker[] {\n\n const latitude = signals.filter((s) => s.name.toLowerCase().indexOf('latitude') != -1)[0] || [];\n const longitude = signals.filter((s) => s.name.toLowerCase().indexOf('longitude') != -1)[0] || [];\n let markerArray = signals.filter((s) => {\n return !s.name.toLowerCase().includes('latitude') && !s.name.toLowerCase().includes('longitude')\n });\n\n if (latitude?.values?.length > 0 && typeof google !== 'undefined') {\n\n const GPSMarkers: Marker[] = [];\n latitude.values.forEach((s, i) => {\n const timestamp = s.timestamp;\n const lat = latitude.values[i].value;\n const lng = longitude.values[i].value;\n\n let point3;\n let point2;\n let point1 = new google.maps.LatLng(lat, lng);\n latitude.values.length != i + 1 ?\n point2 = new google.maps.LatLng(latitude.values[i + 1].value, longitude.values[i + 1].value)\n : point2 = point1;\n\n /* This is added as an additional check for slow moving vehicle */\n latitude.values.length > i + 4 ?\n point3 = new google.maps.LatLng(latitude.values[i + 4].value, longitude.values[i + 4].value)\n : point3 = point1;\n \n let distanceInMeters = getDistance(point1, point2);\n let distanceInMetersAfterThreePoints = getDistance(point1, point3);\n \n let marker: Marker;\n\n marker = {\n id: `${i}`,\n position: {\n lat: lat,\n lng: lng,\n },\n timestamp: timestamp,\n tooltip: i == 0 ? toolTipForAsset({ lat, lng }, timestamp, 'Starting Point',timezone) : i == latitude.values.length - 1 ? toolTipForAsset({ lat, lng }, timestamp, 'End Point',timezone) : toolTipForAsset({ lat, lng }, timestamp,undefined,timezone),\n optimized: true,\n show: mapMarkerOptions?.ShowGPSMarker ? mapMarkerOptions?.ShowGPSMarker : false,\n enabled: true,\n };\n\n /* Handling Showing Start/End Points and Customizing Tooltip and label */\n if (mapMarkerOptions?.ShowStartEndPoint) {\n if (i == 0) {\n marker.tooltip = toolTipForAsset({ lat, lng }, timestamp, 'Starting Point',timezone)\n marker.show = mapMarkerOptions?.ShowStartEndPoint ? mapMarkerOptions?.ShowStartEndPoint : false\n marker.enabled = mapMarkerOptions?.ShowStartEndPoint ? mapMarkerOptions?.ShowStartEndPoint : false\n marker.label = {\n text: mapMarkerOptions?.ShowStartEndPoint ? 'S' : '',\n color: '#fff',\n fontWeight: 'bold',\n }\n } else if (i == latitude.values.length - 1) {\n marker.tooltip = toolTipForAsset({ lat, lng }, timestamp, 'End Point',timezone)\n marker.show = mapMarkerOptions?.ShowStartEndPoint ? mapMarkerOptions?.ShowStartEndPoint : false\n marker.enabled = mapMarkerOptions?.ShowStartEndPoint ? mapMarkerOptions?.ShowStartEndPoint : false\n marker.label = {\n text: mapMarkerOptions?.ShowStartEndPoint ? 'E' : '',\n color: '#fff',\n fontWeight: 'bold',\n }\n } else {\n marker.icon = getGPSEventsWidgetIconDetails(point1, point2, 'GPS')\n }\n } else {\n marker.icon = getGPSEventsWidgetIconDetails(point1, point2, 'GPS')\n }\n \n /* Filtering Stationary Points */\n if (i == 0 || i == latitude.values.length - 1) {\n GPSMarkers.push(marker)\n } else if (mapMarkerOptions?.HideClusteredPoints) {\n if (distanceInMeters > 1.5 && distanceInMetersAfterThreePoints > 4) {\n GPSMarkers.push(marker)\n }\n } else {\n GPSMarkers.push(marker)\n }\n\n });\n\n /* Handling Linking Signal Events to nearest GPS point */\n let locKey = -1;\n let closestTimestamp: any;\n let EventsMarkers: any[] = [];\n markerArray?.map((alert, y) => {\n\n let foundIndex = mapMarkerOptions?.SignalMapOptions?.findIndex(x => x.SignalId == alert.id);\n\n if (foundIndex == undefined || mapMarkerOptions?.SignalMapOptions[foundIndex]?.EnableSignal || mapMarkerOptions?.SignalMapOptions[foundIndex]?.ShowSignalMarker) {\n\n var onColor = \"#008000\";\n var offColor = \"#FF0000\";\n\n if (alert) {\n if (alert.color) {\n let arr = alert.color.split(\"$\");\n onColor = arr[0];\n offColor = arr[1];\n }\n }\n \n let lastValue: boolean;\n let skip = true;\n return alert.values.map((v, i) => {\n\n if (i == 0) {\n skip = false;\n lastValue = !!v.value\n }\n\n if (!!v.value == lastValue && i != 0) {\n skip = true; lastValue = !!v.value\n } else {\n skip = false; lastValue = !!v.value\n }\n\n if (!skip) {\n\n locKey = -1\n closestTimestamp = v.timestamp;\n GPSMarkers.forEach((loc, x) => {\n if (new Date(closestTimestamp) <= new Date(loc.timestamp) && locKey == -1) {\n locKey = x\n }\n });\n\n if (locKey == -1) {\n closestTimestamp = v.timestamp;\n GPSMarkers.forEach((loc, x) => {\n if (new Date(closestTimestamp) >= new Date(loc.timestamp)) {\n locKey = x\n }\n });\n }\n\n if (locKey == -1) { locKey = 0 }\n\n const lat = GPSMarkers[locKey].position.lat;\n const lng = GPSMarkers[locKey].position.lng;\n\n let point2;\n let point1 = new google.maps.LatLng(lat, lng);\n GPSMarkers.length != locKey + 1 ?\n point2 = new google.maps.LatLng(GPSMarkers[locKey + 1].position.lat, GPSMarkers[locKey + 1].position.lng)\n : point2 = point1\n \n EventsMarkers.push({\n id: `${alert.name}-${locKey}-${y}-${i}`,\n position: {\n lat: lat,\n lng: lng,\n },\n value: v.value != undefined,\n color: !!v.value ? onColor : offColor,\n timestamp: GPSMarkers[locKey].timestamp,\n tooltip: toolTipForAssetEvents({ lat, lng }, alert.name, GPSMarkers[locKey].timestamp, v.timestamp, v.value, alert.name? alert.name : \"N/A\",timezone),\n icon: getGPSEventsWidgetIconDetails(point1, point2, v.severity ? v.severity?.toLowerCase() : undefined, !!v.value ? onColor : offColor),\n optimized: true,\n show: foundIndex == undefined ? true : mapMarkerOptions?.SignalMapOptions[foundIndex]?.ShowSignalMarker ? mapMarkerOptions.SignalMapOptions[foundIndex]?.ShowSignalMarker : false,\n enabled: foundIndex == undefined ? true : mapMarkerOptions?.SignalMapOptions[foundIndex]?.EnableSignal ? mapMarkerOptions.SignalMapOptions[foundIndex]?.EnableSignal : false,\n signalId: alert.id\n \n })\n\n }\n });\n }\n\n });\n\n const EventsMarkersFlattened = EventsMarkers.flatMap((res: any) => res);\n const markersFinal = GPSMarkers.concat(EventsMarkersFlattened)\n\n //sort by timestamp\n const markersFinalSorted = markersFinal?.sort(function (a, b) {\n return (a?.timestamp && b?.timestamp) ? (a.timestamp < b.timestamp ? -1 : 1) : 1;\n });\n\n return markersFinalSorted;\n\n }\n\n return []\n\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n id: meta.id,\n name: signalLabel(meta, false),\n color: meta.color,\n values: data,\n}));\n\nconst Widget: React.FC<CommonWidgetProps> = (props) => {\n\n useGoogleMapsLib();\n const { template, data, state } = props;\n\n let signals = createSignals(props.signals, template, data);\n\n /* updating with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n signals = signals.map((signal: Signal) => {\n if (props.signalRData.data.hasOwnProperty(signal.id)) {\n props.signalRData.data[signal.id].forEach((signalData:any, index: number) => {\n signal.values.push({\n value: signalData.value,\n timestamp: new Date(signalData.bt - signalData.time)\n })\n });\n }\n return signal\n })\n }\n\n const latitude = signals.filter((s) => s.name.toLowerCase().indexOf('latitude') != -1)[0] || [];\n const longitude = signals.filter((s) => s.name.toLowerCase().indexOf('longitude') != -1)[0] || [];\n\n let signalDetails = template.signalCollections.map((sc) => sc.signals.map((scs) => scs)).flat()\n\n let signalOptions: SignalMapOptions[] = props.signals.filter((s) => {\n return !s.id.includes(latitude.id) && !s.id.includes(longitude.id)\n }).map((s, index) => {\n return {\n EnableSignal: index == 0 ? true : false,\n ShowSignalMarker: index == 0 ? true : false,\n SignalId: s.id,\n name: signalDetails.filter((sd) => sd.id == s.id)[0].name,\n color: s.color ? s.color : '#008000$#FF0000'\n }\n });\n\n let initialMapOptions: EventsMapMarkerOptions = {\n ShowGPSPath: true,\n ShowGPSMarker: false,\n ShowStartEndPoint: true,\n HideClusteredPoints: true,\n SignalMapOptions: signalOptions\n }\n\n\n const [mapActions, setMapActions] = useState<MapActions>();\n const [mapMarkerOptions, setEventsMapMarkerOptions] = useState<EventsMapMarkerOptions>(initialMapOptions);\n const [markers, setMarkers] = useState<Marker[]>(assetToMarker(signals, mapMarkerOptions,state.timezone));\n\n useEffect(() => {\n setEventsMapMarkerOptions(initialMapOptions)\n setMarkers(assetToMarker(signals, mapMarkerOptions,state.timezone))\n }, [data, template, props.signalRData.data])\n\n useEffect(() => {\n setMarkers(assetToMarker(signals, mapMarkerOptions,state.timezone))\n }, [mapMarkerOptions])\n \n \n\n // const memoizedCallback = useCallback((mapMarkerOptions) => { functionToRun(mapMarkerOptions) }, [MapMenuOptions])\n\n const functionToRun = (mapMarkerOptions: EventsMapMarkerOptions) => {\n setEventsMapMarkerOptions(mapMarkerOptions);\n setMarkers(assetToMarker(signals, mapMarkerOptions,state.timezone))\n }\n\n return (\n <div style={{ height: \"100%\", position: \"relative\" }}>\n {latitude?.values?.length > 0 ? (\n <>\n <Map\n data-id=\"map-container\"\n markers={markers}\n clusterMarkers={false}\n eventsOnMap={true}\n mapActionsRef={setMapActions}\n mapOptions={{ mapTypeId: \"satellite\" }}\n polyline={false}\n drawOverlays={false}\n eventsMapMarkerOptions={ mapMarkerOptions }\n ></Map>\n\n <MapMenuOptions {...props} markers={ assetToMarker(signals) } mapMarkerOptions={ mapMarkerOptions } filterMapOption={functionToRun} mapActions={ mapActions } />\n \n </>\n\n ) : (\n <></>\n // <Row style={{ padding: '10px' }} justify=\"center\" align=\"middle\" gutter={[4, 4]}>\n // <Col span={24}>\n // <Empty\n // description={\n // <>\n // <span> No data found for the selected time range</span><br />\n // <span> Try to select different data range</span>\n // </>\n // }\n // >\n // </Empty>\n // </Col>\n // </Row>\n )}\n </div>\n );\n};\n\n// export default memo(Widget);\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(React.memo(Widget));\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Select, Tooltip, Button } from 'antd';\nimport { MinusCircleOutlined } from \"@ant-design/icons\";\nimport { Rule, Signal, SignalCollection, Template } from \"../../models\";\nimport { SelectorList } from \"../../WidgetEditForm\";\nimport { InfoCircleOutlined } from '@ant-design/icons'\nimport BooleanSelectorList from \"../../WidgetEditForm/BooleanSelectorList\";\nimport { groupObjsByValue } from \"../../../../utils/commonHelpers\";\n\nconst { Option, OptGroup } = Select;\n\ntype Value = string;\ntype ValueArray = Array<Value | undefined>;\n\ninterface SignalValue {\n id: Value;\n label: string;\n color: string;\n value: string;\n}\n\ninterface Selectable {\n value: Value;\n label: string;\n key?: string;\n collectionName?: string;\n}\n\ninterface Props {\n max?: number;\n signalCollections: SignalCollection[];\n signals: Signal[];\n rules: Rule[];\n existingSignals?: ValueArray;\n selectedGPSSignalsEdit?: string[];\n\n}\n\nconst EventsLocationSignalSelectorList: React.FC<Props> = (props) => {\n\n const { rules, existingSignals, signalCollections, selectedGPSSignalsEdit } = props;\n const boolLabels = [\"ON\", \"OFF\"];\n \n let signalArray: Signal[];\n signalArray =\n props.signals.filter(\n (s) =>\n s.name.toLowerCase().indexOf(\"longitude\") === -1 &&\n s.name.toLowerCase().indexOf(\"latitude\") === -1\n // && rules?.some((r:any) => r.signalId == s.id)\n ) || [];\n \n \n const colorSelectable = signalArray.map((s) => ({\n id: s.id,\n label: s.name,\n color: s.color,\n value: s.id,\n }));\n\n const selectableSignals = signalArray.map((s) => ({\n value: s.id,\n label: s.name,\n }) as Selectable);\n\n\n let preSelectedSignalArray: Signal[];\n preSelectedSignalArray = \n props.signals.filter(\n (s) =>\n s.name.toLowerCase().indexOf(\"longitude\") !== -1 ||\n s.name.toLowerCase().indexOf(\"latitude\") !== -1 \n ) || [];\n \n const GPSSelectableSignals = preSelectedSignalArray.map((s:any) => {\n let collectionName = '';\n signalCollections.map((collection, i) => {\n collection.signals.map((signal, x) => {\n if (s.id == signal.id) {\n collectionName = collection.name\n }\n })\n })\n\n return {\n id: s.id,\n value: s.id,\n label: s.name,\n key: s.id,\n collectionName: collectionName\n }\n\n })\n\n const [selectedGPSSignals, setSelectedGPSSignals] = useState<string[]>([])\n const [preSelectedSignals, setPreSelectedSignals] = useState<any[]>(groupObjsByValue(GPSSelectableSignals.filter((o: any) => !selectedGPSSignals.some((s) => s == o.value)), 'collectionName'))\n\n useEffect(() => {\n\n setPreSelectedSignals(groupObjsByValue(GPSSelectableSignals.filter((o: any) => !selectedGPSSignals.some((s) => s == o.value)), 'collectionName'))\n }, [selectedGPSSignals])\n\n const filteredOptions = (selectedGPSSignal: string, selectNumber: number) => {\n \n setSelectedGPSSignals(prevState => {\n\n if (prevState.length == 2 && selectNumber == 1) {\n return [prevState[1], selectedGPSSignal]\n } else if (prevState.length == 2 && selectNumber == 2) {\n return [prevState[0], selectedGPSSignal]\n } else if (prevState.length == 1 && selectNumber == 1) {\n return [selectedGPSSignal]\n } else if (prevState.length == 1 && selectNumber == 2) {\n return [prevState[0], selectedGPSSignal]\n } else {\n return [selectedGPSSignal]\n }\n \n });\n\n };\n\n return (\n\n <div style={{ marginTop: '20px' }}>\n\n <Form.Item \n label=\"GPS Signals\"\n name=\"preselectedSignals\"\n required\n rules={[\n {\n validator(rule, value) {\n return (!!(selectedGPSSignals && selectedGPSSignals.length == 2) || !!(value && value.length == 2))\n ? Promise.resolve()\n : Promise.reject(\"GPS signals (Longitude/Latitude) must be specified\")\n },\n },\n ]}\n >\n <Form.Item\n name={[\"preselectedSignals\", 0]}\n initialValue={selectedGPSSignals[0]}\n >\n <Select\n value={selectedGPSSignals[0]}\n placeholder=\"Select Latitude and Longitude Signal\"\n onChange={(v) => filteredOptions(v,1)}\n style={{ width: '100%' }}\n optionFilterProp={\"label\"}\n >\n {Object.values(preSelectedSignals).map((signals:any, key:number) => (\n <OptGroup key={key} label={signals[0].collectionName}>\n {signals.map((signal: any) => (\n <Option key={`${signal.value}-${key}`} value={signal.value}>\n {signal.label}\n </Option>\n ))}\n </OptGroup>\n ))}\n </Select>\n </Form.Item>\n <Form.Item\n name={[\"preselectedSignals\", 1]}\n style={{ width: '100%', marginTop: '10px' }}\n initialValue={selectedGPSSignals[1]}\n \n >\n <Select\n value={ selectedGPSSignals[1] }\n placeholder=\"Select Latitude and Longitude Signal\"\n onChange={(v) => filteredOptions(v, 2)}\n optionFilterProp={\"label\"}\n \n >\n {Object.values(preSelectedSignals).map((signals:any, key:number) => (\n <OptGroup key={key} label={signals[0].collectionName}>\n {signals.map((signal: any) => (\n <Option key={`${signal.value}-${key}`} value={signal.value}>\n {signal.label}\n </Option>\n ))}\n </OptGroup>\n ))}\n </Select>\n \n </Form.Item>\n </Form.Item>\n\n <Form.Item\n label={<span>Signals </span>}\n name=\"signals\"\n required\n rules={[\n {\n validator(rule, value) {\n return !value || value?.some((v: any) => v.id == '') || value?.filter((v: any) => !!v.id).length < 1\n ? Promise.reject(\"Signal selection cannot be empty\")\n : Promise.resolve();\n },\n },\n ]}\n >\n\n <BooleanSelectorList\n options={colorSelectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n rules={[]}\n labels= {boolLabels} />\n\n </Form.Item>\n </div>\n\n );\n};\n\nexport default EventsLocationSignalSelectorList;","import React from \"react\";\nimport { Form, Card } from \"antd\";\n\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport EventsLocationSignalSelectorList from \"./EventsLocationSignalSelectorList\";\nimport { Signal } from \"../../../Dashboard/models\";\n\nfunction sanitizeInputs(c: Config & {\n preselectedSignals: any[];\n}): Config {\n\n return {\n title: c.title,\n signals: c.preselectedSignals.filter((ps) => !!ps).concat(c.signals.filter((s) => !!s)) ,\n type: \"map events\",\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n\n /* Removing Preselected lng and lat signals from SelectorList (onEdit) */\n let gpsSignalArray:any = []\n props.template.signals.map((s) => {\n if (s.name.toLowerCase().indexOf(\"longitude\") !== -1 ||\n s.name.toLowerCase().indexOf(\"latitude\") !== -1) {\n gpsSignalArray.push(s.id)\n }\n });\n \n let initialValues\n if (props.config != undefined) {\n initialValues = JSON.parse(JSON.stringify(props.config));\n initialValues.preselectedSignals = initialValues?.signals?.filter((s: any, i: any) => gpsSignalArray.includes(s.id))\n initialValues.preselectedSignals = initialValues?.preselectedSignals?.map((s: any) => s.id)\n initialValues.signals = initialValues?.signals?.filter((s: any, i: any) => !gpsSignalArray.includes(s.id))\n } else {\n initialValues = undefined\n }\n\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config & { preselectedSignals: any[] }))}\n layout=\"vertical\"\n form={props.form}\n initialValues={initialValues}\n >\n <Card title=\"GPS Events Widget Settings\">\n <WidgetTitleFormField />\n <EventsLocationSignalSelectorList\n max={6}\n signals={props.template.signals}\n signalCollections={props.template.signalCollections}\n rules={props.template.rules}\n selectedGPSSignalsEdit={ initialValues?.preselectedSignals }\n />\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import * as amCore from \"@amcharts/amcharts4/core\";\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\nimport moment from \"moment\";\nimport { findTimezone } from \"../common\";\n\nexport interface Signal {\n signalId: string;\n name: string;\n values: Array<{ timestamp: Date; value: number }>;\n color: string;\n}\n\nexport interface Options {\n max: number;\n min: number;\n criticalMin: number;\n criticalMax: number;\n warnMin: number;\n warnMax: number;\n}\n\nexport interface Rules {\n criticalMin: number;\n criticalMax: number;\n warnMin: number;\n warnMax: number;\n}\n\nexport default class Gauge {\n private _chart: am4charts.GaugeChart;\n\n constructor(ref: HTMLDivElement, signals: Signal[], rules: Rules, opts?: Options,timezone?:any) {\n var onColor = \"#008000\";\n var offColor = \"#FF0000\";\n let isRulesAvailable = true;\n if (rules.criticalMax === -1 || rules.criticalMin === -1 || rules.warnMax === -1 || rules.warnMin === -1) {\n // no rules found\n isRulesAvailable = false;\n }\n if (!rules.criticalMax || !rules.criticalMin|| !rules.warnMax || !rules.warnMin ) {\n // no rules found\n isRulesAvailable = false;\n }\n var criticalMin = rules.criticalMin || 2000;\n var warnMin = rules.warnMin || 4000;\n var warnMax = rules.warnMax ||26000;\n var criticalMax = rules.criticalMax || 28000;\n \n if (signals && signals.length > 0) {\n if (signals[0].color) {\n let arr = signals[0].color.split(\"$\");\n onColor = arr[0];\n offColor = arr[1];\n }\n }\n var name = signals[0].name;\n var unit = \"\";\n if ( signals[0].name.includes('[') && signals[0].name.includes(']')) {\n unit= signals[0].name.substring(\n signals[0].name.lastIndexOf(\"[\") + 1, \n signals[0].name.lastIndexOf(\"]\"));\n name = signals[0].name.split('[')[0];\n }\n\n // var tooltipFormat= \"\";\n // if (signals[0].values.length !== 0) {\n // tooltipFormat = moment(signals[0].values[0].timestamp).format('ddd, MMM Do YYYY, h:mm:ss A') + \" \\n \" + signals[0].name + \" : \" + signals[0].values[0].value;\n // } \n\n var tooltipFormat= \"\";\n var details:any;\n if (signals[0].values.length !== 0) {\n \n details= findTimezone(timezone);\n let tooltipText = moment(signals[0].values[0].timestamp).format('ddd, MMM Do YYYY, HH:mm:ss ').concat(details?.timezone);\n tooltipFormat= tooltipText+\" \\n \" + signals[0].name + \" : \" + signals[0].values[0].value;\n } \n amCore.options.autoSetClassName = true;\n // Create Chart\n const chart = (this._chart = amCore.create(ref, am4charts.GaugeChart));\n chart.hiddenState.properties.opacity = 0;\n chart.fontSize = 11;\n chart.innerRadius = amCore.percent(85);\n chart.resizable = true;\n chart.tooltipText = tooltipFormat;\n chart.tooltip!.getFillFromObject = false;\n chart.tooltip!.background.fill = amCore.color(\"#6794dc\");\n /**\n * Normal axis\n */\n var axis = chart.xAxes.push(new am4charts.ValueAxis<am4charts.AxisRendererCircular>())\n\n axis.min = opts!.min;// opts!.min;// this.channels.meta.input.range.min;\n axis.max = opts!.max;//this.channels.meta.input.range.max;\n\n axis.strictMinMax = true;\n axis.renderer.radius = amCore.percent(85);\n // axis.renderer.inside = true;\n axis.renderer.line.strokeOpacity = 0.1;\n axis.renderer.ticks.template.disabled = false;\n axis.renderer.ticks.template.strokeOpacity = 1;\n axis.renderer.ticks.template.strokeWidth = 0.5;\n axis.renderer.ticks.template.length = 0;\n axis.renderer.grid.template.disabled = true;\n axis.renderer.labels.template.radius = amCore.percent(20);\n axis.renderer.labels.template.fontSize = \"0.9em\";\n chart.numberFormatter.numberFormat = \"#a\";\n // axis.renderer.minGridDistance = 100;\n axis.renderer.minLabelPosition = 0;\n /**\n * Axis for ranges\n */\n var axis2 = chart.xAxes.push(new am4charts.ValueAxis<am4charts.AxisRendererCircular>())\n axis2.min = opts!.min;// this.channels.meta.input.range.min;\n axis2.max = opts!.max;//this.channels.meta.input.range.max;\n axis2.strictMinMax = true;\n axis2.renderer.labels.template.disabled = true;\n axis2.renderer.ticks.template.disabled = true;\n axis2.renderer.grid.template.disabled = true;\n // axis2.renderer.minGridDistance = 100;\n\n if (isRulesAvailable) {\n // Min Critical\n var range1 = axis2.axisRanges.create();\n range1.value = opts!.min; //signals[0].values[0].value; // start value of range 1\n range1.endValue = criticalMin;// opts!.max;//signals[0].values[0].max; // end value of range 1\n range1.axisFill.fillOpacity = 1;\n range1.axisFill.fill = amCore.color(\"#FF0000\"); //amCore.color(offColor);//\n range1.axisFill.zIndex =-1;\n\n // Min Warning\n var range2 = axis2.axisRanges.create();\n range2.value = criticalMin;// signals[0].values[0].value; // start value of range 1\n\n range2.endValue = warnMin;//signals[0].values[0].max; // end value of range 1\n range2.axisFill.fillOpacity = 1;\n range2.axisFill.fill = amCore.color('#FFCC00');// amCore.color(\"#ffd740\");\n range2.axisFill.zIndex =-1;\n\n // Normal\n var range3 = axis2.axisRanges.create();\n range3.value = warnMin;// opts!.max -1000; // start value of range 1\n\n range3.endValue = warnMax;//signals[0].values[0].max; // end value of range 1\n range3.axisFill.fillOpacity = 1;\n range3.axisFill.fill = amCore.color(onColor);// amCore.color(\"#ffd740\");\n range3.axisFill.zIndex =-1;\n\n // Max Warning\n var range4 = axis2.axisRanges.create();\n range4.value = warnMax; //opts!.max -1000; // start value of range 1\n\n range4.endValue = criticalMax;// opts!.max;//signals[0].values[0].max; // end value of range 1\n range4.axisFill.fillOpacity = 1;\n range4.axisFill.fill = amCore.color('#FFCC00');// amCore.color(\"#ffd740\");\n range4.axisFill.zIndex =-1;\n\n // Max Critical\n var range5 = axis2.axisRanges.create();\n range5.value = criticalMax;// opts!.max -1000; // start value of range 1\n\n range5.endValue = opts!.max;//signals[0].values[0].max; // end value of range 1\n range5.axisFill.fillOpacity = 1;\n range5.axisFill.fill = amCore.color('#FF0000');// amCore.color(\"#ffd740\");\n range5.axisFill.zIndex =-1;\n } else {\n // Fill\n var range01 = axis2.axisRanges.create();\n range01.value = opts!.min; //signals[0].values[0].value; // start value of range 1\n\n range01.endValue = signals[0].values[0].value;//signals[0].values[0].max; // end value of range 1\n range01.axisFill.fillOpacity = 1;\n range01.axisFill.fill = amCore.color(onColor);\n range01.axisFill.zIndex =-1;\n\n // Remain\n var range02 = axis2.axisRanges.create();\n range02.value = signals[0].values[0].value;// start value of range 2\n\n range02.endValue = opts!.max; // end value of range 2\n range02.axisFill.fillOpacity = 1;\n range02.axisFill.fill = amCore.color(offColor);\n range02.axisFill.zIndex =-1;\n }\n\n /**\n * Label\n */\n let label = chart.radarContainer.createChild(amCore.Label);\n label.isMeasured = false;\n label.fontSize = 12;\n label.x = amCore.percent(50);\n label.y = amCore.percent(100);\n label.horizontalCenter = \"middle\";\n label.verticalCenter = \"bottom\";\n let val = signals[0].values[0].value;\n let count = 3\n var re = /[A-Za-z]/g;\n\n if(re.test(val.toString())) {\n val = 0\n } else {\n count = this.countDecimals(val);\n }\n \n\n if (count > 2){\n label.text = val.toFixed(2);\n } else {\n label.text = val.toFixed(count);\n }\n var label1 = chart.chartContainer.createChild(amCore.Label);\n label1.text = unit;\n label1.align = \"center\";\n label1.verticalCenter = \"bottom\";\n\n /**\n * Hand\n */\n\n let hand = chart.hands.push(new am4charts.ClockHand());\n hand.axis = axis2;\n hand.innerRadius = amCore.percent(40); \n hand.startWidth = 3;\n hand.pin.disabled = true;\n hand.fill = amCore.color(\"#000000\");\n hand.stroke = amCore.color(\"#000000\");\n\n if (signals[0].values[0].value >= opts!.max ) {\n hand.value = opts!.max;\n } else if (signals[0].values[0].value <= opts!.min) {\n hand.value = opts!.min;\n } else {\n hand.value = signals[0].values[0].value;\n }\n\n let title = chart.titles.create();\n title.text = name;\n title.fontSize = 10;\n title.marginBottom = 5;\n title.tooltipText = tooltipFormat;\n\n } \n\n private countDecimals(value: any) {\n if(Math.floor(value) === value) return 0;\n return value.toString().split(\".\")[1].length || 0; \n }\n\n public destroy() {\n this._chart.dispose();\n }\n}\n","import React, { useRef, useLayoutEffect } from \"react\";\n\nimport GaugeChart, { Options, Signal, Rules } from \"./Gauge\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { inputSignalMapper, signalLabel } from \"../common\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\ninterface Props extends CommonWidgetProps {\n signalRData?: any;\n settings?: Options;\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data,userPreferences) => ({\n signalId: meta.id,\n name: signalLabel(meta,userPreferences),\n values: [data[0]],\n color: meta.color,\n}));\n\nconst GaugeWidget: React.FC<Props> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const gaugeRef = useRef<GaugeChart>();\n\n const { signals, template, data, settings,state } = props;\n\n let signalList = createSignals(signals, template, data,state.temperature.value);\n\n /* updating with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n signalList = signalList.map((signal: Signal) => {\n if (props.signalRData.data.hasOwnProperty(signal.signalId)){\n signal.values[0].value = props.signalRData.data[signal.signalId][0].value\n signal.values[0].timestamp = new Date(props.signalRData.data[signal.signalId][0].bt - props.signalRData.data[signal.signalId][0].time)\n }\n return signal\n })\n }\n\n\n let rules: Rules = {\n criticalMax : -1,\n criticalMin : -1,\n warnMax : -1,\n warnMin : -1\n };\n\n if (signalList.length > 0) {\n for (let index = 0; index < template.rules.length; index++) {\n const element = template.rules[index];\n if (element.signalId === props.signals[0].id) {\n rules.criticalMax = element.criticalHigh!;\n rules.criticalMin = element.criticalLow!;\n rules.warnMax = element.warningHigh!;\n rules.warnMin = element.warningLow!;\n }\n }\n }\n\n useLayoutEffect(() => {\n if (node && data.size > 0 && signalList.length > 0) {\n const gauge = new GaugeChart(\n node,\n signalList,\n rules,\n settings,\n state.timezone\n );\n gaugeRef.current = gauge;\n return () => gauge.destroy();\n }\n }, [node, signals, rules, signalList, template, data, settings]);\n\n return <div style={{ height: \"95%\" }} ref={setNode} />;\n};\n\n// export default GaugeWidget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(GaugeWidget);\n","import React from \"react\";\nimport { Form, Row, Col, InputNumber, Card } from \"antd\";\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport { WidgetSignalId } from \"../../models\";\n\ntype Fields = Omit<Config, \"signals\"> & { signals: WidgetSignalId[] };\n\nfunction sanitizeInputs(f: Fields) : Config {\n return {\n title: f.title,\n settings: f.settings,\n type: \"gauge\",\n signals: f.signals\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Fields))}\n layout=\"vertical\"\n form={props.form}\n initialValues={ props.config }\n >\n <Card title=\"Gauge Widget Settings\">\n <WidgetTitleFormField />\n <Row justify=\"space-between\">\n <Col span={10}>\n <Form.Item name={[\"settings\", \"min\"]} label=\"Min Value\">\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10}>\n <Form.Item name={[\"settings\", \"max\"]} label=\"Max Value\">\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n <SignalSelectorList max={1} signals={props.template.signals} rules={props.template.rules} isColor={\"gauge\"} />\n </Card>\n </Form>\n );\n};\n\nexport default EditForm;\n","import React from \"react\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { connect } from \"react-redux\";\ninterface Props {\n signalRData: any;\n}\n\nconst Widget: React.FC<CommonWidgetProps & Props> = (props) => {\n return (\n <div style={{width:\"100%\",height:'100%',overflow:\"auto\",whiteSpace: 'pre-wrap', overflowWrap: 'break-word'}}>\n <p>{props?.informationValue}</p>\n </div>\n );\n};\n\n// export default Widget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(Widget);\n","import React from \"react\";\nimport { Form, Card,Input,Typography } from \"antd\";\n\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport TextArea from \"antd/lib/input/TextArea\";\nconst { Text } = Typography;\nfunction sanitizeInputs(c: Config): Config {\n //console.log(\"sanitizeInputs c\",c)\n return {\n title: c.title,\n signals: c.signals?.filter((s) => !!s),\n type: c.type?c.type:\"information\",\n informationValue:c.informationValue\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Information Widget Settings\">\n <WidgetTitleFormField />\n \n <Form.Item\n name=\"informationValue\"\n label=\"Enter Text here\"\n rules={[{ whitespace: true }]}\n >\n <TextArea maxLength={255} style={{ resize: 'none' }} rows={3}/>\n </Form.Item>\n <Form.Item\n name=\"warnintText\"\n rules={[{ whitespace: true }]}\n >\n <Text type=\"warning\">Maximum allowed text only 255 characters.</Text>\n </Form.Item>\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import {\n XYChart,\n DateAxis,\n ValueAxis,\n Legend,\n XYCursor,\n LineSeries,\n CircleBullet,\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\n\nimport {\n signalLabel,\n TOOLTIP_FORMAT,\n DATE_FORMAT,\n NUMBER_FORMAT,\n inputSignalMapper,\n findTimezone,\n} from \"../common\";\nimport { appConfigs } from \"../../../../utils/configurations\";\nimport { Template, WidgetFilterSetting, WidgetSignalId } from \"../../models\";\nimport { DataStore } from \"../../state\";\nimport moment from \"moment\";\n\nexport interface Options {\n axisRange?: AxisRange;\n rightYAxisRange?:AxisRange;\n enableRightYAxis?: boolean;\n}\n\nexport type TimeSeriesSignal = {\n name: string;\n color: string;\n units: string;\n values: Array<{ timestamp: Date; value: number }>;\n userPreference?: any;\n};\n\nconst createYAxisSignalSeries = inputSignalMapper((meta, data) => ({\n ...meta,\n values: data,\n}));\n\nclass LineChart {\n // private _chart: XYChart;\n private _chart: XYChart = {} as XYChart;\n private _timescaleAPIZooming: Function | undefined;\n private _widgetFilterSetting: WidgetFilterSetting | undefined;\n private count = 0 ;\n private timezone:any;\n constructor(ref: HTMLDivElement, series: TimeSeriesSignal[], rightAxisSeries:TimeSeriesSignal[], opts?: Options, timescaleAPIZooming?: Function, state?:any, widgetFilterSetting?: WidgetFilterSetting) {\n const chart = amCore.create(ref, XYChart);\n const xAxis = chart.xAxes.push(new DateAxis());\n xAxis.cursorTooltipEnabled = false;\n\n this.timezone = state.timezone;\n this._widgetFilterSetting = widgetFilterSetting;\n const yAxis = chart.yAxes.push(new ValueAxis());\n yAxis.cursorTooltipEnabled = false;\n yAxis.min = opts?.axisRange?.min;\n yAxis.max = opts?.axisRange?.max;\n\n //right value axis\n const rightYAxis = chart.yAxes.push(new ValueAxis());\n \n const cursor = (chart.cursor = new XYCursor());\n cursor.lineY.disabled = true;\n // Show only one tooltip\n // https://www.amcharts.com/docs/v4/concepts/chart-cursor/#Relation_to_series\n cursor.maxTooltipDistance = -1;\n\n chart.legend = new Legend();\n chart.legend.maxWidth = 1000000;\n chart.legend.useDefaultMarker = true;\n // chart.legend.labels.template.truncate = false;\n chart.legend.labels.template.maxWidth = 1000000;\n chart.legend.valueLabels.template.align = \"left\";\n chart.legend.valueLabels.template.textAlign = \"start\";\n chart.legend.contentAlign = \"left\"; \n chart.legend.itemContainers.template.paddingTop = 1;\n chart.legend.itemContainers.template.paddingBottom = 1;\n chart.legend.itemContainers.template.tooltipText = \"{name}\";\n\n chart.legend.markers.template.width = 15;\n chart.legend.markers.template.height = 15;\n\n chart.paddingLeft = 0;\n chart.marginLeft = 0;\n chart.marginTop = 12;\n \n chart.dateFormatter.dateFormat = DATE_FORMAT;\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n\n chart.cursor.behavior = 'zoomX';\n cursor?.events?.on('zoomended', function (ev: any) {\n let range = ev.target.xRange;\n if (range) {\n let xAxisTmp = ev.target.chart.xAxes.getIndex(0);\n let StartTime = xAxisTmp?.positionToDate(xAxisTmp?.toAxisPosition(range.start));\n let EndTime = xAxisTmp?.positionToDate(xAxisTmp?.toAxisPosition(range.end));\n if (timescaleAPIZooming) {\n timescaleAPIZooming(moment(StartTime), moment(EndTime))\n }\n }\n });\n\n this._chart = chart;\n this._timescaleAPIZooming = timescaleAPIZooming;\n \n series.forEach(this.addSeries);\n \n if(opts?.enableRightYAxis){\n rightYAxis.cursorTooltipEnabled = false;\n rightYAxis.min = opts?.rightYAxisRange?.min;\n rightYAxis.max = opts?.rightYAxisRange?.max;\n rightYAxis.renderer.opposite = true;\n rightAxisSeries.forEach(item=>this.addRightAxisSeries(item,rightYAxis))\n } \n \n // this.addDayNightXAxisShades();\n }\n addRightAxisSeries=(dataSeries: TimeSeriesSignal,rightYAxis:ValueAxis)=>{\n const series2 = new LineSeries();\n \n series2.dataFields = {\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n var tooltipDetails:any;\n if(dataSeries && dataSeries.values.length>0){\n tooltipDetails=findTimezone(this.timezone);\n }\n series2.data = dataSeries.values; \n series2.strokeWidth = 2;\n \n series2.stroke = dataSeries.color ? amCore.color(dataSeries.color) : amCore.color(appConfigs.colorCodes.colorCodesLineChart[this.count]);\n series2.fill = dataSeries.color ? amCore.color(dataSeries.color) : amCore.color(appConfigs.colorCodes.colorCodesLineChart[this.count]);\n \n series2.name = signalLabel(dataSeries,dataSeries.userPreference);\n // series2.tooltipText = \"{dateX}\" + \" \" + tooltipDetails?.timezone + \"\\n{name}: {valueY}\";\n let tooltip_text = `{dateX} ${this._widgetFilterSetting?.granularity === '1 Day' ? 'UTC' : tooltipDetails?.timezone} \\n{name}: {valueY}`;\n series2.tooltipText = (this._widgetFilterSetting === undefined || this._widgetFilterSetting?.granularity === 'Raw Data') ? tooltip_text : tooltip_text + ' (' + this._widgetFilterSetting?.aggregate + ')';\n \n \n series2.yAxis=rightYAxis;\n\n this._chart.series.push(series2);\n\n this.count++;\n }\n addSeries = (dataSeries: TimeSeriesSignal) => {\n\n const series = new LineSeries();\n \n series.dataFields = {\n valueY: \"value\",\n dateX: \"timestamp\",\n };\n series.data = dataSeries.values; \n series.strokeWidth = 2;\n var tooltipDetails:any;\n if(dataSeries && dataSeries.values.length>0){\n tooltipDetails=findTimezone(this.timezone);\n }\n series.stroke = dataSeries.color ? amCore.color(dataSeries.color) : amCore.color(appConfigs.colorCodes.colorCodesLineChart[this.count]);\n series.fill = dataSeries.color ? amCore.color(dataSeries.color) : amCore.color(appConfigs.colorCodes.colorCodesLineChart[this.count]);\n \n series.name = signalLabel(dataSeries,dataSeries.userPreference);\n // series.tooltipText = \"{dateX}\" + \" \" + tooltipDetails?.timezone + \"\\n{name}: {valueY}\";\n let tooltip_text = `{dateX} ${this._widgetFilterSetting?.granularity === '1 Day' ? 'UTC' : tooltipDetails?.timezone} \\n{name}: {valueY}`;\n series.tooltipText = (this._widgetFilterSetting === undefined || this._widgetFilterSetting?.granularity === 'Raw Data') ? tooltip_text : tooltip_text + ' ('+this._widgetFilterSetting?.aggregate+')';\n \n if (this._timescaleAPIZooming !== undefined) {\n let bullet = series.bullets.push(new CircleBullet());\n bullet.circle.stroke = amCore.color(\"#FFFFFF\"); // Optional: Style for the bullet's stroke (border)\n bullet.circle.strokeWidth = 0.1; // Optional: Stroke width\n bullet.circle.radius = 2; // Radius of the bullet\n }\n\n this._chart.series.push(series);\n\n this.count++;\n };\n addDayNightXAxisShades = () => {\n if (!this._chart || !this._chart.data || this._chart.data.length === 0) {\n console.warn(\"Chart data is empty or not initialized\");\n return;\n }\n \n const xAxis = this._chart.xAxes.getIndex(0);\n if (!xAxis) {\n console.warn(\"X-axis is not defined\");\n return;\n }\n \n let startDate = new Date(this._chart.data[0].timestamp);\n let endDate = new Date(this._chart.data[this._chart.data.length - 1].timestamp);\n \n while (startDate < endDate) {\n let range = xAxis.axisRanges.create() as any;\n range.date = new Date(startDate.setHours(20, 0, 0, 0)); // Start of night at 8 PM\n range.endDate = new Date(startDate.setHours(32, 0, 0, 0)); // End of night at 6 AM next day\n range.axisFill.fill = amCore.color(\"#000000\"); // Use a noticeable color for testing\n range.axisFill.fillOpacity = 0.5; // Use higher opacity for visibility\n range.grid.disabled = true;\n startDate.setDate(startDate.getDate() + 1);\n }\n \n this._chart.invalidateData();\n };\n \n\n\n\n destroy() {\n this._chart?.dispose();\n }\n}\n\nexport default LineChart;","import React, { useRef, useLayoutEffect } from \"react\";\nimport LineChart, { Options } from \"./LineChart\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nimport { CommonWidgetProps, LineWidgetProps, WidgetFilterSetting, WidgetSignalId } from \"../../models\";\nimport { inputSignalMapper } from \"../common\";\nimport { Empty } from \"antd\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\nconst createSignalSeries = inputSignalMapper((meta, data, userPreference) => ({\n ...meta,\n values: data,\n userPreference,\n}));\n\ninterface LineChartProps extends CommonWidgetProps,LineWidgetProps{\n signalRData?: any;\n settings?: Options;\n errorCode?: string;\n timescaleAPIZooming?: Function;\n widgetFilterSetting?: WidgetFilterSetting;\n}\n\nconst Widget: React.FC<LineChartProps> = (props) => {\n const chartRef = useRef<LineChart>();\n const [node, setNode] = useDomNode<HTMLDivElement>();\n\n const { template, data, signals, settings, rightYAxisSignals, rightYAxisData, signalRData, state } = props;\n\n // console.log(\"Line Char data\")\n // console.log(props)\n // console.log(template)\n // console.log(signals)\n // console.log(data)\n \n let leftAxis = createSignalSeries(signals, template, data,state.temperature.value)\n let rightAxis = createSignalSeries((rightYAxisSignals || []), template, rightYAxisData,state.temperature.value)\n \n /* updating leftAxis with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n leftAxis = leftAxis.map((signal: any) => {\n if (props.signalRData.data.hasOwnProperty(signal.id)) {\n props.signalRData.data[signal.id].slice().reverse().forEach((signalData: any, index: number) => {\n signal.values.push({\n timestamp: new Date(signalData.bt - signalData.time),\n value: signalData.value\n })\n });\n }\n return signal\n })\n }\n\n // /* updating rightAxis with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n rightAxis = rightAxis.map((signal: any) => {\n if (props.signalRData.data.hasOwnProperty(signal.id)) {\n props.signalRData.data[signal.id].slice().reverse().forEach((signalData: any, index: number) => {\n signal.values.push({\n timestamp: new Date(signalData.bt - signalData.time),\n value: signalData.value\n })\n });\n }\n return signal\n })\n }\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new LineChart(\n node,\n leftAxis,\n rightAxis,\n settings,\n props.timescaleAPIZooming,\n state,\n props.widgetFilterSetting\n );\n return () => chartRef.current?.destroy();\n }\n }, [node, signals, template, settings, data, rightYAxisSignals, rightYAxisData, leftAxis, rightAxis, props.signalRData.data]);\n\n if (props.errorCode === \"404\") {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />;\n } else if (props.errorCode === \"500\") {\n return <Empty description=\"signal Id is null\" />;\n } else {\n return <div style={{ height: \"100%\" }} ref={setNode} />;\n }\n};\n\n// export default Widget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(Widget);\n","import React, { useState } from \"react\";\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport { Form, Row, Col, InputNumber, Card,Switch,Select } from \"antd\";\nimport RightAxisSignals from \"./RightAxisSignals\";\nimport { truncate } from \"fs\";\n\nfunction sanitizeInputs(values: Config,enableRightYAxis:boolean): Config {\n return {\n title: values.title,\n settings: {...values.settings,...(!enableRightYAxis?{}:{enableRightYAxis:enableRightYAxis})},\n type: \"line\",\n signals: values.signals.filter((v) => !!v),\n rightYAxisSignals:values.rightYAxisSignals?.filter((v) => !!v)\n };\n}\n\nconst axisRangePath = (end: string) => [\"settings\", \"axisRange\", end];\nconst { Option } = Select;\nexport const EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"bar-chart-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config,props.enabledualaxis))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n \n >\n <Card title=\"Line Chart Settings\">\n <Row>\n <WidgetTitleFormField />\n </Row>\n <Row>\n <div style={{display:'flex',flexWrap:'nowrap',marginBottom:'10px'}}>\n <div style={{color:'#000000',fontSize:'14px'}}>Dual Axis?</div>\n <div style={{marginLeft:'10px'}}><Switch checked={props.enabledualaxis} onChange={props.onDualChange}/></div> \n </div>\n </Row>\n\n \n {/* \n */}\n {/* <Row> */}\n {/* <Form.Item\n label=\"Dual Axis?\"\n name=\"enableRightYAxis\"\n valuePropName=\"checked\"\n style={{height:'25px',width:'100px'}}\n >\n <div style={{width:'50px',display:'flex',marginTop:'-11px'}}>\n <Switch \n // checked={props.enabledualaxis}\n onChange={props.onDualChange}\n />\n </div>\n \n \n </Form.Item> */}\n \n {/* </Row> */}\n {/* </Col> */}\n \n \n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={10}>\n <Form.Item\n name={axisRangePath(\"min\")}\n label=\"Axis Min\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n <Col span={10} push=\"right\">\n <Form.Item\n name={axisRangePath(\"max\")}\n label=\"Axis Max\"\n rules={[{ type: \"number\" }]}\n >\n <InputNumber />\n </Form.Item>\n </Col>\n </Row>\n \n <SignalSelectorList max={6} signals={props.template.signals} rules= {[]} isColor={\"color\"}/>\n {\n props.enabledualaxis &&\n <RightAxisSignals max={6} signals={props.template.signals} rules= {[]} isColor={\"color\"}/>\n } \n \n \n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;","import React, { useState } from \"react\";\nimport { inputSignalMapper, signalLabel } from \"../common\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { ReactComponent as maximizeIcon } from \"../../../../assets/images/maximize.svg\";\nimport {\n Map,\n Marker,\n MapActions,\n} from \"../../../../sharedComponents/GoogleMap\";\nimport { toolTipForAsset } from \"./Tooltip\";\nimport MapPin from \"../../../../assets/images/map-pin.png\";\nimport { Tooltip, Button } from \"antd\";\nimport Icon, { BorderOuterOutlined } from \"@ant-design/icons\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\ninterface Signal {\n signalId: string;\n name: string;\n values: Array<{\n timestamp: Date;\n value: number;\n }>;\n}\n\nfunction assetToMarker(signals: Signal[], timezone?: any): Marker[] {\n\n if (!signals || signals.length === 0) {\n return [];\n }\n const latitude = signals.find((s) => s.name.toLowerCase().includes('latitude'));\n const longitude = signals.find((s) => s.name.toLowerCase().includes('longitude'));\n if (!latitude || !longitude) {\n return [];\n }\n const latitudeValues = latitude.values;\n const longitudeValues = longitude.values;\n const markers = latitudeValues\n .map((s, i) => {\n const lat = s?.value ?? 0;\n const timestamp = s?.timestamp ?? new Date();\n const lngData = longitudeValues[i];\n const lng = lngData?.value ?? 0;\n \n //console.log(`Processing marker ${i}: lat=${lat}, lng=${lng}`);\n // Skip markers where lat or lng is zero\n if (lat === 0 || lng === 0) {\n //console.log(`Skipping marker ${i}: lat=${lat}, lng=${lng}`);\n return null;\n }\n return {\n id: `${i}`,\n position: {\n lat: lat,\n lng: lng,\n },\n tooltip: toolTipForAsset({ lat, lng }, timestamp, undefined, timezone),\n icon: MapPin,\n } as Marker;\n })\n .filter((marker): marker is Marker => marker !== null); // Filter out null values\n //console.log(`Markers created: ${markers.length}`);\n return markers;\n}\nconst createSignals = inputSignalMapper<Signal>((meta, data) => ({\n signalId: meta.id,\n name: signalLabel(meta, false),\n values: data,\n}));\n\nconst Widget: React.FC<CommonWidgetProps> = (props) => {\n const { template, data, state } = props;\n let signals = createSignals(props.signals, template, data);\n const [mapActions, setMapActions] = useState<MapActions>();\n /* updating with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n signals = signals.map((signal: Signal) => {\n if (props.signalRData.data.hasOwnProperty(signal.signalId)) {\n props.signalRData.data[signal.signalId].forEach((signalData:any, index: number) => {\n signal.values.push({\n value: signalData.value,\n timestamp: new Date(signalData.bt - signalData.time)\n })\n });\n }\n return signal\n })\n }\n\n return (\n <div style={{ height: \"100%\", position: \"relative\" }}>\n {signals.length > 1 ? (\n <Map\n data-id=\"map-container\"\n markers={assetToMarker(signals,state.timezone)}\n clusterMarkers={false}\n mapActionsRef={setMapActions}\n mapOptions={{ mapTypeId: \"satellite\" }}\n polyline={true}\n drawOverlays={false}\n ></Map>\n ) : (\n <></>\n )}\n {signals.length > 1 ? (\n <Tooltip \n title=\"Zoom to Fit\" \n placement=\"left\"\n >\n <Button\n data-id=\"map-zoom-to-fit\"\n size=\"large\"\n shape=\"circle\"\n icon={<Icon component={maximizeIcon} style={{fontSize: 22, marginRight: 1, marginTop: 2 }} />}\n onClick={() => {\n //props.mapsAssetDrawerClose();\n if (mapActions) {\n mapActions.zoomToFit();\n }\n }}\n />\n </Tooltip> \n \n\n) : (\n <></>\n)}\n </div>\n );\n};\n\n// export default Widget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(Widget);","import React from \"react\";\nimport { Form } from \"antd\";\n\nimport { Signal } from \"../../models\";\nimport { SelectorList } from \"../../WidgetEditForm\";\n\ninterface Props {\n max?: number;\n signals: Signal[];\n}\n\nconst LocationSignalSelectorList: React.FC<Props> = (props) => {\n let signalArray: Signal[];\n signalArray =\n props.signals.filter(\n (s) =>\n s.name.toLowerCase().indexOf(\"longitude\") !== -1 ||\n s.name.toLowerCase().indexOf(\"latitude\") !== -1 \n ) || [];\n const selectable = signalArray.map((s) => ({\n value: s.id,\n label: s.name,\n }));\n\n return (\n <Form.Item\n label=\"Signals\"\n name=\"signals\"\n required\n rules={[\n {\n validator(rule, value) {\n return !value || value.filter((v: any) => !!v).length < 2\n ? Promise.reject(\"At least two valid signal must be specified\")\n : Promise.resolve();\n },\n },\n ]}\n >\n <SelectorList\n options={selectable}\n maxSelected={props.max}\n valueLabel=\"Signal\"\n />\n </Form.Item>\n );\n};\n\nexport default LocationSignalSelectorList;\n","import React from \"react\";\nimport { Form, Card } from \"antd\";\n\n\nimport {\n EditFormProps,\n WidgetTitleFormField,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\nimport LocationSignalSelectorList from \"./LocationSignalSelectorList\";\n\nfunction sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"map\",\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Location Widget Settings\">\n <WidgetTitleFormField />\n <LocationSignalSelectorList max={2} signals={props.template.signals} /> \n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import React, { useEffect, useReducer, useState } from \"react\";\nimport { List, Tooltip } from \"antd\";\nimport { findTimezone, formatDate, inputSignalMapper, signalLabel } from \"../common\";\nimport { CommonWidgetProps } from \"../../models\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\nimport { sign } from \"crypto\";\nimport { hexToString } from \"../../../../utils/commonHelpers\";\n\ninterface Props {\n signalRData: any;\n}\n\ninterface Signal {\n signalId: string;\n name: string;\n format: string;\n color: string;\n values: Array<{\n timestamp: Date;\n value: number | string | boolean;\n }>;\n}\n\nconst createSignals = inputSignalMapper<Signal>((meta, data, userPreference) => ({\n signalId: meta.id,\n name: signalLabel(meta, userPreference, false),\n format:meta.format,\n color: meta.color,\n values: [{ ...data[0] }],\n}));\n\nfunction formatNumber(n: number | string | boolean, type: string = ''): string | boolean {\n if (type.includes(\"latitude\") || type.includes(\"longitude\")) {\n return typeof n === \"number\" ? n.toFixed(10) : n;\n } else if (typeof n === \"string\" && (type.includes(\"IQAN Connect Key\") ||\n type.includes(\"text\"))) {\n // n = \"0x2a6d616554206948\"; \n // console.log(\"raw hex\", n);// \n //n= \"0x006d6165542069486d616554206948\"; // \n var msg = hexToString(n);\n\n msg = msg.substring(0, msg.length);\n // console.log(\"raw msg\", msg)\n // console.log(\"msg.length\", msg.length)\n \n // remove the deliminator from the singlast text frame\n if (type.includes(\"text\")) {\n \n if (msg.length <= 9) {\n const lastFrameStartPos = msg.length -9;\n // console.log(\"lastFrameStartPos\", lastFrameStartPos)\n const delimiterPos = msg.indexOf(\"*\", lastFrameStartPos);\n // console.log(\"delimiterPos\", delimiterPos)\n if (delimiterPos >=0) { // only applicable to singleframe, since multi-frame does not have delimiter,\n // therefore, multi-frame delimiterPos = -1\n msg = msg.substring(0, delimiterPos);\n } \n } \n }\n // console.log(\"msg before return\", msg)\n return msg;\n } else {\n return typeof n === \"number\" ? n.toFixed(2) : n;\n }\n}\n\nconst Widget: React.FC<CommonWidgetProps & Props> = (props) => {\n const { template, data, state } = props;\n let signals = createSignals(props.signals, template, data, state.temperature.value);\n\n /* updating with live value if present (SignalR) */\n if (Object.keys(props.signalRData.data).length > 0) {\n signals = signals.map((signal: Signal) => {\n if (props.signalRData.data.hasOwnProperty(signal.signalId)){\n signal.values[0].value = props.signalRData.data[signal.signalId][0].value\n signal.values[0].timestamp = new Date(props.signalRData.data[signal.signalId][0].bt - props.signalRData.data[signal.signalId][0].time)\n }\n return signal\n })\n }\n\n var details:any;\n if(signals.length>0){\n details=findTimezone(state.timezone);\n }\n return (\n <List\n dataSource={signals}\n renderItem={(signal) => (\n <List.Item>\n <List.Item.Meta title={signal.name} />\n <Tooltip\n //title={formatDate(signal.values[0].timestamp)}\n title={formatDate(signal.values[0].timestamp)+\" \".concat(details?.timezone)}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n >\n <div style={{color: signal.color }}>{formatNumber(signal.values[0].value, signal.name?.includes(\"IQAN Connect Key\")?signal.name:signal.format)}</div>\n </Tooltip>\n </List.Item>\n )}\n />\n );\n};\n\n// export default Widget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(Widget);\n","import React from \"react\";\nimport { Form, Card } from \"antd\";\n\nimport {\n EditFormProps,\n Container,\n WidgetTitleFormField,\n SignalSelectorList,\n} from \"../../WidgetEditForm\";\nimport { Config } from \".\";\n\nfunction sanitizeInputs(c: Config): Config {\n return {\n title: c.title,\n signals: c.signals.filter((s) => !!s),\n type: \"text\",\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) => props.onFinish(sanitizeInputs(values as Config))}\n layout=\"vertical\"\n form={props.form}\n initialValues={props.config}\n >\n <Card title=\"Text Widget Settings\">\n <WidgetTitleFormField />\n <SignalSelectorList max={10} signals={props.template.signals} rules= {[]} isColor={\"color\"}/>\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","import {\n XYChart,\n CategoryAxis,\n ValueAxis,\n StepLineSeries,\n XYCursor,\n} from \"@amcharts/amcharts4/charts\";\nimport * as amCore from \"@amcharts/amcharts4/core\";\n\nimport { AxisRange } from \"../models\";\nimport { NUMBER_FORMAT, DATE_FORMAT, findTimezone } from \"../common\";\n\nconst DISPLAY_COLORS = {\n critical: \"#d11515\",\n warning: \"#ecc800\",\n normal: \"#ccc\",\n info: \"#1890ff\"\n};\n\nexport interface Signal {\n signalId?: string;\n name: string;\n values: Array<{\n timestamp: Date;\n value: number;\n }>;\n}\ninterface Rule {\n criticalHigh?: number;\n warningHigh?: number;\n infoHigh?: number;\n infoLow?: number;\n warningLow?: number;\n criticalLow?: number;\n}\n\nexport interface Options {\n axisRange?: AxisRange;\n}\n\nexport interface Props {\n signal: Signal;\n rule?: Rule;\n opts?: Options;\n timezone?:any;\n}\n\nfunction createRange(axis: ValueAxis, from: number, to: number, color: string) {\n const range = axis.axisRanges.create();\n range.value = from;\n range.endValue = to;\n range.axisFill.fill = amCore.color(color);\n range.axisFill.fillOpacity = 0.8;\n range.grid.disabled = true;\n range.label.disabled = true;\n}\n\nfunction createRanges(axis: ValueAxis, rule?: Rule) {\n const maxValue = 100000;\n const minValue = -100000;\n\n if (!rule) {\n createRange(axis, minValue, maxValue, DISPLAY_COLORS.normal);\n return;\n }\n\n let { criticalHigh, warningHigh, criticalLow, warningLow, infoHigh, infoLow } = rule;\n\n if (criticalHigh) {\n createRange(axis, criticalHigh, maxValue, DISPLAY_COLORS.critical);\n } else {\n criticalHigh = maxValue;\n }\n\n if (warningHigh) {\n createRange(axis, warningHigh, criticalHigh, DISPLAY_COLORS.warning);\n } else {\n warningHigh = criticalHigh;\n }\n\n if(infoHigh) {\n createRange(axis, infoHigh, warningHigh, DISPLAY_COLORS.info);\n } else {\n infoHigh = warningHigh;\n }\n\n if (criticalLow) {\n createRange(axis, minValue, criticalLow, DISPLAY_COLORS.critical);\n } else {\n criticalLow = minValue;\n }\n\n if (warningLow) {\n createRange(axis, criticalLow, warningLow, DISPLAY_COLORS.warning);\n } else {\n warningLow = criticalLow;\n }\n\n if(infoLow) {\n createRange(axis, warningLow, infoLow, DISPLAY_COLORS.info);\n } else {\n infoLow = warningLow;\n }\n\n createRange(axis, infoLow, infoHigh, DISPLAY_COLORS.normal);\n}\n\nclass Bullet {\n private _bullet: StepLineSeries;\n\n constructor(c: XYChart, toolTipText?: string) {\n const bullet = c.series.push(new StepLineSeries());\n bullet.dataFields = {\n categoryY: \"name\",\n valueX: \"value\",\n dateX: \"timestamp\",\n };\n bullet.stroke = amCore.color(\"#000\");\n bullet.strokeWidth = 3;\n\n bullet.startLocation = 0.15;\n bullet.endLocation = 0.85;\n\n if (bullet.tooltip && toolTipText) {\n const tip = bullet.tooltip;\n tip.getFillFromObject = false;\n tip.background.fill = amCore.color(\"#FFF\");\n tip.label.fill = amCore.color(\"#000\");\n bullet.tooltipText = toolTipText;\n }\n\n this._bullet = bullet;\n }\n}\n\nclass Cursor {\n private _cursor: XYCursor;\n constructor(c: XYChart) {\n const cur = new XYCursor();\n cur.lineX.disabled = true;\n cur.lineY.disabled = true;\n this._cursor = cur;\n c.cursor = cur;\n }\n}\n\nfunction firstNumber(\n inp: Array<undefined | null | number>\n): number | undefined {\n for (const i of inp) {\n if (typeof i === \"number\") return i;\n }\n\n return undefined;\n}\n\nfunction lowerBound(opts?: Options, rule?: Rule) {\n return firstNumber([\n opts?.axisRange?.min,\n rule?.criticalLow,\n rule?.warningLow,\n rule?.infoLow,\n ]);\n}\n\nfunction upperBound(opts?: Options, rule?: Rule) {\n return firstNumber([\n opts?.axisRange?.max,\n rule?.criticalHigh,\n rule?.warningHigh,\n rule?.infoLow,\n ]);\n}\n\nclass TrackerChart {\n private _chart: XYChart;\n private _bullet: Bullet;\n private _cursor: Cursor;\n\n constructor(\n ref: HTMLDivElement,\n signal: Signal,\n rule?: Rule,\n opts?: Options,\n timezone?:any\n ) {\n const chart = (this._chart = amCore.create(ref, XYChart));\n chart.data = [{ ...signal.values[0], name: signal.name }];\n // let tooltip= findTimezone(timezone);\n const yAxis = chart.yAxes.push(new CategoryAxis());\n yAxis.dataFields.category = \"name\";\n yAxis.renderer.grid.template.disabled = true;\n yAxis.renderer.labels.template.disabled = true;\n yAxis.cursorTooltipEnabled = false;\n\n const xAxis = chart.xAxes.push(new ValueAxis());\n xAxis.renderer.grid.template.disabled = true;\n xAxis.renderer.baseGrid.disabled = true;\n xAxis.renderer.fill = amCore.color(DISPLAY_COLORS.normal);\n xAxis.cursorTooltipEnabled = false;\n xAxis.min = lowerBound(opts, rule);\n xAxis.max = upperBound(opts, rule);\n xAxis.paddingLeft = 3;\n createRanges(xAxis, rule);\n\n chart.numberFormatter.numberFormat = NUMBER_FORMAT;\n chart.dateFormatter.dateFormat = DATE_FORMAT;\n\n this._cursor = new Cursor(chart);\n let tooltip= findTimezone(timezone);\n this._bullet = new Bullet(chart, \"{dateX}\"+\" \"+tooltip?.timezone+\"\\n{name}: {valueX}\");\n }\n\n public destroy() {\n this._chart?.dispose();\n }\n}\n\nexport default TrackerChart;\n","import React, { useRef, useLayoutEffect, useMemo } from \"react\";\n\nimport TrackerChart, { Props as TrackerProps } from \"./TrackerChart\";\nimport { CommonWidgetProps, SignalId } from \"../../models\";\nimport { AxisRange } from \"../models\";\nimport { signalLabel } from \"../common\";\nimport useDomNode from \"../../../../lib/use-dom-node\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../../actions\";\n\nexport interface SignalOpts {\n signalId: SignalId;\n opts: {\n axisRange?: AxisRange;\n };\n}\n\nconst TrackerComponent: React.FC<TrackerProps> = (props) => {\n const [node, setNode] = useDomNode<HTMLDivElement>();\n const chartRef = useRef<TrackerChart>();\n const { signal, rule, opts, timezone } = props;\n\n useLayoutEffect(() => {\n if (node) {\n chartRef.current = new TrackerChart(node, signal, rule, opts, timezone);\n return () => chartRef.current?.destroy();\n }\n }, [node, signal, rule, opts,timezone.value]);\n\n return (\n <>\n <span>{props.signal.name}</span>\n <div style={{ height: \"100%\" }} ref={setNode} />\n </>\n );\n};\n\nfunction useTrackerProps({\n template,\n data,\n state,\n signals,\n settings,\n signalRData,\n}: TrackerWidgetProps): TrackerProps[] {\n return useMemo(() => {\n let result: TrackerProps[] = [];\n\n for (let id of signals) {\n const datapts = data.get(id.id);\n const metadata = template.signals.find((s) => s.id === id.id);\n if (datapts && metadata) {\n result.push({\n signal: {\n signalId: id.id,\n name: signalLabel(metadata,state.temperature.value, false),\n values: datapts ? [{ ...datapts[0] }] : [{ ...{ value: 0, timestamp: new Date() } }],\n },\n rule: template.rules && template.rules.length > 0 ? template.rules.find((r) => r.signalId === id.id): undefined,\n opts: settings && settings.length > 0 ? settings?.find((s) => s.signalId === id.id)?.opts: undefined,\n });\n }\n }\n\n\n /* updating with live value if present (SignalR) */\n if (Object.keys(signalRData?.data).length > 0) {\n result = result.map((obj: TrackerProps) => {\n if (obj.signal?.signalId) {\n if (signalRData.data.hasOwnProperty(obj.signal?.signalId)) {\n obj.signal.values[0].value = signalRData.data[obj.signal?.signalId][0].value\n obj.signal.values[0].timestamp = new Date(signalRData.data[obj.signal?.signalId][0].bt - signalRData.data[obj.signal?.signalId][0].time)\n }\n }\n return obj\n })\n }\n\n return result;\n }, [template, data, signals, settings, signalRData]);\n}\n\nexport interface TrackerWidgetProps extends CommonWidgetProps {\n settings?: SignalOpts[];\n signalRData?: any;\n}\n\nconst TrackerWidget: React.FC<TrackerWidgetProps> = (props) => {\n const settings = useTrackerProps(props);\n return (\n <>\n {settings.map((s, i) => (\n <div key={i} style={{ height: \"85px\" }}>\n <TrackerComponent {...s}{...props.state} />\n </div>\n ))}\n </>\n );\n};\n\n// export default TrackerWidget;\nconst mapStateToProps = (state: any) => {\n return {\n signalRData: state.contextReducer.signalRData,\n };\n};\nexport default connect(\n mapStateToProps,\n // actions\n)(TrackerWidget);\n\n","import React, { useCallback, useMemo } from \"react\";\nimport { Row, Col, Button, Form, Select, InputNumber } from \"antd\";\nimport { MinusCircleOutlined } from \"@ant-design/icons\";\n\nimport { SignalId } from \"../../models\";\n\nexport interface TrackerSignalField {\n id?: SignalId;\n max?: number;\n min?: number;\n}\n\ninterface Option {\n value: SignalId;\n label: string;\n}\n\ninterface TrackerSignalSelectorProps {\n options: Option[];\n onChange: (f: TrackerSignalField) => void;\n value: TrackerSignalField;\n showLabels?: boolean;\n onDelete: () => void;\n}\n\nconst TrackerSignalSelect: React.FC<TrackerSignalSelectorProps> = (props) => {\n const label = (l: string) => (props.showLabels ? l : undefined);\n\n const { onChange } = props;\n\n const triggerChange = useCallback(\n (field: TrackerSignalField) => {\n if (onChange) onChange(field);\n },\n [onChange]\n );\n\n return (\n <Row gutter={6}>\n <Col span={16}>\n <Form.Item label={label(\"Signal\")} required>\n <Select\n showSearch\n options={props.options}\n suffixIcon={<MinusCircleOutlined onClick={props.onDelete} />}\n onChange={(value: SignalId) =>\n triggerChange({ ...props.value, id: value })\n }\n value={props.value.id}\n optionFilterProp={'label'}\n />\n </Form.Item>\n </Col>\n <Col span={4}>\n <Form.Item label={label(\"Min\")}>\n <InputNumber\n onChange={(value) =>\n triggerChange({ ...props.value, min: value as number })\n }\n value={props.value.min}\n style={{ width: \"100%\" }}\n placeholder=\"Min\"\n />\n </Form.Item>\n </Col>\n <Col span={4}>\n <Form.Item label={label(\"Max\")} rules={[{ type: \"number\" }]}>\n <InputNumber\n onChange={(value) =>\n triggerChange({\n ...props.value,\n max: value as number,\n })\n }\n value={props.value.max}\n style={{ width: \"100%\" }}\n placeholder=\"Max\"\n />\n </Form.Item>\n </Col>\n </Row>\n );\n};\n\ntype Value = Array<TrackerSignalField>;\n\ninterface TrackerSignalSelectorListProps {\n options: Option[];\n value?: Value;\n onChange?: (value: Value) => void;\n max?: number;\n}\n\nconst TrackerSignalSelectorList: React.FC<TrackerSignalSelectorListProps> = (\n props\n) => {\n // Must be optional to play nice with Ant Design's forms but won't\n // actually work without them\n const assertDefined = (propName: keyof TrackerSignalSelectorListProps) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n\n const { value = [], onChange } = props;\n const selectedSignalIds = value\n .filter((v) => !!v)\n .map((v) => (v as TrackerSignalField).id);\n\n const filteredOptions = (v?: TrackerSignalField) => {\n return props.options.filter(\n (opt) => !selectedSignalIds.includes(opt.value) || opt.value === v?.id\n );\n };\n\n const { add, remove, update } = useMemo(() => {\n const triggerChange = (newValue: Value) => {\n if (onChange) onChange(newValue);\n };\n\n return {\n add() {\n triggerChange(value.concat({}));\n },\n remove(i: number) {\n triggerChange([...value.slice(0, i), ...value.slice(i + 1)]);\n },\n update(index: number, updatedValue: TrackerSignalField) {\n triggerChange(value.map((v, i) => (i === index ? updatedValue : v)));\n },\n };\n }, [onChange, value]);\n\n const maxReached = !!props.max && value.length >= props.max;\n\n return (\n <div>\n {value.map((v, i) => (\n <TrackerSignalSelect\n key={i}\n options={filteredOptions(v)}\n onDelete={() => remove(i)}\n showLabels={i === 0}\n onChange={(v) => update(i, v)}\n value={v}\n />\n ))}\n <Button\n style={{ width: \"100%\" }}\n type=\"dashed\"\n disabled={maxReached}\n onClick={add}\n >\n {maxReached ? \"Max Signals Added\" : \"Add Signal\"}\n </Button>\n </div>\n );\n};\n\nexport default TrackerSignalSelectorList;\n","import React from \"react\";\nimport { EditFormProps } from \"../../WidgetEditForm/EditFormContainer\";\nimport { WidgetTitleFormField, Container } from \"../../WidgetEditForm\";\nimport { SignalId } from \"../../models\";\nimport { Config } from \".\";\nimport { Form, Card, Row, Col } from \"antd\";\nimport TrackerSignalSelectorList, {\n TrackerSignalField,\n} from \"./TrackerSignalSelectorList\";\nimport { SignalOpts } from \"./Widget\";\n\ninterface Fields {\n signals: { id: SignalId; min?: number; max?: number }[];\n title: string;\n}\n\nfunction parseOptions(signalFields: Fields[\"signals\"]): Config[\"settings\"] {\n return signalFields\n .filter((s) => s.min !== undefined || s.max !== undefined)\n .map((s) => ({\n signalId: s.id,\n opts: {\n axisRange: {\n min: s.min,\n max: s.max,\n },\n },\n }));\n}\n\nfunction sanitizeInputs(f: Fields): Config {\n const validSignals = f.signals.filter((s) => !!s.id);\n\n return {\n title: f.title,\n signals: validSignals.map((s) => { return { id: s.id, color: \"#000000\"}}),\n type: \"tracker\",\n settings: parseOptions(validSignals),\n };\n}\n\nfunction populateSignals(\n signals: Config[\"signals\"],\n opts: Config[\"settings\"]\n): Fields[\"signals\"] {\n return signals.map((id) => {\n let currentOpt: SignalOpts | undefined;\n if(Array.isArray(opts)) {\n currentOpt = opts?.find((opt) => opt.signalId === id.id);\n } \n \n const result = {\n id: id.id,\n min: currentOpt?.opts.axisRange?.min,\n max: currentOpt?.opts.axisRange?.max,\n };\n return result;\n });\n}\n\nfunction populateForm(c?: Config): Fields | undefined {\n if (!c) return undefined;\n\n return {\n title: c.title,\n signals: populateSignals(c.signals, c.settings),\n };\n}\n\nconst EditForm: React.FC<EditFormProps> = (props) => {\n const initialVals = populateForm(props.config as Config);\n\n return (\n <div className=\"tracker-widget-edit-form\">\n <Form\n layout=\"vertical\"\n onFinish={(fields) => props.onFinish(sanitizeInputs(fields as Fields))}\n form={props.form}\n initialValues={initialVals}\n >\n {/* <Container title=\"Tracker Widget Settings\">\n <WidgetTitleFormField />\n </Container> */}\n <Card title=\"Tracker Widget Settings\">\n <Row style={{ width: \"95%\" }}>\n <Col span={20}>\n <WidgetTitleFormField />\n </Col>\n </Row> \n <Form.Item\n name=\"signals\"\n rules={[\n {\n validator(rule, value) {\n return !value ||\n value.filter((v: TrackerSignalField) => !!v.id).length < 1\n ? Promise.reject(\"At least on valid signal must be selected\")\n : (value.filter((v: TrackerSignalField) => (v.min && v.max && v.min > v.max)).length > 0\n ? Promise.reject(\"Min value must be less than, or equal to, Max value\")\n : Promise.resolve());\n },\n },\n ]}\n >\n <TrackerSignalSelectorList\n options={props.template.signals.map((s) => ({\n value: s.id,\n label: s.name,\n }))}\n max={7} \n />\n </Form.Item>\n </Card>\n </Form>\n </div>\n );\n};\n\nexport default EditForm;\n","\r\nimport Widget from './Widget';\r\nimport EditForm from \"./BarChartEditForm\";\r\nimport { WidgetDetails } from \"../models\";\r\nimport { CommonWidgetConfig } from \"../../models\";\r\nimport { Options } from './BarChartClass';\r\n\r\nexport type Config = CommonWidgetConfig & { type: \"bar\"; settings?: Options };\r\n\r\nexport type BarOptions = Options;\r\n\r\nconst details: WidgetDetails = { type: \"bar\", name: \"Bar Chart\" };\r\n\r\nexport { Widget, details, EditForm };","import Widget from './GaugeWidget';\nimport EditForm from './Editform';\nimport { WidgetDetails } from '../models';\nimport { CommonWidgetConfig } from '../../models';\nimport { Options } from './Gauge';\n\nexport type Config = CommonWidgetConfig & { type: \"gauge\"; settings?: Options };\n\nexport type GaugeOptions = Options;\n\nconst details: WidgetDetails = { type: \"gauge\", name: \"Gauge Widget\"}\n\nexport { Widget, details, EditForm };\n\n","import { WidgetDetails } from '../models';\nimport { CommonWidgetConfig, LineWidgetConfig, WidgetSignalId } from '../../models';\nimport { Options } from './LineChart';\nimport Widget from './Widget';\nimport EditForm from './EditForm';\n\nexport const details: WidgetDetails = {\n type: \"line\",\n name: \"Line Chart\"\n}\n\nexport type LineOptions= Options;\n\nexport type Config = CommonWidgetConfig & {\n type: \"line\";\n settings?: Options; \n};\n\n\nexport { EditForm, Widget}","import { CommonWidgetConfig } from '../../models';\nimport { WidgetDetails } from '../models';\nimport EditForm from './EditForm';\nimport Widget from './Widget';\n\nexport const details: WidgetDetails = {\n type: \"chat\",\n name: \"Chat History\"\n}\n\nexport type Config = CommonWidgetConfig & {\n type: \"chat\";\n};\n\n\nexport { EditForm, Widget };\n","import { CommonWidgetConfig } from '../../models';\nimport { WidgetDetails } from '../models';\nimport Widget from './Widget'\nimport EditForm from './EditForm';\n\nexport type Config = CommonWidgetConfig & { type: \"text\" };\n\nexport const details: WidgetDetails = {\n type: \"text\",\n name: \"Text Widget\"\n}\n\nexport { EditForm, Widget }","import { CommonWidgetConfig } from '../../models';\nimport { WidgetDetails } from '../models';\nimport EditForm from './EditForm';\nimport Widget from './Widget';\n\nexport type Config = CommonWidgetConfig & { type: \"command\" };\n\nexport const details: WidgetDetails = {\n type: \"command\",\n name: \"Command Widget\"\n }\n \n export { EditForm, Widget };\n","import { CommonWidgetConfig } from '../../models';\nimport { WidgetDetails } from '../models';\nimport EditForm from './EditForm';\nimport Widget from './Widget';\n\nexport type Config = CommonWidgetConfig & { type: \"command2\" };\n\nexport const details: WidgetDetails = {\n type: \"command2\",\n name: \"Command Widget\"\n }\n \n export { EditForm, Widget };\n\n","import { WidgetDetails } from \"../models\";\nimport { CommonWidgetConfig } from \"../../models\";\nimport Widget, { SignalOpts } from \"./Widget\";\nimport EditForm from \"./EditForm\";\n\nexport const details: WidgetDetails = {\n type: \"tracker\",\n name: \"Tracker Widget\",\n};\nexport type TrackerOptions = SignalOpts;\n\nexport type Config = CommonWidgetConfig & {\n type: \"tracker\";\n settings?: SignalOpts[];\n};\n\nexport { EditForm, Widget };\n","import React from \"react\";\nimport { CommonWidgetConfig } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport Widget from \"./Widget\";\nimport EditForm from './EditForm';\n\nexport const details: WidgetDetails = {\n type: \"map\",\n name: \"Location Widget\",\n};\n\nexport type Config = CommonWidgetConfig & {\n type: \"map\";\n};\n\nexport { Widget, EditForm };\n","import React from \"react\";\nimport { CommonWidgetConfig } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport Widget from \"./Widget\";\nimport EditForm from './EditForm';\n\nexport const details: WidgetDetails = {\n type: \"map events\",\n name: \"GPS Events Widget\",\n};\n\nexport type Config = CommonWidgetConfig & {\n type: \"map events\";\n};\n\nexport { Widget, EditForm };\n","import { CommonWidgetConfig, CommonWidgetProps } from \"../../models\";\nimport { WidgetDetails } from \"../models\";\nimport { Options } from './ClusterBarChart';\nimport Widget from './Widget';\nimport { EditForm } from \"./ClusterBarChartEditForm\";\n\nexport type ClusterBarOptions = Options;\n\nexport type Config = CommonWidgetConfig & { type: \"clusterbar\"; settings?: Options };\n\nexport type Props = CommonWidgetProps & { settings?: Options };\n\nexport const details: WidgetDetails = {\n type: \"clusterbar\",\n name: \"Cluster Bar Widget\",\n};\n\nexport { EditForm, Widget}\n\n\n\n\n","import { CommonWidgetConfig,InformationWidgetConfig } from '../../models';\nimport { WidgetDetails } from '../models';\nimport Widget from './Widget'\nimport EditForm from './EditForm';\n\nexport type Config = CommonWidgetConfig & InformationWidgetConfig & { type: \"information\" };\n\nexport const details: WidgetDetails = {\n type: \"information\",\n name: \"Information Widget\"\n}\n\nexport { EditForm, Widget }","import { isNumber } from \"@amcharts/amcharts4/core\";\r\nimport { DeleteOutlined, EditOutlined, FilterOutlined, LoadingOutlined, ReloadOutlined } from \"@ant-design/icons\";\r\nimport { Button, Col, Collapse, DatePicker, message, Popconfirm, Popover, Radio, Row, Select, Space, Tooltip } from \"antd\";\r\nimport moment, { Moment } from 'moment';\r\nimport 'moment-timezone';\r\nimport React, { useEffect, useState } from \"react\";\r\nimport tzlookup from \"tz-lookup\";\r\nimport * as XLSX from 'xlsx';\r\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\r\nimport {\r\n\tgetAvailableGranularity,\r\n\tgetTimescaleFilterText,\r\n\tloadingIndicatorEnd,\r\n\tloadingIndicatorStart,\r\n} from \"../../utils/commonHelpers\";\r\nimport { State } from \"../Dashboard2/state\";\r\nimport * as Api from \"./api\";\r\nimport { LineWidgetSignalsConfigs, SignalCollectionId, SignalDatapoint, SignalId } from \"./models\";\r\nimport { DataStore, WidgetState } from \"./state\";\r\nimport \"./WidgetContainer.css\";\r\n\r\nconst { Option } = Select;\r\nconst { RangePicker } = DatePicker;\r\nconst { Panel } = Collapse;\r\n\r\ninterface WidgetHeaderProps {\r\n\tonRefresh: () => void;\r\n\tonFilter: () => void;\r\n\tonExport: () => void;\r\n\tisLoading: boolean;\r\n\twidgetState: WidgetState;\r\n\tstate: State;\r\n\tdata: DataStore;\r\n\trightYAxisData: DataStore;\r\n\tuserRole: string;\r\n\tisCreate: boolean;\r\n\tisRead: boolean;\r\n\tisUpdate: boolean;\r\n\tisDelete: boolean;\r\n\tnewWidgetHeader: boolean;\r\n\tsetNewWidgetHeader: Function;\r\n\tsetRightAxisData: Function;\r\n\tsetData: Function;\r\n\trefreshData: boolean;\r\n\tsetLoading: Function;\r\n\tzoomedTime: [Moment, Moment];\r\n\tfilterSetting: Function;\r\n\tsetInitiallyLoaded: Function;\r\n\tinitiallyLoaded: Boolean;\r\n\ttemperatureUnit: string;\r\n\t[x:string]: any;\r\n\ttimezoneChanged?: any;\r\n}\r\n\r\ninterface WidgetControlProps {\r\n\tonEdit: () => void;\r\n\tonDelete: () => void;\r\n\tonFilter: () => void;\r\n\tonExport: () => void;\r\n\tuserRole: string;\r\n\tisCreate: boolean;\r\n\tisRead: boolean;\r\n\tisUpdate: boolean;\r\n\tisDelete: boolean;\r\n\tassetDetails?: any;\r\n}\r\n\r\nconst WidgetHeaderNew: React.FC<WidgetControlProps & WidgetHeaderProps> = (\r\n\tprops\r\n) => {\r\n\r\n\tlet sysSetting = JSON.parse(props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'Enable Timescale Search Mode')[0].settingSpecs)\r\n\r\n\tconst isNotMapWidget = !props.widgetState.type.includes('map') ? true : false \r\n\tconst isBatterySignal = ShowFilters([\"battery level\"], [\"%\"])\r\n\tconst [timeRangeValue, setTimeRangeValue] = useState<string>(Array.isArray(props.zoomedTime) ? `${props.zoomedTime[0].format('MM/DD/YY HH:mma')} - ${props.zoomedTime[1].format('MM/DD/YY HH:mma')}` : props.zoomedTime);\r\n\tconst [exportData, setExportData] = useState<boolean>(false);\r\n\tconst [granularity, setGranularity] = useState<string>(isNotMapWidget ? \"Automatic\" : \"Raw Data\");\r\n\tconst [granularityDisplay, setGranularityDisplay] = useState<string>(isNotMapWidget ? \"30 Minute\" : \"Raw Data\");\r\n\tconst [aggregation, setAggregation] = useState<string>(\"Max\");\r\n\tconst [customFilters, setCustomFilters] = useState<string[]>([]); //[\"Hide Zeros\"]\r\n\tconst [rangeSelectorVisible, setRangeSelectorVisible] = useState<boolean>(false);\r\n\tconst [rangeDisplayName, setRangeDisplayName] = useState<string>(`${timeRangeValue}${isNotMapWidget ? ` (${granularityDisplay} | ${aggregation})` : `` }`);\r\n\tconst [customDateRange, setCustomDateRange] = useState<any>(props.zoomedTime);\r\n\tconst [availableGranularity, setAvailableGranularity] = useState<any>(getAvailableGranularity(props.zoomedTime, 'Latest 24 hours', sysSetting.applyLimits));\r\n\tconst [sysTimescaleSetting, setSysTimescaleSetting] = useState<any>(sysSetting);\r\n\tconst [originalTimescaleData, setOriginalTimescaleData] = useState<any>();\r\n\tconst [timescaleTimezone, setTimescaleTimezone] = useState<any>(props.state.timezone.value);\r\n\tconst [widgetsSignalsData, setWidgetsSignalsData] = useState<LineWidgetSignalsConfigs[]>();\r\n\r\n\tconst temperatureFUnitsArray = ['°F', 'Deg F', 'Degrees F'];\r\n\tconst temperatureCUnitsArray = ['°C', 'Deg C', 'Degrees C'];\r\n\tuseEffect(() => {\r\n\t\tif (props.initiallyLoaded) {\r\n\t\t\trefreshChart()\r\n\t\t}\r\n\t}, [props.refreshData])\r\n\r\n\tuseEffect(() => {\r\n\t\tif (props.initiallyLoaded) {\r\n\t\t\tsetCustomDateRange([props.zoomedTime[0], props.zoomedTime[1]])\r\n\t\t\tsetTimeRangeValue('Custom')\r\n\t\t\t// const diffInHours = props.zoomedTime[1].diff(props.zoomedTime[0], 'hours')\r\n\t\t\t// console.log('diffInHours: ' + diffInHours)\r\n\t\t}\r\n\r\n\t\tsetGranularity('Automatic')\r\n\t\tassignFilterDisplayAndReloadData(props.zoomedTime, Array.isArray(props.zoomedTime) ? 'Custom' : props.zoomedTime, aggregation, granularity, isNotMapWidget, 'Automatic', props.initiallyLoaded ? 'user_zoomed' : 'initial_loading')\r\n\t\tprops.setInitiallyLoaded(true)\r\n\t}, [props.zoomedTime])\r\n\r\n\t\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\t\r\n\t\tlet assetTimezone = false;\r\n\t\t\r\n\t\tif (timescaleTimezone != props.state.timezone.value) {\r\n\t\t\tif (props.state.timezone.value == \"asset\" && props.state.timezone.isGpsSignalAvailable) {\r\n\t\t\t\tif(props.state.timezone.coordinates.latitude && props.state.timezone.coordinates.longitude){\r\n\t\t\t\t\tassetTimezone = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet convertedData=convertTimestamp(originalTimescaleData,assetTimezone,widgetsSignalsData, props.initiallyLoaded ? 'user_zoomed' : 'initial_loading', granularityDisplay === 'Click to Filter' ? 'Raw Data' : granularityDisplay.includes('1 Day') ? '1 Day' : findAggAbbrev(aggregation));\r\n\t\t\t\tsetTimescaleTimezone(props.state.timezone.value);\r\n\t\t\t\tprops.setData(convertedData[0])\r\n\t\t\t\tif (convertedData[1].size > 0) {\r\n\t\t\t\t\tprops.setRightAxisData(convertedData[1])\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t} else {\r\n\t\t\t\t\r\n\t\t\t\tsetTimescaleTimezone(props.state.timezone.value);\r\n\t\t\t\tif (originalTimescaleData) {\r\n\t\t\t\t\tlet convertedData=convertTimestamp(originalTimescaleData,assetTimezone,widgetsSignalsData, props.initiallyLoaded ? 'user_zoomed' : 'initial_loading', granularityDisplay === 'Click to Filter' ? 'Raw Data' : granularityDisplay.includes('1 Day') ? '1 Day' : findAggAbbrev(aggregation));\r\n\t\t\t\t\tprops.setData(convertedData[0])\r\n\t\t\t\t\tif (convertedData[1].size > 0) {\r\n\t\t\t\t\t\tprops.setRightAxisData(convertedData[1])\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t},[props.state.timezone.value]);\t\r\n\r\n\tuseEffect(() => {\r\n\t\tisBatterySignal ? setCustomFilters([\"Hide Zeros\"]) : setCustomFilters([])\r\n\t}, [isBatterySignal])\r\n\t\r\n\tfunction ShowFilters(filterSignals: String[], filterUnits: String[]): Boolean {\r\n\t\tconst { data, assetDetails } = props;\r\n\t\tconst { datapoints } = assetDetails;\r\n\t\tconst signalIds = data.keys();\r\n\t\tconst collections = JSON.parse(datapoints);\r\n\r\n\t\tlet include = false;\r\n\t\tlet signal = signalIds.next().value;\r\n\t\twhile (signal) {\r\n\t\t\tcollections?.forEach((c: any) => c.values?.forEach((v: any) => {\r\n\t\t\tif (v._id == signal && filterSignals.includes(v.label.toLowerCase()) && filterUnits.includes(v.unit)) {\r\n\t\t\t include = true;\r\n\t\t\t}\r\n\t\t }))\r\n\t\r\n\t\t signal = signalIds.next().value;\r\n\t\t}\r\n\t\treturn include;\r\n\t}\r\n\t\r\n\r\n\tfunction confirm(e: any) {\r\n\t\tprops.onDelete();\r\n\t}\r\n\tfunction cancel(e: any) { }\r\n\r\n\tfunction switchSearchMode(e: any) {\r\n\t\tprops.setNewWidgetHeader(!props.newWidgetHeader);\r\n\t}\r\n\r\n\r\n\tfunction passWidgetFiltersToChart(aggregate:string, granularity: string ) {\r\n\t\tprops.filterSetting({aggregate: aggregate, granularity: granularity});\r\n\t}\r\n\r\n\tconst refreshChart = () => {\r\n\t\tassignFilterDisplayAndReloadData(customDateRange, timeRangeValue, aggregation, granularity, isNotMapWidget, granularity, Array.isArray(props.zoomedTime) ? 'user_zoomed' : granularityDisplay === 'Click to Filter' ? 'initial_loading' : 'user_filter')\r\n\t};\r\n\r\n\tconst onVisibleChange = (visible: any) => {\r\n\t\tsetRangeSelectorVisible(visible);\r\n\t};\r\n\r\n\tconst convertIfTemperatureUnits = (signalValue: any, signalUnit: string) => {\r\n\r\n\t\tif (typeof signalUnit === 'string' && (temperatureFUnitsArray.some(substring => signalUnit.includes(substring)) || temperatureCUnitsArray.some(substring => signalUnit.includes(substring)) || signalUnit === 'C' || signalUnit === 'F') && isNumber(signalValue)) {\r\n\t\t\tif (\r\n\t\t\t\t(temperatureFUnitsArray.some(substring => signalUnit.includes(substring)) || signalUnit === 'F') &&\r\n\t\t\t\tprops.temperatureUnit != null &&\r\n\t\t\t\tprops.temperatureUnit === \"°C\"\r\n\t\t\t) {\r\n\t\t\t\tsignalValue = ((signalValue - 32) * 5) / 9;\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\t(temperatureCUnitsArray.some(substring => signalUnit.includes(substring)) || signalUnit === 'C') &&\r\n\t\t\t\t(props.temperatureUnit === \"°F\" ||\r\n\t\t\t\t\tprops.temperatureUnit == null ||\r\n\t\t\t\t\tprops.temperatureUnit === undefined)\r\n\t\t\t) {\r\n\t\t\t\tsignalValue = (signalValue * 9) / 5 + 32;\r\n\t\t\t}\r\n\t\t\r\n\t\t\treturn signalValue\r\n\t\t}\r\n\r\n\t\treturn signalValue\r\n\r\n\r\n\t};\r\n\r\n\tconst convertTimestamp = (data: any, assetTimezone: any, widgetsSignals: any, loadingType?: any, rangeTypeParam?: string, aggType?: string) => {\r\n\t\t\r\n\t\tlet respData: any = []\r\n\t\tlet indexMappingOfAggRespArray: string | number = 'value'\r\n\r\n\t\twidgetsSignals.forEach((SignalDetail: any) => {\r\n\t\t\trespData[SignalDetail['signalId']] = []\r\n\t\t\t\r\n\t\t\tdata?.forEach((response: any) => {\r\n\t\t\t\t// check if collection is contains the signal\r\n\t\t\t\tif (response.config.url.split('/')[8] === SignalDetail['collectionId']) {\r\n\t\t\t\t\tresponse.data?.data?.data?.map((dataValue: any) => {\r\n\t\t\t\t\t\tlet jsonValue = JSON.parse(dataValue.value);\r\n\r\n\r\n\t\t\t\t\t\tif (jsonValue[SignalDetail['signalId']] != null) {\r\n\r\n\t\t\t\t\t\t\t// Finding the correct key for the required value\r\n\t\t\t\t\t\t\tif (rangeTypeParam === '1 Day' && isNotMapWidget && loadingType !== 'initial_loading' && !dataValue.timestamp.includes('Z')) {\r\n\t\t\t\t\t\t\t\tswitch (SignalDetail['agg']) {\r\n\t\t\t\t\t\t\t\t\tcase \"min\":\r\n\t\t\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = 0;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"max\":\r\n\t\t\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = 1;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"avg\":\r\n\t\t\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = 2;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"count\":\r\n\t\t\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = 4;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"first\":\r\n\t\t\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = 5;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"last\":\r\n\t\t\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = 6;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = SignalDetail['agg'];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if (loadingType === 'initial_loading' || rangeTypeParam === 'Raw Data' || !isNotMapWidget || rangeTypeParam === 'Data Export' || dataValue.timestamp.includes('Z')) {\r\n\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = 'value'\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tindexMappingOfAggRespArray = SignalDetail['agg']\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tlet timestamp : any = \"2025-01-01T00:00:00.000Z\" // Default fallback value\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (rangeTypeParam === '1 Day' && isNotMapWidget && !dataValue.timestamp.includes('Z')) {\r\n\t\t\t\t\t\t\t\tlet isoDateTimeString = dataValue.timestamp.replace(' ', 'T') + ':00';\r\n\t\t\t\t\t\t\t\t// const date = new Date(isoDateTimeString);\r\n\t\t\t\t\t\t\t\t// timestamp = date.toISOString();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t// Fix for local run\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\ttry{\r\n\t\t\t\t\t\t\t\t\tconst date = new Date(isoDateTimeString);\r\n\t\t\t\t\t\t\t\t\tif (isNaN(date.getTime())) {\r\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Invalid Date\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\ttimestamp = date.toISOString();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcatch(error){\r\n\t\t\t\t\t\t\t\t\tconsole.error(\"Error parsing date:\", error);\r\n\t\t\t\t\t\t\t\t\t// Fix the invalid ISO string by removing the extra \":00\" in the time zone\r\n\t\t\t\t\t\t\t\t\tisoDateTimeString = isoDateTimeString.replace(/(\\+\\d{2}:\\d{2}):00$/, '$1');\r\n\t\t\t\t\t\t\t\t\tconsole.log(\"Corrected ISO string:\", isoDateTimeString);\r\n\r\n\t\t\t\t\t\t\t\t\tconst date = new Date(isoDateTimeString);\r\n\t\t\t\t\t\t\t\t\tif (!isNaN(date.getTime())) {\r\n\t\t\t\t\t\t\t\t\t\ttimestamp = date.toISOString();\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tconsole.error(\"Failed to parse corrected date string.\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttimestamp = isNotMapWidget ?\r\n\t\t\t\t\t\t\t\t\t(assetTimezone ?\r\n\t\t\t\t\t\t\t\t\t\tDate.parse(new Date(dataValue.timestamp).toLocaleString(\"en-US\", { timeZone: tzlookup(props.state.timezone.coordinates.latitude, props.state.timezone.coordinates.longitude) })) :\r\n\t\t\t\t\t\t\t\t\t\tDate.parse(dataValue.timestamp)) :\r\n\t\t\t\t\t\t\t\t\t(assetTimezone ?\r\n\t\t\t\t\t\t\t\t\t\tnew Date(dataValue.timestamp).toLocaleString(\"en-US\", { timeZone: tzlookup(props.state.timezone.coordinates.latitude, props.state.timezone.coordinates.longitude) }) :\r\n\t\t\t\t\t\t\t\t\t\tmoment(dataValue.timestamp).format('llll'))\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t// Getting the correct value (Fixing avg aggregation issue for data aggregates of 1min/5min/1hour after 2023-07-17) Also this will correct for sum value. In DB there is a typo which avg and sum aggregates where sum is named as avg and avg does not exist but avg is the sum/count.\r\n\t\t\t\t\t\t\tvar timestampDate = new Date(timestamp);\r\n\t\t\t\t\t\t\tvar comparisonDate = new Date(\"2023-07-17\");\r\n\r\n\t\t\t\t\t\t\tif ((rangeTypeParam !== '1 Day' && rangeTypeParam !== 'Raw Data') && timestampDate > comparisonDate && (aggType === 'avg' || aggType === 'sum') && isNotMapWidget) {\r\n\r\n\t\t\t\t\t\t\t\tlet signalValue = aggType === 'avg' ? parseFloat(jsonValue[SignalDetail['signalId']]['avg']) / parseFloat(jsonValue[SignalDetail['signalId']]['count']) : parseFloat(jsonValue[SignalDetail['signalId']]['avg'])\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tsignalValue = convertIfTemperatureUnits(signalValue, SignalDetail.units)\r\n\r\n\t\t\t\t\t\t\t\trespData[SignalDetail['signalId']].push({\r\n\t\t\t\t\t\t\t\t\ttimestamp: timestamp,\r\n\t\t\t\t\t\t\t\t\tvalue: signalValue\r\n\t\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\t} else if (aggType === 'difference' && rangeTypeParam !== 'Raw Data') {\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif (rangeTypeParam === '1 Day') {\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tlet signalValue = parseFloat(jsonValue[SignalDetail['signalId']][6]) - parseFloat(jsonValue[SignalDetail['signalId']][5])\r\n\r\n\t\t\t\t\t\t\t\t\tsignalValue = convertIfTemperatureUnits(signalValue, SignalDetail.units)\r\n\r\n\t\t\t\t\t\t\t\t\trespData[SignalDetail['signalId']].push({\r\n\t\t\t\t\t\t\t\t\t\ttimestamp: timestamp,\r\n\t\t\t\t\t\t\t\t\t\tvalue: signalValue\r\n\t\t\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tlet signalValue = parseFloat(jsonValue[SignalDetail['signalId']]['last']) - parseFloat(jsonValue[SignalDetail['signalId']]['first'])\r\n\r\n\t\t\t\t\t\t\t\t\tsignalValue = convertIfTemperatureUnits(signalValue, SignalDetail.units)\r\n\r\n\t\t\t\t\t\t\t\t\trespData[SignalDetail['signalId']].push({\r\n\t\t\t\t\t\t\t\t\t\ttimestamp: timestamp,\r\n\t\t\t\t\t\t\t\t\t\tvalue: signalValue\r\n\t\t\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tlet signalValue = parseFloat(jsonValue[SignalDetail['signalId']][indexMappingOfAggRespArray])\r\n\r\n\t\t\t\t\t\t\t\tsignalValue = convertIfTemperatureUnits(signalValue, SignalDetail.units)\r\n\r\n\t\t\t\t\t\t\t\trespData[SignalDetail['signalId']].push({\r\n\t\t\t\t\t\t\t\t\ttimestamp: timestamp,\r\n\t\t\t\t\t\t\t\t\tvalue: signalValue\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t})\r\n\r\n\t\tlet dataSet = new Map<SignalId, SignalDatapoint[]>();\r\n\t\tlet dataSetRightAxis = new Map<SignalId, SignalDatapoint[]>();\r\n\t\twidgetsSignals.forEach((SignalDetail: any) => {\r\n\t\t\tif (SignalDetail.axis == 'left')\r\n\t\t\t\tdataSet.set(SignalDetail['signalId'], respData[SignalDetail['signalId']]);\r\n\t\t\tif (SignalDetail.axis == 'right')\r\n\t\t\t\tdataSetRightAxis.set(SignalDetail['signalId'], respData[SignalDetail['signalId']]);\r\n\t\t});\r\n\r\n\t\treturn [dataSet, dataSetRightAxis];\r\n\r\n\t}\r\n\r\n\r\n\t// Function to format timestamp to 'yyyy-MM-dd hh:mm:ss'\r\n const formatTimestamp = (timestamp: any) => {\r\n const date = new Date(timestamp);\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const hours = date.getHours().toString().padStart(2, '0');\r\n const minutes = date.getMinutes().toString().padStart(2, '0');\r\n const seconds = date.getSeconds().toString().padStart(2, '0');\r\n\r\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\r\n\t};\r\n\t\r\n\tconst adjustSheetName = (name:string) => {\r\n return name.length > 31 ? name.substr(0, 31) : name;\r\n };\r\n\r\n // Function to convert dataSet to Excel format\r\n const dataSetToWorkbook = (resDataSet: any, widgetsSignals: any, uniqueSignalCollectionIds: any) => {\r\n\t\tconst wb = XLSX.utils.book_new();\r\n\t\t\r\n\t\t// console.log('dataSetToWorkbook')\r\n\t\t// console.log(props)\r\n\t\t// console.log(props.assetDetails.template.signalCollections)\r\n\t\t// console.log(uniqueSignalCollectionIds)\r\n\t\tlet collectionDetails:any = []\r\n\t\tlet dataSet:any = []\r\n\t\tprops.assetDetails.template.signalCollections.map((collection: any) => {\r\n\t\t\tuniqueSignalCollectionIds.map((id: any) => {\r\n\t\t\t\tif (id.includes(collection.id)) {\r\n\t\t\t\t\tcollectionDetails.push(collection)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\t// console.log(\"collectionDetails\")\r\n\t\t// console.log(collectionDetails)\r\n\r\n\t\tconst now = moment();\r\n\t\tconst currentTimezone = moment.tz.guess();\r\n\t\tconst timezoneAbbr = now.tz(currentTimezone).format('z');\r\n\t\t\r\n\t\t\t\r\n\t\tcollectionDetails?.forEach((CollectionDetail: any) => {\r\n\r\n\t\t\tdataSet[CollectionDetail['id']] = []\r\n\r\n\t\t\tresDataSet?.forEach((response: any) => {\r\n\t\t\t\t// check if collection is contains the signal\r\n\t\t\t\tif (response.config.url.split('/')[8] === CollectionDetail['id']) {\r\n\t\t\t\t\tresponse.data?.data?.data?.map((dataValue: any) => {\r\n\t\t\t\t\t\tlet jsonValue = JSON.parse(dataValue.value);\r\n\r\n\t\t\t\t\t\tlet dataToPush:any = {};\r\n\t\t\t\t\t\tconst formatDateWithMilliseconds = (dateString: string): string => {\r\n\t\t\t\t\t\t\tconst date = new Date(dateString);\r\n\t\t\t\t\t\t\tconst year = String(date.getFullYear());\r\n\t\t\t\t\t\t\tconst month = String(date.getMonth() + 1).padStart(2, '0'); // Months are zero-indexed\r\n\t\t\t\t\t\t\tconst day = String(date.getDate()).padStart(2, '0');\r\n\t\t\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\r\n\t\t\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\r\n\t\t\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\r\n\t\t\t\t\t\t\tconst milliseconds = String(date.getMilliseconds()).padStart(3, '0');\r\n\t\t\t\t\t\t\treturn `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\r\n\t\t\t\t\t };\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t// Iterate through jsonValue to append all titles and values\r\n\t\t\t\t\t\tObject.keys(jsonValue).forEach((key) => {\r\n\t\t\t\t\t\t\tconst signalDetail = jsonValue[key];\r\n\t\t\t\t\t\t\t//dataToPush['Time Stamp ('+timezoneAbbr+')'] = moment.utc(dataValue['timestamp']).local().format('YYYY-MM-DDTHH:mm:ss');\r\n\t\t\t\t\t\t\tdataToPush['Time Stamp (' + timezoneAbbr + ')'] = formatDateWithMilliseconds(dataValue['timestamp']);\r\n\t\t\t\t\t\t\tdataToPush[`${signalDetail['name']} ${signalDetail['uom'] ? \" (\"+signalDetail['uom']+\")\" : \"\"}`] = parseFloat(signalDetail['value']);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tdataSet[CollectionDetail['id']].push(dataToPush)\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t// console.log(\"dataSet\")\r\n\t\t// console.log(dataSet)\r\n\t\t\r\n\t\tcollectionDetails?.forEach((CollectionDetail: any) => {\r\n\t\t\tconst ws = XLSX.utils.json_to_sheet(dataSet[CollectionDetail['id']]);\r\n\t\t\tXLSX.utils.book_append_sheet(wb, ws, adjustSheetName(CollectionDetail['name']));\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\r\n return wb;\r\n };\r\n\r\n // Function to trigger the download of the Excel file\r\n const downloadExcel = (dataSet:any, startDate:any, endDate:any, interval:any, reading:any, widgetsSignals:any, uniqueSignalCollectionIds:any) => {\r\n\t\tconst wb = dataSetToWorkbook(dataSet, widgetsSignals, uniqueSignalCollectionIds);\r\n\t\t// console.log(\"startDate, endDate\")\r\n\t\t// console.log(startDate, endDate)\r\n\t\t// console.log(\"wb\")\r\n\t\t// console.log(wb)\r\n const fileName = `${props.assetDetails.mastertag}_${startDate.replaceAll(':', '_').replaceAll('-', '_').replaceAll(' ', '_')} - ${endDate.replaceAll(':', '_').replaceAll('-', '_').replaceAll(' ', '_')}.xlsx`;\r\n XLSX.writeFile(wb, fileName);\r\n };\r\n\r\n\tconst reloadData = (interval: string, reading: string, startDate: string, endDate: string, customFiltersTmp: string[], loadingType: string, rangeTypeParam?: string) => {\r\n\r\n\t\t// check if time range is more than 2 month for map widget\r\n\t\tif (!isNotMapWidget && moment(endDate).diff(moment(startDate), 'months', true) > 2) {\r\n\t\t\tmessage.info(\"Max range allowed for map widgets is 2 months\");\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tconst datapointArray: SignalCollectionId[] = [];\r\n\t\tlet widgetsSignals:LineWidgetSignalsConfigs[] = [];\r\n\t\tlet assetTimezone: boolean = false;\r\n\r\n\t\tif (!loadingType) {\r\n\t\t\tloadingType = 'initial_loading'\r\n\t\t}\r\n\r\n\t\tif(props.state.timezone.value==\"asset\" && props.state.timezone.isGpsSignalAvailable){\r\n\t\t\t//if(props.gpslocation.latitude && props.gpslocation.longitude){\r\n\t\t\tif(props.state.timezone.coordinates.latitude && props.state.timezone.coordinates.longitude){\r\n\t\t\t\t\tassetTimezone = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet orgPath = props.assetDetails.orgPathId;\r\n\t\tlet jlgOrg = 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b~fa97ce00-7099-11e8-afcd-8119891950e5'; //path id of JLG Org\r\n\t\tlet ytiOrg = 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b~a09ad270-3b21-11e7-893e-f94b4bc7246b~4dbde040-3690-11e8-9bca-a79ed2f27327~19a579c0-ed47-11ee-afd6-bbccfa5a359c'; //path id of YTI (Yusen Terminals)\r\n\t\tlet isJLGOrgAsset = orgPath.startsWith(jlgOrg);\r\n\t\tlet isYTIOrgAsset = orgPath.startsWith(ytiOrg);\r\n \r\n\t\t//find the signal collection id to make an api request\r\n\t\tprops.widgetState.signals.forEach((si:any) => {\r\n\t\t\tconst datapoint = props.template.signalCollections.filter((s:any) =>\r\n\t\t\t\ts.signals.find((sg:any) => sg.id === (si.id ? si.id : si))\r\n\t\t\t)[0];\r\n\r\n\t\t\tif (datapoint && datapoint[\"id\"]) {\r\n\t\t\t\tconst signalInfo = datapoint.signals.filter((signalInfo: any) => signalInfo.id === si.id || signalInfo === si)\r\n\t\t\t\tdatapointArray.push(props.assetDetails.orgId + '~' + props.assetId + '~' + datapoint.id);\r\n\t\t\t\twidgetsSignals.push({\"collectionId\": datapoint.id, \"signalId\": si.id ? si.id : si, \"agg\": reading, 'axis': 'left', units: signalInfo.length ? signalInfo[0].units : '' });\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (props.widgetState?.rightYAxisSignals) {\r\n\t\t\tprops.widgetState.rightYAxisSignals.forEach((si:any) => {\r\n\t\t\t\tconst datapoint = props.template.signalCollections.filter((s:any) =>\r\n\t\t\t\t\ts.signals.find((sg:any) => sg.id === (si.id ? si.id : si))\r\n\t\t\t\t)[0];\r\n\t\r\n\t\t\t\tif (datapoint && datapoint[\"id\"]) {\r\n\t\t\t\t\tconst signalInfo = datapoint.signals.filter((signalInfo: any) => signalInfo.id === si.id || signalInfo === si)\r\n\t\t\t\t\tdatapointArray.push(props.assetDetails.orgId + '~' + props.assetId + '~' + datapoint.id);\r\n\t\t\t\t\twidgetsSignals.push({\"collectionId\": datapoint.id, \"signalId\": si.id ? si.id : si, \"agg\": reading, 'axis': 'right', units: signalInfo.length ? signalInfo[0].units : '' });\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\r\n\t\t//stop the repetition of datapoints\r\n\t\tconst uniqueSignalCollectionId = datapointArray.filter((elem, pos) => {\r\n\t\t\treturn datapointArray.indexOf(elem) === pos;\r\n\t\t})\r\n\r\n\t\tlet requiredSignals = widgetsSignals.map((signal:any) => signal.signalId)\r\n\t\t\r\n\t\tif (exportData) {\r\n\t\t\t\r\n\t\t\tloadingIndicatorStart();\r\n\r\n\t\t\tsetWidgetsSignalsData(widgetsSignals)\r\n\r\n\t\t\tApi.loadSignalsDataTimescale(interval,reading, uniqueSignalCollectionId, moment(startDate), moment(endDate), 'data_export', customFiltersTmp, requiredSignals)\r\n\t\t\t.then((resp: any) => {\r\n\t\t\t\t\r\n\t\t\t\tif (resp[0].hasOwnProperty(\"response\")) {\r\n\t\t\t\t\tif (resp[0].response.data.status === 'fail') {\r\n\t\t\t\t\t\tmessage.warning(resp[0].response.data.errors[0]['message']);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(isYTIOrgAsset) {\r\n\t\t\t\t\t\tlet uniqueData = removeDuplicatesIfAny(resp[0].data.data);\r\n\t\t\t\t\t\tresp[0].data.data = uniqueData;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetOriginalTimescaleData(resp)\r\n\t\t\t\t\tdownloadExcel(resp, startDate, endDate, interval, reading, widgetsSignals, uniqueSignalCollectionId);\r\n\t\t\t\t}\r\n\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconsole.log(err)\r\n\t\t\t\terrorResponse(null, err);\r\n\t\t\t\tmessage.error(err.message);\r\n\t\t\t})\r\n\t\t\t.finally(()=> { \r\n\t\t\t\tprops.setLoading(false);\r\n\t\t\t\tloadingIndicatorEnd()\r\n\t\t\t\tsetExportData(false);\r\n\t\t\t});\r\n\r\n\t\t} else {\r\n\t\t\tsetWidgetsSignalsData(widgetsSignals)\r\n\t\t\tApi.loadSignalsDataTimescale(interval, reading, uniqueSignalCollectionId, moment(startDate), moment(endDate), !isNotMapWidget && props.initiallyLoaded ? 'map_view' : loadingType, customFiltersTmp, requiredSignals)\r\n\t\t\t.then((resp: any) => {\r\n\t\t\t\tif (resp[0].hasOwnProperty(\"response\")) {\r\n\t\t\t\t\tif (resp[0].response.data.status === 'fail') {\r\n\t\t\t\t\t\tmessage.warning(resp[0].response.data.errors[0]['message']);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(isYTIOrgAsset) {\r\n\t\t\t\t\t\tlet uniqueData = removeDuplicatesIfAny(resp[0].data.data);\r\n\t\t\t\t\t\tresp[0].data.data = uniqueData;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetOriginalTimescaleData(resp)\r\n\t\t\t\t\tlet dataSet = convertTimestamp(resp, assetTimezone, widgetsSignals, loadingType, rangeTypeParam, reading)\r\n\r\n\t\t\t\t\tprops.setData(dataSet[0])\r\n\t\t\t\t\tif (dataSet[1].size > 0) {\r\n\t\t\t\t\t\tprops.setRightAxisData(dataSet[1])\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconsole.log(err)\r\n\t\t\t\t//console.log(err.response)\r\n\t\t\t\t// errorResponse(null, err);\r\n\t\t\t\t// message.error(err.message);\r\n\t\t\t})\r\n\t\t\t.finally(()=> { \r\n\t\t\t\tprops.setLoading(false);\r\n\t\t\t\tloadingIndicatorEnd()\r\n\t\t\t});\r\n\r\n\t\t\tprops.setLoading(false);\r\n\t\t\tloadingIndicatorEnd()\r\n\r\n\t\t}\r\n\t\t\r\n\r\n\t}\r\n\r\n\tconst assignFilterDisplayAndReloadData = (DataSearchRangeInput: any, timeRangeTextInput: any, aggregationInput: any, granularityInput: any, isNotMapWidgetInput: any, GranularityInput: any, loadingType: string) => {\r\n\t\tlet resultValues = getTimescaleFilterText(DataSearchRangeInput, timeRangeTextInput, aggregationInput, granularityInput, isNotMapWidgetInput, GranularityInput)\r\n\r\n\t\tsetGranularityDisplay(resultValues.granularityDisplay)\r\n\r\n\t\tif (resultValues.shouldQuery) {\r\n\t\t\tlet rangeTypeParam = 'N/A'\r\n\t\t\tconst diffInHours = resultValues.DataSearchRange[1].diff(resultValues.DataSearchRange[0], 'hours')\r\n\t\t\trangeTypeParam = diffInHours >= 719 ? '1 Day' : diffInHours <= 2 ? 'Raw Data' : 'N/A'\r\n\r\n\t\t\treloadData(isNotMapWidget ? resultValues.granularityTmp : 'Raw Data', isNotMapWidget ? findAggAbbrev(aggregation) : 'avg', resultValues.DataSearchRange[0].format('YYYY-MM-DD HH:mm'), resultValues.DataSearchRange[1].format('YYYY-MM-DD HH:mm'), customFilters, loadingType, rangeTypeParam)\r\n\t\t\tsetRangeDisplayName(`${resultValues.timeRange} ${isNotMapWidgetInput ? `(${resultValues.granularityDisplay})` : resultValues.granularityDisplay === 'Click to Filter' ? 'Click to Filter' : ''}`)\r\n\r\n\t\t\tlet filterSetting = resultValues.granularityDisplay === 'Click to Filter' ? ['Raw Data', 'Raw Data'] : resultValues.granularityDisplay.split(' | ')\r\n\t\t\tpassWidgetFiltersToChart(filterSetting[1], filterSetting[0])\r\n\t\t} else {\r\n\t\t\tmessage.info(\"Please select time range\")\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tconst removeDuplicatesIfAny = (data:any) => {\r\n\t\t\r\n\t\tconsole.log(\"Data length before removing duplicates: \"+data.data.length);\r\n\t\t// console.log(JSON.stringify(data));\r\n\t\t// console.log(\"REMOVING DUPLICATES\");\r\n\t\t// console.log(\"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\");\r\n\t\tlet resData:any=[];\r\n\t\tlet delIndex:any =[];\r\n\t\tlet previousData:any = undefined;\r\n\t\t// const uniqueArray = Array.from(new Set(data.data.map((object:any)=>JSON.stringify(object)))).map((str:any)=> JSON.parse(str));\r\n\t\t// console.log(\"Unique array length: \"+ uniqueArray.length);\r\n\t\t// data.data=uniqueArray;\r\n\t\t//const uniqueArray = Array.from(new Set(a.map(o => JSON.stringify(o)))).map(str=>JSON.parse(str));\r\n\t\r\n\t\t// for (var i = data.data.length - 1; i >= 0; i--) {\r\n\t\t// \tif(i === data.data.length - 1) {\r\n\t\t// \t\tpreviousData = data.data[i];\r\n\t\t// \t}\r\n\t\t// \telse\r\n\t\t// \t{\r\n\t\t// \t\tif(previousData.timestamp === data.data[i].timestamp && previousData.value === data.data[i].value){\r\n\t\t// \t\t\tdata.data.splice(i, 1);\r\n\t\t// \t\t}\r\n\t\t// \t\telse\r\n\t\t// \t\t{\r\n\t\t// \t\t\tpreviousData = data.data[i];\r\n\t\t// \t\t}\r\n\t\t// \t}\r\n\t\t// }\r\n\t\t let rawData = data;\r\n\t\t rawData.data.map((value:any, index:any)=>{\r\n\r\n\t\t\tif(index==0){\r\n\t\t// \t// check all records for duplicates\r\n\t\t// \t//var found = resData.find((o:any) => o.timestamp === data.timestamp && o.value === data.value)\r\n\r\n\t\t// \t// check only prevoius record for duplicate\r\n\r\n\t\t// \t//let found = (previousData.timestamp === data.timestamp && previousData.value === data.value)?\r\n \t\tif (previousData === undefined || (previousData && !(previousData.timestamp === value.timestamp && previousData.value === value.value))){\r\n\t\t\t\t//resData.push(data);\r\n\t\t\t\tpreviousData = value;\r\n \t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t//console.log(\"found duplicate \"+ data +\" at \"+ index);\r\n\t\t\t\t//delIndex.push(index);\r\n\t\t\t\tdata.data.splice(index,1);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t//resData.push(data);\r\n\t\t\tpreviousData = value;\r\n\t\t}\r\n\t\t})\r\n\t\tconsole.log(\"Duplicate records count:\"+ delIndex.length);\r\n\t\t// for(let i=0;i<delIndex.length;i++)\r\n\t\t// {\r\n\t\t// \tdata.data.splice(i,1);\r\n\t\t// }\r\n\t\tconsole.log(\"Data length after removing duplicates: \"+ data.data.length);\r\n\t\treturn data;\r\n\t}\r\n\r\n\tconst findAggAbbrev = (aggregationString: string) => {\r\n\t\tswitch (aggregationString) {\r\n\t\t\tcase 'Max':\r\n\t\t\t\treturn 'max'\r\n\t\t\tcase 'Min':\r\n\t\t\t\treturn 'min'\r\n\t\t\tcase 'Average':\r\n\t\t\t\treturn 'avg'\r\n\t\t\tcase 'Sum':\r\n\t\t\t\treturn 'sum'\r\n\t\t\tcase 'Difference':\r\n\t\t\t\treturn 'difference'\r\n\t\t\tcase 'Last':\r\n\t\t\t\treturn 'last'\r\n\t\t\tcase 'First':\r\n\t\t\t\treturn 'first'\r\n\t\t\tcase 'Count':\r\n\t\t\t\treturn 'count'\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'max'\r\n\t\t}\r\n\t}\r\n\r\n\tconst onChangeTimeRange = (e: any) => {\r\n\r\n\t\tsetAvailableGranularity(getAvailableGranularity([moment().subtract(3, \"month\").startOf('month'), moment().subtract(1, \"month\").endOf('month')], e.target.value, sysTimescaleSetting.applyLimits))\r\n\t\tsetGranularity('Automatic')\r\n\t\tif (e.target.value != 'Custom') {\r\n\t\t\tsetTimeRangeValue(e.target.value);\r\n\t\t} else {\r\n\t\t\tsetCustomDateRange([moment().subtract(1, \"month\").startOf('month'), moment().subtract(1, \"month\").endOf('month')])\r\n\t\t\tsetTimeRangeValue(e.target.value);\r\n\t\t}\r\n\t};\r\n\r\n\tconst dateRangeChanged = (date:any, dateString:any) => {\r\n\t\tconst diffInHours = date[1].diff(date[0], 'hours')\r\n\t\tsetAvailableGranularity(getAvailableGranularity([date[0], date[1]], 'Custom', sysTimescaleSetting.applyLimits))\r\n\t\tsetCustomDateRange([date[0], date[1]])\r\n\t}\r\n\r\n\tconst onChangeExport = (e: any) => {\r\n\t\tsetExportData(e.target.value);\r\n\t};\r\n\r\n\tfunction granularityChanged(value: string) {\t\r\n\t\tsetGranularity(value)\r\n\t}\r\n\r\n\tfunction aggregationChanged(value: string) {\r\n\t\tsetAggregation(value)\r\n\t}\r\n\r\n\tfunction customFiltersChanged(value: string[]) {\r\n\t\tsetCustomFilters(value)\r\n\t}\r\n\r\n\tconst getData = () => {\r\n\t\tassignFilterDisplayAndReloadData(customDateRange, timeRangeValue, aggregation, granularity, isNotMapWidget, granularity, 'user_filter')\r\n\t\tonVisibleChange(false)\r\n\t};\r\n\r\n\tconst content = (\r\n\t\t<>\r\n\t\t\t<Row style={{ maxWidth: isNotMapWidget ? \"440px\" : \"280px\" }}>\r\n\t\t\t\t<Col span={isNotMapWidget ? 16 : 24 }>\r\n\t\t\t\t\t<span>Select time range:</span>\r\n\t\t\t\t\t<br />\r\n\t\t\t\t\t<Row style={{ marginTop: \"3px\", marginBottom: isNotMapWidget ? \"0px\" : \"10px\" }}>\r\n\t\t\t\t\t\t<Col span={12}>\r\n\t\t\t\t\t\t\t<Radio.Group onChange={onChangeTimeRange} value={timeRangeValue}>\r\n\t\t\t\t\t\t\t\t<Space className=\"radioSpacing\" direction=\"vertical\">\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 30 minutes\"} value=\"Latest 30 minutes\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 30 minutes\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest hour\"} value=\"Latest hour\">\r\n\t\t\t\t\t\t\t\t\t\tLatest hour\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 4 hours\"} value=\"Latest 4 hours\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 4 hours\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 12 hours\"} value=\"Latest 12 hours\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 12 hours\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 24 hours\"} value=\"Latest 24 hours\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 24 hours\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t</Radio.Group>\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t<Col style={{ paddingLeft: \"10px\" }} span={12}>\r\n\t\t\t\t\t\t\t<Radio.Group onChange={onChangeTimeRange} value={timeRangeValue}>\r\n\t\t\t\t\t\t\t\t<Space className=\"radioSpacing\" direction=\"vertical\">\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 48 hours\"} value=\"Latest 48 hours\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 48 hours\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 3 days\"} value=\"Latest 3 days\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 3 days\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 7 days\"} value=\"Latest 7 days\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 7 days\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Latest 30 days\"} value=\"Latest 30 days\">\r\n\t\t\t\t\t\t\t\t\t\tLatest 30 days\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t<Radio checked={timeRangeValue == \"Custom\"} value=\"Custom\">\r\n\t\t\t\t\t\t\t\t\t\tCustom\r\n\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t</Radio.Group>\r\n\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t{ timeRangeValue == \"Custom\" &&\r\n\t\t\t\t\t\t\t<Col style={{ paddingTop: \"10px\" }} span={isNotMapWidget ? 23 : 24}>\r\n\t\t\t\t\t\t\t\t<RangePicker\r\n\t\t\t\t\t\t\t\t\tclassName=\"pickerField\"\r\n\t\t\t\t\t\t\t\t\tshowTime\r\n\t\t\t\t\t\t\t\t\tsize='middle'\r\n\t\t\t\t\t\t\t\t\tallowClear={false}\r\n\t\t\t\t\t\t\t\t\tdisabledDate={(current) => current.isBefore(moment().subtract(1,\"year\").startOf('year'))}\r\n\t\t\t\t\t\t\t\t\tranges={{\r\n\t\t\t\t\t\t\t\t\t\t'Today': [moment().startOf('day'), moment()],\r\n\t\t\t\t\t\t\t\t\t\t'Yesterday': [moment().subtract(1, \"day\").startOf('day'), moment().subtract(1, \"day\").endOf('day')],\r\n\t\t\t\t\t\t\t\t\t\t// 'Last 24 Hours': [moment().subtract(24, \"hours\"), moment()],\r\n\t\t\t\t\t\t\t\t\t\t// 'Last 48 Hours': [moment().subtract(24, \"hours\"), moment()],\r\n\t\t\t\t\t\t\t\t\t\t'This Week': [moment().startOf('week'), moment()],\r\n\t\t\t\t\t\t\t\t\t\t'Last Week': [moment().subtract(1, \"week\").startOf('week'), moment().subtract(1, \"week\").endOf('week')],\r\n\t\t\t\t\t\t\t\t\t\t'Last 14 Days': [moment().subtract(13, \"days\").startOf('day'), moment()],\r\n\t\t\t\t\t\t\t\t\t\t'This Month': [moment().startOf('month'), moment()],\r\n\t\t\t\t\t\t\t\t\t\t'Last Month': [moment().subtract(1, \"month\").startOf('month'), moment().subtract(1, \"month\").endOf('month')],\r\n\t\t\t\t\t\t\t\t\t\t'Last 3 Month': [moment().subtract(3, \"month\").startOf('month'), moment().subtract(1, \"month\").endOf('month')],\r\n\t\t\t\t\t\t\t\t\t\t'Last 12 Months': [moment().subtract(1, 'year'), moment()],\r\n\t\t\t\t\t\t\t\t\t\t'Year To Date': [moment().startOf('year'), moment()],\r\n\t\t\t\t\t\t\t\t\t\t// 'Last Year': [moment().subtract(1, \"year\").startOf('year'), moment().subtract(1, \"year\").endOf('year')],\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonChange={dateRangeChanged}\r\n\t\t\t\t\t\t\t\t\tvalue={customDateRange}\r\n\t\t\t\t\t\t\t\t\tdefaultValue={[moment(), moment().subtract(1, \"hour\")]}\r\n\t\t\t\t\t\t\t\t\tformat='MM/DD/YY HH:mm'\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</Row>\r\n\t\t\t\t</Col>\r\n\r\n\t\t\t\t{ isNotMapWidget &&\r\n\t\t\t\t\t<Col style={{ borderLeft: \"1px solid #cfcfcf\", paddingLeft: \"5px\" }} span={8}>\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t{/* <Col style={{ marginTop: \"3px\", marginBottom: \"5px\" }} span={24}>\r\n\t\t\t\t\t\t\t\t<span>Time granularity:</span>\r\n\t\t\t\t\t\t\t\t<br />\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tdefaultValue={granularity}\r\n\t\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\r\n\t\t\t\t\t\t\t\t\tlistHeight={350}\r\n\t\t\t\t\t\t\t\t\tonChange={granularityChanged}\r\n\t\t\t\t\t\t\t\t\tvalue={granularity}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Automatic\">Automatic</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 3) >= 1} value=\"1 Minute\">1 Minute</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 3) >= 2} value=\"5 Minute\">5 Minutes</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 3) >= 3} value=\"15 Minutes\">15 Minutes</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 2) >= 4} value=\"30 Minutes\">30 Minutes</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 1) >= 5} value=\"1 Hour\">1 Hour</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 1) >= 5} value=\"3 Hours\">3 Hours</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 1) >= 5} value=\"6 Hours\">6 Hours</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 1) >= 6} value=\"12 Hours\">12 Hours</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 1) >= 7} value=\"1 Day\">1 Day</Option>\r\n\t\t\t\t\t\t\t\t\t<Option disabled={(availableGranularity - 1) >= 0} value=\"Raw Data\">Raw Data</Option>\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</Col> */}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<Col style={{ marginTop: \"15px\" }} span={24}>\r\n\t\t\t\t\t\t\t\t<span >Aggregation:</span>\r\n\t\t\t\t\t\t\t\t<br />\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tdefaultValue={aggregation}\r\n\t\t\t\t\t\t\t\t\tstyle={{ width: \"100%\", marginTop: \"3px\" }}\r\n\t\t\t\t\t\t\t\t\tonChange={aggregationChanged}\r\n\t\t\t\t\t\t\t\t\tdisabled={granularity == 'Raw Data'}\r\n\t\t\t\t\t\t\t\t\tvalue={aggregation}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Max\">Max</Option>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Min\">Min</Option>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Average\">Average</Option>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Sum\">Sum</Option>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Difference\">Difference</Option>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Last\">Last</Option>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"First\">First</Option>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Count\">Count</Option>\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<Col style={{ marginTop: \"15px\" }} span={24}>\r\n\t\t\t\t\t\t\t\t<Radio.Group size=\"small\" style={{ lineHeight: \"-10px\", marginBottom: \"0px\" }} onChange={onChangeExport} value={exportData}>\r\n\t\t\t\t\t\t\t\t\t<Space className=\"radioSpacing\" direction=\"vertical\">\r\n\t\t\t\t\t\t\t\t\t\t<Radio style={{ marginBottom: \"0px\" }} checked={exportData == false} value={false}>\r\n\t\t\t\t\t\t\t\t\t\t\tVisualization\r\n\t\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t\t<Radio style={{ marginBottom: \"0px\" }} checked={exportData} value={true}>\r\n\t\t\t\t\t\t\t\t\t\t\tExport (Raw Data)\r\n\t\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t\t</Radio.Group>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t{!isNotMapWidget &&\r\n\t\t\t\t\t<Col style={{ borderTop: \"1px solid #cfcfcf\", paddingTop: \"5px\", paddingBottom: \"5px\" }} span={24}>\r\n\t\t\t\t\t\t<Row>\r\n\t\t\t\t\t\t\t<Col style={{ marginTop: \"5px\" }} span={24}>\r\n\t\t\t\t\t\t\t\t<Radio.Group size=\"small\" style={{ lineHeight: \"-10px\", marginBottom: \"0px\" }} onChange={onChangeExport} value={exportData}>\r\n\t\t\t\t\t\t\t\t\t<Space className=\"radioSpacing\" direction=\"horizontal\">\r\n\t\t\t\t\t\t\t\t\t\t<Radio style={{ marginBottom: \"0px\" }} checked={exportData == false} value={false}>\r\n\t\t\t\t\t\t\t\t\t\t\tVisualization\r\n\t\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t\t<Radio style={{ marginBottom: \"0px\" }} checked={exportData} value={true}>\r\n\t\t\t\t\t\t\t\t\t\t\tExport (Raw Data)\r\n\t\t\t\t\t\t\t\t\t\t</Radio>\r\n\t\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t\t</Radio.Group>\r\n\t\t\t\t\t\t\t</Col>\r\n\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t}\r\n\r\n\t\t\t</Row>\r\n\r\n\t\t\t{\r\n\t\t\t\tisNotMapWidget && ShowFilters([\"battery level\"], [\"%\"]) &&\r\n\t\t\t\t<Row style={{ borderTop: \"1px solid #cfcfcf\", marginTop: \"10px\" }}>\r\n\t\t\t\t\t<Col style={{ marginTop: \"5px\" }} span={24}>\r\n\t\t\t\t\t\t<Collapse className=\"customCollapse\" >\r\n\t\t\t\t\t\t\t<Panel header={<span className=\"collapseTitle\"> Advanced Filters </span>} key=\"1\" >\r\n\t\t\t\t\t\t\t\t<span >Visualization Filters:</span><br />\r\n\t\t\t\t\t\t\t\t<Select \r\n\t\t\t\t\t\t\t\t\tmode=\"tags\"\r\n\t\t\t\t\t\t\t\t\tdefaultValue={customFilters}\r\n\t\t\t\t\t\t\t\t\tonChange={customFiltersChanged}\r\n\t\t\t\t\t\t\t\t\tstyle={{ width: \"100%\", maxWidth: '420px', position: \"inherit\" }}\r\n\t\t\t\t\t\t\t\t\tplaceholder=\"Select Tags\"\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tvalue={customFilters}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Option value=\"Hide Zeros\">Hide Zeros</Option>\r\n\t\t\t\t\t\t\t\t\t{/* <Option value=\"Hide Non-Incremental Values\">Hide Non-Incremental Values</Option> */}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</Panel>\r\n\t\t\t\t\t\t</Collapse>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/* <span >Additional Visualization Filters:</span>\r\n\t\t\t\t\t\t<br />\r\n\t\t\t\t\t\t<Select \r\n\t\t\t\t\t\t\tmode=\"tags\"\r\n\t\t\t\t\t\t\tdefaultValue={customFilters}\r\n\t\t\t\t\t\t\tonChange={customFiltersChanged}\r\n\t\t\t\t\t\t\tstyle={{ width: '100%' }}\r\n\t\t\t\t\t\t\tplaceholder=\"Select Tags\"\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tvalue={customFilters}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Option value=\"Hide Zeros\">Hide Zeros</Option>\r\n\t\t\t\t\t\t</Select> */}\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t</Row>\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t<Row style={{ borderTop: \"1px solid #cfcfcf\", marginTop: \"5px\" }}>\r\n\t\t\t\t<Col style={{ textAlign: \"right\", marginTop: \"5px\" }} span={24}>\r\n\t\t\t\t\t<Button size=\"small\" type=\"primary\" onClick={() => getData()}>\r\n\t\t\t\t\t\tApply\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tstyle={{ marginLeft: \"10px\" }}\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\ttype=\"default\"\r\n\t\t\t\t\t\tonClick={() => onVisibleChange(!rangeSelectorVisible)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tCancel\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</Col>\r\n\t\t\t</Row>\r\n\t\t</>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div style={{ width: \"100%\" }}>\r\n\t\t\t<Space>\r\n\t\t\t\t{props.isUpdate ? (\r\n\t\t\t\t\t<Tooltip title=\"Edit Widget Properties\">\r\n\t\t\t\t\t\t<EditOutlined onClick={props.onEdit} />\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{ props.isDelete ? (\r\n\t\t\t\t\t<Popconfirm\r\n\t\t\t\t\t\ttitle=\"Are you sure to delete this widget?\"\r\n\t\t\t\t\t\tonConfirm={confirm}\r\n\t\t\t\t\t\tonCancel={cancel}\r\n\t\t\t\t\t\tokText=\"Yes\"\r\n\t\t\t\t\t\tcancelText=\"No\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Tooltip title=\"Delete Widget\">\r\n\t\t\t\t\t\t\t<DeleteOutlined />\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</Popconfirm>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{ props.isLoading ? (\r\n\t\t\t\t\t<Tooltip title=\"Refresh Widget Data (Disabled)\">\r\n\t\t\t\t\t\t<LoadingOutlined />\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Tooltip title=\"Refresh Widget Data\">\r\n\t\t\t\t\t\t<ReloadOutlined onClick={(e) => refreshChart()} />\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<Popover\r\n\t\t\t\t\tplacement=\"bottomRight\"\r\n\t\t\t\t\tcontent={content}\r\n\t\t\t\t\ttrigger=\"click\"\r\n\t\t\t\t\tvisible={rangeSelectorVisible}\r\n\t\t\t\t\tonVisibleChange={onVisibleChange}\r\n\t\t\t\t>\r\n\t\t\t\t\t{ props?.widgetState?.sizeX && props?.widgetState?.sizeX > 1 ?\r\n\t\t\t\t\t\t<Tooltip overlayStyle={{ maxWidth: '550px', backgroundColor: \"white\", color: '#cfcfcf'}} title={rangeDisplayName}>\r\n\t\t\t\t\t\t\t<Button style={{maxWidth: \"300px\", textOverflow: \"ellipsis\", overflow: \"hidden\"}} type=\"default\" size=\"small\">\r\n\t\t\t\t\t\t\t\t<span style={{textOverflow: \"ellipsis\", overflow: \"hidden\", maxWidth: \"300px\"}}>{rangeDisplayName}</span>\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t:\r\n\t\t\t\t\t\t<Tooltip overlayStyle={{ maxWidth: '550px', backgroundColor: \"white\", color: '#cfcfcf'}} title={rangeDisplayName}><FilterOutlined/></Tooltip>\r\n\t\t\t\t\t}\r\n\t\t\t\t</Popover>\r\n\t\t\t\t\r\n\t\t\t\t{/* <Popconfirm\r\n\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<span style={{ marginLeft: \"-20px\" }}>\r\n\t\t\t\t\t\t\t\tSwitch to classic search mode?{\" \"}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<br />\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\tcolor: \"#B9B9B9\",\r\n\t\t\t\t\t\t\t\t\tmarginLeft: \"-20px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tNote: You may switch back to the new search mode at anytime!\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t}\r\n\t\t\t\t\ticon={<div style={{ display: \"none\" }}></div>}\r\n\t\t\t\t\tonConfirm={switchSearchMode}\r\n\t\t\t\t\tonCancel={cancel}\r\n\t\t\t\t\tokText=\"Yes\"\r\n\t\t\t\t\tcancelText=\"No\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\tmouseEnterDelay={1}\r\n\t\t\t\t\t\tplacement=\"bottom\"\r\n\t\t\t\t\t\ttitle=\"Switch To Classic Search Mode! This will switch back to the classic search mode. You may switch back to the new search mode at anytime!\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<ArrowRightOutlined className=\"\" style={{ color: \"#bdbdbd\" }} />\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</Popconfirm> */}\r\n\t\t\t</Space>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default WidgetHeaderNew;\r\n","import {\n DeleteOutlined,\n DownloadOutlined,\n EditOutlined,\n FilterOutlined,\n FundOutlined,\n LoadingOutlined,\n ReloadOutlined,\n} from \"@ant-design/icons\";\nimport { Card, Popconfirm, Space, Switch, Tooltip } from \"antd\";\nimport React, { CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { CSVLink } from \"react-csv\";\nimport tzlookup from \"tz-lookup\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\nimport {\n loadingIndicatorEnd,\n loadingIndicatorStart,\n} from \"../../utils/commonHelpers\";\nimport { State } from \"../Dashboard2/state\";\nimport * as Api from \"./api\";\nimport {\n SignalCollectionId,\n SignalDatapoint,\n SignalId,\n Template,\n WidgetFilterSetting,\n WidgetSignalId\n} from \"./models\";\nimport { DataStore, WidgetState } from \"./state\";\nimport \"./WidgetContainer.css\";\nimport {\n prepareWidgetGPSEvents,\n useExportGPSEvents,\n} from \"./WidgetExportForm/useExportGPSEvents\";\nimport { WidgetFilterConfig } from \"./WidgetFilterForm\";\nimport { createWidget } from \"./widgets\";\nimport { constructRows } from \"./widgets/common\";\n// import { EventSignals } from \"../Dashboard/models\";\n// import { AnyARecord } from \"dns\";\n// import { filter } from \"@amcharts/amcharts4/.internal/core/utils/Iterator\";\n// import { EventSignals } from \"../Dashboard/models\";\n// import { AnyARecord } from \"dns\";\n// import { filter } from \"@amcharts/amcharts4/.internal/core/utils/Iterator\";\nimport { isNumber } from \"@amcharts/amcharts4/core\";\nimport { Moment } from \"moment\";\nimport useGoogleMapsLib from \"../../sharedComponents/GoogleMap/use-google-maps-lib\";\nimport WidgetHeaderNew from \"./WidgetHeaderNew\";\n\ninterface WidgetControlProps {\n onEdit: () => void;\n onDelete: () => void;\n onFilter: () => void;\n onExport: () => void;\n userRole: string;\n isCreate: boolean;\n isRead: boolean;\n isUpdate: boolean;\n isDelete: boolean;\n assetDetails?: any;\n context: any;\n SignalRInitialData: any;\n //isIqanKey: boolean; //ops-2839: Remove the iqanconnect key permission check\n}\n\ninterface WidgetHeaderProps {\n onRefresh: () => void;\n onFilter: () => void;\n onExport: () => void;\n isLoading: boolean;\n widgetState: WidgetState;\n state: State;\n data: DataStore;\n rightYAxisData: DataStore;\n userRole: string;\n isCreate: boolean;\n isRead: boolean;\n isUpdate: boolean;\n isDelete: boolean;\n newWidgetHeader: boolean;\n setNewWidgetHeader: Function;\n isFilteredTransients: boolean;\n setFilteredTransients: any;\n}\n\nconst WidgetHeader: React.FC<WidgetControlProps & WidgetHeaderProps> = (\n props\n) => {\n const [sysTimescaleSetting, setSysTimescaleSetting] = useState<any>(\n props.context?.systemSettings?.filter(\n (sysSetting: any) =>\n sysSetting.settingName === \"Enable Timescale Search Mode\"\n )[0]\n );\n\n function confirm(e: any) {\n props.onDelete();\n }\n function switchSearchMode(e: any) {\n props.setNewWidgetHeader(!props.newWidgetHeader);\n }\n function cancel(e: any) {}\n const { type, title } = props.widgetState;\n\n function includeFilterToggle(\n filterSignals: String[],\n filterUnits: String[]\n ): Boolean {\n const { data, assetDetails } = props;\n const { datapoints } = assetDetails;\n const signalIds = data.keys();\n const collections = JSON.parse(datapoints);\n\n let include = false;\n let signal = signalIds.next().value;\n while (signal) {\n collections?.forEach((c: any) =>\n c.values?.forEach((v: any) => {\n if (\n v._id == signal &&\n filterSignals.includes(v.label.toLowerCase())\n ) {\n //this will allow battery to all but lng/lat only to parker\n if (\n !(\n v.label.toLowerCase() == \"latitude\" ||\n v.label.toLowerCase() == \"longitude\"\n ) &&\n filterUnits.includes(v.unit)\n ) {\n include = true;\n } else if (\n props.context.appContext.orgId ==\n \"c6adcb40-be92-11e6-9ed6-a5bc9cb5279b\"\n ) {\n include = true;\n }\n }\n })\n );\n\n signal = signalIds.next().value;\n }\n return include;\n }\n\n const csvLink = useRef<any>(null);\n const [\n dataForDownload,\n setDataForDownload,\n bDownloadReady,\n setDownloadReady,\n exportHeader,\n setExportHeader,\n exportFileName,\n setExportFileName,\n ] = useExportGPSEvents(csvLink);\n\n const onCSVGenerate = () => {\n loadingIndicatorStart();\n\n const csvExportDetails = prepareWidgetGPSEvents(props.data, props.state);\n\n setDataForDownload(csvExportDetails.eventArray);\n setExportHeader(csvExportDetails.eventHeader);\n setExportFileName(\n `${props.state.asset.name}_${props.widgetState.title}.csv`\n );\n setDownloadReady(true);\n\n loadingIndicatorEnd();\n };\n\n return (\n <div style={{ width: \"100%\" }}>\n <Space>\n {props.isUpdate ? (\n <Tooltip title=\"Edit Widget Properties\">\n <EditOutlined onClick={props.onEdit} />\n </Tooltip>\n ) : (\n \"\"\n )}\n {props.isDelete ? (\n <Popconfirm\n title=\"Are you sure to delete this widget?\"\n onConfirm={confirm}\n onCancel={cancel}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Widget\">\n <DeleteOutlined />\n </Tooltip>\n </Popconfirm>\n ) : (\n \"\"\n )}\n\n {props.isLoading ? (\n <Tooltip title=\"Refresh Widget Data (Disabled)\">\n <LoadingOutlined />\n </Tooltip>\n ) : (\n <Tooltip title=\"Refresh Widget Data\">\n <ReloadOutlined onClick={props.onRefresh} />\n </Tooltip>\n )}\n {/* todo add || type === \"chat* to support chat filter, export */}\n {type === \"line\" ||\n type === \"map\" ||\n type === \"map events\" ||\n type === \"clusterbar\" ? (\n <>\n <Tooltip title=\"Specify Data Time Range\">\n <FilterOutlined onClick={props.onFilter} />\n </Tooltip>\n\n {/* OPS-3036 - adding new tooltip for filtration */}\n {includeFilterToggle(\n [\"battery level\", \"latitude\", \"longitude\", \"battery kwh used\"],\n [\"%\", \"kWh\"]\n ) ? (\n <Tooltip title=\"Toggle to Include/Exclude Outlier Data\">\n <Switch\n key=\"layoutView\"\n checkedChildren=\"On\"\n unCheckedChildren=\"Off\"\n onChange={() =>\n props.setFilteredTransients(!props.isFilteredTransients)\n }\n />\n </Tooltip>\n ) : (\n \"\"\n )}\n\n {props.isCreate ||\n props.isUpdate ||\n props.userRole.toLowerCase() === \"barko_guest\" ? (\n props.widgetState.type.includes(\"map\") ? (\n <>\n <Tooltip\n title={\n props.isFilteredTransients\n ? \"Must toggle filter off to export data\"\n : \"Download row data in .csv format\"\n }\n >\n <DownloadOutlined\n style={props.isFilteredTransients ? { color: \"red\" } : {}}\n onClick={\n props.isFilteredTransients ? () => \"\" : onCSVGenerate\n }\n />\n </Tooltip>\n {!props.isFilteredTransients ? (\n <CSVLink\n data={dataForDownload}\n headers={exportHeader}\n filename={exportFileName}\n className=\"hidden\"\n ref={csvLink}\n target=\"_blank\"\n uFEFF={true}\n />\n ) : (\n \"\"\n )}\n </>\n ) : (\n <>\n <Tooltip\n title={\n props.isFilteredTransients\n ? \"Must toggle filter off to export data\"\n : \"Download row data in .csv format\"\n }\n >\n <DownloadOutlined\n style={props.isFilteredTransients ? { color: \"red\" } : {}}\n onClick={\n props.isFilteredTransients ? () => \"\" : props.onExport\n }\n />\n </Tooltip>\n </>\n )\n ) : (\n \"\"\n )}\n\n {sysTimescaleSetting &&\n (sysTimescaleSetting.orgsList == null\n ? true\n : sysTimescaleSetting.orgsList\n .replaceAll('\"', \"\")\n .slice(1, -1)\n .split(\",\")\n .includes(props.context.appContext.orgId)) && (\n <Popconfirm\n title={\n <>\n <span style={{ marginLeft: \"-20px\" }}>\n Switch to new search mode?{\" \"}\n </span>\n <br />\n <span\n style={{\n fontSize: \"12px\",\n color: \"#B9B9B9\",\n marginLeft: \"-20px\",\n }}\n >\n Note: You may switch back to the classic search mode at\n anytime!\n </span>\n </>\n }\n icon={<div style={{ display: \"none\" }}></div>}\n onConfirm={switchSearchMode}\n onCancel={cancel}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip\n mouseEnterDelay={1}\n placement=\"bottom\"\n title=\"Switch To New Search Mode. This allows you to select longer data ranges and set different time granularities. You may switch back to the classic view at anytime!\"\n >\n <FundOutlined\n className=\"wiggle\"\n style={{ color: \"#00D8AA\" }}\n />\n </Tooltip>\n </Popconfirm>\n )}\n </>\n ) : (\n <></>\n )}\n </Space>\n </div>\n );\n};\n\nexport interface Props extends WidgetControlProps {\n widgetState: WidgetState;\n isResizable: boolean;\n template: Template;\n assetId: string;\n state: State;\n autoRefresh?: number;\n assetDetails?: any;\n dashboardId?:any;\n bgimageurl?:any;\n isNewDashboard?:any;\n}\n\nconst WidgetContainer: React.FC<Props> = (props: Props): any => {\n useGoogleMapsLib();\n const { template, assetId, state, assetDetails,dashboardId,bgimageurl,isNewDashboard } = props;\n let { widgetState } = props;\n const { signals, type, rightYAxisSignals } = widgetState;\n\n let sysSetting = JSON.parse(props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'Enable Timescale Search Mode')[0].settingSpecs)\n\n const [data, setData] = useState<DataStore>(\n new Map<SignalId, SignalDatapoint[]>()\n );\n const [rightYAxisData, setRightAxisData] = useState<DataStore>(\n new Map<SignalId, SignalDatapoint[]>()\n );\n const [isLoading, setLoading] = useState<boolean>(false);\n const [zoomedStartEndTime, setZoomedStartEndTime] = useState<any>(\"\");\n const [widgetFilterSetting, setWidgetFilterSetting] = useState<WidgetFilterSetting>({aggregate: 'Raw Data', granularity: 'Raw Data'});\n const [refreshTime, setRefreshTime] = useState<number>(0);\n const [error, setError] = useState<string>();\n const [originalWidgetData, setOriginalWidgetData] = useState<any>();\n const [timezone, setTimezone] = useState<any>(state.timezone.value);\n const [signalArray, setSignalArray] = useState<WidgetSignalId[]>(signals);\n const [newWidgetHeader, setNewWidgetHeader] = useState<boolean>((['line', 'map', 'map events', 'clusterbar'].includes(type)) ? sysSetting.defaultView ? true : false : false);\n // const [newWidgetHeader, setNewWidgetHeader] = useState<boolean>(false);\n const [refreshNewWidgetData, setRefreshNewWidgetData] = useState<boolean>(false);\n const [filterTransients, setFilterTransients] = useState<boolean>(false);\n const [originalDataValue, setOriginalDataValue] = useState<any>();\n const [initiallyLoaded, setInitiallyLoaded] = useState<Boolean>(false);\n\n useEffect(() => {\n if (initiallyLoaded) {\n setRefreshTime(Date.now());\n }\n }, [props.autoRefresh]);\n\n const onRefresh = () => {\n setRefreshTime(Date.now());\n };\n\n const {\n datapoint,\n startDate,\n endDate,\n startTime,\n endTime,\n } = props.widgetState;\n const loadWidgets = () => {\n setLoading(true);\n loadData(\n signals,\n {\n startDate: startDate,\n startTime: startTime,\n endDate: endDate,\n endTime: endTime,\n datapoint: datapoint,\n },\n false\n );\n };\n\n //commented the code for auto refersh as requested in sprint 5\n // usePolling(\n // () => {\n // loadWidgets();\n // },\n // appConfigs.app.assetOverview.autoRefreshPollingRate\n // );\n //filter\n const filterErrors = (response: any) => {\n const responseFilter = response.filter((res: any) => res instanceof Error);\n if (responseFilter.length > 0) {\n responseFilter.forEach((error: any) => {\n let errorStatus: number = !error.response\n ? 999\n : error.response.status || 999;\n if (errorStatus === 401) {\n errorResponse(null, error);\n }\n });\n }\n };\n\n const convertTimestamp = (data: any) => {\n if (\n state.timezone.coordinates.latitude &&\n state.timezone.coordinates.latitude\n ) {\n let locale_date_str: any;\n data.forEach((signalData: any, SignalID: any) => {\n signalData.filter((ele: any) => {\n locale_date_str = new Date(ele.timestamp).toLocaleString(\"en-US\", {\n timeZone: tzlookup(\n state.timezone.coordinates.latitude,\n state.timezone.coordinates.longitude\n ),\n });\n locale_date_str = new Date(locale_date_str);\n if (locale_date_str) {\n ele.timestamp = locale_date_str;\n }\n });\n });\n return data;\n } else {\n return data;\n }\n };\n\n const formatData = (response: any, signals: WidgetSignalId[]) => {\n setOriginalWidgetData(response);\n const dataSet = constructRows(response, signals);\n if (\n state.timezone.value == \"asset\" &&\n state.timezone.isGpsSignalAvailable\n ) {\n let convertedData = convertTimestamp(dataSet);\n setData(convertedData);\n } else {\n setData(dataSet);\n }\n setLoading(false);\n };\n\n const formatRightYAxisData = (response: any, signals: WidgetSignalId[]) => {\n setOriginalWidgetData(response);\n const dataSet = constructRows(response, signals);\n if (\n state.timezone.value == \"asset\" &&\n state.timezone.isGpsSignalAvailable\n ) {\n let convertedData = convertTimestamp(dataSet);\n setRightAxisData(convertedData);\n } else {\n setRightAxisData(dataSet);\n }\n setLoading(false);\n };\n\n const loadData = async (\n signals: WidgetSignalId[],\n filterConfig: WidgetFilterConfig,\n isFormatRightYAxisData: boolean = false\n ) => {\n const C2DMessageCommandArray = [];\n\n if (newWidgetHeader) {\n // Do nothing since API calls will be done from within widget header\n } else {\n const datapointArray: SignalCollectionId[] = [];\n //find the signal collection id to make an api request\n signals.forEach((si) => {\n const datapoint = template.signalCollections.filter((s) =>\n s.signals.find((sg) => sg.id === (si.id ? si.id : si))\n )[0];\n if (datapoint && datapoint[\"id\"]) {\n datapointArray.push(datapoint.id);\n }\n });\n\n //find the signal collection id to make an api request\n if (type === \"chat\" || type === \"command2\") {\n signals.forEach((si) => {\n const c2dTextCommand = template.signalCollections.filter((c) =>\n c.signals.find(\n (sg) => sg.id === (si.id ? si.id : si) && c.type === \"Command\"\n )\n )[0];\n\n if (c2dTextCommand && c2dTextCommand[\"id\"]) {\n C2DMessageCommandArray.push(c2dTextCommand.id);\n }\n });\n }\n //stop the repeataion of datapoints\n const uniqsignalCollectionId = datapointArray\n .filter((elem, pos) => {\n return datapointArray.indexOf(elem) === pos;\n })\n .filter((x) => !!x);\n if (uniqsignalCollectionId.length > 0) {\n //filterConfig.filter = filterTransients; // OPS-3036\n\n Api.loadSignalsData(assetId, uniqsignalCollectionId, filterConfig, type) //filterTransients\n .then((resp: any) => {\n template.signalCollections.filter((sc) => {\n const splitSignalCollection = (apiResponse: any) => {\n if (!(apiResponse.data.length == 0 || apiResponse.data == \"\")) {\n let collection = apiResponse.data.find(\n (val: any) => val.signalCollectionID === sc.id\n );\n if (collection) {\n apiResponse.data.filter((val: any) => {\n filterSignalData(val);\n });\n }\n }\n };\n const filterSignalData = (resData: any) => {\n if (sc.id == resData.signalCollectionID) {\n sc.signals.filter((sunits) => {\n if (sunits.units === \"°C\" || sunits.units === \"°F\") {\n if (\n state.temperature.value != sunits.units ||\n state.temperature.value\n ) {\n resData.signals.filter((signalData: any) => {\n if (sunits.id === signalData._id) {\n let data = isNumber(signalData.value)\n ? signalData.value\n : null;\n if (data != null) {\n if (\n sunits.units === \"°F\" &&\n state.temperature.value != null &&\n state.temperature.value === \"°C\"\n ) {\n data = ((data - 32) * 5) / 9;\n }\n if (\n sunits.units === \"°C\" &&\n (state.temperature.value === \"°F\" ||\n state.temperature.value == null ||\n state.temperature.value == undefined)\n ) {\n data = (data * 9) / 5 + 32;\n }\n signalData.value = data;\n }\n }\n });\n }\n }\n });\n }\n };\n resp.filter((res: any) => {\n if (res.data.signalCollectionID == undefined) {\n splitSignalCollection(res);\n } else {\n filterSignalData(res.data);\n }\n });\n });\n filterErrors(resp);\n if (isFormatRightYAxisData) {\n formatRightYAxisData(resp, signals);\n } else {\n formatData(resp, signals);\n }\n })\n .catch((err) => {\n errorResponse(null, err);\n setError(err.message);\n setLoading(false);\n });\n } else {\n setLoading(false);\n setError(\"500\");\n }\n\n if (C2DMessageCommandArray.length > 0) {\n Api.loadC2DMessageData(assetId, filterConfig)\n .then((c2dResp: any) => {\n assetDetails.c2dMessages = c2dResp;\n setLoading(false);\n })\n .catch((err1) => {\n errorResponse(null, err1);\n setError(err1.message);\n setLoading(false);\n });\n }\n }\n }; // loadData\n\n // function checkIsIqanKey(e:EventSignals) {\n // return (e.name === 'IQAN Connect Key');\n // }\n\n function compare(array1: WidgetSignalId[], array2: WidgetSignalId[]) {\n const newArray1 = [...array1];\n const newArray2 = [...array2];\n return (\n newArray1.length === newArray2.length &&\n newArray1.sort().every(function (value, index) {\n return value.id === newArray2.sort()[index].id;\n })\n );\n }\n\n const updateSignalArrayState = (signals: WidgetSignalId[]) => {\n const a = compare(signals, signalArray);\n if (!a) {\n setSignalArray(signals);\n }\n };\n\n updateSignalArrayState(signals);\n\n const calcMedianWindow = (window: any) => {\n const mid = Math.floor(window.length / 2);\n const nums = [...window].sort((a, b) => a.value - b.value);\n return Math.abs(nums[mid].value);\n };\n\n const calcMedian = (arr: any) => {\n const mid = Math.floor(arr.length / 2),\n nums = [...arr].sort((a, b) => a - b);\n return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n };\n\n const windowFilter = (signalData: any, transientIndices: any) => {\n const windowPercentage = 0.05;\n const k = Math.ceil(signalData.length * windowPercentage);\n const N = signalData.length;\n\n let upper: number[] = [];\n let lower: number[] = [];\n for (let i = 0; i < N; i++) {\n const windowLowerBound = Math.max(i - k, 0);\n const windowUpperBound = Math.min(i + k, N);\n let leftWindow = signalData.slice(windowLowerBound, i);\n let rightWindow = signalData.slice(i + 1, windowUpperBound);\n let window = [...leftWindow, ...rightWindow];\n\n // filter window for points that are outside the max time difference\n const maxTimeDifference = 60 * 5 * 1000; // 5 minutes\n const t = signalData[i].timestamp;\n window = window.filter(\n (signal) => Math.abs(signal.timestamp - t) > maxTimeDifference\n );\n\n // need to make sure window length is greater than 1\n // when 0 -> we cannot calculate median\n // when 1 -> scaling factor = 0 which always filters out our point\n if (window.length > 1) {\n const median = calcMedianWindow(window);\n const deviations = window.map((signal) =>\n Math.abs(Math.abs(signal.value) - median)\n );\n const scalingFactor = calcMedian(deviations);\n // console.log(median, deviations, scalingFactor);\n\n upper.push(median + 12 * scalingFactor); // scaling factor value can be tuned\n lower.push(median - 12 * scalingFactor);\n } else {\n upper.push(Math.abs(signalData[i].value));\n lower.push(Math.abs(signalData[i].value));\n }\n }\n\n signalData.forEach((signal: any, i: any) => {\n if (\n Math.abs(signal.value) > upper[i] ||\n Math.abs(signal.value) < lower[i]\n ) {\n transientIndices.add(i);\n }\n });\n\n return transientIndices;\n };\n\n useEffect(() => {\n if (filterTransients) {\n let transientIndices = new Set();\n setOriginalDataValue(data);\n let newData = new Map();\n\n data.forEach((signalData: any, SignalID: any) => {\n if (\n signalData[0].ruleName == \"latitude\" ||\n signalData[0].ruleName == \"longitude\"\n ) {\n transientIndices = windowFilter(signalData, transientIndices);\n //console.log(transientIndices);\n } else {\n let tempData: any[] = [];\n signalData.forEach((datapoint: any, eIndex: any) => {\n if (datapoint.value != 0) {\n tempData.push(datapoint);\n //console.log(\"tempData:\" + tempData);\n }\n });\n\n newData.set(SignalID, tempData);\n }\n });\n\n if (transientIndices.size > 0) {\n data.forEach((signalData: any, SignalID: any) => {\n if (\n signalData[0].ruleName == \"latitude\" ||\n signalData[0].ruleName == \"longitude\"\n ) {\n const filteredSignalData = signalData.filter(\n (signal: any, i: any) => !transientIndices.has(i)\n );\n newData.set(SignalID, filteredSignalData);\n }\n });\n }\n\n if (newData.size != 0) {\n setData(newData);\n }\n } else {\n if (originalDataValue) {\n setData(originalDataValue);\n }\n }\n }, [filterTransients]);\n // console.log(data);\n useEffect(() => {\n if (timezone != state.timezone.value && !newWidgetHeader) {\n if (\n state.timezone.value == \"asset\" &&\n state.timezone.isGpsSignalAvailable\n ) {\n if(!newWidgetHeader){\n let dataset = constructRows(originalWidgetData, signals);\n let convertedData = convertTimestamp(dataset);\n setTimezone(state.timezone.value);\n setData(convertedData);\n }\n } else {\n if(!newWidgetHeader){\n setTimezone(state.timezone.value);\n if (originalWidgetData) {\n let dataset = constructRows(originalWidgetData, signals);\n setData(dataset);\n }\n }\n }\n }\n }, [state.timezone.value]);\n\n useEffect(() => {\n if (signalArray.length > 0) {\n setLoading(true);\n\n if (!newWidgetHeader) {\n loadData(signals, {\n startDate: startDate,\n startTime: startTime,\n endDate: endDate,\n endTime: endTime,\n datapoint: datapoint,\n });\n if (rightYAxisSignals && rightYAxisSignals.length) {\n loadData(\n rightYAxisSignals || [],\n {\n startDate: startDate,\n startTime: startTime,\n endDate: endDate,\n endTime: endTime,\n datapoint: datapoint,\n },\n true\n );\n }\n } else if (initiallyLoaded) {\n setRefreshNewWidgetData(!refreshNewWidgetData) //triggers new widget refresh\n }\n\n }\n }, [\n signalArray,\n refreshTime,\n datapoint,\n startDate,\n endDate,\n startTime,\n endTime,\n rightYAxisSignals,\n state.temperature.value\n ]); //filterTransients\n\n useEffect(() => {\n if (signalArray.length > 0) {\n setLoading(true);\n loadData(signals, {\n startDate: startDate,\n startTime: startTime,\n endDate: endDate,\n endTime: endTime,\n datapoint: datapoint,\n });\n if (rightYAxisSignals && rightYAxisSignals.length) {\n loadData(\n rightYAxisSignals || [],\n {\n startDate: startDate,\n startTime: startTime,\n endDate: endDate,\n endTime: endTime,\n datapoint: datapoint,\n },\n true\n );\n }\n }\n }, [newWidgetHeader]); //filterTransients\n const parentOrgPath = state?.asset?.orgPathId?.includes(\"~\") ? state?.asset?.orgPathId.split('~') : [state?.asset?.orgPathId];\n let parentOrg:any;\n if (parentOrgPath.length > 1) {\n parentOrg=parentOrgPath[1]\n }else{\n parentOrg=parentOrgPath[0]\n }\n const [cardHeaderShow, setCardHeaderShow] = useState(() => parentOrg==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d' && isNewDashboard && (bgimageurl?true:false)? true : false);\n const mouseHover = () => \n {\n setCardHeaderShow(false); \n }\n const mouseLeave = () => \n {\n setCardHeaderShow(true); \n }\n const mouseHoverNull = () => \n {\n //void\n } \n const widgetPadding = (): CSSProperties => {\n switch (type) {\n case \"text\":\n case \"boolean\":\n return { padding: \"0px 15px 0px 15px\" };\n default:\n return { padding: \"0\" };\n }\n };\n \n const bodyStyle: CSSProperties = {\n height: \"calc(100% - 15px)\",\n ...widgetPadding(),\n };\n\n const timescaleAPIZooming = (starZoomTime: Moment, endZoomTime: Moment) => {\n setZoomedStartEndTime([starZoomTime, endZoomTime]);\n };\n\n const filterSetting = (filterSetting: WidgetFilterSetting) => {\n setWidgetFilterSetting(filterSetting)\n widgetState.widgetFilterSetting = filterSetting\n };\n\n if (newWidgetHeader && type == \"line\") {\n widgetState.timescaleAPIZooming = timescaleAPIZooming;\n widgetState.widgetFilterSetting = widgetFilterSetting;\n } else {\n widgetState.timescaleAPIZooming = undefined;\n widgetState.widgetFilterSetting = undefined;\n }\n const newWidgetStyles=()=>{\n if(parentOrg==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d' && (bgimageurl!=='null' && bgimageurl!==null)?true:false && isNewDashboard){\n return true\n }else{\n return false;\n }\n }\n //console.log(\"widgetState\",widgetState);\n \n return (\n <>\n {\" \"}\n {(widgetState?.type !== \"command\" ||\n (widgetState?.type === \"command\" &&\n (assetDetails.orgCmdPgnSpn === null ||\n assetDetails.orgCmdPgnSpns !== \"-\"))) && (\n <Card\n style={{width:\"100%\",height:'100%'}}\n onMouseEnter={widgetState?.type !== \"command\" && parentOrg==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d'?mouseHover:mouseHoverNull}\n onMouseLeave={widgetState?.type !== \"command\" && parentOrg==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d'?mouseLeave:mouseHoverNull}\n className={`toyotaWidgetStyles widgetShadow ${widgetState?.type === \"information\"?\"information-widget-style\":\"\"} ${widgetState?.type !== \"command\" && cardHeaderShow && (bgimageurl!=='null' && bgimageurl!==null?true:false)? \"card-extra-no-header\" : \"\"} ${ newWidgetStyles() ? \"toyotaWidgetStylesBg widgetNoShadow\" : \"\"} ${props.isResizable ? \"wiggleWidget\" : \"\"}`}\n title={ <Tooltip title={props.widgetState.title} >\n <span style={{ marginLeft: '0px', paddingLeft: '0px' }}> { props.widgetState.title } </span>\n </Tooltip>}\n extra={\n !newWidgetHeader ? (\n <WidgetHeader\n newWidgetHeader={newWidgetHeader}\n setNewWidgetHeader={setNewWidgetHeader}\n {...props}\n onRefresh={onRefresh}\n data={data}\n rightYAxisData={rightYAxisData}\n state={props.state}\n isLoading={isLoading}\n setFilteredTransients={setFilterTransients}\n isFilteredTransients={filterTransients}\n />\n ) : (\n <WidgetHeaderNew\n setData={setData}\n setRightAxisData={setRightAxisData}\n setLoading={setLoading}\n newWidgetHeader={newWidgetHeader}\n setNewWidgetHeader={setNewWidgetHeader}\n {...props}\n onRefresh={onRefresh}\n refreshData={refreshNewWidgetData}\n data={data}\n rightYAxisData={rightYAxisData}\n state={props.state}\n isLoading={isLoading}\n zoomedTime={zoomedStartEndTime}\n filterSetting={filterSetting}\n setInitiallyLoaded={setInitiallyLoaded}\n initiallyLoaded={initiallyLoaded}\n temperatureUnit={state.temperature.value}\n />\n )\n }\n // Makes the body the size of the card minus the size of the header\n bodyStyle={bodyStyle}\n >\n <div style={{ height: \"100%\"}}>\n {createWidget(\n widgetState,\n { template, data, rightYAxisData, state },\n error\n )}\n </div>\n </Card>\n )}{\" \"}\n {<></>}\n </>\n );\n};\n\nexport default WidgetContainer;","import { Layout } from \"react-grid-layout\";\nimport { WidgetConfig } from \".\";\nimport { DBWidgetConfig, Template, WidGetSignalConfig } from \"../models\";\nimport { computeLayout, DbLayoutConfig, WidgetState } from \"../state\";\n\n///Db requires to save the signals in with 3 attributes, signal id, name\n///and name. Before saving underline function fetch the datapoint and name\n/// from Template object for respective signals received from edit and add functionality\n\nfunction constructSignalArray(\n\tsignalId: any,\n\ttemplate: Template\n): WidGetSignalConfig {\n\tlet sid = signalId.id ? signalId.id : signalId;\n\tconst datapoint = template.signalCollections.filter((s) =>\n\t\ts.signals.find((sv) => sv.id === sid)\n\t)[0];\n\tconst signal = datapoint.signals.filter((s) => s.id === sid)[0];\n\treturn {\n\t\tname: signal.name,\n\t\tcolor: signalId.color,\n\t\tsignalId: sid,\n\t\tdatapointId: datapoint.id,\n\t};\n}\n\n///create the layout as required by DB from state sizeX, sizeY, row and col attributes.\nfunction constructLayout(widgetState: WidgetState) {\n\treturn {\n\t\tsizeX: widgetState.sizeX,\n\t\tsizeY: widgetState.sizeY,\n\t\trow: widgetState.row,\n\t\tcol: widgetState.col,\n\t};\n}\n\nexport function saveLayoutDb(\n\tlayout: Layout[]\n): (DbLayoutConfig & { _id: string })[] {\n\tfunction constructDbLayout(layout: Layout): DbLayoutConfig & { _id: string } {\n\t\tconst { i, x, y, w, h } = layout;\n\t\treturn {\n\t\t\tcol: x,\n\t\t\trow: y,\n\t\t\tsizeX: w,\n\t\t\tsizeY: h,\n\t\t\t_id: i,\n\t\t};\n\t}\n\treturn layout.map(constructDbLayout);\n}\n\n///before send a api request to save the edit widget details.\nexport function editWidgetStructureForDb(\n\twidgetId: string,\n\tcfg: WidgetConfig,\n\ttemplate: Template,\n\twidgetState: WidgetState\n): DBWidgetConfig {\n\tconst cnfg: any = cfg;\n\treturn {\n\t\t_id: widgetId,\n\t\ttype: cfg.type,\n\t\ttitle: cfg.title,\n\t\t...constructLayout(widgetState),\n\t\tsignals: cfg.signals?cfg.signals?.map((s) => constructSignalArray(s, template)):[],\n\t\t...(cfg.rightYAxisSignals && cfg.rightYAxisSignals.length>0 ? {rightYAxisSignals:\n\t\t\tcfg.rightYAxisSignals.map((s) => constructSignalArray(s, template))} : {}),\n\t\tsettings: cnfg.settings,\n\t\tinformationValue:cnfg.informationValue,\n\t};\n}\n\n///function to construct the widget struture out of various paremeters\n///before send a api request to save the Add widget details.\nexport function addWidgetStructureForDb(\n\twidgetId: string,\n\tcfg: WidgetConfig,\n\ttemplate: Template,\n\twidgetState: WidgetState[],\n\twidgetColumns:number\n): DBWidgetConfig {\n\tconst cnfg: any = cfg;\n\tlet layout: Layout[] = [];\n\tlet isCommand = cfg.type===\"command\" || cfg.type===\"command2\"\n\tlet cfgCommandSignalsLength = isCommand? cfg.signals.length : 0;\n\tif (widgetState.length === 0) {\n\t\tlayout = [\n\t\t\t{\n\t\t\t\ti: widgetId, //dummy id which will be over-written later\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\tw: 1,\n\t\t\t\th: 1,\n\t\t\t},\n\t\t];\n\t} else {\n\t\tlayout = computeLayout(widgetState, widgetColumns);\n\t}\n\tconst newLayout = layoutAlgorithm(widgetState, layout, isCommand, cfgCommandSignalsLength,widgetColumns);\n\treturn {\n\t\t_id: widgetId,\n\t\ttype: cfg.type,\n\t\ttitle: cfg.title,\n\t\t...newLayout,\n\t\tsignals: cfg.signals?cfg.signals?.map((s) => constructSignalArray(s, template)):[],\n ...(cfg.rightYAxisSignals && cfg.rightYAxisSignals.length>0 ? {rightYAxisSignals:\n\t\t\tcfg.rightYAxisSignals.map((s) => constructSignalArray(s, template))} : {}),\n\t\tsettings: cnfg.settings,\n\t\tinformationValue:cnfg.informationValue,\n\t};\n}\n\n///Algorithm steps\n///step 1: sort by y and find the element with same y\n///step 2: Accumulate the value of w for all y's in step1\n///step 3: Check or 1 or more space available beside x in the same row\n///step 4: If yes, create the new layout having y same as step 1 and x=accumulated w (step2)\n///step 4 cont..: if no, y=previous element y+1, x=0, w=1, h=1\n\nfunction layoutAlgorithm(\n\twidgetState: WidgetState[],\n\tlayout: Layout[], \n\tisCommand: boolean,\n\tcfgCommandSignalsLength: number,\n\twidgetColumns:number\n): DbLayoutConfig {\n\t//if there are no widgets currently on the page\n\tif (widgetState.length === 0) {\n\t\treturn {\n\t\t\tsizeX: isCommand?2:1,\n\t\t\tsizeY: cfgCommandSignalsLength < 3 ? 1 : 2,\n\t\t\trow: 0,\n\t\t\tcol: 0,\n\t\t};\n\t}\n\tconst sortedLayout = layout.sort(function (a, b) {\n\t\treturn a[\"y\"] - b[\"y\"];\n\t});\n\tconst lastElementY = sortedLayout[sortedLayout.length - 1].y;\n\tconst lastRowcumulativeW = sortedLayout.reduce((acc, current) => {\n\t\tif (current.y === lastElementY) {\n\t\t\tacc += current.w;\n\t\t}\n\t\treturn acc;\n\t}, 0);\n\tlet newElementY = 0;\n\tlet newElementX = 0;\n\tif (widgetColumns - lastRowcumulativeW >= 1) {\n\t\tnewElementX = lastRowcumulativeW;\n\t\tnewElementY = lastElementY;\n\t} else {\n\t\tnewElementY = lastElementY + 1;\n\t}\n\treturn {\n\t\tsizeX: isCommand?2:1,\n\t\tsizeY: cfgCommandSignalsLength < 3 ? 1 : 2,\n\t\trow: newElementY,\n\t\tcol: newElementX,\n\t};\n}\n","import React, { useEffect, useState } from \"react\";\nimport * as Api from \"./api\";\nimport { appConfigs } from \"../../utils/configurations\";\n\nconst getConnectionStatus = (response: any): boolean => {\n const errorresponseFilter = response.filter((res:any) => (res instanceof Error));\n const responseFilter = response.filter((res:any) => !(res instanceof Error));\n if(responseFilter.length > 0) {\n const deviceConnectedText = appConfigs.app.assetOverview.deviceconnectedtext;\n const responseData = response.map((res: any) => res.data) || [];\n const { signals } = responseData[0];\n if (signals) {\n const { value } = signals[0];\n if (value === deviceConnectedText) {\n return true;\n }\n }\n } \n return false;\n};\n\nexport const useAssetStatus = (gatewayId: string): boolean => {\n const [assetStatus, setAssetStatus] = useState<boolean>(false);\n const datapointId = [\n appConfigs.app.assetOverview.connectdisconnectdatapointid,\n ];\n useEffect(() => {\n if (gatewayId) {\n Api.loadSignalsData(gatewayId, datapointId)\n .then((response) => setAssetStatus(getConnectionStatus(response)))\n .catch((err) => {\n console.log(err);\n });\n }\n }, []);\n\n return assetStatus;\n};\n","import React, { useState } from \"react\";\nimport moment, { Moment } from \"moment\";\nimport {\n Form,\n Card,\n Row,\n Col,\n DatePicker,\n TimePicker,\n Select,\n Input,\n} from \"antd\";\nimport { FilterFormProps } from \"./FilterFormContainer\";\nimport { WidgetFilterConfig } from \".\";\nimport { exportValidateForms, validateForms } from \"../widgets/common\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect} from \"react-redux\";\nimport * as rootActions from \"../../../actions\";\n\n\nconst datapointValues = appConfigs.app.assetOverview.datapointlimits.map(\n (d) => ({\n value: d,\n label: d,\n })\n);\n\nfunction sanitizeInputs(c: WidgetFilterConfig): WidgetFilterConfig {\n return {\n startDate: c.startDate,\n endDate: c.endDate,\n startTime: c.startTime,\n endTime: c.endTime,\n datapoint: c.datapoint,\n };\n}\n\nconst FilterForm: React.FC<FilterFormProps & {context: any}> = (props) => {\n const [datapoint, setDatapoint] = useState(props.config?.datapoint || 50);\n\n const initialValues: WidgetFilterConfig = {\n startDate: props.config?.startDate ? props.config?.startDate : moment().subtract(1, \"days\"),\n startTime: props.config?.startTime ? props.config?.startTime : moment().subtract(1, \"days\"),\n endDate: props.config?.endDate ? props.config?.endDate : moment(),\n endTime: props.config?.endTime ? props.config?.endTime : moment(),\n datapoint: props.config?.datapoint\n };\n\n const onStartTimeChange = (time: Moment | null) => {\n if (!props.form.getFieldValue(\"startDate\"))\n props.form.setFieldsValue({ startDate: moment() });\n };\n\n const onEndTimeChange = (time: Moment | null) => {\n if (!props.form.getFieldValue(\"endDate\"))\n props.form.setFieldsValue({ endDate: moment() });\n };\n\n const onDateChange = (date: Moment | null, timeFieldName: string) => {\n props.form.setFieldsValue({ [timeFieldName]: (date ? moment(date) : null) });\n };\n \n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) =>\n props.onFinish(sanitizeInputs(values as WidgetFilterConfig))\n }\n layout=\"vertical\"\n form={props.form}\n initialValues={initialValues}\n >\n <Card title=\"Filter Widget\">\n <Row></Row>\n <div style={{ color: 'blue' }}>\n <span>Allowed to select dates within last 90 days</span>\n </div>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={24}>\n <Form.Item label=\"Start Date\">\n <Input.Group compact>\n <Form.Item\n noStyle\n name=\"startDate\" \n dependencies={[\"startTime\", \"endDate\", \"endTime\"]}\n rules={[\n ({ getFieldValue }) => ({\n validator(rule, value) {\n\n let allowed30DaysExport = [\n 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b', // Parker\n '616c4c61-865d-11eb-871a-13cc80610287', // Komatsu Germany GmbH\n 'a09ad270-3b21-11e7-893e-f94b4bc7246b', // Taylor\n \"231cb420-f381-4b5a-ad42-ae13f347075a\",\t// \"City of Calgary\"\n \"eb785adc-16a9-40db-a331-dc92fde719e4\",\t// \"NTM Global\"\n \"e13ad975-82b1-4f3a-a6b2-a3368b011087\",\t// \"Ohlssons AB\"\n \"12ca9505-a866-4d4d-b05e-1f02edd87ff4\",\t// \"NTM Canada\"\n \"f2f3ced8-154b-4e0e-90b4-907b98e02a94\",\t// \"NTM Finland\"\n \"f9c815bb-3fe4-49a3-b6dc-46a5396e006b\",\t// \"NTM Sweden\"\n \"586986cc-99c2-418b-8383-23f9d07a0c27\",\t// \"Customer1 Finland\"\n \"925a4395-11c8-4497-9174-66ba6cf10bfc\", // VIATEC \n ]\n \n if (allowed30DaysExport.includes(props.context.appContext.orgId)) {\n return exportValidateForms(\n value,\n getFieldValue(\"endDate\"),\n getFieldValue(\"startTime\"),\n getFieldValue(\"endTime\")\n );\n } else {\n return validateForms(\n value,\n getFieldValue(\"endDate\"),\n getFieldValue(\"startTime\"),\n getFieldValue(\"endTime\")\n );\n }\n\n \n },\n }),\n ]}\n >\n <DatePicker inputReadOnly \n disabledDate={(current) => {\n return (!(moment().subtract(0, 'days') >= current &&\n moment().subtract(90, 'days') <= current));\n }}\n onChange={(date) => onDateChange(date, \"startTime\")} />\n </Form.Item>\n <Form.Item noStyle name=\"startTime\">\n <TimePicker inputReadOnly onChange={onStartTimeChange} />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n <Row>\n <Col>\n <Form.Item label=\"End Date\">\n <Input.Group compact>\n <Form.Item noStyle name=\"endDate\">\n <DatePicker inputReadOnly\n disabledDate={(current) => {\n return (!(moment().subtract(0, 'days') >= current &&\n moment().subtract(90, 'days') <= current));\n }}\n onChange={(date) => onDateChange(date, \"endTime\")} />\n </Form.Item>\n <Form.Item noStyle name=\"endTime\">\n <TimePicker inputReadOnly onChange={onEndTimeChange} />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n <Row justify=\"space-between\" style={{ width: \"95%\" }}>\n <Col span={24}>\n <Form.Item name=\"datapoint\" label=\"Datapoint Limit\">\n <Select\n style={{ width: \"95%\" }}\n onChange={(v) => setDatapoint(v)}\n value={datapoint}\n options={datapointValues}\n />\n </Form.Item>\n </Col>\n </Row>\n </Card>\n </Form>\n </div>\n );\n};\n\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n }\n)(FilterForm);","import React, { useState, useEffect } from \"react\";\nimport { DETAILS as WIDGET_DETAILS } from \"../widgets\";\nimport { Template } from \"../models\";\nimport { Form, Select, ConfigProvider } from \"antd\";\nimport Event from \"../../../lib/event\";\nimport FilterForm from \"./FilterForm\";\nimport { WidgetFilterConfig } from \".\";\nimport validationMessages from \"./validation-messages\";\n\ntype FormInstance = ReturnType<typeof Form.useForm>[0];\n\ninterface Props {\n config?: WidgetFilterConfig;\n onFinish: FilterFormProps[\"onFinish\"];\n submitTrigger: Event;\n}\n\nexport interface FilterFormProps {\n config?: WidgetFilterConfig;\n onFinish: (wfg: WidgetFilterConfig) => void;\n form: FormInstance;\n layout?: \"horizontal\" | \"vertical\";\n}\n\nconst FilterFormContainer: React.FC<Props> = (props) => {\n const [form] = Form.useForm();\n\n useEffect(() => {\n const listener = props.submitTrigger.subscribe(() => form.submit());\n return () => listener.remove();\n }, [form, props.submitTrigger]);\n\n const filterProps: FilterFormProps = {\n config: props.config,\n form: form,\n onFinish: props.onFinish,\n layout: \"vertical\",\n };\n\n return (\n <div className=\"widget-filter-form\">\n <FilterForm {...filterProps} />\n </div>\n );\n};\n\nexport default FilterFormContainer;\n","import React, {useState} from 'react';\nimport {Drawer, Button } from 'antd';\nimport { WidgetFilterConfig } from '.';\nimport Event from '../../../lib/event';\nimport FilterFormContainer from './FilterFormContainer';\nimport { appConfigs } from '../../../utils/configurations';\n\ninterface Props { \n config?: WidgetFilterConfig;\n onFinish: (wfg: WidgetFilterConfig) => void; \n title: string;\n visible: boolean;\n onClose: () => void;\n \n}\n\n\nconst WidgetFilterDrawer: React.FC<Props> = (props) => {\n const [submitter] = useState(new Event());\n const drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n return (\n <Drawer\n width={drawerWidth}\n placement=\"right\"\n {...props}\n footer={\n \n <Button\n type=\"primary\"\n htmlType=\"button\"\n onClick={() => submitter.trigger()}\n >\n Save\n </Button>\n }\n onClose={props.onClose}\n destroyOnClose\n >\n <FilterFormContainer\n {...props}\n onFinish={(cfg) => {\n props.onFinish(cfg);\n props.onClose(); \n }}\n submitTrigger={submitter}\n />\n </Drawer>\n );\n};\n\nexport default WidgetFilterDrawer;","import React, { useState } from \"react\";\nimport moment, { Moment } from \"moment\";\nimport {\n Form,\n Card,\n Row,\n Col,\n DatePicker,\n TimePicker,\n Select,\n Input,\n} from \"antd\";\nimport { ExportFormProps } from \"./ExportFormContainer\";\nimport { WidgetExportConfig } from \".\";\nimport { validateForms } from \"../widgets/common\";\nimport { exportValidateForms } from \"../widgets/common\";\n\nimport { connect, useDispatch } from \"react-redux\";\nimport * as rootActions from \"../../../actions\";\n\nconst { Option } = Select;\n\nfunction sanitizeInputs(c: WidgetExportConfig): WidgetExportConfig {\n return {\n startDate: c.startDate,\n endDate: c.endDate,\n startTime: c.startTime,\n endTime: c.endTime,\n };\n}\n\nconst ExportForm: React.FC<ExportFormProps & {context: any}> = (props) => {\n const initialValues: WidgetExportConfig = {\n startDate: props.filterConfig?.startDate?props.filterConfig?.startDate:props.config?.startDate\n ? props.config?.startDate\n : moment().subtract(1, \"days\"),\n startTime: props.filterConfig?.startTime? props.filterConfig?.startTime:props.config?. startTime\n ? props.config?.startTime\n : moment().subtract(1, \"days\"),\n endDate: props.filterConfig?.endDate? props.filterConfig?.endDate: props.config?.endDate ? props.config?.endDate: moment(),\n endTime: props.filterConfig?.endTime? props.filterConfig?.endTime: props.config?.endTime\n ? props.config?.endTime\n : moment()\n };\n \n\n return (\n <div className=\"text-widget-edit-form\">\n <Form\n onFinish={(values) =>\n props.onFinish(sanitizeInputs(values as WidgetExportConfig))\n }\n layout=\"vertical\"\n form={props.form}\n initialValues={initialValues}\n >\n <Card title=\"Export Widget\">\n <div style={{ color: 'blue' }}>\n <span>Allowed to select dates within last 90 days</span>\n </div>\n <Row>\n <Col>\n <Form.Item label=\"Start Date\">\n <Input.Group compact>\n <Form.Item\n noStyle\n name=\"startDate\"\n dependencies={[\"startTime\", \"endDate\", \"endTime\"]}\n rules={[\n { required: true, message: \"Start Date required\" },\n ({ getFieldValue }) => ({\n validator(rule, value) {\n \n let allowed30DaysExport = [\n 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b', // Parker\n '616c4c61-865d-11eb-871a-13cc80610287', // Komatsu Germany GmbH\n 'a09ad270-3b21-11e7-893e-f94b4bc7246b', // Taylor\n \"231cb420-f381-4b5a-ad42-ae13f347075a\",\t// \"City of Calgary\"\n \"eb785adc-16a9-40db-a331-dc92fde719e4\",\t// \"NTM Global\"\n \"e13ad975-82b1-4f3a-a6b2-a3368b011087\",\t// \"Ohlssons AB\"\n \"12ca9505-a866-4d4d-b05e-1f02edd87ff4\",\t// \"NTM Canada\"\n \"f2f3ced8-154b-4e0e-90b4-907b98e02a94\",\t// \"NTM Finland\"\n \"f9c815bb-3fe4-49a3-b6dc-46a5396e006b\",\t// \"NTM Sweden\"\n \"586986cc-99c2-418b-8383-23f9d07a0c27\",\t// \"Customer1 Finland\"\n \"925a4395-11c8-4497-9174-66ba6cf10bfc\", // VIATEC \n ]\n \n if (allowed30DaysExport.includes(props.context.appContext.orgId)) {\n return exportValidateForms(\n value,\n getFieldValue(\"endDate\"),\n getFieldValue(\"startTime\"),\n getFieldValue(\"endTime\")\n );\n } else {\n return validateForms(\n value,\n getFieldValue(\"endDate\"),\n getFieldValue(\"startTime\"),\n getFieldValue(\"endTime\")\n );\n }\n \n },\n }),\n ]}\n >\n <DatePicker inputReadOnly disabledDate={(current) => {\n return (!(moment().subtract(0, 'days') >= current &&\n moment().subtract(90, 'days') <= current));\n }} />\n </Form.Item>\n <Form.Item\n noStyle\n name=\"startTime\"\n rules={[\n {\n required: true,\n message: \"Start Time required\",\n },\n ]}\n >\n <TimePicker inputReadOnly />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n <Row>\n <Col>\n <Form.Item label=\"End Date\">\n <Input.Group compact>\n <Form.Item noStyle name=\"endDate\">\n <DatePicker inputReadOnly disabledDate={(current) => {\n return (!(moment().subtract(0, 'days') >= current &&\n moment().subtract(90, 'days') <= current));\n }} />\n </Form.Item>\n <Form.Item\n noStyle\n name=\"endTime\"\n rules={[\n {\n required: true,\n message: \"End Time required\",\n },\n ]}\n >\n <TimePicker inputReadOnly />\n </Form.Item>\n </Input.Group>\n </Form.Item>\n </Col>\n </Row>\n </Card>\n </Form>\n </div>\n );\n};\n\n\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n }\n)(ExportForm);\n","import React, { useState, useEffect } from \"react\";\nimport { \n DETAILS as WIDGET_DETAILS,\n} from \"../widgets\";\nimport { Template } from \"../models\";\nimport { Form, Select, ConfigProvider } from \"antd\";\nimport Event from \"../../../lib/event\";\nimport ExportForm from \"./ExportForm\";\nimport { WidgetExportConfig } from '.';\nimport validationMessages from \"./validation-messages\";\nimport {WidgetFilterConfig} from \"../../Dashboard2/WidgetFilterForm/index\"\ntype FormInstance = ReturnType<typeof Form.useForm>[0];\n\ninterface Props {\n config?: WidgetExportConfig;\n onFinish: ExportFormProps[\"onFinish\"];\n submitTrigger: Event;\n filterConfig?:WidgetFilterConfig\n}\n\nexport interface ExportFormProps {\n config?: WidgetExportConfig; \n onFinish: (wfg: WidgetExportConfig) => void;\n form: FormInstance;\n filterConfig?: WidgetFilterConfig;\n layout?: \"horizontal\" | \"vertical\";\n}\n\n\nconst ExportFormContainer: React.FC<Props> = (props) => {\n const [form] = Form.useForm();\n\n useEffect(() => {\n const listener = props.submitTrigger.subscribe(() => form.submit());\n return () => listener.remove();\n }, [form, props.submitTrigger]);\n\n const filterProps: ExportFormProps = {\n config: props.config,\n form: form,\n onFinish: props.onFinish,\n filterConfig:props.filterConfig,\n layout: \"vertical\"\n }\n\n return (\n <div className=\"widget-export-form\"> \n <ExportForm {...filterProps} />\n </div>\n );\n};\n\nexport default ExportFormContainer;\n","import React, { useState } from \"react\";\nimport { Drawer, Button } from \"antd\";\nimport { WidgetExportConfig } from \".\";\nimport Event from \"../../../lib/event\";\nimport ExportFormContainer from \"./ExportFormContainer\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport {WidgetFilterConfig} from \"../WidgetFilterForm/index\";\ninterface Props {\n config?: WidgetExportConfig;\n onFinish: (wfg: WidgetExportConfig) => void;\n title: string;\n visible: boolean;\n filterConfig?:WidgetFilterConfig;\n onClose: () => void;\n}\n\nconst WidgetExportDrawer: React.FC<Props> = (props) => {\n const [submitter] = useState(new Event());\n const drawerWidth: number = Math.min(\n window.innerWidth,\n appConfigs.settings.drawers.defaultWidth\n );\n\n return (\n <Drawer\n width={drawerWidth}\n placement=\"right\"\n {...props}\n footer={\n <Button\n type=\"primary\"\n htmlType=\"button\"\n onClick={() => submitter.trigger()}\n >\n Save\n </Button>\n }\n onClose={props.onClose}\n destroyOnClose\n >\n <ExportFormContainer\n {...props}\n onFinish={(cfg) => {\n props.onFinish(cfg);\n props.onClose();\n }}\n submitTrigger={submitter}\n />\n </Drawer>\n );\n};\n\nexport default WidgetExportDrawer;\n","import moment, { Moment } from \"moment\";\nimport { WidgetExportConfig } from \".\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { State, WidgetState } from \"../state\";\nimport * as Api from \"../api\";\nimport { FindAssetTimeZone, addDateAndTime, findTimezone } from \"../widgets/common\";\nimport { WidgetSignalId } from \"../models\";\n\n\n\nfunction lastTimeStamp(apiResponse: any) {\n const lastDatapoint = apiResponse[apiResponse.length - 1];\n const utc = moment.utc(lastDatapoint[\"timestamp\"]);\n return moment.utc(lastDatapoint[\"timestamp\"]);\n}\n\nfunction nextDayTimeStamp(startDate: Moment) {\n let tomorrow = startDate.add(1, \"days\");\n return tomorrow.set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\n}\n\nexport function exportCsv(\n state: State,\n widgetState: WidgetState,\n cnfg: WidgetExportConfig\n): Promise<any> {\n const datapointArray: any = [];\n widgetState.signals.forEach((si) => {\n const datapoint = state.template.signalCollections.filter((s) =>\n s.signals.find((sg) => sg.id === si.id)\n )[0];\n\n if (datapoint && datapoint[\"id\"]) {\n datapointArray.push({ datapointId: datapoint.id, name: datapoint.name });\n }\n });\n //stop the repeataion of datapoints\n const uniqsignalCollectionId = datapointArray\n .filter((elem: any, pos1: any, arr: any) => {\n return arr.findIndex((t:any)=>(t.datapointId === elem.datapointId))===pos1\n })\n .filter((x: any) => !!x);\n\n //ops-2758\n //if right Y-axis signals are present then including collection ids into actual signal collections\n if((widgetState.rightYAxisSignals||[]).length > 0)\n {\n const rightYAxisSigCollectionId=getRightYAxisSignals(widgetState.rightYAxisSignals!,state);\n if(rightYAxisSigCollectionId !== null && rightYAxisSigCollectionId.length > 0)\n {\n uniqsignalCollectionId.push(...rightYAxisSigCollectionId);\n }\n } \n let startDate = addDateAndTime(cnfg.startDate, cnfg.startTime);\n let endDate = addDateAndTime(cnfg.endDate, cnfg.endTime);\n\n const promises = uniqsignalCollectionId.map((elem: any) => fetchDataSlice(startDate, endDate, 3000, elem.datapointId, elem.name, state.asset.id, state.asset.orgId,state.timezone));\n return Promise.all(promises);\n}\n\nasync function fetchDataSlice(\n startDate: Moment,\n stopDate: Moment,\n limit: number,\n datapointId: string,\n datapointName: string,\n gatewayId: string,\n orgId?: string,\n timezone?:any\n) {\n let MAX_DATAPOINT_LIMIT = appConfigs.app.assetOverview.maxdatapointlimit;\n\n let allowed30DaysExport = [\n 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b', // Parker\n '616c4c61-865d-11eb-871a-13cc80610287', // Komatsu Germany GmbH\n 'a09ad270-3b21-11e7-893e-f94b4bc7246b', // Taylor\n \"231cb420-f381-4b5a-ad42-ae13f347075a\",\t// \"City of Calgary\"\n \"eb785adc-16a9-40db-a331-dc92fde719e4\",\t// \"NTM Global\"\n \"e13ad975-82b1-4f3a-a6b2-a3368b011087\",\t// \"Ohlssons AB\"\n \"12ca9505-a866-4d4d-b05e-1f02edd87ff4\",\t// \"NTM Canada\"\n \"f2f3ced8-154b-4e0e-90b4-907b98e02a94\",\t// \"NTM Finland\"\n \"f9c815bb-3fe4-49a3-b6dc-46a5396e006b\",\t// \"NTM Sweden\"\n \"586986cc-99c2-418b-8383-23f9d07a0c27\",\t// \"Customer1 Finland\"\n ]\n \n if (orgId && allowed30DaysExport.includes(orgId)) {\n MAX_DATAPOINT_LIMIT = 50000\n }\n const MAX_API_LIMIT = appConfigs.app.assetOverview.maxapilimit;\n let eventData: any = [];\n\n let startDate1 = startDate.clone();\n let stopDate1 = stopDate.clone();\n\n const formatResponse = (responseData: any) => ({\n datapointId: datapointId,\n datapointName: datapointName,\n datapointRecords: responseData,\n });\n\n \n while (\n stopDate1.valueOf() > startDate1.valueOf() &&\n eventData.length < MAX_DATAPOINT_LIMIT\n ) {\n try { \n let { data } = await getDataFromApi(\n startDate1,\n stopDate1,\n limit,\n gatewayId,\n datapointId\n );\n \n //sort the from asc to desc\n data = data.sort((a: any, b: any) => {\n const timeStamp1 = moment(a[\"timestamp\"]).valueOf();\n const timeStamp2 = moment(b[\"timestamp\"]).valueOf();\n return timeStamp1 - timeStamp2\n });\n if (data.length < MAX_API_LIMIT || data.length === 0) {\n startDate1 = nextDayTimeStamp(startDate1);\n }\n if (data.length >= MAX_API_LIMIT) {\n startDate1 = lastTimeStamp(data).add(10, \"milliseconds\");\n }\n let remainingRecordToFetch =\n MAX_DATAPOINT_LIMIT - (eventData.length + data.length);\n if (remainingRecordToFetch < MAX_API_LIMIT) {\n limit = remainingRecordToFetch;\n }\n //OPS-3634 To convert UTC to Local time for export csv file\n data.forEach((item: any) =>{\n let details:any;\n if(timezone.coordinates.latitude && timezone.coordinates.longitude){\n //details =findTimezone(state.timestamp);\n details =FindAssetTimeZone(timezone.coordinates,item.timestamp);\n if (timezone.isGpsSignalAvailable && timezone.value==\"asset\" && details){\n item.timestamp=moment(details.timezoneDetails.geo_local_date_str).format().slice(0,-6)\n }\n else{\n item.timestamp=moment(item.timestamp).local().format().slice(0,-6)\n }\n\n //item.timestamp=moment(details.timezoneDetails.geo_local_date_str).format().slice(0,-6)\n }\n else{\n item.timestamp=moment(item.timestamp).local().format().slice(0,-6)\n }\n //item.timestamp=moment(item.timestamp).local().format().slice(0,-6)\n //console.log(\"timestamp,\",item.timestamp)\n })\n eventData = [...eventData, ...data]; \n } catch (error) {\n throw new Error(`Error in fetching data: ${error}`); \n }\n }\n return formatResponse(eventData);\n}\n\nasync function getDataFromApi(\n startDate: Moment,\n stopDate: Moment,\n limit: number,\n gatewayId: string,\n datapointId: string\n): Promise<any> {\n let conString = `${appConfigs.server.URL}/ui/api/assets/gateway/${gatewayId}/datapoint/${datapointId}/events`;\n\n conString += `?limit=${limit}`;\n\n conString += `&startDate=${startDate.valueOf()}`;\n let currDayEndDateTime = moment(startDate);\n currDayEndDateTime.set({\n hour: 23,\n minute: 59,\n second: 59,\n millisecond: 999,\n });\n let currDayEndEpochTime = currDayEndDateTime.valueOf();\n\n if (currDayEndDateTime.valueOf() > stopDate.valueOf()) {\n conString += `&endDate=${stopDate.valueOf()}`;\n } else {\n conString += `&endDate=${currDayEndEpochTime}`;\n }\n return Api.csvExportApi(conString);\n}\n\nfunction getRightYAxisSignals(rightYAxisSignalIds:WidgetSignalId[],state:State){\n const datapointArray: any = [];\n let rightYAxisSigCollectionId:any=[]\n\n rightYAxisSignalIds.forEach((si) => {\n const datapoint = state.template.signalCollections.filter((s) =>\n s.signals.find((sg) => sg.id === si.id)\n )[0];\n\n if (datapoint && datapoint[\"id\"]) {\n datapointArray.push({ datapointId: datapoint.id, name: datapoint.name,isRightYAxis:true });\n }\n });\n //stop the repeataion of datapoints\n rightYAxisSigCollectionId = datapointArray\n .filter((elem: any, pos1: any, arr: any) => {\n return arr.findIndex((t:any)=>(t.datapointId === elem.datapointId))===pos1\n })\n .filter((x: any) => !!x);\n return rightYAxisSigCollectionId;\n}","import { SignalCollection, Template } from \"../models\";\nimport { State, WidgetState } from \"../state\";\nimport moment, {Moment} from \"moment\";\nimport \"moment-timezone\";\nimport {findTimezone } from \"../widgets/common\";\n\n\ninterface CsvHeader {\n label: string;\n key: string;\n}\n\nfunction fetchSignalDetails(\n event: any,\n datapointName: string,\n mastertag: string,\n name: string,\n org: string,\n userPreference: string\n) {\n const { timestamp, signals = [] } = event;\n let eventsArray = signals.reduce((cum: object, elem: any) => {\n let name = elem.name;\n if (elem.uom.includes(\"Â\")) {\n elem.uom = (elem.uom).slice(1)\n }\n if (elem.uom == \"°C\" || elem.uom == \"°F\") {\n // Convert to °C\n if (elem.uom == \"°F\" && userPreference == \"°C\" && userPreference != null) {\n elem.value = (elem.value - 32) * 5 / 9;\n elem.value=Math.round(elem.value*100)/100;\n }\n // Convert to °F\n if (elem.uom == \"°C\" && (userPreference == \"°F\" || userPreference == null)) {\n elem.value = (elem.value * 9 / 5) + 32;\n elem.value=Math.round(elem.value*100)/100;\n }\n elem.uom = userPreference ? userPreference : \"°F\";\n }\n if (elem.uom !== \"\") {\n var slice = elem.uom.slice(1);\n const tempUnits = [\"C\", \"F\"];\n let checkStr = tempUnits.some(temp => slice.includes(temp));\n elem.uom = checkStr ? slice == \"C\" ? \"°C\" : \"°F\" : elem.uom;\n name += `(${elem.uom})`;\n }\n return { ...cum, [name]: elem.value };\n }, {});\n return {\n ...eventsArray,\n timestamp: timestamp,\n mastertag: mastertag,\n assetName: name,\n orgName: org,\n signalCollectionName: datapointName,\n };\n}\n\nfunction createHeader(arrayOfObj: any, headerArray: any) {\n let notPresentKeys = Object.keys(arrayOfObj).filter((k: string) => {\n return headerArray.findIndex((s: any) => s.key == k) === -1;\n });\n const headerKeys = notPresentKeys.reduce((cum1: any, elem1: any) => {\n return [...cum1, { label: elem1, key: elem1 }];\n }, []);\n headerArray = [...headerArray, ...headerKeys];\n return headerArray;\n}\n//sort the export response data by signal collection order\nfunction sortResponse(response: any, template: Template) {\n let sortedExportEvents: any = [];\n const { signalCollections } = template;\n const newSignalCollections = [...signalCollections];\n if (signalCollections.length > 0) {\n const sortedSignalCollections = sortSignalCollection(newSignalCollections);\n sortedSignalCollections.forEach((current: SignalCollection) => {\n const newResponse = response.filter(\n (elem: any) => elem.datapointId === current.id\n );\n if (newResponse.length > 0) {\n sortedExportEvents = [...sortedExportEvents, newResponse[0]];\n }\n });\n }\n return sortedExportEvents;\n}\n//sort the signal collection by alphabet.\nfunction sortSignalCollection(\n signalCollections: SignalCollection[]\n): SignalCollection[] {\n const sortedSignalCollections = signalCollections.sort(\n (elem1: SignalCollection, elem2: SignalCollection) => {\n return elem2.name.toLocaleLowerCase() < elem1.name.toLocaleLowerCase()\n ? 1\n : elem2.name.toLocaleLowerCase() > elem1.name.toLocaleLowerCase()\n ? -1\n : 0;\n }\n );\n return sortedSignalCollections;\n}\n\nexport function prepareWidgetEvents(\n response: any,\n state: State,\n widgetState: WidgetState\n) {\n const { template, temperature } = state;\n let details=findTimezone(state.timezone)\n const { mastertag, name, orgName } = state.asset;\n if (template.signalCollections.length > 1) {\n response = sortResponse(response, template);\n }\n let headerArray: CsvHeader[] = [\n { label: (\"Time Stamp\"+\" (\").concat(details?.timezone)+(\")\"),key: \"timestamp\"},\n //{ label: (\"Time Stamp\"+\" (\").concat(moment().tz(moment.tz.guess()).format('z'))+(\")\"), key: \"timestamp\" },//OPS-3712- To Know Timezone string\n { label: \"Organization Name\", key: \"orgName\" },\n { label: \"Master Tag\", key: \"mastertag\" },\n { label: \"Asset Name\", key: \"assetName\" },\n { label: \"Signal Collection Name\", key: \"signalCollectionName\" },\n ];\n\n const eventsArrays = response.reduce((eventArray: any, curElemenet: any) => {\n let isHeaderKeysAdded = false;\n const singleEventArray = curElemenet.datapointRecords.reduce(\n (eventDataArray: any, current: any) => {\n const arrayOfObj = fetchSignalDetails(\n current,\n curElemenet.datapointName,\n mastertag,\n name,\n orgName,\n temperature.value\n );\n \n headerArray = createHeader(arrayOfObj, headerArray);\n eventDataArray = [...eventDataArray, arrayOfObj];\n return eventDataArray;\n },\n []\n );\n eventArray = [...eventArray, ...singleEventArray];\n return eventArray;\n }, []);\n\n return {\n eventHeader: headerArray,\n eventArray: eventsArrays,\n };\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#7725b9\",\n className: \"st0\",\n d: \"M119.28,33.83v44.74h-10.46v-6.91H49.94v6.91l-10.46,0V33.83h-3.6v-6.88h8.8l4.91-15.26 c1.45-4.49,3.86-8.58,8.58-8.58h44.26c4.72,0,7.44,4,8.58,8.58l3.79,15.26h8.09v6.88H119.28L119.28,33.83L119.28,33.83z M3.7,58.62 c-2.82,3.72-5.06,7.89-2.73,14.01c1.51,3.97,4.99,7.23,9.38,9.04c-7.17-15.82,13.41-21.49,14.03-2.75 c6.89-5.72,6.83-14.15,1.78-20.97c-2.38-3.22-3.58-5.03-4.1-6.89c-0.3-1.01-0.36-2.03-0.36-3.32c-0.02-4.35,0.48-8.63,0.58-13.24 c0.17-8.7,13.54-13.09,8.83-25.46C29.6,5.07,26.12,1.82,21.73,0C28.9,15.82,8.32,21.49,7.7,2.75C0.81,8.47,0.87,16.9,5.92,23.72 c2.22,2.99,4.83,4.87,4.67,10.76c-0.17,4.09-0.44,8.31-0.71,12.41c-0.1,1.63-0.26,2.71-0.66,3.74c-0.71,1.86-2.15,3.54-5.51,7.94 L3.7,58.62L3.7,58.62z M65.11,57.85h28.09v7.28l-28.09,0V57.85L65.11,57.85L65.11,57.85z M42.98,40.89 c7.87,0.25,12.69,3.55,13.92,10.42H42.98V40.89L42.98,40.89z M114.78,40.89c-7.87,0.25-12.69,3.55-13.92,10.42h13.92V40.89 L114.78,40.89z M48.43,26.95h61.89l-2.77-12.79c-0.76-3.51-2.94-6.54-6.54-6.54H59.07c-3.59,0-5.44,3.11-6.54,6.54L48.43,26.95 L48.43,26.95L48.43,26.95z\"\n}));\n\nvar SvgAssetDown = function SvgAssetDown(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"26px\",\n height: \"26px\",\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 122.88 81.68\",\n style: {\n enableBackground: \"new 0 0 122.88 81.68\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAssetDown, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/asset_down.26dcac92.svg\";\nexport { ForwardRef as ReactComponent };","import React, { CSSProperties, Component } from \"react\";\nimport { Space, Typography, Tooltip, Row, Col, Badge } from \"antd\";\nimport history from \"../../../utils/history\";\nimport { stringToUrlString } from \"../../../utils/commonHelpers\";\nimport { useAssetStatus } from \"../useAssetStatus\";\nimport AssetStatus from \"../AssetStatus\";\nimport Icon from \"@ant-design/icons\";\nimport { BarcodeOutlined, FileTextOutlined } from \"@ant-design/icons\";\nimport { ReactComponent as TractorIcon } from \"../../../assets/images/tractor-black.svg\";\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport { PermissionProps } from \"../models\";\nimport { ReactComponent as OperatorIcon } from \"../../../assets/images/operator.svg\";\nimport { ReactComponent as OfflinePin } from \"../../../assets/images/map-pins/offline-pin.svg\";\nimport { ReactComponent as OnlinePin } from \"../../../assets/images/map-pins/online-pin.svg\";\nimport { ReactComponent as AssetDownPin } from \"../../../assets/images/map-pins/asset_down.svg\";\nimport { ReactComponent as Komatsu } from \"../../../assets/images/komatsu-black.svg\";\nimport Reset from \"../../../assets/images/reset.png\";\n\n\nimport { connect, useDispatch } from \"react-redux\";\nimport * as rootActions from \"../../../actions\";\nimport moment from \"moment\";\nimport tzlookup from \"tz-lookup\";\n\n\nconst { Title } = Typography;\n\nexport interface HeaderProps {\n name: string;\n id: string;\n mastertag: string;\n templateId: string;\n templateName: string;\n alertDm1Count: number;\n alertInfoCount: number;\n alertWarningCount: number;\n alertCriticalCount: number;\n mac: string;\n operatorId: string;\n operatorIdValue: string;\n accessCardValue: string;\n operatorsHistoryId: string;\n connectionStatus: string;\n resetTimestamp: string;\n resetlocationLatitude: number;\n resetlocationLongitude: number;\n assetDownDesc: string;\n}\n\ntype Props = HeaderProps & PermissionProps;\n\nconst DashboardHeader: React.FC<Props & {context: any}> = ({\n name,\n id,\n mastertag,\n templateName,\n templateId,\n mac,\n isRead,\n isUpdate,\n isAssetUpdate,\n isTemplatesRead,\n operatorId,\n operatorIdValue,\n accessCardValue,\n operatorsHistoryId,\n isOprRead,\n isOprUpdate,\n connectionStatus,\n resetTimestamp,\n resetlocationLatitude,\n resetlocationLongitude,\n assetDownDesc,\n context\n}) => {\n const styles: CSSProperties = {\n fontSize: \"14px\",\n fontWeight: 400,\n verticalAlign: \"text-bottom\",\n marginRight: \"10px\",\n };\n\n const goToDetails = (e: any, templateName: string, templateId: string) => {\n e.preventDefault();\n history.push(\n \"/template/details/\" + stringToUrlString(templateName) + \"/\" + templateId\n );\n };\n\n const getTimezone=(lat:number, long:number) => {\n let location = tzlookup(lat, long);\n let zone=moment.tz(location).format('z');\n return zone;\n }\n\n const goToAsset = (e: any, mac?: string) => {\n e.preventDefault();\n history.push(\n \"/assets\" + ((mac || \"\") === \"\" ? \"\" : \"/\" + mac + \"/details\")\n );\n };\n {/* Commenting below code to get status from rediscache*/}\n // const assetStatus = useAssetStatus(id);\n const { Text } = Typography;\n const goToOperators = (e: any, id: string, operatorsHistoryId?: string,isOperator?:boolean) => {\n e.preventDefault();\n history.push({pathname:\"/operators/\" + stringToUrlString(id) + ((operatorsHistoryId || \"\") === \"\" ? \"\" : \"/\" + operatorsHistoryId),state:{isOperator:isOperator}});\n };\n\n return (\n <Row>\n <Col> \n <div className=\"column\">\n <Title style={styles} level={4}>\n <Tooltip title=\"Go To Previous Page\">\n <div style={{ position: \"relative\", top: \"6px\", left: \"5px\" }}>\n <BackNavigation />\n </div>\n </Tooltip>\n </Title>\n {/* Commenting below code to get status from rediscache*/}\n {/* <Title style={styles} level={4}>\n <AssetStatus assetStatus={assetStatus} />\n </Title> */}\n <Title style={styles} level={4}>\n {\n (connectionStatus === \"ONLINE\") ? \n <Tooltip title=\"Online\">\n <OnlinePin style={{ verticalAlign: \"middle\" }} />\n </Tooltip> \n :\n ((assetDownDesc === null || assetDownDesc === '') ?\n <Tooltip title=\"Offline\">\n <OfflinePin style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n :\n <Tooltip title= {\"Asset Down : \" + assetDownDesc} >\n <AssetDownPin style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n )\n }\n </Title> \n <Title style={styles} level={4}>\n <Tooltip title=\"AssetName\">\n <>\n { (context.appContext.orgId == '616c4c61-865d-11eb-871a-13cc80610287') ? (\n <Icon\n type=\"setting\"\n component={Komatsu}\n style={{ verticalAlign: \"middle\", fontSize: \"40px\" }}\n />\n ): (\n <Icon\n type=\"setting\"\n component={TractorIcon}\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n )\n }\n </>\n </Tooltip>{\" \"}\n {name}\n </Title>\n {isTemplatesRead ? (\n <Title style={styles} level={4}>\n <Tooltip title=\"Template\">\n <FileTextOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n <a\n href=\"# \"\n onClick={(e) => goToDetails(e, templateName, templateId)}\n >\n {templateName}\n </a>\n </Title>\n ) : (\n <Title style={styles} level={4}>\n <Tooltip title=\"Template\">\n <FileTextOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n {templateName}\n </Title>\n )}\n {isAssetUpdate ? (\n <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\">\n <BarcodeOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n <a href=\"# \" onClick={(e) => goToAsset(e, mac)}>\n {\" \"}\n {mac}{\" \"}\n </a>\n </Title>\n ) : (\n <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\">\n <BarcodeOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n {mac}\n </Title>\n )}\n {\n (isOprRead && isOprUpdate) && (operatorIdValue || accessCardValue) ?\n <Title style={styles} level={4}>\n <Tooltip title={(operatorIdValue || \"\") === \"\" ? \"RFID\" : \"OperatorID\"}>\n <Icon type=\"setting\" component={OperatorIcon} style={{ verticalAlign: \"middle\", fontSize: '22px' }} />\n </Tooltip> {\n (operatorIdValue || \"\") === \"\" ?\n <a href=\"# \" onClick={(e) => goToOperators(e, accessCardValue, operatorsHistoryId,false)}> {accessCardValue} </a>\n : <a href=\"# \" onClick={(e) => goToOperators(e, operatorIdValue, operatorId,true)}> {operatorIdValue} </a>\n }\n </Title> : \"\"\n }\n {\n resetTimestamp && resetTimestamp !== null &&\n <Title style={styles} level={4}>\n <Tooltip title=\"PM Reset Date\">\n <img src={Reset} alt=\"\" style={{paddingRight: '5px', cursor: 'default'}}/>\n </Tooltip>\n <Text>{moment.utc(resetTimestamp).local().format(\"MM/DD/YYYY\")} ({getTimezone(resetlocationLatitude,resetlocationLongitude)})</Text>\n </Title>\n }\n </div>\n <div className=\"asset-header asset-header1\">\n <Title style={styles} level={4}>\n <div style={{ position: \"relative\", top: \"6px\", left: \"5px\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n </div>\n </Title>\n {/* Commenting below code to get status from rediscache*/}\n {/* <Title style={styles} level={4}>\n <AssetStatus assetStatus={assetStatus} />\n </Title> */}\n <Title style={styles} level={4}>\n {(connectionStatus || \"\") === \"ONLINE\" ?\n <Tooltip title=\"Online\">\n <OnlinePin style={{ verticalAlign: \"middle\" }} />\n </Tooltip> \n : \n <Tooltip title=\"Offline\">\n <OfflinePin style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n }\n </Title> \n <Title style={styles} level={4}>\n <Tooltip title=\"AssetName\">\n <Icon\n type=\"setting\"\n component={TractorIcon}\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>{\" \"}\n {name}\n </Title> \n </div> \n <div className=\"asset-header\">\n {isRead ? (\n <Title style={styles} level={4}>\n <Tooltip title=\"Template\">\n <FileTextOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n <a\n href=\"# \"\n onClick={(e) => goToDetails(e, templateName, templateId)}\n >\n {templateName}\n </a>\n </Title>\n ) : (\n <Title style={styles} level={4}>\n <Tooltip title=\"Template\">\n <FileTextOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n {templateName}\n </Title>\n )}\n {isRead && isUpdate ? (\n <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\">\n <BarcodeOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n <a href=\"# \" onClick={(e) => goToAsset(e, mac)}>\n {\" \"}\n {mac}{\" \"}\n </a>\n </Title>\n ) : (\n <Title style={styles} level={4}>\n <Tooltip title=\"SerialNo\">\n <BarcodeOutlined\n style={{ verticalAlign: \"middle\", fontSize: \"22px\" }}\n />\n </Tooltip>\n {mac}\n </Title>\n )}\n {\n (isOprRead && isOprUpdate) && (operatorIdValue || accessCardValue) ?\n <Title style={styles} level={4}>\n <Tooltip title={(operatorIdValue || \"\") === \"\" ? \"RFID\" : \"OperatorID\"}>\n <Icon type=\"setting\" component={OperatorIcon} style={{ verticalAlign: \"middle\", fontSize: '22px' }} />\n </Tooltip> {\n (operatorIdValue || \"\") === \"\" ?\n <a href=\"# \" onClick={(e) => goToOperators(e, accessCardValue, operatorsHistoryId,false)}> {accessCardValue} </a>\n : <a href=\"# \" onClick={(e) => goToOperators(e, operatorIdValue, operatorId,true)}> {operatorIdValue} </a>\n }\n </Title> : \"\"\n }\n {\n resetTimestamp && resetTimestamp !== null &&\n <Title style={styles} level={4}>\n <Tooltip title=\"PM Reset Date\">\n <img src={Reset} alt=\"\" style={{paddingRight: '5px', cursor: 'default'}}/>\n </Tooltip>\n <Text>{moment.utc(resetTimestamp).local().format(\"MM/DD/YYYY\")} ({getTimezone(resetlocationLatitude,resetlocationLongitude)})</Text>\n </Title>\n }\n </div> \n </Col>\n </Row>\n );\n};\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n }\n)(DashboardHeader);\n\n\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.2,0h59.47c4.73,0,9.03,1.93,12.15,5.05c3.12,3.12,5.05,7.42,5.05,12.15v38.36c0,4.73-1.93,9.03-5.05,12.15 c-3.12,3.12-7.42,5.05-12.15,5.05H46.93L20.81,95.21c-1.21,1.04-3.04,0.9-4.08-0.32c-0.51-0.6-0.74-1.34-0.69-2.07l1.39-20.07H17.2 c-4.73,0-9.03-1.93-12.15-5.05C1.93,64.59,0,60.29,0,55.56V17.2c0-4.73,1.93-9.03,5.05-12.15C8.16,1.93,12.46,0,17.2,0L17.2,0z M102.31,27.98c3.37,0.65,6.39,2.31,8.73,4.65c3.05,3.05,4.95,7.26,4.95,11.9v38.36c0,4.64-1.89,8.85-4.95,11.9 c-3.05,3.05-7.26,4.95-11.9,4.95h-0.61l1.42,20.44l0,0c0.04,0.64-0.15,1.3-0.6,1.82c-0.91,1.07-2.52,1.19-3.58,0.28l-26.22-23.2 H35.01l17.01-17.3h36.04c7.86,0,14.3-6.43,14.3-14.3V29.11C102.35,28.73,102.34,28.35,102.31,27.98L102.31,27.98z M25.68,43.68 c-1.6,0-2.9-1.3-2.9-2.9c0-1.6,1.3-2.9,2.9-2.9h30.35c1.6,0,2.9,1.3,2.9,2.9c0,1.6-1.3,2.9-2.9,2.9H25.68L25.68,43.68z M25.68,29.32c-1.6,0-2.9-1.3-2.9-2.9c0-1.6,1.3-2.9,2.9-2.9H68.7c1.6,0,2.9,1.3,2.9,2.9c0,1.6-1.3,2.9-2.9,2.9H25.68L25.68,29.32z M76.66,5.8H17.2c-3.13,0-5.98,1.28-8.05,3.35C7.08,11.22,5.8,14.06,5.8,17.2v38.36c0,3.13,1.28,5.98,3.35,8.05 c2.07,2.07,4.92,3.35,8.05,3.35h3.34v0.01l0.19,0.01c1.59,0.11,2.8,1.49,2.69,3.08l-1.13,16.26L43.83,67.8 c0.52-0.52,1.24-0.84,2.04-0.84h30.79c3.13,0,5.98-1.28,8.05-3.35c2.07-2.07,3.35-4.92,3.35-8.05V17.2c0-3.13-1.28-5.98-3.35-8.05 C82.65,7.08,79.8,5.8,76.66,5.8L76.66,5.8z\"\n});\n\nvar SvgChat = function SvgChat(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 115.98 122.88\",\n fill: \"gray\",\n fillOpacity: 0.8,\n strokeWidth: 2,\n strokeLinejoin: \"round\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgChat, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/chat.5b63b7ea.svg\";\nexport { ForwardRef as ReactComponent };","import React, { CSSProperties } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Space, Badge, Switch, Tooltip, Row, Col, Divider } from \"antd\";\nimport { ReactComponent as BellSvg } from \"../../../assets/images/bell.svg\";\nimport { ReactComponent as ChatSvg } from \"../../../assets/images/chat.svg\";\nimport { ReactComponent as Dm1Pin } from \"../../../assets/images/map-pins/dm1-pin.svg\";\nimport { PermissionProps } from \"../models\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../../actions\";\nimport { templateContainsMSIntervals } from \"../../../utils/commonHelpers\";\nimport \"../assetnotes.css\";\n\n\nexport interface ExtraProps {\n orgId?: string; \n mastertag?: string;\n temperature?: any;\n timezone?: any;\n assetCallBackFnSuccess: (filterData: any,isTimezoneChanged: any) => any;\n onLayoutViewChange: (checked: boolean) => void;\n refreshWidgets?: () => void;\n datapoints?: any;\n gpsCoordinates?:any;\n}\ninterface SignalR {\n enableSignalRData: Function;\n disableSignalRData: Function;\n onAssetNotesDrawerToggle: Function,\n signalRDataEnabled: boolean;\n context: any;\n filterPreferences: Function;\n}\n\ninterface Dashboard {\n dashboard: any;\n onAssetNotesDrawerToggle: Function,\n}\n\n\ntype Props = ExtraProps & PermissionProps & SignalR & Dashboard;\n\nconst DashboardHeaderExtra: React.FC<Props> = (props) => {\n const { isUpdate, mastertag, onLayoutViewChange, refreshWidgets, temperature,timezone } = props;\n const styles: CSSProperties = {\n fontSize: \"14px\",\n fontWeight: 400,\n verticalAlign: \"text-bottom\",\n marginRight: \"10px\",\n };\n const convertTemperature = (checked: boolean) => {\n let value = temperature.value == \"°C\" ? '°F' : '°C';\n props.filterPreferences('assets', 'temperature', value, false, props.assetCallBackFnSuccess,false);\n };\n\n const convertTimezone = (checked: boolean) => {\n let value = timezone.value == \"asset\" ? 'local' : 'asset';\n props.filterPreferences('assets', 'timezone', value, false, props.assetCallBackFnSuccess,true);\n \n }; \n\n const enableLiveData = (enabled: any) => {\n\n // Refresh all widgets with news values\n if (refreshWidgets) {\n refreshWidgets()\n }\n\n if (enabled) {\n props.enableSignalRData()\n } else {\n props.disableSignalRData()\n }\n\n }\n\n const toggleAssetNotesDrawer = () => {\n props.onAssetNotesDrawerToggle(!props.dashboard.assetNotes.visible);\n };\n\n return (\n <>\n \n <Space key=\"page-header-space\" direction=\"horizontal\" size=\"small\">\n {\n <Tooltip placement=\"bottom\" overlayStyle={{ maxWidth: '450px' }} title={\n props.dashboard.assetNotes.notes.all.length > 0 ?\n <>\n <span><b>Asset Notes</b></span>\n <hr/>\n <span>Most Recent Note:</span><br/>\n <span>{props.dashboard.assetNotes.notes.all[props.dashboard.assetNotes.notes.all.length - 1].noteBody}</span><br /><br />\n <span style={{'float': 'right'}}>{props.dashboard.assetNotes.notes.all[props.dashboard.assetNotes.notes.all.length - 1].userName} - {props.dashboard.assetNotes.notes.all[props.dashboard.assetNotes.notes.all.length - 1].createdAt}</span><br />\n </>\n :\n \"Asset Notes\"\n }>\n <Badge dot={props.dashboard.assetNotes.notes.pinned.length > 0}>\n <ChatSvg onClick={toggleAssetNotesDrawer} style={{ verticalAlign: \"middle\", fill: props.dashboard.assetNotes.notes.all.length ? \"#18990f\" : \"gray\", cursor: 'pointer' }} />\n </Badge>\n </Tooltip>\n } \n <Link\n to={{\n pathname: \"/alerts\",\n state: [{ mode: \"signal-alarms\", mastertag: mastertag }],\n }}\n >\n <Tooltip title=\"Click To View Asset's Signal Alarms List\">\n <BellSvg style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n </Link>\n\n <Link\n to={{\n pathname: \"/alerts\",\n state: [{ mode: \"dm1-faults\", mastertag: mastertag }],\n }}\n >\n <Tooltip title=\"Click To View Asset's DM1 Faults List\">\n <Dm1Pin style={{ verticalAlign: \"middle\" }} />\n </Tooltip>\n </Link>\n {isUpdate ?\n <Tooltip title=\"Click and drag and drop widget's headers to rearrange or click on widget's bottom right corner to resize\">\n <Switch\n key=\"layoutView\"\n checkedChildren=\"Off\"\n unCheckedChildren=\"On\"\n onChange={onLayoutViewChange}\n />\n </Tooltip>\n : ''\n }\n {\n <Tooltip title={(!props.gpsCoordinates.latitude && !props.gpsCoordinates.longitude)?\"GPS signal not available\":\"Toggle between Local and Asset timezone\"}>\n <Switch\n key=\"layoutView\"\n checkedChildren={timezone.value == \"asset\" ? (!props.gpsCoordinates.latitude && !props.gpsCoordinates.longitude)? \"Local timezone\": \"Asset timezone\": \"Local timezone\"}\n unCheckedChildren={timezone.value == \"asset\" ? \"Local timezone\": \"Asset timezone\"}\n checked={(timezone.value == null || timezone.value) ? true : false}\n disabled={!props.gpsCoordinates.latitude && !props.gpsCoordinates.longitude}\n onChange={convertTimezone}\n />\n </Tooltip>\n }\n {\n <Tooltip title=\"Toggle between °F and °C\">\n <Switch\n key=\"layoutView\"\n checkedChildren={temperature.value == \"°C\" ? \"°C\" : \"°F\"}\n unCheckedChildren={temperature.value == \"°C\" ? \"°F\" : \"°C\"}\n checked={(temperature.value == null || temperature.value) ? true : false}\n onChange={convertTemperature}\n />\n </Tooltip>\n } \n { props.hasOwnProperty('datapoints') ?\n <>\n { !templateContainsMSIntervals(props?.datapoints) ?\n <Tooltip title=\"If enabled, widgets will auto refresh automatically (except Cloud-to-Device chat history)\">\n <Switch\n key=\"enableSignalRData\"\n checkedChildren=\"Auto Refresh\"\n unCheckedChildren=\"Auto Refresh\"\n defaultChecked={props.signalRDataEnabled}\n checked={props.signalRDataEnabled}\n onChange={enableLiveData}\n />\n </Tooltip>\n : ''\n }\n </>\n : ''\n }\n \n </Space>\n </>\n );\n};\n\n// export default DashboardHeaderExtra;\nconst mapStateToProps = (state: any) => {\n return {\n signalRDataEnabled: state.contextReducer.signalRData.enabled,\n context: state.contextReducer.context,\n dashboard: state.dashboardReducer.context,\n gpsCoordinates: state.contextReducer.gpsCoordinates\n };\n};\nexport default connect(\n mapStateToProps,\n actions\n)(DashboardHeaderExtra);\n","import { Space, Input, message, Divider } from \"antd\";\nimport { EditOutlined, SaveOutlined, UndoOutlined } from \"@ant-design/icons\";\nimport React, { useState } from \"react\";\n\ninterface Props {\n title: string;\n dashboadId: number;\n permissionSet: any;\n onTitleUpdate: (dashboardId: number, title: string) => void\n}\n\nconst DashboardTitleText: React.FC<Props> = (props) => {\n const { title, dashboadId, onTitleUpdate, permissionSet } = props;\n const [editTitle, setEditTitle] = useState<boolean>(false);\n const [newtitle, setNewTitle] = useState<string>(title);\n\n const onEditClick = (e: any) => {\n // console.log(dashboadId);\n e.stopPropagation();\n setEditTitle(true);\n };\n\n const saveTitle = (e: any) => { \n e.stopPropagation(); \n if(newtitle.length === 0) {\n message.info(\"Dashboard title can not be empty\");\n return;\n } \n onTitleUpdate(dashboadId, newtitle);\n setEditTitle(false);\n }\n\n const undoTitle = (e: any) => {\n e.stopPropagation();\n setNewTitle(title);\n setEditTitle(false); \n }\n\n if (!editTitle) {\n return (\n <Space size=\"small\">\n {title}\n {\n permissionSet[2] && <><div style={{ backgroundColor: '#dedede', minWidth: '1px', minHeight: '20px', marginRight: '0px', marginLeft: '0px' }} /> <EditOutlined style={{ marginLeft: '0px', paddingLeft: '0px' }} onClick={(e) => onEditClick(e)} /></>\n } \n </Space>\n );\n }\n\n return (\n <Space size=\"small\">\n <Input\n size=\"small\"\n value={newtitle}\n maxLength={16}\n onClick={(event) => event.stopPropagation()}\n onChange={(event) => setNewTitle(event.target.value)}\n />\n <div style={{ backgroundColor: '#dedede', minWidth: '1px', minHeight: '20px', marginRight: '0px', marginLeft: '0px' }} />\n <SaveOutlined onClick={(e) => saveTitle(e)} />\n <UndoOutlined onClick={(e) => undoTitle(e)} />\n </Space>\n );\n};\n\nexport default DashboardTitleText;\n","import React, { useState } from \"react\";\nimport { Popconfirm } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\n\ninterface Props {\n dashboardId: number;\n onDashboardDelete: (dashboardId: number) => void;\n}\n\nconst DashboardClosing: React.FC<Props> = ({ dashboardId, onDashboardDelete }) => {\n const [showPopCinfirm, setShowPopConfirm] = useState<boolean>(false);\n\n const handleDelete = () => {\n setShowPopConfirm(false);\n onDashboardDelete(dashboardId);\n }; \n return (\n <Popconfirm\n visible={showPopCinfirm}\n onConfirm={handleDelete}\n onCancel={() => setShowPopConfirm(false)}\n title=\"Are you sure to delete this dashboard?\"\n >\n <CloseOutlined onClick={() => setShowPopConfirm(true)} />\n </Popconfirm>\n );\n};\n\nexport default DashboardClosing;\n","import React, { useState, useRef,useEffect } from \"react\";\nimport { Grid, Button, PageHeader, Empty, message,Tooltip,Upload } from \"antd\";\nimport { SizeMe } from \"react-sizeme\";\nimport GridLayout, { ReactGridLayoutProps } from \"react-grid-layout\";\nimport { CSVLink } from \"react-csv\";\nimport \"react-grid-layout/css/styles.css\";\nimport { WidgetState, State, DashboardState } from \"./state\";\nimport { WidgetConfig } from \"./widgets\";\nimport WidgetContainer from \"./WidgetContainer\";\nimport Icon, { PlusOutlined, UploadOutlined, LoadingOutlined, DeleteOutlined } from \"@ant-design/icons\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport Axios from \"axios\";\nimport WidgetEditDrawer from \"./WidgetEditForm\";\nimport * as Api from \"./api\";\nimport {\n loadingIndicatorEnd,\n loadingIndicatorStart,\n uuidv4,\n getPermissions,\n} from \"../../utils/commonHelpers\";\nimport {\n editWidgetStructureForDb,\n addWidgetStructureForDb,\n saveLayoutDb,\n} from \"./widgets/widgetapi\";\nimport { DBWidgetConfig, PermissionProps } from \"./models\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\nimport \"./AssetDashboard.css\";\nimport { useAssetStatus } from \"./useAssetStatus\";\nimport AssetStatus from \"./AssetStatus\";\nimport { WidgetFilterConfig, WidgetFilterDrawer } from \"./WidgetFilterForm\";\nimport {\n WidgetExportConfig,\n WidgetExportDrawer,\n exportCsv,\n prepareWidgetEvents,\n} from \"./WidgetExportForm\";\nimport { useAssetAlerts } from \"./useAssetAlerts\";\nimport { useExport } from \"./WidgetExportForm/useExport\";\nimport { connect } from \"react-redux\";\nimport ReactGridLayout from \"react-grid-layout\";\nimport {\n DashboardHeader,\n DashboardHeaderExtra,\n DashboardHeaderExtraProps,\n DashboardHeaderProps,\n} from \"./DashboardHeader\";\n\nconst { useBreakpoint } = Grid;\n\ntype Breakpoints = ReturnType<typeof useBreakpoint>;\n\nfunction columnNumber(breakpoints: Breakpoints) {\n if (breakpoints.xl) {\n return 4;\n } else if (breakpoints.lg) {\n return 3;\n } else if (breakpoints.md) {\n return 2;\n } else {\n return 1;\n }\n}\n\ninterface EditState {\n visible: boolean;\n title: string;\n onFinish: (cfg: WidgetConfig) => void;\n config?: WidgetConfig;\n assetDetail?: any;\n onDualChange: (checked: boolean) => void;\n enabledualaxis:boolean;\n}\n\ninterface FilterState {\n visible: boolean;\n title: string;\n onFinish: (cfg: WidgetFilterConfig) => void;\n config?: WidgetFilterConfig;\n}\n\ninterface ExportState {\n visible: boolean;\n title: string;\n filterConfig?: WidgetFilterConfig\n onFinish: (cfg: WidgetExportConfig) => void;\n}\n\nconst DEFAULT_FILTER_STATE: FilterState = {\n visible: false,\n title: \"\",\n onFinish: (cfg) => {},\n};\n\nconst DEFAULT_EXPORT_STATE: ExportState = {\n visible: false,\n title: \"\",\n onFinish: (cfg) => {},\n};\n\nconst DEFAULT_EDIT_STATE: EditState = {\n visible: false,\n title: \"\",\n onFinish: (cfg) => {},\n onDualChange:(checked)=>{},\n enabledualaxis:false\n};\n//rowHeight: 220,\nconst GRID_SETTINGS: ReactGridLayoutProps = {\n compactType: \"vertical\",\n containerPadding: [0, 0],\n isDraggable: false,\n isResizable: false,\n};\n\ninterface DataProps {\n state: State;\n context: any;\n permissions: any;\n SignalRInitialData: any;\n dashboardId: number;\n bgImageUrlProp:any;\n isNewDashboardProp:any;\n}\n\ninterface dispatchProps {\n addWidget: (dashboardId: number, id: string, widget: DBWidgetConfig) => void;\n deleteWidget: (dashboardId: number, id: string) => void;\n updateLayout: (column: number, dashboardId: number) => void;\n saveLayout: (layout: ReactGridLayout.Layout[]) => void;\nassetPreferences: (filterPreferences: any) => void;\nupdateAssetPreferences: (filterPreferences: any,isTimezoneChanged:any) => void;\n updateWidget: (\n dashboardId: number,\n id: string,\n widget: DBWidgetConfig\n ) => void;\n saveLayoutSuccess: (\n dashboardId: number,\n layout: ReactGridLayout.Layout[]\n ) => void;\n clearWidgetFilter: (dashboardId: number, id: string) => void;\n updateWidgetFilter: (\n dashboardId: number,\n id: string,\n widgetFilterConfig: WidgetFilterConfig\n ) => void;\n}\n\ntype Props = DataProps & dispatchProps;\n\nconst AssetDashboard: React.FC<Props> = (props) => { \n const {\n state,\n dashboardId,\n updateLayout,\n updateWidget,\n addWidget,\n deleteWidget,\n updateWidgetFilter,\n updateAssetPreferences,\n saveLayoutSuccess,\n saveLayout,\n } = props;\n const { contextUser, appContext } = props.context;\n const result = getPermissions(props.permissions.permissions.asset_widgets); const assets = getPermissions(props.permissions.permissions.assets);\n const assetsPermissionResult = getPermissions(props.permissions.permissions.assets);\n const templatesPermissionResult = getPermissions(props.permissions.permissions.templates);\n const oprPermissionResult = getPermissions(props.permissions.permissions.operator_support); \n //ops-2839: Remove the iqanconnect key permission check \n //const iqanKey = getPermissions(props.permissions.permissions.iqan_key);\n\n const [editState, setEditState] = useState<EditState>(DEFAULT_EDIT_STATE);\n const [autoRefresh, setAutoRefresh] = useState<number>(0);\n const [isResizable, setIsResizable] = useState<boolean>(false);\n const [dashboardbgImageUrl, setdashboardbgImageUrl] = useState<any>();\n const [isNewDashboard, setIsNewDashboard] = useState<any>();\n useEffect(() => {\n setdashboardbgImageUrl(props.bgImageUrlProp)\n }, [props.bgImageUrlProp]);\n useEffect(() => {\n setIsNewDashboard(props.isNewDashboardProp)\n }, [props.isNewDashboardProp]);\n //enable and disable the layout resizing option\n const [gridResize, setGridResize] = useState<ReactGridLayoutProps>(\n GRID_SETTINGS\n );\n const [filterState, setFilterState] = useState<FilterState>(\n DEFAULT_FILTER_STATE\n );\n const [exportState, setExportState] = useState<ExportState>(\n DEFAULT_EXPORT_STATE\n );\n const csvLink = useRef<any>(null);\n const assetStatus = useAssetStatus(state.asset.id);\n const [\n dataForDownload,\n setDataForDownload,\n bDownloadReady,\n setDownloadReady,\n exportHeader,\n setexportHeader,\n exportFileName,\n setExportFileName,\n ] = useExport(csvLink);\n const refreshWidgets = () => {\n setAutoRefresh((prevState:any) => {\n return prevState + 1\n });\n };\n const parentOrgPath = state?.asset?.orgPathId?.includes(\"~\") ? state?.asset?.orgPathId.split('~') : [state?.asset?.orgPathId];\n let parentOrg:any;\n if (parentOrgPath.length > 1) {\n parentOrg=parentOrgPath[1]\n }else{\n parentOrg=parentOrgPath[0]\n }\n let enableNewDashboardStyles:boolean;\n if(parentOrg==='7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d' && isNewDashboard){\n enableNewDashboardStyles=true;\n }else{\n enableNewDashboardStyles=false;\n }\n \n const createNewWidget = () => {\n let widgetColumns:number;\n if(enableNewDashboardStyles){\n widgetColumns=8;\n }else{\n widgetColumns=4;\n }\n const uuid = uuidv4();\n setEditState({\n visible: true,\n title: \"Create New Widget\",\n onFinish: (cfg) => saveWidgets(uuid, cfg, \"Add\",widgetColumns),\n onDualChange:(checked)=>onDualChange(checked),\n enabledualaxis:false\n });\n };\n\n const saveWidgets = (widgetId: string, cfg: WidgetConfig, action: string,widgetColumns:number) => {\n let signalStructure: DBWidgetConfig;\n const cnfg: any = cfg;\n const dashboard = state.dashboards.find(\n (d: DashboardState) => d.dashboardId === dashboardId\n );\n //let widgetColumns=6;\n if (dashboard) {\n if (action === \"Edit\") {\n const widgetState =\n dashboard.widgets.filter((w) => w.id === widgetId)[0] || [];\n //console.log(\"widgetState:\",widgetState);\n signalStructure = editWidgetStructureForDb(\n widgetId,\n cfg,\n state.template,\n widgetState\n );\n } else {\n signalStructure = addWidgetStructureForDb(\n widgetId,\n cfg,\n state.template,\n dashboard.widgets,\n widgetColumns\n );\n }\n\n Api.saveWidget(state.asset.templateId, signalStructure, dashboardId)\n .then((data) => {\n if (action === \"Edit\") {\n updateWidget(dashboardId, widgetId, signalStructure);\n } else {\n addWidget(dashboardId, widgetId, signalStructure);\n }\n })\n .catch((error) => {\n errorResponse(null, error);\n message.error(\"Errror in saving the widget\");\n });\n }\n\n \n };\n\n const deleteWidgt = (widgetId: string) => {\n Api.deleteWidget(state.asset.templateId, widgetId, dashboardId)\n .then((data) => {\n deleteWidget(dashboardId, widgetId);\n })\n .catch((error) => {\n errorResponse(null, error);\n message.error(\"Errror in deleting the selected widget\");\n });\n \n };\n const assetCallBackFnSuccess = (filterData: any,isTimezoneChanged: any) => {\n updateAssetPreferences(filterData,isTimezoneChanged);\n }\n\n const editWidget = (w: WidgetState) => {\n let widgetColumns:number;\n if(enableNewDashboardStyles){\n widgetColumns=8;\n }else{\n widgetColumns=4;\n }\n setEditState({\n visible: true,\n title: \"Edit Widget\",\n onFinish: (cfg) => saveWidgets(w.id, cfg, \"Edit\",widgetColumns),\n config: w,\n onDualChange:(checked)=>onDualChange(checked),\n enabledualaxis:w.rightYAxisSignals && w.rightYAxisSignals?.length>0?true:false\n });\n };\n\n const filerWidget = (wid: string, cfg: WidgetFilterConfig) => {\n updateWidgetFilter(dashboardId, wid, cfg);\n };\n\n const exprtWidget = (widgetState: WidgetState, cfg: WidgetExportConfig) => {\n exportCsv(state, widgetState, cfg)\n .then((data) => {\n loadingIndicatorStart();\n const csvExportDetails = prepareWidgetEvents(data, state, widgetState);\n\n setexportHeader(csvExportDetails.eventHeader);\n setExportFileName(\n `${state.asset.name}_${widgetState.title}_${cfg.startDate.format(\n \"YYYY-MM-DD\"\n )}_${cfg.endDate.format(\"YYYY-MM-DD\")}.csv`\n );\n setDataForDownload(csvExportDetails.eventArray);\n setDownloadReady(true);\n loadingIndicatorEnd();\n })\n .catch((error) => {\n errorResponse(null, error);\n setDownloadReady(false);\n loadingIndicatorEnd();\n });\n };\n\n const filterWidget = (w: WidgetState) => {\n const config: WidgetFilterConfig = {\n startDate: w.startDate,\n startTime: w.startTime,\n endDate: w.endDate,\n endTime: w.endTime,\n datapoint: w.datapoint || 50,\n };\n setFilterState({\n visible: true,\n title: \"Widget Filter\",\n onFinish: (cfg) => filerWidget(w.id, cfg),\n config: config,\n });\n };\n\n const exportWidget = (w: WidgetState) => {\n const filterConfig: WidgetFilterConfig = {\n startDate: w.startDate,\n startTime: w.startTime,\n endDate: w.endDate,\n endTime: w.endTime\n };\n setExportState({\n visible: true,\n title: \"Widget Export\",\n filterConfig: filterConfig,\n onFinish: (cfg) => exprtWidget(w, cfg),\n });\n };\n\n const hideEditForm = () => {\n setEditState((s) => ({\n ...s,\n visible: false,\n }));\n };\n\n const hideFilterForm = () => {\n setFilterState((s) => ({\n ...s,\n visible: false,\n }));\n };\n\n const hideExportForm = () => {\n setExportState((s) => ({\n ...s,\n visible: false,\n }));\n };\n\n const onLayoutViewChange = (checked: boolean) => {\n setIsResizable(checked)\n setGridResize({\n ...GRID_SETTINGS,\n isDraggable: checked,\n isResizable: checked,\n });\n if (!checked) {\n const newLayout = saveLayoutDb(state.layout);\n Api.saveLayoutChange(state.asset.templateId, newLayout, dashboardId)\n .then((data) => saveLayoutSuccess(dashboardId, state.layout))\n .catch((err) => {\n errorResponse(null, err);\n message.error(\"Error occured while saving the new layout\");\n });\n }\n };\n\n const onDualChange=(checked: boolean)=>{\n \n // setEditState({\n // ...DEFAULT_EDIT_STATE,\n // visible:true,\n // isDualAxisSelected:checked\n // }); \n\n setEditState((prevState) => (\n { \n ...prevState, \n enabledualaxis:checked \n }));\n }\n\n const NewWidgetButton = ({ label }: { label: string }) => (\n <Button\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={createNewWidget}\n className=\"asset-buttonwidth\"\n >\n {label}\n </Button>\n );\n \n const headerData: DashboardHeaderProps = {\n ...state.asset,\n };\n\n let temperature = {\n checked:state.temperature.checked,\n value:state.temperature.value\n }\n let timezone = {\n value: state.timezone.value,\n isGpsSignalAvailable: state.timezone.isGpsSignalAvailable,\n gpsSignalColId: state.timezone.gpsSignalColId,\n gpsCoordinates:state.timezone.coordinates\n }\n\n const HeaderExtra: DashboardHeaderExtraProps = {\n ...state.asset,\n temperature,\n timezone,\n onLayoutViewChange: (checked: boolean) => onLayoutViewChange(checked),\n assetCallBackFnSuccess: (filterData: any,isTimezoneChanged: any) => assetCallBackFnSuccess(filterData,isTimezoneChanged),\n\n\n };\n\n const permissions: PermissionProps = {\n userRole: appContext.roleName,\n isCreate: result[0],\n isRead: result[1],\n isUpdate: result[2],\n isDelete: result[3],\n };\n let widgetColumns:number;\n let rowHeight:number;\n if(enableNewDashboardStyles){\n widgetColumns=8;\n rowHeight=120;\n }else{\n widgetColumns=4;\n rowHeight=400;\n }\n const { dashboards } = state;\n const dashboard = dashboards.length > 0 && dashboards.find((d: DashboardState) => d.dashboardId === dashboardId);\n let dashboardBgStyles:any;\n //console.log(\"dashboard object\",dashboards);\n if(dashboards.length > 0 ){\n //const bgImageArray= dashboards.map((d: DashboardState) => d.bgimageurl !== null );\n //dashboards.find((d: DashboardState) => d.dashboardId === dashboardId\n //const bgImageArray= dashboards.find((d: DashboardState) => d.dashboardId === dashboardId);\n if(dashboardbgImageUrl!==null && isNewDashboard){\n dashboardBgStyles={backgroundImage: `url(${dashboardbgImageUrl})`, backgroundPosition: 'top center', backgroundRepeat:'no-repeat', minHeight:'100%', backgroundSize: 'contain'};\n }else{\n dashboardBgStyles={};\n }\n }else{\n dashboardBgStyles={};\n }\n \nconst uploadProps = {\n name: 'file',\n action: appConfigs.server.URL + '/ui/api/dashboard-bg-image',\n headers: {\n authorization: 'authorization-text',\n },\n onChange(info:any) {\n if (info.file.status !== 'uploading') {\n console.log(info.file, info.fileList);\n }\n if (info.file.status === 'done') {\n message.success(`${info.file.name} file uploaded successfully`);\n } else if (info.file.status === 'error') {\n message.error(`${info.file.name} file upload failed.`);\n }\n },\n};\nfunction beforeUpload(file:any) {\n const isJPG = file.type === 'image/jpeg' || 'image/png';\n if (!isJPG) {\n message.error('You can only upload JPG file!');\n }\n const isLt2M = file.size / 1024 / 1024 < 2;\n if (!isLt2M) {\n message.error('Image must smaller than 2MB!');\n }\n return isJPG && isLt2M;\n}\n const handleCustomFileUpload = async (options: any) => {\n const { onSuccess, onError, file, onProgress } = options;\n const formData = new FormData();\n //formData.append('dashboardId', dashboardId);\n formData.append('file', file);\n formData.append('fileName', file.name);\n try {\n const response = await Axios.post(appConfigs.server.URL + '/ui/api/dashboard-bg-image', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n },\n params:{\n 'dashboardId':dashboardId\n },\n });\n setdashboardbgImageUrl(response?.data?.data?.uploadDashboardBgImage);\n message.success('File uploaded successfully.');\n } catch (error) {\n console.error('Error uploading file:', error);\n message.error('File upload failed.');\n }\n }\n const handleDeleteFileUpload = async (options: any) => {\n const formData = new FormData();\n formData.append('fileName', '');\n try {\n const response = await Axios.post(appConfigs.server.URL + '/ui/api/dashboard-bg-image', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n },\n params:{\n 'dashboardId':dashboardId\n },\n });\n setdashboardbgImageUrl(null);\n message.success('Background Image deleted successfully.');\n } catch (error) {\n console.error('Error deleting file:', error);\n message.error('Background Image delete failed.');\n }\n //return\n }\n//const dashboardBgImage = state.dashboards.find((d: DashboardState) => d.dashboardId === dashboardId)?.bgimageurl;\n return (\n <>\n <PageHeader\n title=\"\"\n subTitle={\n state.loaded ? (\n <DashboardHeader\n userRole={appContext.roleName}\n isRead={result[1]}\n isUpdate={result[2]}\n isAssetUpdate={assetsPermissionResult[2]}\n isTemplatesRead={templatesPermissionResult[1]}\n isOprRead={oprPermissionResult[1]}\n isOprUpdate={oprPermissionResult[2]}\n {...headerData}\n />\n ) : null\n }\n //added a key\n extra={\n state.columns === 8 || 6 || 4\n ? [\n <DashboardHeaderExtra \n key=\"pageHeaderExtra\"\n refreshWidgets={() => refreshWidgets()}\n {...HeaderExtra} {...permissions} />, \n result[0] === true ? (\n <NewWidgetButton key=\"widgetAdd\" label=\"Add Widget\" />\n ) : (\n \"\"\n ),\n ]\n : result[0] === true\n ? [<NewWidgetButton key=\"widgetAdd\" label=\"Add Widget\" />]\n : \"\"\n }\n >\n <PageContent>\n <div style={dashboardBgStyles}>\n {dashboard && dashboard.widgets.length > 0 ? (\n \n \n <SizeMe>\n {({ size }) => (\n <>\n <GridLayout\n style={{marginTop: '5px', marginLeft: '7px',marginRight: '15px', marginBottom: '10px'}}\n {...gridResize}\n rowHeight={rowHeight}\n cols={widgetColumns}\n layout={state.layout}\n onLayoutChange={saveLayout}\n width={size.width || 200}\n preventCollision={true}\n transformScale={1}\n >\n {dashboard.widgets.map((w) => {\n return (\n <div key={w.id} className=\"widget-index\">\n <WidgetContainer\n widgetState={w}\n assetId={state.asset.id}\n template={state.template}\n state={state}\n isResizable={isResizable}\n onEdit={() => editWidget(w)}\n onDelete={() => deleteWidgt(w.id)}\n onFilter={() => filterWidget(w)}\n onExport={() => exportWidget(w)}\n userRole={appContext.roleName}\n isCreate={result[0]}\n isRead={result[1]}\n isUpdate={result[2]}\n isDelete={result[3]}\n autoRefresh={autoRefresh}\n assetDetails={props.state.asset}\n context={props.context}\n SignalRInitialData={props.SignalRInitialData}\n //isIqanKey={iqanKey[1]} //ops-2839: Remove the iqanconnect key permission check \n dashboardId={dashboardId}\n bgimageurl={dashboardbgImageUrl}\n isNewDashboard={isNewDashboard}\n ></WidgetContainer>\n </div>\n );\n })}\n </GridLayout>\n </>\n )}\n </SizeMe>\n ) : appContext.roleName === \"admin\" ||\n appContext.roleName === \"user\" ? (\n <Empty description=\"This dashboard has no widgets\">\n <NewWidgetButton label=\"Create a Widget\" />\n {\n enableNewDashboardStyles && \n (dashboardbgImageUrl ===null || dashboardbgImageUrl ===undefined || dashboardbgImageUrl ==='null'?\n <Upload\n accept=\".png,.jpg,.jpeg\"\n showUploadList={false}\n name=\"file\"\n beforeUpload={beforeUpload}\n customRequest={handleCustomFileUpload}\n >\n <Tooltip title=\"Click Here to upload Background Image for Dashboard\">\n <Button icon={<UploadOutlined />} type=\"primary\" className=\"asset-buttonwidth\" style={{ margin: 10 }}>Click to Upload Image</Button>\n </Tooltip>\n </Upload> \n :\n <Tooltip title=\"Click Here to Delete Background Image for Dashboard\">\n <Button icon={<DeleteOutlined />} type=\"primary\" onClick={(e:any) => handleDeleteFileUpload(dashboardId)} className=\"asset-buttonwidth\" style={{ margin: 10 }}>Click to Delete Image</Button>\n </Tooltip>\n )}\n </Empty>\n ) : (\n \"\"\n )}\n\n <WidgetEditDrawer\n {...editState}\n template={state.template}\n assetDetails={props.state.asset}\n onClose={hideEditForm}\n />\n <WidgetFilterDrawer {...filterState} onClose={hideFilterForm} />\n <WidgetExportDrawer {...exportState} onClose={hideExportForm} />\n </div>\n </PageContent>\n </PageHeader>\n <CSVLink\n data={dataForDownload}\n headers={exportHeader}\n filename={exportFileName}\n className=\"hidden\"\n ref={csvLink}\n target=\"_blank\"\n />\n </>\n );\n};\n\nconst PageContent: React.FC = ({ children }) => {\n return <div className=\"pagecontent\">{children}</div>;\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n SignalRInitialData: state.contextReducer.signalRData.SignalRInitialData,\n assetDetails: state.asset\n };\n};\n\nexport default connect(mapStateToProps)(AssetDashboard);\n","import React, { useEffect, useState } from \"react\";\nexport const useExport = (csvLink: any) => {\n\tconst [dataForDownload, setDataForDownload] = useState<any>([]);\n\tconst [bDownloadReady, setDownloadReady] = useState(false);\n\tconst [exportHeader, setexportHeader] = useState<any>([]);\n\tconst [exportFileName, setExportFileName] = useState<string>();\n\n\tuseEffect(() => {\n\t\tif (csvLink && csvLink.current && bDownloadReady) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcsvLink.current.link.click();\n\t\t\t}, 1);\n\t\t\tsetDownloadReady(false);\n\t\t}\n\t}, [bDownloadReady]);\n\n\treturn [\n\t\tdataForDownload,\n\t\tsetDataForDownload,\n\t\tbDownloadReady,\n\t\tsetDownloadReady,\n\t\texportHeader,\n\t\tsetexportHeader,\n\t\texportFileName,\n\t\tsetExportFileName,\n\t];\n};\n","import React from \"react\";\nimport { Tooltip, Button } from \"antd\";\n\ninterface Props {\n onPermissionClick: () => void;\n}\n\nconst DashboardExtra: React.FC<Props> = ({onPermissionClick}) => {\n return (\n <Tooltip title=\"Set Tab Access\">\n <div>\n <Button\n data-id=\"set-tab-access\"\n type=\"primary\"\n onClick={(e) => onPermissionClick()}\n >\n <span>Set Tab Access</span>\n </Button>\n </div>\n </Tooltip>\n );\n};\n\nexport default DashboardExtra;\n","import React from \"react\";\nimport { Checkbox, Row, Col, Form, Select, Table } from \"antd\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { DashboardPermission } from \".\";\nimport { SuccessAlert } from \"../../../utils/Components/formAlerts\";\n\nconst { Option } = Select;\n\ninterface Props {\n datasource: any;\n dashboardPermissions: DashboardPermission[];\n orgRoles: any;\n onRoleChange: (value: any) => void;\n onFinish: (roleId: number, values: DashboardPermission[]) => void;\n saveSuccess: boolean;\n}\n\ninterface State {\n dashboardPermissions: DashboardPermission[];\n role: string;\n}\n\nclass DashboardRolePermissions extends React.PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {\n dashboardPermissions: [],\n role: \"\",\n };\n }\n\n onCheckedChange = (e: any, permissionId: number) => {\n const permissionType = +e.target.id.split(\":\")[1];\n this.setState({\n dashboardPermissions: this.state.dashboardPermissions.map((p: any) => {\n if (p.permissionId === permissionId) {\n p.permissions[permissionType] = +e.target.checked;\n return p;\n } else {\n return p;\n }\n }),\n });\n };\n\n componentDidMount() {\n this.setState({\n dashboardPermissions: this.props.dashboardPermissions,\n role: this.props.orgRoles[0].roleName,\n });\n }\n\n componentDidUpdate(prevState: any, prevProps: any) {\n this.setState({ dashboardPermissions: this.props.dashboardPermissions });\n }\n\n onFinish = (form: any) => {\n // console.log(form.roles);\n this.props.onFinish(form.roles, this.state.dashboardPermissions);\n };\n\n onRoleChange = (value: any, options: any) => {\n this.setState({ role: options.key });\n this.props.onRoleChange(value);\n };\n\n render() {\n const { datasource, orgRoles, saveSuccess } = this.props;\n const { dashboardPermissions } = this.state;\n const tableColumns = [\n {\n title: \"Dashboard\",\n dataIndex: \"dashboardTitle\",\n width: \"50%\",\n },\n {\n title: \"View\",\n dataIndex: \"View\",\n key: \"View\",\n width: \"12%\",\n render: (View: any, record: any) => (\n <>\n <Checkbox\n id={`${record.permissionId.toString()}:1`}\n key={`${record.permissionId.toString()}:1`}\n disabled={this.state.role.toLowerCase() === \"admin\"}\n checked={\n dashboardPermissions.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[1] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n //defaultChecked={record.View === 1}\n ></Checkbox>\n </>\n ),\n },\n ];\n return (\n dashboardPermissions &&\n dashboardPermissions.length > 0 && (\n <div data-id=\"dashboard-role-maint-info\">\n {saveSuccess && (\n <SuccessAlert\n data-id=\"permission-maint-info-success-message\"\n message={\"Permissions has been successfully updated\"}\n />\n )}\n <Row gutter={8} style={{ marginTop: 15 }}>\n <Col offset={1} span={23}>\n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"dashboardPermissionMaintInfoForm\"\n className=\"mt-15\"\n onFinish={this.onFinish}\n initialValues={{\n roles: orgRoles && orgRoles.length > 0 && orgRoles[0].roleId,\n }}\n >\n <Row>\n <Col span={10}>\n <Form.Item\n name=\"roles\"\n label=\"Roles\"\n rules={[\n {\n required: false,\n message: appConfigs.errors.fieldErrors.valueRequired,\n },\n ]}\n >\n {orgRoles && orgRoles.length > 0 && (\n <Select onChange={this.onRoleChange}>\n {orgRoles.map((role: any) => (\n <Option key={role.roleName} value={role.roleId}>\n {role.roleName}\n </Option>\n ))}\n </Select>\n )}\n </Form.Item>\n </Col>\n </Row>\n <div className=\"mt-15\">\n <Table\n data-id=\"dashboard-roles\"\n rowKey={(record) => record.permissionId}\n columns={tableColumns}\n dataSource={datasource}\n />\n </div>\n </Form>\n </Col>\n </Row>\n </div>\n )\n );\n }\n}\n\nexport default DashboardRolePermissions;\n","import React from \"react\";\nimport { Drawer, Space, Button } from \"antd\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport DashboardRolePermissions from \"./DashboardRolePermissions\";\nimport { DashboardPermission } from \".\";\n\ninterface Props {\n width: number;\n visible: boolean;\n onDrawerClose: () => void;\n datasource: any;\n dashboardPermissions: DashboardPermission[];\n orgRoles: any;\n onRoleChange: (value: any) => void;\n onFinish: (roleId: number, values: DashboardPermission[]) => void;\n saveSuccess: boolean;\n}\n\nconst PermissionDrawer: React.FC<Props> = (props) => {\n const {\n width,\n visible,\n onDrawerClose,\n dashboardPermissions,\n datasource,\n orgRoles,\n onRoleChange,\n onFinish,\n saveSuccess,\n } = props;\n\n return (\n <Drawer\n data-id=\"dashboard-role-maint-drawer\"\n title={appConfigs.app.assetOverview.PermissionDrawerTitle}\n width={width}\n visible={visible}\n onClose={onDrawerClose}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: \"right\" }}>\n <Button\n data-id=\"dashboard-role-maint-close-button\"\n onClick={onDrawerClose}\n type=\"default\"\n >\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n <Button\n data-id=\"dashboard-role-maint-submit-button\"\n type=\"primary\"\n form=\"dashboardPermissionMaintInfoForm\"\n key=\"submit\"\n htmlType=\"submit\"\n >\n {appConfigs.settings.form.submitButtonText}\n </Button>\n </Space>\n }\n >\n {orgRoles &&\n orgRoles.length > 0 &&\n dashboardPermissions &&\n dashboardPermissions.length > 0 &&\n datasource &&\n datasource.length > 0 && (\n <DashboardRolePermissions\n orgRoles={orgRoles}\n dashboardPermissions={dashboardPermissions}\n datasource={datasource}\n onRoleChange={onRoleChange}\n onFinish={onFinish}\n saveSuccess={saveSuccess}\n />\n )}\n </Drawer>\n );\n};\n\nexport default PermissionDrawer;\n","import Axios from \"axios\";\nimport { PermissionApiReq } from \".\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function getPermissions(\n templateId: string,\n roleId: number,\n orgId: string\n): Promise<any> {\n return Axios.get(\n `${appConfigs.server.URL}/ui/api/templates/${templateId}/roles/${roleId}`,\n {\n params: {\n orgId\n },\n responseType: \"json\"\n } \n ); \n}\n\nexport function getOrgRoles(orgId: string): Promise<any> {\n return Axios.get(appConfigs.server.URL + \"/ui/api/org-roles/\" + orgId, {\n responseType: \"json\",\n headers: {},\n params: {},\n });\n}\n\nexport function savePermissions(\n templateId: string,\n roleId: number,\n permissions: PermissionApiReq[],\n orgId: string\n): Promise<any> {\n return Axios.put(\n `${appConfigs.server.URL}/ui/api/templates/${templateId}/roles/${roleId}`,\n permissions,\n {\n params: {\n orgId\n },\n responseType: \"json\"\n }\n );\n}\n","import { DashboardPermission, PermissionApiReq } from \".\";\n\nconst formatDatasource = (\n binaryResult: number[],\n dashboardId: number,\n dashboardTitle: string,\n permissionId: number\n) => {\n const permissionArray: string[] = [\"Create\", \"View\", \"Update\", \"Delete\"];\n let datasource = binaryResult.reduce((acc: any, elem: number, i: number) => {\n acc = { ...acc, dashboardId, dashboardTitle, [permissionArray[i]]: elem };\n return acc;\n }, {});\n datasource = { ...datasource, permissionId: permissionId };\n return datasource;\n};\n\nexport const constructPermissions = (\n givenPermission: number,\n allowedPermission: number,\n dashboardId: number,\n dashboardTitle: string,\n permissionId: number\n): any => {\n let maxBinaryResult: number[] = [];\n const binaryResult = Array.from(givenPermission.toString(2).padStart(4, '0'), Number).reverse();\n // while (allowedPermission >= 1) {\n // maxBinaryResult.unshift(Math.floor(allowedPermission % 2));\n // allowedPermission = allowedPermission / 2;\n // }\n\n // let binaryResult = new Array<number>(maxBinaryResult.length).fill(0);\n\n // while (givenPermission >= 1) {\n // binaryResult.unshift(Math.floor(givenPermission % 2));\n // binaryResult.pop();\n // givenPermission = givenPermission / 2;\n // }\n\n return {\n dashboardPermissions: { permissionId, permissions: binaryResult },\n datasource: formatDatasource(\n binaryResult,\n dashboardId,\n dashboardTitle,\n permissionId\n ),\n };\n};\n\nexport const formatPermissions = (resp: any) => {\n const permissionResult = resp.reduce(\n (acc: any, elem: any, i: any) => {\n const { dashboardPermissions, datasource } = constructPermissions(\n elem.permission_level,\n 15,\n elem.dashboardId,\n elem.dashboardTitle,\n elem.permissionId\n );\n acc = {\n ...acc,\n dashboardPermissions: [\n ...acc.dashboardPermissions,\n dashboardPermissions,\n ],\n datasource: [...acc.datasource, datasource],\n };\n return acc;\n },\n { dashboardPermissions: [], datasource: [] }\n );\n\n return permissionResult;\n};\n\nexport function constructPermissionToSave(\n newPermissionSet: DashboardPermission[]\n): PermissionApiReq[] {\n const apiReq = newPermissionSet.reduce(\n (acc: PermissionApiReq[], elem: DashboardPermission) => {\n const binaryString = elem.permissions.reduceRight(\n (ac: string, el: number) => {\n return (ac = `${ac}${el}`);\n },\n \"\"\n );\n const allowedPermission = parseInt(binaryString, 2);\n const permissionApiReq: PermissionApiReq = {\n permissionId: elem.permissionId,\n permission_level: allowedPermission,\n };\n acc = [...acc, permissionApiReq];\n return acc;\n },\n []\n );\n return apiReq;\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Drawer, Button, Tabs, Space, Input, Row, Col, Divider, message, Collapse } from \"antd\";\n\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../../actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport { EnterOutlined, StarFilled, StarOutlined, StarTwoTone } from \"@ant-design/icons\";\n\nimport \"./assetnotes.css\";\nconst { Panel } = Collapse;\nconst { TextArea } = Input;\ninterface Props {\n onAssetNotesDrawerToggle: Function, \n getAssetNotes: Function, \n addNewNote: Function, \n pinMessage: Function,\n getAssetGlobalNotes: Function, \n assetDetails: any,\n dashboard: any,\n context: any,\n}\n\nconst AssetNotes: React.FC<Props> = (props) => {\n\n const [newNote, setNewNote] = useState<string>('');\n const messagesEndRef = useRef<any>(null)\n useEffect(() => {\n props.getAssetNotes(props.assetDetails.id, getNotesError);\n props.getAssetGlobalNotes(props.assetDetails.orgId, getNotesError)\n }, [])\n\n const getNotesError = (resMessage: any) => {\n message.error(resMessage)\n };\n \n const onAssetNotesDrawerToggle = () => {\n props.onAssetNotesDrawerToggle(!props.dashboard.assetNotes.visible);\n };\n \n const addNewNote = () => {\n\n if (newNote.length >= 2000) {\n message.warning(\"Max characters allowed is 2000\")\n return \n } \n\n if (newNote.trim() != '') {\n props.addNewNote(newNote.replaceAll(\"\\n\", \"<br/>\"), props.assetDetails.id, addNoteSuccess, addNoteError);\n setNewNote(\"\")\n } else {\n message.warning(\"Note cannot be empty\")\n }\n \n }, addNoteSuccess = async (resMessage: any) => {\n await props.getAssetNotes(props.assetDetails.id, getNotesError)\n message.success(resMessage)\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" })\n setNewNote(\"\")\n }, addNoteError = (resMessage: any) => {\n message.error(resMessage)\n setNewNote(\"\")\n };\n \n \n\n const pinMessage = (messageId: any, currentPinStatus: any) => {\n let pinStatus =currentPinStatus == 'true' ? 'false' : 'true'\n props.pinMessage(messageId, pinStatus, pinNoteSuccess, pinNoteError);\n }, pinNoteSuccess = async (resMessage: any) => {\n await props.getAssetNotes(props.assetDetails.id, getNotesError)\n message.success(resMessage)\n }, pinNoteError = (resMessage: any) => {\n message.error(resMessage)\n };\n\n \n const onTypingNotes = (e: any) => {\n setNewNote(e.target.value);\n };\n return (\n <Drawer\n data-id=\"asset-notes-drawer\"\n title={props.dashboard.assetNotes.title}\n width={props.dashboard.assetNotes.width}\n visible={props.dashboard.assetNotes.visible}\n onClose={onAssetNotesDrawerToggle}\n destroyOnClose={true}\n footer={\n <Row gutter={8}>\n <Col span={24}>\n <TextArea\n value={newNote}\n rows={4}\n onChange={(e) => onTypingNotes(e)}\n placeholder=\"Enter New Note\"\n />\n </Col>\n <Col className=\"mt-5\" span={24}>\n <Button block type=\"primary\" onClick={addNewNote}>\n Add New Note\n </Button>\n </Col>\n </Row>\n }\n >\n <Collapse accordion defaultActiveKey=\"3\">\n <Panel header=\"Global Notes\" key=\"1\">\n {props.dashboard.assetNotes.notes.globalNotes?.length > 0 && (\n <div>\n {props.dashboard.assetNotes.notes.globalNotes?.map(\n (globalNote: any, key: number) => {\n return (\n <p\n key={key}\n className={`note othersMessages`}\n >\n <span\n dangerouslySetInnerHTML={{ __html: globalNote.noteBody }}\n ></span>\n <br />\n <span className=\"timestamp\">\n {globalNote.createdBy} - {globalNote.createdAt}\n </span>\n </p>\n );\n }\n )}\n <Divider />\n </div>\n )}\n </Panel>\n <Panel header=\"Pinned Asset Notes\" key=\"2\">\n {props.dashboard.assetNotes.notes.pinned.length > 0 && (\n <div>\n {props.dashboard.assetNotes.notes.pinned?.map(\n (pinnedNote: any, key: number) => {\n return (\n <p\n key={key}\n className={`note ${\n pinnedNote.myMessage == \"true\"\n ? \"myMessages \"\n : \"othersMessages\"\n }`}\n >\n <StarFilled\n className={\n pinnedNote.isPinned == \"true\"\n ? \"pinnedMessage\"\n : \"normalMessage\"\n }\n onClick={() =>\n pinMessage(pinnedNote.noteId, pinnedNote.isPinned)\n }\n />\n <span\n dangerouslySetInnerHTML={{ __html: pinnedNote.noteBody }}\n ></span>\n <br />\n <span className=\"timestamp\">\n {pinnedNote.userName} - {pinnedNote.createdAt}\n </span>\n </p>\n );\n }\n )}\n <Divider />\n </div>\n )}\n </Panel>\n <Panel header=\"Asset Notes\" key=\"3\">\n {props.dashboard.assetNotes.notes.all.length > 0 && (\n <>\n {props.dashboard.assetNotes.notes.all?.map(\n (pinnedNote: any, key: number) => {\n if (pinnedNote.isPinned == \"false\") {\n return (\n <p\n key={key}\n className={`note ${\n pinnedNote.myMessage == \"true\"\n ? \"myMessages \"\n : \"othersMessages\"\n }`}\n >\n <StarFilled\n className={\n pinnedNote.isPinned == \"true\"\n ? \"pinnedMessage\"\n : \"normalMessage\"\n }\n onClick={() =>\n pinMessage(pinnedNote.noteId, pinnedNote.isPinned)\n }\n />\n <span\n dangerouslySetInnerHTML={{\n __html: pinnedNote.noteBody,\n }}\n ></span>\n <br />\n <span className=\"timestamp\">\n {pinnedNote.userName} - {pinnedNote.createdAt}\n </span>\n </p>\n );\n }\n }\n )}\n </>\n )}\n </Panel>\n </Collapse>\n \n <div style={{ float: \"left\", clear: \"both\" }} ref={messagesEndRef} />\n </Drawer>\n );\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n dashboard: state.dashboardReducer.context\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetNotes);","import { Grid, Tabs, Popconfirm, message, Empty, Alert, Typography } from \"antd\";\nimport React, {\n useReducer,\n useEffect,\n useMemo,\n useState,\n useCallback,\n} from \"react\";\nimport * as Api from \"./api\";\nimport AssetDashboard from \"./AssetDashboard\";\nimport { DashboardClosing, DashboardTitleText } from \"./DashboardHeader\";\nimport { DashboardExtra } from \"./DashboardExtra\";\nimport { DBWidgetConfig } from \"./models\";\nimport { reducer, bindActions, initState, DashboardState } from \"./state\";\nimport \"./Dashboard.css\";\nimport * as DashboardApi from \"./DashboardApi\";\nimport {\n PermissionDrawer,\n formatPermissions,\n PermissionApi,\n DashboardPermission,\n constructPermissionToSave,\n} from \"./Permission\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { connect, useDispatch } from \"react-redux\";\nimport * as actions from \"../../actions\";\nimport * as CommonHelper from \"../../utils/commonHelpers\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\nimport * as signalR from '@microsoft/signalr'\nimport axios from \"axios\";\nimport { spawn } from \"child_process\";\nimport moment from 'moment';\nimport AssetNotes from \"./AssetNotes\";\nimport { WidgetFilterConfig } from \"./WidgetFilterForm\";\n//import { STATE_TOKEN_KEY_NAME } from \"@okta/okta-auth-js\";\n\n\nconst { TabPane } = Tabs;\nconst { useBreakpoint } = Grid;\nlet signalsList:any = []; // Loaded by initial loading on default dashboard or onTabClick for a specific dashboard\nvar defaultDashboardInitialized = false;\ntype Breakpoints = ReturnType<typeof useBreakpoint>;\nconst { Title } = Typography;\n\nfunction columnNumber(breakpoints: Breakpoints) {\n if (breakpoints.xl) {\n return 4;\n } else if (breakpoints.lg) {\n return 3;\n } else if (breakpoints.md) {\n return 2;\n } else {\n return 1;\n }\n}\n\ninterface Props {\n initialData: Api.AssetDashboardResponse;\n context: any;\n dashboard: any;\n permissions: any;\n signalRDataEnabled: boolean;\n onAssetNotesDrawerToggle: Function;\n updateSignalRData: Function;\n resetSignalRData: Function;\n disableSignalRData: Function;\n userPreferences: any;\n gpsCoordinates: any;\n SignalRInitialData: any;\n filterPreferences: Function;\n}\n\ninterface PermissionState {\n dashboardId: number;\n roleId: number;\n permissionId: number;\n permission_level: number;\n}\n\nconst InitDashboard: React.FC<Props> = ({\n initialData,\n context,\n dashboard,\n permissions,\n signalRDataEnabled,\n onAssetNotesDrawerToggle,\n updateSignalRData,\n resetSignalRData,\n disableSignalRData,\n gpsCoordinates,\n userPreferences\n}) => {\n type TabAction = \"add\" | \"remove\";\n let defaultTab: number = 0;\n const columns = columnNumber(useBreakpoint());\n const [userAssetPreferences, setUserPreferences] = useState(userPreferences);\n const [state, dispatch] = useReducer(\n reducer,\n initState(initialData, columns, userAssetPreferences,gpsCoordinates)\n );\n const drawerWidth: number = Math.min(\n window.innerWidth,\n appConfigs.settings.drawers.defaultWidth\n );\n\n const { roleName } = context && context.appContext;\n\n const [connection, setConnection] = useState<any>();\n const [dashboardPermissions, setDashboardPermissions] = useState<any>();\n const [datasource, setDatasource] = useState<any>();\n const [toggleDrawer, setToggleDrawer] = useState<boolean>(false);\n const [orgRoles, setOrgRoles] = useState<any>([]);\n const [saveSuccess, setSaveSuccess] = useState<boolean>(false);\n const [updatePreferences, setUpdatePreferences]= useState<boolean>(false);\n const [isTimezoneChanged, setTimezoneChanged]= useState<boolean>(false);\n const [gatewayId, setgatewayId] = useState<any>(null);\n const [bgImageUrlVar,setbgImageUrlVar]=useState<any>(null);\n const [isNewDashboard,setisNewDashboard]=useState<any>();\n const permissionSet = CommonHelper.getPermissions(\n permissions.asset_dashboard\n );\n\n const disptachMethods = useMemo(() => bindActions(dispatch), [dispatch]);\n const userPreferenceMethods ={\n updateAssetPreferences: (filterData: any,isTimezoneChanged:any) => updateAssetPreferences(filterData,isTimezoneChanged)\n };\n\n const updateAssetPreferences = (filterData: any,isTimezoneChanged:any) => {\n disptachMethods.assetPreferences(filterData.assets)\n setUserPreferences(filterData);\n if(isTimezoneChanged){\n setTimezoneChanged(true);\n }else{\n setUpdatePreferences(true);\n } \n \n }\n const contextDispatch=useDispatch()\n\n const getGPSLatLong = (gatewayId: string, signalCollectionID: any, filterConfig?: WidgetFilterConfig) => {\n var coordinates: any = [];\n Api.loadSignalsData(gatewayId, signalCollectionID, filterConfig, \"tracker\")\n .then(res => {\n if (res[0].data) {\n res[0].data.signals.filter((ele: any) => {\n if (ele.name == \"latitude\") {\n coordinates.latitude = ele.value;\n }\n if (ele.name == \"longitude\") {\n coordinates.longitude = ele.value;\n }\n })\n contextDispatch(actions.contextUpdateGPSCoordinates(coordinates));\n disptachMethods.gpsCoordinates(coordinates)\n }\n else{\n let coordinates={\n latitude:\"\",\n longitude:\"\"\n };\n contextDispatch(actions.contextUpdateGPSCoordinates(coordinates));\n disptachMethods.gpsCoordinates(coordinates)\n }\n })\n\n }\n\n if (!gatewayId && state.timezone.isGpsSignalAvailable && state.asset.gatewayId) {\n getGPSLatLong(state.asset.gatewayId, state.timezone.gpsSignalColId);\n setgatewayId(state.asset.gatewayId);\n }\n useEffect(() => {\n if (state) {\n disptachMethods.updateLayout(columns, +state.activeDashboard);\n }\n if (updatePreferences || isTimezoneChanged){\n contextDispatch(actions.contextGet())\n }\n }, [columns, +state.activeDashboard,updatePreferences,isTimezoneChanged]);\n\n const onTabClick = (\n activeKey: string,\n e: React.KeyboardEvent | React.MouseEvent\n ) => {\n let widgets: DBWidgetConfig[] = [];\n let title: string;\n \n Api.getDashboard(state.asset.mastertag, +activeKey).then((resp) => {\n const { tabId, tabs } =\n resp && resp.data && resp.data.data && resp.data.data.data;\n if (tabs) {\n const respTab = JSON.parse(tabs);\n setbgImageUrlVar(respTab[0].bgimageurl);\n setisNewDashboard(respTab[0].isNewDashboard);\n if (respTab.length > 0) {\n widgets =\n (respTab[0].widgets && respTab[0].widgets.length > 0 &&\n (respTab[0].widgets as DBWidgetConfig[])) ||\n [];\n title = respTab[0].title;\n // set the signalR signal list for the currently open tab\n // since during the initialization of the asset dashboard, only the default dashboard widgets is set\n // all other dashboards' widgets are set to null from /ui/api/assets?allData=true\n \n // console.log(\"reset signalRList for the current dashboard \", respTab[0].title)\n signalsList = [];\n respTab[0]?.widgets?.map((widget: any) => {\n if (widget.type === \"command\" ) {\n // map the command's response signal to the signalR\n // since only the response signal is the telmetry data\n widget?.signals?.map((signal: any) => {\n Api.getCommandResponseSignalIds(state.asset.templateId, signal.signalId)\n .then((resp) => {\n if (resp?.data?.data?.respSignals?.length > 0) {\n signalsList.push({\n signalId: resp.data.data.respSignals[0].responseSignalId,\n name: resp.data.data.respSignals[0].responseSignalName,\n })\n }\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n });\n } else {\n widget?.signals?.map((signal: any) => {\n if (!signalsList.some((o:any) => o.signalId == signal.signalId)) {\n signalsList.push({\n signalId: signal.signalId,\n name: signal.name,\n })\n }\n })\n }\n widget?.rightYAxisSignals?.map((signal: any) => {\n if (!signalsList.some((o:any) => o.signalId == signal.signalId)) {\n signalsList.push({\n signalId: signal.signalId,\n name: signal.name,\n })\n }\n })\n })\n // console.log(\"Dashboard \" + respTab[0].title + \" signalR list : \", signalsList);\n }\n }\n disptachMethods.loadWidgetsOnTabClick(tabId, columns, widgets);\n });\n };\n\n const onDrawerToggle = () => {\n setToggleDrawer((prevToggleDrawer) => !prevToggleDrawer);\n };\n\n const toggleAssetNotesDrawer = () => {\n onAssetNotesDrawerToggle(!dashboard.assetNotes.visible);\n };\n\n const onDashboardDelete = (dashboardId: number) => {\n setbgImageUrlVar(null);\n DashboardApi.deleteDashboard(state.asset.templateId, dashboardId)\n .then((resp: any) => {\n disptachMethods.deleteDashboard(dashboardId);\n })\n .catch((error) => errorResponse(null, error));\n };\n\n const nextDashboardName = () => {\n const arrayTitles = state.dashboards.reduce((acc: number[], d) => {\n const char = d.title.charAt(d.title.length - 1);\n if(parseInt(char) !== NaN) {\n acc = [...acc, +char]; \n }\n return acc;\n },[]); \n const filteredArray = arrayTitles.filter(Boolean);\n if(filteredArray.length > 0) {\n const currentNo = Math.max(...filteredArray);\n return currentNo;\n } else {\n return 0;\n } \n }\n\n const onTabAdd = (targetKey: any, action: TabAction) => {\n setbgImageUrlVar(null);\n if (action === \"add\") {\n nextDashboardName();\n if(state.dashboards.length === 6) {\n message.info('Maximum 6 dashboards are allowed');\n return;\n }\n DashboardApi.addDashboard(\n state.asset.templateId,\n `New Dashboard ${nextDashboardName() + 1}`,\n context.appContext.orgId\n )\n .then((resp: any) => {\n disptachMethods.addDashboard(\n resp.data.data.dashboard,\n `New Dashboard ${nextDashboardName() + 1}`,\n 'null',\n false\n );\n })\n .catch((error) => errorResponse(null, error));\n } else {\n //setShowPopConfirm(true);\n }\n };\n\n const onTitleUpdate = (dashboardId: number, title: string) => {\n DashboardApi.updateDashboard(state.asset.templateId, dashboardId, title)\n .then((resp: any) => {\n disptachMethods.updateDashboardTitle(resp.data.data.dashboard, title);\n })\n .catch((error) => errorResponse(null, error));\n };\n\n const permissionCallback = useCallback(\n (dashboardpermissions: any) => {\n const permissionResult = formatPermissions(dashboardpermissions);\n return permissionResult;\n },\n [state.asset.templateId]\n );\n\n const getDashboardPermissions = (roleId: number) => {\n PermissionApi.getPermissions(\n state.asset.templateId,\n roleId,\n context.appContext.orgId\n )\n .then((resp) => {\n if (\n resp &&\n resp.data &&\n resp.data.data &&\n resp.data.data.dashboardpermissions &&\n resp.data.data.dashboardpermissions.length > 0\n ) {\n const { dashboardPermissions, datasource } = permissionCallback(\n resp.data.data.dashboardpermissions\n );\n if (datasource.length > 0) {\n setDatasource(datasource);\n }\n if (dashboardPermissions.length > 0) {\n setDashboardPermissions(dashboardPermissions);\n } \n }\n setToggleDrawer(true);\n })\n .catch((error) => errorResponse(null, error));\n };\n\n const onPermissionClick = () => {\n PermissionApi.getOrgRoles(context.appContext.orgId)\n .then((resp: any) => {\n const userRoles =\n (resp.data &&\n resp.data.data &&\n resp.data.data.orgRoles[0] &&\n resp.data.data.orgRoles) ||\n [];\n if (userRoles.length > 0) {\n setOrgRoles(userRoles);\n getDashboardPermissions(userRoles[0].roleId);\n }\n })\n .catch((error) => errorResponse(null, error));\n };\n\n const onRoleChange = (value: any) => {\n getDashboardPermissions(+value);\n setSaveSuccess(false);\n };\n\n const formatPermissionCallback = useCallback(\n (permissions: DashboardPermission[]) => {\n const permissionResult = constructPermissionToSave(permissions);\n return permissionResult;\n },\n [state.asset.templateId]\n );\n\n const handleDelete = () => {};\n\n const onFinish = (\n roleId: number,\n dashboardPermissions: DashboardPermission[]\n ) => {\n const permissionToSave = formatPermissionCallback(dashboardPermissions);\n PermissionApi.savePermissions(\n state.asset.templateId,\n roleId,\n permissionToSave,\n context.appContext.orgId\n )\n .then((resp) => {\n if (\n resp &&\n resp.data &&\n resp.data.data &&\n resp.data.data.dashboardpermissions &&\n resp.data.data.dashboardpermissions.length > 0\n ) {\n const { dashboardPermissions, datasource } = permissionCallback(\n resp.data.data.dashboardpermissions\n );\n if (datasource.length > 0) {\n setDatasource(datasource);\n }\n if (dashboardPermissions.length > 0) {\n setDashboardPermissions(dashboardPermissions);\n }\n setSaveSuccess(true);\n }\n })\n .catch((error) => errorResponse(null, error));\n };\n\n // This only load the default dashboard, and set other dahsboard's widget to null from the backend\n // this will reduce the number of signals for auto-refreshing if it is not the current open dashboard\n // The other dashboard's signalR list is triggered when clicking dashboard tab\n\n if (!defaultDashboardInitialized) {\n defaultDashboardInitialized = true;\n \n initialData.asset?.dashboards?.map((dashboard: any) => {\n // console.log(\"dashboard widget \" + dashboard.title + \n // \" type: \",dashboard?.widgets?.type)\n dashboard?.widgets?.map((widget: any) => {\n // console.log(widget);\n if (widget.type === \"command\" ) {\n // map the command's response signal to the signalR\n // since only the response signal is the telmetry data\n widget?.signals?.map((signal: any) => {\n Api.getCommandResponseSignalIds(state.asset.templateId, signal.signalId)\n .then((resp) => {\n if (resp?.data?.data?.respSignals?.length > 0) {\n signalsList.push({\n signalId: resp.data.data.respSignals[0].responseSignalId,\n name: resp.data.data.respSignals[0].responseSignalName,\n })\n }\n })\n .catch((error:any) => {\n message.error(error?.response?.data?.errors?.length > 0 ?\n error?.response?.data?.errors[0].message :\n \"Error in receiving the latest command response signal info\")\n });\n });\n } else {\n widget?.signals?.map((signal: any) => {\n if (!signalsList.some((o:any) => o.signalId == signal.signalId)) {\n signalsList.push({\n signalId: signal.signalId,\n name: signal.name,\n })\n }\n })\n }\n widget?.rightYAxisSignals?.map((signal: any) => {\n if (!signalsList.some((o:any) => o.signalId == signal.signalId)) {\n signalsList.push({\n signalId: signal.signalId,\n name: signal.name,\n })\n }\n })\n })\n })\n // console.log(\"initialData signalR list for default tab: \", signalsList);\n }\n\n \n useEffect(() => {\n\n if (!connection && signalRDataEnabled) {\n signalRFunction(signalsList);\n } else if (connection && signalRDataEnabled) {\n connection.start()\n }\n\n if (connection && !signalRDataEnabled) {\n // console.log('Disabling SignalR Connection :>> ', connection);\n connection?.stop()\n }\n \n }, [signalRDataEnabled]);\n\n\n useEffect(() => {\n\n if (!connection && signalRDataEnabled) {\n signalRFunction(signalsList);\n }\n\n if (connection) {\n return () => {\n // console.log('Closeing SignalR Connection :>> ', connection);\n resetSignalRData()\n disableSignalRData()\n connection?.stop()\n }\n }\n \n }, [connection]);\n\n const signalRFunction = async (signalsList: any) => {\n\n const signalR_negotiate_url = `${appConfigs.signalR.url}${appConfigs.signalR.code}&userId=${initialData.asset.mastertag}`;\n\n const { url: connectionUrl, accessToken } = await axios\n .get(`${signalR_negotiate_url}`)\n .then(({ data }) => data)\n .catch(console.error)\n \n const connection: any = new signalR.HubConnectionBuilder()\n .withUrl(connectionUrl, { accessTokenFactory: () => accessToken })\n .withAutomaticReconnect()\n // .withAutomaticReconnect({\n // nextRetryDelayInMilliseconds: retryContext => {\n // if (retryContext.elapsedMilliseconds < 60000) {\n // // If we've been reconnecting for less than 60 seconds so far,\n // // wait between 0 and 10 seconds before the next reconnect attempt.\n // return Math.random() * 10000;\n // } else {\n // // If we've been reconnecting for more than 60 seconds so far, stop reconnecting.\n // return null;\n // }\n // }\n // })\n // .configureLogging(signalR.LogLevel.Trace)\n .build()\n \n connection.on('widgetUpdate', (data: any) => {\n updateSignalRData(data, signalsList)\n })\n connection.onclose(function () {\n // console.log('SignalR Disconnected')\n })\n connection.onreconnecting((err: any) =>\n console.log('Error Reconnecting... ', err)\n )\n\n connection.start()\n .then((res: any) => {\n // code to run on connection success\n // console.log('SignalR Connected Successfully');\n })\n .catch(console.error)\n \n setConnection(connection)\n\n }\n\n const { user: contextUser,appContext } = context;\n let access= JSON.parse(appContext.disabledFeaturesOfContextOrg);\n let assetRestricted = (access==null || (access && access.length===0)) ? true : false\n return (\n ((access==null || (access && access.length===0))\n && (!state.asset.blockedassetOrgId ? true : (contextUser.homeOrg.orgId !== state.asset.blockedassetOrgId? true:false)))?\n <> \n { (moment(state.asset.contractEndDate, \"L\").diff(moment(), 'days') >= 0 && moment(state.asset.contractEndDate, \"L\").diff(moment(), 'days') <= 30) && \n <div style={{color: 'red', fontSize: '15px', padding: '10px 10px 0px 20px'}}>\n <Alert\n closable\n message={\n <span>Dear Customer,<br/> Your subscription for this asset will expire {\n moment(state.asset.contractEndDate, \"L\").diff(moment(), 'hours') <= 0 ? 'today' : moment(state.asset.contractEndDate, \"L\").diff(moment(), 'hours') <= 24 ? 'tomorrow' : 'in ' + (moment(state.asset.contractEndDate, \"L\").diff(moment(), 'days') + 1) + ' day(s)'}. The subscription may be deactivated at any time after the expiry. Please renew the subscription as soon as possible to continue the service. Thank you!</span>\n }\n type=\"error\"\n />\n </div>\n }\n\n { moment(state.asset.contractEndDate, \"L\").diff(moment(), 'days') < 0 &&\n <div style={{color: 'red', fontSize: '15px', padding: '10px 10px 0px 20px'}}>\n <Alert\n closable\n message={\n <span>Dear Customer,<br/> Your subscription for this asset has expired and may be deactivated at any time. Please renew the subscription as soon as possible to continue using the service. Thank you!</span>\n }\n type=\"error\"\n />\n </div>\n }\n \n {\n <AssetNotes assetDetails={state.asset} />\n }\n\n { state.asset.templateId ? \n (<div data-id=\"dashboard-container\" style={{marginTop: '-10px'}} className=\"layout-content\">\n {/* <PageHeader\n style={{ padding: \"0px 0px 0px 0px\" }}\n title=\"\"\n //subTitle={<DashboardHeader {...headerData} />}\n extra={<DashboardHeaderExtra {...headerData} />}\n ></PageHeader> */}\n\n <Tabs\n type=\"editable-card\"\n id=\"tab\"\n hideAdd={state.dashboards.length === 6 ? true: !permissionSet[0] ? true: false} \n \n activeKey={state.activeDashboard}\n tabBarExtraContent={\n //create, update and delete\n state.dashboards &&\n state.dashboards.length > 0 &&\n permissionSet[0] &&\n permissionSet[2] &&\n permissionSet[3] && (\n <DashboardExtra onPermissionClick={onPermissionClick} />\n )\n }\n // tabBarExtraContent={\n // //create, update and delete\n // (roleName === 'admin') && (\n // //<DashboardExtra onPermissionClick={onPermissionClick} /> ||\n // <></>\n // )\n // }\n onEdit={onTabAdd}\n onTabClick={(activeKey, e) => onTabClick(activeKey, e)}\n >\n {state.dashboards &&\n state.dashboards.map((t: DashboardState, i: number) => {\n return (\n <TabPane\n id={t.title}\n closable={!t.isdefaultDashboard && permissionSet[3]}\n closeIcon={\n !t.isdefaultDashboard? permissionSet[3] ? (<DashboardClosing\n dashboardId={t.dashboardId}\n onDashboardDelete={onDashboardDelete}\n />) : <></> : <></>\n }\n // closeIcon={\n // !t.isdefaultDashboard? (roleName === 'admin') ? (<DashboardClosing\n // dashboardId={t.dashboardId}\n // onDashboardDelete={onDashboardDelete}\n // />) : <></> : <></>\n // }\n tab={\n (permissionSet[2]) ? (\n <DashboardTitleText\n dashboadId={t.dashboardId}\n title={t.title}\n onTitleUpdate={onTitleUpdate}\n permissionSet={permissionSet}\n />\n ) : (\n t.title\n ) \n }\n key={t.dashboardId}\n >\n <AssetDashboard\n // updateAssetPreferences={function (filterPreferences: any): void {\n // throw new Error(\"Function not implemented.\");\n // } } \n state={state}\n key={t.dashboardId}\n dashboardId={t.dashboardId}\n bgImageUrlProp={t.bgimageurl}\n isNewDashboardProp={t.isNewDashboard}\n {...disptachMethods} {...userPreferenceMethods} />\n </TabPane>\n );\n })}\n </Tabs>\n {toggleDrawer && (\n <PermissionDrawer\n visible={toggleDrawer}\n onDrawerClose={() => setToggleDrawer(false)}\n width={drawerWidth}\n orgRoles={orgRoles}\n dashboardPermissions={dashboardPermissions}\n datasource={datasource}\n onRoleChange={onRoleChange}\n onFinish={onFinish}\n saveSuccess={saveSuccess}\n />\n )}\n </div>) : <Empty description=\"No template assigned\"> </Empty> \n }\n </>\n :<Title level={2}><div>\n <p>Access Denied.</p>\n {assetRestricted?<p>Asset Dashboard Viewing Disabled in Asset Setting.</p>:<p>Asset Dashboard Viewing Disabled in Org Setting.</p>}\n <p>Please contact Org Administrator.</p>\n </div></Title>\n \n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n signalRDataEnabled: state.contextReducer.signalRData.enabled,\n SignalRInitialData: state.contextReducer.signalRData.SignalRInitialData,\n dashboard: state.dashboardReducer.context,\n permissions: state.contextReducer.data.permissions,\n assetDetails: state.asset,\n userPreferences: state.contextReducer.context.user.uiPreferences,\n gpsCoordinates: state.contextReducer.gpsCoordinates\n };\n};\nexport default connect(\n mapStateToProps,actions\n)(InitDashboard);\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../utils/configurations\";\n\nexport function addDashboard(\n templateId: string,\n title: string,\n orgId: string \n ): Promise<any> {\n return Axios.post(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/dashboards`, {'title': title},\n {\n params: {\n orgId\n },\n responseType: \"json\",\n }\n ); \n }\n \n export function deleteDashboard(\n templateId: string, \n dashboardId: number\n ): Promise<any> {\n return Axios.delete(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/dashboards/${dashboardId}`\n ); \n }\n\n\n export function updateDashboard(\n templateId: string, \n dashboardId: number,\n title: string,\n ): Promise<any> {\n return Axios.post(\n `${appConfigs.server.URL}/ui/api/assets/templates/${templateId}/dashboards/${dashboardId}`,\n {'title': title},\n {\n responseType: \"json\",\n }\n );\n }","import React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport * as Api from \"./api\";\nimport { Result, Tabs } from \"antd\";\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\n\nimport { Dashboard } from \"./models\";\nimport InitDashboard from \"./InitDashboard\";\nimport { connect } from \"react-redux\";\n\nconst { TabPane } = Tabs;\n\n\nconst ErrorPage: React.FC = () => (\n <Result\n status=\"error\"\n title=\"Failed to Load Dashboard\"\n subTitle=\"Unfortunately we couldn't fetch the data to make this page work. Try refreshing the page or contact support\"\n />\n);\n\ninterface Props {\n context: any\n}\n\n\n\n\nconst DashboardPage: React.FC<Props> = ({context}) => { \n const { assetId } = useParams();\n const mode = context.appContext.mode;\n const [initialData, setInitialData] = useState<Api.AssetDashboardResponse>();\n const [errorOccurred, setErrorOccurred] = useState(false);\n //const [tabs, setTabs] = useState<Dashboard[]>([]); \n\n useEffect(() => {\n if (assetId && context.appContext) {\n Api.loadAssetDashboard(assetId, mode)\n .then((resp: Api.AssetDashboardResponse) => {\n setInitialData(resp);\n //setTabs(resp.asset.Dashboard)\n })\n .catch((error) => {\n errorResponse(null, error);\n setErrorOccurred(true)\n });\n }\n }, [assetId]);\n \n\n if (initialData) { \n return (\n <InitDashboard initialData={initialData} />\n ) \n } else if (errorOccurred) {\n return <ErrorPage />;\n } else {\n return <></>;\n }\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context \n };\n};\n\nexport default connect(mapStateToProps)(DashboardPage);\n","import Dashboard2 from './Dashboard';\nexport default Dashboard2;\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function orgsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function orgsListSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_LIST_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function orgsListSetDisplay(\n mode: string, \n searchText: string,\n orgId: string,\n orgName: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_LIST_SET_DISPLAY\", mode: mode, searchText: searchText, orgId: orgId, orgName: orgName });\n }\n} \n\nexport function orgsMaintRefreshInstance(\n me: any,\n instances: number[] \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_MAINT_REFRESH_INSTANCE\", instances: instances });\n }\n} \n\nexport function orgGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs/\" + orgId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.org);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getAllCapabilities(me: any, callbackFnSuccess: any, callbackFnFailure: any) {\n const capabilityCatgegoryId = 6\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/capabilities/capabilityByCategory/\"+ capabilityCatgegoryId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n ).then(\n\n response => {\n let data = response.data == null || (response.data.length || 0) === 0 ? [] : response.data;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ORGS_ALL_CAPABILITIES\", payload: {data: data} });\n }\n ).catch(function (error){\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n\n }\n );\n }\n}\n\nexport function capabilityAccess(me: any, callbackFnSuccess: any, callbackFnFailure: any, capabilitiesSelected:any[], OrgsSelected:any[], orgsCleared:any[]) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/capabilities/restrictCapabilities/\" , {\n orgs: OrgsSelected && OrgsSelected.length>0?(OrgsSelected|| []).join(\"~\"):\"\",\n capabilities: capabilitiesSelected && capabilitiesSelected.length>0?(capabilitiesSelected|| []).join(\"~\"):\"\",\n clearedOrgs: orgsCleared && orgsCleared.length>0?(orgsCleared|| []).join(\"~\"):\"\" \n },\n {\n responseType: \"json\",\n headers: {},\n params: {}\n }\n ).then(\n response => {\n if(callbackFnSuccess != null) {\n callbackFnSuccess();\n }\n }\n ).catch(function (error){\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n \n }\n );\n\n }\n}\n\nexport function orgsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mode: string = \"all\",\n scope: string = \"all\",\n page: number = 1,\n searchText?: string,\n orgId?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs\", {\n responseType: \"json\", \n headers: {},\n params: {\n mode: mode,\n scope: scope,\n includeTree: true,\n orgId: orgId,\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.orgs == null || (response.data.data.orgs.length || 0) === 0 ? [] : response.data.data.orgs;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data, mode);\n }\n dispatch({ type: \"ORGS_GET_ORGS_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function orgDelete(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/orgs/\" + orgId,\n {}\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(orgId); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\n\nexport function orgsListRefreshOnUpdate(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_LIST_REFRESH_ON_UPDATE\" });\n };\n}\n\nexport function orgMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any\n) {\n return (dispatch: any) => {\n let data = record;\n data.orgTags = record.orgTags?JSON.parse(record.orgTags): undefined;\n dispatch({ type: \"ORGS_MAINT_OPEN\", payload: {title: title, width: width, record: data} });\n };\n}\n\nexport function orgMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ORGS_MAINT_CLOSE\" });\n };\n}\n\nexport function orgMaintTabChange(\n me: any,\n tab: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_MAINT_TAB_CHANGE\", tab: tab });\n };\n}\n\nexport function orgMaintTabsDisabled(\n me: any,\n state: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_MAINT_TABS_DISABLED\", state: state });\n };\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { formatTagsForPosting } from \"../../../utils/commonHelpers\";\n\nexport function countriesGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/countries\", {\n responseType: \"json\", \n headers: {},\n params: {\n scope: \"all\"\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.countries);\n }\n dispatch({ type: \"ORGS_COUNTRIES_SUCCESS\", payload: {data: response.data.data.countries} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n}\n\nexport function countryStatesGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure?: any,\n countryId?: string,\n countryCode?: string,\n countryName?: string\n) {\n return async (dispatch: any) => {\n let url = \"/ui/api/states\";\n\n if ((countryId || \"\") !== \"\") {\n url = \"/country/id/\" + countryId;\n }\n else if ((countryCode || \"\") !== \"\") {\n url = \"/country/code/\" + countryCode;\n }\n else if ((countryCode || \"\") !== \"\") {\n url = \"/country/name/\" + countryName;\n }\n \n Axios.get(\n appConfigs.server.URL + url, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.states);\n }\n dispatch({ type: \"ORGS_COUNTRY_STATES_SUCCESS\", payload: {data: response.data.data.states} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n}\n\nexport function phoneCountriesGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/countries\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.countries);\n }\n dispatch({ type: \"ORGS_PHONE_COUNTRIES_SUCCESS\", payload: {data: response.data.data.countries} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n}\nexport function orgMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n return async (dispatch: any) => {\n record.orgTags = formatTagsForPosting(record.orgTags);\n record.removedTags = formatTagsForPosting(record.removedTags);\n record.newTags = formatTagsForPosting(record.newTags);\n Axios.post(\n appConfigs.server.URL + \"/ui/api/orgs\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n let data = response.data.data.org\n data.orgTags = response.data.data.org.orgTags?JSON.parse(response.data.data.org.orgTags): undefined;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ORG_MAINT_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function orgLevelTags(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string\n ) {\n return async (dispatch: any) => {\n Axios.get(appConfigs.server.URL + \"/ui/api/orgtags\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId: orgId,\n \n },\n })\n .then((response) => {\n let data =\n response.data.data.orgTags == null ||\n (response.data.data.orgTags.length || 0) === 0\n ? []\n : response.data.data.orgTags;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n data = data\n .map((tag: any) => tag[\"tagName\"].toUpperCase())\n .filter((item: any, i: any, ar: any) => ar.indexOf(item) === i)\n .sort();\n\n dispatch({ type: \"ORG_TAGS_SUCCESS\", payload: { data: data } });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n }\n \n\nexport function orgLogoMaint(\n me: any, \n callbackFileSuccess: any,\n callbackFileFailure: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n action: string,\n formData: any,\n file: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n action,\n formData,\n {\n responseType: \"json\", \n headers: {\n \"content-type\": \"multipart/form-data\" \n }\n }\n )\n .then(response => { \n callbackFileSuccess(response.data, file);\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.logo.uploadId, response.data.data.logo.url);\n }\n }\n ) \n .catch(function (error) {\n errorResponse(me, error, false);\n callbackFileFailure(error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n };\n} \n\nexport function orgLoginBackgroundMaint(\n me: any, \n callbackFileSuccess: any,\n callbackFileFailure: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n action: string,\n formData: any,\n file: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n action,\n formData,\n {\n responseType: \"json\", \n headers: {\n \"content-type\": \"multipart/form-data\" \n }\n }\n )\n .then(response => { \n callbackFileSuccess(response.data, file);\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.loginBackground.uploadId, response.data.data.loginBackground.url);\n }\n }\n ) \n .catch(function (error) {\n errorResponse(me, error, false);\n callbackFileFailure(error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n };\n}\n\nexport function languagesGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/languages\", {\n responseType: \"json\", \n headers: {},\n params: {\n scope: \"all\"\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.languages);\n }\n dispatch({ type: \"ORGS_LANGUAGES_SUCCESS\", data: response.data.data.languages });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n}\nexport function getOrgGlobalNotesList(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n noteType: string,\n orgId: string\n ) {\n \n return async (dispatch: any) => {\n Axios.get(appConfigs.server.URL + \"/ui/api/orgs/\" + orgId + \"/getGlobalNotes\", {\n responseType: \"json\",\n headers: {},\n params: {\n noteType: noteType\n },\n })\n .then((response) => {\n let data =\n response.data.data.globalNotes == null ||\n (response.data.data.globalNotes.length || 0) === 0\n ? []\n : response.data.data.globalNotes;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ORGS_GET_GLOBAL_NOTES\", payload: { data: data } });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n }\nexport function orgGlobalNotesMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mode:string,\n record: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/orgs/globalNote\",\n record,\n {\n responseType: \"json\", \n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json' \n },\n params: {\n mode: mode\n }\n }\n )\n .then(response => {\n let data = response.data.data.org\n dispatch({ type: \"ORG_GLOBAL_NOTES_MAINT_SUCCESS\", payload: {data: data} });\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data,mode);\n }\n \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\nexport function getServicePlansComparisionSheet() {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/get_tutorials\"\n )\n .then(response => { \n dispatch({ type: \"TUTORIALS_GET_SUCCESS\", data: response.data.data.tutorials });\n console.log(response.data.data.tutorials);\n }\n )\n .catch(function (error) {\n console.log(`error`, error)\n });\n };\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function orgMaintAdminsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_MAINT_ADMIN_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function orgMaintAdminsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORG_MAINT_ADMIN_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function orgUsersGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n role: string,\n page: number = 1,\n searchText?: string\n) {\n return async (dispatch: any) => { \n //ops-2680: added login user role to request parameter \"role\", because a non-admin user should not see \"admin\" role in the \"role\" dropdown in \"administrators\" tab. \n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs/\" + orgId + \"/users\", \n {\n responseType: \"json\", \n headers: {},\n params: {\n allData: true,\n role: role,\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n \n callbackFnSuccess(response.data.data.orgUsers);\n }\n dispatch({ type: \"ORG_MAINT_ADMIN_ORG_USERS_GET_SUCCESS\", payload: {data: response.data.data.orgUsers, page: page} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }); \n };\n} \n\nexport function orgUserRole(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgUserId: string,\n role: string\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/orgs/user/\" + orgUserId + \"/\" + role,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgUsers, orgUserId, role); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function usersAdministeredGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n userId: string,\n searchText: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/users/okta\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n administered: true,\n page: 1,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.users === null ? [] : response.data.data.users;\n data.filter((user:any) => {\n return user.userId !== userId;\n })\n .map((user:any) => ({\n text: user.fullName,\n textExtra: user.orgHomeName,\n value: user.userId\n }));\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ORG_MAINT_ADMIN_USERS_ADMINSTERED_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function usersAdministeredMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgs: any,\n users: any,\n role:string,\n applyAll:boolean,\n page: number\n) {\n return async (dispatch: any) => { \n Axios.post(\n appConfigs.server.URL + \"/ui/api/orgs/user\",\n {\n orgs: orgs,\n users: users,\n role: role,\n applyAll: applyAll\n },\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgUsers);\n }\n dispatch({ type: \"ORG_MAINT_ADMIN_USERS_ADMINSTERED_MAINT\" });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n }\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function orgsGlobalSubscriptionsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_GLOBAL_SUBSCRIPTIONS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function orgsGlobalSubscriptionsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ORGS_GLOBAL_SUBSCRIPTIONS_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function orgsGlobalSubscriptionsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n userId: string, \n searchText: string,\n page: number = 1\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs/\" + ((orgId || \"\") !== \"\" ? orgId + \"/\": \"\") + \"userId/\" + ((userId || \"\") !== \"\" ? userId + \"/\": \"\" ) + \"globalalertsubscription\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => {\n \n let globalalertSubscriptions = response.data.data.globalalertSubscriptions;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(globalalertSubscriptions);\n }\n dispatch({ type: \"ORGS_GLOBAL_SUBSCRIPTIONS_GET_SUCCESS\", payload: {data: globalalertSubscriptions, page: page} });\n }\n )\n .catch(function (error) {\n \n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n \n };\n} \n\nexport function orgsGlobalSubscriptionsMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n record: any,\n notification: string, \n action: string,\n scope: string\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/orgs/\" + orgId + \"/globalalertsubscription\" +\n \"?notification=\" + notification + \n \"&action=\" + action +\n \"&scope=\" + scope,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(orgId, record, notification, action, scope); \n }\n dispatch({ type: \"ORGS_GLOBAL_SUBSCRIPTIONS_MAINT_SUCCESS\", payload: {record: record, notification: notification, action: action, scope: scope} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error, orgId, record, notification, action, scope);\n }\n }\n );\n }\n}","import React from \"react\";\nimport { Upload, Button, message } from 'antd';\nimport { UploadOutlined } from '@ant-design/icons';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\ninterface Prop {\n formRef: any;\n \n orgLogoMaint: Function\n orgsList: any;\n}\n\ninterface State {\n imageSrc?: string;\n fileList: any[];\n loading: boolean;\n}\n\nclass OrgLogo extends React.Component<Prop, State> { \n\n state:State = {\n fileList: [],\n loading: false\n }\n\n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgsList.orgMaint.instance !== prevProps.orgsList.orgMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n const imageSrc = this.props.orgsList.orgMaint.record.logoUploadSrc;\n this.setState({ loading: false, imageSrc: (imageSrc ? appConfigs.server.URL + imageSrc : \"\") });\n }\n\n beforeUpload = (file:any) => {\n const fileType = file.type === 'image/jpeg' || file.type === 'image/png';\n const fileSize = file.size / 1024 < 500;\n\n if (!fileType) {\n message.error('JPG/PNG file types are only allowed');\n }\n if (!fileSize) {\n message.error('Image must be smaller than 500kB');\n }\n \n return fileType && fileSize;\n }\n \n upload = async (options:any) => { \n const { onSuccess, onError, file, action } = options;\n\n this.setState({ \n fileList: [{\n uid: \"1\",\n name: file.name,\n status: \"done\"\n }]\n });\n\n const formData = new FormData();\n formData.append(\"logo\", file);\n\n this.props.orgLogoMaint(this, onSuccess, onError, this.onUploadSuccess, null, action, formData, options.file);\n } \n\n onUploadSuccess = (uploadId: string, url: string) => { \n const finalUrl = appConfigs.server.URL + url;\n\n this.setState({ imageSrc: finalUrl });\n this.props.formRef.setFieldsValue({ \n logoUploadId: uploadId,\n logoUploadSrc: finalUrl,\n fileList: []\n });\n message.warning({ content: \"Click Submit button to save the logo image\", duration: 2});\n }\n\n onRemove = (file:any) => { \n this.componentUpdate();\n\n this.setState(state => {\n const index = state.fileList.indexOf(file);\n const newFileList = state.fileList.slice();\n newFileList.splice(index, 1);\n return {\n fileList: newFileList\n };\n });\n\n this.props.formRef.setFieldsValue({ \n logoUploadId: this.props.orgsList.orgMaint.record.logoUploadId,\n logoUploadSrc: this.props.orgsList.orgMaint.record.logoUploadSrc\n });\n }\n\n handleChange = (info:any) => { \n if (info.file.status === \"uploading\") {\n this.setState({ loading: true });\n }\n else if (info.file.status === \"error\") {\n this.setState({ loading: false });\n }\n else if (info.file.status === \"done\") {\n this.setState({ loading: false });\n }\n }; \n\n render() {\n\n const { imageSrc } = this.state;\n\n return (\n <>\n { \n imageSrc &&\n <img src={imageSrc} className=\"org-image-preview\" alt=\"Logo preview\"/>\n }\n <div>\n <Upload \n data-id=\"orgs-maint-info-logo-upload\"\n multiple={false}\n action= {appConfigs.server.URL + \"/ui/api/orgs/logo\"}\n beforeUpload={this.beforeUpload}\n onChange={this.handleChange}\n customRequest={this.upload}\n onRemove={this.onRemove}\n fileList={this.state.fileList}\n >\n <Button style={{ width: 140}}>\n <UploadOutlined /> Select File\n </Button>\n </Upload>\n </div>\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n orgsList: state.orgsReducers.orgsState.orgsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OrgLogo);","import React from \"react\";\nimport { Upload, Button, message } from 'antd';\nimport { UploadOutlined } from '@ant-design/icons';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\ninterface Prop {\n formRef: any;\n \n orgLogoMaint: Function\n orgsList: any;\n}\n\ninterface State {\n imageSrc?: string;\n fileList: any[];\n loading: boolean;\n}\n\nclass OrgLoginLogo extends React.Component<Prop, State> { \n\n state:State = {\n fileList: [],\n loading: false\n }\n\n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgsList.orgMaint.instance !== prevProps.orgsList.orgMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n const imageSrc = this.props.orgsList.orgMaint.record.loginLogoUploadSrc;\n this.setState({ loading: false, imageSrc: (imageSrc ? appConfigs.server.URL + imageSrc : \"\") });\n }\n\n beforeUpload = (file:any) => {\n const fileType = file.type === 'image/jpeg' || file.type === 'image/png';\n const fileSize = file.size / 1024 < 500;\n\n if (!fileType) {\n message.error('JPG/PNG file types are only allowed');\n }\n if (!fileSize) {\n message.error('Image must be smaller than 500kB');\n }\n \n return fileType && fileSize;\n }\n \n upload = async (options:any) => { \n const { onSuccess, onError, file, action } = options;\n\n this.setState({ \n fileList: [{\n uid: \"1\",\n name: file.name,\n status: \"done\"\n }]\n });\n\n const formData = new FormData();\n formData.append(\"logo\", file);\n\n this.props.orgLogoMaint(this, onSuccess, onError, this.onUploadSuccess, null, action, formData, options.file);\n } \n\n onUploadSuccess = (uploadId: string, url: string) => { \n const finalUrl = appConfigs.server.URL + url;\n\n this.setState({ imageSrc: finalUrl });\n this.props.formRef.setFieldsValue({ \n loginLogoUploadId: uploadId,\n loginLogoUploadSrc: finalUrl,\n fileList: []\n });\n message.warning({ content: \"Click Submit button to save the logo image\", duration: 2});\n }\n\n onRemove = (file:any) => { \n this.componentUpdate();\n\n this.setState(state => {\n const index = state.fileList.indexOf(file);\n const newFileList = state.fileList.slice();\n newFileList.splice(index, 1);\n return {\n fileList: newFileList\n };\n });\n\n this.props.formRef.setFieldsValue({ \n loginLogoUploadId: this.props.orgsList.orgMaint.record.loginLogoUploadId,\n loginLogoUploadSrc: this.props.orgsList.orgMaint.record.loginLogoUploadSrc\n });\n }\n\n handleChange = (info:any) => { \n if (info.file.status === \"uploading\") {\n this.setState({ loading: true });\n }\n else if (info.file.status === \"error\") {\n this.setState({ loading: false });\n }\n else if (info.file.status === \"done\") {\n this.setState({ loading: false });\n }\n }; \n\n render() {\n\n const { imageSrc } = this.state;\n\n return (\n <>\n { \n imageSrc &&\n <img src={imageSrc} className=\"org-image-preview\" alt=\"Logo preview\"/>\n }\n <div>\n <Upload \n data-id=\"orgs-maint-info-logo-upload\"\n multiple={false}\n action= {appConfigs.server.URL + \"/ui/api/orgs/login-logo\"}\n beforeUpload={this.beforeUpload}\n onChange={this.handleChange}\n customRequest={this.upload}\n onRemove={this.onRemove}\n fileList={this.state.fileList}\n >\n <Button style={{ width: 140}}>\n <UploadOutlined /> Select File\n </Button>\n </Upload>\n </div>\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n orgsList: state.orgsReducers.orgsState.orgsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OrgLoginLogo);","import React from \"react\";\nimport { Upload, Button, message } from 'antd';\nimport { UploadOutlined } from '@ant-design/icons';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\ninterface Prop {\n formRef: any;\n \n orgLoginBackgroundMaint: Function\n orgsList: any;\n}\n\ninterface State {\n imageSrc?: string;\n fileList: any[];\n loading: boolean;\n}\n\nclass OrgLoginBackground extends React.Component<Prop, State> { \n\n state:State = {\n fileList: [],\n loading: false\n }\n\n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgsList.orgMaint.instance !== prevProps.orgsList.orgMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n const imageSrc = this.props.orgsList.orgMaint.record.loginBackgroundUploadSrc;\n this.setState({ loading: false, imageSrc: (imageSrc ? appConfigs.server.URL + imageSrc : \"\") });\n }\n\n beforeUpload = (file:any) => {\n const fileType = file.type === 'image/jpeg' || file.type === 'image/png';\n const fileSize = file.size / 1024 < 500;\n\n if (!fileType) {\n message.error('JPG/PNG file types are only allowed');\n }\n if (!fileSize) {\n message.error('Image must be smaller than 500kB');\n }\n \n return fileType && fileSize;\n }\n \n upload = async (options:any) => { \n const { onSuccess, onError, file, action } = options;\n\n this.setState({ \n fileList: [{\n uid: \"1\",\n name: file.name,\n status: \"done\"\n }]\n });\n\n const formData = new FormData();\n formData.append(\"loginBackground\", file);\n\n this.props.orgLoginBackgroundMaint(this, onSuccess, onError, this.onUploadSuccess, null, action, formData, options.file);\n } \n\n onUploadSuccess = (uploadId: string, url: string) => { \n const finalUrl = appConfigs.server.URL + url;\n\n this.setState({ imageSrc: finalUrl });\n this.props.formRef.setFieldsValue({\n \n loginBackgroundUploadId: uploadId,\n loginBackgroundUploadSrc: finalUrl,\n fileList: []\n });\n message.warning({ content: \"Click Submit button to save the login splash image\", duration: 2});\n }\n\n onRemove = (file:any) => { \n this.componentUpdate();\n \n this.setState(state => {\n const index = state.fileList.indexOf(file);\n const newFileList = state.fileList.slice();\n newFileList.splice(index, 1);\n return {\n fileList: newFileList,\n };\n });\n }\n\n handleChange = (info:any) => { \n if (info.file.status === \"uploading\") {\n this.setState({ loading: true });\n }\n else if (info.file.status === \"error\") {\n this.setState({ loading: false });\n }\n else if (info.file.status === \"done\") {\n this.setState({ loading: false });\n }\n }; \n\n render() {\n\n const { imageSrc } = this.state;\n\n return (\n <>\n {\n imageSrc && \n <div>\n <img src={imageSrc} className=\"org-image-preview\" alt=\"Splash preview\"/>\n </div>\n }\n <div> \n <Upload \n data-id=\"orgs-maint-info-login-background-upload\"\n multiple={false}\n action= {appConfigs.server.URL + \"/ui/api/orgs/login-background\"}\n beforeUpload={this.beforeUpload}\n onChange={this.handleChange}\n customRequest={this.upload}\n onRemove={this.onRemove}\n fileList={this.state.fileList}\n >\n <Button style={{ width: 140}}>\n <UploadOutlined /> Select File\n </Button>\n </Upload>\n </div>\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n orgsList: state.orgsReducers.orgsState.orgsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OrgLoginBackground);","import React from \"react\";\nimport { SketchPicker } from 'react-color';\nimport { Typography, Form, Input, Button, Select, Row, Col, Tooltip, Card } from 'antd';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\nimport { FormInstance } from 'antd/lib/form';\n\n//OPS 1149 import OrgPhone from \"./OrgPhone\";\nimport OrgLogo from \"./OrgLogo\";\nimport OrgLoginLogo from \"./OrgLoginLogo\";\nimport OrgLoginBackground from \"./OrgLoginBackground\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\nimport { setHeaderColor, setLogo, scrollToElement, getPermissions } from \"../../../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as rootActions from \"../actions\";\nimport * as contextActions from \"../../../actions/context\";\nimport * as orgActions from \"../../OrgSelector/actions/\";\nimport \"./orgMaintInfo.css\";\n\nconst { Option } = Select;\nconst { Paragraph } = Typography;\nconst { TextArea } = Input;\n\ninterface Prop {\n orgMaint: Function,\n orgsListRefreshOnUpdate: Function,\n orgMaintTabsDisabled: Function,\n countriesGet: Function,\n countryStatesGet: Function,\n languagesGet: Function,\n orgMaintClose: Function,\n orgsGet: Function,\n contextUpdateMapDefaultView: Function,\n context: any,\n orgsList: any,\n permissions:any,\n orgSelectorTreeOrgsGet: Function,\n orgLevelTags:Function\n}\n\ninterface State {\n enableMtag: boolean;\n states: any\n orgIdParentName?: string;\n loginUrlDisplay?: string;\n displayColorPicker: boolean;\n color?: any;\n opa?: any;\n\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n}\n\nclass OrgMaintInfo extends React.Component<Prop, State> { \n \n state: State = {\n states: [],\n displayColorPicker: false,\n color: \"\",\n enableMtag: false\n };\n\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n this.props.countriesGet(this); \n this.props.countryStatesGet(this, this.onCountryStatesGetSuccess);\n this.props.languagesGet(this, this.onLanguageGetSuccess, null);\n this.componentUpdate(this.props.orgsList.orgMaint.record);\n this.props.orgSelectorTreeOrgsGet(this, null, null, \"list\"); \n this.props.orgLevelTags(this, null, null, \"all\", this.props.orgsList.orgMaint.record.orgId);\n }\n componentDidUpdate(prevProps: Prop, prevState: State) {\n if (this.props.orgsList.orgMaint.instance !== prevProps.orgsList.orgMaint.instance) {\n this.componentUpdate(this.props.orgsList.orgMaint.record);\n this.setDefaultLanguage(this.props.orgsList.orgMaint.tabs[0].languages);\n this.countryChange(this.props.orgsList.orgMaint.countryId); \n }\n }\n\n componentUpdate(record:any) {\n formInit(this); \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue({\n orgId: record.orgId,\n orgIdParent: record.orgIdParent,\n orgIdParentName: record.orgIdParentName,\n name: record.name,\n orgTags: record.orgTags?.map((tag: any) => { return { value: tag.tagName.toUpperCase(), label: tag.tagName.toUpperCase(), key: tag.tagName.toUpperCase() } }),\n street1: record.street1,\n street2: record.street2,\n street3: record.street3, \n city: record.city, \n zipCode: record.zipCode, \n stateList: record.state, \n state: record.state, \n countryId: record.countryId,\n phoneNumber: record.phoneNumber,\n phoneNumberIsoCode2: record.phoneNumberIsoCode2 || \"\",\n logoUploadId: record.logoUploadId || \"\",\n logoUploadSrc: record.logoUploadSrc || \"\",\n loginBackgroundUploadId: record.loginBackgroundUploadId || \"\",\n loginBackgroundUploadSrc: record.loginBackgroundUploadSrc || \"\",\n loginLogoUploadId: record.logoUploadId || \"\",\n loginLogoUploadSrc: record.logoUploadSrc || \"\",\n loginUrl: record.loginUrl || \"\",\n loginUrlDisplay: record.loginUrlDisplay || \"\",\n headerColor: record.headerColor,\n fleetMapDefaultView: record.fleetMapDefaultView || \"satellite\",\n termsAndConditions: record.termsAndConditions,\n languageId: record.languageId\n });\n \n this.setState({ \n orgIdParentName: record.orgIdParentName, \n color: record.headerColor || \"\", \n loginUrlDisplay: record.orgId ? (window.location.origin + (record.loginUrlDisplay ? record.loginUrlDisplay : \"/login\")).replace(/\\/\\/+/g, '/') : \"\" \n });\n }\n };\n\n onFinish = (values: any) => { \n let existingTags = this.props.orgsList.orgMaint.record.orgTags?.map((tag: any) => { return { value: tag.tagName.toUpperCase(), label: tag.tagName.toUpperCase(), key: tag.tagName.toUpperCase() } });\n const removedTags = existingTags?.filter((oldTag:any) =>\n !values.orgTags.some((tag:any) => tag.value === oldTag.value && tag.key === oldTag.key));\n const newTags = values.orgTags?.filter((oldTag:any) =>\n !existingTags?.some((tag:any) => tag.value === oldTag.value && tag.key === oldTag.key));\n resetFormErrors(this, this.formRef.current);\n values.newTags = newTags;\n values.removedTags = removedTags;\n this.props.orgMaint(this, this.onFinishSuccess, this.onFinishFailure, values);\n };\n\n onFinishSuccess = (record: any) => { \n this.props.orgsListRefreshOnUpdate(this);\n \n if (record != null && Object.keys(record.orgId).length !== 0) {\n this.componentUpdate(record);\n this.props.orgMaintTabsDisabled(this, (record.orgId || \"\") === \"\");\n }\n if (record.orgId === this.props.context.appContext.orgId) {\n setHeaderColor(record.headerColor);\n setLogo(appConfigs.server.URL + record.logoUploadSrc);\n }\n if (record.fleetMapDefaultView !== this.props.context.orgSettings.fleetMapDefaultView) {\n this.props.contextUpdateMapDefaultView(record.fleetMapDefaultView);\n }\n\n scrollToElement(\"[data-id=orgs-maint-form-messages]\");\n successResponse(this, \"Organization has been successfully processed\"); \n\n const me = this;\n const orgsList = this.props.orgsList;\n this.props.orgsGet(this, null, null, orgsList.mode, orgsList.scope, orgsList.tableConfig.pagination.current, orgsList.searchText, orgsList.orgId); \n setTimeout(function () {\n me.props.orgMaintClose(me);\n }, 750); \n }\n\n onFinishFailure = (error: any) => { \n scrollToElement(\"[data-id=orgs-maint-form-messages]\");\n errorResponse(this, error);\n }\n\n onCountryStatesGetSuccess = () => { \n this.countryChange(this.formRef.current!.getFieldValue(\"countryId\"));\n }\n\n onLanguageGetSuccess = (data:any) => { \n this.setDefaultLanguage(data);\n }\n\n setDefaultLanguage = (data:any) => { \n if ((this.props.orgsList.orgMaint.record.languageId || \"\") === \"\" ) {\n let me = this;\n data.forEach((record: any) => {\n if (record.defaultLanguage) {\n me.formRef.current!.setFieldsValue({\"languageId\": record.languageId });\n }\n }); \n }\n }\n \n countryChange = (value: string) => { \n let me = this;\n\n setTimeout(function() {\n let states = me.props.orgsList.orgMaint.tabs[0].states.filter((state:any) => {\n return state.countryId === value;\n });\n\n me.setState({ states: states });\n if (states.length > 0) {\n me.formRef.current!.setFieldsValue({\"state\": \"\" });\n }\n else {\n me.formRef.current!.setFieldsValue({\"stateList\": \"\" });\n }\n }, 150); \n }\n\n colorPickerOpen = () => {\n this.setState({ displayColorPicker: !this.state.displayColorPicker });\n };\n \n colorPickerClose = () => {\n this.setState({ displayColorPicker: false });\n };\n\n colorPickerChange = (color:any) => {\n let me = this;\n\n setTimeout(function(){\n me.setState({ color: color.hex });\n me.formRef.current!.setFieldsValue({\"headerColor\": color.hex });\n }, 150); \n }\n\n render() {\n \n const { orgMaint } = this.props.orgsList; \n const { user:contextUser } = this.props.context;\n const orgsettings = getPermissions(this.props.permissions.permissions.org_settings);\n let iscreate = orgsettings[0];\n let isupdate = orgsettings[2];\n\n const tagPermissions = getPermissions(this.props.permissions.permissions.asset_tagging);\n let canTagCreate = tagPermissions[0];\n let canTagRead = tagPermissions[1];\n let canTagDelete = tagPermissions[3];\n\n const checkTagsValidations = async (rule: any, options: any) => {\n let newValues:any = [];\n let existingValues = [];\n newValues = options?.map((o:any) => o.value);\n existingValues = orgMaint.record.orgTags?.map((o: any) => o.tagName);\n if (!canTagDelete && existingValues !== undefined) {\n if (!existingValues.every((tag: any) => newValues.includes(tag))) {\n return Promise.reject(`you do not have enough permission privilege to delete tags`);\n }\n }\n if (options?.length) {\n if (canTagCreate) {\n if (options?.length > appConfigs.app.orgTags.maxOrgTags) {\n options.pop();\n return Promise.reject(`Maximum of ${appConfigs.app.orgTags.maxOrgTags} tags allowed`);\n }\n if (options[options.length - 1]?.value.length > appConfigs.app.orgTags.maxAllowCharactersPerTags) {\n options.pop();\n return Promise.reject(`Maximum of ${appConfigs.app.orgTags.maxAllowCharactersPerTags} characters allowed per tags`);\n }\n } else {\n //if we are deleting don't remove additional tag\n if (existingValues === undefined) {\n existingValues = []\n }\n if (options?.length > orgMaint.record.orgTags?.length || existingValues?.every((tag: any) => !newValues.includes(tag))) {\n options.pop();\n return Promise.reject(`you do not have permission to add tags`);\n }\n }\n }\n return Promise.resolve();\n };\n const colorPickerCover = {\n position: \"fixed\",\n top: \"0px\",\n right: \"0px\",\n bottom: \"0px\",\n left: \"0px\"\n } as React.CSSProperties;\n\n const mainLayout = {\n labelCol: { span: 7 },\n wrapperCol: { span: 17 }\n };\n\n const logoLayout = {\n labelCol: { span: 7 },\n wrapperCol: { span: 17 }\n };\n\n const loginLogoLayout = {\n labelCol: { span: 7 },\n wrapperCol: { span: 17 }\n };\n\n const settingsLayout = {\n labelCol: { span: 4 },\n wrapperCol: { span: 20 }\n };\n \n const settingsLayoutShort = {\n labelCol: { span: 4 },\n wrapperCol: { span: 11 }\n };\n\n const headerColorLabel = (\n <>\n <span>Color</span>\n <Tooltip placement=\"topLeft\" title={appConfigs.messages.headerColorTooltip}>\n <QuestionCircleOutlined />\n </Tooltip>\n </>\n );\n\n const logoLabel = (\n <>\n <span>Logo</span>\n <Tooltip placement=\"topLeft\" title={appConfigs.messages.companyLogoTooltip}>\n <QuestionCircleOutlined />\n </Tooltip>\n </>\n );\n\n const loginLogoLabel = (\n <>\n <span>Login<br />Logo</span>\n <Tooltip placement=\"topLeft\" title={appConfigs.messages.companyLoginLogoTooltip}>\n <QuestionCircleOutlined />\n </Tooltip>\n </>\n );\n\n const loginUrlLabel = (\n <>\n <span>URL</span>\n <Tooltip placement=\"topLeft\" title={appConfigs.messages.companyLoginUrlTooltip}>\n <QuestionCircleOutlined />\n </Tooltip>\n </>\n );\n\n const loginBackgroundLabel = (\n <>\n <span>Splash</span>\n <Tooltip placement=\"topLeft\" title={appConfigs.messages.companyLoginBackgroundTooltip}>\n <QuestionCircleOutlined />\n </Tooltip>\n </>\n );\n\n return ( \n\n <div data-id=\"orgs-maint-info\">\n <div data-id=\"orgs-maint-form-messages\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"orgs-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"orgs-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n </div>\n\n <Form\n {...mainLayout}\n id=\"orgMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n > \n <Row gutter={16}>\n <Col xs={24} md={15}>\n <Form.Item \n name=\"orgIdParent\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n name=\"orgId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n \n <Form.Item \n name=\"logoUploadId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n \n <Form.Item \n name=\"loginLogoUploadId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n name=\"loginBackgroundUploadId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n name=\"orgIdParent\"\n label=\"Parent Org\"\n >\n <strong>{this.state.orgIdParentName}</strong>\n </Form.Item>\n\n <Form.Item\n label=\"Name\"\n name=\"name\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255}/>\n </Form.Item>\n\n {\n\n// (canTagRead) && \n<Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Tags\"\n name=\"orgTags\"\n initialValue={orgMaint.record.orgTags?.map((tag: any) => { return { value: tag.tagName.toUpperCase(), label: tag.tagName.toUpperCase(), key: tag.tagName.toUpperCase() } })} \n rules={[{ validator: checkTagsValidations }]}\n > \n <Select \n\n mode=\"tags\"\n style={{ width: '100%', textTransform: \"uppercase\" }}\n placeholder=\"Select Tags\"\n disabled={ (!canTagCreate && !canTagDelete) || orgMaint.record.status == 'inactive' ||this.state.enableMtag\n }\n labelInValue\n >\n {orgMaint.selectedTag?.map((tagName:any, index:number) => (\n <Option key={index} value={tagName.toUpperCase()}>\n {tagName.toUpperCase()}\n </Option>\n ))}\n </Select> \n </Form.Item> \n </Col>\n <Col span={12} >\n \n \n</Col> \n</Row>\n}\n\n {/* OPS 1149 */} \n <Form.Item\n label=\"Phone\"\n name=\"phoneNumber\"\n >\n <Input maxLength={32}/>\n </Form.Item>\n\n {/*\n OPS 1149\n <OrgPhone />\n */} \n \n <Form.Item\n label=\"Street\"\n name=\"street1\" \n >\n <Input maxLength={255}/>\n </Form.Item>\n\n <Form.Item\n label=\" \"\n name=\"street2\" \n colon={false} \n >\n <Input maxLength={255}/>\n </Form.Item>\n\n <Form.Item\n label=\"City\"\n name=\"city\" \n >\n <Input maxLength={255}/>\n </Form.Item>\n\n <Form.Item\n label=\"Zip Code\"\n name=\"zipCode\" \n >\n <Input maxLength={255}/>\n </Form.Item>\n\n <Form.Item\n label=\"Country\"\n name=\"countryId\" \n >\n <Select \n data-id=\"orgs-maint-info-country-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n onChange={this.countryChange}\n >\n {orgMaint.tabs[0].countries.map((record:any, index:number) => (\n <Option key={record.countryId} value={record.countryId}>\n {record.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n\n {\n this.state.states.length !== 0 &&\n <Form.Item\n label=\"State\"\n name=\"stateList\" \n >\n <Select \n data-id=\"orgs-maint-info-state-list\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n >\n {this.state.states.map((record:any, index:number) => (\n <Option key={record.isoCode2} value={record.isoCode2}>\n {record.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n }\n {\n this.state.states.length === 0 &&\n <Form.Item\n label=\"State\"\n name=\"state\" \n >\n <Input maxLength={255}/>\n </Form.Item>\n }\n </Col>\n <Col xs={24} md={9}>\n\n <Form.Item\n {...logoLayout}\n label={logoLabel}\n colon={false}\n >\n <OrgLogo formRef={this.formRef.current}/> \n </Form.Item>\n\n <Form.Item\n {...loginLogoLayout}\n label={loginLogoLabel}\n colon={false}\n >\n <OrgLoginLogo formRef={this.formRef.current}/> \n </Form.Item>\n\n </Col>\n </Row> \n\n <Card size=\"small\" title=\"Settings\">\n {/*\n <Form.Item\n {...settingsLayoutShort}\n label=\"Language\"\n name=\"languageId\" \n >\n <Select \n data-id=\"orgs-maint-info-language-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n >\n {orgMaint.tabs[0].languages.map((record:any, index:number) => (\n <Option key={record.languageId} value={record.languageId}>\n {record.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n */}\n\n <Form.Item\n {...settingsLayoutShort}\n label=\"Fleet View\"\n name=\"fleetMapDefaultView\" \n >\n <Select \n data-id=\"orgs-maint-info-fleet-map-default-view\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n placeholder=\"Select...\"\n >\n <Option value=\"satellite\">Satellite</Option>\n <Option value=\"roadmap\">RoadMap</Option>\n </Select>\n </Form.Item>\n\n <Form.Item\n {...settingsLayout}\n label={headerColorLabel}\n colon={false}\n >\n <Row gutter={8}>\n <Col xs={12} md={6}>\n <Form.Item\n name=\"headerColor\"\n noStyle\n >\n <Input maxLength={16} placeholder=\"Hex color value\"/>\n </Form.Item>\n </Col>\n <Col xs={12} md={4}>\n <Button data-id=\"header-color-pick-button\" onClick={this.colorPickerOpen}>\n Pick\n </Button>\n <div>\n {this.state.displayColorPicker ? (\n <>\n <div style={{position: 'absolute', zIndex: 2, left: 5, top: -330 }}>\n <div style={colorPickerCover} onClick={this.colorPickerClose} />\n <SketchPicker\n color={this.state.color}\n onChange={this.colorPickerChange}\n />\n </div>\n </>\n ) : null}\n </div> \n </Col>\n </Row>\n </Form.Item>\n {\n (contextUser.contextUserIsSuperUser) &&\n <Form.Item\n {...settingsLayout}\n label=\"Terms\"\n name=\"termsAndConditions\"\n >\n <TextArea rows={4} placeholder=\"Enter your Terms and Conditions here\" maxLength={32000}/>\n </Form.Item>\n }\n </Card> \n\n {\n (iscreate && isupdate) &&\n <Card size=\"small\" title=\"Login\">\n <Form.Item \n {...settingsLayout}\n label=\"Current URL\"\n >\n {\n this.state.loginUrlDisplay &&\n <Paragraph copyable={{ text: this.state.loginUrlDisplay }}>{this.state.loginUrlDisplay}</Paragraph>\n }\n </Form.Item>\n\n <Form.Item\n {...settingsLayout}\n label={loginUrlLabel}\n colon={false} \n name=\"loginUrl\" \n >\n <Input maxLength={64}/>\n </Form.Item>\n\n <Form.Item\n {...settingsLayout}\n label={loginBackgroundLabel}\n colon={false}\n >\n <OrgLoginBackground formRef={this.formRef.current}/> \n </Form.Item>\n\n </Card>\n }\n </Form>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n orgsList: state.orgsReducers.orgsState.orgsList,\n permissions: state.contextReducer.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n ...contextActions,\n ...orgActions\n }\n)(OrgMaintInfo);","import React from \"react\";\nimport { Form, Row, Col, Table, Collapse, Select, Tooltip, Button, Space, Input, message } from 'antd';\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport { loadingIndicatorStart } from \"../../../utils/commonHelpers\";\n\nconst { Option } = Select;\nconst { Panel } = Collapse;\nconst { Search } = Input;\n\ninterface Prop {\n orgMaintAdminsSetPagination: Function,\n orgUsersGet: Function,\n orgUserRole: Function,\n usersAdministeredGet: Function,\n usersAdministeredMaint: Function,\n orgMaintAdminsSetSearch: Function,\n orgsListRefreshOnUpdate: Function,\n context: any,\n orgsList: any,\n iscreate: boolean,\n isread: boolean,\n isupdate: boolean\n}\n\nclass OrgMaintAdmins extends React.Component<Prop, {}> { \n \n formRef = React.createRef<FormInstance>();\n\n componentDidMount() {\n this.props.orgMaintAdminsSetPagination(this.onPaginationChange);\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgsList.orgMaint.instance !== prevProps.orgsList.orgMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n if ((this.props.orgsList.orgMaint.record.orgId || \"\") !== \"\") {\n //ops-2680\n this.props.orgUsersGet(this, null, null, this.props.orgsList.orgMaint.record.orgId, this.props.context.appContext.roleName, 1);\n }\n }\n\n onPaginationChange = (page: number) => {\n //ops-2680\n this.props.orgUsersGet(this, null, null, this.props.orgsList.orgMaint.record.orgId, this.props.context.appContext.roleName, page, this.props.orgsList.orgMaint.tabs[2].searchText);\n };\n\n roleChange = (role:string, record:any) => { \n const userAutoChange = this.props.context.appContext.userId === record[\"data-user-id\"] && role !== \"admin\"; \n this.props.orgUserRole(this, this.roleChangeSuccess(userAutoChange), null, record[\"data-id\"], role); \n };\n\n roleChangeSuccess = (userAutoChange: boolean) => {\n //ops-2680 \n this.props.orgUsersGet(this, null, null, this.props.orgsList.orgMaint.record.orgId, this.props.context.appContext.roleName, this.props.orgsList.orgMaint.tabs[2].tableConfig.pagination.current, this.props.orgsList.orgMaint.tabs[2].searchText); \n message.success(\"User has been successfully updated\");\n if (userAutoChange || false) {\n loadingIndicatorStart();\n setTimeout(function () {\n window.location.href = \"/map\"; \n }, 500); \n }\n };\n\n resetUsers = () => { \n this.formRef.current?.resetFields(); \n }\n\n onUsersSearch = (value:string) => {\n this.props.usersAdministeredGet(this, null, null, this.props.context.user.userId, value);\n };\n\n onUsersChange = (value:string) => {\n };\n\n addUser = () => { \n let form = this.formRef.current;\n this.props.usersAdministeredMaint(\n this, \n this.addUserSuccess, \n null, \n [this.props.orgsList.orgMaint.record.orgId],\n (form?.getFieldValue(\"userId\") || null), \n \"admin\", \n false,\n this.props.orgsList.orgMaint.tabs[2].tableConfig.pagination.current\n );\n };\n \n addUserSuccess = (data:any) => { \n this.resetOrgs();\n this.props.orgsListRefreshOnUpdate();\n //ops-2680\n this.props.orgUsersGet(this, null, null, this.props.orgsList.orgMaint.record.orgId, this.props.context.appContext.roleName, this.props.orgsList.orgMaint.tabs[2].tableConfig.pagination.current, this.props.orgsList.orgMaint.tabs[2].searchText);\n message.success(\"Action have been successfully completed\");\n }\n\n resetOrgs = () => { \n this.formRef.current?.resetFields(); \n }\n \n onSearch = (searchText: string) => { \n this.props.orgMaintAdminsSetSearch(searchText || \"\"); \n\n const me = this;\n setTimeout(function(){\n //ops-2680\n me.props.orgUsersGet(me, null, null, me.props.orgsList.orgMaint.record.orgId, me.props.context.appContext.roleName, me.props.orgsList.orgMaint.tabs[2].tableConfig.pagination.current, me.props.orgsList.orgMaint.tabs[2].searchText); \n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.orgMaintAdminsSetSearch((value || \"\"));\n }\n\n columns = [\n {\n title: \"Name\",\n dataIndex: \"userFullName\",\n key: \"userFullName\",\n render: (text: any, record: any) => (\n <>\n <strong>{record.userFullName}</strong>\n \n <br/>\n <span>{record.userOrgHomeName}</span>\n </>\n )\n },\n {\n title: \"Role\",\n dataIndex: \"role\",\n key: \"role\",\n width: \"180px\",\n render: (text: any, record: any) => (\n <>\n {\n (record.contextUserIsOrgAdmin || this.props.iscreate || this.props.isupdate) &&\n <Select \n data-id=\"orgs-maint-subscriptions-role\"\n defaultValue={record.role}\n onChange={this.roleChange}\n key={\"role-\" + record.recordNo}\n >\n <Option key={\"user-\" + record.orgUserId} data-id={record.orgUserId} data-user-id={record.userId} value=\"user\">User</Option>\n <Option key={\"guest-\" + record.orgUserId} data-id={record.orgUserId} data-user-id={record.userId} value=\"guest\">Guest</Option>\n <Option key={\"admin-\" + record.orgUserId} data-id={record.orgUserId} data-user-id={record.userId} value=\"admin\">Admin</Option>\n <Option key={\"no-access-\" + record.orgUserId} data-id={record.orgUserId} data-user-id={record.userId} value=\"no-access\" disabled={record.isHomeOrg}>No Access</Option>\n </Select> \n } \n {\n //!record.contextUserIsOrgAdmin &&\n (!this.props.iscreate || !this.props.isupdate || this.props.isread) &&\n <span>{record.role}</span> \n }\n </>\n )\n }\n ];\n\n render() {\n\n const { user:contextUser } = this.props.context;\n const { tableConfig, tableData, usersAdministered, searchText } = this.props.orgsList.orgMaint.tabs[2];\n\n const tablecolumns = [\n {\n title: \"Name\",\n dataIndex: \"userFullName\",\n key: \"userFullName\",\n render: (text: any, record: any) => (\n <>\n <strong>{record.userFullName}</strong>\n \n <br/>\n <span>{record.userOrgHomeName}</span>\n </>\n )\n },\n {\n title: \"Role\",\n dataIndex: \"role\",\n key: \"role\",\n width: \"180px\",\n render: (role: string, record: any) => {\n const isRoleAdmin = record.role === \"admin\"; \n //const isGsOrgSelected = parentOrg === \"7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d\";\n const isEnabled = isRoleAdmin || contextUser.contextUserIsAdmin\n return (\n \n (record.contextUserIsOrgAdmin || this.props.iscreate || this.props.isupdate) &&\n <Select \n data-id=\"users-maint-info-home-org-role\"\n value={record.role}\n style={{ width: 180 }}\n showSearch\n showArrow={true}\n allowClear \n optionFilterProp=\"children\"\n className=\"select-before\" \n onChange={this.roleChange} \n disabled={!isEnabled} \n //key={\"role-\" + record.recordNo}\n >\n {JSON.parse(record.roles) !== null && JSON.parse(record.roles).map((recordrole:any, index:number) => (\n <Option key={record.orgUserId} data-id={record.orgUserId} data-user-id={record.userId} value={recordrole.role_name}>\n {recordrole.role_name}\n </Option>\n ))}\n </Select>\n )\n }\n }\n ];\n\n const header = (\n <>\n <span>Add Organization Administrators</span>\n <Tooltip title=\"Assign users from any organization you have access to\">\n <QuestionCircleOutlined />\n </Tooltip>\n </>\n );\n\n return ( \n <div data-id=\"orgs-maint-subscriptions-add-admin\"> \n {\n contextUser.contextUserIsAdmin &&\n <Collapse bordered={false} defaultActiveKey={['0']} className=\"auto-close\">\n <Panel header={header} key=\"1\">\n <Form \n layout=\"vertical\"\n ref={this.formRef}\n name=\"add\" \n >\n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"userId\"\n >\n <Select \n data-id=\"orgs-maint-subscriptions-user-id\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select a user (start typing name)\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={false}\n onSearch={this.onUsersSearch}\n onChange={this.onUsersChange}\n notFoundContent={null}\n allowClear\n >\n {usersAdministered.map((record:any, index:number) => (\n <Option key={record.userId} value={record.userId}> \n <div className=\"demo-option-label-item\">\n <strong>{record.fullName}</strong>\n <span role=\"img\">\n {record.orgHomeName}\n </span>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Space size=\"middle\">\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"orgs-maint-subscriptions-add-admin-reset-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.resetUsers}\n disabled={ \n !(\n this.formRef.current?.getFieldValue(\"userId\") \n )\n } \n >\n Reset\n </Button>\n )}\n </Form.Item>\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"orgs-maint-subscriptions-add-admin-submit-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.addUser}\n disabled={\n !(\n (this.formRef.current?.getFieldValue(\"userId\") || \"\") !== \"\" \n ) \n } \n >\n Submit\n </Button>\n )}\n </Form.Item>\n </Space>\n </Form>\n </Panel> \n </Collapse>\n }\n\n {\n (\n ((searchText || \"\") === \"\" && tableData && (tableData.length || 0) > 0) ||\n ((searchText || \"\") !== \"\") || this.props.isread\n ) &&\n <Search\n data-id=\"orgs-maint-subscriptions-search-field\"\n placeholder=\"Search by user name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n value={searchText}\n /> \n } \n {\n this.props.isread &&\n <Table \n data-id=\"orgs-maint-subscriptions-data\"\n {...tableConfig}\n rowKey={(record) => record.orgUserId} \n columns={tablecolumns} \n dataSource={tableData}\n />\n } \n \n </div>\n )\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n orgsList: state.orgsReducers.orgsState.orgsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OrgMaintAdmins);","import React from \"react\";\nimport { Table, Checkbox, Space, Tooltip, Input, Tree } from 'antd';\nimport { PhoneOutlined, MailOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { array } from \"@amcharts/amcharts4/core\";\n\ninterface Prop{ \n context: any,\n orgsList: any,\n orgsGlobalSubscriptionsGet: Function,\n orgsGlobalSubscriptionsMaint: Function,\n orgsListRefreshOnUpdate: Function,\n iscreate: boolean,\n isread: boolean,\n isupdate: boolean\n \n}\n\ninterface State{\n expandedKey:any;\n}\n\nclass OrgMaintGlobalSubscription extends React.Component<Prop,State> {\n\n state: State = {\n expandedKey:[]\n }\n\n componentDidMount() {\n const { appContext } = this.props.context;\n this.props.orgsGlobalSubscriptionsGet(this, this.onGlobalSubscriptionSuccess, null, this.props.orgsList.orgMaint.record.orgId, appContext.userId, this.props.orgsList.searchText);\n\n //this.props.orgsGlobalSubscriptionsGet(this,this.onGlobalSubscriptionSuccess, null,this.props.orgsList.orgMaint.record.orgId, appContext.userId, parentOrgId, this.props.orgsList.searchText);\n \n }\n\n onGlobalSubscriptionSuccess=(data:any)=>{\n \n let expandKeys:Array<any>=[];\n expandKeys.push(data[0].expandedKey);\n this.setState({expandedKey:expandKeys});\n }\n\n \n onCheckChange = (e:any, record:any, notification: string, scope: string) => { \n let action = e.target.checked ? \"plus\" : \"minus\";\n let trigger = record.name; \n this.props.orgsGlobalSubscriptionsMaint(this, this.onCheckChangeSuccess, this.onCheckChangeFailure, this.props.orgsList.orgMaint.record.orgId, record, notification, action, scope);\n }\n onCheckChangeSuccess = (userId:string, record:any, notification: string, action: string, scope:string) => { \n\n //this.props.orgsListRefreshOnUpdate(this);\n //const { appContext } = this.props.context; \n //let parentOrgId = this.props.orgsList.orgMaint.record.orgIdParent == null ? this.props.orgsList.orgMaint.record.orgId : this.props.orgsList.orgMaint.record.orgIdParent;\n //this.props.orgsGlobalSubscriptionsGet(this,this.onGlobalSubscriptionSuccess, null,this.props.orgsList.orgMaint.record.orgId, appContext.userId, parentOrgId, this.props.orgsList.searchText);\n \n };\n\n onCheckChangeFailure = (error:string, userId:string, record:any, notification: string, action: string, scope:string) => { \n \n } \n \n onSelect = (selectedKeys: React.Key[], info: any) => {\n // console.log('selected', selectedKeys, info);\n };\n \n onCheck = (checkedKeys: React.Key[], info: any) => {\n // console.log('onCheck', checkedKeys, info);\n };\n\n \n\n actions = (record:any) => (\n <>\n <Space size=\"large\">\n <Tooltip title=\"Set/Unset SMS for all global alerts\">\n <Checkbox data-id=\"org-maint-global-subscriptions-sms-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"alert\")} checked={record.smsChecked}><PhoneOutlined /></Checkbox>\n </Tooltip>\n <Tooltip title=\"Set/Unset email for all global alerts\">\n <Checkbox data-id=\"org-maint-global-subscriptions-email-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", \"alert\")} checked={record.emailChecked}><MailOutlined /></Checkbox>\n </Tooltip>\n </Space>\n \n {/* Below lines are commented for not to show parent/child records. */}\n {/* {record.children &&\n <Space size=\"large\">\n <Tooltip title=\"Set/Unset SMS for all global alerts\">\n <Checkbox data-id=\"org-maint-global-subscriptions-sms-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"alert\")} indeterminate={record.smsIndeterminate} checked={record.smsChecked}><PhoneOutlined /></Checkbox>\n </Tooltip>\n <Tooltip title=\"Set/Unset email for all global alerts\">\n <Checkbox data-id=\"org-maint-global-subscriptions-email-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", \"alert\")} indeterminate={record.emailIndeterminate} checked={record.emailChecked}><MailOutlined /></Checkbox>\n </Tooltip>\n </Space>\n } */}\n {/* {!record.children &&\n <div>\n <Space size=\"large\">\n <Checkbox data-id=\"org-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"alert\")} checked={record.alertSms}><PhoneOutlined /></Checkbox>\n\n <Checkbox data-id=\"org-maint-subscriptions-email\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", \"alert\")} checked={record.alertEmail}><MailOutlined /></Checkbox>\n </Space>\n </div>\n }\n */}\n \n </>\n )\n\n handleExpand(record:any) {\n // if a row is expanded, collapses it, otherwise expands it\n this.setState(prevState =>\n prevState.expandedKey.includes(record.key)\n ? {\n expandedKey: prevState.expandedKey.filter((key:any)=>\n key !== record.key\n )\n }\n : { expandedKey: [...prevState.expandedKey, record.key] }\n );\n }\n render(){\n \n const { tableData } = this.props.orgsList.orgMaint.tabs[3];\n \n const treeData =[\n {\n title: \"alertName\",\n dataIndex: \"alertName\",\n key: \"alertName\",\n render: (text: any, record: any) => ( \n <> \n {record.children &&\n <strong>{record.name}</strong>\n }\n {!record.children && record.signalId === \"\" &&\n <i>{record.name}</i>\n }\n {!record.children && record.signalId !== \"\" &&\n <span>{record.name}</span>\n }\n </>\n )\n },\n {\n title: \"Subscribed\",\n dataIndex: \"subscribed\",\n width: \"30%\",\n key: \"subscribed\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n this.actions(record)\n )\n },\n \n ]\n const columns = [\n {\n title: \"Subscription\",\n dataIndex: \"name\",\n key: \"name\" ,\n render: (text: any, record: any) => ( \n <>\n <strong>{record.name}</strong> \n {/* {record.children && \n <strong>{record.name}</strong>\n }\n {!record.children &&\n <i>{record.name}</i>\n } */}\n </>\n )\n },\n {\n title: \"Subscribed\",\n dataIndex: \"subscribed\", \n width: \"30%\",\n key: \"subscribed\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n this.actions(record) \n )\n }\n ];\n \n return(\n <> \n {/* <Table \n data-id=\"org-maint-global-subscriptions\" \n columns = { columns }\n dataSource = { tableData }\n onExpand={(expanded, record) => this.handleExpand(record)}\n expandable={{\n expandedRowKeys: this.state.expandedKey,\n }}\n /> */}\n\n <Table \n data-id=\"org-maint-global-subscriptions\" \n columns = { columns }\n dataSource = { tableData } \n />\n </>\n ) \n \n }\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n orgsList: state.orgsReducers.orgsState.orgsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OrgMaintGlobalSubscription);","import React from \"react\";\nimport { Col, Form, Input, message, Row, Select, Tree } from 'antd';\nimport { connect } from \"react-redux\";\nimport * as actions from \"../Orgs/actions\";\nimport * as rootActions from \"../../actions\";\nimport * as orgActions from \"../OrgSelector/actions/\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { FormInstance } from \"antd/lib/form\";\nimport { errorResponse, resetFormErrors, successResponse } from \"../../utils/apiHelpers/apiHelpers\";\nimport { formInit } from \"../../utils/apiHelpers/formHelpers\";\nimport { ErrorAlert, SuccessAlert } from \"../../utils/Components/formAlerts\";\nimport { loadingIndicatorEnd, loadingIndicatorStart } from \"../../utils/commonHelpers\";\nimport \"../OrgSelector/orgSelector.css\";\n\n\nconst { Option } = Select;\nconst { Search } = Input;\nconst { DirectoryTree } = Tree;\n\ninterface Prop {\n context: any,\n orgsList: any,\n getAllCapabilities: Function,\n capabilityAccess: Function,\n orgSelectorTreeExpand: Function,\n orgSelectorTreeCheck: Function,\n orgSelectorTreeSelection: Function,\n orgSelectorTreeOrgsGet: Function,\n orgSelectorTreeMaint: Function,\n orgSelectorSetView: Function,\n orgSelector: any,\n orgSelectorTree: any,\n}\ninterface State {\n allFeatures: any[],\n //selectedOrgs: any[],\n searchValue: string,\n childOrgs: any[],\n clearedOrgs: any[],\n\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n}\n\nclass OrgMaintSettings extends React.Component<Prop, State> { \n state:State = { \n allFeatures: [],\n // selectedOrgs: [],\n searchValue: \"\",\n childOrgs: [],\n clearedOrgs: []\n }\n _isMounted = false;\n formRef = React.createRef<FormInstance>();\n onFinish = (values: any) =>{\n let disabledFeatures:any[]=[];\n if(values.disableFeatures.length > 0){\n values.disableFeatures.map((item:any)=>{\n if(item === \"Asset Dashboard\")\n {\n disabledFeatures.push(25);\n }\n else\n {\n disabledFeatures.push(item);\n }\n });\n }\n resetFormErrors(this, this.formRef.current);\n\n let clearedOrgs:any[]=[];\n if(JSON.stringify(this.state.childOrgs)!==JSON.stringify(this.props.orgSelectorTree.restrictedOrgs)){\n \n this.props.orgSelectorTree.restrictedOrgs.map((id:any)=>{\n if(this.state.childOrgs.indexOf(id)===-1){\n clearedOrgs.push(id);\n }\n });\n }\n \n this.props.capabilityAccess(this,this.capabilityAccessSuccess,this.capabilityAccessFail,disabledFeatures,this.state.childOrgs,this.state.clearedOrgs);\n }\n\n capabilityAccessSuccess = () => {\n resetFormErrors(this, this.formRef.current);\n this.props.orgSelectorTreeOrgsGet(this, null, null, this.props.orgSelectorTree.mode);\n successResponse(this,\"Successfully Updated\");\n } \n capabilityAccessFail = (error:any) => {\n errorResponse(this, error);\n }\n componentDidMount(): void {\n this._isMounted = true;\n //this.setState({childOrgs:[]});\n if(this._isMounted){\n \n this.componentUpdate();\n }\n \n \n \n }\n\n componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n getAllCapabilitiesSuccess = (data: any) => {\n let capabilities: any[] = [];\n data.map((capabality:any)=>{\n let capabilityItem = {\"featureId\": capabality.id, \"name\": capabality.capabilityName};\n capabilities.push(capabilityItem);\n })\n if(this._isMounted){\n this.setState({ allFeatures: capabilities});\n }\n }\n\n \n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgSelector.instance !== prevProps.orgSelector.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n if(this.props.orgsList.orgMaint.tabs[1].allCapabilities.length === 0) {\n this.props.getAllCapabilities(this, this.getAllCapabilitiesSuccess, null);\n }\n else {\n this.getAllCapabilitiesSuccess(this.props.orgsList.orgMaint.tabs[1].allCapabilities);\n }\n if ((this.props.orgSelectorTree.treeData.length || 0) === 0 || this.props.orgSelectorTree.refreshOnEntry) {\n if(this._isMounted){\n this.setState({ searchValue: \"\" });\n }\n this.props.orgSelectorTreeSelection(this, \"\", \"\");\n this.props.orgSelectorTreeOrgsGet(this, this.onGetOrgsSuccess, null, this.props.orgSelectorTree.mode); \n }\n else {\n formInit(this);\n if(this.props.orgSelectorTree && this.props.orgSelectorTree.restrictedOrgs.length>0 ){\n this.setState({childOrgs: this.props.orgSelectorTree.restrictedOrgs});\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n disableFeatures : [\"Asset Dashboard\"],\n ///disableFeatures : {\"featureId\": 25, \"name\": \"Asset Dashboard\"},\n \n \n //)//this.props.orgSelectorTree.restrictedFeatures\n });\n }\n \n }\n }\n }\n \n onGetOrgsSuccess = (data: any,mode:any)=>{\n let restrictedOrgIds:any[]=[];\n let restrictedFeatures:any[]=[]; \n let restrictedOrgs = data.filter((item:any)=>item.properties&&JSON.parse(item.properties).disableFeatures&&JSON.parse(item.properties).disableFeatures.length>0);\n if(restrictedOrgs.length>0){\n restrictedOrgs.map((item:any)=>restrictedOrgIds.push(item.orgId));\n if(this._isMounted){\n this.setState({childOrgs: restrictedOrgIds})\n };\n restrictedFeatures.push(JSON.parse(restrictedOrgs[0].properties).disableFeatures)\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n // disableFeatures: restrictedFeatures.map((item:any)=>{return item.name})//this.props.orgSelectorTree.restrictedFeatures\n disableFeatures : [\"Asset Dashboard\"],\n });\n }\n }\n }\n \n arrayDiff = (arr1:any, arr2:any) => {\n let arr = [], \n diff = [];\n \n for (var i = 0; i < arr1.length; i++) {\n arr[arr1[i]] = true;\n }\n \n for (i = 0; i < arr2.length; i++) {\n if (arr[arr2[i]]) {\n delete arr[arr2[i]];\n } else {\n arr[arr2[i]] = true;\n }\n }\n \n for (var k in arr) {\n diff.push(k);\n }\n \n return diff;\n }\n\n \n\n \n\n onSelect = (selectedKeys:any[], info:any) => {\n this.props.orgSelectorTreeSelection(this, selectedKeys[0]);\n };\n\n onExpand = (expandedKeys:any) => {\n this.props.orgSelectorTreeExpand(this, expandedKeys);\n };\n\n onCheckChange = (checkedKeys:any, info:any) => {\n let key:any = info.node.key;\n let checkedStatus = info.checked;\n let clearedOrgs: any[] = [...this.state.clearedOrgs];\n let selectedOrgs: any[] = [...this.state.childOrgs];\n let selectedOrgs1 = this.getChildOrgs(key,selectedOrgs,clearedOrgs,info.checked);\n if(this._isMounted)\n {\n this.setState({childOrgs: selectedOrgs1.childOrgs,\n clearedOrgs: selectedOrgs1.clearedOrgs });\n }\n };\n\n getChildOrgs = (orgId: any,childOrgs: any[],clearedOrgs:any[],checked:boolean) =>{\n if(checked){\n if(childOrgs.indexOf(orgId)===-1) {\n childOrgs.push(orgId);\n //this.setState({childOrgs: [...this.state.childOrgs,orgId]});\n }\n if(clearedOrgs.indexOf(orgId)>-1)\n {\n let index = clearedOrgs.indexOf(orgId);\n clearedOrgs.splice(index,1);\n }\n }\n else\n {\n const index = childOrgs.indexOf(orgId);\n if (index > -1) {\n childOrgs.splice(index,1);\n //this.setState({childOrgs: childOrgs});\n }\n if(clearedOrgs.indexOf(orgId)=== -1){\n clearedOrgs.push(orgId);\n }\n }\n \n let selectedOrg:any = {};\n selectedOrg = this.props.orgSelectorTree.treeDataFlat.filter((org:any)=> org.orgId===orgId)[0];\n for (let i= selectedOrg.children.length; i>0; i-- ) {\n this.getChildOrgs(selectedOrg.children[i-1].orgId, childOrgs,clearedOrgs,checked);\n }\n return {\"childOrgs\":childOrgs, \"clearedOrgs\": clearedOrgs}\n }\n \n onCheckChangeSuccess = (data:any, orgId:string, checkedKeys:any) => { \n this.props.orgSelectorTreeCheck(this, checkedKeys);\n };\n\n onCheckChangeFailure = () => { \n } \n\n getParentKey = (orgId:string, tree:any):string => {\n let parentOrgId;\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (node.children) {\n if (node.children.some((item: any) => item.orgId === orgId)) {\n parentOrgId = node.orgId;\n } \n else if (this.getParentKey(orgId, node.children)) {\n parentOrgId = this.getParentKey(orgId, node.children);\n }\n }\n }\n return parentOrgId;\n };\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n const loadingIndicator = (this.props.orgSelectorTree.treeDataFlat.length || 0 ) > 50;\n const me = this;\n if(this._isMounted){\n this.setState({ searchValue: value });\n }\n if (loadingIndicator) {\n loadingIndicatorStart();\n }\n\n let expandedKeys = \n \n this.props.orgSelectorTree.treeDataFlat\n .map((record:any) => {\n if (record.name.toLowerCase().indexOf(value.toLowerCase()) > -1) {\n return this.getParentKey(record.orgId, this.props.orgSelectorTree.treeData);\n }\n return null;\n })\n .filter((item:any, i:number, self:any) => \n item && self.indexOf(item) === i\n );\n \n setTimeout(function() {\n me.props.orgSelectorTreeExpand(me, expandedKeys);\n\n if (loadingIndicator) {\n loadingIndicatorEnd();\n }\n }, 100); \n }\n\n getExpandedKeys = (treeDataFlat: any, treeDataChecked: any) => {\n const selection = treeDataChecked.reduce((acc: any, elem: any) => {\n const orgFound = treeDataFlat.find((t: any) => t.orgId === elem);\n if(orgFound) {\n const pathId = orgFound.pathId;\n let pathArray = pathId.split('~');\n if(pathArray.length > 1) {\n const pathArrayNew = pathArray.pop();\n }\n if(pathArray.length > 1) {\n acc = [...acc, ...pathArray];\n return acc;\n }\n return acc; \n }\n return acc;\n },[]);\n \n return selection.filter((elem: any, index: any) => selection.indexOf(elem) === index);\n }\n\n\n render() {\n \n let defaultSelection=[];\n const { treeData, treeDataExpanded,restrictedOrgs, restrictedOrgsExpansion,restrictedFeatures } = this.props.orgSelectorTree;\n defaultSelection = restrictedOrgsExpansion;\n let checkedOrgs = this.state.childOrgs;\n defaultSelection = defaultSelection.concat(treeDataExpanded);\n const getTreeData = (data: any) =>\n data.map((item: any) => {\n const index = item.name.toLowerCase().indexOf(this.state.searchValue.toLowerCase());\n const beforeStr = index > - 1 ? item.name.substr(0, index) : \"\";\n const afterStr = index > - 1 ? item.name.substr(index + this.state.searchValue.length) : \"\";\n const string = index > - 1 ? item.name.substr(index, this.state.searchValue.length) : \"\";\n let title =\n index > -1 ? (\n <span>\n {beforeStr}\n <span className=\"tree-search-value\">{string}</span>\n {/* {afterStr} +{item.orgId} */} {afterStr}\n </span>\n ) : \n (\n // <span>{item.name+item.orgId}</span>\n <span>{item.name}</span>\n\n );\n //title = title +item.orgId + item.name;\n if (item.children) {\n return { title, key: item.orgId, children: getTreeData(item.children) };\n }\n\n return {\n title,\n key: item.orgId,\n };\n });\n\n return (\n <>\n <div data-id=\"orgs-maint-form-messages\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"orgs-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"orgs-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n </div>\n <Form\n layout=\"vertical\"\n id=\"orgMaintSettingsForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n > \n <Row gutter={8}>\n <Col xs={24} md={24}>\n <Form.Item\n name=\"disableFeatures\"\n label=\"Disable Features\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n \n <Select\n data-id=\"orgs-maint-settings-features\"\n mode=\"multiple\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select feature\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n >\n {this.state.allFeatures.map((record: any, index: number) => (\n <Option key={record.featureId} value={record.featureId}>\n {record.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col>\n </Row>\n \n {/* <Row gutter={8}>\n <Col xs={24} md={24}>\n <Form.Item name= \"searchOrg\" label= \"Search Org\"> \n <Search\n data-id=\"orgs-maint-tree-search-field\"\n key=\"tree-search-field\"\n placeholder=\"Search by typing org name\"\n size = \"middle\"\n allowClear\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.state.searchValue}\n />\n </Form.Item> \n </Col>\n </Row> */}\n <Row gutter={8}>\n <Col xs={24} md={24}>\n <Form.Item name=\"orgSelector\"\n label=\"Select Orgs\"\n // rules={[{ required: this.state.childOrgs.length == 0, message: \"Select atleast one org\" }]}\n > \n <DirectoryTree\n data-id=\"orgs-maint-settings-tree\"\n className=\"mt-25\"\n checkable\n showIcon={false}\n onExpand={this.onExpand}\n onCheck={this.onCheckChange}\n onSelect={this.onSelect}\n checkStrictly={true} \n //checkedKeys={treeDataChecked}\n checkedKeys={checkedOrgs} //{this.state.childOrgs}\n expandedKeys={defaultSelection} \n treeData={getTreeData(treeData)} \n \n />\n </Form.Item>\n </Col>\n </Row>\n \n </Form>\n </>\n )\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n orgsList: state.orgsReducers.orgsState.orgsList,\n orgSelector: state.orgSelectorReducers.orgSelectorState.orgSelector,\n orgSelectorTree: state.orgSelectorReducers.orgSelectorState.orgSelector.tree\n };\n};\n\nexport default connect(\n mapStateToProps,\n {...actions,\n ...rootActions,\n ...orgActions}\n)(OrgMaintSettings);","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getContracts(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n searchText?: string,\n filters?: any[any],\n contractId?:string\n) {\n \n return async (dispatch: any) => {\n\n let filtersObj:any = [];\n filters && filters['status'] != null ? filtersObj = {'statusFilter': filters['status']} : filtersObj = {}\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/contracts\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n contractId: (contractId||\"\"),\n filters: (filters['status'] ? \"\" : encodeURIComponent(JSON.stringify(filtersObj)) )\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.contracts);\n }\n dispatch({ type: \"CONTRACTS_GET_SUCCESS\", payload: {data: response.data.data.contracts, page: page} });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function contractsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CONTRACT_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function contractSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CONTRACTS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n}\n\nexport function openDrawer(title: string, width: number, record: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"OPEN_DRAWER\", payload: { title: title, width: width, record: record } });\n\t};\n}\n\nexport function closeDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"CLOSE_DRAWER\" });\n\t};\n}\n\nexport function drawerTabChange(activeTab: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"DRAWER_TAB_CHANGE\", activeTab: activeTab });\n\t};\n}\n\n\n\nexport function getAllAssetsList() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/contracts\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\tpage: 1,\n\t\t\t\tpageSize: 9999,\n\t\t\t},\n\t\t}).then((response) => {\n let contracts = response.data.data.contracts;\n\t\t\tdispatch({ type: \"SET_ASSETS_LIST\", payload: { assetsList: contracts } });\n\t\t}).catch(function (error) {\n dispatch({ type: \"SET_LOADING_ASSETS\", payload: { state: false } });\n errorResponse(null, error);\n });\n\t};\n}\n\n\nexport function updateField(value: string, filedName:string, mastertag: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"UPDATE_FIELD\", payload: { value: value, filedName: filedName, mastertag: mastertag } });\n\t};\n}\n\n\nexport function updateRenewalField(value: string, filedName:string, mastertag: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"UPDATE_RENEWAL_FIELD\", payload: { value: value, filedName: filedName, mastertag: mastertag } });\n\t};\n}\n\nexport function addToContractsList(\n selectedAsset: any,\n callbackFnFailure?: any,\n) {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_contract_details\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n gatewayId: selectedAsset.gatewayID\n\t\t\t},\n\t\t}).then((response) => {\n\t\t\tlet contractStatus = response.data.data.contractStatus;\n\t\t\tdispatch({ type: \"APPEND_TO_SELECTED_CONTRACTS_LIST\", payload: { contract: contractStatus } });\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error)\n }\n errorResponse(null, error);\n });\n\t};\n}\n\n\nexport function addToRenewalsToolList(\n selectedAsset: any,\n callbackFnFailure?: any,\n) {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_contract_details\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n gatewayId: selectedAsset.gatewayID\n\t\t\t},\n\t\t}).then((response) => {\n let contractStatus = response.data.data.contractStatus;\n\n if (contractStatus.billingContractHistory == null) {\n callbackFnFailure(null, \"Mastertag does not have a billable customer!\")\n } else {\n dispatch({ type: \"APPEND_TO_SELECTED_RENEWAL_TOOL_LIST\", payload: { contract: contractStatus } });\n }\n\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error)\n }\n errorResponse(null, error);\n });\n\t};\n}\n\n\nexport function removeFromContractsList(\n mastertag: string\n) {\n\treturn (dispatch: any) => {\n // console.log('mastertag', mastertag)\n\t\tdispatch({ type: \"REMOVE_FROM_SELECTED_CONTRACTS_LIST\", payload: { mastertag: mastertag } });\n\t};\n}\n\n\nexport function removeFromRenewalsToolList(\n mastertag: string\n) {\n\treturn (dispatch: any) => {\n // console.log('mastertag', mastertag)\n\t\tdispatch({ type: \"REMOVE_FROM_SELECTED_RENEWALS_TOOL_LIST\", payload: { mastertag: mastertag } });\n\t};\n}\n\n\nexport function modifyContract(\n selectedContractsToModify: any,\n callbackFnSuccess?: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_CONTRACT_SUBMITTING\", payload: { state: true } });\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/modify_contracts\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n params: {\n contracts: encodeURIComponent(JSON.stringify(selectedContractsToModify))\n\t\t\t},\n\t\t}).then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data);\n }\n\t\t\tdispatch({ type: \"SET_CONTRACT_MODIFIED_SUCCESSFULLY\" });\n\t\t}).catch(function (error) {\n dispatch({ type: \"SET_CONTRACT_SUBMITTING\", payload: { state: false } });\n console.log('error', error)\n errorResponse(null, error);\n });\n\t};\n}\n\n\nexport function submitNewRenewal(\n newRenewals: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\n let PTSOrderFormModel = {\n orderNumber: newRenewals[0].orderNumber,\n customerNumber: newRenewals[0].customerNumber,\n customerPO: newRenewals[0].customerPO,\n billToName: newRenewals[0].billToName,\n partNumber: newRenewals[0].partNumber\n }\n\n // console.log(\"PTSOrderFormModel\")\n // console.log(PTSOrderFormModel)\n\n return (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/api/pts/service/mastertag/\" + newRenewals[0].mastertag,\n PTSOrderFormModel,\n {\n responseType: \"json\", \n headers: {},\n params: {\n version: 1,\n addLog: 'true'\n },\n }\n ).then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n // dispatch({ type: \"SET_CONTRACT_MODIFIED_SUCCESSFULLY\" });\n }).catch(function (error) {\n console.log(error.response)\n if (callbackFnFailure != null) {\n if (error.response.data?.errors?.length > 0) {\n callbackFnFailure(error.response.data.errors[0].message);\n } else {\n callbackFnFailure(\"Error While Processing Your Request. Code: \" + error.response.status);\n }\n }\n });\n };\n \n}\n\n\nexport function getBillableCustomerList() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_billable_customer\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\tbillableOnly: true,\n\t\t\t},\n }).then((response) => {\n // console.log(response.data.data.billableCustomers)\n\t\t\tdispatch({ type: \"SET_BILLABLE_CUSTOMER\", payload: { billableCustomers: response.data.data.billableCustomers } });\n\t\t}).catch(function (error) {\n errorResponse(null, error);\n });\n\t};\n}\n\nexport function getServicePlansList() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_service_plans\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {}\n }).then((response) => {\n // console.log(response.data.data.servicePlansList)\n\t\t\tdispatch({ type: \"SET_SERVICE_PLANS_LIST\", payload: { servicePlansList: response.data.data.servicePlansList } });\n\t\t}).catch(function (error) {\n errorResponse(null, error);\n });\n\t};\n}\n\n\nexport function getCustomerBucketDetails(\n organizationId: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_customer_bucket_details\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\torgId: organizationId,\n\t\t\t},\n }).then((response) => {\n // console.log(response.data.data.customerBucketDetails)\n\t\t\tdispatch({ type: \"GET_CUSTOMER_BUCKET_DETAILS\", payload: { customerBucketDetails: response.data.data.customerBucketDetails } });\n\t\t}).catch(function (error) {\n console.log(error)\n });\n\t};\n}\n\n\nexport function getOrgServicePlanBucketByOrdId(\n organizationId: any,\n servicePlansList: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return (dispatch: any) => {\n \n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_customer_bucket_details\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\torgId: organizationId,\n\t\t\t},\n }).then((response) => {\n \n const servicePlanTmp = JSON.parse(JSON.stringify(servicePlansList))\n const servicePlanBalance = servicePlanTmp?.map((servicePlan: any) => {\n let total_available_quantity = 0\n let partNumberBucketEntries: any = []\n response.data.data.customerBucketDetails?.map((bucketEntry:any) => {\n if (bucketEntry.partNumber == servicePlan.partNumber) {\n total_available_quantity = total_available_quantity + parseInt(bucketEntry.availableQuantity)\n partNumberBucketEntries.push(bucketEntry)\n }\n })\n\n servicePlan['total_available_quantity'] = total_available_quantity\n servicePlan['partNumberBucketEntries'] = partNumberBucketEntries\n\n return servicePlan\n })\n\n callbackFnSuccess(servicePlanBalance)\n \n \n\t\t}).catch(function (error) {\n console.log(error)\n callbackFnFailure(\"Error while getting Org's service plans\")\n\n });\n\n\t};\n}\n\n\nexport function addServicePlanToBucket(\n formValues: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\treturn (dispatch: any) => {\n\n console.log(formValues)\n\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/add_service_plan_to_bucket\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n ...formValues,\n Quantity: Math.floor(formValues['Quantity'])\n\t\t\t},\n }).then((response) => {\n console.log(response.data)\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.results, formValues['orgId']);\n }\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure('Error While Adding to Bucket!', error?.response?.data?.errors[0]?.message)\n }\n });\n\t};\n}\n\n\nexport function returnServicePlanToTopParentCustomerOrg(\n formValues: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\treturn (dispatch: any) => {\n\n // console.log(\"returnServicePlanToTopParentCustomerOrg\")\n // console.log(formValues)\n\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/return_service_plan_to_issuing_bucket\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n ...formValues,\n\t\t\t},\n }).then((response) => {\n console.log('return_service_plan_to_issuing_bucket returned data')\n console.log(response.data.data)\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.results, formValues['orgId']);\n }\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure('Error While Adding to Bucket!', error?.response?.data?.errors[0]?.message)\n }\n });\n \n\t};\n}\n\n\nexport function transferServicePlanToOrg(\n formValues: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\treturn (dispatch: any) => {\n\n // console.log(\"transferServicePlanToOrg\")\n // console.log(formValues)\n\n if (!Number.isInteger(formValues.partNumberId)) {\n if (formValues.partNumberId.includes('-')) {\n formValues.partNumberId = ''\n }\n }\n\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/transfer_service_plan_to_org\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n ...formValues,\n\t\t\t},\n }).then((response) => {\n // console.log('assign_service_plan_to_gateway')\n // console.log(response.data.data)\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data, response.data.data.results);\n }\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure('Error While Assigning Service Plan!', error?.response?.data?.errors[0]?.message)\n }\n });\n \n\t};\n}\n\n\nexport function assignServicePlanToGateway(\n formValues: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\treturn (dispatch: any) => {\n\n console.log(formValues)\n\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/assign_service_plan_to_gateway\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n ...formValues,\n\t\t\t},\n }).then((response) => {\n console.log('assign_service_plan_to_gateway')\n console.log(response.data.data)\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data, response.data.data.results);\n }\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure('Error While Assigning Service Plan!', error?.response?.data?.errors[0]?.message)\n }\n });\n \n\t};\n}\n\nexport function getGatewayContractsDetails(\n gatewayId: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n) {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_contract_details\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n gatewayId: gatewayId\n\t\t\t},\n\t\t}).then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.contractStatus)\n }\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error)\n }\n errorResponse(null, error);\n });\n\t};\n}\nexport function sendEmailNotifications() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/send_test_email\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t}).then((response) => {\n console.log(response.data)\n\t\t}).catch(function (error) {\n console.log(error.response)\n });\n\t};\n}","import React, { useEffect, useState } from \"react\";\nimport { Modal, Table, Checkbox, Space, Tooltip, Input, Select, Col, Row, Button, message, Divider, Popover, Form } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { PhoneOutlined, MailOutlined, FileTextOutlined, InfoCircleOutlined } from \"@ant-design/icons\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport * as contractActions from \"../../Admin/Contracts/actions\";\nimport moment from \"moment\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport \"../orgs.css\";\n\nconst { Option } = Select;\n\ninterface Prop {\n getCustomerBucketDetails: Function, \n getOrgServicePlanBucketByOrdId: Function, \n getServicePlansList: Function, \n transferServicePlanToOrg: Function, \n returnServicePlanToTopParentCustomerOrg: Function, \n context: any,\n assetsList: any,\n servicePlansList: any,\n customerBucketDetails: any,\n currentOrgDetails: any,\n getServicePlansComparisionSheet:any\n}\n\n\nconst OrgContractsDetails: React.FC<Prop> = (props) => {\n\n const formRef = React.createRef<FormInstance>();\n const [showOrgZeros, setShowOrgZeros] = useState(false)\n const [POQuickMode, setPOQuickMode] = useState(false)\n const [showZeros, setShowZeros] = useState(false)\n const [contractsHistoryLoading, setContractsHistoryLoading] = useState(false)\n const [isModalVisible, setIsModalVisible] = useState(false)\n const [modalMessage, setModalMessage] = useState('')\n const [currentOrgBucketDetails, setCurrentOrgBucketDetails] = useState([])\n\n const [GatewayContractsDetails, setGatewayContractsDetails] = useState<any>({billingContractHistory: [], renewalContractHistory: []})\n \n useEffect(() => {\n props.getServicePlansList()\n props.getServicePlansComparisionSheet();\n switchContractsHistoryLoading(true)\n }, [props.assetsList.assetMaint.record.orgId]);\n\n\n useEffect(() => {\n if (props.servicePlansList.length !== 0) {\n props.getCustomerBucketDetails(props.context.appContext.orgId)\n setCurrentOrgBucketDetails(props.getOrgServicePlanBucketByOrdId(props.currentOrgDetails.orgId, props.servicePlansList, orgContractsDetailsSuccess, orgContractsDetailsError))\n }\n }, [props.servicePlansList]);\n\n \n const orgContractsDetailsSuccess = (orgContractsDetailsSuccess: any) => {\n setCurrentOrgBucketDetails(orgContractsDetailsSuccess);\n };\n const orgContractsDetailsError = (errorMessage: string) => {\n message.error(errorMessage)\n };\n\n\n const showModal = () => {\n setIsModalVisible(true);\n };\n \n const handleOk = () => {\n\n setIsModalVisible(false);\n\n formRef.current?.setFieldsValue({\n userConfirmed: true,\n })\n\n props.transferServicePlanToOrg(formRef.current?.getFieldsValue(), servicePlanAssignedSuccess, servicePlanAssignedError)\n\n };\n \n const handleCancel = () => {\n setIsModalVisible(false);\n };\n\n const toggleOrgZeros = () => {\n setShowOrgZeros(!showOrgZeros)\n }\n\n const isUUID = (str:any) => {\n const regexExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n return regexExp.test(str);\n }\n\n const getAvailableQuantityByBucketID = (data:any, bucketId:any) => {\n for (let item of data) {\n if (item.partNumberBucketEntries) {\n for (let entry of item.partNumberBucketEntries) {\n if (entry.bucketId === bucketId) {\n return entry.availableQuantity;\n }\n }\n }\n }\n return null;\n }\n \n\n\n const updateFormField = (value:any, fieldName:string) => {\n formRef.current?.setFieldsValue({\n [fieldName]: value\n });\n\n // props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].availableQuantity\n if (isUUID(value)) {\n formRef.current?.setFieldsValue({\n 'transferredQuantity': getAvailableQuantityByBucketID(props.customerBucketDetails, value)\n });\n }\n \n }\n\n\n const withBetweenPOandQuickMode = () => {\n resetFormErrors(null, formRef.current);\n formRef.current?.resetFields();\n setPOQuickMode(!POQuickMode)\n }\n\n const toggleZeros = () => {\n setShowZeros(!showZeros)\n }\n\n const switchContractsHistoryLoading = (status: boolean) => {\n setContractsHistoryLoading(status)\n }\n\n const onGetContractDetailsSuccess = (contractsDetails: any) => {\n if(contractsDetails){\n setGatewayContractsDetails({\n billingContractHistory: contractsDetails.billingContractHistory ? JSON.parse(contractsDetails.billingContractHistory) : [], \n renewalContractHistory: contractsDetails.renewalContractHistory ? JSON.parse(contractsDetails.renewalContractHistory) : []\n })\n }\n\n switchContractsHistoryLoading(false)\n }\n const onGetContractDetailsFailure = (errorMessage: any) => {\n // console.log('errorMessage')\n // console.log(errorMessage)\n }\n\n\n const returnAvailableServicePlans = (ReturnServicePlanDetails: any) => {\n // console.log('ReturnServicePlanDetails')\n // console.log(ReturnServicePlanDetails)\n props.returnServicePlanToTopParentCustomerOrg(ReturnServicePlanDetails, returnSuccess, returnFailure)\n }\n\n const returnSuccess = (successMessage: any) => {\n message.success(successMessage)\n props.getCustomerBucketDetails(props.context.appContext.orgId)\n setCurrentOrgBucketDetails(props.getOrgServicePlanBucketByOrdId(props.currentOrgDetails.orgId, props.servicePlansList, orgContractsDetailsSuccess, orgContractsDetailsError))\n }\n const returnFailure = (defaultMessage: any, ServerMessage: any) => {\n if(ServerMessage?.includes('There is an active contract expiring on') || ServerMessage?.includes('There is a pending service plan')){\n setModalMessage(ServerMessage)\n showModal()\n } else {\n message.error(ServerMessage ? ServerMessage : defaultMessage, 7);\n }\n }\n\n const onFinishSubmitTransfer = (values: any) => {\n resetFormErrors(null, formRef.current); \n let availableQty:number = 0;\n \n\n // console.log('onFinishSubmitTransfer');\n // console.log(props.customerBucketDetails)\n // console.log(formRef.current?.getFieldsValue())\n\n if (POQuickMode) {\n \n if (props.customerBucketDetails) {\n Object.keys(props.customerBucketDetails)?.map((itemKey: any) => {\n if (props.customerBucketDetails[itemKey]?.servicePlanId === formRef.current?.getFieldValue('partNumberId')) {\n availableQty = props.customerBucketDetails[itemKey]?.total_available_quantity\n }\n })\n }\n \n if (formRef.current?.getFieldValue('transferredQuantity') > availableQty) {\n message.warning(\"Transferred quantity cannot be more than available quantity\")\n return\n }\n \n formRef.current?.setFieldsValue({\n toOrgId: props.currentOrgDetails.orgId,\n fromOrgId: props.context.appContext.orgId,\n bucketId: \"\",\n userConfirmed: false,\n })\n\n if (formRef.current?.getFieldValue('transferredQuantity') === '' ||\n formRef.current?.getFieldValue('toOrgId') === '' ||\n formRef.current?.getFieldValue('fromOrgId') === '' ||\n formRef.current?.getFieldValue('partNumberId') === ''\n ) {\n message.error(\"Unable to assign service plan please contact system administrator\", 7)\n } else {\n // console.log(\"formRef.current?.getFieldsValue()\")\n // console.log(formRef.current?.getFieldsValue())\n\n props.transferServicePlanToOrg(formRef.current?.getFieldsValue(), servicePlanAssignedSuccess, servicePlanAssignedError)\n }\n \n } else {\n\n let bucketId:string = '';\n bucketId = formRef.current?.getFieldValue('partNumberId')\n\n Object.keys(props.customerBucketDetails)?.map((itemKey: any) => {\n Object.keys(props.customerBucketDetails[itemKey]?.partNumberBucketEntries)?.map((POEntry: any) => {\n if (props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].bucketId === bucketId) {\n availableQty = parseInt(props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].availableQuantity)\n }\n })\n })\n\n // console.log(bucketId)\n // console.log(availableQty)\n // console.log(formRef.current?.getFieldValue('transferredQuantity'))\n if (formRef.current?.getFieldValue('transferredQuantity') > availableQty) {\n message.warning(\"Transferred quantity cannot be more than available quantity\")\n return\n }\n\n formRef.current?.setFieldsValue({\n toOrgId: props.currentOrgDetails.orgId,\n fromOrgId: props.context.appContext.orgId,\n bucketId: bucketId,\n userConfirmed: false,\n })\n\n if( formRef.current?.getFieldValue('transferredQuantity') === '' ||\n formRef.current?.getFieldValue('toOrgId') === '' ||\n formRef.current?.getFieldValue('fromOrgId') === '' ||\n formRef.current?.getFieldValue('bucketId') === ''\n ){\n message.error(\"Unable to assign service plan please contact system administrator\", 7)\n } else {\n props.transferServicePlanToOrg(formRef.current?.getFieldsValue(), servicePlanAssignedSuccess, servicePlanAssignedError)\n }\n \n\n }\n }\n\n const servicePlanAssignedSuccess = (data: any, resultMessage: any) => {\n \n message.success(resultMessage, 7);\n setContractsHistoryLoading(true)\n props.getCustomerBucketDetails(props.context.appContext.orgId)\n setCurrentOrgBucketDetails(props.getOrgServicePlanBucketByOrdId(props.currentOrgDetails.orgId, props.servicePlansList, orgContractsDetailsSuccess, orgContractsDetailsError))\n \n }\n\n const servicePlanAssignedError = (defaultMessage: any, ServerMessage: any) => {\n if(ServerMessage?.includes('There is an active contract expiring on') || ServerMessage?.includes('There is a pending service plan')){\n setModalMessage(ServerMessage)\n showModal()\n } else {\n message.error(ServerMessage ? ServerMessage : defaultMessage, 7);\n }\n }\n\n\n const customerBucketTableColumn = [\n {\n title: 'Service Plan Description',\n dataIndex: 'packageName',\n render: (text: string) => {\n text = text.replace(/\\s*\\(.*?\\)$/, '');\n if (/Local Plan/gi.test(text)) \n { \n text = 'Local Plan (WiFi Only)'; \n }\n \n return text;\n },\n },\n {\n title: 'Service Plan Part Number',\n dataIndex: 'partNumber',\n },\n {\n title: 'Available Quantity',\n dataIndex: 'total_available_quantity',\n render: (text: string, record: any) => {\n const content = (\n <table className=\"styled-table\" style={{overflow:'auto',height:'300px',display: 'block'}}>\n <thead style={{position:'sticky',top: 0}}>\n <tr>\n <th style={{whiteSpace: 'nowrap' }}>Created At</th>\n <th style={{whiteSpace: 'nowrap' }}>PO Number</th>\n <th style={{whiteSpace: 'nowrap' }}>SO Number</th>\n <th>Purchased Quantity</th>\n <th>Used (Assigned) Quantity</th>\n <th>Available Quantity</th>\n </tr>\n </thead>\n <tbody>\n { record.partNumberBucketEntries?.map((bucketEntry:any) => \n <tr key={bucketEntry.bucketId}>\n <td style={{whiteSpace: 'nowrap' }}>{ moment(bucketEntry.createdAt).format('MM/DD/YYYY HH:mm:ss') }</td>\n <td style={{whiteSpace: 'nowrap' }}>{bucketEntry.poNumber}</td>\n <td style={{whiteSpace: 'nowrap' }}>{bucketEntry.soNumber}</td>\n <td>{bucketEntry.purchasedQuantity}</td>\n <td>{bucketEntry.purchasedQuantity - bucketEntry.availableQuantity}</td>\n <td>{bucketEntry.availableQuantity}</td>\n </tr>\n )}\n </tbody>\n\n </table>\n );\n\n if(record.total_available_quantity > 0) {\n return (\n <Popover placement=\"topLeft\" key={record.partNumber} content={content} title=\"PO History\">\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{record.total_available_quantity}</span>\n </Popover >\n )\n } else {\n return (\n <span style={{ cursor: \"pointer\" }}>{record.total_available_quantity}</span>\n )\n }\n\n }\n },\n ];\n\n\n const orgBucketTableColumn = [\n {\n title: 'Service Plan Description',\n dataIndex: 'packageName',\n render: (text: string) => {\n text = text.replace(/\\s*\\(.*?\\)$/, '');\n if (/Local Plan/gi.test(text)) \n { \n text = 'Local Plan (WiFi Only)'; \n }\n \n return text;\n },\n },\n {\n title: 'Service Plan Part Number',\n dataIndex: 'partNumber',\n },\n {\n title: 'Available Quantity',\n dataIndex: 'total_available_quantity',\n render: (text: string, record: any) => {\n const content = (\n <table className=\"styled-table\" style={{width: '550px'}}>\n <thead>\n <tr>\n <th style={{whiteSpace: 'nowrap' }}>Transfer Date</th>\n <th>Transferred From (Org)</th>\n <th>Transferred In Quantity</th>\n {/* <th>Transferred To (Org)</th> */}\n <th>Returned Quantity</th>\n <th>Used (Assigned) Quantity</th>\n <th>Available Quantity</th>\n {\n props.currentOrgDetails.orgId != props.context.user.homeOrg.orgId && props.context.user.contextUserOrgIsBillableCustomer &&\n <th>Action</th>\n }\n </tr>\n </thead>\n <tbody>\n { record.partNumberBucketEntries?.map((bucketEntry:any) => \n <tr key={bucketEntry.bucketId}>\n <td style={{whiteSpace: 'nowrap' }}>{ moment(bucketEntry.createdAt).format('MM/DD/YYYY HH:mm:ss A') }</td>\n <td style={{textAlign: 'center', whiteSpace: 'nowrap'}}>{bucketEntry.transferredInFromOrgName}</td>\n <td style={{backgroundColor: 'rgba(3, 190, 252, 0.1)', textAlign: 'center'}}>{bucketEntry.transferredInQuantity}</td>\n {/* <td style={{backgroundColor: 'rgba(150, 32, 107, 0.2)', textAlign: 'center', whiteSpace: 'nowrap'}}>{bucketEntry.transferredOutToOrgName ? bucketEntry.transferredOutToOrgName : \"N/A\"}</td> */}\n <td style={{backgroundColor: 'rgba(150, 32, 107, 0.1)', textAlign: 'center'}}>{bucketEntry.transferredOutQuantity ? bucketEntry.transferredOutQuantity : \"0\"}</td>\n <td style={{textAlign: 'center'}}>{bucketEntry.transferredInQuantity - bucketEntry.availableQuantity - bucketEntry.transferredOutQuantity}</td>\n <td style={{backgroundColor: 'rgba(11, 156, 110, 0.1)', textAlign: 'center' }}>{bucketEntry.availableQuantity }</td>\n {\n props.currentOrgDetails.orgId !== props.context.user.homeOrg.orgId && props.context.user.contextUserOrgIsBillableCustomer && parseInt(bucketEntry.availableQuantity) !== 0 &&\n <td style={{textAlign: 'center' }}>\n <Button onClick={() => returnAvailableServicePlans(bucketEntry)} size='small' type=\"primary\">\n Return { bucketEntry.availableQuantity } Service Plan(s)\n </Button>\n </td>\n }\n \n </tr>\n )}\n </tbody>\n\n </table>\n );\n\n if(record.total_available_quantity > 0) {\n return (\n <Popover placement=\"topLeft\" key={record.partNumber} content={content} title=\"Transfer History\">\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{record.total_available_quantity}</span>\n </Popover >\n )\n } else {\n return (\n <span style={{ cursor: \"pointer\" }}>{record.total_available_quantity}</span>\n )\n }\n\n }\n },\n ];\n \n return ( \n\n <>\n\n <Modal title=\"Entry Warning\" visible={isModalVisible} okText=\"Yes, Add\" cancelText=\"No\" okType=\"danger\" onOk={handleOk} onCancel={handleCancel}>\n <span>{ modalMessage }</span><br />\n <span>Are you sure you still want to add this service plan?</span> \n </Modal>\n\n <Form\n id=\"transferServicePlanForm\"\n ref={formRef}\n layout=\"vertical\"\n onFinish={onFinishSubmitTransfer}\n > \n <Row justify=\"center\" gutter={4}>\n\n <Form.Item name=\"toOrgId\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"fromOrgId\" >\n <Input value={props.context.appContext.orgId} type='hidden' />\n </Form.Item>\n <Form.Item name=\"bucketId\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"userConfirmed\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n\n {\n props.currentOrgDetails.orgId !== props.context.appContext.orgId && props.context.user.contextUserOrgIsBillableCustomer && props.context.appContext.orgId !== 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n <>\n <Col style={{ marginTop: '10px' }} xs={16} sm={16} md={16} lg={16} xl={16}>\n <Form.Item\n label=\"\"\n name=\"partNumberId\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n\n <Row style={{width: '%100', marginBottom: '7px'}} justify=\"space-between\">\n <Col span={12}>\n <span style={{color: 'red'}}> * </span>\n <span>Select Service Plan To Transfer</span>\n </Col>\n </Row>\n \n <Select\n placeholder=\"Select Service Plan\"\n showSearch\n style={{ width: '100%' }}\n optionFilterProp=\"children\"\n onChange={(value, e) => updateFormField(value, 'partNumberId')}\n filterOption={(input, option) => {\n return option?.children[0]?.props?.children[0]?.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n >\n {\n props.customerBucketDetails != null &&\n POQuickMode ?\n Object.keys(props.customerBucketDetails)?.map((itemKey:any) => (\n (props.customerBucketDetails[itemKey]?.total_available_quantity > 0) &&\n <Option key={props.customerBucketDetails[itemKey]?.servicePlanId} value={props.customerBucketDetails[itemKey]?.servicePlanId}>\n <span>{props.customerBucketDetails[itemKey]?.packageName} </span>\n <span style={{ float: 'right' }}>Available Quantity: {props.customerBucketDetails[itemKey]?.total_available_quantity}</span> \n </Option>\n \n ))\n :\n Object.keys(props.customerBucketDetails)?.map((itemKey: any) => (\n Object.keys(props.customerBucketDetails[itemKey]?.partNumberBucketEntries)?.map((POEntry:any) => (\n (props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].availableQuantity > 0) &&\n <Option key={props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].bucketId} value={props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].bucketId.toString()}>\n <span>{props.customerBucketDetails[itemKey]?.packageName}, PO# {props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].poNumber}, Available Qty: { props.customerBucketDetails[itemKey]?.partNumberBucketEntries[POEntry].availableQuantity } </span>\n </Option>\n \n ))\n ))\n \n }\n </Select>\n \n \n <Row style={{width: '%100'}}>\n <Col style={{ textAlign: 'right' }} span={24}>\n <Tooltip placement=\"top\" title={POQuickMode ? \"Purchase Order Transfer Mode, in this mode you can transfer service plans from specific PO#.\" : \"Quick Transfer Mode, in this mode the transferred service plan(s) will be automatically selected from the oldest purchase order record.\"}>\n <Button size='small' type=\"link\" onClick={() => withBetweenPOandQuickMode()}>\n <span>{POQuickMode ? 'Switch to PO# Mode' : 'Switch back to Quick Mode'}\n <InfoCircleOutlined style={{ color: 'orange', cursor: 'pointer', marginLeft: '3px' }} />\n </span>\n </Button>\n </Tooltip>\n </Col>\n </Row>\n \n </Form.Item>\n\n </Col>\n\n <Col style={{ marginTop: '10px' }} xs={8} sm={8} md={8} lg={8} xl={8}>\n <Form.Item \n label=\"Transfer Quantity\"\n name=\"transferredQuantity\"\n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n { validator: (_, value) => {\n if (!Number.isInteger(Number(value))) {\n return Promise.reject('Whole Numbers Only'); \n } \n return Promise.resolve(); \n \n }}\n ]}\n >\n <Input\n placeholder=\"Enter Quantity\"\n style={{ width: '100%' }}\n />\n </Form.Item>\n </Col>\n \n \n\n <Divider></Divider>\n </>\n }\n\n {\n props.context.appContext.orgId === 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' ? \n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <div style={{ width: '99%', border: \"1px #e0e0e0 solid\", margin: '0 auto', padding: \"4px\" }}>\n <h3>\n <span>Available Service Plans in ({props.currentOrgDetails.name})</span>\n {/* Commenting this below checkbox for OPS-6415 */}\n {/* <Checkbox \n onClick={toggleZeros}\n defaultChecked={showZeros}\n style={{ float: 'right' }}\n >\n <span style={{paddingLeft: \"2px\"}}>Show Zero Quantities</span>\n </Checkbox> */}\n </h3>\n <Table\n pagination={false}\n columns={currentOrgBucketDetails?.some((record: any) => \n record.partNumberBucketEntries?.some((entry: any) => \n entry.transferredInFromOrgId != null\n )\n ) ? orgBucketTableColumn : customerBucketTableColumn}\n dataSource={!showOrgZeros ? currentOrgBucketDetails?.filter((details: any) => details['total_available_quantity'] > 0) : currentOrgBucketDetails}\n rowKey={(record) => record.partNumber}\n size=\"small\"\n locale={{ emptyText: 'No Service Plans' }}\n />\n </div>\n {props.assetsList.assetMaint.tutorials.tutorialsList.map((tutorial: any) => \n (tutorial.category === \"Userguide\" && tutorial.id === 20 &&\n <div><a href={tutorial.link} target=\"_blank\">Check Here</a><span> to know about our Service Plans</span> </div>\n ))}\n </Col>\n :\n props.currentOrgDetails.orgId !== props.context.appContext.orgId && props.context.user.contextUserOrgIsBillableCustomer ?\n <>\n {\n props.customerBucketDetails?.length > 0 &&\n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <div style={{ width: '99%', border: \"1px #e0e0e0 solid\", margin: '0 auto', padding: \"4px\" }}>\n <h3>\n <span>Available Service Plans in ({props.currentOrgDetails.name})</span>\n {/* Commenting this below checkbox for OPS-6415 */}\n {/* <Checkbox\n onClick={toggleOrgZeros}\n defaultChecked={showOrgZeros}\n style={{ float: 'right' }}\n >\n <span style={{ paddingLeft: \"2px\" }}>Show Zero Quantities</span>\n </Checkbox> */}\n </h3>\n <Table\n pagination={false}\n columns={orgBucketTableColumn}\n dataSource={!showOrgZeros ? currentOrgBucketDetails?.filter((details: any) => details['total_available_quantity'] > 0) : currentOrgBucketDetails}\n rowKey={(record) => record.partNumber}\n size=\"small\"\n locale={{ emptyText: 'No Service Plans' }}\n />\n </div>\n {props.assetsList.assetMaint.tutorials.tutorialsList.map((tutorial: any) => \n (tutorial.category === \"Userguide\" && tutorial.id === 20 &&\n <div><a href={tutorial.link} target=\"_blank\">Check Here</a><span> to know about our Service Plans</span> </div>\n ))}\n </Col>\n }\n\n {\n props.customerBucketDetails?.length > 0 && props.context.user.contextUserOrgIsBillableCustomer && (props.currentOrgDetails.orgId !== props.context.user.homeOrg.orgId) &&\n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <div style={{ width: '99%', border: \"1px #e0e0e0 solid\", margin: '0 auto', padding: \"4px\" }}>\n <h3>\n <span>Available Service Plans in ({props.context.appContext.mode !== 'support' ? props.context.user.homeOrg.name : \"Support Mode Org\" })</span>\n {/* Commenting this below checkbox for OPS-6415 */}\n {/* <Checkbox \n onClick={toggleZeros}\n defaultChecked={showZeros}\n style={{ float: 'right' }}\n >\n <span style={{paddingLeft: \"2px\"}}>Show Zero Quantities</span>\n </Checkbox> */}\n </h3>\n <Table\n pagination={false}\n columns={customerBucketTableColumn}\n dataSource={!showZeros ? props.customerBucketDetails?.filter((details: any) => details['total_available_quantity'] > 0) : props.customerBucketDetails}\n rowKey={(record) => record.partNumber}\n size=\"small\"\n />\n </div>\n {props.assetsList.assetMaint.tutorials.tutorialsList.map((tutorial: any) => \n (tutorial.category === \"Userguide\" && tutorial.id === 20 &&\n <div>\n <a href={tutorial.link} target=\"_blank\">Check Here</a><span> to know about our Service Plans</span> \n </div>\n ))}\n </Col>\n }\n </>\n :\n props.customerBucketDetails?.length > 0 &&\n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <div style={{ width: '99%', border: \"1px #e0e0e0 solid\", margin: '0 auto', padding: \"4px\" }}>\n <h3>\n <span>Available Service Plans in ({props.currentOrgDetails.orgId !== props.context.appContext.orgId ? props.context.user.homeOrg.name : props.currentOrgDetails.name})</span>\n {/* Commenting this below checkbox for OPS-6415 */}\n {/* <Checkbox \n onClick={toggleZeros}\n defaultChecked={showZeros}\n style={{ float: 'right' }}\n >\n <span style={{paddingLeft: \"2px\"}}>Show Zero Quantities</span>\n </Checkbox> */}\n </h3>\n <Table\n pagination={false}\n columns={(props.context.user.contextUserOrgIsBillableCustomer && props.currentOrgDetails.orgId === props.context.appContext.orgId) ? customerBucketTableColumn : orgBucketTableColumn}\n dataSource={!showOrgZeros ? currentOrgBucketDetails?.filter((details: any) => details['total_available_quantity'] > 0) : currentOrgBucketDetails}\n rowKey={(record) => record.partNumber}\n size=\"small\"\n locale={{ emptyText: 'No Service Plans' }}\n />\n </div>\n {props.assetsList.assetMaint.tutorials.tutorialsList.map((tutorial: any) => \n (tutorial.category === \"Userguide\" && tutorial.id === 20 &&\n <div>\n <a href={tutorial.link} target=\"_blank\">Check Here</a><span> to know about our Service Plans</span> \n </div>\n ))}\n </Col>\n \n }\n \n\n </Row>\n\n </Form>\n\n </>\n \n )\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList,\n servicePlansList: state.contractsReducers.contractsState.contracts.servicePlansList,\n customerBucketDetails: state.contractsReducers.contractsState.contracts.customerBucketDetails\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n ...actions,\n ...contractActions\n }\n)(OrgContractsDetails);","import React, { useEffect, useState } from \"react\";\nimport { Modal, Table, Checkbox, Space, Tooltip, Input, InputNumber, Popconfirm,Typography, Select, Col, Row, Button, message, Divider, Popover, Form, Radio } from 'antd';\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport * as contractActions from \"../../Admin/Contracts/actions\";\n\nimport \"../orgs.css\";\nimport { EditOutlined, DeleteOutlined } from \"@ant-design/icons\";\nconst { TextArea } = Input;\n\n\ninterface Prop {\n getCustomerBucketDetails: Function, \n getOrgServicePlanBucketByOrdId: Function, \n getServicePlansList: Function, \n transferServicePlanToOrg: Function,\n returnServicePlanToTopParentCustomerOrg: Function, \n getOrgGlobalNotesList:Function,\n orgGlobalNotesMaint:Function,\n context: any,\n assetsList: any,\n servicePlansList: any,\n customerBucketDetails: any,\n currentOrgDetails: any,\n orgGlobalNotesList: any\n}\ninterface Item {\n id: string;\n orgId: string;\n noteBody: string;\n noteType: string;\n createdAt: string;\n createdBy: string;\n } \n \n \ninterface EditableCellProps extends React.HTMLAttributes<HTMLElement> {\n editing: boolean;\n dataIndex: string;\n title: any;\n inputType: 'number' | 'text';\n record: Item;\n index: string;\n children: React.ReactNode;\n }\n\n const mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList,\n servicePlansList: state.contractsReducers.contractsState.contracts.servicePlansList,\n customerBucketDetails: state.contractsReducers.contractsState.contracts.customerBucketDetails,\n orgGlobalNotesList: state.orgsReducers.orgsState.orgsList.orgMaint.tabs[5].tableData\n };\n};\n\nconst EditableCell: React.FC<EditableCellProps> = ({\n editing,\n dataIndex,\n title,\n inputType,\n record,\n index,\n children,\n ...restProps\n }) => {\n let inputNode = inputType === 'number' ? <TextArea rows={2} /> : <TextArea rows={2} />;\n //let inputNode2 = inputType === 'number' ? <Input /> : <Input />;\n if(dataIndex==='noteBody'){\n inputNode = <TextArea rows={3} /> ;\n }else if(dataIndex==='noteType'){\n inputNode = <Select defaultValue={record.noteType} options={[{ value: 'Internal', label: 'Internal' },{ value: 'External', label: 'External' }]} />;\n } else if(dataIndex==='id'){\n inputNode=<Input value={record.id} disabled={true} hidden={true}/>\n }else if(dataIndex==='orgId'){\n inputNode=<Input value={record.orgId} disabled={true} hidden={true}/>\n }else{\n inputNode=<span/>\n }\n return (\n <td {...restProps}>\n {editing ? (\n <Form.Item\n name={dataIndex}\n style={{ margin: 0 }}\n rules={[\n {\n required: true,\n message: `Please Input ${title}!`,\n },\n ]}\n >\n {inputNode}\n </Form.Item>\n ) : (\n children\n )}\n </td>\n );\n };\n \n const OrgGlobalNotes: React.FC<Prop> = (props) => {\n \n const [form] = Form.useForm();\n useEffect(() => {\n props.getOrgGlobalNotesList(null, null, null,\"both\",props.currentOrgDetails.orgId);\n }, [props.currentOrgDetails.orgId]);\n const [editingKey, setEditingKey] = useState('');\n \n const globalNotesData=props.orgGlobalNotesList;\n const isEditing = (record: Item) => record.id === editingKey;\n \n const edit = (record: Partial<Item> & { id: React.Key }) => {\n form.setFieldsValue({ noteBody: '', noteType: '', address: '', ...record });\n setEditingKey(record.id);\n };\n \n const cancel = () => {\n setEditingKey('');\n };\n const updateNote = async (key: React.Key,orgId:any,mode:any) => {\n try {\n const row = (await form.validateFields()) as Item;\n row.id=key.toString();\n row.orgId=orgId;\n setEditingKey('');\n await props.orgGlobalNotesMaint(null,onUpdateSuccess,onFailure,mode,JSON.stringify(row));\n } catch (errInfo) {\n message.error('Validation Failed:'+ errInfo);\n console.log('Validation Failed:', errInfo);\n }\n };\n \n const onUpdateSuccess = async (record: any,mode:any) => {\n if(mode==='update'){\n message.success(\"Global Note Updated Successfully\");\n }else{\n message.success(\"Global Note Deleted Successfully\");\n }\n }\n const onFailure = (error: any,mode:any) => { \n message.error(error);\n }\n \n const columns = [\n {\n title: 'Id',\n dataIndex: 'id',\n width: -1,\n hidden: true,\n editable: true,\n show:false,\n },\n {\n title: 'orgId',\n dataIndex: 'orgId',\n width: -1,\n hidden: true,\n editable: true,\n show:false,\n },\n {\n title: 'Note Type',\n dataIndex: 'noteType',\n width: '15%',\n editable: true,\n },\n {\n title: 'Note Description',\n dataIndex: 'noteBody',\n width: '70%',\n editable: true,\n },\n {\n title: 'Actions',\n dataIndex: 'operation',\n render: (_: any, record: Item) => {\n const editable = isEditing(record);\n return editable ? (\n <span>\n <Typography.Link onClick={() => updateNote(record.id,record.orgId,'update')} style={{ marginRight: 5 }}>\n <span>Save</span>\n </Typography.Link>\n <a style={{color:'red'}} onClick={cancel}>Cancel</a>\n </span>\n ) : (\n <span>\n <Button style={{marginRight:5}} title=\"Edit Global Note\" data-id=\"global-note-edit-button\" disabled={editingKey !== ''} type=\"default\" icon={<EditOutlined />} onClick={() => edit(record)}/>\n <Popconfirm title=\"Confirm to delete?\" okText=\"Yes\" cancelText=\"No\" onConfirm={() => updateNote(record.id,record.orgId,'delete')}>\n <Button title=\"Delete Global Note\" style={{marginLeft:5}} data-id=\"global-note-delte-button\" type=\"default\" icon={<DeleteOutlined />} />\n </Popconfirm>\n </span>\n );\n },\n },\n ].filter(item => !item.hidden);\n \n const mergedColumns = columns.map(col => {\n if (!col.editable) {\n return col;\n }\n return {\n ...col,\n onCell: (record: Item) => ({\n record,\n inputType: col.dataIndex === 'age' ? 'number' : 'text',\n dataIndex: col.dataIndex,\n title: col.title,\n editing: isEditing(record),\n }),\n };\n });\n \n return (\n <Form form={form} component={false}>\n <Table\n components={{\n body: {\n cell: EditableCell,\n },\n }}\n bordered\n dataSource={globalNotesData}\n columns={mergedColumns}\n rowClassName=\"editable-row\"\n pagination={{\n onChange: cancel,\n }}\n />\n \n </Form>\n );\n };\n \nexport default connect(\n mapStateToProps,\n {\n ...actions,\n ...contractActions\n },\n \n)(OrgGlobalNotes);\n","import React, { useEffect, useState } from \"react\";\nimport { Drawer, Tabs, Button, Space,Input,Radio,message } from \"antd\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport OrgMaintInfo from \"./orgMaintInfo/OrgMaintInfo\";\nimport OrgMaintAdmins from \"./orgMaintAdmins/OrgMaintAdmins\";\nimport OrgMaintGlobalSubscription from \"./orgMaintGlobalSubscription/OrgMaintGlobalSubscription\";\nimport OrgMaintSettings from \"../OrgMaintSettings/OrgMaintSettings\";\nimport OrgContractsDetails from \"./orgContractsDetails/OrgContractsDetails\";\nimport OrgMaintNotes from \"./orgMaintNotes/OrgMaintNotes\";\nconst { TextArea } = Input;\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n orgsListRefreshOnUpdate: Function,\n orgsGet: Function,\n orgMaintClose: Function, \n orgMaintTabChange: Function,\n orgMaintTabsDisabled: Function,\n orgLevelTags:Function,\n orgGlobalNotesMaint:Function,\n getOrgGlobalNotesList:Function,\n context: any,\n orgsList: any,\n iscreate: boolean,\n isread: boolean,\n isupdate: boolean,\n userOrgAccess: any,\n}\n\n \n\n\nclass OrgMaint extends React.Component<Prop, {}> { \n \n componentDidUpdate(prevProps: Prop) {\n if (this.props.orgsList.orgMaint.instance !== prevProps.orgsList.orgMaint.instance) {\n this.props.orgMaintTabsDisabled(this, (this.props.orgsList.orgMaint.record.orgId || \"\") === \"\");\n }\n } \n state = {\n id:'',noteBody: '', noteType:'Internal',orgId:''\n };\n \n onDrawerClose = () => {\n if (this.props.orgsList.refreshOnUpdate) {\n const orgsList = this.props.orgsList;\n this.props.orgsGet(this, null, null, orgsList.mode, orgsList.scope, orgsList.tableConfig.pagination.current, orgsList.searchText, orgsList.orgId); \n }\n this.props.orgMaintClose(this);\n };\n onTabChange = (key:string) => {\n this.props.orgMaintTabChange(this, key);\n }\n onCreateSuccess = async (record: any,mode:any) => {\n message.success(\"Global Note Created Successfully\");\n }\n onFailure = (error: any,mode:any) => { \n message.error(error);\n }\n \n submitAddNote = async () =>{\n if(this.state.noteBody===''){\n message.error(\"Please Enter Global Note Description\");\n }else{\n let noteObj={...this.state}\n noteObj.orgId=this.props.orgsList.orgMaint.record.orgId;\n await this.props.orgGlobalNotesMaint(null,this.onCreateSuccess,this.onFailure,\"create\",JSON.stringify(noteObj));\n this.setState({\n id:null,\n noteBody: ''\n });\n }\n }\n handleNoteChange = (e:any) => {\n this.setState({\n id:null,\n noteBody: e.target.value,\n orgId: this.props.orgsList.orgMaint.record.orgId\n });\n }\n handleNoteTypeChange = (e:any) => {\n this.setState({\n noteType: e.target.value\n });\n }\n \n\n render() {\n //console.log(\"this.props.userOrgAccess\",this.props.userOrgAccess);\n let isUserAdminToOrg = this.props.userOrgAccess ? true : false;\n const { orgMaint } = this.props.orgsList;\n\n return (\n <Drawer\n data-id=\"org-maint-drawer\" \n title={orgMaint.title}\n width={848}\n onClose={this.onDrawerClose}\n visible={orgMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{paddingBottom:5,float:\"right\"}}>\n {\n (orgMaint.activeTab === \"6\" ) &&\n <span>\n <h3 style={{marginLeft:15,}}>Add Global Note here:</h3>\n <TextArea required onChange={this.handleNoteChange} value={this.state.noteBody} rows={3} style={{width:500,marginLeft:15}} />\n </span>\n }\n {\n (orgMaint.activeTab === \"6\" ) &&\n <span>\n <Radio.Group defaultValue={this.state.noteType} style={{marginBottom:10,marginLeft:20}} onChange={this.handleNoteTypeChange} >\n <Radio value={'Internal'}>Internal</Radio>\n <Radio value={'External'}>External</Radio>\n </Radio.Group>\n <Button style={{width:\"100%\"}} data-id=\"orgs-maint-settings-submit-button\" type=\"primary\" onClick={this.submitAddNote} key=\"submit\" htmlType=\"submit\">\n {\"Add New Note\"}\n </Button>\n </span>\n }\n {\n (orgMaint.activeTab === \"1\" ) &&\n <Button data-id=\"orgs-maint-submit-button\" style={{marginTop:30}} type=\"primary\" form=\"orgMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n (orgMaint.activeTab === \"4\" ) &&\n <Button data-id=\"orgs-maint-settings-submit-button\" style={{marginTop:30}} type=\"primary\" form=\"orgMaintSettingsForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n (orgMaint.activeTab === \"5\" ) &&\n <Button data-id=\"orgs-maint-settings-submit-button\" style={{marginTop:30}} type=\"primary\" form=\"transferServicePlanForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n <Button data-id=\"orgs-maint-close-button\" type=\"default\" onClick={this.onDrawerClose} style={{ float: 'right',marginTop:30}}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n </Space>\n }\n >\n <Tabs data-id=\"orgs-maint-tabs\" activeKey={orgMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n <TabPane data-id=\"orgs-maint-info-button\" tab={orgMaint.tabs[0].title} key=\"1\"> \n <OrgMaintInfo />\n </TabPane> \n <TabPane data-id=\"orgs-maint-admins-button\" tab={orgMaint.tabs[2].title} key=\"2\" disabled={orgMaint.tabs[2].disabled}>\n <OrgMaintAdmins iscreate= {this.props.iscreate} isread= {this.props.isread} isupdate= {this.props.isupdate} />\n </TabPane>\n {\n // Should disable only for Parker Org\n (this.props.orgsList.orgMaint.record.orgId !== 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b') &&\n <TabPane data-id=\"orgs-maint-subscription-button\" tab={orgMaint.tabs[3].title} key=\"3\" disabled={orgMaint.tabs[3].disabled}>\n <OrgMaintGlobalSubscription iscreate={this.props.iscreate} isread={this.props.isread} isupdate={this.props.isupdate} />\n </TabPane>\n }\n <TabPane data-id=\"orgs-maint-settings-button\" tab={orgMaint.tabs[1].title} key=\"4\"> \n <OrgMaintSettings />\n </TabPane>\n {\n this.props.context.appContext.mode !== 'support' && ((this.props.orgsList.orgMaint.record.orgId === this.props.context.appContext.orgId && this.props.context.user.contextOrgHasTransferredContracts) || this.props.context.user.contextUserOrgIsBillableCustomer) &&\n <TabPane data-id=\"orgs-maint-contracts-button\" tab={orgMaint.tabs[4].title} key=\"5\"> \n <OrgContractsDetails currentOrgDetails={orgMaint.record} />\n </TabPane>\n }\n {\n isUserAdminToOrg && (orgMaint.title!=='New Organization') &&\n <TabPane data-id=\"orgs-maint-Notes-button\" tab=\"Global Notes\" key=\"6\"> \n <OrgMaintNotes currentOrgDetails={orgMaint.record} />\n </TabPane> \n }\n \n \n </Tabs>\n \n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n orgsList: state.orgsReducers.orgsState.orgsList,\n userOrgAccess: state.userOrgAccessReducer.data.userOrgAccess\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OrgMaint);","import { DeleteOutlined, EditOutlined, EllipsisOutlined, MenuUnfoldOutlined, PlusOutlined, RightOutlined, SubnodeOutlined } from \"@ant-design/icons\";\nimport { Breadcrumb, Button, Col, Input, Popconfirm, Popover, Row, Space, Table, Tag, Tooltip } from \"antd\";\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport React, { Component } from \"react\";\n\nimport { closePopover, getPermissions, loadingIndicatorStart } from \"../../utils/commonHelpers\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport OrgMaint from \"./OrgMaint\";\n\nimport { connect } from \"react-redux\";\nimport * as rootActions from \"../../actions\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport history from '../../utils/history';\nimport * as orgSelectorActions from \"./actions\";\n\nimport \"./orgs.css\";\n\nconst { Search } = Input;\n\ninterface Prop {\n supportModeSet: Function,\n orgsSetPagination: Function,\n orgsListSetSearch: Function,\n orgsListSetDisplay: Function,\n orgsGet: Function,\n orgGet: Function,\n orgMaintOpen: Function,\n orgDelete: Function, \n supportMode: any,\n context: any,\n orgsList: any,\n permissions: any,\n permissionsset: any\n}\n\ninterface State {\n orgTree: any[], \n}\n\nclass Orgs extends Component<Prop, State> {\n\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n state:State = { \n orgTree: []\n };\n\n componentDidMount () {\n const orgsList = this.props.orgsList;\n this.props.orgsSetPagination(this.onPaginationChange);\n this.props.orgsGet(this, null, null, \"all\", this.props.orgsList.scope, 1, orgsList.searchText);\n \n }\n \n onPaginationChange = (page: number) => {\n const orgsList = this.props.orgsList;\n this.props.orgsGet(this, null, null, orgsList.mode, orgsList.scope, page, orgsList.searchText, orgsList.orgId); \n };\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n\n if ( action === \"add\") {\n if (record === null) {\n record={orgIdParent: this.props.orgsList.orgId, orgIdParentName: this.props.orgsList.orgName};\n }\n this.props.orgMaintOpen(this, \"New Organization\", this.drawerWidth, record);\n }\n else if ( action === \"edit\") {\n this.props.orgGet(this, this.onOrgEdit, null, record.orgId); \n }\n else if ( action === \"delete\") {\n this.props.orgDelete(this, this.orgDeleteSuccess, null, record.orgId); \n }\n\n closePopover(); \n }\n \n orgDeleteSuccess = (orgId:string) => {\n this.onPaginationChange(this.props.orgsList.tableConfig.pagination.current);\n }\n\n viewOrgAssets = (orgName: string) => {\n // history.push(\"/assets/\")\n }\n\n onSearch = (searchText: string) => { \n this.setState({ orgTree: [] }); \n this.props.orgsListSetSearch((searchText || \"\"));\n\n const me = this;\n setTimeout(function() {\n me.props.orgsGet(me, null, null, me.props.orgsList.mode, me.props.orgsList.scope, 1, (searchText || \"\"), \"\");\n }, 150); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.orgsListSetSearch((value || \"\"));\n }\n\n onOrgEdit = (record:any) => { \n this.props.orgMaintOpen(this, \"Edit Org :: \" + record.name, this.drawerWidth, record);\n }\n\n supportModeSet = (e: any, orgId:string, orgName: string) => {\n this.props.supportModeSet(this, this.supportModeSetSuccess, orgId, orgName);\n closePopover(); \n }\n\n supportModeSetSuccess = () => {\n loadingIndicatorStart();\n setTimeout(function () {\n window.location.href = \"/map\"; \n }, 500); \n \n // setTimeout(function () {\n // reloadPage();\n // }, 250);\n // }\n }\n\n confirmDeletion = (record:any, deleteDisable:any) => (\n deleteDisable?\n <Popconfirm\n title={\"Are you sure to delete this organization?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Organization\">\n <Button data-id=\"orgs-delete-org-button\" type=\"default\" icon={<DeleteOutlined />}/>\n </Tooltip>\n </Popconfirm>\n :\n <Tooltip title=\"Organization has either suborgs or assigned assets or templates or users - Cannot Delete\">\n <Button data-id=\"orgs-delete-org-button\" disabled={true} type=\"default\" icon={<DeleteOutlined />}/>\n </Tooltip>\n\n );\n \n support = (record:any) => (\n <Tooltip title=\"Support\">\n <Button data-id=\"orgs-support-button\" type=\"default\" icon={<RightOutlined />} onClick={(e) => {this.supportModeSet(e, record.orgId, record.name)}}/> \n </Tooltip>\n );\n\n actions = (record:any, isCreate:any, isRead:any, isUpdate:any, isDelete:any, isSupportMode:any) => ( \n <Popover placement=\"topRight\"\n content={ \n <div className=\"center-div\">\n <Space size=\"large\">\n { \n (isUpdate) && \n <Tooltip title=\"Edit Organization\">\n <Button data-id=\"orgs-edit-org-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.onAction(e, record, \"edit\")}}/> \n </Tooltip>\n }\n {\n (isCreate) && \n <Tooltip title=\"Create Sub-Organization\">\n <Button data-id=\"orgs-add-sub-org-button\" type=\"default\" icon={<SubnodeOutlined />} onClick={(e) => {this.onAction(e, {orgIdParent: record.orgId, orgIdParentName: record.name}, \"add\")}}/> \n </Tooltip>\n }\n {\n // isDelete && \n // record.subOrgCount === 0 && \n // record.userCount === 0 && \n // record.templateCount === 0 && \n this.confirmDeletion(record, (isDelete && record.subOrgCount === 0 && \n record.userCount === 0 && \n record.templateCount === 0 && record.orgAssetsCount === 0))\n }\n {\n (record.subOrgCount > 0 && isRead) && \n <Tooltip title=\"List Sub-Organizations\">\n <Button data-id=\"orgs-list-sub-org-button\" type=\"default\" icon={<MenuUnfoldOutlined />} onClick={(e) => {this.drillIn(e, \"direct-children\", record.orgId, record.name)}}/>\n </Tooltip>\n }\n {\n (isSupportMode) &&\n record.orgId !== this.props.supportMode.orgId && \n this.support(record)\n }\n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n > \n <Button data-id=\"orgs-action-button\" type=\"default\" icon={<EllipsisOutlined />} /> \n </Popover>\n );\n\n drillIn = (e:any, mode:string, orgId:string, orgName:string) => {\n e.preventDefault();\n\n this.props.orgsListSetDisplay(mode, this.props.orgsList.searchText, mode === \"all\" ? \"\" : orgId, mode === \"all\" ? \"\" : orgName);\n\n if (mode === \"all\") {\n this.setState({ orgTree: [] }); \n }\n this.props.orgsGet(this, this.drillInSuccess, null, mode, this.props.orgsList.scope, 1, this.props.orgsList.searchText, orgId);\n };\n \n drillInSuccess = (data:any, mode:string) => {\n if (mode !== \"all\" && data.length > 0) {\n this.setState({ orgTree: data[0].orgTree }); \n }\n }\n\n render() { \n\n const { tableConfig, tableData } = this.props.orgsList; \n const result = getPermissions(this.props.permissions.permissions.org_options); \n \n if (!this.props.context.user.contextUserIsAdmin && !result[1] && !this.props.supportMode.isSupportMode){\n history.push(\"/not-found\") \n }\n let isCreate = result[0];\n let isRead = result[1];\n let isUpdate = result[2];\n let isDelete = result[3];\n\n const supportmode = getPermissions(this.props.permissions.permissions.support_mode);\n let isSupportMode = supportmode[1];\n\n const tableColumns = [\n {\n title: \"Org Name\",\n dataIndex: \"name\",\n render: (name: number, record: any) => (\n <>\n {\n record.subOrgCount > 0 && \n <Tooltip title=\"List Sub-Organizations\">\n <a href=\"# \" onClick={(e) => {this.drillIn(e, \"direct-children\", record.orgId, record.name)}}>\n {name}\n </a>\n </Tooltip>\n }\n {\n record.subOrgCount === 0 &&\n <span>{name}</span>\n }\n </>\n )\n }, \n {\n title: \"Org Address\",\n dataIndex: \"shortAddress\",\n responsive: [\"md\"] as Breakpoint[]\n },\n {\n title: \"Sub-Orgs\",\n dataIndex: \"subOrgCount\",\n key: \"subOrgCount\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n render: (subOrgCount: number, record: any) => (\n <div className=\"notifications-tag\">\n {\n subOrgCount !== 0 && \n <Tag color=\"purple\">{subOrgCount}</Tag>\n }\n </div>\n )\n }, \n {\n title: \"Assets\",\n dataIndex: \"assetsCount\",\n key: \"assetsCount\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n width: 130,\n render: (allAssetsCount: number, record: any) => (\n <div>\n <Tooltip overlayStyle={{ minWidth: '200px' }} title={\n <>\n <h3 style={{color: 'white'}}>Asset Count Details:</h3><hr />\n <table style={{width: '100%'}}>\n <tr>\n <th>This Org's Assets: </th>\n <td>\n <Tag\n color=\"processing\"\n style={{width: '100%', textAlign: \"center\"}}\n onClick={(e) => this.viewOrgAssets(record.name)}\n >\n {record.orgAssetsCount}\n </Tag>\n </td>\n </tr>\n <tr>\n <th>Sub-Orgs' Assets: </th>\n <td>\n <Tag\n color=\"processing\"\n style={{ width: '100%', textAlign: \"center\" }}\n onClick={(e) => this.viewOrgAssets(record.name)}\n >\n {record.allAssetsCount - record.orgAssetsCount}\n </Tag>\n </td>\n </tr>\n <tr>\n <th>Total Org's Assets: </th>\n <td>\n <Tag\n color=\"processing\"\n style={{ width: '100%', textAlign: \"center\" }}\n onClick={(e) => this.viewOrgAssets(record.name)}\n >\n {record.allAssetsCount}\n </Tag>\n </td>\n </tr>\n </table>\n <br />\n\n \n </>\n }>\n <Tag\n color=\"processing\"\n onClick={(e) => this.viewOrgAssets(record.name)}\n >\n {record.allAssetsCount} \n </Tag>\n </Tooltip>\n\n {/* <Row align=\"middle\" justify=\"space-between\">\n <Col span={11}>\n <Tooltip title=\"This Org's Assets\">\n <Tag\n color=\"purple\"\n style={{width: '100%', textAlign: \"center\"}}\n onClick={(e) => this.viewOrgAssets(record.name)}\n >\n {record.orgAssetsCount}\n </Tag>\n </Tooltip>\n </Col>\n <Col span={11}>\n <Tooltip title=\"Sub Org's Assets\">\n <Tag\n color=\"purple\"\n style={{ width: '100%', textAlign: \"center\" }}\n onClick={(e) => this.viewOrgAssets(record.name)}\n >\n {record.allAssetsCount - record.orgAssetsCount}\n </Tag>\n </Tooltip>\n </Col>\n <Col style={{ marginTop: \"3px\" }} span={24}>\n <Tooltip title=\"Total Assets\">\n <Tag\n color=\"processing\"\n style={{ width: '100%', textAlign: \"center\" }}\n onClick={(e) => this.viewOrgAssets(record.name)}\n >\n {record.allAssetsCount}\n </Tag>\n </Tooltip>\n </Col>\n </Row> */}\n \n </div>\n )\n }, \n {\n title: \"Users\",\n dataIndex: \"userCount\",\n key: \"userCount\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n render: (userCount: number, record: any) => (\n <div className=\"notifications-tag\">\n {\n userCount !== 0 && \n <Tag color=\"geekblue\">{userCount}</Tag>\n }\n </div>\n )\n },\n {\n title: \"Templates\",\n dataIndex: \"templateCount\",\n key: \"templateCount\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n render: (templateCount: number, record: any) => (\n <div className=\"notifications-tag\">\n {\n templateCount !== 0 && \n <Tag color=\"geekblue\">{templateCount}</Tag>\n }\n </div>\n )\n },\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n this.actions(record, isCreate, isRead, isUpdate, isDelete, isSupportMode)\n )\n }\n ];\n\n return (\n <div data-id=\"orgs-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={10}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n Organizations\n </div>\n </div>\n </Col>\n <Col xs={24} lg={14} className=\"content-header-controls\">\n <Space size=\"middle\">\n {\n (isRead) &&\n <Search\n data-id=\"orgs-search-field\"\n key=\"search-field\"\n placeholder=\"Search by name, location, phone\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.props.orgsList.searchText}\n /> \n } \n \n {\n (isCreate) && \n <Tooltip title=\"Create New Organization\"> \n <Button data-id=\"orgs-new-org-button\" disabled={!(this.state.orgTree && this.props.orgsList.orgId)} type=\"primary\" icon={<PlusOutlined />} onClick={(e) => this.onAction(e, null, \"add\")}>\n <span>Organization</span>\n </Button>\n </Tooltip>\n } \n </Space>\n </Col>\n </Row>\n \n {\n this.state.orgTree !== undefined &&\n (this.state.orgTree.length || 0) !== 0 && \n <Breadcrumb data-id=\"orgs-org-path-container\" separator=\"/\" style={{ marginTop: 10}}>\n <Breadcrumb.Item data-id=\"orgs-org-path-element\" key=\"breadcrumb-all-orgs\" href=\"# \" onClick={(e) => {this.drillIn(e, \"all\", \"\", \"\")}}>All Orgs</Breadcrumb.Item>\n {\n this.state.orgTree\n .filter((record:any, index:number) => (\n index < this.state.orgTree.length - 1\n ))\n .map((record:any, index:number) => (\n <Breadcrumb.Item key={\"breadcrumb-\" + index} href=\"# \" onClick={(e) => {this.drillIn(e, \"direct-children\", record.orgId, record.name)}}>\n {record.name}\n </Breadcrumb.Item>\n ))\n }\n </Breadcrumb>\n }\n\n <div className=\"mt-15\"> \n <OrgMaint iscreate={isCreate} isread={isRead} isupdate={isUpdate}/> \n {\n (isRead) &&\n <Table \n data-id=\"orgs-data\"\n {...tableConfig}\n rowKey={(record) => record.orgId}\n columns={tableColumns}\n dataSource={tableData}\n />\n }\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n supportMode: state.supportModeReducer,\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n orgsList: state.orgsReducers.orgsState.orgsList,\n permissionsset: state.permissionsReducer.result\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n ...orgSelectorActions \n }\n )(Orgs);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form, Input, Typography, Select, Table, Checkbox, Row, Col } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { getPermissions } from \"../../../utils/commonHelpers\";\nimport { errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\nimport * as actions from \"../actions\";\nimport \"./roleMaintInfo.css\";\n\nconst { Option } = Select;\n\ninterface Prop { \n roleMaint: Function, \n getRolePermissions: Function, \n getOrgRoles: Function,\n context: any,\n roleList: any,\n rolePermissionList: any\n}\n\nclass RoleMaintInfo extends React.Component<Prop, FormState> {\n state: FormState = {};\n\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n this.componentUpdate();\n }\n \n componentDidUpdate(prevProps: Prop, prevState: FormState) { \n if (this.props.roleList.roleMaint.instance !== prevProps.roleList.roleMaint.instance) {\n this.componentUpdate();\n } \n }\n\n componentUpdate() {\n formInit(this); \n \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n\n })\n }\n }\n\n onFinish = () => { \n resetFormErrors(this, this.formRef.current); \n //this.props.roleMaint(this, this.onFinishSuccess, this.onFinishFailure, values);\n };\n onFinishSuccess = () => { \n\n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n\n }\n\n onRoleIdChange = (value: string) => { \n this.props.getRolePermissions(this,null,null,value);\n }\n\n onCheckChange = () => {\n //this.props.orgSelectorListMaint(this, this.onCheckChangeSuccess, this.onCheckChangeFailure, record.orgId, e.target.checked);\n }\n\n render() {\n \n const { roles } = this.props.roleList.roleMaint.orgRoles.data; \n const { permissions } = this.props.rolePermissionList;\n let permissionList = [];\n \n for (let i=0; i<permissions.data.permissions.length; i++){ \n const result = getPermissions(permissions.data.permissions[i].permission_level);\n let permission = { id:permissions.data.permissions[i].permissionId, entityName:permissions.data.permissions[i].entity, create:result[0], read:result[1], update:result[2], delete: result[3]};\n permissionList.push(permission);\n } \n\n const tableColumns = [\n {\n title: \"Entity Name\",\n dataIndex: \"entityName\",\n width: \"50%\",\n },\n {\n title:\"View\", \n dataIndex: \"read\",\n key: \"read\",\n width: \"12%\",\n render: (read: any, record: any) => (\n <>\n <Checkbox \n checked={record.read === true}\n > \n </Checkbox>\n </>\n )\n },\n {\n title:\"Add\", \n dataIndex: \"create\",\n key: \"create\",\n width: \"12%\",\n render: (create: any, record: any) => (\n <>\n <Checkbox \n checked={record.create === true}\n > \n </Checkbox>\n </>\n )\n },\n {\n title:\"Edit\", \n dataIndex: \"update\",\n key: \"update\",\n width: \"12%\",\n render: (update: any, record: any) => (\n <>\n <Checkbox \n checked={record.update === true}\n > \n </Checkbox>\n </>\n )\n },\n {\n title:\"Delete\", \n dataIndex: \"delete\",\n key: \"delete\",\n width: \"12%\",\n render: (update: any, record: any) => (\n <>\n <Checkbox \n checked={record.delete} \n > \n </Checkbox>\n </>\n )\n }\n ];\n\n return (\n <div data-id=\"role-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"role-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"role-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n <Row gutter={8} style={{marginTop: 15}}>\n <Col offset={1} span={23}>\n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"roleMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n >\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item\n name=\"orgHomeRole\"\n label=\"Role\"\n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select \n data-id=\"role-maint-info-home-org-role\" \n defaultValue= {roles[0].roleId} \n onChange={this.onRoleIdChange} \n >\n\n {roles !== null && roles.map((record:any, index:number) => (\n <Option key={record.roleName} value={record.roleId} >\n {record.roleName}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col>\n </Row>\n {/* <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n label=\"Role Name\"\n name=\"orgRole\" \n rules={[{ required: false }]}\n >\n <Input maxLength={25}/>\n </Form.Item>\n </Col> \n <Col span={12}>\n <Form.Item\n label=\"Description\"\n name=\"desc\" \n rules={[{ required: false }]}\n >\n <Input maxLength={100} />\n </Form.Item>\n </Col> \n </Row> */}\n <div className=\"mt-15\"> \n <Table \n data-id=\"role-permissions-data\" \n rowKey={(record) => record.id}\n columns={tableColumns}\n dataSource={permissionList}\n /> \n </div>\n </Form>\n </Col>\n </Row> \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n roleList: state.usersReducers.usersState.roleList,\n rolePermissionList: state.usersReducers.usersState.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RoleMaintInfo);","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Drawer, Tabs, Button, Space } from \"antd\";\nimport * as actions from \"./actions\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport RoleMaintInfo from \"./roleMaintInfo/RoleMaintInfo\";\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n roleMaintClose: Function,\n roleList: any\n rolePermissionList: any\n}\n\nclass RoleMaint extends React.Component<Prop, {}> {\n \n componentDidUpdate(prevProps: Prop) {\n \n if (this.props.roleList.roleMaint.instance !== prevProps.roleList.roleMaint.instance) {\n this.closeCollapsed();\n }\n }\n \n closeCollapsed() { \n let active:any = document.querySelectorAll(\"[data-id=role-maint-drawer] .ant-collapse-item-active\"); \n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i]!.children[0].click(); \n }\n }\n }\n\n onDrawerClose = () => {\n \n // if (this.props.rolePermissionList.refreshOnUpdate) {\n // this.props.getUsers(this, null, null, this.props.roleList.tableConfig.pagination.current, this.props.roleList.searchText, true);\n // }\n this.props.roleMaintClose(this);\n };\n\n render() {\n\n const { roleMaint } = this.props.roleList;\n //const { permissions } = this.props.rolePermissionList;\n return(\n <Drawer\n data-id=\"role-maint-drawer\" \n title={roleMaint.title}\n width={roleMaint.width}\n onClose={this.onDrawerClose}\n visible={roleMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"role-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {/* {\n roleMaint.activeTab === \"1\" &&\n <Button data-id=\"role-maint-submit-button\" type=\"primary\" form=\"roleMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n } */}\n </Space>\n }\n >\n <Tabs data-id=\"role-maint-info-tabs\" activeKey={roleMaint.activeTab} size=\"large\" type=\"card\">\n <TabPane data-id=\"role-maint-info-tab-button\" tab=\"Roles Info\" key=\"1\"> \n <RoleMaintInfo />\n </TabPane>\n </Tabs>\n\n </Drawer>\n );\n }\n\n}\nconst mapStateToProps = (state:any) => {\n return {\n roleList: state.usersReducers.usersState.roleList,\n rolePermissionList: state.usersReducers.usersState.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RoleMaint);","import React, { Component } from \"react\";\nimport { Table, Button,Popover, message, Typography, Popconfirm, Input, Row, Col, Space, Tooltip } from \"antd\";\nimport { PlusOutlined, EllipsisOutlined, UserDeleteOutlined, EditOutlined, DeleteOutlined, UserAddOutlined } from \"@ant-design/icons\";\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport \"./users.css\";\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport { closePopover, getPermissions } from \"../../utils/commonHelpers\";\nimport history from '../../utils/history';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport RoleMaint from './RoleMaint';\nimport UserMaint from './UserMaint';\n//import { getPermissions } from \"../../actions/permissions\";\n\nconst { Search } = Input;\nconst { Text } = Typography;\n\ninterface Prop {\n usersSetPagination: Function,\n usersSetSearch: Function,\n getUsers: Function,\n getUser: Function,\n userStatus: Function,\n userMaintOpen: Function,\n roleMaintOpen: Function, \n getRolePermissions:Function, \n getOrgRoles:Function,\n getOrgUserRoles: Function,\n context: any,\n usersList: any,\n permissions: any,\n roleList: any,\n rolePermissionList: any\n}\n\nclass Users extends Component<Prop, {}> {\n\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n \n componentDidMount () {\n const { appContext } = this.props.context;\n let sortDetails = { sortColumn: 'name', sortDirection: 'ascend' }\n \n // this.props.usersSetPagination(this.onPaginationChange);\n this.props.getUsers(this, null, null, 1, this.props.usersList.searchText, true, sortDetails);\n //this.props.getOrgRoles(this,null,null,appContext.orgId); \n //this.props.getRolePermissions(this,null,null,\"1\");\n \n }\n \n // onPaginationChange = (page: number) => {\n // this.props.getUsers(this, null, null, page, this.props.usersList.searchText, true);\n // };\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n\n if ( action === \"add-user\") {\n this.props.userMaintOpen(this, \"New User\", this.drawerWidth, {},\"NewUser\");\n }\n else if ( action === \"edit-user\") {\n this.props.getUser(this, this.onUserEdit, null, record.userId);\n\n if((this.props.roleList.roleMaint.orgRoles || 0) === 0 && (this.props.context.user.contextUserIsAdmin || false) === true){\n const { appContext } = this.props.context;\n this.props.getOrgRoles(this,null,null,record.orgIdHome);\n }\n \n if(!this.props.context.user.contextUserIsAdmin){\n this.props.getOrgUserRoles(null, null, null, record.orgIdHome, this.props.context.appContext.roleName, null);\n }\n //this.props.getOrgRoles(this,null,null,record.orgIdHome); \n }\n else if ( (action === \"activate\" || action === \"deactivate\" || action === \"delete\")) {\n this.props.userStatus(this, this.onStatusSuccess, null, record.userId, action);\n } \n\n closePopover(); \n }\n\n onSearch = (searchText: string) => { \n let me = this;\n\n this.props.usersSetSearch((searchText || \"\"));\n setTimeout(function() {\n me.props.getUsers(me, null, null, 1, searchText, true);\n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.usersSetSearch((value || \"\"));\n }\n\n sortUsersTable = (pagination: any, filters: any, sorter: any) => {\n let sortColumn: string | undefined = undefined;\n let sortDirection: string | undefined = undefined;\n\n if (sorter && Object.keys(sorter).length > 0) {\n const { column, order } = sorter;\n sortDirection = order;\n if (column.title.hasOwnProperty('props')) {\n sortColumn = column.title.props['data-title'].toLowerCase().replace(/\\s/g, '')\n } else {\n sortColumn = column.title.toLowerCase().replace(/\\s/g, '');\n }\n }\n\n let sortDetails = {sortColumn: sortColumn, sortDirection: sortDirection}\n\n // console.log(this.props.usersList.searchText)\n // console.log(pagination)\n // console.log(filters)\n // console.log(sorter)\n // console.log(sortColumn)\n // console.log(sortDirection)\n \n this.props.getUsers(this, null, null, pagination.current, this.props.usersList.searchText, true, sortDetails);\n\n }\n\n onStatusSuccess = (record:any, userId:string) => { \n message.success(\"User has been successfully updated\"); \n this.props.getUsers(this, null, null, this.props.usersList.tableConfig.pagination.current, this.props.usersList.searchText, true);\n };\n\n onUserEdit = (record:any) => { \n this.props.userMaintOpen(this, \"Edit User :: \" + record.fullName, this.drawerWidth, record,\"EditUser\");\n }\n\n confirmStatus = (record:any, appContext:any, isupdate:any, isdelete:any, action:string) => (\n <Popconfirm\n title={\"Are you sure to \" + (action === \"activate\" ? \"activate\" : \"deactivate\") + \" this user?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, action)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {\n (action === \"activate\" && isupdate) &&\n <Tooltip title=\"Activate User\"> \n <Button data-id=\"users-activate-button\" type=\"default\" icon={<UserAddOutlined />} />\n </Tooltip>\n }\n {\n ((action !== \"activate\" && appContext.roleName.toLowerCase() === \"admin\") \n || (action !== \"activate\" && isdelete)) \n &&\n <Tooltip title=\"Deactivate User\"> \n <Button data-id=\"users-deactivate-button\" type=\"default\" icon={<UserDeleteOutlined />} />\n </Tooltip>\n }\n </div>\n </Popconfirm>\n );\n \n confirmDeletion = (record:any, isdelete:any) => (\n <Popconfirm\n title={\"Are you absolutely sure to delete this user?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {\n (isdelete) &&\n <Tooltip title=\"Delete User\"> \n <Button data-id=\"users-delete-button\" type=\"default\" icon={<DeleteOutlined />} />\n </Tooltip>\n }\n </div>\n </Popconfirm>\n );\n\n actions = (record:any, appContext:any, contextUser:any, isupdate:any, isdelete:any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"large\">\n {\n (isupdate) &&\n <Tooltip title=\"Edit User\">\n <Button data-id=\"users-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.onAction(e, record, \"edit-user\")}}/> \n </Tooltip>\n }\n \n {!record.activeInScope && record.userId !== contextUser.userId && this.confirmStatus(record, appContext, isupdate, isdelete, \"activate\")}\n {record.activeInScope && record.userId !== contextUser.userId && this.confirmStatus(record, appContext, isupdate, isdelete, \"deactivate\")}\n {\n (((contextUser.contextUserIsSuperUser && (record.userId !== contextUser.userId && isdelete)))\n || (record.userId !== contextUser.userId && isdelete)) &&\n this.confirmDeletion(record, isdelete)\n }\n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n > \n <Button data-id=\"users-actions-button\" type=\"default\" icon={<EllipsisOutlined />} />\n \n </Popover>\n );\n\n onRoleAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n const { appContext } = this.props.context;\n // const { roles } = this.props.roleList.roleMaint.orgRoles.data; \n // this.props.getOrgRoles(this,null,null,appContext.orgId); \n // this.props.getRolePermissions(this, null, null, roles[0].roleId);\n if ( action === \"add-role\") {\n this.props.roleMaintOpen(this, \"Roles and Permissions (Soon)\", this.drawerWidth, {});\n }\n closePopover(); \n }\n\n render() { \n\n const { user:contextUser, appContext } = this.props.context;\n const { tableConfig, tableData } = this.props.usersList;\n const result = getPermissions(this.props.permissions.permissions.users);\n const rolepermission = getPermissions(this.props.permissions.permissions.role_settings);\n if (!this.props.context.user.contextUserIsAdmin && !result[1]){\n history.push(\"/not-found\") \n }\n \n\n let iscreate = result[0];\n let isread = result[1];\n let isupdate = result[2];\n let isdelete = result[3];\n let isrolecreate = rolepermission[0];\n\n\n \n const tableColumns = [\n {\n title: \"Name\",\n dataIndex: \"fullName\",\n sortDirections: ['descend', 'ascend', 'descend'],\n defaultSortOrder: 'ascend',\n sorter: true,\n responsive: [\"md\"] as Breakpoint[],\n render: (fullName: string, record: any) => (\n <>\n {\n record.activeInScope.toString() !== \"true\" &&\n <>\n <UserDeleteOutlined className=\"inactive-user\"/>\n \n <Text type=\"danger\">{fullName}</Text>\n </>\n }\n {\n record.activeInScope.toString() === \"true\" &&\n <span>{fullName}</span>\n }\n </>\n )\n },\n {\n title: \"Email\",\n dataIndex: \"email\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n render: (email: string, record: any) => (\n <a href={\"mailto:\" + email}>{email}</a>\n )\n },\n {\n title: \"Phone\",\n dataIndex: \"phoneNumber\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n responsive: [\"sm\"] as Breakpoint[]\n },\n {\n title: \"Home Org Name\",\n dataIndex: \"orgHomeName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Role\",\n dataIndex: \"roleList\",\n responsive: [\"lg\"] as Breakpoint[],\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n render: (roleList: string, record: any) => (\n <>\n {\n contextUser.contextUserIsSuperUser &&\n record.superUser &&\n <>Super{roleList ? \", \" : \"\"}</>\n }\n {roleList}\n </>\n )\n },\n /*\n {\n title: \"Subscriptions\",\n dataIndex: \"notificationCount\",\n align: \"center\" as \"center\",\n render: (text: number, record: any) => (\n <div className=\"notifications-tag\">\n {\n text > 0 && \n <Tag color=\"geekblue\">{text}</Tag>\n }\n </div>\n ),\n responsive: [\"lg\"] as Breakpoint[]\n },\n */\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <>\n {\n (isupdate === true || isdelete === true) && \n this.actions(record, appContext, contextUser, isupdate, isdelete)\n } \n </>\n )\n }\n ];\n\n return (\n\n <div data-id=\"users-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col sm={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip>\n Users\n </div>\n </div>\n </Col>\n <Col sm={24} lg={18} className=\"content-header-controls\">\n <Space size=\"middle\">\n {\n (isread) &&\n <Search\n data-id=\"users-search-field\"\n placeholder=\"Search by name, phone and email\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.props.usersList.searchText}\n />\n }\n {\n (iscreate) &&\n <Tooltip title=\"Create New User\"> \n <div className=\"add-user-button\">\n <Button data-id=\"users-search-new-user-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add-user\")}>\n <span>User</span>\n </Button>\n </div>\n </Tooltip>\n } \n {/* it is moved to Roles Menu */}\n {/* {\n (isrolecreate) &&\n <Tooltip title=\"Roles and Permissions\"> \n <div className=\"add-role-button\">\n <Button data-id=\"role-search-new-user-button\" type=\"primary\" onClick={(e) => this.onRoleAction(e, {}, \"add-role\")}>\n <span>Role</span>\n </Button>\n </div>\n </Tooltip>\n } */}\n </Space>\n </Col>\n </Row>\n\n <div className=\"mt-15\">\n {\n isread &&\n <Table \n data-id=\"users-data\"\n {...tableConfig}\n rowKey={(record) => record.userId}\n columns={tableColumns}\n dataSource={tableData}\n onChange={this.sortUsersTable}\n showSorterTooltip={false}\n />\n } \n \n </div>\n \n <RoleMaint />\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n usersList: state.usersReducers.usersState.usersList,\n roleList: state.usersReducers.usersState.roleList,\n rolePermissionList: state.usersReducers.usersState.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Users);\n ","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function getOrgRoles(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n orgId: string,\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/org-role-permissions/\" + orgId , {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText\n }\n }\n )\n .then(response => { \n \n let data = response.data;\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n dispatch({ type: \"ORG_ROLE_GET_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function getRolePermissions(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n roleId: string\n) {\n \n return async (dispatch: any) => {\n Axios.get(\n\n appConfigs.server.URL + \"/ui/api/role-permissions/role/\" + roleId , {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data; \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n } \n dispatch({ type: \"ROLE_PERMISSIONS_GET_SUCCESS\", payload: {data: data} }); \n }\n ) \n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function getOrgRolePermissions(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n roleId: string\n) {\n \n return async (dispatch: any) => {\n Axios.get(\n \n appConfigs.server.URL + \"/ui/api/org-role-permissions/\" + orgId + \"/role/\" + roleId , {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data; \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n dispatch({ type: \"ORG_ROLE_PERMISSIONS_GET_SUCCESS\", payload: {data: data} }); \n }\n ) \n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\n\nexport function getCustomerOrgPermissions(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string \n) {\n \n return async (dispatch: any) => {\n Axios.get(\n \n appConfigs.server.URL + \"/ui/api/customer-org-permissions\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data; \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n dispatch({ type: \"CUSTONER_ROLE_PERMISSIONS_GET_SUCCESS\", payload: {data: data} }); \n }\n ) \n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function rolePermissionMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any\n) {\n \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_PERMISSION_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n\nexport function rolePermissionMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_PERMISSION_MAINT_CLOSE\" });\n };\n}\n \nexport function roleMaintOpen(\n me: any,\n mode: string, \n title: string,\n width: number,\n record: any\n) {\n \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_MAINT_OPEN\", payload: {title: title, mode: mode, width: width, record: record} });\n };\n}\n\nexport function roleMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_MAINT_CLOSE\" });\n };\n}\n\nexport function rolesSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ROLES_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function roleCopyMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any\n) {\n \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_COPY_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n\nexport function roleCopyMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ROLE_COPY_MAINT_CLOSE\" });\n };\n}\n\nexport function roleStatusMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any,\n orgId:any\n) { \n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/org-roles/\" + orgId, \n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) { \n callbackFnSuccess(record, response.data);\n }\n \n dispatch({ type: \"ROLE_STATUS_MAINT_SUCCESS\", payload: {data: response.data} });\n }\n )\n .catch(function (error) { \n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n });\n }\n}\n\nexport function getSubmitButton(\n isSubmitButton: boolean \n) { \n return (dispatch: any) => {\n dispatch({ type: \"ROLES_GET_SUBMIT_BUTTON\", isSubmitButton: isSubmitButton });\n }\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function roleMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/customer-org-permissions\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.org);\n }\n dispatch({ type: \"ROLE_PERMISSION_MAINT_SUCCESS\", payload: {data: \"\"} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function getOrgRolesMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string\n) {\n\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/org-roles/\" + orgId , {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n \n let data = response.data;\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n dispatch({ type: \"GET_ORG_ROLE_MAINT_GET_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function rolePermissionMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any,\n orgId:any\n) {\n \n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/org-role-permissions/\" + orgId,\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) { \n callbackFnSuccess(record, response.data);\n }\n \n dispatch({ type: \"ROLE_PERMISSION_MAINT_SUCCESS\", payload: {data: response.data} });\n }\n )\n .catch(function (error) {\n \n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n });\n }\n}\n\n\nexport function getOrgsMaint(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n orgId?: string,\n searchText?: string\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs-lov\", {\n responseType: \"json\", \n headers: {},\n params: {\n mode: (orgId || \"\") === \"\" ? \"administered\" : \"single\",\n scope: \"all\",\n includeTree: false,\n orgId: orgId,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({ type: \"ROLES_ADMINISTERED_ORGS_SUCCESS\", payload: {data: response.data.data.orgs} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n}\n\nexport function rolesMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ROLES_MAINT_CLOSE\" });\n };\n}\n\n","import { getPermissions } from \"../../utils/commonHelpers\";\n\nconst PermissionOperations: any = { \"Create\" : 0, \"View\": 1, \"Update\": 2, \"Delete\" : 3};\nexport const checkMaxPermissions = (record: any, operation: string, customerOrgPermissions: any, orgId: string) => {\n //ops-2689\n // const permissionEntity = customerOrgPermissions.find((cp: any) => \n // cp.orgId === orgId && cp.permissionId === record.permissionId); \n const permissionEntity = customerOrgPermissions.find((cp: any) => \n cp.permissionId === record.permissionId);\n\n if(permissionEntity) {\n const permissionBinary = getPermissions(permissionEntity.permissionLevel); \n if(permissionBinary){\n const indexValue = PermissionOperations[operation];\n const value = permissionBinary[indexValue]; \n return value;\n }\n }\n return false; \n}","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form, Input, Typography, Select, Table, Checkbox, Row, Col, Tooltip, Button, message, Switch } from 'antd';\nimport { PlusOutlined, EllipsisOutlined, UserDeleteOutlined, EditOutlined, DeleteOutlined, UserAddOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { getPermissions, getPermissionsList, permissionsList, convertBinaryToValue } from \"../../../utils/commonHelpers\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\nimport { closePopover } from \"../../../utils/commonHelpers\";\nimport * as actions from \"../actions\";\nimport \"./roleMaintInfo.css\";\nimport * as common from '../common';\n\nconst { Option } = Select;\n\ninterface permissionsList {\n permissionId: number;\n permissions: number[];\n}\n\ninterface Prop { \n roleMaint: Function,\n getRolePermissions: Function, \n getOrgRolesMaint: Function,\n rolePermissionMaint: Function,\n getOrgsMaint: Function,\n getSubmitButton: Function,\n context: any,\n roleList: any,\n customerOrgPermissions: any,\n issuborgsread: boolean\n}\n\ninterface State {\n selectedRowKeys?: any[];\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n orgId: string;\n roleId: number;\n roleName: string;\n isRoleAvailable: boolean;\n permissionsList: permissionsList[];\n}\n\nclass RoleMaintInfo extends React.PureComponent<Prop, State> { \n\n state:State = {\n orgId: \"\", \n roleId: 0,\n roleName: \"\",\n isRoleAvailable: false,\n permissionsList: []\n }\n \n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n \n const { appContext } = this.props.context;\n this.setState({roleName: appContext.roleName, orgId: appContext.orgId});\n\n // appContext.roleName === \"admin\" ? this.props.getRolePermissions(this,null,null,\"2\") : this.props.getRolePermissions(this,null,null,\"1\");\n let permissionList = [];\n permissionList = permissionsList(this.props.roleList.roleMaint.record);\n this.setState({permissionsList: permissionList});\n this.props.getOrgsMaint(null, null, null, null, null); \n this.componentUpdate(this.props.roleList.roleMaint.record);\n }\n \n componentDidUpdate(prevProps: Prop, prevState: any) { \n \n if(prevState.roleName !== this.state.roleName) {\n let permissionList = [];\n permissionList = permissionsList(this.props.roleList.roleMaint.record);\n this.setState({permissionsList: permissionList}); \n }\n \n if (this.props.roleList.roleMaint.instance !== prevProps.roleList.roleMaint.instance) {\n //this.componentUpdate();\n this.componentUpdate(this.props.roleList.roleMaint.record);\n } \n }\n\n componentUpdate(record: any) {\n formInit(this);\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n orgId: record.orgId,\n orgName: record.orgName,\n roleName: record.roleName,\n roleId: record.roleId,\n description: record.description,\n isRoleAvailable: record.isRoleAvailable\n })\n }\n }\n\n onFinish = (values:any) => { \n \n if(values.roleName.toLowerCase() !== \"admin\" && values.roleName.toLowerCase() !== \"guest\" && values.roleName.toLowerCase() !== \"users\"){\n let permissions = convertBinaryToValue(this.state.permissionsList);\n \n let permissionObject = { mode: \"update\", roleId: values.roleId, roleName: values.roleName, description: values.description,\n isRoleAvailable: this.state.isRoleAvailable, isActive: true, permissions: permissions\n };\n\n let orgId = values.orgId === undefined ? this.state.orgId : values.orgId;\n\n this.props.rolePermissionMaint(this, this.onFinishSuccess, this.onFinishFailure, permissionObject, orgId);\n }\n else{ \n message.error(\"Edit will not be allowed to \" + values.roleName + \" role.\");\n }\n \n };\n\n onFinishSuccess = (recordOld:any) => {\n this.props.getSubmitButton(false);\n successResponse(this, \"Role and Permissions updated successfully.\");\n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n\n onRoleAvailableChange = (checked:any) =>{ \n this.props.getSubmitButton(true); \n this.setState({isRoleAvailable: checked});\n }\n \n onSubmitEnable = () => {\n this.props.getSubmitButton(true);\n }\n\n onCheckedChange = (e: any, permissionId: number) => { \n this.props.getSubmitButton(true); \n const permissionType = +e.target.id.split(':')[1];\n this.setState({\n permissionsList: this.state.permissionsList.map((p: any) => {\n if (p.permissionId === permissionId) {\n p.permissions[permissionType] = +e.target.checked;\n return p;\n } else {\n return p;\n }\n }),\n });\n };\n\n checkMaxPermissions = (record: any, operation: string) => { \n const { customerOrgPermissions, context } = this.props;\n const orgId = context.appContext.orgId;\n return common.checkMaxPermissions(record, operation, customerOrgPermissions, orgId);\n }\n\n disablePermissionsFromParentOrg = () => {\n const { sourceOrgId, orgId, type } = this.props.roleList.roleMaint.record;\n if(sourceOrgId !== orgId && type.toLowerCase() === \"implicit\" ) {\n return true;\n }\n return false;\n }\n\n render() {\n \n const { appContext } = this.props.context; \n let roleName = appContext.roleName;\n const { roles } = this.props.roleList.roleMaint.orgRoles.data;\n const { record } = this.props.roleList.roleMaint;\n const { orgs } = this.props.roleList.roleMaint;\n let permissionList = [];\n \n for (let i=0; i<record.permissions.length; i++){ \n const result = getPermissionsList(record.permissions[i].permissionLevel);\n let permission = { permissionId:record.permissions[i].permissionId, \n entityName:record.permissions[i].entity, \n create:result[0], read:result[1], update:result[2], remove: result[3] \n };\n permissionList.push(permission);\n }\n\n const { permissionsList } = this.state;\n this.state.roleId = this.props.roleList.roleMaint.record.roleId;\n const tableColumns = [\n {\n title: \"Permissions\",\n dataIndex: \"entityName\",\n width: \"50%\",\n },\n {\n title: \"View\",\n dataIndex: \"read\",\n key: \"read\",\n width: \"12%\",\n render: (read: any, record: any) => (\n <>\n {\n (record.roleName === \"admin\" || record.roleName === \"users\" || record.roleName === \"guest\") &&\n <Checkbox \n checked={record.read === 1 ? true : false}\n > \n </Checkbox>\n }\n {\n (record.roleName !== \"admin\" && record.roleName !== \"users\" && record.roleName !== \"guest\") &&\n this.checkMaxPermissions(record, \"View\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:1`}\n key={`${record.permissionId.toString()}:1`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[1] === 1\n ? true\n : false\n }\n disabled={this.disablePermissionsFromParentOrg()}\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n \n }\n ></Checkbox>\n }\n </>\n ),\n },\n {\n title: \"Add\",\n dataIndex: \"create\",\n key: \"create\",\n width: \"12%\",\n render: (create: any, record: any) => (\n <>\n {\n (record.roleName === \"admin\" || record.roleName === \"users\" || record.roleName === \"guest\") &&\n <Checkbox \n checked={record.create === 1 ? true : false}\n > \n </Checkbox>\n }\n {\n (record.roleName !== \"admin\" && record.roleName !== \"users\" && record.roleName !== \"guest\") &&\n this.checkMaxPermissions(record, \"Create\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:0`}\n key={`${record.permissionId.toString()}:0`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[0] === 1\n ? true\n : false\n }\n disabled={this.disablePermissionsFromParentOrg()}\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n \n ></Checkbox>\n }\n </>\n ),\n },\n {\n title: \"Edit\",\n dataIndex: \"update\",\n key: \"update\",\n width: \"12%\",\n render: (update: any, record: any) => (\n <>\n {\n (record.roleName === \"admin\" || record.roleName === \"users\" || record.roleName === \"guest\") &&\n <Checkbox \n checked={record.update === 1 ? true : false}\n > \n </Checkbox>\n }\n {\n (record.roleName !== \"admin\" && record.roleName !== \"users\" && record.roleName !== \"guest\") &&\n this.checkMaxPermissions(record, \"Update\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:2`}\n key={`${record.permissionId.toString()}:2`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[2] === 1\n ? true\n : false\n }\n disabled={this.disablePermissionsFromParentOrg()}\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n \n ></Checkbox>\n }\n </>\n ),\n },\n {\n title: \"Delete\",\n dataIndex: \"remove\",\n key: \"remove\",\n width: \"12%\",\n render: (remove: any, record: any) => (\n <>\n {\n (record.roleName === \"admin\" || record.roleName === \"users\" || record.roleName === \"guest\") &&\n <Checkbox \n checked={record.remove === 1 ? true : false}\n > \n </Checkbox>\n }\n {\n (record.roleName !== \"admin\" && record.roleName !== \"users\" && record.roleName !== \"guest\") &&\n this.checkMaxPermissions(record, \"Delete\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:3`}\n key={`${record.permissionId.toString()}:3`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[3] === 1\n ? true\n : false\n }\n disabled={this.disablePermissionsFromParentOrg()}\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n \n ></Checkbox>\n }\n </>\n ),\n },\n ];\n\n return (\n <div data-id=\"role-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"role-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"role-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n \n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"roleMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n > \n\n {/* {\n\n (this.props.issuborgsread) &&\n <Form.Item\n name=\"orgId\"\n label=\"Org Name\" \n > \n <Select \n data-id=\"role-maint-info-edit-org-id\"\n defaultValue= {record.orgId} \n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n >\n {orgs !== null && orgs.map((orgrecord:any, index:number) => (\n <Option key={orgrecord.orgId} value={orgrecord.orgId}>\n {orgrecord.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n \n\n } */}\n {/* {\n !(this.props.issuborgsread) &&\n <> \n\n } */}\n <Form.Item\n name=\"orgId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n label=\"Org Name\"\n name=\"orgName\"\n >\n <span>{record.orgName}</span>\n </Form.Item>\n\n {/* </>\n } */}\n\n <Form.Item\n name=\"roleId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item\n label=\"Role Name\"\n name=\"roleName\"\n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n //{ validator:(_, value) => (value.length || 0) > 1 ? Promise.resolve() : Promise.reject(appConfigs.errors.fieldErrors.atLeastTwoCharacters) }\n ]}\n >\n <Input maxLength={200} disabled={this.disablePermissionsFromParentOrg()} onChange={this.onSubmitEnable}/>\n </Form.Item>\n \n <Form.Item\n label=\"Description\"\n name=\"description\"\n >\n <Input maxLength={255} disabled={this.disablePermissionsFromParentOrg()} onChange={this.onSubmitEnable}/>\n </Form.Item>\n \n <Form.Item \n label=\"Can Sub Orgs use this Role?\" \n name=\"isRoleAvailable\"\n valuePropName=\"checked\"\n style={{ width: \"1000px\" }}\n >\n <Switch \n checked={record.isRoleAvailable}\n onChange={this.onRoleAvailableChange}\n disabled={this.disablePermissionsFromParentOrg()}\n />\n </Form.Item>\n \n \n </Form>\n \n <div className=\"mt-15\">\n <Table\n data-id=\"dashboard-roles\"\n rowKey={(record) => record.permissionId}\n columns={tableColumns}\n dataSource={permissionList}\n />\n </div> \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n roleList: state.rolesReducer.rolesState.roleList,\n customerOrgPermissions: state.rolesReducer.rolesState.customerOrgPermissions \n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RoleMaintInfo);","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form, Input, Typography, Select, Table, Checkbox, Row, Col, Tooltip, Button, message, Switch } from 'antd';\nimport { PlusOutlined, EllipsisOutlined, UserDeleteOutlined, EditOutlined, DeleteOutlined, UserAddOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { getPermissions, getPermissionsList, permissionsList, convertBinaryToValue } from \"../../../utils/commonHelpers\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\nimport { closePopover } from \"../../../utils/commonHelpers\";\nimport * as actions from \"../actions\";\nimport \"./roleMaintInfo.css\";\nimport * as common from '../common';\nimport history from \"../../../utils/history\";\n\nconst { Option } = Select;\n\ninterface permissionsList {\n permissionId: number;\n permissions: number[];\n}\n\ninterface Prop { \n roleMaint: Function,\n getRolePermissions: Function, \n getOrgRolesMaint: Function,\n rolePermissionMaint: Function,\n getOrgsMaint: Function,\n rolesMaintClose: Function,\n getSubmitButton: Function,\n context: any,\n roleList: any,\n customerOrgPermissions: any,\n issuborgsread: boolean\n}\n\ninterface State {\n selectedRowKeys?: any[];\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean; \n orgId: string;\n roleId: string;\n roleName: string;\n isRoleAvailable: boolean;\n permissionsList: permissionsList[];\n isCloned: boolean;\n mode: string;\n}\n\nclass RoleCopyMaintInfo extends React.PureComponent<Prop, State> { \n\n state:State = {\n orgId: \"\", \n roleId: \"\",\n roleName: \"\",\n isRoleAvailable: false,\n permissionsList: [],\n isCloned: false,\n mode:\"add\"\n }\n \n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n \n const { appContext } = this.props.context;\n this.setState({roleName: appContext.roleName, orgId: appContext.orgId});\n \n // appContext.roleName === \"admin\" ? this.props.getRolePermissions(this,null,null,\"2\") : this.props.getRolePermissions(this,null,null,\"1\");\n let permissionList = [];\n permissionList = permissionsList(this.props.roleList.roleMaint.record);\n this.setState({permissionsList: permissionList});\n this.props.getOrgsMaint(null, null, null, null, null); \n this.componentUpdate(this.props.roleList.roleMaint.record);\n }\n \n componentDidUpdate(prevProps: Prop, prevState: any) {\n if(prevState.roleName !== this.state.roleName) {\n let permissionList = [];\n permissionList = permissionsList(this.props.roleList.roleMaint.record);\n this.setState({permissionsList: permissionList});\n }\n \n if (this.props.roleList.roleMaint.instance !== prevProps.roleList.roleMaint.instance) {\n //this.componentUpdate();\n this.componentUpdate(this.props.roleList.roleMaint.record);\n } \n }\n\n componentUpdate(record: any) { \n formInit(this);\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n orgId: record.orgId,\n orgName:record.orgName,\n roleName: record.roleName,\n description: record.description,\n isRoleAvailable: record.isRoleAvailable\n })\n this.setState({isRoleAvailable:record.isRoleAvailable});\n }\n }\n\n onFinish = (values:any) => { \n \n if(values.roleName.toLowerCase() !== \"admin\" && values.roleName.toLowerCase() !== \"guest\" && values.roleName.toLowerCase() !== \"users\" && values.roleName.toLowerCase() !== \"super admin\"){\n let permissions = convertBinaryToValue(this.state.permissionsList); \n \n let permissionObject = { mode: this.state.mode, roleName: values.roleName, description: values.description,\n isRoleAvailable: this.state.isRoleAvailable, isActive: true, permissions: permissions\n };\n\n let orgId = values.orgId === undefined ? this.state.orgId : values.orgId;\n\n this.props.rolePermissionMaint(this, this.onFinishSuccess, this.onFinishFailure, permissionObject, orgId);\n\n }\n else{\n // errorResponse(this, \"Edit will not be allowed to\" + values.roleName); \n message.error(\"Add will not be allowed to \" + values.roleName + \" role.\");\n } \n };\n\n onFinishSuccess = (recordOld:any) => {\n this.props.getSubmitButton(false);\n successResponse(this, \"Role and Permissions added successfully.\"); \n // const me = this;\n // setTimeout(function () { \n // me.props.rolesMaintClose();\n // history.push(\"/roles\");\n // }, 1500);\n }\n\n onFinishFailure = (error: any) => {\n errorResponse(this, error);\n }\n\n onRoleAvailableChange = (checked:any) =>{ \n this.props.getSubmitButton(true); \n this.setState({isRoleAvailable: checked});\n }\n\n onSubmitEnable = () => {\n this.props.getSubmitButton(true);\n }\n\n onCheckedChange = (e: any, permissionId: number) => { \n this.props.getSubmitButton(true);\n const permissionType = +e.target.id.split(':')[1];\n this.setState({\n permissionsList: this.state.permissionsList.map((p: any) => {\n if (p.permissionId === permissionId) {\n p.permissions[permissionType] = +e.target.checked;\n return p;\n } else {\n return p;\n }\n }),\n });\n };\n\n checkMaxPermissions = (record: any, operation: string) => { \n const { customerOrgPermissions, context } = this.props;\n const orgId = context.appContext.orgId;\n return common.checkMaxPermissions(record, operation, customerOrgPermissions, orgId);\n }\n\n render() {\n \n const { appContext } = this.props.context; \n let roleName = appContext.roleName;\n const { roles } = this.props.roleList.roleMaint.orgRoles.data;\n const { record } = this.props.roleList.roleMaint;\n const { orgs } = this.props.roleList.roleMaint;\n let permissionList = [];\n \n for (let i=0; i<record.permissions.length; i++){ \n const result = getPermissionsList(record.permissions[i].permissionLevel);\n let permission = { permissionId:record.permissions[i].permissionId, \n entityName:record.permissions[i].entity, \n create:result[0], read:result[1], update:result[2], remove: result[3] \n };\n permissionList.push(permission);\n } \n \n const { permissionsList } = this.state;\n \n const tableColumns = [\n {\n title: \"Pemissions\",\n dataIndex: \"entityName\",\n width: \"50%\",\n },\n {\n title: \"View\",\n dataIndex: \"read\",\n key: \"read\",\n width: \"12%\",\n render: (read: any, record: any) => (\n <>\n {\n this.checkMaxPermissions(record, \"View\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:1`}\n key={`${record.permissionId.toString()}:1`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[1] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n ></Checkbox>\n }\n \n </>\n ),\n },\n {\n title: \"Add\",\n dataIndex: \"create\",\n key: \"create\",\n width: \"12%\",\n render: (create: any, record: any) => (\n <>\n {\n this.checkMaxPermissions(record, \"Create\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:0`}\n key={`${record.permissionId.toString()}:0`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[0] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n \n ></Checkbox>\n }\n \n </>\n ),\n },\n {\n title: \"Edit\",\n dataIndex: \"update\",\n key: \"update\",\n width: \"12%\",\n render: (update: any, record: any) => (\n <>\n {\n this.checkMaxPermissions(record, \"Update\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:2`}\n key={`${record.permissionId.toString()}:2`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[2] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n \n ></Checkbox>\n }\n \n </>\n ),\n },\n {\n title: \"Delete\",\n dataIndex: \"remove\",\n key: \"remove\",\n width: \"12%\",\n render: (remove: any, record: any) => (\n <>\n {\n this.checkMaxPermissions(record, \"Delete\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:3`}\n key={`${record.permissionId.toString()}:3`}\n checked={\n permissionsList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[3] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n ></Checkbox>\n }\n \n </>\n ),\n },\n ];\n\n return (\n <div data-id=\"role-copy-maint-submit-button\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"role-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"role-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n \n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"roleCopyMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n >\n {\n (this.props.issuborgsread) &&\n <Form.Item\n name=\"orgId\"\n label=\"Org Name\" \n > \n <Select \n data-id=\"role-maint-info-edit-org-id\"\n defaultValue= {record.orgId} \n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n onChange={this.onSubmitEnable} \n >\n {orgs !== null && orgs.map((orgrecord:any, index:number) => (\n <Option key={orgrecord.orgId} value={orgrecord.orgId}>\n {orgrecord.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n \n }\n {\n !(this.props.issuborgsread) &&\n <>\n <Form.Item\n name=\"orgId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n label=\"Org Name\"\n name=\"orgName\"\n >\n <span>{record.orgName}</span>\n </Form.Item>\n </>\n }\n \n <Form.Item\n label=\"Role Name\"\n name=\"roleName\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n // { validator:(_, value) => (value.length || 0) > 1 ? Promise.resolve() : Promise.reject(appConfigs.errors.fieldErrors.atLeastTwoCharacters) }\n ]}\n >\n <Input maxLength={200} onChange={this.onSubmitEnable}/>\n </Form.Item>\n \n <Form.Item\n label=\"Description\"\n name=\"description\"\n >\n <Input maxLength={255} onChange={this.onSubmitEnable}/>\n </Form.Item>\n \n <Form.Item \n label=\"Can Sub Orgs use this Role?\" \n name=\"isRoleAvailable\"\n valuePropName=\"checked\"\n style={{ width: \"1000px\" }}\n >\n <Switch \n checked={record.isRoleAvailable}\n onChange={this.onRoleAvailableChange}\n />\n </Form.Item>\n \n </Form>\n \n <div className=\"mt-15\">\n <Table\n data-id=\"dashboard-roles\"\n rowKey={(record) => record.permissionId}\n columns={tableColumns}\n dataSource={permissionList}\n />\n </div> \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n roleList: state.rolesReducer.rolesState.roleList,\n customerOrgPermissions: state.rolesReducer.rolesState.customerOrgPermissions\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RoleCopyMaintInfo);","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form, Input, Typography, Select, Table, Checkbox, Row, Col, Tooltip, Button, message } from 'antd';\nimport { PlusOutlined, EllipsisOutlined, UserDeleteOutlined, EditOutlined, DeleteOutlined, UserAddOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { getPermissions, getPermissionsList, permissionsList, convertBinaryToValue } from \"../../../utils/commonHelpers\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\nimport { closePopover } from \"../../../utils/commonHelpers\";\nimport * as actions from \"../actions\";\nimport \"./roleMaintInfo.css\";\n\nconst { Option } = Select;\n\ninterface permissionsList {\n permissionId: number;\n permissions: number[];\n}\n\ninterface Prop { \n roleMaint: Function,\n getRolePermissions: Function, \n getOrgRolesMaint: Function,\n rolePermissionMaint: Function,\n context: any,\n roleList: any\n}\n\ninterface State {\n selectedRowKeys?: any[];\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n createchecked?: boolean;\n readchecked?:boolean;\n updatechecked?:boolean;\n deletechecked?:boolean;\n orgId: string;\n roleId: number;\n roleName: string;\n permissionsList: permissionsList[];\n}\n\nclass RoleViewMaintInfo extends React.PureComponent<Prop, State> { \n\n state:State = {\n orgId: \"\", \n roleId: 0,\n roleName: \"\",\n permissionsList: []\n }\n \n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n \n const { appContext } = this.props.context;\n this.setState({roleName: appContext.roleName, orgId: appContext.orgId});\n \n // appContext.roleName === \"admin\" ? this.props.getRolePermissions(this,null,null,\"2\") : this.props.getRolePermissions(this,null,null,\"1\");\n let permissionList = [];\n permissionList = permissionsList(this.props.roleList.roleMaint.record);\n this.setState({permissionsList: permissionList});\n this.componentUpdate(this.props.roleList.roleMaint.record);\n this.state.roleId = this.props.roleList.roleMaint.record.roleId;\n }\n \n componentDidUpdate(prevProps: Prop, prevState: any) {\n if(prevState.roleName !== this.state.roleName) {\n let permissionList = [];\n permissionList = permissionsList(this.props.roleList.roleMaint.record);\n this.setState({permissionsList: permissionList});\n }\n \n if (this.props.roleList.roleMaint.instance !== prevProps.roleList.roleMaint.instance) {\n //this.componentUpdate();\n this.componentUpdate(this.props.roleList.roleMaint.record);\n } \n }\n\n componentUpdate(record: any) { \n formInit(this);\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n orgName:record.orgName,\n roleName: record.roleName,\n roleId: record.roleId,\n description: record.description\n })\n }\n }\n\n onFinish = (values:any) => { \n if(values.roleName.toLowerCase() !== \"admin\" && values.roleName.toLowerCase() !== \"guest\" && values.roleName.toLowerCase() !== \"users\"){\n let permissions = convertBinaryToValue(this.state.permissionsList);\n let permissionObject = { mode: \"update\", roleId: this.state.roleId, roleName: this.state.roleName, description: values.description,\n isRoleAvailable: true, isActive: true, permissions: permissions\n };\n this.props.rolePermissionMaint(this, this.onFinishSuccess, this.onFinishFailure, permissionObject, this.state.orgId);\n\n }\n else{\n // errorResponse(this, \"Edit will not be allowed to\" + values.roleName); \n message.error(\"Edit will not be allowed to \" + values.roleName + \" role.\");\n }\n \n };\n\n onFinishSuccess = (recordOld:any) => {\n this.props.getRolePermissions(this, null, null, this.state.roleId);\n //this.setState({roleName: \"barko_guest\"});\n //this.props.getRolePermissions(this, null, null, \"5\");\n\n let permissionList = [];\n permissionList = permissionsList(this.props.roleList.tableData);\n this.setState({permissionsList: permissionList});\n successResponse(this, \"Role and Permissions has been successfully updated\");\n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n\n onCheckChange = (value: any) => {\n this.setState({ createchecked: value.target.checked});\n }\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n const { appContext } = this.props.context;\n const { roles } = this.props.roleList.roleMaint.orgRoles.data; \n this.props.getOrgRolesMaint(this,null,null,appContext.orgId); \n this.props.getRolePermissions(this, null, null, roles[0].roleId);\n \n closePopover(); \n }\n\n onCheckedChange = (e: any, permissionId: number) => { \n const permissionType = +e.target.id.split(':')[1];\n this.setState({\n permissionsList: this.state.permissionsList.map((p: any) => {\n if (p.permissionId === permissionId) {\n p.permissions[permissionType] = +e.target.checked;\n return p;\n } else {\n return p;\n }\n }),\n });\n };\n\n render() { \n const { appContext } = this.props.context; \n let roleName = appContext.roleName;\n const { roles } = this.props.roleList.roleMaint.orgRoles.data;\n const { record } = this.props.roleList.roleMaint;\n let permissionList = [];\n \n // if(tableOrgData.status === \"success\"){\n // for (let i=0; i<tableOrgData.data.orgRolePermissions.permissions.length; i++){ \n // const result = getPermissionsList(tableOrgData.data.orgRolePermissions.permissions[i].permissionLevel);\n // let permission = { permissionId:tableOrgData.data.orgRolePermissions.permissions[i].permissionId, \n // entityName:tableOrgData.data.orgRolePermissions.permissions[i].entity, \n // create:result[0], read:result[1], update:result[2], remove: result[3] \n // };\n // permissionList.push(permission);\n // } \n // }\n\n \n for (let i=0; i<record.permissions.length; i++){ \n const result = getPermissionsList(record.permissions[i].permissionLevel);\n let permission = { permissionId:record.permissions[i].permissionId, \n entityName:record.permissions[i].entity, \n create:result[0], read:result[1], update:result[2], remove: result[3] \n };\n permissionList.push(permission);\n } \n \n \n \n \n const { permissionsList } = this.state;\n \n const tableColumns = [\n {\n title: \"Permissions\",\n dataIndex: \"entityName\",\n width: \"50%\",\n },\n {\n title: \"View\",\n dataIndex: \"read\",\n key: \"read\",\n width: \"12%\",\n render: (read: any, record: any) => (\n <>\n \n <Checkbox \n checked={record.read === 1 ? true : false}\n > \n </Checkbox>\n \n </>\n ),\n },\n {\n title: \"Add\",\n dataIndex: \"create\",\n key: \"create\",\n width: \"12%\",\n render: (create: any, record: any) => (\n <>\n \n <Checkbox \n checked={record.create === 1 ? true : false}\n > \n </Checkbox>\n \n </>\n ),\n },\n {\n title: \"Edit\",\n dataIndex: \"update\",\n key: \"update\",\n width: \"12%\",\n render: (update: any, record: any) => (\n <>\n \n <Checkbox \n checked={record.update === 1 ? true : false}\n > \n </Checkbox>\n \n </>\n ),\n },\n {\n title: \"Delete\",\n dataIndex: \"remove\",\n key: \"remove\",\n width: \"12%\",\n render: (remove: any, record: any) => (\n <>\n \n <Checkbox \n checked={record.remove === 1 ? true : false}\n > \n </Checkbox>\n \n </>\n ),\n },\n ];\n\n return (\n <div data-id=\"role-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"role-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"role-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n \n <Form\n {...appConfigs.settings.formLayout}\n id=\"roleViewMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n > \n <Form.Item \n label=\"Org Name\"\n name=\"orgName\"\n > \n <Input maxLength={200} readOnly/>\n </Form.Item>\n \n <Form.Item\n label=\"Role Name\"\n name=\"roleName\"\n shouldUpdate={true}\n >\n <Input maxLength={200} readOnly/>\n </Form.Item>\n \n <Form.Item\n label=\"Description\"\n name=\"description\"\n >\n <Input maxLength={200} readOnly/>\n </Form.Item>\n \n </Form>\n \n <div className=\"mt-15\">\n <Table\n data-id=\"dashboard-roles\"\n rowKey={(record) => record.permissionId}\n columns={tableColumns}\n dataSource={permissionList}\n />\n </div> \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n roleList: state.rolesReducer.rolesState.roleList\n \n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RoleViewMaintInfo);","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form, Input, Typography, Select, Table, Checkbox, Row, Col, Tooltip, Button, message, Switch } from 'antd';\nimport { PlusOutlined, EllipsisOutlined, UserDeleteOutlined, EditOutlined, DeleteOutlined, UserAddOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { getPermissions, getPermissionsList, permissionsList, convertBinaryToValue, rolespermissionsList} from \"../../../utils/commonHelpers\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\nimport { closePopover } from \"../../../utils/commonHelpers\";\nimport * as actions from \"../actions\";\nimport \"./roleMaintInfo.css\";\nimport * as common from '../common';\nimport history from \"../../../utils/history\";\n\nconst { Option } = Select;\n\ninterface permissionsList {\n permissionId: number;\n permissions: number[];\n}\n\ninterface Prop { \n roleMaint: Function,\n getRolePermissions: Function, \n getOrgRolesMaint: Function,\n rolePermissionMaint: Function,\n getOrgsMaint: Function,\n rolesMaintClose: Function, \n getSubmitButton: Function, \n context: any,\n roleList: any,\n rolePermissionList: any,\n permissions: any, \n customerOrgPermissions: any,\n issuborgsread: boolean\n}\n\ninterface State {\n selectedRowKeys?: any[];\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean; \n orgId: string;\n roleId: string;\n roleName: string;\n isRoleAvailable: boolean;\n permissionsAddList: permissionsList[];\n mode: string;\n}\n\nclass RolePermissionMaintInfo extends React.Component<Prop, State> {\n\n state:State = {\n orgId: \"\", \n roleId: \"\",\n roleName: \"\",\n isRoleAvailable: false,\n permissionsAddList: [],\n mode:\"add\"\n }\n \n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n \n const { appContext } = this.props.context;\n this.setState({roleName: appContext.roleName, orgId: appContext.orgId});\n \n let permissionList = [];\n permissionList = rolespermissionsList(this.props.roleList.tableData);\n this.state.roleId = this.props.roleList.roleMaint.record.roleId;\n this.setState({permissionsAddList: permissionList}); \n this.props.getOrgsMaint(null, null, null, null, null); \n this.componentUpdate(this.props.roleList.roleMaint.record);\n }\n \n componentDidUpdate(prevProps: Prop, prevState: any) { \n \n if(prevState.roleName !== this.state.roleName) {\n let permissionList = [];\n permissionList = rolespermissionsList(this.props.roleList.tableData);\n this.setState({permissionsAddList: permissionList});\n \n }\n \n if (this.props.rolePermissionList.rolePermissionMaint.instance !== prevProps.rolePermissionList.rolePermissionMaint.instance) {\n this.componentUpdate(this.props.rolePermissionList.rolePermissionMaint.record);\n } \n }\n\n componentUpdate(record: any ) {\n \n formInit(this);\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({ \n\n })\n }\n }\n\n onFinish = (values:any) => {\n if(values.roleName.toLowerCase() !== \"admin\" && values.roleName.toLowerCase() !== \"guest\" && values.roleName.toLowerCase() !== \"user\" && values.roleName.toLowerCase() !== \"super admin\"){\n // let roleIdVal; \n // if((this.props.roleList.roleMaint.record.roleId || \"\") !== \"\"){\n // this.setState({mode: \"update\"});\n // this.state.roleId = this.props.roleList.roleMaint.record.roleId;\n // roleIdVal = this.state.roleId;\n // } else {\n // roleIdVal = null;\n // }\n let permissions = convertBinaryToValue(this.state.permissionsAddList);\n let permissionObject = { mode: this.state.mode, roleName: values.roleName, description: values.description,\n isRoleAvailable: this.state.isRoleAvailable, isActive: true, permissions: permissions\n };\n let orgId = values.orgId === undefined ? this.state.orgId : values.orgId;\n\n this.props.rolePermissionMaint(this, this.onFinishSuccess, this.onFinishFailure, permissionObject, orgId);\n }\n else\n {\n message.error(\"Add will not be allowed to \" + values.roleName + \" role.\");\n }\n\n };\n\n onFinishSuccess = (recordOld:any) => {\n this.props.getSubmitButton(false);\n successResponse(this, \"Role and Permissions added successfully.\");\n // const me = this;\n // setTimeout(function () { \n // me.props.rolesMaintClose();\n // history.push(\"/roles\");\n // }, 1500); \n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n\n onRoleAvailableChange = (checked:any) =>{ \n this.props.getSubmitButton(true); \n this.setState({isRoleAvailable: checked});\n }\n\n onSubmitEnable = () => {\n this.props.getSubmitButton(true);\n }\n\n onCheckedChange = (e: any, permissionId: number) => { \n this.props.getSubmitButton(true);\n const permissionType = +e.target.id.split(':')[1];\n this.setState({\n permissionsAddList: this.state.permissionsAddList.map((p: any) => {\n if (p.permissionId === permissionId) {\n p.permissions[permissionType] = +e.target.checked;\n return p;\n } else {\n return p;\n }\n }),\n });\n };\n\n\n checkMaxPermissions = (record: any, operation: string) => {\n //ops-2689\n //const { customerOrgPermissions, context } = this.props;\n const { roleList, context } = this.props;\n \n const orgId = context.appContext.orgId;\n //ops-2689\n //return common.checkMaxPermissions(record, operation, customerOrgPermissions, orgId);\n return common.checkMaxPermissions(record, operation, roleList.tableData.data.permissions, orgId);\n \n }\n\n \n render() { \n const { appContext } = this.props.context; \n const { tableData } = this.props.roleList;\n const { orgs } = this.props.roleList.roleMaint;\n \n let permissionList = [];\n \n for (let i=0; i<tableData.data.permissions.length; i++){\n //ops-2689\n // let permission = { permissionId:tableData.data.permissions[i].permissionId, \n // entityName:tableData.data.permissions[i].entity, \n // create:false, read:false, update:false, remove: false\n // };\n\n if(tableData.data.permissions[i].permissionLevel > 0){\n let permission = { permissionId:tableData.data.permissions[i].permissionId, \n entityName:tableData.data.permissions[i].entity, \n create:false, read:false, update:false, remove: false\n };\n permissionList.push(permission);\n }\n }\n \n const { permissionsAddList } = this.state;\n \n const tableColumns = [\n {\n title: \"Permissions\",\n dataIndex: \"entityName\",\n width: \"50%\",\n },\n {\n title: \"View\",\n dataIndex: \"read\",\n key: \"read\",\n width: \"12%\",\n render: (read: any, record: any) => (\n <>\n {\n this.checkMaxPermissions(record, \"View\") && \n <Checkbox\n id={`${record.permissionId.toString()}:1`}\n key={`${record.permissionId.toString()}:1`}\n checked={\n permissionsAddList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[1] === 1\n ? true\n : false\n } \n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n ></Checkbox>\n }\n </>\n ),\n },\n {\n title: \"Add\",\n dataIndex: \"create\",\n key: \"create\",\n width: \"12%\",\n render: (create: any, record: any) => (\n <>\n {\n this.checkMaxPermissions(record, \"Create\") && \n <Checkbox\n id={`${record.permissionId.toString()}:0`}\n key={`${record.permissionId.toString()}:0`}\n checked={\n permissionsAddList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[0] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n } \n ></Checkbox>\n }\n \n </>\n ),\n },\n {\n title: \"Edit\",\n dataIndex: \"update\",\n key: \"update\",\n width: \"12%\",\n render: (update: any, record: any) => (\n <>\n {\n this.checkMaxPermissions(record, \"Update\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:2`}\n key={`${record.permissionId.toString()}:2`}\n checked={\n permissionsAddList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[2] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n \n ></Checkbox>\n }\n \n </>\n ),\n },\n {\n title: \"Delete\",\n dataIndex: \"remove\",\n key: \"remove\",\n width: \"12%\",\n render: (remove: any, record: any) => (\n <>\n { \n this.checkMaxPermissions(record, \"Delete\") &&\n <Checkbox\n id={`${record.permissionId.toString()}:3`}\n key={`${record.permissionId.toString()}:3`}\n checked={\n permissionsAddList.find(\n (p: any) => p.permissionId === record.permissionId\n )?.permissions[3] === 1\n ? true\n : false\n }\n onChange={(e: any) =>\n this.onCheckedChange(e, record.permissionId)\n }\n \n ></Checkbox>\n } \n </>\n )\n },\n ];\n\n return (\n <div data-id=\"role-add-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"role-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"role-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n {/* {this.state.formError && !this.state.formSuccess && \n this.state.formErrorMessage && this.state.formErrorMessage.length > 0 &&\n <ErrorAlert data-id=\"role-maint-info-error-message\" message={this.state.formErrorMessage}/>} */}\n \n \n {/* <Row gutter={8} style={{marginTop: 15}}>\n <Col offset={1} span={23}> */}\n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"roleAddMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n >\n {\n (this.props.issuborgsread) &&\n <Form.Item\n name=\"orgId\"\n label=\"Org Name\" \n > \n <Select \n data-id=\"roles-maint-info-org-id\"\n defaultValue= {this.props.context.appContext.orgId} \n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n onChange={this.onSubmitEnable}\n >\n {orgs !== null && orgs.map((record:any, index:number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n \n }\n {\n !(this.props.issuborgsread) &&\n <Form.Item \n label=\"Org Name\"\n >\n <span>{this.props.context.user.homeOrg.name}</span>\n </Form.Item>\n }\n \n <Form.Item\n label=\"Role Name\"\n name=\"roleName\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\n // { validator:(_, value) => (value.length || 0) > 1 ? Promise.resolve() : Promise.reject(appConfigs.errors.fieldErrors.atLeastTwoCharacters) }\n ]} \n >\n <Input maxLength={200} onChange={this.onSubmitEnable}/>\n </Form.Item>\n \n <Form.Item\n label=\"Description\"\n name=\"description\"\n >\n <Input maxLength={255} onChange={this.onSubmitEnable} />\n </Form.Item>\n \n <Form.Item \n label=\"Can Sub Orgs use this Role?\" \n name=\"isRoleAvailable\"\n valuePropName=\"checked\"\n style={{ width: \"1000px\" }}\n >\n <Switch defaultChecked={false}\n onChange={this.onRoleAvailableChange}\n />\n </Form.Item>\n \n </Form>\n {/* </Col>\n </Row> */}\n <div className=\"mt-15\">\n <Table\n data-id=\"dashboard-roles\"\n rowKey={(record) => record.permissionId}\n columns={tableColumns}\n dataSource={permissionList}\n />\n </div> \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data, \n roleList: state.rolesReducer.rolesState.roleList,\n rolePermissionList: state.rolesReducer.rolesState.rolePermissionList,\n customerOrgPermissions: state.rolesReducer.rolesState.customerOrgPermissions\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RolePermissionMaintInfo);","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Drawer, Tabs, Button, Space } from \"antd\";\nimport * as actions from \"./actions\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\nimport RoleMaintInfo from \"./roleMaintInfo/RoleMaintInfo\";\nimport RoleCopyMaintInfo from \"./roleMaintInfo/RoleCopyMaintInfo\";\nimport RoleViewMaintInfo from \"./roleMaintInfo/RoleViewMaintInfo\";\nimport RolePermissionMaintInfo from \"./roleMaintInfo/RolePermissionMaintInfo\";\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n roleMaintClose: Function,\n getOrgRoles: Function,\n getRolePermissions:Function,\n getSubmitButton: Function,\n context: any,\n roleList: any,\n permissions: any\n}\n\nclass RoleMaint extends React.Component<Prop, {}> {\n \n componentDidUpdate(prevProps: Prop) {\n \n if (this.props.roleList.roleMaint.instance !== prevProps.roleList.roleMaint.instance) {\n this.closeCollapsed();\n } \n }\n \n closeCollapsed() { \n let active:any = document.querySelectorAll(\"[data-id=role-maint-drawer] .ant-collapse-item-active\"); \n this.props.getSubmitButton(false);\n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i]!.children[0].click(); \n }\n }\n }\n\n onDrawerClose = () => {\n const { appContext } = this.props.context;\n this.props.getOrgRoles(this,null,null,appContext.orgId,this.props.roleList.searchText); \n //ops-2689\n //appContext.roleName === \"admin\" ? this.props.getRolePermissions(this,null,null,\"2\") : this.props.getRolePermissions(this,null,null,\"1\");\n this.props.getRolePermissions(this,null,null,appContext.roleId);\n \n this.props.getSubmitButton(false);\n this.props.roleMaintClose(this);\n };\n\n onTabChange = (key:string) => {\n //this.props.roleMaintTabChange(this, key);\n }\n\n render() {\n\n const { roleMaint } = this.props.roleList;\n \n const suborgs = getPermissions(this.props.permissions.permissions.sub_orgs);\n let issuborgsread = suborgs[1];\n \n return(\n <Drawer\n data-id=\"role-maint-drawer\" \n title={roleMaint.title}\n width={roleMaint.width}\n onClose={this.onDrawerClose}\n visible={roleMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"role-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n roleMaint.mode === \"add-role\" && \n <Button data-id=\"role-add-maint-info\" type=\"primary\" form=\"roleAddMaintInfoForm\" key=\"submit\" htmlType=\"submit\" disabled={!roleMaint.isSubmitButton}>\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n roleMaint.mode === \"edit-role\" && \n <Button data-id=\"role-maint-info\" type=\"primary\" form=\"roleMaintInfoForm\" key=\"submit\" htmlType=\"submit\" disabled={!roleMaint.isSubmitButton}>\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n roleMaint.mode === \"copy-role\" && \n <Button data-id=\"role-copy-maint-submit-button\" type=\"primary\" form=\"roleCopyMaintInfoForm\" key=\"submit\" htmlType=\"submit\" disabled={!roleMaint.isSubmitButton}>\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n \n </Space>\n }\n >\n {\n roleMaint.mode === \"add-role\" &&\n <Tabs data-id=\"role-maint-info-tabs\" activeKey={roleMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n <TabPane data-id=\"role-maint-info-tab-button\" tab=\"Role Info\" key=\"1\"> \n <RolePermissionMaintInfo issuborgsread = {issuborgsread}/>\n </TabPane>\n </Tabs>\n }\n {\n roleMaint.mode === \"view-role\" &&\n <Tabs data-id=\"role-maint-info-tabs\" activeKey={roleMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n <TabPane data-id=\"role-maint-info-tab-button\" tab=\"Role Info\" key=\"1\"> \n <RoleViewMaintInfo />\n </TabPane>\n </Tabs>\n }\n {\n roleMaint.mode === \"edit-role\" &&\n <Tabs data-id=\"role-maint-info-tabs\" activeKey={roleMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n <TabPane data-id=\"role-maint-info-tab-button\" tab=\"Role Info\" key=\"1\"> \n <RoleMaintInfo issuborgsread = {issuborgsread} />\n </TabPane>\n </Tabs>\n }\n {\n roleMaint.mode === \"copy-role\" &&\n <Tabs data-id=\"role-maint-info-tabs\" activeKey={roleMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n <TabPane data-id=\"role-maint-info-tab-button\" tab=\"Role Info\" key=\"1\"> \n <RoleCopyMaintInfo issuborgsread = {issuborgsread} />\n </TabPane>\n </Tabs>\n }\n </Drawer>\n );\n }\n\n}\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n roleList: state.rolesReducer.rolesState.roleList,\n permissions: state.contextReducer.data,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RoleMaint);","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Drawer, Tabs, Button, Space } from \"antd\";\nimport * as actions from \"./actions\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport RolePermissionMaintInfo from \"./roleMaintInfo/RolePermissionMaintInfo\";\n\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n rolePermissionMaintClose: Function,\n getOrgRoles: Function,\n getRolePermissions:Function,\n context: any,\n rolePermissionList: any,\n roleList: any \n}\n\nclass RolePermissionMaint extends React.Component<Prop, {}> {\n \n componentDidUpdate(prevProps: Prop) {\n \n if (this.props.roleList.roleMaint.instance !== prevProps.roleList.roleMaint.instance) {\n this.closeCollapsed();\n }\n }\n \n closeCollapsed() { \n let active:any = document.querySelectorAll(\"[data-id=role-permission-maint-drawer] .ant-collapse-item-active\"); \n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i]!.children[0].click(); \n }\n }\n }\n\n onDrawerClose = () => {\n const { appContext } = this.props.context;\n this.props.getOrgRoles(this,null,null,appContext.orgId,null); \n appContext.roleName === \"admin\" ? this.props.getRolePermissions(this,null,null,\"2\") : this.props.getRolePermissions(this,null,null,\"1\");\n this.props.rolePermissionMaintClose(this);\n };\n\n onTabChange = (key:string) => {\n //this.props.roleMaintTabChange(this, key);\n }\n\n render() {\n\n const { rolePermissionMaint } = this.props.rolePermissionList;\n \n return(\n <Drawer\n data-id=\"role-permission-maint-drawer\" \n title={rolePermissionMaint.title}\n width={rolePermissionMaint.width}\n onClose={this.onDrawerClose}\n visible={rolePermissionMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"role-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n \n <Button data-id=\"role-maint-submit-button\" type=\"primary\" form=\"rolePermissionMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n \n </Space>\n }\n >\n <Tabs data-id=\"role-maint-info-tabs\" activeKey={rolePermissionMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n <TabPane data-id=\"role-maint-info-tab-button\" tab=\"Roles Info\" key=\"1\"> \n {/* <RolePermissionMaintInfo /> */}\n </TabPane>\n </Tabs>\n </Drawer>\n );\n }\n\n}\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n rolePermissionList: state.rolesReducer.rolesState.rolePermissionList,\n roleList: state.rolesReducer.rolesState.roleList \n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(RolePermissionMaint);","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Table,Button,Popover, message, Typography, Popconfirm, Input, Row, Col, Space, Tooltip, Checkbox, Select, Switch } from \"antd\";\nimport { PlusOutlined, EllipsisOutlined, EditOutlined, DeleteOutlined, CopyOutlined, TabletOutlined, PauseOutlined, RollbackOutlined } from \"@ant-design/icons\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { closePopover, getPermissions } from \"../../utils/commonHelpers\";\nimport history from '../../utils/history';\nimport { errorResponse } from \"../../utils/apiHelpers/apiHelpers\";\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport * as actions from \"./actions\";\nimport RoleMaint from './RoleMaint';\nimport RolePermissionMaint from './RolePermissionMaint';\nimport \"./roles.css\";\nimport { string } from \"@amcharts/amcharts4/core\";\n\nconst { Option } = Select;\nconst { Search } = Input;\nconst { Text } = Typography;\n\ninterface Prop {\n getRolePermissions: Function, \n getOrgRoles: Function,\n getOrgRolePermissions: Function,\n rolePermissionMaintOpen: Function,\n roleMaintOpen: Function,\n rolesSetSearch: Function,\n rolePermissionMaint: Function,\n roleStatusMaint: Function,\n getSubmitButton: Function,\n context: any,\n permissions: any,\n roleList: any,\n getCustomerOrgPermissions: any \n //rolePermissionList: any\n}\n\nclass Roles extends Component<Prop, {}> {\n\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n \n componentDidMount () {\n const { appContext } = this.props.context; \n this.props.getCustomerOrgPermissions(this, null, null, appContext.orgId); \n this.props.getOrgRoles(this, null, null, appContext.orgId, this.props.roleList.searchText); \n //ops-2689 \n //appContext.roleName === \"admin\" ? this.props.getRolePermissions(this,null,null,\"2\") : this.props.getRolePermissions(this,null,null,\"1\"); \n this.props.getRolePermissions(this,null,null,appContext.roleId);\n this.props.getSubmitButton(false);\n }\n\n onRoleIdChange = (value: string) => { \n this.props.getRolePermissions(this,null,null,value);\n }\n\n onSearch = (searchText: string) => { \n let me = this;\n const { appContext } = this.props.context;\n this.props.rolesSetSearch((searchText || \"\"));\n setTimeout(function() {\n me.props.getOrgRoles(me, null, null, appContext.orgId, me.props.roleList.searchText); \n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.rolesSetSearch((value || \"\"));\n }\n\n onRoleEdit = (record:any) => { \n this.props.roleMaintOpen(this, \"Edit Role :: \" + record.roleName, this.drawerWidth, record);\n }\n\n onRoleCopy = (record:any) => { \n this.props.roleMaintOpen(this, \"Copy Role :: \" + record.roleName, this.drawerWidth, record);\n }\n\n confirmStatus = (record:any, appContext:any, isupdate:any, isdelete:any, action:string) => (\n <Popconfirm\n title={\"Are you sure to \" + (action === \"active\" ? \"active\" : \"deactive\") + \" this role?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, action)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {\n (isupdate && record.isActive) &&\n <Tooltip title=\"Deactivate Role\"> \n <Button data-id=\"roles-deactivate-button\" type=\"default\" icon={<PauseOutlined />} />\n </Tooltip>\n }\n {\n (isupdate && !record.isActive) \n &&\n <Tooltip title=\"Activate Role\"> \n <Button data-id=\"roles-activate-button\" type=\"default\" icon={<RollbackOutlined />} />\n </Tooltip>\n }\n \n </div>\n </Popconfirm>\n );\n \n confirmDeletion = (record:any, isdelete:any) => (\n <Popconfirm\n title={\"Are you absolutely sure to delete this role?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete-role\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {\n (isdelete) &&\n <Tooltip title=\"Delete Role\"> \n <Button data-id=\"roles-delete-button\" type=\"default\" icon={<DeleteOutlined />} />\n </Tooltip>\n }\n </div>\n </Popconfirm>\n );\n\n actions = (record:any, appContext:any, contextUser:any, isupdate:any, iscreate:any, isdelete:any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"large\">\n {\n (record.roleName.toLowerCase() === \"admin\" || record.roleName.toLowerCase() === \"user\" || record.roleName.toLowerCase() === \"guest\" || record.roleName.toLowerCase() === \"super admin\") &&\n <Tooltip title=\"View Role\">\n <Button data-id=\"roles-view-button\" type=\"default\" icon={<TabletOutlined />} onClick={(e) => {this.onAction(e, record, \"view-role\")}}/> \n </Tooltip>\n }\n {\n (isupdate && (record.roleName.toLowerCase() !== \"admin\" && record.roleName.toLowerCase() !== \"user\" && record.roleName.toLowerCase() !== \"guest\" && record.roleName.toLowerCase() !== \"super admin\")) &&\n <Tooltip title=\"Edit Role\">\n <Button data-id=\"roles-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.onAction(e, record, \"edit-role\")}}/> \n </Tooltip>\n }\n {\n (iscreate && isupdate) &&\n <Tooltip title=\"Clone Role\">\n <Button data-id=\"roles-actions-copy-button\" type=\"default\" icon={<CopyOutlined />} onClick={(e) => {this.onAction(e, record, \"copy-role\")}} /> \n </Tooltip>\n } \n {\n (isupdate && record.isActive \n && (record.roleName.toLowerCase() !== \"admin\" && record.roleName.toLowerCase() !== \"user\" && record.roleName.toLowerCase() !== \"guest\" && record.roleName.toLowerCase() !== \"super admin\")\n ) &&\n this.confirmStatus(record, appContext, isupdate, isdelete, \"deactive\")\n }\n { \n (isupdate && !record.isActive \n && (record.roleName.toLowerCase() !== \"admin\" && record.roleName.toLowerCase() !== \"user\" && record.roleName.toLowerCase() !== \"guest\" && record.roleName.toLowerCase() !== \"super admin\")\n ) &&\n this.confirmStatus(record, appContext, isupdate, isdelete, \"active\")\n }\n\n {\n (isdelete === true \n && (record.roleName.toLowerCase() !== \"admin\" && record.roleName.toLowerCase() !== \"user\" && record.roleName.toLowerCase() !== \"guest\" && record.roleName.toLowerCase() !== \"super admin\")\n ) &&\n this.confirmDeletion(record, isdelete)\n }\n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n > \n <Button data-id=\"users-actions-button\" type=\"default\" icon={<EllipsisOutlined />} />\n \n </Popover>\n );\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n \n if ( action === \"add-role\") {\n this.props.roleMaintOpen(this, \"add-role\", \"New Role\" , this.drawerWidth, {});\n //this.props.rolePermissionMaintOpen(this, \"New Role\", this.drawerWidth, {});\n }\n if ( action === \"edit-role\") {\n this.props.roleMaintOpen(this, \"edit-role\", \"Edit Role :: \" + record.roleName, this.drawerWidth, record);\n //this.props.getOrgRolePermissions(this,this.onRoleEdit, null, this.props.context.appContext.orgId, record.roleId);\n }\n if ( action === \"copy-role\") {\n this.props.roleMaintOpen(this, \"copy-role\", \"Clone Role :: \" + record.roleName, this.drawerWidth, record);\n }\n if ( action === \"view-role\") {\n this.props.roleMaintOpen(this, \"view-role\", \"View Role :: \" + record.roleName, this.drawerWidth, record);\n }\n if(action === \"active\"){\n \n let permissionObject = { mode: \"update\", roleName: record.roleName, \n description:record.description, isActive: true\n // isRoleAvailable: true, \n };\n\n this.props.roleStatusMaint(this, this.onActivateSuccess, this.onStatusActiveFailure, permissionObject, record.orgId);\n }\n if(action === \"deactive\"){\n \n let permissionObject = { mode: \"update\", roleName: record.roleName, \n description:record.description, isActive: false\n //isRoleAvailable: false, \n };\n\n this.props.roleStatusMaint(this, this.onDeactivateSuccess, this.onStatusDeactiveFailure, permissionObject, record.orgId);\n }\n else if ( action === \"delete-role\") {\n\n let permissionObject = { mode: \"delete\",\n roleName: record.roleName\n };\n this.props.roleStatusMaint(this, this.onDeleteSuccess, this.onStatusDeleteFailure, permissionObject, record.orgId);\n //this.props.rolePermissionMaint(this, this.onDeleteSuccess, this.onStatusFailure, permissionObject, record.orgId);\n }\n closePopover(); \n }\n\n onDeleteSuccess = (record:any) => {\n\n message.success(\"Role has been deleted successfully.\"); \n this.props.getOrgRoles(this, null, null, this.props.context.appContext.orgId, this.props.roleList.searchText); \n };\n\n onActivateSuccess = (record:any) => {\n\n message.success(\"Role has been activated successfully.\");\n this.props.getOrgRoles(this, null, null, this.props.context.appContext.orgId, this.props.roleList.searchText); \n };\n\n onDeactivateSuccess = (record:any) => {\n \n message.success(\"Role has been deactivated successfully.\");\n this.props.getOrgRoles(this, null, null, this.props.context.appContext.orgId, this.props.roleList.searchText); \n };\n\n onStatusDeleteFailure = (error: any) => {\n errorResponse(this, error, false); \n }\n\n onStatusActiveFailure = (error: any) => {\n errorResponse(this, error, false);\n }\n\n onStatusDeactiveFailure = (error: any) => {\n errorResponse(this, error, false);\n }\n\n render() { \n const { appContext } = this.props.context; \n const rolespermissions = getPermissions(this.props.permissions.permissions.role_settings);\n\n if(!this.props.context.user.contextUserIsAdmin && rolespermissions.length > 0 && !rolespermissions[1]) { \n history.push(\"/not-found\"); \n }\n\n const { roles } = this.props.roleList.roleMaint.orgRoles.data;\n const { tableRolesConfig, tableRolesData } = this.props.roleList;\n \n let iscreate = rolespermissions[0];\n let isread = rolespermissions[1];\n let isupdate = rolespermissions[2];\n let isdelete = rolespermissions[3];\n\n const tableColumns = [\n {\n title: \"Role Name\",\n dataIndex: \"roleName\",\n width: \"20%\",\n render: (roleName: string, record: any) => (\n <>\n {\n !(record.isActive) &&\n <Text type=\"danger\">{roleName}</Text>\n \n }\n {\n record.isActive &&\n <span>{roleName}</span>\n }\n </>\n )\n },\n {\n title:\"Description\", \n dataIndex: \"description\", \n width: \"30%\"\n },\n {\n title:\"Org Name\", \n dataIndex: \"sourceOrgName\", \n width: \"20%\"\n },\n {\n title:\"Status\", \n dataIndex: \"isActive\", \n width: \"12%\",\n render: (text: any, record: any) => (\n <>\n {\n record.isActive ? \"Active\" : \"Inactive\"\n } \n </>\n ) \n },\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <>\n {\n (isupdate === true || isdelete === true) && \n this.actions(record, appContext, appContext, isupdate, iscreate, isdelete)\n } \n </>\n )\n }\n \n ];\n\n return(\n\n <div data-id=\"roles-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col sm={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip>\n Roles\n </div>\n </div>\n </Col>\n <Col sm={24} lg={18} className=\"content-header-controls\">\n <Space size=\"middle\">\n {\n (isread) && \n <Search\n data-id=\"users-search-field\"\n placeholder=\"Search by role name, org name and active\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.props.roleList.searchText}\n />\n }\n {\n (iscreate) &&\n <div className=\"add-role-button\">\n <Button data-id=\"roles-search-new-role-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add-role\")}>\n <span>Role</span>\n </Button>\n </div>\n } \n \n {/* <div className=\"add-role-button\">\n <Tooltip title=\"Edit role\"> \n <Button data-id=\"roles-search-new-role-button\" type=\"primary\" icon={<EllipsisOutlined />} onClick={(e) => this.onAction(e, {}, \"edit-role\")}>\n \n </Button>\n </Tooltip>\n </div> */}\n \n </Space>\n </Col>\n </Row>\n <div className=\"mt-15\">\n {\n (isread) && \n <Table \n data-id=\"role-permissions-data\"\n {...tableRolesConfig} \n rowKey={(record) => record.roleName}\n columns={tableColumns}\n dataSource={tableRolesData}\n />\n }\n \n </div>\n <RoleMaint />\n <RolePermissionMaint />\n </div>\n\n );\n }\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data, \n roleList: state.rolesReducer.rolesState.roleList \n };\n};\n\nexport default connect(\n mapStateToProps,\n actions \n)(Roles);","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function alertsDm1SetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ALERTS_DM1_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function alertsSignalsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ALERTS_SIGNALS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function alertsCmdHistorySetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ALERTS_CMD_HISTORY_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function alertsDm1(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n page: number = 1, \n gatewayId?: string, \n mastertag?: string,\n isSeen?: string,\n timespanFromFilter?: string,\n timespanToFilter?: string,\n nicknameFilter?: string[],\n saFilter?: string[],\n spnFilter?: string[],\n fmiFilter?: string[],\n statusFilter?: string[],\n tagsFilter?: string[]\n) {\n return async (dispatch: any) => { \n let url = \"/ui/api/alerts/dm1\" + alertsAddAssetUrlParameters(gatewayId || \"\", mastertag || \"\"); \n\n Axios.get(\n appConfigs.server.URL + url, {\n responseType: \"json\", \n headers: {},\n params: {\n isSeen: isSeen,\n timespanFromFilter: timespanFromFilter,\n timespanToFilter: timespanToFilter,\n nicknameFilter: (nicknameFilter || []).join(\"~\"),\n saFilter: (saFilter || []).join(\"~\"),\n spnFilter: (spnFilter || []).join(\"~\"),\n fmiFilter: (fmiFilter || []).join(\"~\"),\n statusFilter: (statusFilter || []).join(\"~\"),\n tagsFilter: (tagsFilter || []).join(\"~\"),\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => {\n let data = response.data.data.dm1 == null || (response.data.data.dm1.length || 0) === 0 ? [] : response.data.data.dm1;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ \n type: \"ALERTS_DM1_GET_SUCCESS\", \n payload: {\n data: data, \n page: page, \n appliedFilters: {\n timespanFrom: timespanFromFilter,\n timespanTo: timespanToFilter,\n nickname : nicknameFilter, \n sa: saFilter, \n spn: spnFilter, \n fmi: fmiFilter, \n status: statusFilter,\n tags: tagsFilter\n }\n } \n }); \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n \n}\n\nexport function alertsDm1Filters(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n gatewayId?: string, \n mastertag?: string,\n timespanFromFilter?: string,\n timespanToFilter?: string,\n) {\n return async (dispatch: any) => { \n let url = \"/ui/api/alerts/dm1/filters\" + alertsAddAssetUrlParameters(gatewayId || \"\", mastertag || \"\"); \n\n Axios.get(\n appConfigs.server.URL + url, {\n responseType: \"json\", \n headers: {},\n params: {\n timespanFromFilter: timespanFromFilter,\n timespanToFilter: timespanToFilter\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.dm1Filters);\n }\n dispatch({ type: \"ALERTS_DM1_FILTERS_GET_SUCCESS\", data: response.data.data.dm1Filters });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function markAlerts(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n alertKeys: string[],\n viewAlertType: string,\n alertType: string,\n deleteAlerts: boolean,\n timespanFromFilter?: string,\n timespanToFilter?: string,\n gatewayId?: string, \n mastertag?: string, \n nicknameFilter?: string[],\n saFilter?: string[],\n spnFilter?: string[],\n fmiFilter?: string[],\n statusFilter?: string[],\n tagsFilter?: string[]\n ){\n return (dispatch: any) => {\n let url = \"/ui/api/alerts/\"+alertType+\"/\"+viewAlertType+\"/\"+deleteAlerts ;\n Axios.delete(\n appConfigs.server.URL + url, { data : {\n alertKeys: alertKeys && alertKeys.length>0?(alertKeys|| []).join(\"~\"):null,\n timespanFromFilter: timespanFromFilter,\n timespanToFilter: timespanToFilter, \n gatewayId: gatewayId, \n mastertag: mastertag,\n nicknameFilter: nicknameFilter && nicknameFilter.length>0?(nicknameFilter).join(\"~\"):null,\n saFilter: saFilter && saFilter.length>0?(saFilter || []).join(\"~\"):null,\n spnFilter: spnFilter && spnFilter.length>0? (spnFilter || []).join(\"~\"):null,\n fmiFilter: fmiFilter && fmiFilter.length>0?(fmiFilter || []).join(\"~\"):null,\n statusFilter: statusFilter && statusFilter.length>0?(statusFilter || []).join(\"~\"):null,\n tagsFilter: tagsFilter && tagsFilter.length>0?(tagsFilter || []).join(\"~\"):null\n } \n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n errorResponse(me, error);\n });\n\n };\n}\n\nexport function alertsSignals(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number = 1, \n gatewayId?: string, \n mastertag?: string,\n isSeen?: string,\n timespanFromFilter?: string,\n timespanToFilter?: string,\n nicknameFilter?: string[],\n statusFilter?: string[],\n tagsFilter?: string[]\n) {\n return async (dispatch: any) => { \n let url = \"/ui/api/alerts/signals\" + alertsAddAssetUrlParameters(gatewayId || \"\", mastertag || \"\");\n\n Axios.get(\n appConfigs.server.URL + url, {\n responseType: \"json\", \n headers: {},\n params: {\n isSeen: isSeen,\n timespanFromFilter: timespanFromFilter,\n timespanToFilter: timespanToFilter,\n nicknameFilter: (nicknameFilter || []).join(\"~\"),\n statusFilter: (statusFilter || []).join(\"~\"),\n tagsFilter: (tagsFilter || []).join(\"~\"),\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.signals == null || (response.data.data.signals.length || 0) === 0 ? [] : response.data.data.signals;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ \n type: \"ALERTS_SIGNALS_GET_SUCCESS\", \n payload: {\n data: data, \n page: page, \n appliedFilters: { \n timespanFrom: timespanFromFilter,\n timespanTo: timespanToFilter,\n nickname : nicknameFilter, \n status: statusFilter,\n tags: tagsFilter\n } \n } \n });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function alertsSignalsFilters(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n gatewayId?: string, \n mastertag?: string,\n timespanFromFilter?: string,\n timespanToFilter?: string,\n) {\n return async (dispatch: any) => { \n let url = \"/ui/api/alerts/signals/filters\" + alertsAddAssetUrlParameters(gatewayId || \"\", mastertag || \"\");\n\n Axios.get(\n appConfigs.server.URL + url, {\n responseType: \"json\", \n headers: {},\n params: {\n timespanFromFilter: timespanFromFilter,\n timespanToFilter: timespanToFilter\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.signalsFilters);\n }\n dispatch({ type: \"ALERTS_SIGNALS_FILTERS_GET_SUCCESS\", data: response.data.data.signalsFilters });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function alertsCmdHistory(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n page: number = 1, \n gatewayId?: string, \n mastertag?: string,\n viewHistoryType?: string,\n timespanFromFilter?: string,\n timespanToFilter?: string,\n nicknameFilter?: string[],\n commandFilter?: string[],\n operatorFilter?: string[],\n userFilter?: string[],\n typeFilter?: string[],\n statusFilter?: string[],\n tagsFilter?: string[]\n) {\n return async (dispatch: any) => { \n let url = \"/ui/api/alerts/cmd-history\" + alertsAddAssetUrlParameters(gatewayId || \"\", mastertag || \"\"); \n\n Axios.get(\n appConfigs.server.URL + url, {\n responseType: \"json\", \n headers: {},\n params: {\n timespanFromFilter: timespanFromFilter,\n timespanToFilter: timespanToFilter,\n nicknameFilter: (nicknameFilter || []).join(\"~\"),\n commandFilter: (commandFilter || []).join(\"~\"),\n operatorFilter: (operatorFilter || []).join(\"~\"),\n userFilter: (userFilter || []).join(\"~\"),\n typeFilter: (typeFilter || []).join(\"~\"),\n statusFilter: (statusFilter || []).join(\"~\"),\n tagsFilter: (tagsFilter || []).join(\"~\"),\n viewHistoryType: (viewHistoryType || 'latest'),\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => {\n let data = response.data.data.cmdHistory == null || (response.data.data.cmdHistory.length || 0) === 0 ? [] : response.data.data.cmdHistory;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ \n type: \"ALERTS_CMD_HISTORY_GET_SUCCESS\", \n payload: {\n data: data, \n page: page, \n appliedFilters: {\n timespanFrom: timespanFromFilter,\n timespanTo: timespanToFilter,\n nickname : nicknameFilter, \n command: commandFilter, \n operator: operatorFilter, \n user: userFilter, \n type: typeFilter, \n status: statusFilter,\n tags: tagsFilter\n }\n } \n }); \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n \n}\n\nexport function alertsCmdHistoryFilters(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n gatewayId?: string, \n mastertag?: string,\n timespanFromFilter?: string,\n timespanToFilter?: string,\n) {\n return async (dispatch: any) => { \n let url = \"/ui/api/alerts/cmd-history/filters\" + alertsAddAssetUrlParameters(gatewayId || \"\", mastertag || \"\"); \n\n Axios.get(\n appConfigs.server.URL + url, {\n responseType: \"json\", \n headers: {},\n params: {\n timespanFromFilter: timespanFromFilter,\n timespanToFilter: timespanToFilter\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.cmdHistoryFilters);\n }\n dispatch({ type: \"ALERTS_CMD_HISTORY_FILTERS_GET_SUCCESS\", data: response.data.data.cmdHistoryFilters });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\n\nexport function getAsset(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mastertag: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets\", {\n responseType: \"json\", \n headers: {},\n params: {\n allData: true,\n mastertag: mastertag\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n let record = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? {} : response.data.data.assets[0];\n callbackFnSuccess(mastertag, record);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nfunction alertsAddAssetUrlParameters(gatewayId:string, mastertag:string):string {\n if ((gatewayId || \"\") !== \"\" || (mastertag || \"\") !== \"\") {\n return \"?\" +\n ((gatewayId || \"\") !== \"\" ? \"gatewayId=\" + gatewayId : \"\") + \n ((gatewayId || \"\") !== \"\" && (mastertag || \"\") !== \"\" ? \"&\" : \"\") + \n ((mastertag || \"\") !== \"\" ? \"mastertag=\" + mastertag : \"\");\n } \n else {\n return \"\";\n }\n}\n\nexport function getCumminsRecommendations(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n alertId: string,\n gatewayId: string,\n sa: number,\n spn: number,\n fmi: number,\n oc: number,\n detectionTime:string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/alerts/dm1/cmns\", {\n responseType: \"json\",\n headers: {},\n params: {\n gatewayId: gatewayId,\n sa: sa,\n spn: spn,\n fmi: fmi,\n oc: oc,\n detected_at:detectionTime\n }\n }\n )\n .then((response: any) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.dm1_cmns);\n }\n })\n .catch(function (error: any) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n\n }\n}\n\nexport function getParkerRecommendations(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n sa: number,\n spn: number,\n fmi: number\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/alerts/dm1/parker-recommendations\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId: orgId,\n sa: sa,\n spn: spn,\n fmi: fmi\n }\n }\n )\n .then((response: any) => {\n if (callbackFnSuccess != null) {\n console.log(\"after dm1recommendations API call response.data\", response.data.data)\n callbackFnSuccess(response.data.data.ParkerDmRecommendations);\n }\n })\n .catch(function (error: any) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n\n }\n}\n\nexport function getActivityAlerts(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number=1,\n searchText?: string,\n) {\n return async (dispatch: any) => {\n \n Axios.get(\n appConfigs.server.URL + \"/ui/api/activityalerts\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.activityalerts == null || (response.data.data.activityalerts.length || 0) === 0 ? [] : response.data.data.activityalerts;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ACTIVITY_GET_ALERTS_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function activityAlertsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ACTIVITY_ALERTS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} ","import Axios from \"axios\";\nimport { errorResponse } from \"../apiHelpers/apiHelpers\";\n\nexport function download(\n me: any,\n callbackSuccessFn: any,\n callbackErrorFn: any,\n url: string,\n fileName: string\n) {\n\n Axios(\n {\n url: url,\n method: \"GET\",\n responseType: \"blob\", \n }\n )\n .then(response => \n {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", fileName);\n document.body.appendChild(link);\n link.click();\n \n if (callbackSuccessFn != null) {\n callbackSuccessFn(response.data.data.context);\n }\n }\n )\n .catch(function (error) \n { \n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n }\n )\n}\n","import React from \"react\";\nimport { Form, Button, Modal, Tooltip, message, notification, Select, InputNumber, Alert } from 'antd';\nimport { ExportOutlined } from '@ant-design/icons';\nimport { FormInstance } from 'antd/lib/form';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport { uuidv4 } from \"../../utils/commonHelpers\";\nimport { download } from \"../../utils/api/download\";\n\nconst { Option } = Select;\n\ninterface State {\n visible: boolean;\n}\n\ninterface Props {\n alertsState: any;\n mastertag: string;\n mode: string;\n pageSize: number;\n totalRecords: number;\n currentPage: number;\n selectedViewType: string\n}\n\nclass Export extends React.Component<Props, State> { \n\n state:State = {\n visible: false\n }\n \n formRef = React.createRef<FormInstance>();\n\n openModal = (e:any) => { \n e.preventDefault(); \n \n this.setState({\n visible: true\n });\n\n const me = this;\n setTimeout(function() {\n if (me.formRef.current! !== null) {\n me.formRef.current!.setFieldsValue({\n scope: \"current-page\"\n });\n }\n }, 250); \n }; \n\n cancelModal = (e?: any) => {\n if (e) {\n e.preventDefault();\n }\n \n this.setState({\n visible: false\n });\n\n this.formRef.current!.resetFields(); \n };\n\n totalPages = ():number => {\n return Math.floor(this.props.totalRecords / this.props.pageSize) + 1; \n }; \n\n downloadFm1Faults = (mode: string, scope: string, fromPage: number, toPage: number) => { \n const appliedFilters = this.props.alertsState.tabs[0].appliedFilters; \n const url = appConfigs.server.URL + \"/ui/api/alerts/\" + mode + \".csv\" +\n \"?scope=\" + scope + \n \"&fromPage=\" + fromPage + \n \"&toPage=\" + toPage +\n \"&pageSize=\" + this.props.alertsState.tabs[0].tableConfig.pagination.pageSize +\n \"&maxPages=\" + appConfigs.app.alerts.exportMaxPages +\n \"&mastertag=\" + encodeURIComponent((this.props.mastertag || \"\")) +\n \"&isSeen=\" + (this.props.selectedViewType || \"\") +\n \"×panFromFilter=\" + encodeURIComponent((appliedFilters.timespanFrom || \"\")) +\n \"×panToFilter=\" + encodeURIComponent((appliedFilters.timespanTo || \"\")) +\n \"&nicknameFilter=\" + encodeURIComponent((appliedFilters.nickname || []).join(\"~\")) +\n \"&saFilter=\" + encodeURIComponent((appliedFilters.sa || []).join(\"~\")) +\n \"&spnFilter=\" + encodeURIComponent((appliedFilters.spn || []).join(\"~\")) +\n \"&fmiFilter=\" + encodeURIComponent((appliedFilters.fmi || []).join(\"~\")) +\n \"&statusFilter=\" + encodeURIComponent((appliedFilters.status || []).join(\"~\")) +\n \"&tagsFilter=\" + encodeURIComponent((appliedFilters.tags || []).join(\"~\")) +\n \"&timeZone=\" + encodeURIComponent((Intl.DateTimeFormat().resolvedOptions().timeZone || \"\")) +\n \"&languageTag=\" + encodeURIComponent((navigator.language || \"\"));\n\n download(this, null, null, url, mode + \"-\" + uuidv4() + \".csv\");\n }\n\n downloadSignalAlerts = (mode: string, scope: string, fromPage: number, toPage: number) => { \n const appliedFilters = this.props.alertsState.tabs[1].appliedFilters; \n const url = appConfigs.server.URL + \"/ui/api/alerts/\" + mode + \".csv\" +\n \"?scope=\" + scope + \n \"&fromPage=\" + fromPage + \n \"&toPage=\" + toPage +\n \"&pageSize=\" + this.props.alertsState.tabs[1].tableConfig.pagination.pageSize +\n \"&maxPages=\" + appConfigs.app.alerts.exportMaxPages +\n \"&mastertag=\" + encodeURIComponent((this.props.mastertag || \"\")) +\n \"&isSeen=\" + (this.props.selectedViewType || \"\") +\n \"×panFromFilter=\" + encodeURIComponent((appliedFilters.timespanFrom || \"\")) +\n \"×panToFilter=\" + encodeURIComponent((appliedFilters.timespanTo || \"\")) +\n \"&nicknameFilter=\" + encodeURIComponent((appliedFilters.nickname || []).join(\"~\")) +\n \"&statusFilter=\" + encodeURIComponent((appliedFilters.status || []).join(\"~\")) +\n \"&tagsFilter=\" + encodeURIComponent((appliedFilters.tags || []).join(\"~\")) +\n \"&timeZone=\" + encodeURIComponent((Intl.DateTimeFormat().resolvedOptions().timeZone || \"\")) +\n \"&languageTag=\" + encodeURIComponent((navigator.language || \"\"));\n \n download(this, null, null, url, mode + \"-\" + uuidv4() + \".csv\");\n }\n \n onFinish = (values: any) => { \n\n let fromPage:number = 1;\n let toPage:number = 1;\n \n if (values.scope === \"all-pages\") {\n fromPage = 1;\n toPage = this.totalPages();\n }\n if (values.scope === \"current-page\") {\n fromPage = this.props.currentPage;\n toPage = this.props.currentPage;\n }\n if (values.scope === \"custom-pages\") {\n fromPage = values.fromPage ? values.fromPage : this.totalPages();\n toPage = values.toPage ? values.toPage : this.totalPages();\n }\n //ops-2059 fix\n if (this.props.mode === \"dm1-faults\") {\n this.downloadFm1Faults(this.props.mode, values.scope, fromPage, toPage); \n }\n else {\n this.downloadSignalAlerts(this.props.mode, values.scope, fromPage, toPage); \n }\n };\n\n scopeChange = (value: string) => { \n if (value === \"custom-pages\") {\n if (!this.formRef.current?.getFieldValue(\"fromPage\")) {\n this.formRef.current!.setFieldsValue({\n fromPage: 1\n });\n }\n if (!this.formRef.current?.getFieldValue(\"toPage\")) {\n const me = this;\n this.formRef.current!.setFieldsValue({\n toPage: Math.min(me.totalPages(), 5)\n });\n }\n }\n }\n\n validateCustomPages = (fromPage: number, toPage: number) : Promise<any> => { \n if (fromPage && toPage) {\n if (fromPage > toPage) {\n return Promise.reject(\n \"Value must be less than, or equal to, To Page\"\n );\n }\n }\n if (!(fromPage || toPage)) {\n return Promise.reject(\n \"Enter at least the starting page\"\n );\n }\n \n return Promise.resolve();\n }\n\n render() {\n\n const me = this;\n\n return (\n\n <div>\n <Tooltip title=\"Export data into .csv file\"> \n <Button data-id=\"alerts-export-button\" href=\"# \" className=\"mt-10\" onClick={(e) => {this.openModal(e)}} target=\"_new\" type=\"default\" icon={<ExportOutlined />}>\n <span>Export</span>\n </Button>\n </Tooltip>\n\n <Modal\n title={\"Export \" + (this.props.mode === \"dm1-faults\" ? \"DM1 Alerts\" : \"Signal Alerts\")}\n visible={this.state.visible}\n onCancel={this.cancelModal}\n okButtonProps={{ hidden: true }}\n cancelButtonProps={{ hidden: true }}\n footer={[\n <Button type=\"primary\" form=\"alertsExportForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n ]}\n > \n <Form\n id=\"alertsExportForm\"\n ref={this.formRef}\n layout=\"vertical\"\n onFinish={this.onFinish}\n className=\"mt-10\"\n > \n <Form.Item\n label=\"Scope\" \n name=\"scope\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select\n style={{ minWidth: 180}}\n onChange={this.scopeChange}\n >\n <Option key=\"current-page\" value=\"current-page\">Current Page</Option>\n <Option key=\"custom-pages\" value=\"custom-pages\">Custom Pages</Option>\n <Option key=\"all-pages\" value=\"all-pages\">All Pages</Option>\n </Select> \n </Form.Item>\n\n <Form.Item \n noStyle\n shouldUpdate={true}\n > \n {({ getFieldValue }) =>\n getFieldValue(\"scope\") === \"custom-pages\" ? (\n <>\n <Form.Item\n label=\"From Page\"\n name=\"fromPage\" \n style={{ display: 'inline-block', width: 'calc(50% - 12px)' }} \n dependencies={[\"toPage\"]}\n rules={[\n ({ getFieldValue }) => ({\n validator(rule, value) {\n return me.validateCustomPages(\n value,\n getFieldValue(\"toPage\")\n );\n },\n }),\n ]}\n >\n <InputNumber \n min={1} \n precision={0}\n pattern=\"[0-9]*\"\n max={this.totalPages()} \n style={{ width: '100%' }} \n />\n </Form.Item>\n <span\n style={{ display: 'inline-block', width: '24px'}}\n />\n <Form.Item\n label=\"To Page\"\n name=\"toPage\"\n style={{ display: 'inline-block', width: 'calc(50% - 12px)' }}\n > \n <InputNumber \n min={1} \n precision={0}\n pattern=\"[0-9]*\" \n max={this.totalPages()} \n style={{ width: '100%' }} \n />\n </Form.Item>\n </>\n ) : null\n }\n </Form.Item>\n\n <Form.Item \n noStyle\n shouldUpdate={true}\n > \n {({ getFieldValue }) =>\n (getFieldValue(\"scope\") === \"custom-pages\" && (getFieldValue(\"toPage\") || 1) - (getFieldValue(\"fromPage\") || 1) + 1 > appConfigs.app.alerts.exportMaxPages)|| \n (getFieldValue(\"scope\") === \"all-pages\" && this.totalPages() > appConfigs.app.alerts.exportMaxPages) ? (\n <Alert\n className=\"mt-20\"\n message=\"Info\"\n description={`Due to performance considerations, up to ${appConfigs.app.alerts.exportMaxPages} pages will be exported in a single file.`}\n type=\"info\"\n showIcon\n />\n ) : null\n }\n </Form.Item>\n \n </Form>\n </Modal>\n </div>\n\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n signalCollections: state.templateDetailsReducers.templateDetailsState.tabs[0],\n signalCollectionMaint: state.templateDetailsReducers.templateDetailsState.tabs[0].signalCollectionMaint,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Export);","import React from \"react\";\nimport moment from \"moment\";\nimport { Form, DatePicker } from 'antd';\n\nconst { RangePicker } = DatePicker;\n\nclass Timespan extends React.Component<{}, {}> {\n\n disabledDate = (value:any) => {\n return value && !value.isBetween(moment().subtract(6, 'months'), moment());\n }; \n \n timeRange = (start:number, end:number):number[] => {\n const arr:number[] = [];\n\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n\n return arr;\n }; \n\n disabledTime = (value:any, type:string) => {\n return {\n disabledHours: () => (value && moment().isSame(value, \"d\") ? this.timeRange(Math.min(moment().hours() + 1, 23), 23) : []),\n disabledMinutes: () => [],\n disabledSeconds: () => []\n };\n }; \n\n render() { \n\n return (\n\n <Form.Item \n name=\"timespan\" \n label=\"Timespan\"\n >\n <RangePicker \n showTime \n disabledDate={this.disabledDate}\n disabledTime={this.disabledTime}\n ranges={{\n Today: [moment().startOf('day'), moment()],\n 'This Week': [moment().startOf('week'), moment()],\n 'This Month': [moment().startOf('month'), moment()]\n }}\n />\n </Form.Item>\n )\n }\n}\n\nexport default Timespan;","import React, { Component } from \"react\";\nimport { Moment } from \"moment\";\nimport { Form, Row, Col, Collapse, Select, Button, Space, Tooltip } from 'antd';\nimport { CheckCircleTwoTone } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport Timespan from \"./Timespan\";\nimport \"./alerts.css\";\n\nconst { Option } = Select;\nconst { Panel } = Collapse;\n\ninterface Prop {\n alertsSignalsSetPagination: Function,\n alertsSignals: Function,\n alertsSignalsFilters: Function, \n context: any,\n alertsState: any, \n nickname?: string[],\n status: string[],\n isread: boolean,\n viewAlertType: string\n}\n\ninterface State {\n nickname?: string[],\n status: string[],\n isread: boolean\n}\n\nclass AssetsSignalsFilters extends Component<Prop, State> {\n \n state:State = {\n nickname: [],\n status: [],\n isread: false\n }\n\n formRef = React.createRef<FormInstance>();\n\n componentDidUpdate(prevProps: Prop) {\n if ((this.props.nickname || []).toString() !== (prevProps.nickname || []).toString()) {\n this.setState({ nickname: this.props.nickname, status: this.props.status, isread: this.props.isread }); \n } \n }\n\n resetFilters = () => { \n const me = this;\n\n this.setState({ nickname: [], status: [] }); \n setTimeout(function () {\n me.formRef.current?.resetFields(); \n me.applyFilters(); \n }, 150); \n }\n\n applyFilters = () => { \n let form = this.formRef.current;\n const timespan:Moment[] = form?.getFieldValue(\"timespan\");\n const timespanFrom = (timespan ? timespan[0].format('YYYY-MM-DD HH:mm:ss') : \"\");\n const timespanTo = (timespan ? timespan[1].format('YYYY-MM-DD HH:mm:ss') : \"\");\n\n this.props.alertsSignals(\n this, \n null, \n null, \n 1, \n null,\n null,\n this.props.viewAlertType,\n timespanFrom,\n timespanTo,\n form?.getFieldValue(\"nickname\") || \"\",\n form?.getFieldValue(\"status\") || \"\",\n form?.getFieldValue(\"tags\") || \"\"\n ); \n this.props.alertsSignalsFilters(\n this, \n null, \n null, \n null, \n null, \n timespanFrom, \n timespanTo\n ); \n };\n\n render() { \n\n const { filters, appliedFilters } = this.props.alertsState.tabs[1];\n const filtersApplied = \n (appliedFilters.nickname && appliedFilters.nickname.length || 0) || //eslint-disable-line \n (appliedFilters.status && appliedFilters.status.length || 0) || //eslint-disable-line \n (appliedFilters.tags && appliedFilters.tags.length || 0) || //eslint-disable-line \n ((appliedFilters.timespanFrom || \"\") !== \"\") || //eslint-disable-line \n ((appliedFilters.timespanTo || \"\") !== \"\"); //eslint-disable-line \n const filtersHeader = (\n <span>Filters {filtersApplied ? <Tooltip title=\"Applied Filter\"><CheckCircleTwoTone /></Tooltip> : \"\"}</span>\n );\n const filterLayout = {\n labelCol: { span: 3 },\n wrapperCol: { span: 21 }\n };\n \n\n return (\n <>\n {\n filters !== null && this.props.isread &&\n <div data-id=\"alerts-dm1-faults-filters\"> \n <Collapse bordered={false} defaultActiveKey={['0']} className=\"auto-close\">\n <Panel header={filtersHeader} key=\"1\">\n <Form \n {...filterLayout}\n ref={this.formRef}\n name=\"filter\"\n initialValues={{ \n nickname: this.state.nickname,\n status: this.state.status\n }} \n >\n <Row gutter={16}>\n <Col xs={{ span: 24 }} md={{ span: 20 }} xl={{ span: 16 }}>\n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Timespan />\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"nickname\"\n label=\"Asset\"\n >\n <Select \n data-id=\"alerts-dm1-faults-filters-nickname\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.nicknameSorted.map((record:any, index:number) => (\n <Option key={\"nickname-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"status\"\n label=\"Status\"\n >\n <Select \n data-id=\"alerts-dm1-faults-filters-status\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.statusSorted.map((record:any, index:number) => (\n <Option key={\"status-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n\n\n <Row gutter={16}>\n\n\n <Col span={23} offset={1}>\n <Form.Item\n name=\"tags\"\n label=\"Tags\"\n >\n\n <Select\n data-id=\"alerts-dm1-faults-filters-tags\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.tagsSorted?.map((record:any, index:number) => (\n <Option key={\"tag-\" + index} value={record.toUpperCase()}>\n <div className=\"demo-option-label-item\">\n <strong>{record.toUpperCase()}</strong>\n </div>\n </Option>\n ))}\n </Select> \n </Form.Item>\n </Col> \n </Row> \n\n\n <Space size=\"middle\">\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"alerts-dm1-faults-filters-reset-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.resetFilters} \n >\n Reset\n </Button>\n )}\n </Form.Item>\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"alerts-dm1-faults-filters-submit-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.applyFilters} \n disabled={\n !(\n (this.formRef.current?.getFieldValue(\"nickname\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"status\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"tags\") || []).length !== 0 ||\n this.formRef.current?.getFieldValue(\"timespan\")\n ) \n } \n >\n Submit\n </Button>\n )}\n </Form.Item>\n </Space>\n </Col>\n </Row>\n </Form>\n </Panel> \n </Collapse>\n </div>\n\n }\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetsSignalsFilters);\n ","import React, { Component } from \"react\";\nimport { Table, Button, Tooltip, message, Modal, Radio} from 'antd';\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport { \n CheckCircleOutlined, CloseCircleOutlined\n} from \"@ant-design/icons\";\n\nimport history from '../../utils/history';\nimport { localizeUtcDate, formatGps, getPermissions, formatNumber } from \"../../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport AlertsSignalsFilters from \"./AlertsSignalsFilters\";\nimport \"./alerts.css\";\n//import { getPermissions } from \"../../actions/permissions\";\n\ninterface Prop {\n alertsSignalsSetPagination: Function,\n alertsSignals: Function,\n alertsSignalsFilters: Function,\n markAlerts: Function,\n getAsset: Function, \n context: any,\n alertsState: any,\n permissions: any,\n mastertag: string,\n status: string,\n isread: boolean,\n selectedType: Function\n}\n\ninterface State {\n nickname: string[],\n selectedRowKeys: string[], \n loading: boolean,\n isModalVisible: boolean,\n viewAlertType: string,\n deleteAlerts: boolean \n}\n\nclass AssetsSignals extends Component<Prop, State> {\n \n state:State = {\n nickname: [],\n selectedRowKeys: [], \n loading: false,\n isModalVisible: false,\n viewAlertType: \"unseen\",\n deleteAlerts: false\n }\n\n componentDidMount () { \n if ((this.props.mastertag || \"\") !== \"\") {\n this.props.getAsset(this, this.getAssetSuccess, null, this.props.mastertag); \n }\n else {\n this.componentUpdate(); \n }\n } \n\n getAssetSuccess = (mastertag: string, asset:any) => { \n this.setState({ nickname: [asset.nickname] });\n this.componentUpdate(); \n };\n\n componentUpdate = () => {\n const appliedFilters = this.props.alertsState.tabs[1].appliedFilters;\n this.props.alertsSignalsSetPagination(this.onPaginationChange);\n if(!this.filtersApplied()){\n this.props.alertsSignals(this, null, null, 1, null, null, this.state.viewAlertType, null, null, this.state.nickname, this.props.status ? [this.props.status] : null); \n this.props.alertsSignalsFilters(this, null, null);\n }\n else\n {\n this.props.alertsSignals(this, null, null, 1, null, null, this.state.viewAlertType,\n appliedFilters.timespanFrom, appliedFilters.timespanTo, appliedFilters.nickname,\n appliedFilters.status);\n }\n };\n\n onPaginationChange = (page: number) => { \n const appliedFilters = this.props.alertsState.tabs[1].appliedFilters; \n this.props.alertsSignals(\n this, \n null, \n null, \n page,\n null,\n null,\n this.state.viewAlertType,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.status\n );\n };\n\n goToAsset = (e: any, mastertag: string) => {\n e.preventDefault();\n history.push(\"/assets/\" + mastertag);\n };\n\n onSelectChange = (selectedRowKeys:any) => {\n this.setState({ selectedRowKeys });\n };\n\n filtersApplied = () => {\n const appliedFilters = this.props.alertsState.tabs[1].appliedFilters;\n let filtersApplied = false;\n return filtersApplied = \n (appliedFilters.nickname && appliedFilters.nickname.length || 0) || //eslint-disable-line \n (appliedFilters.status && appliedFilters.status.length || 0) || //eslint-disable-line \n (appliedFilters.tags && appliedFilters.tags.length || 0) || //eslint-disable-line \n ((appliedFilters.timespanFrom || \"\") !== \"\") || //eslint-disable-line \n ((appliedFilters.timespanTo || \"\") !== \"\"); //eslint-disable-line \n }\n\n markAlertsSuccess = (data:any) => { \n let status = (this.state.deleteAlerts) ?\n (this.state.selectedRowKeys.length>0? `Selected ${(this.state.viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts got deleted.`\n : (this.filtersApplied()? `All the filtered ${(this.state.viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts got deleted.` \n :`All the ${(this.state.viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts got deleted.`))\n :\n `Selected alerts are marked as ${(this.state.viewAlertType === 'unseen')? 'Seen' : 'Unseen'}`\n message.success(status);\n this.setState({loading: false, selectedRowKeys:[]});\n this.componentUpdate();\n }\n markAlertsFail = (error:any) => {\n this.setState({loading: false, selectedRowKeys:[]});\n // message.error(\"Selected alerts failed to delete \"+error.Error); \n }\n deleteSignalAlerts = () => {\n const appliedFilters = this.props.alertsState.tabs[1].appliedFilters; \n this.props.markAlerts(this,this.markAlertsSuccess,this.markAlertsFail,this.state.selectedRowKeys, \n this .state.viewAlertType,\n \"signals\",\n this.state.deleteAlerts, \n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n null,\n null,\n appliedFilters.nickname,\n null,\n null,\n null,\n appliedFilters.status,\n appliedFilters.tags\n );\n this.setState({loading: true});\n }\n showModal = (e:any, isDeleted: boolean) => {\n if(isDeleted)\n {\n this.setState({deleteAlerts: true}); \n }\n else\n {\n this.setState({deleteAlerts: false});\n }\n this.setState({isModalVisible: true});\n };\n \n handleOk = () => {\n this.setState({isModalVisible: false});\n this.deleteSignalAlerts();\n };\n \n handleCancel = () => {\n this.setState({isModalVisible: false});\n this.setState({loading: false, selectedRowKeys:[]});\n };\n\n onChangeViewAlert = (e:any) => {\n const appliedFilters = this.props.alertsState.tabs[1].appliedFilters;\n this.setState({\n viewAlertType: e.target.value,\n selectedRowKeys: [] \n });\n this.props.selectedType(e.target.value);\n //this.props.alertsSignals(this, null, null, 1, null, null, e.target.value, null, null, this.state.nickname, this.props.status ? [this.props.status] : null);\n this.props.alertsSignals(\n this, \n null, \n null, \n 1,\n null,\n null,\n e.target.value,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.status\n );\n };\n\n render() { \n const result = getPermissions(this.props.permissions.permissions.alert_settings); \n let isDelete = result[3];\n const { tableConfig, tableData } = this.props.alertsState.tabs[1]; \n const { loading, selectedRowKeys, viewAlertType } = this.state;\n \n const rowSelection = (isDelete)? {\n selectedRowKeys,\n onChange: this.onSelectChange,\n }:{getCheckboxProps: (record:any)=>({disabled: true})};\n const hasSelected = selectedRowKeys.length > 0;\n\n const tableColumns = [\n {\n title: \"Status\",\n dataIndex: \"severity\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\"> \n {\n record.transition === \"positive\" &&\n record.severity === \"Info\" &&\n <><span className=\"dot alert-status-blue \"/>{record.severity}</>\n }\n {\n record.transition === \"positive\" &&\n record.severity === \"Critical\" &&\n <><span className=\"dot alert-status-red \"/>{record.severity}</>\n }\n {\n record.transition === \"positive\" &&\n record.severity === \"Warning\" &&\n <><span className=\"dot alert-status-orange\"/>{record.severity}</>\n }\n {\n record.transition === \"negative\" &&\n <><span className=\"dot alert-status-green\"/>Normal</>\n }\n </span>\n )\n },\n {\n title: \"Signal\",\n dataIndex: \"signalName\"\n },\n {\n title: \"Value\",\n dataIndex: \"signalDescription\",\n render: (text: string, record: any) => (\n <div style={{ wordWrap: 'break-word', wordBreak: 'break-word' }}>\n {formatNumber(text.split(/[:(]/)[1])}\n </div>\n )\n },\n {\n title: \"Detected\",\n dataIndex: \"triggerTime\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (triggerTime: string, record: any) => (\n <>{localizeUtcDate(triggerTime, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: \"Threshold\",\n dataIndex: \"signalThreshold\",\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Location\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (text: any, record: any) => (\n <>\n {\n record.locationLatitude &&\n record.locationLongitude &&\n <span>{formatGps(record.locationLatitude, record.locationLongitude)}</span>\n }\n </>\n \n ) \n },\n {\n title: \"Org Name\",\n dataIndex: \"orgName\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (text: any, record: any) => {\n let parents = record?.orgPathName?.includes(\"~\") ? record?.orgPathName.split('~') : [record?.orgPathName];\n if (parents.length > 1) {\n parents = parents.filter((parent: any) => {\n if (!parent.toLowerCase().includes(\"parker\")) {\n return parent\n }\n })\n }\n return (\n parents.length > 2 ?\n <>\n <span className=\"no-word-wrap\">\n <Tooltip overlayInnerStyle={{ width: '350px' }} title={\n parents.map((parent: any, index: number) => {\n return parents.length - 1 == index ? parent : parent + \" \\\\ \" \n })\n }>\n <span>{record.orgName}</span>\n </Tooltip>\n </span> \n </>\n : <span>{record.orgName}</span>\n )\n }\n },\n {\n title: \"Asset\",\n dataIndex: \"nickname\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (text: any, record: any) => (\n <a href=\"# \" onClick={(e) => {this.goToAsset(e, record.mastertag)}}> \n {record.nickname || record.mastertag} \n </a>\n ) \n }\n ];\n\n return (\n <> \n <AlertsSignalsFilters \n nickname={this.state.nickname} \n status={(this.props.status || \"\") === \"\" ? [] : [this.props.status]} \n isread ={this.props.isread}\n viewAlertType={this.state.viewAlertType} \n />\n {\n this.props.isread &&\n <div>\n <br/>\n <>\n <div style = {{width:'85%' , display:'inline-block'}}>\n <span style={{ margin: 8 }}> \n <Radio.Group value={viewAlertType} buttonStyle=\"solid\" onChange={this.onChangeViewAlert} >\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title=\"Unseen/New Alerts\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"unseen\">\n <CheckCircleOutlined className=\"pr-5\" />Unseen\n </Radio.Button>\n </div>\n </Tooltip>\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title=\"Seen Alerts\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"seen\">\n <CloseCircleOutlined className=\"pr-5\" />Seen\n </Radio.Button>\n </div>\n </Tooltip>\n </Radio.Group>\n </span>\n </div>\n <div style = {{display:'inline-block'}}>\n <Button type=\"primary\" \n disabled={(tableData || []).length === 0 || tableData === null || \n (isDelete || \"\") === \"\" || isDelete === null || !isDelete } \n onClick={(e:any)=>this.showModal(e,true)} danger>Clear {(viewAlertType === 'unseen')? 'Unseen' : 'Seen'} Alerts</Button>\n </div>\n </>\n <br/>\n <div style={{ margin: 16 }}>\n \n <Button type = \"primary\" onClick = {(e:any)=>this.showModal(e,false)} disabled={!hasSelected} loading={loading}>\n {(viewAlertType === 'unseen')? 'Mark as Seen' : 'Mark as Unseen'}\n </Button>\n <Modal title=\"Confirm\" visible={this.state.isModalVisible} onOk={this.handleOk} onCancel={this.handleCancel}>\n { (this.state.deleteAlerts) ?\n (selectedRowKeys.length>0? `Are you sure you want to delete the selected ${(viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts?`\n :this.filtersApplied()?`Are you sure you want to delete the filtered ${(viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts?`\n :`Are you sure you want to delete all the ${(viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts?`)\n :\n `Mark selected alerts as ${(viewAlertType === 'unseen')? 'Seen' : 'Unseen'}?`\n }\n </Modal>\n <span style={{ marginLeft: 8 }}>\n {hasSelected ? `Selected ${selectedRowKeys.length} alerts to mark as ${(viewAlertType === 'unseen')? 'Seen' : 'Unseen'}` : ''}\n </span>\n </div>\n \n <Table rowSelection={rowSelection}\n data-id=\"alerts-signal-alarms-data\" \n {...tableConfig}\n rowKey={(record) => record.alertId}\n columns={tableColumns}\n dataSource={tableData}\n className=\"mt-20\"\n />\n </div>\n }\n </>\n \n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetsSignals);","import React, { Component } from \"react\";\nimport { Moment } from \"moment\";\nimport { Form, Row, Col, Collapse, Select, Button, Space, Tooltip } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { CheckCircleTwoTone } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport Timespan from \"./Timespan\";\nimport \"./alerts.css\";\n\nconst { Option } = Select;\nconst { Panel } = Collapse;\n\ninterface Prop { \n alertsDm1: Function,\n alertsDm1Filters: Function,\n context: any,\n alertsState: any, \n nickname?: string[],\n isread: boolean,\n viewAlertType: string\n}\n\ninterface State {\n nickname?: string[],\n isread: boolean \n}\n\nclass AlertsDm1Filters extends Component<Prop, State> {\n\n state:State = {\n nickname: [],\n isread: false \n }\n\n formRef = React.createRef<FormInstance>();\n\n componentDidUpdate(prevProps: Prop) {\n if ((this.props.nickname || []).toString() !== (prevProps.nickname || []).toString()) {\n this.setState({ nickname: this.props.nickname,isread: this.props.isread }); \n } \n }\n\n resetFilters = () => { \n const me = this;\n\n this.setState({ nickname: [] }); \n setTimeout(function () {\n me.formRef.current?.resetFields(); \n me.applyFilters(); \n }, 150); \n }\n\n applyFilters = () => { \n let form = this.formRef.current;\n const timespan:Moment[] = form?.getFieldValue(\"timespan\");\n const timespanFrom = (timespan ? timespan[0].format('YYYY-MM-DD HH:mm:ss') : \"\");\n const timespanTo = (timespan ? timespan[1].format('YYYY-MM-DD HH:mm:ss') : \"\");\n\n this.props.alertsDm1(\n this, \n null, \n null, \n 1, \n null,\n null,\n this.props.viewAlertType,\n timespanFrom,\n timespanTo,\n form?.getFieldValue(\"nickname\") || \"\",\n form?.getFieldValue(\"sa\") || \"\",\n form?.getFieldValue(\"spn\") || \"\",\n form?.getFieldValue(\"fmi\") || \"\",\n form?.getFieldValue(\"status\") || \"\",\n form?.getFieldValue(\"tags\") || \"\"\n ); \n this.props.alertsDm1Filters(\n this, \n null, \n null, \n null, \n null, \n timespanFrom, \n timespanTo\n ); \n };\n \n render() { \n\n const me = this;\n const { filters, appliedFilters } = this.props.alertsState.tabs[0];\n const filtersApplied = \n (appliedFilters.nickname && appliedFilters.nickname.length || 0) || //eslint-disable-line \n (appliedFilters.sa && appliedFilters.sa.length || 0) || //eslint-disable-line \n (appliedFilters.spn && appliedFilters.spn.length || 0) || //eslint-disable-line \n (appliedFilters.fmi && appliedFilters.fmi.length || 0) || //eslint-disable-line \n (appliedFilters.status && appliedFilters.status.length || 0) || //eslint-disable-line \n (appliedFilters.tags && appliedFilters.tags.length || 0) || //eslint-disable-line \n ((appliedFilters.timespanFrom || \"\") !== \"\") || //eslint-disable-line \n ((appliedFilters.timespanTo || \"\") !== \"\"); //eslint-disable-line \n const filtersHeader = (\n <span>Filters {filtersApplied ? <Tooltip title=\"Applied Filter\"><CheckCircleTwoTone /></Tooltip> : \"\"}</span>\n );\n const filterLayout = {\n labelCol: { span: 3 },\n wrapperCol: { span: 21 }\n };\n\n return (\n <>\n {\n filters !== null && this.props.isread &&\n <div data-id=\"alerts-dm1-faults-filters\"> \n <Collapse bordered={false} defaultActiveKey={['0']} className=\"auto-close\">\n <Panel header={filtersHeader} key=\"1\">\n <Form \n {...filterLayout}\n ref={this.formRef}\n name=\"filter\"\n initialValues={{ \n nickname: this.state.nickname\n }} \n >\n <Row gutter={16}>\n <Col xs={{ span: 24 }} md={{ span: 20 }} xl={{ span: 16 }}>\n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Timespan />\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"nickname\"\n label=\"Asset\"\n >\n <Select \n data-id=\"alerts-dm1-faults-filters-nickname\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.nicknameSorted.map((record:any, index:number) => (\n <Option key={\"nickname-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"sa\"\n label=\"SA\"\n >\n <Select \n data-id=\"alerts-dm1-faults-filters-sa\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.saSorted.map((record:any, index:number) => (\n <Option key={\"sa-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"spn\"\n label=\"SPN\"\n >\n <Select \n data-id=\"alerts-dm1-faults-filters-spn\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.spnSorted.map((record:any, index:number) => (\n <Option key={\"spn-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"fmi\"\n label=\"FMI\"\n >\n <Select \n data-id=\"alerts-dm1-faults-filters-fmi\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.fmiSorted.map((record:any, index:number) => (\n <Option key={\"fmi-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"status\"\n label=\"Status\"\n >\n <Select \n data-id=\"alerts-dm1-faults-filters-status\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.statusSorted.map((record:any, index:number) => (\n <Option key={\"status-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n\n\n <Row gutter={16}>\n\n\n <Col span={23} offset={1}>\n <Form.Item\n name=\"tags\"\n label=\"Tags\"\n \n >\n <Select\n style={{ width: '100%' }}\n placeholder=\"Select...\"\n mode=\"multiple\"\n showSearch\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n\n {filters !== null && filters.tagsSorted?.map((record:any, index:number) => (\n <Option key={\"tag-\" + index} value={record.toUpperCase()}>\n <div className=\"demo-option-label-item\">\n <strong>{record.toUpperCase()}</strong>\n </div>\n </Option>\n ))}\n </Select> \n </Form.Item>\n </Col> \n\n\n </Row> \n\n \n <Space size=\"middle\">\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"alerts-dm1-faults-filters-reset-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.resetFilters} \n >\n Reset\n </Button>\n )}\n </Form.Item>\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"alerts-dm1-faults-filters-submit-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.applyFilters} \n disabled={\n !(\n (this.formRef.current?.getFieldValue(\"nickname\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"sa\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"spn\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"fmi\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"status\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"tags\") || []).length !== 0 ||\n this.formRef.current?.getFieldValue(\"timespan\")\n ) \n } \n >\n Submit\n </Button>\n )}\n </Form.Item>\n </Space>\n </Col>\n </Row>\n </Form>\n </Panel> \n </Collapse>\n </div>\n }\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AlertsDm1Filters);\n ","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Modal } from \"antd\";\nimport * as actions from \"./actions\";\nimport \"./alerts.css\";\nimport moment from \"moment\";\nimport tzlookup from \"tz-lookup\";\ninterface Prop {\n context: any,\n alertsState: any,\n permissions: any,\n recommendation: any,\n assetOrgId:any \n}\ninterface State {\n\n}\n\nclass CumminsResponseView extends Component<Prop, State> { \n\n\n\n render() {\n let message:any,staticParams:any;\n var relatedFaultCode:any;\n // console.log(\"Cmns recm from API \", this.props.recommendation);\n if(this.props.recommendation!=\"\" && this.props.recommendation !== null){\n message=this.props.recommendation; \n staticParams = JSON.parse(message.staticParams);\n relatedFaultCode=JSON.parse(JSON.stringify(JSON.parse(message?.responseParams)?.Related));\n }\n \n function displayRelatedFaultCodeRows(){\n var rfc= relatedFaultCode.map((related:any)=>\n {\n return(\n <div className=\"divTableBody\" >\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">{JSON.parse(JSON.stringify(related)).Rel_Fault_Code}</div>\n <div className=\"divTableCell\">{JSON.parse(JSON.stringify(related)).Rel_SPN}</div>\n <div className=\"divTableCell\">{JSON.parse(JSON.stringify(related)).Rel_FMI}</div>\n <div className=\"divTableCell\">{findAssetTimeZone(staticParams,related.Rel_Occurrence_Date_Time)}</div>\n <div className=\"divTableCell\">{JSON.parse(JSON.stringify(related)).Rel_Fault_Code_Description}</div>\n </div>\n </div>\n )\n }\n )\n return rfc;\n }\n\n function findAssetTimeZone(coordinates: any, detected_at: any) {\n //detected_at(occurence time) is in Utc in database-but code is take it as IST and converting to asset timezone,\n // So displaying it in utc format, from utc we are converting to asset time zone.\n let assettime=moment(detected_at).toISOString(true).slice(0,23).concat('Z')\n var locale_date_str = new Date(assettime).toLocaleString(\"en-US\",\n {\n timeZone: tzlookup(coordinates.Latitude, coordinates.Longitude)\n });\n var geo_local_date_str = new Date(locale_date_str);\n return moment(geo_local_date_str).format('DD-MMM-YYYY, hh:mm:ss A');\n }\n return (\n // <div> {JSON.stringify(this.props.alertsState.dm1CumminsRecommendations)} </div>\n <div>\n {\n this.props.recommendation != \"\" && this.props.recommendation !== null &&\n <div>\n <div><b>Vehicle Information:</b></div>\n <div style={{width:400}} className=\"divTable\">\n <div className=\"divTableBody\">\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">Customer Equipment ID</div>\n <div className=\"divTableCell\">{message.mac !==\"\"?message.mac:message.nickname}</div>\n </div>\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">Engine Serial Number</div>\n <div className=\"divTableCell\">{JSON.parse(message.staticParams).Engine_Serial_Number}</div>\n </div>\n {\n JSON.parse(message.staticParams).VIN &&\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">VIN/OEM Equipment ID</div>\n <div className=\"divTableCell\">{JSON.parse(message.staticParams).VIN}</div>\n </div>\n }\n \n <div className=\"divTableRow\">\n <div className=\"divTableCell\">Engine Model</div>\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Service_Model_Name}</div>\n </div>\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">Mastertag</div>\n <div className=\"divTableCell\">{message.mastertag}</div>\n </div>\n </div>\n </div>\n <br/>\n\n <div><b>Recommended Action:</b></div>\n <div>\n {JSON.parse(message.responseParams).Instruction_To_Fleet_Mgr}\n </div>\n <br/>\n <div><b>Fault Code (FC) Information:</b></div>\n <div>{//JSON.stringify(message.responseParams)\n }\n </div>\n {\n JSON.parse(JSON.stringify(JSON.parse(message.responseParams).Related)) &&\n JSON.parse(JSON.stringify(JSON.parse(message.responseParams).Related)).length > 0 &&\n \n <div>\n <div className=\"divTable\">\n <div className=\"divTableHeading\">\n <div className=\"divTableHead\">Related Fault Code</div>\n <div className=\"divTableHead\">SPN</div>\n <div className=\"divTableHead\">FMI</div>\n <div className=\"divTableHead\">Timestamp ({moment.tz(tzlookup(staticParams.Latitude, staticParams.Longitude)).format('z')})</div>\n <div className=\"divTableHead\">Description</div>\n </div>\n {displayRelatedFaultCodeRows()}\n </div>\n </div>\n }\n {\n JSON.parse(JSON.stringify(JSON.parse(message.responseParams).Related)) &&\n JSON.parse(JSON.stringify(JSON.parse(message.responseParams).Related)).length > 0 &&\n <div className=\"divTableRecomendation\">\n <div className=\"divTableBody\">\n <div className=\"divTableRow\">\n <div className=\"divTableCellRecomendation\">\n Fault code {JSON.parse(JSON.stringify(JSON.parse(message.responseParams).Related)).map((related:any)=>\n { return JSON.parse(JSON.stringify(related)).Rel_Fault_Code }).join( \",\")} is likely related to active primary fault code {JSON.parse(message.responseParams).Primary_Fault_Code}. Recommended action, suggested root cause, and derate information are based on the primary fault code.\n </div>\n </div>\n </div>\n </div>\n }\n \n <br/>\n {\n JSON.parse(message.responseParams).Primary_Fault_Code ===\"\"?<div>\n <div className=\"divTable\">\n <div className=\"divTableHeading\">\n <div className=\"divTableHead\">Fault Code</div>\n <div className=\"divTableHead\">SPN</div>\n <div className=\"divTableHead\">FMI</div>\n <div className=\"divTableHead\">Timestamp ({moment.tz(tzlookup(staticParams.Latitude, staticParams.Longitude)).format('z')})</div>\n <div className=\"divTableHead\">Description</div>\n </div>\n <div className=\"divTableBody\">\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Code}</div>\n <div className=\"divTableCell\">{message.spn}</div>\n <div className=\"divTableCell\">{message.fmi}</div>\n <div className=\"divTableCell\">{findAssetTimeZone(staticParams, message.occurrence_date_time)}</div> \n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Code_Description}</div>\n </div>\n </div>\n \n </div>\n <div className=\"divTableRecomendation\">\n <div className=\"divTableBody\">\n <div className=\"divTableRow\">\n <div className=\"divTableCellRecomendation\">\n Recommended action and derate information are based on the <i>overall equipment status</i>\n </div>\n </div>\n </div>\n </div>\n </div>:<div>\n <div className=\"divTable\">\n\n <div className=\"divTableHeading\">\n <div className=\"divTableHead\">Primary Fault Code</div>\n <div className=\"divTableHead\">SPN</div>\n <div className=\"divTableHead\">FMI</div>\n <div className=\"divTableHead\">Timestamp ({moment.tz(tzlookup(staticParams.Latitude, staticParams.Longitude)).format('z')})</div>\n <div className=\"divTableHead\">Description</div>\n </div>\n\n <div className=\"divTableBody\">\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Primary_Fault_Code}</div>\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Primary_SPN}</div>\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Primary_FMI}</div>\n <div className=\"divTableCell\">{findAssetTimeZone(staticParams, JSON.parse(message.responseParams).Primary_Occurrence_Date_Time)}</div> \n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Primary_Fault_Code_Description}</div>\n </div>\n </div>\n </div>\n <div className=\"divTableRecomendation\">\n <div className=\"divTableBody\">\n <div className=\"divTableRow\">\n <div className=\"divTableCellRecomendation\">\n Recommended action and derate information are based on the <i>overall equipment status</i>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n <br/>\n {\n JSON.parse(message.responseParams).Fault_Root_Cause1 && \n <div><b>Suggested Root Causes:</b></div> \n }\n <div className=\"divTable\">\n <div className=\"divTableHeading\">\n {\n JSON.parse(message.responseParams).Fault_Likelihood1 &&\n <div className=\"divTableHead\"><u>Component or System</u></div>\n }\n {\n JSON.parse(message.responseParams).Fault_Likelihood1 &&\n <div className=\"divTableHead\"><u>Probability</u></div>\n }\n </div>\n <div className=\"divTableBody\">\n {\n JSON.parse(message.responseParams).Fault_Root_Cause1 &&\n JSON.parse(message.responseParams).Fault_Root_Cause1!=\"\"&&\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Root_Cause1}</div>\n {JSON.parse(message.responseParams).Fault_Likelihood1 &&\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Likelihood1}</div>}\n </div>\n }\n {\n JSON.parse(message.responseParams).Fault_Root_Cause2 &&\n JSON.parse(message.responseParams).Fault_Root_Cause2!=\"\"&&\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Root_Cause2}</div>\n {JSON.parse(message.responseParams).Fault_Likelihood2 &&\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Likelihood2}</div>}\n </div>\n }\n {\n JSON.parse(message.responseParams).Fault_Root_Cause3 &&\n JSON.parse(message.responseParams).Fault_Root_Cause3!=\"\"&&\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Root_Cause3}</div>\n {JSON.parse(message.responseParams).Fault_Likelihood3 &&\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Likelihood3}</div>}\n </div>\n }\n {\n JSON.parse(message.responseParams).Fault_Root_Cause4 &&\n JSON.parse(message.responseParams).Fault_Root_Cause4!=\"\"&&\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Root_Cause4}</div>\n {JSON.parse(message.responseParams).Fault_Likelihood4 &&\n <div className=\"divTableCell\">{JSON.parse(message.responseParams).Fault_Likelihood4}</div>}\n </div>\n }\n </div>\n </div>\n <br/>\n {\n JSON.parse(message.responseParams).Derate_Flag &&\n JSON.parse(message.responseParams).Derate_Flag !=\"\" &&\n JSON.parse(message.responseParams).Derate_Flag ===\"Yes\" &&\n <div>\n Fault code indicates that your equipment has entered a situation where performance will be limited, and you may experience the following:\n <ul>\n {\n JSON.parse(message.responseParams).Derate_Value1 &&\n JSON.parse(message.responseParams).Derate_Value1 != \"\" &&\n <li>{JSON.parse(message.responseParams).Derate_Value1}</li>\n }\n {\n JSON.parse(message.responseParams).Derate_Value2 &&\n JSON.parse(message.responseParams).Derate_Value2 != \"\" &&\n <li>{JSON.parse(message.responseParams).Derate_Value2}</li>\n }\n {\n JSON.parse(message.responseParams).Derate_Value3 &&\n JSON.parse(message.responseParams).Derate_Value3 != \"\" &&\n <li>{JSON.parse(message.responseParams).Derate_Value3}</li>\n }\n </ul>\n </div>\n \n }\n {\n JSON.parse(message.responseParams).Shutdown_Flag &&\n JSON.parse(message.responseParams).Shutdown_Flag !=\"\" &&\n JSON.parse(message.responseParams).Shutdown_Flag ===\"Yes\" &&\n <div>\n {JSON.parse(message.responseParams).Shutdown_Description}\n </div>\n }\n <br/>\n \n <div dangerouslySetInnerHTML={{__html:message.cmns_recomendation_footer_html}} ></div> \n {\n /*\n message.cmns_recomendation_footer_html\n this.props.assetOrgId != \"4d5b9621-2b2b-11ee-8a6d-739e920ccfbe\" &&\n <div>\n\n <p>If you need further assistance contact your local Taylor service representative or dealer.</p>\n <p>If you do not know who to contact, then please call our main service line and we will assist you in reaching the correct person.</p>\n <p>Taylor Sudden Service</p>\n <p>1-800-222-6218</p>\n <p>You may also find the nearest Taylor Service Center using the locator map linked below.</p>\n <p><a target=\"_blank\" rel=\"noreferrer\" href=\"https://www.taylorsuddenservice.com/locations.html\">https://www.taylorsuddenservice.com/locations.html</a></p>\n </div>*/\n }\n {/* Footer for Toyota */}\n {/*this.props.assetOrgId == \"4d5b9621-2b2b-11ee-8a6d-739e920ccfbe\" && \n <div>\n\n <p>If you need further assistance contact your local Toyota Material Handling Heavy Duty service representative or dealer.</p>\n <p>If you do not know who to contact, then please call our main service line and we will assist you in reaching the correct person.</p>\n <p>Toyota Material Handling Heavy Duty</p>\n <p>1-800-381-5879</p>\n <p>You may also find the nearest Toyota Material Handling Heavy Duty Service Center using the locator map linked below.</p>\n <p><a target=\"_blank\" rel=\"noreferrer\" href=\"https://www.toyotaforklift.com/parts-and-service\">https://www.toyotaforklift.com/parts-and-service</a></p>\n </div>*/\n }\n\n </div> \n\n }\n {\n (this.props.recommendation === \"\" || this.props.recommendation === null) &&\n <div>\n <p style={{ color: 'Red' }}>Failed to fetch Cummins recommendation.</p>\n </div>\n }\n </div>\n \n );\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(CumminsResponseView); ","import React, { Component } from \"react\";\nimport { Table, Descriptions, Button, Modal, message, Radio, Tooltip, Drawer, Spin, Row, Col, Divider, Tag } from 'antd';\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport { \n CheckCircleOutlined, CloseCircleOutlined\n} from \"@ant-design/icons\";\n\nimport history from '../../utils/history';\nimport { appConfigs } from \"../../utils/configurations\";\nimport { localizeUtcDate, getPermissions } from \"../../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport AlertsDm1Filters from \"./AlertsDm1Filters\";\nimport \"./alerts.css\";\n\nimport cumminsLogo from \"../../assets/images/cummins_logo.png\";\nimport stopNow from \"../../assets/images/stopnow.png\";\nimport serviceNow from \"../../assets/images/servicenow.png\";\nimport serviceSoon from \"../../assets/images/servicesoon.png\";\nimport information from \"../../assets/images/information.png\";\nimport inactive from \"../../assets/images/inactive.png\";\nimport CumminsResponseView from \"./CumminsResponseView\";\nimport { ColumnsType } from \"antd/lib/table\";\n\ninterface Prop { \n alertsDm1SetPagination: Function,\n alertsDm1: Function,\n alertsDm1Filters: Function,\n markAlerts: Function,\n getAsset: Function, \n context: any,\n alertsState: any,\n permissions: any,\n mastertag: string,\n isread: boolean,\n selectedType: Function,\n getCumminsRecommendations: Function,\n getParkerRecommendations: Function,\n}\n\ninterface State {\n nickname: string[],\n selectedRowKeys: string[], \n loading: boolean,\n isModalVisible: boolean,\n viewAlertType: string,\n isCumminsDrawerVisible: boolean,\n selectedAlert: any,\n deleteAlerts: boolean,\n recommendationOfAlert: string,\n recommendation: any,\n parkerRecommendation: any,\n parkerActions: any,\n showDiagnostics: boolean,\n assetOrgId:any,\n}\n\nclass AlertsDm1 extends Component<Prop, State> {\n \n state:State = {\n nickname: [],\n selectedRowKeys: [], \n loading: false,\n isModalVisible: false,\n viewAlertType: \"unseen\",\n isCumminsDrawerVisible: false,\n selectedAlert:{},\n deleteAlerts: false,\n recommendationOfAlert: \"\",\n recommendation: \"\",\n parkerRecommendation: \"\", \n parkerActions: [],\n showDiagnostics: false,\n assetOrgId: \"\",\n }\n\n componentDidMount () { \n if ((this.props.mastertag || \"\") !== \"\") {\n this.props.getAsset(this, this.getAssetSuccess, null, this.props.mastertag); \n }\n else {\n this.componentUpdate(); \n }\n } \n \n getAssetSuccess = (mastertag: string, asset:any) => { \n this.setState({ nickname: [asset.nickname] }); \n this.componentUpdate(); \n };\n\n componentUpdate = () => {\n const appliedFilters = this.props.alertsState.tabs[0].appliedFilters; \n this.props.alertsDm1SetPagination(this.onPaginationChange);\n if(!this.filtersApplied()){\n this.props.alertsDm1(this, null, null, 1, null, null, this.state.viewAlertType, null, null, this.state.nickname);\n this.props.alertsDm1Filters(this, null, null);\n }\n else{\n let nicknameToBeFiltered = [];\n if (appliedFilters.nickname && appliedFilters.nickname.length != 0 && this.state.nickname && \n appliedFilters.nickname.indexOf(this.state.nickname) == -1) {\n nicknameToBeFiltered.push(this.state.nickname);\n } else {\n nicknameToBeFiltered = appliedFilters.nickname;\n }\n\n this.props.alertsDm1(this, null, null, 1, null, null, this.state.viewAlertType, appliedFilters.timespanFrom,\n appliedFilters.timespanTo, nicknameToBeFiltered, appliedFilters.sa, appliedFilters.spn,\n appliedFilters.fmi, appliedFilters.status); \n } \n };\n\n onPaginationChange = (page: number) => { \n const appliedFilters = this.props.alertsState.tabs[0].appliedFilters; \n this.props.alertsDm1(\n this, \n null, \n null, \n page, \n null,\n null,\n this.state.viewAlertType,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.sa,\n appliedFilters.spn,\n appliedFilters.fmi,\n appliedFilters.status\n ); \n };\n\n goToAsset = (e: any, mastertag: string) => {\n e.preventDefault();\n history.push(\"/assets/\" + mastertag);\n };\n\n onSelectChange = (selectedRowKeys:any) => {\n this.setState({ selectedRowKeys });\n };\n\n filtersApplied = () => {\n const appliedFilters = this.props.alertsState.tabs[0].appliedFilters;\n let filtersApplied = false;\n return filtersApplied = \n (appliedFilters.nickname && appliedFilters.nickname.length || 0) || //eslint-disable-line \n (appliedFilters.sa && appliedFilters.sa.length || 0) || //eslint-disable-line \n (appliedFilters.spn && appliedFilters.spn.length || 0) || //eslint-disable-line \n (appliedFilters.fmi && appliedFilters.fmi.length || 0) || //eslint-disable-line \n (appliedFilters.status && appliedFilters.status.length || 0) || //eslint-disable-line \n (appliedFilters.tags && appliedFilters.tags.length || 0) || //eslint-disable-line \n ((appliedFilters.timespanFrom || \"\") !== \"\") || //eslint-disable-line \n ((appliedFilters.timespanTo || \"\") !== \"\"); //eslint-disable-line \n }\n \n markAlertsSuccess = (data:any) => {\n let status = (this.state.deleteAlerts) ?\n (this.state.selectedRowKeys.length>0? `Selected ${(this.state.viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts got deleted.`\n : (this.filtersApplied()? `All the filtered ${(this.state.viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts got deleted.` \n :`All the ${(this.state.viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts got deleted.`))\n :\n `Selected alerts are marked as ${(this.state.viewAlertType === 'unseen')? 'Seen' : 'Unseen'}`\n message.success(status);\n this.setState({loading: false, selectedRowKeys:[]});\n this.componentUpdate();\n } \n markAlertsFail = (error:any) => {\n this.setState({loading: false, selectedRowKeys:[]});\n // message.error(\"Selected alerts failed to delete \"+error.Error); \n }\n deleteDm1Alerts = () => {\n const appliedFilters = this.props.alertsState.tabs[0].appliedFilters;\n this.props.markAlerts(this,this.markAlertsSuccess,this.markAlertsFail,this.state.selectedRowKeys,\n this.state.viewAlertType,\"dm1\",this.state.deleteAlerts,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n null,\n null,\n appliedFilters.nickname,\n appliedFilters.sa,\n appliedFilters.spn,\n appliedFilters.fmi,\n appliedFilters.status,\n appliedFilters.tags\n );\n this.setState({loading: true});\n }\n\n showModal = (e:any, isDeleted: boolean) => {\n if(isDeleted)\n {\n this.setState({deleteAlerts: true}); \n }\n else\n {\n this.setState({deleteAlerts: false});\n }\n this.setState({isModalVisible: true});\n };\n \n handleOk = () => {\n this.setState({isModalVisible: false});\n this.deleteDm1Alerts();\n };\n \n handleCancel = () => {\n this.setState({isModalVisible: false});\n this.setState({loading: false, selectedRowKeys:[]});\n };\n \n showDiagnosticsModal = (showDiagnostics: boolean) => {\n\t\tthis.setState({ showDiagnostics: showDiagnostics });\n };\n \n handleDiagnosticsOk = () => {\n\t\tthis.setState({ showDiagnostics: false });\n\t};\n\n\thandleDiagnosticsCancel = () => {\n\t\tthis.setState({ showDiagnostics: false });\n\t};\n\n showCumminsRecommendations= (e:any,alert:any) => {\n this.setState({\n loading: true,\n });\n this.props.getCumminsRecommendations(this, this.getRecommendation, null,\n alert.alertId,\n alert.gatewayId,\n alert.sa,\n alert.spn,\n alert.fmi,\n alert.oc,\n alert.detectionTime);\n this.setState({recommendationOfAlert: alert.alertId});\n this.setState({isCumminsDrawerVisible: true});\n this.setState({assetOrgId: alert.orgId}); \n e.preventDefault();\n }\n showParkerRecommendations= (e:any,alert:any) => {\n this.setState({\n loading: true,\n });\n this.props.getParkerRecommendations(this, this.getParkerRecommendation, null,\n alert.orgId,\n alert.sa,\n alert.spn,\n alert.fmi);\n // this.setState({recommendationOfAlert: alert.alertId});\n this.setState({showDiagnostics: true});\n e.preventDefault();\n }\n getRecommendation = (data:any) => {\n this.setState({\n loading: false,\n recommendation: data\n });\n\n }\n\n getParkerRecommendation = (data:any) => {\n this.setState({\n loading: false,\n parkerRecommendation: data\n });\n\n if (this.state.parkerRecommendation?.recommendations) {\n let actions = JSON.parse(this.state.parkerRecommendation?.recommendations);\n actions.sort(function (a: any, b: any) {\n return a?.order < b?.order;\n })\n actions.sort(); \n this.setState({\n parkerActions: actions\n });\n }\n } \n\n onCloseCumminsDiagnostics = () => {\n this.setState({isCumminsDrawerVisible: false,\n recommendation: \"\"});\n }\n\n onCloseParkerDiagnostics = () => {\n this.setState({showDiagnostics: false,\n parkerRecommendation: \"\"});\n }\n\n\n onChangeViewAlert = (e:any) => {\n this.setState({\n viewAlertType: e.target.value,\n selectedRowKeys: [] \n });\n this.props.selectedType(e.target.value);\n //this.props.alertsDm1(this, null, null, 1, null, null, e.target.value, null, null, this.state.nickname);\n const appliedFilters = this.props.alertsState.tabs[0].appliedFilters; \n this.props.alertsDm1(\n this, \n null, \n null, \n 1, \n null,\n null,\n e.target.value,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.sa,\n appliedFilters.spn,\n appliedFilters.fmi,\n appliedFilters.status,\n appliedFilters.tags\n );\n };\n \n\n \n render() { \n const result = getPermissions(this.props.permissions.permissions.dm1_settings); \n let isDelete = result[3];\n const { tableConfig, tableData } = this.props.alertsState.tabs[0]; \n const { loading, selectedRowKeys, viewAlertType } = this.state;\n const rowSelection = (isDelete) ? {\n selectedRowKeys,\n onChange: this.onSelectChange,\n }:{getCheckboxProps: (record:any)=>({disabled: true})};\n const hasSelected = selectedRowKeys.length > 0;\n\n const openInNewTab = (url: any) => {\n window.open(url, '_blank', 'noopener,noreferrer');\n };\n\n \n let tableColumns = [\n {\n title: \"Status\",\n dataIndex: \"status\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n record.status === \"inactive\" &&\n <><span className=\"dot alert-status-red \"/>Active</>\n }\n {\n record.status === \"active\" &&\n <><span className=\"dot alert-status-orange \"/>Inactive</>\n }\n </span>\n )\n },\n {\n title: \"Updated\",\n dataIndex: \"triggerTime\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (triggerTime: string, record: any) => (\n <>{localizeUtcDate(triggerTime, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: \"Detected\",\n dataIndex: \"detectionTime\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (detectionTime: string, record: any) => (\n <>{localizeUtcDate(detectionTime, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: \"SA\",\n dataIndex: \"sa\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\" \n },\n {\n title: \"SPN\",\n dataIndex: \"spn\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\" \n },\n {\n title: \"FMI\",\n dataIndex: \"fmi\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\" \n },\n {\n title: \"Counts\",\n dataIndex: \"oc\",\n responsive: [\"lg\"] as Breakpoint[],\n align: \"center\" as \"center\",\n render: (oc: number, record: any) => (\n <>{oc > 126 ? \"N/A\" : oc + \"\"}</> \n ) \n },\n {\n title: \"Org Name\",\n dataIndex: \"orgName\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (text: any, record: any) => {\n let parents = record?.orgPathName?.includes(\"~\") ? record?.orgPathName.split('~') : [record?.orgPathName];\n if (parents.length > 1) {\n parents = parents.filter((parent: any) => {\n if (!parent.toLowerCase().includes(\"parker\")) {\n return parent\n }\n })\n }\n return (\n parents.length > 2 ?\n <>\n <span className=\"no-word-wrap\">\n <Tooltip overlayInnerStyle={{ width: '350px' }} title={\n parents.map((parent: any, index: number) => {\n return parents.length - 1 == index ? parent : parent + \" \\\\ \" \n })\n }>\n <span>{record.orgName}</span>\n </Tooltip>\n </span> \n </>\n : <span>{record.orgName}</span>\n )\n }\n },\n {\n title: \"Asset\",\n dataIndex: \"nickname\",\n render: (text: any, record: any) => (\n <a href=\"# \" onClick={(e) => {this.goToAsset(e, record.mastertag)}}> \n {record.nickname || record.mastertag} \n </a>\n ) \n },\n {\n title: \"Parker Recommendations\",\n dataIndex: \"parker_recommendations\",\n render: (text: any, record: any) => (\n <a href=\"#\" onClick={() => this.showDiagnosticsModal(!this.state.showDiagnostics)} > \n Recommendation\n </a>\n ) \n },\n ];\n \n let cumminsDiagnosticsTable = [\n {\n title: \"Status\",\n dataIndex: \"status\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n record.status === \"inactive\" &&\n <><span className=\"dot alert-status-red \"/>Active</>\n }\n {\n record.status === \"active\" &&\n <><span className=\"dot alert-status-orange \"/>Inactive</>\n }\n </span>\n )\n },\n {\n title: \"Updated\",\n dataIndex: \"triggerTime\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (triggerTime: string, record: any) => (\n <>{localizeUtcDate(triggerTime, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: \"Detected\",\n dataIndex: \"detectionTime\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (detectionTime: string, record: any) => (\n <>{localizeUtcDate(detectionTime, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: 'SA',\n key: 'action',\n render: (record:any) => (\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title={ record.saDescription ? record.sa +' - ' + record.saDescription : record.sa } arrowPointAtCenter>\n <div>\n { record.sa }\n </div>\n </Tooltip>\n ),\n },\n {\n title: \"SPN\",\n key: 'action',\n render: (record:any) => (\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title={ record.spnDescription ? record.spn +' - ' + record.spnDescription : record.spn } arrowPointAtCenter>\n <div>\n { record.spn }\n </div>\n </Tooltip>\n ), \n },\n {\n title: \"FMI\",\n key: 'action',\n render: (record:any) => (\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title={ record.fmiDescription ? record.fmi + ' - ' + record.fmiDescription : record.fmi } arrowPointAtCenter>\n <div>\n { record.fmi } \n </div>\n </Tooltip>\n ), \n },\n {\n title: \"Counts\",\n key: 'action',\n responsive: [\"lg\"] as Breakpoint[],\n align: \"center\" as \"center\",\n render: (oc: number, record: any) => (\n <div>\n {record.oc > 126 ? \"N/A\" : record.oc + \"\"}\n </div> \n ) \n },\n {\n title: \"Org Name\",\n dataIndex: \"orgName\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (text: any, record: any) => {\n let parents = record?.orgPathName?.includes(\"~\") ? record?.orgPathName.split('~') : [record?.orgPathName];\n if (parents.length > 1) {\n parents = parents.filter((parent: any) => {\n if (!parent.toLowerCase().includes(\"parker\")) {\n return parent\n }\n })\n }\n return (\n parents.length > 2 ?\n <>\n <span className=\"no-word-wrap\">\n <Tooltip overlayInnerStyle={{ width: '350px' }} title={\n parents.map((parent: any, index: number) => {\n return parents.length - 1 == index ? parent : parent + \" \\\\ \" \n })\n }>\n <span>{record.orgName}</span>\n </Tooltip>\n </span> \n </>\n : <span>{record.orgName}</span>\n )\n }\n },\n {\n title: \"Asset\",\n dataIndex: \"nickname\",\n render: (text: any, record: any) => (\n <a href=\"# \" onClick={(e) => {this.goToAsset(e, record.mastertag)}}> \n {record.nickname || record.mastertag} \n </a>\n )\n },\n { \n title: \"Recommendations\", \n dataIndex: \"priority\", \n render: (text: any, record: any) => (\n <div>\n {\n (record.priority === null|| \"\")?\n <div>\n \n {/* <Button style={{ width: 100 }} loading={loading} disabled >NA</Button> */}\n <a href=\"#\"className=\"disabledlink\"> Not Available </a>\n </div>\n \n :\n (record.priority.toLowerCase() === \"stop now\")?\n <div >\n \n <img src={stopNow} alt=\"stop now\" width=\"50\" height=\"50\" onClick= { (e)=>this.showCumminsRecommendations(e,record) } />\n <a href=\"# \" onClick={(e)=>this.showCumminsRecommendations(e,record)}> {record.priority} </a>\n </div>\n :(record.priority.toLowerCase() === \"service now\")?\n <div>\n \n <img src={serviceNow} alt=\"service now\" width=\"50\" height=\"50\" onClick= { (e)=>this.showCumminsRecommendations(e,record) } />\n <a href=\"# \" onClick={(e)=>this.showCumminsRecommendations(e,record)}> {record.priority} </a>\n </div>\n : (record.priority.toLowerCase() === \"service soon\")?\n <div>\n \n <img src={serviceSoon} alt=\"service soon\" width=\"50\" height=\"50\" onClick= { (e)=>this.showCumminsRecommendations(e,record) } />\n <a href=\"# \" onClick={(e)=>this.showCumminsRecommendations(e,record)}> {record.priority} </a>\n </div>\n : (record.priority.toLowerCase() === \"information\")?\n <div>\n \n <img src={information} alt=\"information\" width=\"50\" height=\"50\" onClick= { (e)=>this.showCumminsRecommendations(e,record) } />\n <a href=\"# \" onClick={(e)=>this.showCumminsRecommendations(e,record)}> {record.priority} </a>\n </div>\n : \n <div>\n \n <img src={inactive} alt=\"inactive\" width=\"50\" height=\"50\" onClick= { (e)=>this.showCumminsRecommendations(e,record) } />\n <a href=\"# \" onClick={(e)=>this.showCumminsRecommendations(e,record)}> {record.priority} </a>\n </div>\n }\n \n </div>\n )\n },\n {\n title: \"Parker Recommendations\",\n dataIndex: \"hasParkerRecommendation\",\n render: (text: any, record: any) => (\n <div>\n {\n ((record.hasParkerRecommendation || false) === false) ?\n <div>\n \n {/* <Button style={{ width: 100 }} loading={loading} disabled >NA</Button> */}\n <a href=\"#\"className=\"disabledlink\"> NA </a>\n </div>\n :\n <div>\n <a href=\"#\" onClick= { (e)=>this.showParkerRecommendations(e,record) } > \n Recommendation\n </a>\n </div>\n }\n </div>\n ) \n },\n ];\n\n if (this.props.context.appContext.orgId != 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b') {\n tableColumns = tableColumns.filter((column:any) => column.title != 'Parker Recommendations')\n cumminsDiagnosticsTable = cumminsDiagnosticsTable.filter((column:any) => column.title != 'Parker Recommendations')\n }\n\n return (\n <> \n <AlertsDm1Filters nickname={this.state.nickname} isread={this.props.isread} viewAlertType={this.state.viewAlertType} />\n {\n this.props.isread &&\n\n <div>\n <br/>\n <>\n <div style = {{width:'85%' , display:'inline-block'}}>\n <span style={{ margin: 8 }}> \n <Radio.Group value={viewAlertType} buttonStyle=\"solid\" onChange={this.onChangeViewAlert} >\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title=\"Unseen/New Alerts\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"unseen\">\n <CheckCircleOutlined className=\"pr-5\" />Unseen\n </Radio.Button>\n </div>\n </Tooltip>\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title=\"Seen Alerts\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n\n <Radio.Button value=\"seen\">\n <CloseCircleOutlined className=\"pr-5\" />Seen\n </Radio.Button>\n </div>\n </Tooltip>\n </Radio.Group>\n </span>\n </div>\n <div style = {{display:'inline-block'}}>\n <Button type = \"primary\" \n disabled={(tableData || []).length === 0 || tableData === null || \n (isDelete || \"\") === \"\" || isDelete === null || !isDelete } \n onClick = {(e:any)=>this.showModal(e,true)} danger>Clear {(viewAlertType === 'unseen')? 'Unseen' : 'Seen'} Alerts</Button>\n </div>\n </>\n <br/>\n\n <div style={{ margin: 16 }}>\n <Button type=\"primary\" onClick={(e:any)=>this.showModal(e,false)} disabled={!hasSelected} loading={loading}>\n {(viewAlertType === 'unseen')? 'Mark as Seen' : 'Mark as Unseen'}\n </Button>\n <Modal title=\"Confirm\" visible={this.state.isModalVisible} onOk={this.handleOk} onCancel={this.handleCancel}>\n { (this.state.deleteAlerts) ?\n (selectedRowKeys.length>0? `Are you sure you want to delete the selected ${(viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts?`\n :this.filtersApplied()?`Are you sure you want to delete the filtered ${(viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts?`\n :`Are you sure you want to delete all the ${(viewAlertType === 'seen')? 'Seen' : 'Unseen'} alerts?`)\n :\n `Mark selected alerts as ${(viewAlertType === 'unseen')? 'Seen' : 'Unseen'}?`\n }\n </Modal>\n <span style={{ marginLeft: 8 }}>\n {hasSelected ? `Selected ${selectedRowKeys.length} alerts to mark as ${(viewAlertType === 'unseen')? 'Seen' : 'Unseen'}` : ''}\n </span>\n \n <Modal\n width={720}\n title={\n <>\n <img height='30' width='30' style={{marginRight: \"3px\"}} src='parker-logo-48x48.png' className=\"org-image-preview\" alt=\"Logo preview\"/>\n <span style={{fontSize: \"24px\"}}>Parker Diagnostics</span>\n </>\n }\n visible={this.state.showDiagnostics}\n onCancel={this.handleDiagnosticsCancel}\n onOk={this.handleDiagnosticsOk}\n footer={<Button type=\"primary\" onClick={this.handleDiagnosticsOk} >OK</Button>}\n >\n {<div>\n <Row>\n <Col span={16}>\n {/* \n <h3 style={{textDecoration: 'underline'}}>Part Details:</h3>\n <span><b>Machine Number:</b> 123456</span><br />\n <span><b>PTS ID:</b> Q5T08SFY</span><br />\n <span><b>Faulty Part:</b> VA 300</span><br />\n <span><b>Model Number:</b> VA-300-069111-01</span><br />\n\n <Divider />\n */} \n\n <h3 style={{textDecoration: 'underline'}}>DM1 Fault Details:</h3>\n\n\n <div style={{width:400}} className=\"divTable\">\n <div className=\"divTableBody\">\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">DM1 Message</div>\n <div className=\"divTableCell\">{this.state.parkerRecommendation.name}</div>\n </div>\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">SPN</div>\n <div className=\"divTableCell\">{this.state.parkerRecommendation.spn}</div>\n </div>\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">FMI</div>\n <div className=\"divTableCell\">{this.state.parkerRecommendation.fmi}</div>\n </div>\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">Description</div>\n <div className=\"divTableCell\">{this.state.parkerRecommendation.description}</div>\n </div>\n <div className=\"divTableRow\">\n <div className=\"divTableCell\">Severity</div>\n <div className=\"divTableCell\">\n <Tag color={(this.state.parkerRecommendation.severity || \"LOW\")==='HIGH'?\"red\" :\n ((this.state.parkerRecommendation.severity || \"LOW\") ===\"MEDIUM\"? \"orange\": \"green\")} \n key={this.state.parkerRecommendation.severity}>\n {this.state.parkerRecommendation.severity}\n </Tag>\n </div>\n </div>\n </div>\n </div>\n </Col>\n <Col span={8}>\n <img style={{ marginLeft: '5%', marginTop: '10%' }} height=\"100\" width=\"200\" src='thumbnail_VA300_product-778x553.png' className=\"org-image-preview\" />\n \n <Divider />\n\n <Button\n type=\"primary\"\n style={{ width: '100%', height: '40px', backgroundColor: '#d7970d', color: \"black\", fontSize: '15px' }}\n onClick={() => openInNewTab('https://ph.parker.com/us/en/mobile-directional-contol-valve-va-series/va300-mobile-valve')}\n >\n Products detail and catalog\n </Button>\n \n </Col> \n </Row>\n <Row>\n <Col>\n <br/>\n \n <div style={{width:640}}>\n <table className=\"divTable\"> \n <colgroup>\n {/* <col width=\"8%\"/> */}\n <col width=\"48%\"/>\n <col width=\"18%\"/>\n <col width=\"28%\"/>\n </colgroup>\n \n {/* <th className=\"divTableCell\">Priority</th> */}\n <th className=\"divTableCell\">Possible Cause</th>\n <th className=\"divTableCell\">Related SPN</th>\n <th className=\"divTableCell\">Suggested Fix</th>\n <tbody>\n {this.state.parkerActions.map((record:any) => (\n \n <tr key={record.order}>\n {/* <td className=\"divTableCell\">{record.order}</td> */}\n <td className=\"divTableCell\">{record.cause}</td>\n <td className=\"divTableCell\">{record.relatedSpn}</td>\n <td className=\"divTableCell\">{record.fix}</td>\n </tr>\n ))} \n </tbody>\n </table>\n </div>\n {/* {this.state.parkerActions.map((record:any) => (\n \n <div> \n <Divider />\n <h3 style={{textDecoration: 'underline'}}>Possible Cause + {record.order} :</h3>\n <span>{record.cause}</span><br />\n {record.relatedSpn !== \"\" && \n <div>\n <h3 style={{textDecoration: 'underline'}}>Related DM1 SPN for cause {record.order}</h3>\n <span>{record.relatedSpn}</span><br />\n </div>\n }\n <h3 style={{textDecoration: 'underline'}}>Possible fix {record.order} :</h3>\n <span>{record.fix}</span><br />\n </div>\n \n ))*/} \n </Col> \n </Row>\n </div>\n }\n </Modal>\n </div> \n <Drawer width=\"700\" title={\n \n <div style={{float:\"left\"}}><img src={cumminsLogo} alt=\"Cummins\" />Connected Diagnostics™</div>}\n \n placement=\"right\" onClose={this.onCloseCumminsDiagnostics} visible={this.state.isCumminsDrawerVisible}>\n { !this.state.loading && this.state.recommendation!=\"\"&&\n <CumminsResponseView recommendation={this.state.recommendation} assetOrgId={this.state.assetOrgId}></CumminsResponseView>\n }\n </Drawer>\n {!(appConfigs.app.enableCumminsDiagnostics) && \n <Table rowSelection={rowSelection}\n data-id=\"alerts-dm1-faults-data\"\n {...tableConfig}\n rowKey={(record) => record.alertId}\n columns={tableColumns}\n dataSource={tableData}\n expandable={{\n expandedRowRender: record => (\n <Descriptions bordered column={1}>\n <Descriptions.Item label=\"SA\">{record.sa}{record.saDescription ? ' - ' + record.saDescription : ''}</Descriptions.Item>\n <Descriptions.Item label=\"SPN\">{record.spn}{record.spnDescription ? ' - ' + record.spnDescription : ''}</Descriptions.Item>\n <Descriptions.Item label=\"FMI\">{record.fmi}{record.fmiDescription ? ' - ' + record.fmiDescription : ''}</Descriptions.Item>\n </Descriptions>\n ),\n rowExpandable: record => (record.saDescription || record.fmiDescription || record.ocDescription || record.spnDescription),\n }}\n className=\"mt-20\"\n />\n }\n\n {(appConfigs.app.enableCumminsDiagnostics) &&\n <Table rowSelection={rowSelection}\n data-id=\"alerts-dm1-faults-data\"\n {...tableConfig}\n rowKey={(record) => record.alertId}\n columns={cumminsDiagnosticsTable}\n dataSource={tableData}\n className=\"mt-20\"\n />\n }\n </div>\n } \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AlertsDm1);\n ","import React, { Component } from \"react\";\nimport { Moment } from \"moment\";\nimport moment from \"moment\";\nimport { Form, Row, Col, Collapse, Select, Button, Space, Tooltip } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { CheckCircleTwoTone } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport Timespan from \"./Timespan\";\nimport \"./alerts.css\";\n\nconst { Option } = Select;\nconst { Panel } = Collapse;\n\ninterface Prop { \n alertsCmdHistory: Function,\n alertsCmdHistoryFilters: Function,\n context: any,\n alertsState: any, \n nickname?: string[],\n isread: boolean,\n viewHistoryType: string\n}\n\ninterface State {\n nickname?: string[],\n isread: boolean \n}\n\nclass AlertsCmdHistoryFilters extends Component<Prop, State> {\n\n state:State = {\n nickname: [],\n isread: false \n }\n\n formRef = React.createRef<FormInstance>();\n\n componentDidUpdate(prevProps: Prop) {\n if ((this.props.nickname || []).toString() !== (prevProps.nickname || []).toString()) {\n this.setState({ nickname: this.props.nickname,isread: this.props.isread }); \n } \n }\n\n resetFilters = () => { \n const me = this;\n\n this.setState({ nickname: [] }); \n setTimeout(function () {\n me.formRef.current?.resetFields(); \n me.applyFilters(); \n }, 150); \n }\n\n applyFilters = () => { \n let form = this.formRef.current;\n const timespan:Moment[] = form?.getFieldValue(\"timespan\");\n const timespanFromLocal = (timespan ? timespan[0].format('YYYY-MM-DD HH:mm:ss') : \"\");\n const timespanToLocal = (timespan ? timespan[1].format('YYYY-MM-DD HH:mm:ss') : \"\");\n \n var timespanFromUtc, timespanToUtc;\n var timespanFromIso, timespanToIso;\n if (timespanFromLocal === \"\") {\n timespanFromUtc = \"\";\n } else {\n var timespanFromDateFormat =new Date((Date.parse(timespanFromLocal)));\n timespanFromIso = timespanFromDateFormat.toISOString();\n timespanFromUtc = moment.utc(timespanFromIso).format('YYYY-MM-DD HH:mm:ss');\n }\n\n if (timespanToLocal === \"\") {\n timespanToUtc = \"\";\n } else {\n var timespanToDateFormat =new Date((Date.parse(timespanToLocal)));\n timespanToIso = timespanToDateFormat.toISOString();\n timespanToUtc = moment.utc(timespanToIso).format('YYYY-MM-DD HH:mm:ss');\n }\n \n this.props.alertsCmdHistory(\n this, \n null, \n null, \n 1, \n null,\n null,\n this.props.viewHistoryType,\n timespanFromUtc,\n timespanToUtc,\n form?.getFieldValue(\"nickname\") || \"\",\n form?.getFieldValue(\"command\") || \"\",\n form?.getFieldValue(\"operator\") || \"\",\n form?.getFieldValue(\"user\") || \"\",\n form?.getFieldValue(\"type\") || \"\",\n form?.getFieldValue(\"status\") || \"\",\n form?.getFieldValue(\"tags\") || \"\"\n ); \n this.props.alertsCmdHistoryFilters(\n this, \n null, \n null, \n null, \n null, \n timespanFromUtc, \n timespanToUtc\n ); \n };\n \n render() { \n\n const me = this;\n const { filters, appliedFilters } = this.props.alertsState.tabs[2];\n const filtersApplied = \n (appliedFilters.nickname && appliedFilters.nickname.length || 0) || //eslint-disable-line \n (appliedFilters.command && appliedFilters.command.length || 0) || //eslint-disable-line \n (appliedFilters.operator && appliedFilters.operator.length || 0) || //eslint-disable-line \n (appliedFilters.user && appliedFilters.user.length || 0) || //eslint-disable-line \n // (appliedFilters.type && appliedFilters.type.length || 0) || //eslint-disable-line \n (appliedFilters.status && appliedFilters.status.length || 0) || //eslint-disable-line \n (appliedFilters.tags && appliedFilters.tags.length || 0) || //eslint-disable-line \n ((appliedFilters.timespanFrom || \"\") !== \"\") || //eslint-disable-line \n ((appliedFilters.timespanTo || \"\") !== \"\"); //eslint-disable-line \n const filtersHeader = (\n <span>Filters {filtersApplied ? <Tooltip title=\"Applied Filter\"><CheckCircleTwoTone /></Tooltip> : \"\"}</span>\n );\n const filterLayout = {\n labelCol: { span: 3 },\n wrapperCol: { span: 21 }\n };\n return (\n <>\n {\n filters !== null && this.props.isread &&\n <div data-id=\"alerts-cmd-history-filters\"> \n <Collapse bordered={false} defaultActiveKey={['0']} className=\"auto-close\">\n <Panel header={filtersHeader} key=\"1\">\n <Form \n {...filterLayout}\n ref={this.formRef}\n name=\"filter\"\n initialValues={{ \n nickname: this.state.nickname\n }} \n >\n <Row gutter={16}>\n <Col xs={{ span: 24 }} md={{ span: 20 }} xl={{ span: 16 }}>\n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Timespan />\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"nickname\"\n label=\"Asset\"\n >\n <Select \n data-id=\"alerts-cmd-history-filters-nickname\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.nicknameSorted.map((record:any, index:number) => (\n <Option key={\"nickname-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"command\"\n label=\"Command\"\n >\n <Select \n data-id=\"alerts-cmd-history-filters-command\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.commandSorted.map((record:any, index:number) => (\n <Option key={\"command-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"operator\"\n label=\"Operator\"\n >\n <Select \n data-id=\"alerts-cmd-history-filters-operator\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.operatorSorted.map((record:any, index:number) => (\n <Option key={\"operator-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"user\"\n label=\"User\"\n >\n <Select \n data-id=\"alerts-cmd-history-filters-user\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.userSorted.map((record:any, index:number) => (\n <Option key={\"user-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n {/* <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"type\"\n label=\"Type\"\n >\n <Select \n data-id=\"alerts-cmd-history-filters-type\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.typeSorted.map((record:any, index:number) => (\n <Option key={\"type-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n */}\n \n <Row gutter={16}>\n <Col span={23} offset={1}>\n <Form.Item\n name=\"status\"\n label=\"Status\"\n >\n <Select \n data-id=\"alerts-cmd-history-filters-status\"\n mode=\"multiple\"\n showSearch\n placeholder=\"Select...\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n {filters !== null && filters.statusSorted.map((record:any, index:number) => (\n <Option key={\"status-\" + index} value={record}> \n <div className=\"demo-option-label-item\">\n <strong>{record}</strong>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n\n\n <Row gutter={16}>\n\n\n <Col span={23} offset={1}>\n <Form.Item\n name=\"tags\"\n label=\"Tags\"\n \n >\n <Select\n style={{ width: '100%' }}\n placeholder=\"Select...\"\n mode=\"multiple\"\n showSearch\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={true}\n notFoundContent={null}\n allowClear\n >\n\n {filters !== null && filters.tagsSorted?.map((record:any, index:number) => (\n <Option key={\"tag-\" + index} value={record.toUpperCase()}>\n <div className=\"demo-option-label-item\">\n <strong>{record.toUpperCase()}</strong>\n </div>\n </Option>\n ))}\n </Select> \n </Form.Item>\n </Col> \n\n\n </Row> \n\n \n <Space size=\"middle\">\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"alerts-cmd-history-filters-reset-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.resetFilters} \n >\n Reset\n </Button>\n )}\n </Form.Item>\n <Form.Item \n shouldUpdate={true}> \n {() => (\n <Button\n data-id=\"alerts-cmd-history-filters-submit-button\"\n type=\"default\"\n htmlType=\"submit\"\n onClick={this.applyFilters} \n disabled={\n !(\n (this.formRef.current?.getFieldValue(\"nickname\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"command\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"operator\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"user\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"type\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"status\") || []).length !== 0 ||\n (this.formRef.current?.getFieldValue(\"tags\") || []).length !== 0 ||\n this.formRef.current?.getFieldValue(\"timespan\")\n ) \n } \n >\n Submit\n </Button>\n )}\n </Form.Item>\n </Space>\n </Col>\n </Row>\n </Form>\n </Panel> \n </Collapse>\n </div>\n }\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AlertsCmdHistoryFilters);\n ","import React, { Component } from \"react\";\nimport { Table, Descriptions, Button, Modal, message, Radio, Tooltip, Drawer } from 'antd';\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport { \n CheckCircleOutlined, CloseCircleOutlined\n} from \"@ant-design/icons\";\nimport onlineIcon from \"../../assets/images/map-status/online.png\";\nimport offlineIcon from \"../../assets/images/map-status/offline.png\";\n\nimport history from '../../utils/history';\nimport { appConfigs } from \"../../utils/configurations\";\nimport { localizeUtcDate, getPermissions } from \"../../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport AlertsCmdHistoryFilters from \"./AlertsCmdHistoryFilters\";\nimport \"./alerts.css\";\n\ninterface Prop { \n alertsCmdHistorySetPagination: Function,\n alertsCmdHistory: Function,\n alertsCmdHistoryFilters: Function,\n getAsset: Function, \n context: any,\n alertsState: any,\n permissions: any,\n mastertag: string,\n isread: boolean,\n selectedType: Function,\n}\n\ninterface State {\n nickname: string[],\n selectedRowKeys: string[], \n loading: boolean,\n isModalVisible: boolean,\n viewHistoryType: string,\n selectedAlert: any\n}\n\nclass AlertsCmdHistory extends Component<Prop, State> {\n \n state:State = {\n nickname: [],\n selectedRowKeys: [], \n loading: false,\n isModalVisible: false,\n viewHistoryType:\"latest\",\n selectedAlert:{}\n }\n\n componentDidMount () { \n if ((this.props.mastertag || \"\") !== \"\") {\n this.props.getAsset(this, this.getAssetSuccess, null, this.props.mastertag); \n }\n else {\n this.componentUpdate(); \n } \n } \n \n getAssetSuccess = (mastertag: string, asset:any) => { \n this.setState({ nickname: [asset.nickname] }); \n this.componentUpdate(); \n };\n\n componentUpdate = () => { \n this.props.alertsCmdHistorySetPagination(this.onPaginationChange);\n this.props.alertsCmdHistory(this, null, null, 1, null, null, this.state.viewHistoryType, null, null, this.state.nickname); \n this.props.alertsCmdHistoryFilters(this, null, null); \n };\n\n onPaginationChange = (page: number) => { \n const appliedFilters = this.props.alertsState.tabs[2].appliedFilters; \n this.props.alertsCmdHistory(\n this, \n null, \n null, \n page, \n null,\n null,\n this.state.viewHistoryType,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.command,\n appliedFilters.operator,\n appliedFilters.user,\n \"\", //appliedFilters.type,\n appliedFilters.status, \n appliedFilters.tags\n ); \n };\n \n goToAsset = (e: any, mastertag: string) => {\n e.preventDefault();\n history.push(\"/assets/\" + mastertag);\n };\n\n onSelectChange = (selectedRowKeys:any) => {\n this.setState({ selectedRowKeys });\n }; \n\n showModal = () => {\n this.setState({isModalVisible: true});\n };\n \n handleOk = () => {\n this.setState({isModalVisible: false});\n };\n \n handleCancel = () => {\n this.setState({isModalVisible: false});\n this.setState({loading: false, selectedRowKeys:[]});\n };\n \n onChangeViewHistory = (e:any) => {\n this.setState({\n viewHistoryType: e.target.value,\n selectedRowKeys: [] \n });\n this.props.selectedType(e.target.value);\n this.props.alertsCmdHistory(this, null, null, 1, null, null, e.target.value, null, null, this.state.nickname);\n };\n render() { \n const result = getPermissions(this.props.permissions.permissions.CmdHistory_settings); \n const { tableConfig, tableData } = this.props.alertsState.tabs[2]; \n const { loading, selectedRowKeys, viewHistoryType} = this.state;\n const rowSelection = {getCheckboxProps: (record:any)=>({disabled: true})};\n const hasSelected = selectedRowKeys.length > 0;\n \n const tableColumns = [\n {\n title: \"Status\",\n dataIndex: \"status\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n record.status === \"Fail\" &&\n <><span className=\"dot alert-status-red \"/>Fail</>\n }\n {\n record.status === \"Pending\" &&\n <><span className=\"dot alert-status-blue \"/>Pending</>\n }\n {\n record.status === \"Success\" &&\n <><span className=\"dot alert-status-green \"/>Success</>\n }\n {\n record.status === \"Deactivated\" &&\n <><span className=\"dot alert-status-orange \"/>Inactive</>\n }\n </span>\n )\n },\n {\n title: \"Updated\",\n dataIndex: \"reportedTime\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (reportedTime: string, record: any) => (\n <>{localizeUtcDate(reportedTime, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: \"Created\",\n dataIndex: \"requestTime\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (requestTime: string, record: any) => (\n <>{localizeUtcDate(requestTime, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: \"Command\",\n dataIndex: \"command\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\" \n },\n {\n title: \"Value\",\n dataIndex: \"desiredPayload\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\" \n },\n {\n title: \"Operator\",\n dataIndex: \"operator\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\" \n },\n {\n title: \"User\",\n dataIndex: \"user\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\" \n },\n {\n title: \"Connection\",\n dataIndex: \"connectionState\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n record.connectionState === \"DISCONNECTED\" &&\n <><span/><img src={offlineIcon} alt=\"\" /></>\n }\n {\n record.connectionState === \"CONNECTED\" &&\n <><span/><img src={onlineIcon} alt=\"\" /></>\n }\n </span>\n )\n },\n {\n title: \"Org Name\",\n dataIndex: \"orgName\",\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Asset\",\n dataIndex: \"nickname\",\n render: (text: any, record: any) => (\n <a href=\"# \" onClick={(e) => {this.goToAsset(e, record.mastertag)}}> \n {record.nickname || record.mastertag} \n </a>\n ) \n }\n ];\n\n return (\n <> \n <AlertsCmdHistoryFilters nickname={this.state.nickname} isread={this.props.isread} viewHistoryType={this.state.viewHistoryType} />\n {\n this.props.isread &&\n <div>\n <br/>\n <>\n <span style={{ margin: 8 }}> \n <Radio.Group value={viewHistoryType} buttonStyle=\"solid\" onChange={this.onChangeViewHistory} >\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title=\"Last command for each asset\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"latest\">\n <CheckCircleOutlined className=\"pr-5\" />Latest\n </Radio.Button>\n </div>\n </Tooltip>\n <Tooltip mouseEnterDelay={1} placement=\"bottom\" title=\"All command history\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n\n <Radio.Button value=\"all\">\n <CloseCircleOutlined className=\"pr-5\" />All\n </Radio.Button>\n </div>\n </Tooltip>\n </Radio.Group>\n </span>\n </>\n <br/>\n \n\n {this.props.isread && \n <Table rowSelection={rowSelection}\n data-id=\"alerts-cmd-history-data\"\n {...tableConfig}\n rowKey={(record) => record.cmdHistoryId}\n columns={tableColumns}\n dataSource={tableData}\n expandable={{\n expandedRowRender: record => (\n <Descriptions bordered column={1}>\n <Descriptions.Item label=\"Reason\">{record.reason ? record.reason : ''}</Descriptions.Item>\n <Descriptions.Item label=\"Connection State\">{record.connectionState ? record.connectionState : ''}</Descriptions.Item>\n <Descriptions.Item label=\"Connection State Last Updated At\">{record.connectionStateLastUpdatedTime ? record.connectionStateLastUpdatedTime : ''}</Descriptions.Item>\n <Descriptions.Item label=\"Estimated Command Time\">{record.estimatedCommandTime ? record.estimatedCommandTime : 'NA '}</Descriptions.Item>\n </Descriptions>\n ),\n rowExpandable: record => (record.Reason || record.connectionState || record.connectionStateLastUpdatedTime || record.estimatedCommandTime),\n }}\n className=\"mt-20\"\n />\n }\n </div>\n } \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AlertsCmdHistory);\n ","import React, { Component } from \"react\";\nimport { Table } from 'antd';\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport { \n CheckCircleOutlined, CloseCircleOutlined\n} from \"@ant-design/icons\";\n\nimport history from '../../utils/history';\nimport { appConfigs } from \"../../utils/configurations\";\nimport { localizeUtcDate, getPermissions } from \"../../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\n\ninterface Prop {\n context: any,\n alertsState: any,\n permissions: any,\n getActivityAlerts:Function,\n activityAlertsSetPagination:Function\n}\n\nclass ActivityAlerts extends Component<Prop, {}> {\n\n componentDidMount(){\n this.props.activityAlertsSetPagination(this.onPaginationChange);\n this.props.getActivityAlerts(this, this.getActivityAlertsSuccess, null,1, null); \n }\n \n onPaginationChange = (page: number) => {\n this.props.getActivityAlerts(this, this.getActivityAlertsSuccess, null, page, null);\n };\n\n getActivityAlertsSuccess=()=>{\n //todo implement after getting alerts\n }\n\n render(){\n const { tableConfig, tableData } = this.props.alertsState.tabs[3]; \n const tableColumns = [\n {\n title: \"Asset\",\n dataIndex: \"assetName\" \n },\n {\n title: \"Created At\",\n dataIndex: \"createdAt\",\n responsive: [\"lg\"] as Breakpoint[],\n render: (createdAt: string, record: any) => (\n <>{localizeUtcDate(createdAt, this.props.alertsState.dateFormatOptions)}</> \n ) \n },\n {\n title: \"Alert Type\",\n dataIndex: \"alertType\",\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n responsive: [\"lg\"] as Breakpoint[] \n },\n ];\n \n return(\n <>\n <Table \n data-id=\"alerts-activity-tab-button\" \n {...tableConfig}\n rowKey={(record) => record.id}\n columns={tableColumns} \n dataSource={tableData} \n className=\"mt-20\" \n />\n </>\n )\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ActivityAlerts);","import React, { Component } from \"react\";\nimport { Tabs, Row, Col, Button, Space, Tooltip } from \"antd\";\nimport { ReloadOutlined } from '@ant-design/icons';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport history from '../../utils/history';\n\nimport { getSegmentFromUrl, getPermissions } from \"../../utils/commonHelpers\";\n\nimport Export from \"./Export\";\nimport AlertsSignals from \"./AlertsSignals\";\nimport AlertsDm1 from \"./AlertsDm1\";\nimport AlertsCmdHistory from \"./AlertsCmdHistory\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport { StringifyOptions } from \"querystring\";\nimport ActivityAlerts from \"./ActivityAlerts\";\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n alertsDm1: Function,\n alertsDm1Filters: Function,\n alertsSignals: Function,\n alertsSignalsFilters: Function, \n alertsCmdHistory: Function,\n alertsCmdHistoryFilters: Function,\n context: any,\n alertsState: any,\n historyState: any,\n permissions: any , \n maxCommandPermissionValue: any\n}\n\ninterface State {\n activeTab: string,\n mastertag: string,\n status: string,\n selectedType: string, \n historyType: string, \n maxCommandPermissionValue: any\n}\n\nclass Alerts extends Component<Prop, State> { \n\n getRunAttributes = ():any => {\n let mode:string = \"\";\n let mastertag:string = \"\";\n let status:string = \"\";\n \n if (this.props.historyState && this.props.historyState.length > 0) {\n if (\"mode\" in this.props.historyState[0]) {\n mode = this.props.historyState[0].mode; \n }\n if (\"mastertag\" in this.props.historyState[0]) {\n mastertag = this.props.historyState[0].mastertag; \n }\n if (\"status\" in this.props.historyState[0]) {\n status = this.props.historyState[0].status; \n }\n }\n else {\n mode = (getSegmentFromUrl(2) || \"\");\n }\n\n return {\n activeTab: mode === \"signal-alarms\" ? \"2\" : \"1\", \n mastertag: mastertag || \"\",\n status: status || \"\"\n };\n }\n\n runAttributes:any = this.getRunAttributes();\n\n state:State = {\n activeTab: this.runAttributes.activeTab,\n mastertag: this.runAttributes.mastertag,\n status: this.runAttributes.status,\n selectedType: 'unseen',\n historyType: 'lastest', \n maxCommandPermissionValue: 0\n }\n\n onTabChange = (key:string) => {\n key==='2' ? this.setState({activeTab: key, historyType: 'latest'})\n : this.setState({ activeTab: key, selectedType: 'unseen'})\n }\n\n refreshData = (e: any, mode: string) => { \n const mastertag = getSegmentFromUrl(3);\n\n if (mode === \"dm1\") { \n const appliedFilters = this.props.alertsState.tabs[0].appliedFilters; \n this.props.alertsDm1(\n this, \n null, \n null, \n this.props.alertsState.tabs[0].tableConfig.pagination.current, \n null,\n mastertag,\n this.state.selectedType,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.sa,\n appliedFilters.spn,\n appliedFilters.fmi,\n appliedFilters.status\n );\n this.props.alertsDm1Filters(\n this, \n null,\n null, \n null, \n mastertag,\n appliedFilters.timespanFrom, \n appliedFilters.timespanTo\n );\n }\n else if (mode === \"signal-alarms\") { \n const appliedFilters = this.props.alertsState.tabs[1].appliedFilters; \n this.props.alertsSignals(\n this, \n null, \n null, \n this.props.alertsState.tabs[1].tableConfig.pagination.current,\n null,\n mastertag,\n this.state.selectedType,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.status\n );\n this.props.alertsSignalsFilters(\n this, \n null,\n null, \n null, \n mastertag,\n appliedFilters.timespanFrom, \n appliedFilters.timespanTo\n ); \n } else { \n const appliedFilters = this.props.alertsState.tabs[2].appliedFilters; \n this.props.alertsCmdHistory(\n this, \n null, \n null, \n this.props.alertsState.tabs[2].tableConfig.pagination.current, \n null,\n mastertag,\n this.state.historyType,\n appliedFilters.timespanFrom,\n appliedFilters.timespanTo,\n appliedFilters.nickname,\n appliedFilters.command,\n appliedFilters.operator,\n appliedFilters.user,\n appliedFilters.type,\n appliedFilters.status\n );\n this.props.alertsCmdHistoryFilters(\n this, \n null,\n null, \n null, \n mastertag,\n appliedFilters.timespanFrom, \n appliedFilters.timespanTo\n );\n }\n } \n\n allAlerts = (e:any) => {\n e.preventDefault();\n history.push(\"/alerts\");\n }\n getSelectedType = (viewType:string) => {\n this.setState({\n selectedType: viewType,\n })\n }\n getHistoryType = (historyType:string) => {\n this.setState({\n historyType: historyType,\n })\n }\n\n render() { \n \n const result = getPermissions(this.props.permissions.permissions.alert_settings);\n \n let iscreate = result[0];\n let isread = result[1];\n let isupdate = result[2];\n\n const commandPermission = getPermissions(this.props.maxCommandPermissionValue.maxCommandPermissionValue);\n \n // let isCommandCreate = commandPermission[0];\n let isCommandRead = commandPermission[1];\n // let isCommandUpdate = commandPermission[2];\n return (\n \n <div className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n {\n <span>Alerts</span>\n }\n </div>\n </div>\n </Col>\n <Col xs={24} lg={10} className=\"content-header-controls\">\n <Space>\n {\n this.props.alertsState.tabs[parseInt(this.state.activeTab) - 1].tableConfig.pagination.total > 0 && (iscreate && isupdate) &&\n this.state.activeTab !== \"4\" &&\n <Export\n selectedViewType={this.state.selectedType}\n mastertag={this.state.mastertag}\n mode={this.state.activeTab ===\"1\" ? \"dm1-faults\" : \n (this.state.activeTab ===\"2\" ? \"signal-alarms\" : \"cmd-history\")}\n pageSize={this.props.alertsState.tabs[parseInt(this.state.activeTab) - 1].tableConfig.pagination.pageSize}\n totalRecords={this.props.alertsState.tabs[parseInt(this.state.activeTab) - 1].tableConfig.pagination.total}\n currentPage={this.props.alertsState.tabs[parseInt(this.state.activeTab) - 1].tableConfig.pagination.current}\n />\n }\n {\n (this.state.activeTab === \"1\" && isread) && \n <Button data-id=\"alerts-dm1-faults-refresh-button\" className=\"mt-10\" onClick={(e) => {this.refreshData(e, \"dm1\")}} type=\"default\" icon={<ReloadOutlined />}>\n Refresh\n </Button>\n }\n {\n (this.state.activeTab === \"2\" && isread) && \n <Button data-id=\"alerts-signal-alarms-refresh-button\" className=\"mt-10\" onClick={(e) => {this.refreshData(e, \"signals\")}} type=\"default\" icon={<ReloadOutlined />}>\n Refresh\n </Button>\n }\n {\n (this.state.activeTab === \"3\" && isread) && \n <Button data-id=\"alerts-cmd-history-refresh-button\" className=\"mt-10\" onClick={(e) => {this.refreshData(e, \"cmdHistory\")}} type=\"default\" icon={<ReloadOutlined />}>\n Refresh\n </Button>\n }\n </Space>\n </Col>\n </Row>\n \n <div className=\"mt-15\">\n <Tabs activeKey={this.state.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n {\n isread &&\n <TabPane tab=\"DM1 Faults\" key=\"1\" data-id=\"alerts-dm1-faults-tab-button\"> \n <AlertsDm1 selectedType={this.getSelectedType} mastertag={this.state.mastertag} isread={isread} />\n </TabPane> \n }\n {\n isread &&\n <TabPane tab=\"Signal Alerts\" key=\"2\" data-id=\"alerts-signal-alarms-tab-button\">\n <AlertsSignals selectedType={this.getSelectedType} mastertag={this.state.mastertag} status={this.state.status} isread={isread}/>\n </TabPane>\n }\n { \n isCommandRead &&\n <TabPane tab=\"Command History\" key=\"3\" data-id=\"alerts-cmd-history-tab-button\"> \n <AlertsCmdHistory selectedType={this.getSelectedType} mastertag={this.state.mastertag} isread={isread} />\n </TabPane> \n }\n { \n isread &&\n <TabPane tab=\"Activity Alerts\" key=\"4\" data-id=\"alerts-activity-tab-button\"> \n <ActivityAlerts/>\n </TabPane> \n }\n </Tabs> \n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n alertsState: state.alertsReducer.alertsState,\n historyState: history.location.state, \n maxCommandPermissionValue: state.contextReducer.maxCommandPermissionValue\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions \n )(Alerts);\n ","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { sortAlphabetically } from \"../../../utils/commonHelpers\";\n\nexport function assetsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function assetsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function assetsSetStatus(\n status: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_SET_STATUS\", status: status });\n }\n} \n\nexport function assetsSetGatewayId(\n gatewayId: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_SET_GATEWAY_ID\", gatewayId: gatewayId });\n }\n} \n\nexport function assetsMaintSetTitle(\n me: any,\n title: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_MAINT_SET_TITLE\", title: title });\n }\n} \n\nexport function assetsMaintRefreshInstance(\n me: any,\n instances: number[] \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_MAINT_REFRESH_INSTANCE\", instances: instances });\n }\n} \n\nexport function assetMaintTabChange(\n me: any,\n activeTab: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_ASSET_MAINT_TAB_CHANGE\", activeTab: activeTab });\n };\n}\n\nexport function getAsset(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n gatewayId: string\n) { \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets/\" + gatewayId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) { \n let record = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? {} : response.data.data.assets[0];\n callbackFnSuccess(record);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getAssets(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number = 1,\n status: string,\n searchText?: string,\n alertInterval?: string,\n gatewayId?: string,\n listMode?: boolean,\n sortColumn?: string,\n sortDirection?: string,\n filters?: any[any]\n) {\n return async (dispatch: any) => {\n \n let filtersObj:any = []; //This will allow for column by column filteration and search in the future DB function is looking at tagsFilter\n filters && filters['tags'] != null ? filtersObj = {'tagsFilter': filters['tags']} : filtersObj = {}\n \n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets\" + (gatewayId ? \"/\" + gatewayId : \"\"), {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n filters: encodeURIComponent(JSON.stringify(filtersObj)),\n alertInterval: alertInterval,\n status: status,\n listMode: listMode,\n sortColumn: sortColumn,\n sortDirection: sortDirection,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? [] : response.data.data.assets;\n \n data.forEach((item: any, index: number) => {\n data[index]['tags'] = JSON.parse(data[index]['tags'])\n data[index]['tags'] = data[index]['tags']?.sort(sortAlphabetically)\n });\n\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n \n dispatch({ type: \"ASSETS_GET_ASSETS_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getFilterTags(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/tags\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data.data.orgTags == null || (response.data.data.orgTags.length || 0) === 0 ? [] : response.data.data.orgTags;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n \n /* gets tag values and filter to get only unique tag names and sort alphabetically */\n data = data.map((tag:any) => tag['tagName'].toUpperCase()).filter((item:any, i:any, ar:any) => ar.indexOf(item) === i).sort();\n \n dispatch({ type: \"ASSETS_FILTER_TAGS_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function editTagSubmit(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n oldTagName: string,\n newTagName: string,\n actionType: string,\n) {\n\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/edit_tag\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId,\n oldTagName: oldTagName,\n newTagName: newTagName,\n actionType: actionType,\n }\n }\n )\n .then(response => { \n let data = response.data.data.orgTags == null || (response.data.data.orgTags.length || 0) === 0 ? [] : response.data.data.orgTags;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function assetsListRefreshOnUpdate(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_LIST_REFRESH_ON_UPDATE\" });\n };\n}\n\nexport function assetMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n) {\n return async (dispatch: any) => {\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/tags\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let data = response.data.data.assetTags == null || (response.data.data.assetTags.length || 0) === 0 ? [] : response.data.data.assetTags;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ORG_TAGS_SUCCESS\", payload: {data: data} });\n dispatch({ type: \"ASSETS_ASSET_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n \n // dispatch({ type: \"ASSETS_ASSET_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n\nexport function assetMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_ASSET_MAINT_CLOSE\" });\n };\n}\n\nexport function assetMaintTabsEnable(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSETS_ASSET_MAINT_TABS_ENABLE\" });\n };\n}\n\nexport function getLiteAssets(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number = 1,\n searchText?: string,\n gatewayId?: string,\n sortColumn?: string,\n sortDirection?: string,\n \n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets-lite\"+ (gatewayId ? \"/\" + gatewayId : \"\") , {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n sortColumn: sortColumn,\n sortDirection: sortDirection,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n \n let data = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? [] : response.data.data.assets;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"LITE_ASSETS_GET_SUCCESS\", payload: {data: data} });\n })\n .catch(function (error) {\n \n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n\n }\n\n}\n\nexport function liteAssetsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"LITEASSETS_SET_SEARCH\", searchText: searchText });\n }\n}\n\nexport function blockAsset(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n gatewayId?: string,\n isBlocked?: boolean,\n orgId?:string\n) {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/assets/blockasset\"+ (gatewayId ? \"/\" + gatewayId : \"\") ,null, {\n params: {\n isBlocked: isBlocked,\n orgId: orgId\n }\n }\n )\n .then(response => {\n let data = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? [] : response.data.data.assets;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(isBlocked);\n }\n })\n .catch(function (error) {\n \n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n\n return (dispatch: any) => {\n dispatch({ type: \"LITEASSETS_SET_SEARCH\", searchText: null });\n }\n}\n\nexport function liteAssetsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"LITEASSETS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function getCustomerBucketDetails(\n organizationId: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_customer_bucket_details\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\torgId: organizationId,\n\t\t\t},\n }).then((response) => {\n console.log(response.data)\n\t\t\tdispatch({ type: \"GET_CUSTOMER_BUCKET_DETAILS\", payload: { customerBucketDetails: response.data.data.customerBucketDetails } });\n\t\t}).catch(function (error) {\n errorResponse(null, error);\n });\n\t};\n}\n\nexport function getGatewayContractsDetails(\n gatewayId: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n) {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/get_contract_details\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n gatewayId: gatewayId\n\t\t\t},\n\t\t}).then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.contractStatus)\n }\n\t\t}).catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error)\n }\n errorResponse(null, error);\n });\n\t};\n}\nexport function getServicePlansComparisionSheet() {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/get_tutorials\"\n )\n .then(response => { \n dispatch({ type: \"TUTORIALS_GET_SUCCESS\", data: response.data.data.tutorials });\n console.log(response.data.data.tutorials);\n }\n )\n .catch(function (error) {\n console.log(`error`, error)\n });\n };\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { formatTagsForPosting } from \"../../../utils/commonHelpers\";\nimport { jsonCircle } from \"../../GeoFences/geofenceHelper\";\n\nexport function eligibleAssets(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string \n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets\", {\n responseType: \"json\", \n headers: {},\n params: {\n status: status,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => { \n let data = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? [] : response.data.data.assets;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ASSETS_ELIGIBLE_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\n\nexport function eligibleAssetsLov(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string, \n searchText: string \n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets-lov\", {\n responseType: \"json\", \n headers: {},\n params: {\n status: status,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => { \n let data = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? [] : response.data.data.assets;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ASSETS_ELIGIBLE_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getOrgTags(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string,\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/tags\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId\n }\n }\n )\n .then(response => { \n let data = response.data.data.orgTags == null || (response.data.data.orgTags.length || 0) === 0 ? [] : response.data.data.orgTags;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n \n data = data.map((tag: any) => tag['tagName'].toUpperCase()).filter((item: any, i: any, ar: any) => ar.indexOf(item) === i).sort();\n \n dispatch({ type: \"ORG_TAGS_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function assetMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n return async (dispatch: any) => {\n record.tags = formatTagsForPosting(record.tags);\n Axios.post(\n appConfigs.server.URL + \"/ui/api/assets\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n let data = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? {} : response.data.data.assets[0];\n \n data['tags'] = JSON.parse(data['tags']);\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ASSETS_ASSET_MAINT_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function assetOrgGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs-lov\" + ((orgId || \"\") !== \"\" ? \"/\" + orgId : \"\"), {\n responseType: \"json\", \n headers: {},\n params: {\n mode: \"all\",\n scope: \"restricted\",\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => {\n let data = response.data.data.orgs == null || (response.data.data.orgs.length || 0) === 0 ? [] : response.data.data.orgs;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(orgId, data);\n }\n dispatch({ type: \"ASSETS_GET_ORGS_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function assetTemplatesGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n orgByMastertag: string, \n orgId: string,\n searchText?: string \n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates-lov\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId,\n orgByMastertag: orgByMastertag,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => { \n let data = response.data.data.templates == null || (response.data.data.templates.length || 0) === 0 ? [] : response.data.data.templates;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ASSETS_GET_TEMPLATES_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function assetStatusUpdate(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n gatewayId: string,\n status: string\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \n \"/ui/api/assets/\" + gatewayId + \n \"?status=\" + status,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(gatewayId, status); \n }\n dispatch({ type: \"ASSETS_ASSET_STATUS_SUCCESS\", gatewayId: gatewayId, status: status });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function assetIqanConnectKey(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n gatewayId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets/\" + gatewayId + \"/iqan-connect-key\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.iqanConnectKey);\n }\n dispatch({ type: \"ASSETS_IQAN_CONNECT_KEY_SUCCESS\", iqanConnectKey: response.data.data.iqanConnectKey });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function IqanConnectKeyDeviceTwin(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mastertag: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets/\" + mastertag + \"/iqan-connect-key-devicetwin\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.iqanConnectKey);\n }\n dispatch({ type: \"ASSETS_IQAN_CONNECT_KEY_SUCCESS\", iqanConnectKey: response.data.data.iqanConnectKey });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function setAssetSettings (\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mastertag:string,\n values: any\n) {\n return async (dispatch: any) => {\n Axios.post( \n appConfigs.server.URL + `/ui/api/assets/${mastertag}/settings`, values,{\n responseType: \"json\", \n headers: {},\n params: {\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess();\n }\n dispatch({ type: \"ASSET_SETTINGS\", payload: values});\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n })\n }\n}\nexport function assetwifipassword(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mastertag: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets/\" + mastertag + \"/asset-wifi-password\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.wifiPassword);\n }\n dispatch({ type: \"ASSETS_WIFI_PASSWORD\", wifipassword: response.data.data.wifiPassword });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n\n };\n}\n\nexport function getAssetSettings (\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n mastertag:string,\n \n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets/\" + mastertag + \"/settings\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n let deviceSettings={enableWiFi:false,\n enableHotspot:false,\n enableEthernet:false,\n enableSleepMode: false,\n sleepCycleInSeconds: \"\",\n sleepCycleApplied: false,\n nextWakeUpTime: \"\",\n ssidList:[]}\n\n let data=response.data.data.deviceSettings===null?deviceSettings:response.data.data.deviceSettings;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"ASSET_SETTINGS\", payload: data});\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n //errorResponse(me, error);\n });\n\n };\n} \n\n\n\n\n\n \n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function assetSubscriptionsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSET_SUBSCRIPTIONS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function assetSubscriptionsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"ASSET_SUBSCRIPTIONS_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function assetSubscriptionsGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n gatewayId: string,\n searchText: string,\n page: number = 1\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/assets/\" + gatewayId + \"/subscriptions\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.assetSubscriptions);\n }\n dispatch({ type: \"ASSET_SUBSCRIPTIONS_GET_SUCCESS\", payload: {data: response.data.data.assetSubscriptions, page: page} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n \n };\n} \n\nexport function assetSubscriptionsMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n gatewayId: string,\n record: any,\n notification: string,\n action: string,\n scope: string\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/users/\" + record.userId + \"/subscriptions\" + \n \"?gatewayId=\" + gatewayId +\n \"&signalId=\" + record.signalId + \n \"¬ification=\" + notification + \n \"&action=\" + action +\n \"&scope=\" + scope,\n {},\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(gatewayId, record, notification, action, scope); \n }\n dispatch({ type: \"ASSET_SUBSCRIPTIONS_MAINT_SUCCESS\", payload: {record: record, notification: notification, action: action, scope: scope} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error, gatewayId, record, notification, action, scope);\n }\n }\n );\n }\n}\n","import React from \"react\";\nimport {Table } from 'antd';\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { localizeUtcDate } from \"../../../utils/commonHelpers\";\n\ninterface Prop {\n assetsList: any,\n }\n interface State {\n columns:any\n }\nclass AssetHistory extends React.Component<Prop, State> {\n state: State = {\n columns:[]\n }\n componentDidMount(){\n this.setState({columns:this.tableColumns})\n }\n tableColumns = [\n // {\n // title: 'Replaced Order',\n // dataIndex: 'replacedOrder',\n // key: 'Sequence',\n // align: 'left' as 'left',\n // width: '35%',\n // },\n {\n title: 'Mastertag',\n dataIndex: 'mastertag',\n key: 'mastertag',\n width: '20%',\n align: 'left' as 'left'\n },\n {\n title: 'Old Mastertag',\n //dataIndex: 'oldMastertag',\n key: 'oldMastertag',\n width: '20%',\n align: 'left' as 'left',\n render: (text: string, record: any) => (\n <>\n {\n record.oldMastertag && record.oldMastertag !==\"null\"\n ?\n record.oldMastertag\n :'NA'\n }\n </>\n ) \n },\n {\n title: 'Reason',\n //dataIndex: 'reasonForReplacement',\n key: 'reasonForReplacement',\n width: '25%',\n align: 'left' as 'left',\n render: (text: string, record: any) => (\n <>\n {\n record.reasonForReplacement && record.reasonForReplacement !== \"null\"\n ?\n record.reasonForReplacement\n :'NA'\n }\n </>\n ) \n },\n {\n title: 'Replaced Date',\n //dataIndex: 'replacedDate',\n key: 'replacedDate',\n width: '35%',\n align: 'left' as 'left',\n render: (text: string, record: any) => (\n <>\n {\n record.replacedSequence !== 0\n ?\n localizeUtcDate(record.replacedDate, this.props.assetsList.assetMaint.dateFormatOptions)\n :'NA'\n }\n </> \n ) \n \n }\n \n ]\n \n render() { \n return (\n <Table id=\"history\" columns={this.state.columns} \n bordered \n dataSource={this.props.assetsList.assetMaint.record.assetHistory} />\n )\n }\n}\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetHistory);","/// <reference path=\"../../../global.d.ts\" />\nimport React, { Component } from \"react\";\nimport { Form, Row, Col, Input, Select, message, Card, Typography, Space,Alert,Tag, Badge, Checkbox,Switch, Tooltip, InputNumber, Collapse} from 'antd';\nimport { PhoneOutlined, MailOutlined, MobileOutlined, EyeInvisibleOutlined,EyeOutlined, EyeInvisibleFilled, FontSizeOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\nimport { KeyOutlined, InfoCircleOutlined } from '@ant-design/icons';\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { getPermissions } from \"../../../utils/commonHelpers\";\nimport { ReactComponent as OperatorIcon } from \"../../../assets/images/operator.svg\";\nimport Icon from \"@ant-design/icons\";\nimport AssetHistory from \"./AssetHistory\";\n\nconst { Option } = Select;\nconst { Paragraph } = Typography;\nconst { Panel } = Collapse;\n\ninterface Prop {\n assetMaint: Function,\n assetMaintTabsEnable: Function,\n eligibleAssets: Function,\n eligibleAssetsLov: Function,\n getOrgTags: Function,\n getFilterTags: Function,\n assetsListRefreshOnUpdate: Function,\n assetsMaintSetTitle: Function,\n assetTemplatesGet: Function,\n assetOrgGet: Function,\n assetIqanConnectKey: Function,\n IqanConnectKeyDeviceTwin: Function, \n assetwifipassword: Function,\n context: any,\n assetsList: any,\n guestRole: boolean,\n permissions: any,\n onMtagReplacement:Function,\n assetMaintFormRef:Function\n}\n\ninterface State {\n orgId: string,\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n planQuotaId: number;\n quotaName: string;\n partNumber: string;\n packageId: any;\n noOfSignals: number;\n minCollectionFreq: number;\n maxDayDm1: number;\n mastertag: string;\n status: string;\n partNumberDesc: string; \n hideShowWifiPwd: boolean; \n enableIQAN: boolean;\n allowViewSleepMode: boolean;\n enableMtag: boolean; \n}\n\nclass AssetMaintInfo extends React.Component<Prop, State> { \n \n state: State = {\n orgId: \"\",\n planQuotaId: 1,\n quotaName : \"Unlimited\", \n partNumber: \"\",\n packageId: \"\",\n noOfSignals: -1,\n minCollectionFreq: -1,\n maxDayDm1: -1, \n mastertag: \"\",\n status: \"\",\n partNumberDesc:\"\",\n hideShowWifiPwd: false,\n enableIQAN:false, \n // enableSleepMode: false, \n // sleepModeInSeconds: \"\", \n allowViewSleepMode: false, \n enableMtag:false \n };\n \n formRef = React.createRef<FormInstance>();\n\n \n \n componentDidMount() { \n this.props.assetMaintFormRef(this.formRef);\n if (this.props.assetsList.assetMaint.visible) { \n this.componentUpdate(this.props.assetsList.assetMaint.record);\n }\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.assetsList.assetMaint.tabs[0].instance !== prevProps.assetsList.assetMaint.tabs[0].instance) {\n this.componentUpdate(this.props.assetsList.assetMaint.record);\n }\n }\n\n componentUpdate(record:any) {\n if ((record.orgId || \"\") === \"\") {\n if (record.gatewayId) {\n this.props.eligibleAssets(this, this.eligibleAssetsSuccess, null, null);\n } else {\n // Fast performance of mastertag tag drop down list when create a new asset from whitelisted,inactive state\n //ops-3368:While creating whitelisted asset, we are getting inactive master-tags.\n //this.props.eligibleAssetsLov(this, this.eligibleAssetsLovSuccess, null, \"whitelisted,inactive\", null);\n \n this.props.eligibleAssetsLov(this, this.eligibleAssetsLovSuccess, null, \"whitelisted\", null);\n }\n \n this.props.assetOrgGet(this, this.assetOrgGetSuccess, null, null/*record.orgId*/);\n }\n if ((record.orgId || \"\") !== \"\") {\n {/* Rollback gateway replacement changes */}\n this.props.eligibleAssetsLov(this, this.eligibleAssetsLovSuccess, null, \"whitelisted,inactive\", null);\n this.props.assetOrgGet(this, this.assetOrgGetSuccess, null, null/*record.orgId*/);\n }\n /* OPS-2271: When a null template or no template assigned to asset, allow user to\n assign a template for that asset. So, removing/commenting below if condition*/\n //if ((record.templateId || \"\") !== \"\") {\n this.props.assetTemplatesGet(this, this.assetTemplatesGetSuccess, null, null, record.mastertag /*record.templateId*/, record.orgId, null);\n this.props.getOrgTags(this, null, null, 'all', record.orgId);\n //}\n if (this.props.assetsList.assetMaint.record.objectAdmin && (record.gatewayId || \"\") !== \"\" && (record.status || \"\") !== \"whitelisted\") {\n this.props.getOrgTags(this, null, null, 'all', record.orgId);\n }\n \n // if the user has iqan_key permission but not sub-org permission\n // the user shall be able to view iqan key in the current org\n if ((record.gatewayId || \"\") !== \"\" && (record.status || \"\") !== \"whitelisted\") {\n \n // ops-3589: Getting IqanConnect key from Devicetwin.\n //this.props.assetIqanConnectKey(this, null, null, record.gatewayId);\n this.props.IqanConnectKeyDeviceTwin(this,null, null, record.mastertag);\n \n //ops-3663,3801: gateway wifi password \n this.props.assetwifipassword(this,null,null,record.mastertag);\n }\n\n formInit(this); \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue({\n gatewayId: record.gatewayId,\n nickname: record.nickname,\n mastertag: record.mastertag,\n mac: record.mac,\n model: record.model,\n templateId: record.templateId,\n orgId: record.orgId,\n tags: record.tags?.map((tag:any) => { return {value: tag.tagName.toUpperCase(), label: tag.tagName.toUpperCase(), key: tag.tagName.toUpperCase()} }),\n mode: (record.gatewayId || \"\") !== \"\" ? \"update\" : \"add\", \n planQuotaId: record.planplanQuotaId,\n quotaName: record.planQuotaName,\n partNumber: record.partNumber,\n noOfSignals: record.noOfSignals,\n minCollectionFreq: record.minCollectionFreq,\n maxDayDm1: record.maxDayDm1,\n customFieldId:record.customFieldId,\n enableIQANConnect:record.enableIQANConnect,\n iqanConnectTimeOut:record.iqanConnectTimeOut,\n hdnEnableIQANConnect:record.enableIQANConnect,\n hdnIQanTimeout:record.iqanConnectTimeOut, \n allowViewSleepMode: record.allowViewSleepMode,\n enableMtag:false\n // enableSleepMode:record.enableSleepMode,\n // sleepCycleInSeconds:record.sleepCycleInSeconds\n });\n this.setState({orgId: record.orgId, planQuotaId: record.planQuotaId, quotaName: record.quotaName, partNumber: record.partNumber, \n noOfSignals: record.noOfSignals, minCollectionFreq: record.minCollectionFreq, maxDayDm1: record.maxDayDm1, \n mastertag: record.mastertag ,status: record.status, partNumberDesc:record.partNumberDesc,enableIQAN:record.enableIQANConnect,\n allowViewSleepMode: record.allowViewSleepMode,enableMtag:false\n }); \n \n this.props.onMtagReplacement(false);\n }\n };\n\n assetOrgGetSuccess = (orgId: string, data: any) => { \n if ((data.length || 0) === 0) {\n this.formRef.current!.setFieldsValue({\n orgId: \"\"\n });\n }\n };\n\n assetTemplatesGetSuccess = (data: any) => { \n if ((data.length || 0) === 0) {\n this.formRef.current!.setFieldsValue({\n templateId: \"\"\n });\n if (this.state.planQuotaId > 1) {\n let interval;\n let intervalUnit;\n if (this.state.minCollectionFreq > -1 && this.state.minCollectionFreq % 3600 == 0) {\n interval = this.state.minCollectionFreq /3600;\n intervalUnit = 'h';\n } else if ( this.state.minCollectionFreq % 60 == 0) {\n interval = this.state.minCollectionFreq /60;\n intervalUnit = 'm';\n } else {\n interval = this.state.minCollectionFreq; \n intervalUnit = 's'; \n }\n let intervalMsg = interval + intervalUnit; \n message.error(\"No eligible template meets min \" \n + intervalMsg + \" collection freq and max \" +\n this.state.noOfSignals + \" signals\");\n }\n }\n };\n\n eligibleAssetsSuccess = (data: any) => { \n if ((data.length || 0) === 0) {\n message.warning(\"No eligible assets were found to create\");\n }\n }\n\n eligibleAssetsLovSuccess = (data: any) => { \n if ((data.length || 0) === 0) {\n message.warning(\"No eligible assets were found to create\");\n }\n }\n\n onFinish = (values: any) => { \n resetFormErrors(this, this.formRef.current); \n this.props.assetMaint(this, this.onFinishSuccess, this.onFinishFailure, values);\n }\n\n onFinishSuccess = (record: any) => { \n this.props.assetsMaintSetTitle(this, \"Asset\" + (record.nickname ? \" :: \" + record.nickname : \"\"));\n \n this.props.getFilterTags(this, null, null, 'all');\n {/* Rollback gateway replacement changes */}\n let isEnableMtag:boolean=this.formRef.current!.getFieldValue(\"enableMtag\");\n this.componentUpdate(record);\n\n if ((record.gatewayId || \"\") !== \"\") {\n this.props.assetMaintTabsEnable(this);\n }\n {/* Rollback gateway replacement changes */}\n let successMsg:string=!isEnableMtag?\"Asset has been successfully processed\":\"Asset has been replaced successfully\";\n // let successMsg:string=\"Asset has been successfully processed\";\n successResponse(this, successMsg); \n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n \n\n onMastertagChange = (value: string, option:any) => {\n if ((value || \"\") !== \"\") { \n\n this.props.assetsList.assetMaint.tabs[0].assetsEligible.forEach((record: any) => { \n {/* Rollback gateway replacement changes */}\n if (record.mastertag === value && !this.state.enableMtag) {\n // if (record.mastertag === value ) {\n this.props.assetOrgGet(this, null, null, record.orgId);\n this.setState({ orgId: record.orgId });\n this.state.planQuotaId = record.planQuotaId;\n this.state.quotaName = record.quotaName;\n this.state.partNumber = record.partNumber;\n this.state.packageId= record.packageId;\n this.state.noOfSignals = record.noOfSignals;\n this.state.minCollectionFreq = record.minCollectionFreq;\n this.state.maxDayDm1 = record.maxDayDm1;\n this.state.mastertag = record.mastertag;\n this.setState({status: record.status});\n this.state.partNumberDesc=record.partNumberDescription;\n this.setState({orgId: record.orgId});\n this.formRef.current!.setFieldsValue({ gatewayId: option.key, orgId: record.orgId, templateId: null });\n this.props.assetTemplatesGet(this, this.assetTemplatesGetSuccess, null, null, value, null, null); \n }\n });\n {/* Rollback gateway replacement changes */} \n if(this.state.mastertag!==value && this.state.enableMtag) {\n this.props.onMtagReplacement(true);\n this.formRef.current!.setFieldsValue({enableMtag:true});\n } \n }\n else {\n this.setState({ orgId: \"\" });\n this.setState({status: \"\"});\n this.formRef.current!.setFieldsValue({ gatewayId: \"\", orgId: \"\", templateId: null });\n }\n }\n \n onOrgIdChange = (value: string) => {\n this.props.assetTemplatesGet(this, this.getTemplatesSuccess, null, null, this.formRef.current?.getFieldValue('mastertag'), value, null);\n this.props.getOrgTags(this, null, null, 'all', value);\n }\n\n onTemplateIdChange = (value: string) => {\n if ((value || \"\") !== \"\") {\n this.formRef.current!.setFieldsValue({templateId:value});\n }\n }\n\n getTemplatesSuccess = (data: any) => {\n const templateId = this.props.assetsList.assetMaint.record.templateId;\n const findTemplateIndex = data.findIndex((t: any) => t.templateId === templateId);\n if(findTemplateIndex > -1) {\n this.formRef.current!.setFieldsValue({\n templateId: templateId\n });\n } else {\n this.formRef.current!.setFieldsValue({\n templateId: \"\"\n });\n if ((data.length || 0) === 0 && this.state.planQuotaId > 1) {\n let interval;\n let intervalUnit;\n if (this.state.minCollectionFreq > -1 && this.state.minCollectionFreq % 3600 == 0) {\n interval = this.state.minCollectionFreq /3600;\n intervalUnit = 'h';\n } else if ( this.state.minCollectionFreq % 60 == 0) {\n interval = this.state.minCollectionFreq /60;\n intervalUnit = 'm';\n } else {\n interval = this.state.minCollectionFreq; \n intervalUnit = 's';\n }\n let intervalMsg = interval + intervalUnit; \n message.error(\"No eligible template meets the min \" \n + intervalMsg + \" collection freq and max \" +\n this.state.noOfSignals + \" signals\" );\n }\n } \n // this.formRef.current!.setFieldsValue({\n // tags: []\n // });\n }\n \n iqanConnectKeyRender = (status: string, value: string) => {\n switch(status) {\n case \"signal-not-exists\":\n return \"Not Configured\";\n case \"signal-no-value\":\n return \"Configuration Error\";\n case \"signal-value-null\":\n return \"Not Detected\";\n case \"signal-value-error\":\n return \"Signal Data Processing Error\";\n case \"signal-value-invalid\":\n return \"Signal Detected, Value Invalid: \" + value;\n case \"signal-value\":\n return value;\n case \"true\":\n return value;\n case \"signal-value-redis\":\n return value;\n case \"false\":\n return \"IQAN Connect key is not available\";\n default:\n return \"Unknown Status\";\n }\n }\n \n getLiteTemplateDetails=()=>{\n return <span style={{color:'#0052CC',fontSize:'12px'}}>{\"Max no of Signals: \" + this.state.noOfSignals + \" | \" + \"Min Collection Frequency: \" + this.state.minCollectionFreq /3600+\"Hrs\" + \" | \" + \"Max DM1s per Day: \" + this.state.maxDayDm1}</span>;\n }\n\n getMtagLiteDetails=()=>{\n return <span style={{color:'#0052CC',fontSize:'12px'}}>{\"Part Number: \" + this.state.partNumber + \" | \" + \"Description: \" + (this.state.partNumberDesc||\"NA\")}</span>\n }\n\n hideShowWifiPassword =()=>{\n\n if(this.state.hideShowWifiPwd){\n this.setState({hideShowWifiPwd:false});\n }\n else{\n this.setState({hideShowWifiPwd:true});\n } \n }\n\n iqanConnectHandleChange=(checked:any)=>{\n this.setState({ enableIQAN: checked }); \n let timeOutValue=this.props.assetsList.assetMaint.record.iqanConnectTimeOut!==null\n ?this.props.assetsList.assetMaint.record.iqanConnectTimeOut:0;\n this.formRef.current!.setFieldsValue({\n iqanConnectTimeOut:checked?timeOutValue:0\n });\n \n }\n /* Rollback gateway replacement changes */\n onMtagReplacement = (checked:any) => {\n this.props.onMtagReplacement(false);\n this.formRef.current!.setFieldsValue({enableMtag:false});\n this.setState({ enableMtag: checked,formSuccess:false }); \n if(!checked)\n {\n this.componentUpdate(this.props.assetsList.assetMaint.record);\n }\n }; \n\n onSubmit=()=>{\n this.formRef.current!.submit();\n }\n\n render() { \n const { assetMaint } = this.props.assetsList; \n let barkoGuest = this.props.guestRole; \n let isAdmin = this.props.context.user.contextUserIsAdmin; \n //ops-2839: Remove the iqanconnect key permission check \n //const iqankey = getPermissions(this.props.permissions.permissions.iqan_key);\n //let isiqankey = iqankey[1];\n const ParkerOrgId = 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b'\n\n const result = getPermissions(this.props.permissions.permissions.operator_support);\n let isOprRead = result[1];\n\n const tagPermissions = getPermissions(this.props.permissions.permissions.asset_tagging);\n let canTagCreate = tagPermissions[0];\n let canTagRead = tagPermissions[1];\n let canTagDelete = tagPermissions[3];\n\n let ishideShow = this.state.hideShowWifiPwd;\n \n const checkTagsValidations = async (rule: any, options: any) => {\n let newValues:any = [];\n let existingValues = [];\n newValues = options?.map((o:any) => o.value);\n existingValues = assetMaint.record.tags?.map((o: any) => o.tagName);\n if (!canTagDelete && existingValues !== undefined) {\n if (!existingValues.every((tag: any) => newValues.includes(tag))) {\n return Promise.reject(`you do not have enough permission privilege to delete tags`);\n }\n }\n if (options?.length) {\n if (canTagCreate) {\n if (options?.length > appConfigs.app.assetTags.maxAssetTags) {\n options.pop();\n return Promise.reject(`Maximum of ${appConfigs.app.assetTags.maxAssetTags} tags allowed`);\n }\n if (options[options.length - 1]?.value.length > appConfigs.app.assetTags.maxAllowCharactersPerTags) {\n options.pop();\n return Promise.reject(`Maximum of ${appConfigs.app.assetTags.maxAllowCharactersPerTags} characters allowed per tags`);\n }\n } else {\n //if we are deleting don't remove additional tag\n if (existingValues === undefined) {\n existingValues = []\n }\n if (options?.length > assetMaint.record.tags?.length || existingValues?.every((tag: any) => !newValues.includes(tag))) {\n options.pop();\n return Promise.reject(`you do not have permission to add tags`);\n }\n }\n }\n return Promise.resolve();\n };\n \n return (\n\n <>\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"assets-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"assets-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n \n <Row gutter={8} style={{marginTop: 15}}>\n <Col offset={1} span={23}>\n <Form\n id=\"assetMaintInfoForm\"\n ref={this.formRef}\n layout=\"vertical\"\n onFinish={this.onFinish}\n > \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item \n name=\"hdnEnableIQANConnect\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"hdnIQanTimeout\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"customFieldId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"gatewayId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n name=\"mode\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n {/* Rollback gateway replacement changes */}\n <Form.Item \n name=\"enableMtag\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n {\n assetMaint.record.status==='active' && isAdmin &&\n <Tooltip placement=\"topRight\" title=\"Replace Asset\">\n <Form.Item style={{marginTop:'-15px',flexDirection:'row',marginLeft:'535px'}} label=\"Replace Asset: \" valuePropName=\"checked\">\n \n <Switch checked={this.state.enableMtag} onChange={this.onMtagReplacement} style={{margin:'0px 0px 5px 5px'}}/>\n \n </Form.Item>\n </Tooltip>\n }\n <Form.Item\n label=\"Master Tag\"\n name=\"mastertag\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select \n data-id=\"assets-maint-asset-info-mastertag\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n onChange={this.onMastertagChange}\n allowClear\n disabled={(assetMaint.record.gatewayId || assetMaint.record.status == 'inactive') && !this.state.enableMtag\n }\n > \n {/* Rollback gateway replacement changes */} \n {\n !this.state.enableMtag &&\n assetMaint.tabs[0].assetsEligible.map((record:any, index:number) => ( \n <Option key={record.gatewayId} value={record.mastertag}>\n {record.mastertag}\n </Option>\n ))\n }\n {\n this.state.enableMtag &&\n assetMaint.tabs[0].assetsEligible.filter((a:any) => {return a.status===\"whitelisted\"})\n .map((record:any, index:number) => (\n (record.packageId===5 && assetMaint.record.orgId === record.orgId)?\n <Option key={record.gatewayId} value={record.mastertag}>\n {record.mastertag}\n </Option>:\"\"\n ))\n } \n </Select> \n </Form.Item> \n </Col>\n {/* Rollback gateway replacement changes */}\n {\n this.state.enableMtag &&\n <Col span={24}>\n <Form.Item\n label=\"Reason for Replacement\"\n name=\"status\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select \n data-id=\"assets-maint-asset-info-mastertag-replacement-reason\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n > \n <Option key=\"faulty\" value=\"faulty\">Faulty</Option>\n <Option key=\"migrate-from-3G-to-4G\" value=\"migrate-from-3G-to-4G\">Migrate from 3G to 4G</Option>\n <Option key=\"other\" value=\"other\">Other</Option>\n </Select> \n </Form.Item>\n </Col>\n }\n <div className=\"lite-info\">\n {\n this.state.partNumber &&\n this.state.minCollectionFreq > 0 &&\n this.getMtagLiteDetails()\n } \n </div> \n </Row> \n \n {\n (assetMaint.record.status || \"\") !== \"whitelisted\" &&\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n label=\"Asset Name\"\n name=\"nickname\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n //{ validator:(_, value) => (value.length || 0) > 1 ? Promise.resolve() : Promise.reject(appConfigs.errors.fieldErrors.atLeastTwoCharacters) }\n ]}\n >\n <Input maxLength={255} disabled={!this.formRef.current?.getFieldValue(\"mastertag\") || assetMaint.record.status == 'inactive' || this.state.enableMtag }\n />\n </Form.Item>\n </Col> \n <Col span={12}>\n <Form.Item\n label=\"Serial Number\"\n name=\"mac\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={!this.formRef.current?.getFieldValue(\"mastertag\") || barkoGuest || assetMaint.record.status == 'inactive' ||this.state.enableMtag} \n />\n </Form.Item>\n </Col> \n </Row> \n } \n {\n (assetMaint.record.status || \"\") !== \"whitelisted\" && \n <Row gutter={8}>\n \n <Col span={12}>\n <Form.Item\n label=\"Asset Model\"\n name=\"model\"\n >\n <Input maxLength={255} disabled={!this.formRef.current?.getFieldValue(\"mastertag\") || barkoGuest || assetMaint.record.status == 'inactive' || this.state.enableMtag} \n />\n </Form.Item>\n </Col>\n <Col span={12}> \n <Form.Item \n label=\"Org Name\"\n name=\"orgId\" \n >\n <Select \n data-id=\"assets-maint-asset-info-org-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n onChange={this.onOrgIdChange}\n disabled={\n !this.formRef.current?.getFieldValue(\"mastertag\") ||\n !assetMaint.record.gatewayId || barkoGuest || assetMaint.record.status == 'inactive' ||this.state.enableMtag\n } \n >\n {assetMaint.tabs[0].orgs !== null && assetMaint.tabs[0].orgs.map((record:any, index:number) => (\n <Option key={index} value={record.orgId}> \n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item> \n </Col> \n </Row>\n }\n {\n (assetMaint.record.status === \"whitelisted\") &&\n <Row gutter={8}>\n <Col span={24}>\n <Form.Item \n label=\"Org Name\"\n name=\"orgId\" \n >\n <Select \n data-id=\"assets-maint-asset-info-org-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n onChange={this.onOrgIdChange}\n disabled={\n !this.formRef.current?.getFieldValue(\"mastertag\") ||\n !assetMaint.record.gatewayId || barkoGuest ||this.state.enableMtag\n } \n >\n {assetMaint.tabs[0].orgs !== null && assetMaint.tabs[0].orgs.map((record:any, index:number) => (\n <Option key={index} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item> \n\n </Col>\n </Row>\n }\n \n {\n (!assetMaint.record.gatewayId || (this.state.status || \"\") === \"whitelisted\") &&\n (assetMaint.record.status || \"\") !== \"whitelisted\" &&\n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Template\"\n name=\"templateId\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n > \n <Select \n data-id=\"assets-maint-asset-info-template-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n onChange={this.onTemplateIdChange}\n allowClear\n disabled={\n this.state.packageId === 5 || this.state.packageId === 6 || !this.formRef.current?.getFieldValue(\"mastertag\") || barkoGuest || assetMaint.record.status == 'inactive' || this.state.enableMtag\n } \n > \n {assetMaint.tabs[0].templates !== null && assetMaint.tabs[0].templates.map((record:any, index:number) => (\n record.templateVisibleToSubOrg ? \n <Option key={index} value={record.templateId} style={{color: \"blue\"}}>\n {record.name} \n </Option>\n : \n <Option key={index} value={record.templateId}>\n {record.name}\n </Option>\n ))}\n </Select>\n { (this.state.packageId === 5 || this.state.packageId === 6) &&\n <span style={{color:'#0052CC',fontSize:'14px'}}>{\"Require Service Plan to use the asset\"}</span> \n } \n </Form.Item> \n </Col> \n <div className=\"lite-info\">\n {\n this.state.partNumber &&\n this.state.minCollectionFreq > 0 &&\n this.getLiteTemplateDetails()\n }\n </div>\n </Row> \n } \n {\n assetMaint.record.gatewayId &&\n (assetMaint.record.status || \"\") !== \"whitelisted\" &&\n (this.state.status || \"\") !== \"whitelisted\" &&\n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Template\"\n name=\"templateId\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n > \n <Select \n data-id=\"assets-maint-asset-info-template-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder= {this.state.partNumber == \"IOT10680180LSP\" ? \"Cannot assign template to WiFi only device\" : \"Select...\"}\n allowClear\n disabled={\n !this.formRef.current?.getFieldValue(\"mastertag\") || barkoGuest || assetMaint.record.status == 'inactive' || this.state.enableMtag || this.state.partNumber == \"IOT10680180LSP\"\n } \n > \n {assetMaint.tabs[0].templates !== null && assetMaint.tabs[0].templates.map((record:any, index:number) => (\n record.templateVisibleToSubOrg ? \n <Option key={index} value={record.templateId} style={{color: \"blue\"}}>\n {record.name} \n </Option>\n : \n <Option key={index} value={record.templateId}>\n {record.name}\n </Option>\n ))}\n </Select>\n </Form.Item> \n </Col> \n <div className=\"lite-info\">\n {\n this.state.partNumber &&\n this.state.minCollectionFreq > 0 &&\n this.getLiteTemplateDetails()\n }\n </div>\n </Row> \n } \n\n {\n\n (canTagRead) && \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Custom Tags\"\n name=\"tags\"\n initialValue={assetMaint.record.tags?.map((tag: any) => { return { value: tag.tagName.toUpperCase(), label: tag.tagName.toUpperCase(), key: tag.tagName.toUpperCase() } })}\n rules={[{ validator: checkTagsValidations }]}\n > \n <Select \n\n mode=\"tags\"\n style={{ width: '100%', textTransform: \"uppercase\" }}\n placeholder=\"Select Tags\"\n disabled={ (!canTagCreate && !canTagDelete) || assetMaint.record.status == 'inactive' ||this.state.enableMtag\n }\n labelInValue\n >\n {assetMaint.tabs[0].orgTags?.map((tagName:any, index:number) => (\n <Option key={index} value={tagName.toUpperCase()}>\n {tagName.toUpperCase()}\n </Option>\n ))}\n </Select> \n </Form.Item> \n </Col>\n <Col span={12} >\n \n \n </Col> \n </Row>\n }\n { // ops-2839, Removed the Iqanconnect key permission check: Allow a user with iqan_key read permission to read iqan_key in home org even though it does not have sub-org permission\n //ops-2839: Remove the iqanconnect key permission check \n (assetMaint.record.status || \"\") !== \"whitelisted\" &&\n this.formRef.current?.getFieldValue(\"gatewayId\") &&\n (assetMaint.iqanConnectKey.status || \"access-forbidden\") !== \"access-forbidden\" &&\n <Card \n data-id=\"assets-maint-asset-info-iqan-connect-key\"\n size=\"small\" \n title={\n <>\n <KeyOutlined className=\"pr-5\"/> \n <span>IQAN Connect Key</span>\n </>\n }\n className=\"mt-10\"\n >\n <Paragraph copyable className=\"mt-10\">\n {\n assetMaint.iqanConnectKey.value ? assetMaint.iqanConnectKey.value :\n this.iqanConnectKeyRender(assetMaint.iqanConnectKey.status, assetMaint.iqanConnectKey.value)\n }\n </Paragraph>\n {\n assetMaint.record.deviceNotExistsInIoT &&\n <Alert\n message=\"Asset is not available in IoT hub\"\n \n type=\"info\"\n showIcon\n />\n \n }\n {\n // this.props.context.appContext.orgId === 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n <Row gutter={8}>\n \n <Col span={6}>\n <Form.Item\n label=\"IQAN Connect\"\n name=\"enableIQANConnect\"\n valuePropName=\"checked\"\n >\n <Switch onChange={this.iqanConnectHandleChange}\n \n />\n </Form.Item> \n </Col>\n <Col span={12}>\n <Form.Item\n \n name=\"iqanConnectTimeOut\"\n label={(<span>\n IQAN Connect Timeout (in min) \n <Tooltip title=\"if a timeout value is specified, the IQAN Connect program on gateway will stop after this timeout period. If the timeout is specified as zero, the IQAN Connect will continue running until disabled from this UI.\">\n <InfoCircleOutlined />\n </Tooltip>\n </span>)}\n \n >\n <InputNumber \n min={0}\n max={1440}\n pattern=\"[0-9]*\"\n disabled={!this.state.enableIQAN} \n style={{ width: '70%' }} \n />\n </Form.Item>\n </Col>\n </Row>\n } \n \n </Card> \n } \n {\n isOprRead &&\n (assetMaint.record.operatorIdValue ||\n assetMaint.record.accessCardValue) &&\n\n <Card\n data-id=\"assets-maint-asset-info-iqan-connect-key\"\n size=\"small\"\n title={\n <>\n <Space>\n <Icon type=\"setting\" component={OperatorIcon} />\n {(assetMaint.record.operatorIdValue || \"\") === \"\" ?\n <span>RFID</span> : <span>Operator ID</span>\n }\n </Space>\n </>\n }\n className=\"mt-10\"\n >\n <Paragraph className=\"mt-10\">\n {(assetMaint.record.operatorIdValue || \"\") === \"\" ?\n assetMaint.record.accessCardValue\n : assetMaint.record.operatorIdValue\n }\n </Paragraph>\n </Card>\n\n } \n {/* {\n this.props.context.appContext.orgId == 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n\n <Card\n\n data-id=\"assets-maint-asset-info-gateway-password\"\n size=\"small\"\n title={\n <>\n <Space>\n {this.wifiPasswordLabel} \n </Space>\n </>\n }\n className=\"mt-10\" \n\n >\n {(ishideShow) &&\n <Paragraph copyable className=\"mt-10\"> \n {assetMaint.wifipassword} \n \n </Paragraph>\n } \n </Card> \n } */}\n {\n //this.props.context.appContext.orgId == 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n isAdmin &&\n <Card\n\n data-id=\"assets-maint-asset-info-gateway-password\"\n size=\"small\"\n title={\n <>\n <Space>\n Wi-Fi Password \n </Space>\n </>\n }\n className=\"mt-10\" \n\n >\n { assetMaint.wifipassword && assetMaint.wifipassword.length !== 8?\n \"N/A\"\n :\n ishideShow?\n <>\n <Row>\n <Paragraph copyable={ishideShow?true:false} className=\"mt-10\">\n {assetMaint.record.isBspVersion?\n \"IQAN_Connect\":assetMaint.wifipassword\n }\n </Paragraph>\n \n <Tooltip title=\"hide Wi-Fi password\">\n <EyeInvisibleFilled style={{ margin: '15px 0px 0px 10px'}} onClick={() => this.hideShowWifiPassword()}/>\n </Tooltip>\n </Row>\n \n </>\n :\n <>\n <span className=\"wifi-password\">********</span>\n <Tooltip title=\"show Wi-Fi password\">\n <EyeOutlined style={{marginLeft: '10px'}} onClick={() => this.hideShowWifiPassword()}/>\n </Tooltip>\n </>\n } \n </Card> \n }\n {/* Rollback gateway replacement changes */}\n { \n assetMaint.record.status==='active' && \n this.props.context.appContext.orgId === ParkerOrgId &&\n assetMaint.record.assetHistory && \n assetMaint.record.assetHistory.length > 0 &&\n // <Card \n // // style={{display:'none'}}\n // data-id=\"assets-maint-asset-info-iqan-connect-key\"\n // size=\"small\" \n // title={\n // <>\n \n // <span>Asset Replacement History</span>\n // </>\n // }\n // className=\"mt-10\"\n // >\n // <AssetHistory/>\n // </Card> \n <Collapse className=\"mt-30\">\n <Panel header=\"Replacement History\" key=\"1\">\n <AssetHistory/>\n </Panel>\n </Collapse>\n }\n\n </Form> \n </Col>\n </Row> \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList,\n permissions: state.contextReducer.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetMaintInfo);\n\n","import React from \"react\";\nimport { Table, Checkbox, Space, Tooltip, Input } from 'antd';\nimport { PhoneOutlined, MailOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from '../../../utils/history';\nimport { stringToUrlString } from \"../../../utils/commonHelpers\";\n\nimport \"../assets.css\";\n\nconst { Search } = Input;\n\ninterface Prop {\n assetSubscriptionsSetPagination: Function,\n assetSubscriptionsGet: Function,\n assetSubscriptionsMaint: Function,\n assetsListRefreshOnUpdate: Function,\n assetSubscriptionsSetSearch: Function,\n assetMaintClose: Function, \n assetsList: any\n}\n\ninterface State {\n partNumber: string;\n minCollectionFreq: number;\n}\n\nclass AssetMaintSubscriptions extends React.Component<Prop, State> { \n\n state: State = {\n partNumber: \"\",\n minCollectionFreq: -1,\n }\n \n componentDidMount() {\n this.props.assetSubscriptionsSetPagination(this.onPaginationChange);\n this.componentUpdate(1, \"\");\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.assetsList.assetMaint.tabs[1].instance !== prevProps.assetsList.assetMaint.tabs[1].instance) {\n this.componentUpdate(1, \"\");\n }\n }\n\n componentUpdate(page: number, searchText: string) {\n if ((this.props.assetsList.assetMaint.record.gatewayId || \"\") !== \"\") {\n this.props.assetSubscriptionsGet(this, this.assetSubscriptionsGetSuccess, null, this.props.assetsList.assetMaint.record.gatewayId, searchText, page);\n }\n }\n\n onPaginationChange = (page: number) => {\n this.props.assetSubscriptionsGet(this, null, null, this.props.assetsList.assetMaint.record.gatewayId, this.props.assetsList.assetMaint.tabs[1].searchText, page);\n }\n \n onCheckChange = (e:any, record:any, notification: string, scope: string) => {\n \n let action = e.target.checked ? \"plus\" : \"minus\";\n\n this.props.assetSubscriptionsMaint(this, this.onCheckChangeSuccess, this.onCheckChangeFailure, this.props.assetsList.assetMaint.record.gatewayId, record, notification, action, scope);\n }\n\n assetSubscriptionsGetSuccess = (data: any) => {\n //possibly expand only row, where data.length === 1\n if ((data.length || 0) === 1) {\n setTimeout(function() {\n let targetButton:any = document.querySelectorAll('[data-id=assets-maint-subscriptions-data] tr[data-row-key=\"user.' + data[0].userId + '.*\"] .ant-table-row-expand-icon-collapsed');\n if (targetButton.length) {\n for (var i = 0; i < targetButton.length; i++) { \n targetButton[i].click(); \n }\n }\n }, 250); \n }\n\n const record=this.props.assetsList.assetMaint;\n if(record){\n this.setState({partNumber:record.partNumber,minCollectionFreq:record.minCollectionFreq});\n }\n }\n\n onCheckChangeSuccess = (userId:string, record:any, notification: string, action: string, scope:string) => { \n if (scope === \"user\") {\n this.closeExpandedRows();\n }\n this.props.assetsListRefreshOnUpdate(this);\n };\n\n onCheckChangeFailure = (error:string, userId:string, record:any, notification: string, action: string, scope:string) => { \n } \n \n closeExpandedRows(rowKey?:string) { \n let active:any;\n \n if((rowKey || \"\") !== \"\") {\n active = document.querySelectorAll('[data-id=assets-maint-subscriptions-data] tr[data-row-key=\"' + rowKey + '\"] .ant-table-row-expand-icon-expanded');\n }\n else {\n active = document.querySelectorAll('[data-id=assets-maint-subscriptions-data] .ant-table-row-expand-icon-expanded');\n }\n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i].click(); \n if ((rowKey || \"\") !== \"\") {\n //if expanded click it twice to refresh updated state data\n active[i].click(); \n }\n }\n }\n }\n \n onSearch = (searchText: string) => { \n let me = this;\n setTimeout(function(){\n me.props.assetSubscriptionsGet(me, null, null, me.props.assetsList.assetMaint.record.gatewayId, me.props.assetsList.assetMaint.tabs[1].searchText, 1);\n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.assetSubscriptionsSetSearch((value || \"\"));\n }\n\n goToTemplate = (e: any, templateName: string, templateId: number) => {\n e.preventDefault();\n this.props.assetMaintClose(this);\n setTimeout(function(){\n history.push(\"/template/details/\" + stringToUrlString(templateName) + \"/\" + templateId);\n }, 100); \n }; \n\n isLiteAsset=()=>{\n return (this.state.partNumber || \"\") !== \"\" && this.state.minCollectionFreq > 0;\n }\n\n returnAlertSmsBySeverity=(record:any)=>{\n switch(record.severity){\n case \"critical\":\n case \"warning\":\n case \"info\":\n return record.alertSms;\n case \"incremental\":\n return record.incAlertSms;\n case \"offline\":\n return record.offlineAlertSms;\n default:\n return record.alertSms;\n }\n }\n returnAlertEmailBySeverity=(record:any)=>{\n switch(record.severity){\n case \"critical\":\n case \"warning\":\n case \"info\":\n return record.alertEmail;\n case \"incremental\":\n return record.incAlertEmail;\n case \"offline\":\n return record.offlineAlertEmail;\n default:\n return record.alertEmail;\n }\n }\n\n returnSeverity=(record:any)=>{\n switch(record.severity)\n {\n case \"incremental\":\n case \"offline\":\n return record.severity;\n default:\n return \"alert\";\n } \n }\n\n actions = (record: any) => {\n\n const noOfSignals = this.props.assetsList.assetMaint.record.noOfSignals\n \n return <>\n {\n record.children &&\n <Space size=\"large\">\n {/* Rollback OPS-4113: Disable SMS scubcription for lite assets */}\n {/*<Tooltip title=\"Set/Unset SMS for all asset alerts\"> \n <Checkbox disabled={noOfSignals > 0 || this.isLiteAsset() } data-id=\"assets-maint-subscriptions-sms-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"user\")} indeterminate={record.userSmsIndeterminate} checked={(noOfSignals > 0 || this.isLiteAsset()?false:record.userSmsChecked)}><PhoneOutlined /></Checkbox> \n </Tooltip>*/}\n <Tooltip title=\"Set/Unset SMS for all asset alerts\">\n <Checkbox data-id=\"assets-maint-subscriptions-sms-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", \"user\")} indeterminate={record.userSmsIndeterminate} checked={record.userSmsChecked}><PhoneOutlined /></Checkbox>\n </Tooltip>\n <Tooltip title=\"Set/Unset email for all asset alerts\">\n <Checkbox data-id=\"assets-maint-subscriptions-email-all\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", \"user\")} indeterminate={record.userEmailIndeterminate} checked={record.userEmailChecked}><MailOutlined /></Checkbox>\n </Tooltip>\n </Space>\n }\n {\n !record.children && !record.name.includes('(Geofence)') &&\n <Space size=\"large\">\n {/* <Checkbox disabled={noOfSignals > 0 || this.isLiteAsset()} data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", record.severity!==\"incremental\"?\"alert\":record.severity)} checked={(noOfSignals > 0 || this.isLiteAsset()?false:(record.severity!==\"incremental\"?record.alertSms:record.incAlertSms))}><PhoneOutlined /></Checkbox> */}\n <Checkbox data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"sms\", this.returnSeverity(record))} checked={this.returnAlertSmsBySeverity(record)}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"assets-maint-subscriptions-email\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"email\", this.returnSeverity(record))} checked={this.returnAlertEmailBySeverity(record)}><MailOutlined /></Checkbox>\n </Space>\n }\n {\n !record.children && record.name.includes('(Geofence)') &&\n\n <div>\n <Space size=\"large\" align=\"center\">\n <p style={{ marginTop: 15 }}>In</p>\n {/* <Checkbox disabled={noOfSignals > 0 || this.isLiteAsset()} data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsIn\", \"geofence\")} checked={(noOfSignals > 0 || this.isLiteAsset()? false:record.alertSmsIn)}><PhoneOutlined /></Checkbox> */}\n <Checkbox data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsIn\", \"geofence\")} checked={record.alertSmsIn}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"assets-maint-subscriptions-email\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"emailIn\", \"geofence\")} checked={record.alertEmailIn}><MailOutlined /></Checkbox>\n </Space>\n \n <Space size=\"large\" align=\"center\" style={{ marginRight: 10, marginTop: -30 }}>\n <p style={{ marginTop: 15 }}>Out</p>\n {/* <Checkbox disabled={noOfSignals > 0 || this.isLiteAsset()} data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsOut\", \"geofence\")} checked={(noOfSignals > 0 || this.isLiteAsset()?false:record.alertSmsOut)}><PhoneOutlined /></Checkbox> */}\n <Checkbox data-id=\"assets-maint-subscriptions-sms\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"smsOut\", \"geofence\")} checked={record.alertSmsOut}><PhoneOutlined /></Checkbox>\n <Checkbox data-id=\"assets-maint-subscriptions-email\" key={record.key} onChange={(e) => this.onCheckChange(e, record, \"emailOut\", \"geofence\")} checked={record.alertEmailOut}><MailOutlined /></Checkbox>\n </Space>\n </div>\n }\n </>\n };\n\n render() {\n\n const { tableConfig, tableData, searchText } = this.props.assetsList.assetMaint.tabs[1];\n\n const columns = [\n {\n title: \"User / Alarm Name\",\n dataIndex: \"name\",\n key: \"name\",\n render: (text: any, record: any) => ( \n <> \n {record.children &&\n <strong>{record.name}</strong>\n }\n {!record.children && record.signalId === \"\" &&\n <i>{record.name}</i>\n }\n {!record.children && record.signalId !== \"\" &&\n <span>{record.name}</span>\n }\n </>\n )\n },\n {\n title: \"Subscribed\",\n dataIndex: \"subscribed\",\n width: \"30%\",\n key: \"subscribed\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n this.actions(record)\n )\n },\n ];\n \n return ( \n \n <div data-id=\"assets-maint-subscriptions\">\n {\n (\n ((this.props.assetsList.assetMaint.tabs[1].searchText || \"\") === \"\" && tableData.length > 0) ||\n ((this.props.assetsList.assetMaint.tabs[1].searchText || \"\") !== \"\")\n ) &&\n <Search\n data-id=\"assets-maint-subscriptions-search-field\"\n placeholder=\"Search by user or alarm name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n style={{marginBottom: 20, width: '100%'}}\n value={searchText}\n /> \n }\n\n <Table \n data-id=\"assets-maint-subscriptions-data\" \n rowKey={(record) => record.key}\n {...tableConfig}\n columns={columns} \n dataSource={tableData} \n />\n </div>\n )\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n assetsList: state.assetsReducer.assetsState.assetsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetMaintSubscriptions);","import React, { useEffect } from \"react\";\nimport { Table, Checkbox, Space, Tooltip, Input, Select, Col, Row, Button, Divider } from 'antd';\nimport { PhoneOutlined, MailOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from '../../../utils/history';\nimport { stringToUrlString } from \"../../../utils/commonHelpers\";\n\nimport \"../assets.css\";\n\nconst { Search } = Input;\nconst { Option } = Select;\n\ninterface Prop {\n assetMaintClose: Function, \n assetsList: any\n}\n\n\nconst AssetMaintControllerInfo: React.FC<Prop> = (props) => {\n \n const { tableConfig, attachedControllersTableData, controllersList } = props.assetsList.assetMaint.tabs[3];\n\n const columns = [\n {\n title: \"Address\",\n dataIndex: \"address\",\n key: \"address\",\n render: (text: any, record: any) => ( \n <span>{record.address}</span>\n )\n },\n {\n title: \"Serial Number\",\n dataIndex: \"serialNumber\",\n key: \"serialNumber\",\n render: (text: any, record: any) => ( \n <span>{record.serialNumber}</span>\n )\n },\n {\n title: \"Type\",\n dataIndex: \"type\",\n key: \"type\",\n render: (text: any, record: any) => ( \n <span>{record.type}</span>\n )\n },\n {\n title: \"Device Info\",\n dataIndex: \"controllerName\",\n key: \"controllerName\",\n render: (text: any, record: any) => ( \n <span>{record.controllerName}</span>\n )\n },\n // {\n // title: \"Controller Assignment\",\n // dataIndex: \"controllerId\",\n // key: \"controllerId\",\n // render: (text: any, record: any) => ( \n \n // <Select placeholder=\"Select Controller\" style={{ width: \"100%\" }}>\n // {controllersList !== null && controllersList.map((controller:any, index:number) => (\n // <Option key={controller.controllerId} value={controller.controllerId} >\n // {controller.controllerName}\n // </Option>\n // ))}\n // </Select >\n // )\n // }\n ];\n \n return ( \n \n <Row gutter={8}>\n <Col span={18}>\n </Col>\n <Col span={6}>\n <Button block type=\"primary\">\n Discover Devices\n </Button>\n </Col>\n\n <Divider></Divider>\n\n <Col span={24}>\n <h3>Connected Devices (Controllers) List:</h3>\n <Table \n data-id=\"assets-maint-controller-data\" \n rowKey={(record) => record.key}\n {...tableConfig}\n columns={columns} \n dataSource={attachedControllersTableData} \n />\n </Col>\n </Row>\n )\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n assetsList: state.assetsReducer.assetsState.assetsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetMaintControllerInfo);","import { CheckCircleOutlined, MinusOutlined } from \"@ant-design/icons\";\nimport { Button, Col, Form, Input, Row, } from \"antd\";\nimport { FormInstance } from \"antd/lib/form\";\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"../actions\";\n\ninterface Prop {\n connected?: boolean,\n Name?: String,\n Password?: String,\n index: number,\n remove: (index:any)=>void\n}\nconst formRef = React.createRef<FormInstance>();\nconst WiFiConnect: React.FC<Prop>=(props) =>{\n const RemoveSSID=(index:any)=>{\n \n props.remove(index);\n \n }\n \n return (\n <Row gutter={8}>\n <Col span={11}>\n <Form.Item\n label=\"Network (SSID)\"\n name={\"ssidname\"+ props.index } \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n //{ validator:(_, value) => (value.length || 0) > 1 ? Promise.resolve() : Promise.reject(appConfigs.errors.fieldErrors.atLeastTwoCharacters) }\n ]}\n >\n <Input placeholder=\"SSID Name\" suffix={props.connected && <span className=\"asset-status-green pr-5\" ><CheckCircleOutlined /></span>} maxLength={255} disabled={false}></Input>\n </Form.Item>\n </Col> \n <Col span={11}>\n <Form.Item\n label=\"Password\"\n name={\"password\"+ props.index} \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input.Password placeholder=\"Password\" maxLength={255} disabled={false}></Input.Password>\n \n </Form.Item>\n </Col> \n <Col span={2}>\n <Button type=\"primary\" name={props.index.toString()} disabled={props.index===0 && props.Name === undefined && props.Password === undefined} onClick={(e:any)=>RemoveSSID(e.currentTarget.name)} icon={<MinusOutlined></MinusOutlined>}></Button>\n \n </Col> \n </Row>\n // </Form>\n )\n }\n const mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n contractMaintOptions: state.contractsReducers.contractsState.contracts.contractMaintOptions\n };\n};\n export default connect(\n mapStateToProps,\n actions\n)(WiFiConnect);","import React from \"react\";\nimport { Form, Row, Col, Input, Collapse, Switch, Button, Select, Tooltip, InputNumber, Modal} from 'antd';\nimport {CheckOutlined, CheckCircleOutlined, CloseOutlined,PlusOutlined, InfoCircleOutlined } from \"@ant-design/icons\";\nimport { FormInstance } from 'antd/lib/form';\n\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert, WarningAlert } from \"../../../utils/Components/formAlerts\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { getPermissions } from \"../../../utils/commonHelpers\";\n\nimport WiFiConnect from \"./WiFiConnect\";\nimport { errorResponse, resetFormErrors, successResponse, warningResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { debug } from \"console\";\nimport FilterForm from \"../../Dashboard2/WidgetFilterForm/FilterForm\";\nimport useModal from \"antd/lib/modal/useModal\";\n\n\n\nconst _ = require('lodash');\nconst { Option } = Select;\nconst { Panel } = Collapse;\ninterface Prop {\n setAssetSettings: Function,\n getAssetSettings: Function,\n assetsList: any,\n}\ninterface SSID{\n wifiSSID: string,\n wifiPassword: string\n}\n\ninterface State {\n\n formError?: boolean,\n formErrorMessage?: string[],\n formSuccess?: boolean,\n formSuccessMessage?: string,\n formWarning?: boolean;\n formWarningMessage?: string,\n formCommit?: boolean,\n mastertag?: string,\n viewWiFiStatus: boolean,\n viewWiFiPanel: boolean;\n viewEthernetPanel: boolean,\n enableHotspot: boolean,\n enableEthernet: boolean,\n wifiActiveKey: string,\n ethernetActiveKey: string, \n sleepModeActiveKey: string,\n SSIDProviders: Array<SSID | undefined>,\n allowViewSleepMode: boolean,\n allowChangeSleepMode: boolean,\n enableSleepMode: boolean,\n sleepCycleInSeconds: string,\n sleepCycleApplied: boolean, \n sleepCycleValue: number,\n sleepCycleUom: string,\n nextWakeUpTime: string,\n initialValues: any,\n isAlertModalOpen: boolean\n triedEnablingHotspot: boolean,\n triedEnablingEthernet: boolean,\n triedEnablingWiFi: boolean,\n ethernetIPAddress: string,\n}\n\nclass AssetWiFiClient extends React.Component<Prop, State> { \n \n state: State = {\n enableHotspot: false,\n enableEthernet: false,\n viewWiFiStatus: false,\n viewWiFiPanel: false,\n viewEthernetPanel: false,\n wifiActiveKey: \"0\",\n ethernetActiveKey: \"0\",\n mastertag:\"\",\n SSIDProviders: [],\n allowViewSleepMode: false, \n allowChangeSleepMode: false,\n enableSleepMode: false,\n sleepModeActiveKey: \"3\",\n sleepCycleInSeconds: \"\",\n sleepCycleValue: 0,\n sleepCycleUom: \"second\",\n sleepCycleApplied: false,\n nextWakeUpTime: \"\",\n initialValues:{},\n isAlertModalOpen: false,\n triedEnablingHotspot: false,\n triedEnablingWiFi: false,\n triedEnablingEthernet: false,\n ethernetIPAddress: appConfigs.app.defaultIP\n };\n\n formRef = React.createRef<FormInstance>();\n handleOk = () =>{\n if(this.state.triedEnablingWiFi){\n this.setState({\n viewWiFiStatus: true,\n viewWiFiPanel: true,\n wifiActiveKey: \"1\",\n ethernetActiveKey: \"0\",\n enableEthernet: false,\n enableHotspot: false,\n isAlertModalOpen: false \n });\n }\n if(this.state.triedEnablingEthernet){\n this.setState({\n enableEthernet: true,\n viewWiFiStatus: false,\n viewWiFiPanel: false,\n wifiActiveKey: \"0\",\n ethernetActiveKey: \"1\",\n SSIDProviders: [],\n isAlertModalOpen: false\n });\n }\n if(this.state.triedEnablingHotspot){\n this.setState({\n enableHotspot: true,\n viewWiFiStatus: false,\n viewWiFiPanel: false,\n wifiActiveKey: \"0\",\n SSIDProviders: [],\n isAlertModalOpen: false\n });\n }\n } \n handleCancel = () => {\n this.setState({\n isAlertModalOpen: false\n })\n };\n\n componentDidMount() { \n //this.props.getAssetSettings(this, this.onSuccessGetSettings, this.onFailureGetSettingsError, this.props.assetsList.assetMaint.record.mastertag);\n this.componentUpdate();\n }\n componentDidUpdate(prevProps: Prop) {\n // Fix defect, the componentDidUpdate previusly nevever update the componentUpdate since it always this this.props != this.props\n // It shall check this.props != prevProps\n if ( this.props.assetsList.assetMaint.tabs[2].instance !== prevProps.assetsList.assetMaint.tabs[2].instance) {\n this.componentUpdate();\n }\n }\n componentUpdate() { \n \n // console.log(\"before getAssetSettings in the assetWifiClient line 91 this.props.assetsList.assetMaint.record\")\n // console.log(this.props.assetsList.assetMaint.record)\n this.props.getAssetSettings(this, this.onSuccessGetSettings, this.onFailureGetSettingsError, this.props.assetsList.assetMaint.record.mastertag);\n // console.log(\"before formInit(this) in the assetWifiClient line 93 this.props.assetsList.assetMaint.record\")\n // console.log(this.props.assetsList.assetMaint.record)\n formInit(this);\n // console.log(\"before setInitialvalues() in the assetWifiClient line 96 this.props.assetsList.assetMaint.record\")\n // console.log(this.props.assetsList.assetMaint.record)\n // Tp1 lite read-only sleep mode show \"2 hours\" instead of 6450 seconds\n let sleepCycleInSecondsValue = 0; \n if (this.props.assetsList.assetMaint.tabs[2].allowViewSleepMode &&\n !this.props.assetsList.assetMaint.tabs[2].allowChangeSleepMode) {\n sleepCycleInSecondsValue = 7200; \n } else {\n sleepCycleInSecondsValue = this.props.assetsList.assetMaint.tabs[2].sleepCycleInSeconds == null?\n 0: this.props.assetsList.assetMaint.tabs[2].sleepCycleInSeconds ;\n }\n\n let {sleepCycleValue, sleepCycleUom} = this.convertSecondsToTimeAndUnit(\n sleepCycleInSecondsValue);\n this.setintialvalues(this.props.assetsList.assetMaint.tabs[2].ssidList, \n this.props.assetsList.assetMaint.tabs[2].allowViewSleepMode,\n this.props.assetsList.assetMaint.tabs[2].allowChangeSleepMode,\n this.props.assetsList.assetMaint.tabs[2].enableSleepMode,\n sleepCycleInSecondsValue.toString(),\n sleepCycleValue, sleepCycleUom,\n this.props.assetsList.assetMaint.tabs[2].sleepCycleApplied,\n this.props.assetsList.assetMaint.tabs[2].nextWakeUpTime); \n \n // console.log(\"After setInitialvalues() in the assetWifiClient line 102 this.props.assetsList.assetMaint.record\")\n // console.log(this.props.assetsList.assetMaint.record)\n\n // console.log(\"after setInitialValue this state out\")\n // console.log(this.state)\n \n if (this.formRef.current != null) { \n if(this.state.SSIDProviders.length===0 && this.state.viewWiFiStatus)\n { this.setState({\n SSIDProviders: [{wifiSSID:\"\",wifiPassword:\"\"}],\n })\n }\n else\n {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue(this.state.initialValues);\n }\n } \n };\n onFinish=(values: any)=>{\n \n resetFormErrors(this, this.formRef.current);\n const data = values;\n const ssiddetails: SSID[]=[];\n let ssid:any = {}; \n Object.keys(data).forEach(function(key){\n if(key.slice(0,-1)===\"ssidname\"){\n ssid.wifiSSID=data[key];}\n if(key.slice(0,-1)===\"password\"){\n ssid.wifiPassword=data[key];}\n if(ssid.wifiSSID && ssid.wifiPassword){\n ssiddetails.push(ssid);\n ssid={};\n }\n });\n\n let targetSleepCycleInSeconds = this.convertTimeAndUnitToSeconds(values.sleepCycleValue, values.sleepCycleUom);\n let targetEnableSleepMode = targetSleepCycleInSeconds > 0 ? true: false; \n if(!_.isEqual({enableWiFi: this.state.viewWiFiStatus, \n enableHotspot: this.state.enableHotspot, \n enableEthernet: this.state.enableEthernet, \n enableSleepMode: targetEnableSleepMode,\n sleepCycleInSeconds: targetSleepCycleInSeconds,\n sleepCycleApplied: values.sleepCycleApplied, \n nextWakeUpTime: values.nextWakeUpTime,\n ssidList: ssiddetails,\n ethernetIPAddress: values.ethernetIPAddress} ,\n \n {enableWiFi:this.props.assetsList.assetMaint.tabs[2].enableWiFi, \n enableHotspot: this.props.assetsList.assetMaint.tabs[2].enableHotspot,\n enableEthernet: this.props.assetsList.assetMaint.tabs[2].enableEthernet, \n enableSleepMode: this.props.assetsList.assetMaint.record.enableSleepMode, \n sleepCycleInSeconds: this.props.assetsList.assetMaint.record.sleepCycleInSeconds,\n ssidList: this.props.assetsList.assetMaint.tabs[2].ssidList,\n ethernetIPAddress: this.props.assetsList.assetMaint.tabs[2].ethernetIPAddress})){ \n \n let {sleepCycleValue, sleepCycleUom} = this.convertSecondsToTimeAndUnit(targetSleepCycleInSeconds);\n\n this.props.setAssetSettings(this, this.onFinishSuccess, this.onFinishFailure, \n this.props.assetsList.assetMaint.record.mastertag, \n {enableWiFi: this.state.viewWiFiStatus, enableHotspot: this.state.enableHotspot, enableEthernet: this.state.enableEthernet, ssidList: ssiddetails, \n enableSleepMode: targetEnableSleepMode, sleepCycleInSeconds: targetSleepCycleInSeconds, sleepCycleValue, sleepCycleUom,\n sleepCycleApplied: values.sleepCycleApplied, nextWakeUpTime: values.nextWakeUpTime, ethernetIPAddress: values.ethernetIPAddress} \n );\n }\n else\n {\n warningResponse(this, \"No changes detected to update Gateway Settings\");\n }\n\n }\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n onFinishSuccess=() => {\n successResponse(this, \"Gateway settings updated successfully\");\n }\n\n onSuccessGetSettings = (data: any) => { \n let {sleepCycleValue, sleepCycleUom} = this.convertSecondsToTimeAndUnit(data.sleepCycleInSeconds);\n this.setState({ \n SSIDProviders: data.ssidList,\n enableEthernet: data.enableEthernet,\n enableHotspot: data.enableHotspot,\n viewWiFiStatus: data.enableWiFi,\n viewWiFiPanel: data.enableWiFi,\n wifiActiveKey: (data.enableWiFi)?\"1\":\"0\",\n ethernetActiveKey: (data.enableEthernet)?\"1\":\"0\",\n sleepModeActiveKey: (data.enableSleepMode)?\"2\":\"3\",\n enableSleepMode: data.enableSleepMode || false,\n sleepCycleInSeconds: data.sleepCycleInSeconds || 0,\n sleepCycleValue, sleepCycleUom,\n sleepCycleApplied: data.sleepCycleApplied || false,\n nextWakeUpTime: data.nextWakeUpTime || \"\",\n ethernetIPAddress: data.ethernetIPAddress? data.ethernetIPAddress: appConfigs.app.defaultIP\n })\n \n let sleepCycleInSecondsValue=0;\n if (this.props.assetsList.assetMaint.tabs[2].allowViewSleepMode &&\n !this.props.assetsList.assetMaint.tabs[2].allowChangeSleepMode) {\n sleepCycleInSecondsValue = 7200; \n } else {\n sleepCycleInSecondsValue = data.sleepCycleInSeconds == null?\n 0: data.sleepCycleInSeconds ;\n }\n this.setintialvalues(data.ssidList, \n this.props.assetsList.assetMaint.tabs[2].allowViewSleepMode,\n this.props.assetsList.assetMaint.tabs[2].allowChangeSleepMode,\n data.enableSleepMode || false, \n sleepCycleInSecondsValue.toString(), \n sleepCycleValue || 0, \n sleepCycleUom || \"second\",\n data.sleepCycleApplied || false, \n data.nextWakeUpTime || \"\");\n }\n\n setintialvalues(ssidList: any, \n allowViewSleepMode: boolean,\n allowChangeSleepMode: boolean, \n enableSleepMode: boolean, \n sleepCycleInSeconds: string,\n sleepCycleValue: number,\n sleepCycleUom: string,\n sleepCycleApplied: boolean, \n nextWakeUpTime: string)\n {\n let initialValues: any = {};\n let sleepCycleValueOverride = sleepCycleValue;\n let sleepCycleUomOverride = sleepCycleUom;\n let sleepCycleInSecondsOverride = sleepCycleInSeconds; \n if (allowViewSleepMode && !allowChangeSleepMode) {\n // Tp1 lite, hard-coded to 2 hour to customer\n sleepCycleValueOverride=2;\n sleepCycleUomOverride = \"hour\"\n sleepCycleInSecondsOverride = \"7200\";\n }\n initialValues = {...initialValues, \n allowViewSleepMode: allowViewSleepMode,\n allowChangeSleepMode: allowChangeSleepMode, \n enableSleepMode: enableSleepMode,\n sleepCycleInSeconds: sleepCycleInSecondsOverride,\n sleepCycleValue: sleepCycleValueOverride,\n sleepCycleUom: sleepCycleUomOverride,\n sleepCycleApplied: sleepCycleApplied, \n nextWakeUpTime: nextWakeUpTime,\n ethernetIPAddress: this.state.ethernetIPAddress\n }\n\n \n this.setState({initialValues : initialValues,\n SSIDProviders : []});\n\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue(initialValues);\n \n if(ssidList && ssidList.length > 0){\n ssidList.map((ssid:any, index: number) => { \n initialValues = {...initialValues, [`ssidname${index}`]: `${ssid.wifiSSID}`};\n initialValues = {...initialValues, [`password${index}`]: `${ssid.wifiPassword}`};\n }); \n this.setState({initialValues : initialValues,\n SSIDProviders : [...ssidList]});\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue(initialValues);\n }\n \n }\n\n onFailureGetSettingsError = (error: any) => { \n errorResponse(this, error);\n }\n \n AddSSID=()=>\n { \n\n let initialValues: any = {\n allowChangeSleepMode: this.state?.initialValues?.allowChangeSleepMode,\n allowViewSleepMode: this.state?.initialValues?.allowViewSleepMode,\n enableSleepMode: this.state?.initialValues?.enableSleepMode,\n nextWakeupTime: this.state?.initialValues?.nextWakeupTime,\n sleepCycleApplied: this.state?.initialValues?.sleepCycleAppied,\n sleepCycleInSeconds: this.state?.initialValues?.sleepCycleInSeconds,\n sleepCycleUom: this.state?.initialValues?.sleepCycleUom,\n sleepCycleValue: this.state?.initialValues?.sleepCycleValue,\n ethernetIPAddress: this.state?.initialValues?.ethernetIPAddress\n };\n \n const {SSIDProviders} = this.state;\n if(SSIDProviders.length === 0){\n let ssid = this.formRef.current?.getFieldValue(`ssidname0`) || \"\"\n let password = this.formRef.current?.getFieldValue(`password0`) || \"\"\n SSIDProviders[0] = { wifiSSID: ssid, wifiPassword: password };\n }\n else{\n for(let i=0;i<SSIDProviders.length;i++){ \n let ssid = this.formRef.current?.getFieldValue(`ssidname${i}`) || \"\"\n let password = this.formRef.current?.getFieldValue(`password${i}`) || \"\"\n SSIDProviders[i] = { wifiSSID: ssid, wifiPassword: password };\n }\n }\n let newSSID:any = {wifiSSID:\"\", wifiPassword:\"\"}; \n SSIDProviders.push(newSSID);\n if(SSIDProviders.length > 0){\n SSIDProviders.map((ssid:any, index: number) => { \n initialValues = {...initialValues, [`ssidname${index}`]: `${ssid.wifiSSID}`};\n initialValues = {...initialValues, [`password${index}`]: `${ssid.wifiPassword}`};\n }); \n } \n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue(initialValues);\n this.setState({\n SSIDProviders: SSIDProviders,\n });\n\n }\n RemoveSSID=(deletedIndex:any)=>\n {\n\n const {SSIDProviders} = this.state; \n let initialValues: any = {\n allowChangeSleepMode: this.state?.initialValues?.allowChangeSleepMode,\n allowViewSleepMode: this.state?.initialValues?.allowViewSleepMode,\n enableSleepMode: this.state?.initialValues?.enableSleepMode,\n nextWakeupTime: this.state?.initialValues?.nextWakeupTime,\n sleepCycleApplied: this.state?.initialValues?.sleepCycleAppied,\n sleepCycleInSeconds: this.state?.initialValues?.sleepCycleInSeconds,\n sleepCycleUom: this.state?.initialValues?.sleepCycleUom,\n sleepCycleValue: this.state?.initialValues?.sleepCycleValue,\n ethernetIPAddress: this.state?.initialValues?.ethernetIPAddress\n };\n for(let i=0;i<SSIDProviders.length;i++){ \n let ssidname = this.formRef.current?.getFieldValue(`ssidname${i}`) || \"\"\n let password = this.formRef.current?.getFieldValue(`password${i}`) || \"\"\n SSIDProviders[i] = { wifiSSID: ssidname, wifiPassword: password };\n }\n SSIDProviders.splice(deletedIndex,1);\n SSIDProviders.map((ssid:any, index: number) => { \n initialValues = {...initialValues, [`ssidname${index}`]: `${ssid.wifiSSID}`};\n initialValues = {...initialValues, [`password${index}`]: `${ssid.wifiPassword}`};\n });\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue(initialValues); \n this.setState({\n initialValues : initialValues, \n SSIDProviders: SSIDProviders\n\n })\n }\n // setHotspot=(enabled:any)=>{\n // if (enabled) {\n // if(this.state.viewWiFiStatus) {\n // this.setState({\n // triedEnablingHotspot: true,\n // triedEnablingEthernet: false,\n // triedEnablingWiFi: false,\n // isAlertModalOpen: true,\n \n // })\n // }\n // else {\n // this.setState({\n // enableHotspot: true,\n // viewWiFiStatus: false,\n // viewWiFiPanel: false,\n // wifiActiveKey: \"0\",\n // SSIDProviders: []\n // }); \n // }\n // } \n // else {\n // this.setState({\n // enableHotspot: false,\n // }); \n // }\n // }\n\n setEthernet=(enabled:any)=>{\n if (enabled) {\n if(this.state.viewWiFiStatus) {\n this.setState({\n triedEnablingEthernet: true,\n triedEnablingHotspot: true,\n triedEnablingWiFi: false,\n isAlertModalOpen: true \n })\n }\n else {\n this.setState({\n enableEthernet: true,\n enableHotspot: true,\n viewEthernetPanel: true,\n ethernetActiveKey: \"1\",\n viewWiFiStatus: false,\n viewWiFiPanel: false,\n wifiActiveKey: \"0\",\n SSIDProviders: []\n }); \n } \n }\n else {\n this.setState({\n enableEthernet: false,\n enableHotspot: false,\n viewEthernetPanel: false,\n ethernetActiveKey: \"0\"\n }); \n }\n }\n\n sleepModeHandleChange=(checked:any)=>{\n this.validateTime();\n this.setState({ enableSleepMode: true }); \n let sleepCycleValue=this.formRef.current!.getFieldValue(\"sleepCycleValue\");\n let sleepCycleUom=this.formRef.current!.getFieldValue(\"sleepCycleUom\");\n // let {sleepCycleValue, sleepCycleUom} = this.convertSecondsToTimeAndUnit(sleepCycleInSecondsValue);\n let sleepCycleInSecondsValue=this.convertTimeAndUnitToSeconds(sleepCycleValue, sleepCycleUom);\n \n this.setState({\n sleepCycleInSeconds:sleepCycleInSecondsValue.toString(), \n sleepCycleValue: sleepCycleValue,\n sleepCycleUom: sleepCycleUom \n });\n\n }\n\n showSleepModePanel=(enabled:any)=>{\n let sleepCycleInSecondsValue=0;\n if (enabled) { \n this.setState({\n sleepModeActiveKey: \"2\", \n }); \n \n sleepCycleInSecondsValue=this.props.assetsList.assetMaint.tabs[2].sleepCycleInSeconds!==null\n ?this.props.assetsList.assetMaint.tabs[2].sleepCycleInSeconds:0;\n \n // this.validateTime(); \n } else {\n this.setState({\n sleepModeActiveKey: \"3\",\n });\n }\n let {sleepCycleValue, sleepCycleUom} = this.convertSecondsToTimeAndUnit(sleepCycleInSecondsValue);\n \n this.setState({ \n enableSleepMode:enabled,\n sleepCycleInSeconds:sleepCycleInSecondsValue.toString(), \n sleepCycleValue: sleepCycleValue,\n sleepCycleUom: sleepCycleUom \n });\n \n this.formRef.current!.setFieldsValue(\n { \n enableSleepMode:enabled,\n sleepCycleInSeconds:sleepCycleInSecondsValue.toString(), \n sleepCycleValue: sleepCycleValue,\n sleepCycleUom: sleepCycleUom \n }\n ); \n \n console.log(\"after show sleep mode this.formRef: \", this.formRef)\n }\n convertTimeAndUnitToSeconds = (value:number, uom:string) : number => (\n uom === 'hour' ? value * 3600 : ((uom === 'minute') ? value * 60 : value)\n );\n\n convertSecondsToTimeAndUnit(valueInSec:number) : any{\n let uom=\"minute\";\n let duration = valueInSec;\n\n if (valueInSec % 3600 === 0) {\n uom = \"hour\";\n duration = valueInSec / 3600;\n } else if (valueInSec % 60 === 0) {\n uom = \"minute\";\n duration = valueInSec / 60;\n } else {\n uom = \"second\";\n duration = valueInSec;\n }\n return {\n sleepCycleValue:duration,\n sleepCycleUom: uom\n };\n };\n\n\n validateTimeUnit= (rule: any, value: any, callback: any) => {\n if(value){\n const duration:number = this.formRef.current!.getFieldValue('sleepCycleValue');\n if ((value === 'hour' && duration > 24) ||\n (value === 'minute' && duration > 24*60 ||\n (value === 'second' && duration > 24*3600)) ) {\n callback(\"Please enter a sleep cycle up to 24 hours\");\n } else if (\n (value === 'minute' && duration < 15) ||\n (value === 'second' && duration > 15*60)) {\n callback(\"Please enter a sleep duration at least 15 minutes\");\n } else {\n let durationSecStr = this.convertTimeAndUnitToSeconds(duration, value).toString();\n this.setState({sleepCycleInSeconds: durationSecStr})\n callback();\n } \n } else {\n callback();\n }\n };\n\n validateTimeValue= (rule: any, value: any, callback: any) => {\n \n if(value){\n const unit = this.formRef.current!.getFieldValue('sleepCyclelUom');\n if ((unit === 'hour'&& value > 24) ||\n (unit === 'minute'&& value > 24*60) ||\n (unit === 'second' && value > 24*3600)) {\n callback(\"Please enter a sleep duration up to 24 hours\");\n } else if (\n (unit === 'minute' && value < 15) ||\n (unit === 'second' && value > 15*60)) {\n callback(\"Please enter a sleep duration at least 15 minutes\");\n } else {\n let durationSecStr = this.convertTimeAndUnitToSeconds(value, unit).toString();\n this.setState({sleepCycleInSeconds: durationSecStr})\n callback();\n } \n } else {\n callback(); \n }\n };\n\n validateTime = () => { \n this.formRef.current!.validateFields(['sleepCycleValue','sleepCycleUom']);\n };\n\n showWiFiPanel=(enabled:any)=>{\n if (enabled) { \n if(this.state.enableEthernet || this.state.enableHotspot) {\n this.setState({\n triedEnablingWiFi: true,\n triedEnablingEthernet: false,\n triedEnablingHotspot: false,\n isAlertModalOpen: true\n });\n }\n else\n { \n this.setState({\n viewWiFiStatus: true,\n viewWiFiPanel: true,\n wifiActiveKey: \"1\",\n enableEthernet: false,\n enableHotspot: false, \n }); \n } \n }\n else {\n this.setState({\n viewWiFiStatus: false,\n viewWiFiPanel: false,\n wifiActiveKey: \"0\",\n });\n }\n }\n\n utcStringToLocalTime=(utcStr: string) => new Date(utcStr).toLocaleString();\n\n render() {\n\n const { assetMaint } = this.props.assetsList; \n const ssidProviders=this.state.SSIDProviders;\n const connected_SSID = this.props.assetsList.assetMaint.tabs[2].connected_SSID;\n \n let sleepNote = \"\";\n // if (this.state.sleepCycleApplied) {\n // sleepNote = \"Sleep setting detected. \"\n \n // if (this.state.nextWakeUpTime !== \"\") {\n \n // let nowTime = new Date(); \n // if (new Date(this.state.nextWakeUpTime).getTime() >= nowTime.getTime()) {\n // sleepNote = \"Next Wake-up: \" + this.utcStringToLocalTime(this.state.nextWakeUpTime); \n // } else {\n // sleepNote = \"Last Wake-up: \" + this.utcStringToLocalTime(this.state.nextWakeUpTime);\n // }\n // } \n // } else {\n // sleepNote = \"Sleep Setting Undetected\";\n // }\n sleepNote = sleepNote + \"Sleep mode allows to periodically send select signals from gateway to cloud, even when ignition is OFF, and gateway is connected to direct power. \"\n \n let allowChangeSleepModeConfig = assetMaint.record.allowChangeSleepMode;\n let allowViewSleepModeConfig = assetMaint.record.allowViewSleepMode;\n \n console.log(\"before rendering this.state.sleepmodeactivekey\",this.state.sleepModeActiveKey)\n return (\n <>\n {this.state.formSuccess && !this.state.formWarning && !this.state.formError && <SuccessAlert data-id=\"assets-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formWarning && !this.state.formError && !this.state.formError && <WarningAlert data-id=\"assets-maint-info-success-message\" message={this.state.formWarningMessage}/>}\n {this.state.formError && !this.state.formWarning && !this.state.formSuccess && <ErrorAlert data-id=\"assets-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n \n <Row gutter={8} style={{marginTop: 15}}>\n <Col offset={1} span={23}>\n <Form\n id=\"assetMaintSettingsForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n > <Row gutter={8}>\n <Col span={24}> \n <span style={{color:'#0052CC',fontSize:'16px'}}>{\"Minimum Requirements: TP1 2.4.1.5 or later\"}</span>\n </Col>\n </Row>\n <br/>\n <Row gutter={8}>\n <Col span={24}>\n {\n (assetMaint.record.status || \"\") !== \"whitelisted\" &&\n (assetMaint.record.allowWifiClient) &&\n <>\n <br/>\n <Collapse activeKey = {this.state.wifiActiveKey}>\n <Panel \n header=\"Enable Wi-Fi Client\"\n key=\"1\"\n extra={ \n <div> \n <Switch\n checkedChildren={<CheckOutlined />}\n unCheckedChildren={<CloseOutlined />} \n onChange = {this.showWiFiPanel} \n checked = {this.state.viewWiFiStatus} />\n </div> \n }\n >\n <Row gutter={8}>\n <Col span={22}> </Col>\n <Col span={2}>\n <Button type=\"primary\" onClick={this.AddSSID} disabled={ssidProviders.length>4} icon={<PlusOutlined></PlusOutlined>}></Button></Col> \n </Row>\n <br/>\n {\n ssidProviders.length>0 ?\n ssidProviders.map((ssidProvider:any,index: any)=>\n ssidProvider!==undefined?(<WiFiConnect key={\"provider\"+index} connected={(ssidProvider.wifiSSID === connected_SSID) ? true : false} remove={this.RemoveSSID} Name= {ssidProvider.wifiSSID} Password={ssidProvider.wifiPassword} index={index}></WiFiConnect>)\n :(<WiFiConnect key={index} index={index} Name= {ssidProvider.wifiSSID} Password={ssidProvider.wifiPassword} remove={this.RemoveSSID} connected={false} ></WiFiConnect>)\n )\n :\n (<WiFiConnect key={\"provider\"+ssidProviders.length} remove={this.RemoveSSID} index={ssidProviders.length}></WiFiConnect>)\n }\n </Panel>\n </Collapse> \n </> \n } \n </Col>\n </Row>\n {/* <br/>\n { //false && \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item \n name=\"enableHotspot\"\n label=\"Enable Hotspot\" \n >\n <Switch\n checkedChildren={<CheckOutlined style={{color: \"green\"}}/>}\n unCheckedChildren={<CloseOutlined />} \n onChange = {this.setHotspot} \n checked = {this.state.enableHotspot} /> \n </Form.Item>\n </Col> \n </Row>\n } */}\n {/* { //false && \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n name=\"enableEthernet\"\n label= \"Enable Ethernet\"\n > \n <Switch\n checkedChildren={<CheckOutlined />}\n unCheckedChildren={<CloseOutlined />} \n onChange = {this.setEthernet} \n checked = {this.state.enableEthernet} />\n </Form.Item>\n </Col> \n </Row> \n } */}\n\n <br/>\n <Row gutter={8}>\n <Col span={24}>\n {\n (assetMaint.record.status || \"\") !== \"whitelisted\" &&\n <>\n <br/>\n <Collapse activeKey = {this.state.ethernetActiveKey}>\n <Panel \n header=\"Enable Internet Sharing\"\n key=\"1\"\n extra={ \n <div> \n <Switch\n checkedChildren={<CheckOutlined />}\n unCheckedChildren={<CloseOutlined />} \n onChange = {this.setEthernet} \n checked = {this.state.enableEthernet} />\n </div> \n }\n >\n <Row gutter={8}>\n <Col span={24}>\n <Form.Item \n name=\"ethernetIPAddress\"\n label=\"IP Address\" \n rules={[\n {\n required: this.state.enableEthernet,\n message: \"Enter IP address\"\n },\n {\n pattern: /^((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\\.(?!$)|$)){4}$/,\n message: \"Enter a valid IP address\"\n }\n ]}\n >\n <Input />\n </Form.Item>\n </Col>\n </Row>\n <br/>\n \n </Panel>\n </Collapse> \n </> \n } \n </Col>\n </Row>\n\n <br/>\n <Row gutter={8}>\n <Col span={24}>\n { \n (assetMaint.record.status || \"\") !== \"whitelisted\" &&\n (assetMaint.record.allowViewSleepMode) &&\n // this.props.context.appContext.orgId === 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n <Row gutter={8}>\n <Col span={24}> \n <>\n <span style={{color:'#0052CC',fontSize:'16px'}}></span>\n <Collapse activeKey = {this.state.sleepModeActiveKey}>\n <Panel \n header=\n {(<span>\n Enable sleep mode \n <Tooltip title={sleepNote}>\n <InfoCircleOutlined />\n </Tooltip>\n </span>)} \n key=\"2\"\n extra={ \n <div> \n <Switch\n disabled={!allowChangeSleepModeConfig}\n checkedChildren={<CheckOutlined />}\n unCheckedChildren={<CloseOutlined />} \n onChange = {this.showSleepModePanel} \n checked = {this.state.enableSleepMode} />\n </div> \n }\n >\n <br/>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item \n name=\"sleepCycleValue\"\n label=\"Sleep duration\" \n >\n <InputNumber onChange={this.sleepModeHandleChange}\n min={0}\n max={86400}\n pattern=\"[0-9]*\"\n disabled={ !assetMaint.record.allowChangeSleepMode} \n style={{ width: '50%' }} \n precision={0} \n />\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item \n name=\"sleepCycleUom\"\n rules={[\n {required: this.state.allowViewSleepMode, message: appConfigs.errors.fieldErrors.valueRequired },\n {validator: this.validateTimeUnit }\n ]} \n >\n <Select onChange={this.sleepModeHandleChange}\n disabled={!assetMaint.record.allowChangeSleepMode}>\n <Option key=\"minute\" value=\"minute\">Minutes</Option>\n <Option key=\"hour\" value=\"hour\">Hours</Option>\n </Select> \n </Form.Item>\n </Col>\n {this.state.sleepCycleApplied &&\n <Col span={4}>\n <Form.Item\n name=\"sleepCycleApplied\" \n ><CheckCircleOutlined style={{color:\"green\"}} />\n </Form.Item>\n </Col>}\n </Row>\n </Panel>\n </Collapse> \n </>\n </Col>\n </Row>\n }\n \n <Modal title= {this.state.triedEnablingEthernet?'Enable Ethernet': this.state.triedEnablingHotspot?'Enable Hotspot': this.state.triedEnablingWiFi? 'Enable Wifi': 'Warning'} visible={this.state.isAlertModalOpen} onOk={this.handleOk} onCancel={this.handleCancel}>\n <div>\n {this.state.triedEnablingWiFi? \"Enabling Wi-Fi Client will disable Ethernet/Hotspot. Want to proceed? \" :\n (this.state.triedEnablingEthernet || this.state.triedEnablingHotspot)? \"Enabling Ethernet/Hotspot will disable Wi-Fi Client. Want to proceed? \":\"\"}\n </div>\n </Modal> \n </Col>\n </Row>\n </Form>\n </Col>\n </Row>\n \n \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList,\n permissions: state.contextReducer.data\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetWiFiClient);\n\n\n","import React, { useEffect, useState } from \"react\";\nimport { Modal, Table, Checkbox, Space, Tooltip, Input, Select, Col, Row, Button, message, Divider, Popover, Form } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { PhoneOutlined, MailOutlined } from \"@ant-design/icons\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport * as contractActions from \"../../Admin/Contracts/actions\";\nimport moment from \"moment\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport \"../assets.css\";\n\nconst { Option } = Select;\n\ninterface Prop {\n getAssets: Function,\n assetMaintClose: Function, \n getCustomerBucketDetails: Function, \n getServicePlansList: Function, \n assignServicePlanToGateway: Function, \n getGatewayContractsDetails: Function, \n context: any,\n assetsList: any,\n servicePlansList: any,\n customerBucketDetails: any,\n getServicePlansComparisionSheet:any,\n}\n\n\nconst AssetContractsDetails: React.FC<Prop> = (props) => {\n\n const formRef = React.createRef<FormInstance>();\n const [showZeros, setShowZeros] = useState(false)\n const [contractsHistoryLoading, setContractsHistoryLoading] = useState(false)\n const [isModalVisible, setIsModalVisible] = useState(false)\n const [modalMessage, setModalMessage] = useState('')\n\n const [GatewayContractsDetails, setGatewayContractsDetails] = useState<any>({billingContractHistory: [], renewalContractHistory: []})\n \n useEffect(() => {\n props.getServicePlansList()\n props.getServicePlansComparisionSheet();\n props.getCustomerBucketDetails(props.context.appContext.orgId)\n props.getGatewayContractsDetails(props.assetsList.assetMaint.record.gatewayId, onGetContractDetailsSuccess, onGetContractDetailsFailure)\n switchContractsHistoryLoading(true)\n }, [props.assetsList.assetMaint.record.orgId]);\n\nconsole.log(props.assetsList.assetMaint.tutorials.tutorialsList);\n useEffect(() => {\n if(!props.servicePlansList.length) {\n props.getCustomerBucketDetails(props.context.appContext.orgId)\n }\n }, [props.servicePlansList]);\n\n\n const showModal = () => {\n setIsModalVisible(true);\n };\n \n const handleOk = () => {\n\n setIsModalVisible(false);\n\n formRef.current?.setFieldsValue({\n userConfirmed: true,\n })\n\n props.assignServicePlanToGateway(formRef.current?.getFieldsValue(), servicePlanAssignedSuccess, servicePlanAssignedError)\n\n };\n \n const handleCancel = () => {\n setIsModalVisible(false);\n };\n\n const toggleZeros = () => {\n setShowZeros(!showZeros)\n }\n\n const switchContractsHistoryLoading = (status: boolean) => {\n setContractsHistoryLoading(status)\n }\n\n const onGetContractDetailsSuccess = (contractsDetails: any) => {\n if(contractsDetails){\n setGatewayContractsDetails({\n billingContractHistory: contractsDetails.billingContractHistory ? JSON.parse(contractsDetails.billingContractHistory) : [], \n renewalContractHistory: contractsDetails.renewalContractHistory ? JSON.parse(contractsDetails.renewalContractHistory) : []\n })\n }\n\n switchContractsHistoryLoading(false)\n }\n const onGetContractDetailsFailure = (errorMessage: any) => {\n console.log('errorMessage')\n console.log(errorMessage)\n }\n\n const onFinishSubmitAssignment = (values: any) => {\n resetFormErrors(null, formRef.current); \n let partNumber = '';\n let PONumber = '';\n let SONumber = '';\n\n //Check if duplicate clicks (similar to Clive's issue)\n\n // console.log('onFinishSubmitAssignment');\n // console.log(formRef.current)\n // console.log(formRef.current?.getFieldsValue(['partNumberId']))\n // console.log(formRef.current?.getFieldValue('partNumberId'))\n if (props.customerBucketDetails) {\n Object.keys(props.customerBucketDetails)?.map((itemKey:any) => {\n if(props.customerBucketDetails[itemKey]?.servicePlanId === formRef.current?.getFieldValue('partNumberId')){\n partNumber = props.customerBucketDetails[itemKey]?.partNumber\n PONumber = props.customerBucketDetails[itemKey]?.partNumberBucketEntries[0]?.poNumber\n SONumber = props.customerBucketDetails[itemKey]?.partNumberBucketEntries[0]?.soNumber\n }\n })\n }\n \n\n formRef.current?.setFieldsValue({\n orgId: props.context.appContext.orgId,\n gatewayId: props.assetsList.assetMaint.record.gatewayId,\n masterTag: props.assetsList.assetMaint.record.mastertag,\n customerNumber: GatewayContractsDetails?.billingContractHistory[0]?.pts_customer_number,\n billToName: GatewayContractsDetails?.billingContractHistory[0]?.customer_name,\n customerPO: PONumber,\n orderNumber: SONumber,\n partNumber: partNumber,\n userConfirmed: false,\n addLog: true\n })\n\n if( formRef.current?.getFieldValue('customerNumber') === '' ||\n formRef.current?.getFieldValue('billToName') === '' ||\n formRef.current?.getFieldValue('customerPO') === '' ||\n formRef.current?.getFieldValue('orderNumber') === '' ||\n formRef.current?.getFieldValue('partNumber') === ''\n ){\n message.error(\"Unable to assign service plan please contact system administrator\", 7)\n } else {\n props.assignServicePlanToGateway(formRef.current?.getFieldsValue(), servicePlanAssignedSuccess, servicePlanAssignedError)\n }\n }\n\n const servicePlanAssignedSuccess = (data: any, resultMessage: any) => {\n \n \n if(resultMessage === 'Renewal Contract Assigned, Activated and Downgraded Successfully'){\n message.success(\"Service plan assigned, please assign a Lite template!\", 7);\n props.getAssets(\n null, null, null, \n props.assetsList.tableConfig.pagination.current, \n props.assetsList.status, props.assetsList.searchText, \n props.assetsList.alertInterval, props.assetsList.gatewayId,\n true\n );\n props.assetMaintClose(null);\n } else {\n message.success(resultMessage, 7);\n setContractsHistoryLoading(true)\n props.getCustomerBucketDetails(props.context.appContext.orgId)\n props.getGatewayContractsDetails(props.assetsList.assetMaint.record.gatewayId, onGetContractDetailsSuccess, onGetContractDetailsFailure)\n }\n \n \n }\n\n const servicePlanAssignedError = (defaultMessage: any, ServerMessage: any) => {\n if(ServerMessage?.includes('There is an active contract expiring on') || ServerMessage?.includes('There is a pending service plan')){\n setModalMessage(ServerMessage)\n showModal()\n } else {\n message.error(ServerMessage ? ServerMessage : defaultMessage, 7);\n }\n }\n\n\n const customerBucketTableColumn = [\n {\n title: 'Service Plan Description',\n dataIndex: 'packageName',\n render: (text: string) => {\n text = text.replace(/\\s*\\(.*?\\)$/, '');\n //text = text.replace(/(Local Plan)+/gi, 'Local Plan (WiFi Only)');\n if (/Local Plan/gi.test(text)) \n { \n text = 'Local Plan (WiFi Only)'; \n }\n return text;\n },\n },\n {\n title: 'Service Plan Part Number',\n dataIndex: 'partNumber',\n },\n {\n title: 'Available Quantity',\n dataIndex: 'total_available_quantity',\n render: (text: string, record: any) => {\n const content = (\n <table className=\"styled-table\" style={{overflow:'auto',height:'300px',display: 'block'}}>\n <thead style={{position:'sticky',top: 0}}>\n <tr>\n <th style={{whiteSpace: 'nowrap' }}>Created At</th>\n <th style={{whiteSpace: 'nowrap' }}>PO Number</th>\n <th style={{whiteSpace: 'nowrap' }}>SO Number</th>\n <th>Purchased Quantity</th>\n <th>Used (Assigned) Quantity</th>\n <th>Available Quantity</th>\n </tr>\n </thead>\n <tbody>\n { record.partNumberBucketEntries?.map((bucketEntry:any) => \n <tr key={bucketEntry.bucketId}>\n <td style={{whiteSpace: 'nowrap' }}>{ moment(bucketEntry.createdAt).format('MM/DD/YYYY HH:mm:ss') }</td>\n <td style={{whiteSpace: 'nowrap' }}>{bucketEntry.poNumber}</td>\n <td style={{whiteSpace: 'nowrap' }}>{bucketEntry.soNumber}</td>\n <td>{bucketEntry.purchasedQuantity}</td>\n <td>{bucketEntry.purchasedQuantity - bucketEntry.availableQuantity}</td>\n <td>{bucketEntry.availableQuantity}</td>\n </tr>\n )}\n </tbody>\n\n </table>\n );\n\n if(record.total_available_quantity > 0) {\n return (\n <Popover placement=\"topLeft\" key={record.partNumber} content={content} title=\"PO History\">\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{record.total_available_quantity}</span>\n </Popover >\n )\n } else {\n return (\n <span style={{ cursor: \"pointer\" }}>{record.total_available_quantity}</span>\n )\n }\n\n }\n },\n ];\n\n const orgBucketTableColumn = [\n {\n title: 'Service Plan Description',\n dataIndex: 'packageName',\n render: (text: string) => {\n text = text.replace(/\\s*\\(.*?\\)$/, '');\n //text = text.replace(/(Local Plan)+/gi, 'Local Plan (WiFi Only)');\n if (/Local Plan/gi.test(text)) \n { \n text = 'Local Plan (WiFi Only)'; \n }\n\n return text;\n },\n },\n {\n title: 'Service Plan Part Number',\n dataIndex: 'partNumber',\n },\n {\n title: 'Available Quantity',\n dataIndex: 'total_available_quantity',\n render: (text: string, record: any) => {\n const content = (\n <table className=\"styled-table\" style={{width: '550px'}}>\n <thead>\n <tr>\n <th style={{whiteSpace: 'nowrap' }}>Transfer Date</th>\n <th>Transferred From (Org)</th>\n <th>Transferred In Quantity</th>\n <th>Returned Quantity</th>\n <th>Used (Assigned) Quantity</th>\n <th>Available Quantity</th>\n </tr>\n </thead>\n <tbody>\n { record.partNumberBucketEntries?.map((bucketEntry:any) => \n <tr key={bucketEntry.bucketId}>\n <td style={{whiteSpace: 'nowrap' }}>{ moment(bucketEntry.createdAt).format('MM/DD/YYYY HH:mm:ss A') }</td>\n <td style={{textAlign: 'center', whiteSpace: 'nowrap'}}>{bucketEntry.transferredInFromOrgName}</td>\n <td style={{backgroundColor: 'rgba(3, 190, 252, 0.1)', textAlign: 'center'}}>{bucketEntry.transferredInQuantity}</td>\n <td style={{backgroundColor: 'rgba(150, 32, 107, 0.1)', textAlign: 'center'}}>{bucketEntry.transferredOutQuantity ? bucketEntry.transferredOutQuantity : \"0\"}</td>\n <td style={{textAlign: 'center'}}>{bucketEntry.transferredInQuantity - bucketEntry.availableQuantity - bucketEntry.transferredOutQuantity}</td>\n <td style={{backgroundColor: 'rgba(11, 156, 110, 0.1)', textAlign: 'center' }}>{bucketEntry.availableQuantity }</td>\n </tr>\n )}\n </tbody>\n\n </table>\n );\n\n if(record.total_available_quantity > 0) {\n return (\n <Popover placement=\"topLeft\" key={record.partNumber} content={content} title=\"Transfer History\">\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{record.total_available_quantity}</span>\n </Popover >\n )\n } else {\n return (\n <span style={{ cursor: \"pointer\" }}>{record.total_available_quantity}</span>\n )\n }\n\n }\n },\n ];\n \n return ( \n\n <>\n\n <Modal title=\"Entry Warning\" visible={isModalVisible} okText=\"Yes, Add\" cancelText=\"No\" okType=\"danger\" onOk={handleOk} onCancel={handleCancel}>\n <span>{ modalMessage }</span><br />\n <span>Are you sure you still want to add this service plan?</span> \n </Modal>\n\n <Form\n id=\"assignSerivePlanToGateway\"\n ref={formRef}\n layout=\"vertical\"\n onFinish={onFinishSubmitAssignment}\n > \n <Row gutter={8}>\n\n <Form.Item name=\"orgId\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"gatewayId\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"masterTag\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"addLog\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"customerNumber\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"billToName\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"customerPO\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"orderNumber\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"partNumber\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n <Form.Item name=\"userConfirmed\" >\n <Input value=\"\" type='hidden' />\n </Form.Item>\n\n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <Form.Item\n label=\"Select Service Plan To Assign\"\n name=\"partNumberId\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n \n <Select\n placeholder=\"Select Service Plan\"\n showSearch\n style={{ width: '100%' }}\n optionFilterProp=\"children\"\n filterOption={(input, option) => {\n return option?.children[0]?.props?.children[0]?.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n >\n {\n props.customerBucketDetails != null && \n Object.keys(props.customerBucketDetails)?.map((itemKey:any) => (\n (props.customerBucketDetails[itemKey]?.total_available_quantity > 0) &&\n <Option key={props.customerBucketDetails[itemKey]?.servicePlanId} value={props.customerBucketDetails[itemKey]?.servicePlanId}>\n <span>{props.customerBucketDetails[itemKey]?.packageName} </span>\n {/* <span style={{ float: 'right' }}>Quantity: {props.customerBucketDetails[itemKey]?.total_available_quantity}</span> */}\n </Option>\n \n ))\n }\n </Select>\n \n </Form.Item>\n </Col>\n\n <Divider></Divider>\n\n <Col span={24}>\n <h3>Asset Detailed View</h3>\n <table className=\"styled-table\" style={{width: '100%'}}>\n <thead>\n <tr>\n <th>Mastertag</th>\n <th>Created On</th>\n <th>Start Date</th>\n <th>End Date</th>\n <th>Part Number</th>\n </tr>\n </thead>\n \n {\n contractsHistoryLoading &&\n <tbody>\n <tr>\n <td style={{textAlign: \"center\"}} colSpan={4}>Loading...</td>\n </tr>\n </tbody>\n }\n \n {\n !contractsHistoryLoading &&\n <tbody>\n {GatewayContractsDetails.billingContractHistory?.map((billing: any) =>\n <tr key={billing.id}>\n <td>{billing.mastertag}</td>\n <td>{billing.built_on}</td>\n <td>{billing.contract_start_date}</td>\n <td>{billing.contract_end_date}</td>\n <td>{billing.partNumber}</td>\n </tr>\n )}\n {GatewayContractsDetails.renewalContractHistory?.map((renewal: any, index: number) =>\n <tr key={renewal.id}>\n <td>{renewal.mastertag}</td>\n <td>{renewal.created_date}</td>\n <td>{renewal.contract_start_date}</td>\n <td>{renewal.contract_end_date}</td>\n <td>{renewal.partNumber}</td>\n </tr>\n )}\n </tbody>\n }\n\n </table>\n </Col>\n\n <Divider></Divider>\n\n {\n props.customerBucketDetails?.length > 0 &&\n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <h3>\n <span>Available Service Details</span>\n {/* <span onClick={toggleZeros} style={{ marginLeft: \"3px\", fontSize: '12px', color: \"#1890FF\", textDecoration: \"underline\", cursor: \"pointer\", userSelect: \"none\" }}>{!showZeros ? 'Show' : 'Hide'} Zero Quantities</span> */}\n {/* <Button \n onClick={toggleZeros} \n size='small'\n type={!showZeros ? \"primary\" : \"default\"}\n style={{ float: 'right'}}\n >{!showZeros ? 'Show' : 'Hide'} Zeros</Button> */}\n {/* Commenting this below checkbox for OPS-6347 */}\n {/* <Checkbox \n onClick={toggleZeros}\n defaultChecked={showZeros}\n style={{ float: 'right' }}\n >\n <span style={{paddingLeft: \"2px\"}}>Show Zero Quantities</span>\n </Checkbox> */}\n </h3>\n <Table\n pagination={false}\n columns={props.context.user.contextOrgHasTransferredContracts ? orgBucketTableColumn : customerBucketTableColumn}\n dataSource={!showZeros ? props.customerBucketDetails?.filter((details: any) => details['total_available_quantity'] > 0) : props.customerBucketDetails}\n rowKey={(record) => record.partNumber}\n size=\"small\"\n />\n <hr/>\n \n {props.assetsList.assetMaint.tutorials.tutorialsList.map((tutorial: any) => \n (tutorial.category === \"Userguide\" &&tutorial.id === 20 &&\n <div><a href={tutorial.link} target=\"_blank\">Check Here</a><span> to know about our Service Plans</span> </div>\n ))}\n </Col>\n \n }\n \n\n </Row>\n\n </Form>\n\n </>\n \n )\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList,\n servicePlansList: state.contractsReducers.contractsState.contracts.servicePlansList,\n customerBucketDetails: state.contractsReducers.contractsState.contracts.customerBucketDetails\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n ...actions,\n ...contractActions\n }\n)(AssetContractsDetails);","import React from \"react\";\nimport { Drawer, Button, Tabs, Space ,Popconfirm} from \"antd\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport AssetMaintInfo from \"./assetMaintInfo/AssetMaintInfo\";\nimport AssetMaintSubscriptions from \"./assetMaintSubscriptions/AssetMaintSubscriptions\";\nimport AssetMaintControllerInfo from \"./assetMaintControllerInfo/AssetMaintControllerInfo\";\nimport AssetGatewaySettings from \"./assetGatewaySettings/AssetGatewaySettings\";\nimport AssetContractsDetails from \"./AssetContractsDetails/AssetContractsDetails\";\nimport { FormInstance } from 'antd/lib/form';\n\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n getAssets: Function,\n assetMaintClose: Function, \n assetMaintTabChange: Function,\n assetsList: any,\n context: any,\n iscreate: boolean,\n isupdate: boolean,\n isread: boolean\n}\n\n// //Rollback gateway replacement changes\ninterface State {\n enableMtag: boolean\n}\n\nclass AssetMaint extends React.Component<Prop, State> { \n\n formRef=React.createRef<FormInstance>();\n state: State = {\n enableMtag: false\n }\n//class AssetMaint extends React.Component<Prop, {}> {\n onDrawerClose = () => {\n if (this.props.assetsList.refreshOnUpdate) {\n this.props.getAssets(\n this, null, null, \n this.props.assetsList.tableConfig.pagination.current, \n this.props.assetsList.status, this.props.assetsList.searchText, \n this.props.assetsList.alertInterval, this.props.assetsList.gatewayId,\n true\n );\n }\n this.props.assetMaintClose(this);\n };\n\n onTabChange = (key:string) => {\n this.props.assetMaintTabChange(this, key);\n }\n\n //Rollback gateway replacement changes\n confirmMtagReplacement = () => (\n <Popconfirm\n title={\"Do you really want to replace the asset?\"}\n onConfirm={(e) => {this.submitReplacement()}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Button data-id=\"assets-maint-submit-button\" type=\"primary\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n </Popconfirm>\n );\n\n onMtagReplacement=(isEnable:boolean)=>{\n this.setState({enableMtag:isEnable})\n }\n\n assetMaintFormRef=(form:any)=>{\n this.formRef=form;\n }\n\n submitReplacement=()=>{\n this.formRef.current!.submit();\n }\n \n\n\n render() {\n \n const { assetMaint } = this.props.assetsList;\n const { user:contextUser, appContext} = this.props.context;\n let isBarko = false;\n\n if(appContext.roleName.toLowerCase() === \"barko_guest\"){\n const barkoId = '17ad9f98-33df-48a0-8c4f-99468e22e129'; \n for(let i=0; i<this.props.context.user.homeOrg.orgTree.length; i++){ \n if(this.props.context.user.homeOrg.orgTree[i].orgId === barkoId){\n isBarko = true;\n }\n }\n }\n \n return (\n <Drawer\n data-id=\"user-maint-drawer\" \n title={assetMaint.title}\n width={assetMaint.width}\n onClose={this.onDrawerClose}\n visible={assetMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"assets-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n assetMaint.activeTab === \"3\" &&\n ( /* \n A) any admin-like or create asset permission\n */\n // B.Object.keys(assetMaint.record).length === 0 &&\n ((assetMaint.record.status || \"\") !== \"whitelisted\") && ((assetMaint.record.status || \"\") !== \"inactive\") && \n (assetMaint.record.objectAdmin || this.props.iscreate || this.props.isupdate)\n ) &&\n <Button data-id=\"assets-settings-submit-button\" type=\"primary\" form=\"assetMaintSettingsForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n assetMaint.activeTab === \"1\" &&\n ( /* A) Whitelisted\n B) any admin-like or create asset permission\n */\n // Object.keys(assetMaint.record).length === 0 &&\n (assetMaint.record.status || \"\") === \"whitelisted\" && \n (assetMaint.record.objectAdmin || this.props.iscreate || this.props.isupdate)\n ) &&\n <Button data-id=\"assets-maint-submit-button\" type=\"primary\" form=\"assetMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n assetMaint.activeTab === \"1\" &&\n\n ( /* A) A user role can view but not edit (submit); therefore user will not see submit button. \n B) Barko guest (isBarko=true) can submit\n C) ignore record_length ?\n D) any admin-like or create/update asset permission for non-whitelisted asset\n E) Asset is not inactive\n */\n isBarko || \n ((assetMaint.record.status || \"\") !== \"whitelisted\") && ((assetMaint.record.status || \"\") !== \"inactive\") && \n (assetMaint.record.objectAdmin || this.props.iscreate || this.props.isupdate)\n ) && !this.state.enableMtag &&\n <Button data-id=\"assets-maint-submit-button\" type=\"primary\" form=\"assetMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {/* Rollback gateway replacement changes */}\n {\n assetMaint.activeTab === \"1\" &&\n\n ( /* A) A user role can view but not edit (submit); therefore user will not see submit button. \n B) Barko guest (isBarko=true) can submit\n C) ignore record_length ?\n D) any admin-like or create/update asset permission for non-whitelisted asset\n E) Asset is not inactive\n */ \n isBarko || \n ((assetMaint.record.status || \"\") !== \"whitelisted\") && ((assetMaint.record.status || \"\") !== \"inactive\") && \n (assetMaint.record.objectAdmin || this.props.iscreate || this.props.isupdate)\n ) && this.state.enableMtag &&\n this.confirmMtagReplacement()\n \n } \n {\n assetMaint.activeTab === \"5\" &&\n\n <Button data-id=\"assign-service-plan-to-gateway\" type=\"primary\" form=\"assignSerivePlanToGateway\" key=\"submit\" htmlType=\"submit\">\n Assign\n </Button>\n } \n </Space>\n }\n >\n {\n // (\n // Object.keys(assetMaint.record).length === 0\n // ) &&\n // <Tabs data-id=\"assets-maint-asset-info-tabs\" activeKey={assetMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}> \n // <TabPane data-id=\"assets-maint-asset-info-tab-button\" tab={assetMaint.tabs[0].title} key=\"1\" disabled={assetMaint.tabs[0].disabled}> \n // <AssetMaintInfo guestRole={isBarko}/>\n // </TabPane> \n // </Tabs> \n } \n {\n (\n isBarko || appContext.roleName === \"user\" ||\n assetMaint.record.objectAdmin || this.props.iscreate || this.props.isupdate \n ) &&\n <Tabs data-id=\"assets-maint-asset-info-tabs\" activeKey={assetMaint.activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}> \n <TabPane data-id=\"assets-maint-asset-info-tab-button\" tab={assetMaint.tabs[0].title} key=\"1\" disabled={assetMaint.tabs[0].disabled}> \n {/* <AssetMaintInfo guestRole={isBarko}/> */}\n <AssetMaintInfo guestRole={isBarko} assetMaintFormRef={this.assetMaintFormRef} onMtagReplacement={this.onMtagReplacement}/>\n </TabPane> \n {\n /* Note: DB function controls the content of the subscription by the alert_settings read/edit permission\n therefore, UI only needs to check assets update permission to determine whether to show the subscription tab */\n /* alert subscription is only applicable to active asset */\n /* whitelisted assets (or create asset) permission does not apply to subscription*/\n (assetMaint.record.status || \"\") !== \"whitelisted\" && \n Object.keys(assetMaint.record).length !== 0 && /* this line controls whether subscription tab shown up in whitelist new asset drawer */\n (\n this.props.iscreate || this.props.isupdate\n ) && \n <>\n \n <TabPane data-id=\"assets-maint-subscriptions-tab-button\" tab={assetMaint.tabs[1].title} key=\"2\" disabled={assetMaint.tabs[1].disabled || assetMaint.record.status == 'inactive'}>\n <AssetMaintSubscriptions />\n </TabPane> \n </>\n }\n {\n (appConfigs.app.enableGatewaySettings)&&((assetMaint.record.status || \"\") !== \"whitelisted\") &&\n // ( this.props.context.appContext.orgId == 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' && \n (assetMaint.record.allowWifiClient || assetMaint.record.allowViewSleepMode)\n //)\n &&\n (assetMaint.record.objectAdmin || this.props.iscreate || this.props.isupdate)\n &&\n <TabPane data-id=\"assets-wifi_client-tab-button\" tab={assetMaint.tabs[2].title} key=\"3\" disabled={assetMaint.tabs[2].disabled || assetMaint.record.status == 'inactive'}> \n <AssetGatewaySettings />\n </TabPane>\n } \n {\n /* whitelisted assets (or create asset) permission does not apply to controllers*/\n (assetMaint.record.status || \"\") !== \"whitelisted\" && \n Object.keys(assetMaint.record).length !== 0 && /* this line controls whether subscription tab shown up in whitelist new asset drawer */\n (this.props.iscreate || this.props.isupdate) && \n (this.props.context.appContext.orgId == 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b') &&\n <TabPane data-id=\"assets-iqanopen-tab-button\" tab={assetMaint.tabs[3].title} key=\"4\" disabled={assetMaint.tabs[3].disabled || assetMaint.record.status == 'inactive'}>\n <AssetMaintControllerInfo />\n </TabPane> \n } \n\n {\n /* whitelisted assets (or create asset) permission does not apply to controllers*/\n Object.keys(assetMaint.record).length !== 0 && /* this line controls whether subscription tab shown up in whitelist new asset drawer */\n (this.props.iscreate || this.props.isupdate) && \n (this.props.context.user.contextUserOrgIsBillableCustomer || this.props.context.user.contextOrgHasTransferredContracts) &&\n <TabPane data-id=\"assets-iqanopen-tab-button\" tab={assetMaint.tabs[4].title} key=\"5\">\n <AssetContractsDetails />\n </TabPane> \n } \n </Tabs> \n } \n {/* { \n // Object.keys(assetMaint.record).length !== 0 && \n // !assetMaint.record.objectAdmin && !isBarko && appContext.roleName !== \"user\" &&\n (Object.keys(assetMaint.record).length !== 0 || this.props.iscreate || this.props.isupdate ) &&\n \n <Tabs data-id=\"assets-maint-asset-info-tabs\" activeKey=\"2\" size=\"large\" type=\"card\"> \n <TabPane data-id=\"assets-maint-subscriptions-tab-button\" tab={assetMaint.tabs[1].title} key=\"2\">\n <AssetMaintSubscriptions />\n </TabPane> \n </Tabs> \n } */}\n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AssetMaint);","import React, { Component } from \"react\";\nimport { Table,Badge, Tooltip } from \"antd\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport history from '../../../utils/history';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { Breakpoint } from \"antd/lib/_util/responsiveObserve\";\nimport { CheckCircleOutlined, ClockCircleOutlined, CloseCircleOutlined, CloudServerOutlined } from \"@ant-design/icons\";\nimport { stringToUrlString, getPermissions } from \"../../../utils/commonHelpers\";\n\n\n\n\n\ninterface Prop {\n getLiteAssets: Function,\n assetsList: any,\n liteAssetsSetPagination:Function,\n context: any,\n permissions: any,\n}\n\n\n\nclass LiteAssets extends Component<Prop, {}> {\n\n \n componentDidMount () {\n this.props.liteAssetsSetPagination(this.onPaginationChange);\n this.props.getLiteAssets(this, null, null,1, \"\",\"\",\"\",\"\"); \n }\n\n onPaginationChange = (page: number) => {\n this.props.getLiteAssets(this, null, null,page, this.props.assetsList.liteAssets.searchText,\"\",\"\",\"\"); \n };\n\n goToTemplate = (e: any, templateName: string, templateId: string) => {\n e.preventDefault();\n\n let templateNameUrl = stringToUrlString(templateName);\n templateNameUrl = (templateNameUrl || \"\") === \"\" ? \"details-\" + templateId : templateNameUrl;\n\n history.push(\"/template/details/\" + templateNameUrl + \"/\" + templateId);\n };\n goToAsset = (e: any, mastertag: number) => {\n e.preventDefault();\n history.push(\"/assets/\" + mastertag);\n };\n \n render() { \n const { user:contextUser, appContext} = this.props.context;\n\n const { tableConfig, tableData} = this.props.assetsList.liteAssets;\n const templatesPermission = getPermissions(this.props.permissions.permissions.templates);\n let isTemplateRead = templatesPermission[1];\n let access = JSON.parse(appContext.disabledFeaturesOfContextOrg);\n const tableColumns = [\n {\n title: \"Asset\",\n dataIndex: \"nickname\",\n sorter: false,\n render: (text: any, record: any) => (\n ((access==null || (access && access.length===0))\n && (!record.blockedassetOrgId ? true : (contextUser.homeOrg.orgId !== record.blockedassetOrgId? true:false)))?\n <a href=\"# \" onClick={(e) => {this.goToAsset(e, record.mastertag)}}> \n { \n record.status === \"active\" &&\n <span className=\"asset-status-green pr-5\" ><CheckCircleOutlined /></span>\n }\n { \n record.status === \"inactive\" &&\n <span className=\"asset-status-red pr-5\" ><CloseCircleOutlined /></span>\n }\n { \n record.status === \"whitelisted\" &&\n <span className=\"asset-status-gray pr-5\" ><ClockCircleOutlined /></span>\n }\n {record.nickname || record.mastertag} \n </a>\n :\n <Tooltip title=\"Access Denied\" >\n { \n <a style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}}> \n { \n record.status === \"active\" &&\n <span className=\"asset-status-green pr-5\" ><CheckCircleOutlined /></span>\n }\n { \n record.status === \"inactive\" &&\n <span className=\"asset-status-red pr-5\" ><CloseCircleOutlined /></span>\n }\n { \n record.status === \"whitelisted\" &&\n <span className=\"asset-status-gray pr-5\" ><ClockCircleOutlined /></span>\n }\n {record.nickname || record.mastertag} \n </a>\n }\n </Tooltip>\n\n ) \n },\n {\n title: \"Status\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <span>{record.status}</span>\n )\n },\n {\n title: \"Part Number\",\n dataIndex: \"partNumber\",\n key: \"partNumber\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <span>{record.partNumber}</span>\n )\n },\n {\n title: \"Quota Name\",\n dataIndex: \"quotaName\",\n key: \"quotaName\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <span>{record.quotaName}</span>\n )\n },\n {\n title: \"#Signals\",\n dataIndex: \"noOfSignals\",\n key: \"noOfSignals\",\n align: \"center\" as \"center\",\n render: (text: number, record: any) => (\n <span>{record.noOfSignals}</span>\n )\n },\n {\n title: \"Min Feq\",\n dataIndex: \"minCollectionFreq\",\n key: \"minCollectionFreq\",\n align: \"center\" as \"center\",\n render: (text: number, record: any) => (\n <span>{record.minCollectionFreq}</span>\n )\n },\n {\n title: \"Max DM1\",\n dataIndex: \"maxDayDm1\",\n key: \"maxDayDm1\",\n align: \"center\" as \"center\",\n render: (text: number, record: any) => (\n <span>{record.maxDayDm1}</span>\n )\n },\n {\n title: \"Mastertag\",\n dataIndex: \"mastertag\",\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Org Name\",\n dataIndex: \"orgName\",\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Template\",\n dataIndex: \"templateName\",\n responsive: [\"lg\"] as Breakpoint[],\n className: appContext.roleName === \"guest\" ? \"hidden\" : \"\",\n \n render: (text: any, record: any) => (\n <>\n {\n !record.templateName &&\n <span></span>\n }\n {\n record.templateName && isTemplateRead && record.templateVisibleToSubOrg &&\n <Badge dot offset={[5, 5]}>\n <a href=\"# \" onClick={(e) => {this.goToTemplate(e, record.templateName, record.templateId)}}> \n {record.templateName} \n </a>\n </Badge> \n }\n {\n record.templateName && isTemplateRead && !record.templateVisibleToSubOrg &&\n <a href=\"# \" onClick={(e) => {this.goToTemplate(e, record.templateName, record.templateId)}}> \n {record.templateName} \n </a>\n }\n {\n record.templateName && !isTemplateRead && record.templateVisibleToSubOrg &&\n <Badge dot offset={[5, 5]}>\n <span>{record.templateName}</span> \n </Badge>\n }\n {\n record.templateName && !isTemplateRead && !record.templateVisibleToSubOrg &&\n <span>{record.templateName}</span> \n }\n </>\n ) \n }\n \n ];\n\n return (\n <>\n {\n // this.props.isread &&\n <Table \n data-id=\"lite_assets_data\"\n {...tableConfig}\n rowKey={(record) => record.gatewayId}\n columns={tableColumns}\n dataSource={tableData}\n className=\"mt-10\"\n />\n }\n \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n assetsList: state.assetsReducer.assetsState.assetsList, \n \n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(LiteAssets);\n \n","import React, { Component, useState } from \"react\";\nimport { Table, Input, Row, Col, Space, Button, Tooltip, Radio, message, Popconfirm, Breadcrumb, Tag, Badge, Menu, Checkbox, Dropdown, Modal, Divider } from \"antd\";\nimport Icon, { \n PlusOutlined, EditOutlined, \n ClockCircleOutlined, CheckCircleOutlined, CloseCircleOutlined, \n CaretLeftOutlined, CloudServerOutlined, SearchOutlined, InsertRowRightOutlined, CommentOutlined, FileExclamationOutlined, FileTextOutlined, LockOutlined, UnlockOutlined, CheckOutlined, CloseOutlined, DeleteOutlined\n} from \"@ant-design/icons\";\n\nimport onlineIcon from \"../../assets/images/map-status/online.png\";\nimport offlineIcon from \"../../assets/images/map-status/offline.png\";\nimport criticalIcon from \"../../assets/images/map-status/critical.png\";\nimport warningIcon from \"../../assets/images/map-status/warning.png\";\nimport infoIcon from \"../../assets/images/map-status/info.png\";\nimport assetdownIcon from \"../../assets/images/map-pins/asset_down.svg\";\nimport { ReactComponent as filterRemove } from \"../../assets/images/filter-remove.svg\";\n\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\nimport \"./assets.css\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport AssetMaint from \"./AssetMaint\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { stringToUrlString, closePopover, getPermissions, getAssetTableFilters, setAssetTableFilters, assetTableFilter, isAssetTableFiltersSet, resetAssetTableFilters } from \"../../utils/commonHelpers\";\nimport history from '../../utils/history';\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\n// import { getPermissions } from \"../../utils/commonHelpers\";\nimport LiteAssets from \"./liteAssets/LiteAssets\";\nimport { array } from \"@amcharts/amcharts4/core\";\nimport moment from 'moment';\nimport { FilterDropdownProps } from \"antd/lib/table/interface\";\n\nconst { Search } = Input;\nvar permissionsList;\n\ninterface Prop {\n assetsSetPagination: Function,\n assetsSetStatus: Function,\n assetsSetSearch: Function,\n getAssets: Function,\n getFilterTags: Function,\n editTagSubmit: Function,\n getOrgTags: Function,\n getAsset: Function,\n assetMaintOpen: Function,\n assetStatusUpdate: Function, \n context: any,\n assetsList: any,\n permissions: any,\n permissionsset: any,\n getLiteAssets: Function,\n liteAssetsSetSearch: Function,\n blockAsset: Function,\n}\n\ninterface State {\n mode: string,\n mastertag?: string, \n showLiteAssets:boolean\n assetTableFilters:assetTableFilter\n isAssetTableFiltersSet:boolean\n columnSelectionVisible:boolean\n tableColumnsHidden: string[]\n columnSelectionFilter: string\n tagSearchText: string\n currentTagName: string | null\n newTagName: string\n}\nclass Assets extends Component<Prop, State, {}> {\n \n state: State = {\n mode: \"default\",\n showLiteAssets: false,\n assetTableFilters: getAssetTableFilters(),\n isAssetTableFiltersSet: isAssetTableFiltersSet(),\n columnSelectionVisible: false,\n tableColumnsHidden: ['Contract Start Date', 'Contract End Date'],\n columnSelectionFilter: '',\n tagSearchText: '',\n currentTagName: null,\n newTagName: '',\n };\n\n \n\n drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n \n getMastertagDetailsMode() {\n const pathnameArr = history.location.pathname.split(\"/\");\n \n if (pathnameArr[pathnameArr.length - 1].toLowerCase() === \"details\") {\n return pathnameArr[pathnameArr.length - 2];\n }\n \n return \"\";\n }\n\n componentDidMount() {\n this.props.assetsSetPagination(this.onPaginationChange);\n this.getAssets();\n this.props.getFilterTags(this, null, null, 'all');\n }\n\n getTableFilterParams() {\n \n if (!this.state.assetTableFilters || !this.state.assetTableFilters.hasOwnProperty('status')) { \n this.state.assetTableFilters = {\n page: 1,\n status: 'active',\n searchText: '',\n sortColumn: 'asset',\n sortDirection: 'ascend',\n alertInterval: '1 day',\n listMode: true,\n filters: {tags: null},\n }\n }\n\n return [this, null, null, this.state.assetTableFilters.page, this.state.assetTableFilters.status, this.state.assetTableFilters.searchText, this.state.assetTableFilters.alertInterval, \"\", true, this.state.assetTableFilters.sortColumn, this.state.assetTableFilters.sortDirection, this.state.assetTableFilters.filters]\n \n }\n \n getAssets() {\n const mastertag = this.getMastertagDetailsMode();\n\n if (mastertag === \"\") {\n // User can switch between asset page and other page while the previous asset tab is on \"Lite\"\n if (this.state.assetTableFilters.status !== 'LiteAssets') {\n this.props.getAssets(...this.getTableFilterParams());\n }\n else{\n this.setState({ showLiteAssets: true });\n }\n \n }\n else {\n this.setState({ mode: \"details\", mastertag: mastertag });\n this.props.assetsSetStatus(\"active,inactive,whitelisted,replaced\");\n this.props.assetsSetSearch(mastertag);\n this.state.assetTableFilters.status = \"active,inactive,whitelisted,replaced\"\n this.state.assetTableFilters.searchText = mastertag\n let tableFilterParams = this.getTableFilterParams();\n tableFilterParams[1] = this.getAssetsDetailsSuccess\n this.props.getAssets(...tableFilterParams);\n }\n }\n\n blockAsset= (e: any, record: any) => {\n e.preventDefault();\n this.props.blockAsset(this, this.blockAssetSuccess, this.blockAssetFail, record.gatewayId, record.blockedassetOrgId ? false : true, record.orgId);\n }\n\n blockAssetSuccess=(blocked:any)=>\n {\n if(blocked){\n message.success(\"Asset has been blocked successfully\");\n }\n else{\n message.success(\"Asset has been unblocked successfully\");\n }\n this.props.getAssets(...this.getTableFilterParams());\n }\n\n blockAssetFail=()=>\n {\n\n }\n \n getAssetsDetailsSuccess = (data: any) => {\n this.props.getOrgTags(this, null, null, 'all', data[0].orgId);\n if ((data.length || 0) !== 0) {\n this.assetMaintOpenDo(data[0]);\n }\n }\n\n onPaginationChange = (page: number) => {\n\n this.state.assetTableFilters.page = page\n setAssetTableFilters(this.state.assetTableFilters)\n this.setState({ isAssetTableFiltersSet: isAssetTableFiltersSet() });\n\n this.props.getAssets(...this.getTableFilterParams());\n };\n\n assetMaintOpen = (e: any, record: any) => {\n e.preventDefault();\n this.assetMaintOpenDo(record);\n }\n\n assetMaintOpenDo = (record: any) => { //filterTags\n const title = Object.keys(record).length === 0 ? \"New Asset\" : \"Asset :: \" + (record.nickname || record.mastertag) + \" :: \" + record.status.charAt(0).toUpperCase() + record.status.slice(1);\n this.props.assetMaintOpen(this, title, this.drawerWidth, record);\n this.props.getOrgTags(this, null, null, 'all', record.orgId);\n }\n\n onSearch = (searchText: string) => {\n let me = this;\n this.props.assetsSetSearch((searchText.trim() || \"\"));\n\n // Trimming Empty Spaces on search\n let updatedFilters = { ...this.state.assetTableFilters };\n updatedFilters.searchText = searchText.trim();\n this.setState({ assetTableFilters: updatedFilters });\n\n this.setState({ isAssetTableFiltersSet: isAssetTableFiltersSet() });\n setTimeout(function () {\n me.props.getAssets(...me.getTableFilterParams());\n }, 100);\n }\n \n onSearchChange = (e: any) => {\n let value = e.target.value.trim();\n this.state.assetTableFilters.searchText = value || \"\"\n setAssetTableFilters(this.state.assetTableFilters)\n this.props.assetsSetSearch((value || \"\"));\n }\n\n goToAsset = (e: any, mastertag: number) => {\n e.preventDefault();\n history.push(\"/assets/\" + mastertag);\n };\n\n goToTemplate = (e: any, templateName: string, templateId: string) => {\n e.preventDefault();\n\n let templateNameUrl = stringToUrlString(templateName);\n templateNameUrl = (templateNameUrl || \"\") === \"\" ? \"details-\" + templateId : templateNameUrl;\n\n history.push(\"/template/details/\" + templateNameUrl + \"/\" + templateId);\n };\n \n assetInactivate = (e: any, record: any) => {\n e.preventDefault();\n this.props.assetStatusUpdate(this, this.assetInactivateSuccess, null, record.gatewayId, \"inactive\");\n };\n\n assetInactivateSuccess = (gatewayId: string, status: string) => {\n message.warning(\"Asset has been successfully inactivated\");\n this.props.getAssets(...this.getTableFilterParams());\n }\n\n assetActivate = (e: any, record: any) => {\n e.preventDefault();\n this.props.assetStatusUpdate(this, this.assetActivateSuccess, null, record.gatewayId, \"active\");\n };\n\n assetActivateSuccess = (gatewayId: string, status: string) => {\n message.warning(\"Asset has been successfully activated\");\n this.props.getAssets(...this.getTableFilterParams());\n }\n\n onStatusChange = (e: any) => {\n e.preventDefault();\n\n this.state.assetTableFilters.status = e.target.value || 'active'\n setAssetTableFilters(this.state.assetTableFilters)\n this.props.assetsSetStatus(e.target.value);\n if(e.target.value!==\"LiteAssets\")\n {\n this.setState({ showLiteAssets: false, isAssetTableFiltersSet: isAssetTableFiltersSet() });\n this.props.getAssets(...this.getTableFilterParams());\n }\n else{\n this.setState({ showLiteAssets: true });\n }\n };\n \n cancelDetailsMode = (e: any) => {\n e.preventDefault();\n\n this.props.assetsSetStatus(\"active\");\n this.props.assetsSetSearch(\"\");\n\n history.push(\"/assets\");\n };\n\n confirmInactivation = (record: any, accessAllowed: any) => (\n <Popconfirm\n title={\"Do you really want to inactivate this asset?\"}\n onCancel={closePopover}\n onConfirm={(e) => { this.assetInactivate(e, record) }}\n okText=\"Yes\"\n cancelText=\"No\"\n > \n {\n (accessAllowed)?\n <Tooltip title=\"Inactivate Asset\">\n <Button data-id=\"users-delete-button\" type=\"default\" icon={<CloseCircleOutlined />} />\n </Tooltip> \n :\n <Tooltip title=\"Denied Inactivate Asset\">\n <Button data-id=\"users-delete-button\" style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}}\n type=\"default\" icon={<CloseCircleOutlined />} />\n </Tooltip>\n }\n </Popconfirm>\n );\n\n confirmActivation = (record: any) => (\n <Popconfirm\n title={\"Do you really want to activate this asset?\"}\n onCancel={closePopover}\n onConfirm={(e) => { this.assetActivate(e, record) }}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Activate Asset\">\n <Button data-id=\"users-delete-button\" type=\"default\" icon={<CheckCircleOutlined />} />\n </Tooltip>\n </Popconfirm>\n );\n\n sortAssetsTable = (pagination: any, filters: any, sorter: any) => {\n let sortColumn: string | undefined = undefined;\n let sortDirection: string | undefined = undefined;\n \n if (sorter && Object.keys(sorter).length > 0) {\n const { column, order } = sorter;\n sortDirection = order;\n if (column.title.hasOwnProperty('props')) {\n sortColumn = column.title.props['data-title'].toLowerCase().replace(/\\s/g, '')\n } else {\n sortColumn = column.title.toLowerCase().replace(/\\s/g, '');\n }\n }\n\n this.state.assetTableFilters.page = pagination.current\n this.state.assetTableFilters.sortColumn = sortColumn || ''\n this.state.assetTableFilters.sortDirection = sortDirection || ''\n this.state.assetTableFilters.filters = filters?.tags?.length > 0 ? filters : {tags: null}\n setAssetTableFilters(this.state.assetTableFilters)\n\n this.setState({ isAssetTableFiltersSet: isAssetTableFiltersSet() });\n this.props.getAssets(...this.getTableFilterParams());\n }\n\n goToOperators = (e: any, id: string, operatorsHistoryId?: string, isOperator?: boolean) => {\n e.preventDefault();\n history.push({ pathname: \"/operators/\" + stringToUrlString(id) + ((operatorsHistoryId || \"\") === \"\" ? \"\" : \"/\" + operatorsHistoryId), state: { isOperator: isOperator } });\n };\n\n onLiteAssetSearch = (searchText: string) => {\n let me = this;\n me.props.liteAssetsSetSearch((searchText || \"\"));\n setTimeout(function () {\n me.props.getLiteAssets(me, null, null,1, searchText,\"\",\"\",\"\"); \n }, 100);\n }\n \n onLiteAssetSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.liteAssetsSetSearch((value || \"\"));\n }\n\n resetAssetTableFilters = () => {\n this.setState({\n assetTableFilters: resetAssetTableFilters(),\n isAssetTableFiltersSet: isAssetTableFiltersSet()\n });\n this.state.assetTableFilters = resetAssetTableFilters()\n this.props.getAssets(...this.getTableFilterParams());\n }\n\n \n handleTagSearch = (e:any) => {\n this.setState({ tagSearchText: e.target.value });\n };\n\n handleTagEditClick = (tag:any) => {\n this.setState({ currentTagName: tag, newTagName: tag });\n };\n\n handleTagSaveClick = (confirm:any, clearFilters:any, actionType: string) => {\n\n // console.log(this.state.newTagName, this.state.currentTagName);\n\n if (actionType == 'edit') {\n \n if (this.state.newTagName.trim() !== \"\") {\n\n if (this.state.newTagName.toUpperCase() != this.state.currentTagName) {\n confirm();\n \n Modal.confirm({\n title: 'Are you sure you want to edit this tag?',\n content: 'This change will be applied to all assets attached to this tag within your current organization and all sub-organizations',\n okText: 'Yes, edit and apply',\n okType: 'danger',\n cancelText: 'No',\n onOk: () => {\n clearFilters()\n this.props.editTagSubmit(this, null, null, this.props.context.appContext.orgId, this.state.currentTagName, this.state.newTagName.trim().toUpperCase(), 'edit');\n this.getAssets();\n this.props.getFilterTags(this, null, null, 'all');\n \n message.success('Success!');\n },\n onCancel: () => {\n this.setState({ currentTagName: null, newTagName: '' }); // Hide the input field\n },\n });\n \n } else {\n this.setState({ currentTagName: null, newTagName: '' }); // Hide the input field\n }\n\n } else {\n this.setState({ currentTagName: null, newTagName: '' });\n message.warning('Value cannot be empty');\n }\n \n\n } else if (actionType == 'delete') {\n\n confirm();\n \n Modal.confirm({\n title: 'Are you sure you want to delete this tag?',\n content: 'This will delete this tag from all attached assets within your current organization and all sub-organizations',\n okText: 'Yes, delete',\n okType: 'danger',\n cancelText: 'No',\n onOk: () => {\n clearFilters()\n this.props.editTagSubmit(this, null, null, this.props.context.appContext.orgId, this.state.currentTagName, '', 'delete');\n this.setState({ currentTagName: null, newTagName: '', tagSearchText: '' });\n this.getAssets();\n this.props.getFilterTags(this, null, null, 'all');\n message.success('Success!');\n },\n onCancel: () => {\n this.setState({ currentTagName: null, newTagName: '' }); // Hide the input field\n },\n });\n\n }\n \n \n \n };\n \n handleTagEditChange = (e:any) => {\n this.setState({ newTagName: e.target.value });\n };\n\n render() {\n\n const { user: contextUser, appContext } = this.props.context;\n const { tableConfig, tableData } = this.props.assetsList;\n\n const result = getPermissions(this.props.permissions.permissions.assets);\n const templatePermissions = getPermissions(this.props.permissions.permissions.templates);\n \n let iscreate = result[0];\n let isread = result[1];\n let isupdate = result[2];\n\n\n const tagPermissions = getPermissions(this.props.permissions.permissions.asset_tagging);\n let canTagRead = tagPermissions[1];\n let canTagDelete = tagPermissions[3];\n\n let isBarko = false;\n \n if (appContext.roleName.toLowerCase() === \"barko_guest\") {\n const barkoId = '17ad9f98-33df-48a0-8c4f-99468e22e129';\n for (let i = 0; i < this.props.context.user.homeOrg.orgTree.length; i++) {\n if (this.props.context.user.homeOrg.orgTree[i].orgId === barkoId) {\n isBarko = true;\n }\n }\n }\n\n const oprPermission = getPermissions(this.props.permissions.permissions.operator_support);\n let isOprRead = oprPermission[1];\n let isOprUpdate = oprPermission[2]; \n let access = JSON.parse(appContext.disabledFeaturesOfContextOrg);\n let assetRestricted = (access==null || (access && access.length===0)) ? \n \"Access Denied. Asset Dashboard Viewing Disabled in Asset Setting. Please contact Org Administrator.\"\n :\"Access Denied. Asset Dashboard Viewing Disabled in Org Setting. Please contact Org Administrator.\" ; \n let tableColumns = [\n {\n title: \"Asset\",\n column_name: \"Asset\",\n dataIndex: \"nickname\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'asset' ? this.state.assetTableFilters.sortDirection : false,\n render: (text: any, record: any) => (\n ((access==null || (access && access.length===0))\n && (!record.blockedassetOrgId ? true : (contextUser.homeOrg.orgId !== record.blockedassetOrgId? true:false)))?\n (record.status != 'replaced' ?\n (<a href={`/assets/${record.mastertag}`} onClick={(e) => { this.goToAsset(e, record.mastertag) }}>\n {\n record.notesCount > 0 &&\n <span className=\"asset-status-yellow pr-3\" ><FileTextOutlined /></span>\n }\n {\n record.status === \"active\" &&\n <span className=\"asset-status-green pr-5\" ><CheckCircleOutlined /></span>\n }\n {\n record.status === \"inactive\" &&\n <span className=\"asset-status-red pr-5\" ><CloseCircleOutlined /></span>\n }\n {\n record.status === \"whitelisted\" &&\n <span className=\"asset-status-gray pr-5\" ><ClockCircleOutlined /></span>\n }\n {record.nickname || record.mastertag}\n </a>)\n : (<a style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}} ><span className=\"asset-status-gray pr-5\" ><CloseCircleOutlined /> {record.nickname || record.mastertag} </span>\n </a>)\n )\n :\n \n <Tooltip placement=\"rightTop\" title= {assetRestricted} >\n <Space>\n {\n <a style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}} > \n {\n record.notesCount > 0 &&\n <span className=\"asset-status-yellow pr-3\" ><FileTextOutlined /></span>\n }\n {\n record.status === \"active\" &&\n <span className=\"asset-status-green pr-5\" ><CheckCircleOutlined /></span>\n }\n {\n record.status === \"inactive\" &&\n <span className=\"asset-status-red pr-5\" ><CloseCircleOutlined /></span>\n }\n {\n record.status === \"whitelisted\" &&\n <span className=\"asset-status-gray pr-5\" ><ClockCircleOutlined /></span>\n }\n {\n record.status === \"replaced\" &&\n <span className=\"asset-status-gray pr-5\" ><ClockCircleOutlined /></span>\n }\n {record.nickname || record.mastertag}\n </a>\n \n }\n </Space>\n </Tooltip>\n \n )\n },\n {\n title: \"Status\",\n column_name: \"Status\",\n responsive: [\"md\"] as Breakpoint[],\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'status' ? this.state.assetTableFilters.sortDirection : false,\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <>\n {\n record.connectionStatus === \"ONLINE\" && record.status !== \"inactive\" && record.status !== \"whitelisted\" && record.assetDownDesc == null &&\n <Tooltip title=\"Online\">\n <span className=\"asset-status-green alarm-info-icon pr-5\" ><img src={onlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {\n record.connectionStatus === \"ONLINE\" && record.status !== \"active\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {\n record.assetDownDesc !== null && record.status !== \"inactive\" && record.status !== \"whitelisted\" && record.connectionStatus !== \"ONLINE\" &&\n <Tooltip title= {\"Asset Down : \" + record.assetDownDesc} >\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={assetdownIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {\n record.connectionStatus === \"ONLINE\" && record.assetDownDesc !== null && \n <Tooltip title=\"Online\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={onlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {\n record.connectionStatus === \"OFFLINE\" && record.assetDownDesc == null &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n </>\n )\n },\n {\n //Displaying the last status change time even for online assets instead of showing \"NA\".\n //So, changing the title\n\n //title: \"Offline Since\",\n title: <Tooltip mouseEnterDelay={0.5} data-title=\"Status Since\" title=\"Represents most recent device's connect/disconnect timestamp\"><span>Status Since</span></Tooltip>,\n column_name: \"Status Since\",\n responsive: [\"xl\"] as Breakpoint[],\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'statussince' ? this.state.assetTableFilters.sortDirection : false,\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <> \n {\n //As part of fix for OPS-2627, inserting status as whitelisted for newly provisioned assets.\n //So, if status received as whitelisted from DB, show it is offline and time as \"Not Available\" in UI\n //Also, display status time for online devices\n\n //record.connectionStatus === \"OFFLINE\" ?\n record.connection_status === 'whitelisted' ?\n <>{appConfigs.app.assets.offlineHavingNoDateText}</>\n :record.disconnectedSince ? \n <span>{new Date(record.disconnectedSince).toLocaleString()}</span> \n : <>{appConfigs.app.assets.offlineHavingNoDateText}</> \n //: <>{appConfigs.app.assets.onlineText}</>\n }\n </>\n )\n },\n {\n title: \"Tags\",\n column_name: \"Tags\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n filterMultiple: true,\n width: '12%',\n sortOrder: this.state.assetTableFilters.sortColumn == 'tags' ? this.state.assetTableFilters.sortDirection : false,\n filterDropdown: ( { setSelectedKeys, selectedKeys, confirm, clearFilters }: FilterDropdownProps ) => (\n <div style={{ padding: 8 }}>\n\n <Input\n placeholder={`Search Tags`}\n value={this.state.tagSearchText}\n onChange={this.handleTagSearch}\n style={{ marginBottom: 8, marginTop: 2, display: 'block' }}\n />\n\n <div style={{ maxHeight: '200px', overflowY: 'auto', paddingRight:\"15px\" }}>\n {this.props.assetsList.filterTags\n .filter((tag:any) => tag.toLowerCase().includes(this.state.tagSearchText.toLowerCase()))\n .map((tag: any, index: any) => (\n \n <div key={index} style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n {this.state.currentTagName === tag ? (\n <Input\n value={this.state.newTagName}\n onChange={this.handleTagEditChange}\n // onBlur={() => this.setState({ currentTagName: null })}\n />\n ) : (\n <div style={{marginBottom: '7px'}}>\n <Checkbox\n key={index}\n checked={selectedKeys.includes(tag)}\n onChange={e => {\n const value = e.target.checked ? [tag, ...selectedKeys] : selectedKeys.filter(key => key !== tag);\n setSelectedKeys(value);\n }}\n >\n {tag}\n </Checkbox>\n </div>\n )}\n\n {(this.state.currentTagName === tag) ? (\n <>\n <Tooltip placement=\"top\" title=\"Cancel\">\n <Button size=\"small\" shape=\"circle-outline\" type=\"default\" icon={<CloseOutlined />} style={{ color: 'red', marginLeft: '2px' }} onClick={() => this.setState({ currentTagName: null })} />\n </Tooltip>\n {/* {(this.state.newTagName !== this.state.currentTagName) && ( */}\n <Tooltip placement=\"top\" title=\"Edit Tag\">\n <Button size=\"small\" shape=\"circle-outline\" type=\"default\" icon={<CheckOutlined />} style={{ color: 'green', marginLeft: '2px' }} onClick={() => this.handleTagSaveClick(confirm, clearFilters, 'edit')} />\n </Tooltip>\n {/* )} */}\n <Tooltip placement=\"top\" title=\"Delete Tag\">\n <Button size=\"small\" shape=\"circle-outline\" type=\"default\" icon={<DeleteOutlined />} style={{ color: 'orange', marginLeft: '2px' }} onClick={() => this.handleTagSaveClick(confirm, clearFilters, 'delete')} />\n </Tooltip>\n </>\n ) : (\n <>\n {(canTagDelete) && (\n <Tooltip placement=\"top\" title=\"Tag Actions\">\n <Button size=\"small\" shape=\"circle-outline\" type=\"default\" icon={<EditOutlined />} style={{ marginLeft: 'auto', color: '#1890ff' }} onClick={() => this.handleTagEditClick(tag)} />\n </Tooltip>\n )}\n </>\n )}\n \n \n <br />\n </div>\n )\n )}\n </div>\n\n <Divider style={{padding: '0px', margin: '5px'}} />\n \n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Button\n onClick={clearFilters}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n </Button>\n\n <Button\n type=\"primary\"\n onClick={() => { confirm() }}\n icon={<SearchOutlined />}\n size=\"small\"\n style={{ width: 90 }}\n >\n Filter\n </Button>\n </div>\n \n </div>\n ),\n onFilter: (value: any, record: any) => record.tags?.filter((tag: any) => tag.tagId === value),\n sorter: (a: any, b: any) => (!a.tags && !b.tags) ? 0 : (a.tags && b.tags) ? a.tags.length - b.tags.length : (a.tags && !b.tags) ? a.tags.length ? (!a.tags && b.tags) : b.tags.length : 0,\n dataIndex: \"tags\",\n responsive: [\"lg\"] as Breakpoint[],\n // className: (isOprRead && isOprUpdate) ? \"\" : \"hidden\",\n render: (record: any) => (\n <>\n {record?.map((tag: any, key: number) => {\n return (\n <Tag key={key} style={{ margin: '2px' }}>\n { tag.tagName.toUpperCase()}\n </Tag>\n );\n \n })}\n </>\n ),\n },\n {\n title: \"Operator ID/RFID\",\n column_name: \"Operator ID/RFID\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'operatorid/rfid' ? this.state.assetTableFilters.sortDirection : false,\n className: (isOprRead && isOprUpdate) ? \"\" : \"hidden\",\n render: (text: any, record: any) => (\n <>\n {\n (record.operatorIdValue || \"\") === \"\" ?\n <a href=\"# \" style={{ color: 'red' }} onClick={(e) => this.goToOperators(e, record.accessCardValue, record.operatorsHistoryId,false)}> {record.accessCardValue} </a>\n : <a href=\"# \" onClick={(e) => this.goToOperators(e, record.operatorIdValue, record.operatorId,true)}> {record.operatorIdValue} </a>\n }\n </>\n )\n },\n {\n title: \"Signal Alarms\",\n column_name: \"Signal Alarms\",\n responsive: [\"md\"] as Breakpoint[],\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n record.alertInfoCount > 0 &&\n <span className=\"pr-5\">\n <span className=\"pr-5\"><img src={infoIcon} alt=\"\" /></span>\n <span data-id=\"assets-data-info\">{record.alertInfoCount}</span>\n </span>\n }\n {\n record.alertWarningCount > 0 &&\n <span className=\"pr-5\">\n <span className=\"pr-5\"><img src={warningIcon} alt=\"\"/></span>\n <span data-id=\"assets-data-warning\">{record.alertWarningCount}</span>\n </span>\n }\n {\n record.alertCriticalCount > 0 &&\n <span className=\"pr-5\">\n <span className=\"pr-5\"><img src={criticalIcon} alt=\"\" /></span>\n <span data-id=\"assets-data-critical\">{record.alertCriticalCount}</span>\n </span>\n }\n </span> \n ) \n },\n {\n title: \"Asset Model\",\n column_name: \"Asset Model\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'assetmodel' ? this.state.assetTableFilters.sortDirection : false,\n dataIndex: \"model\",\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Serial Number\",\n column_name: \"Serial Number\",\n dataIndex: \"mac\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'serialnumber' ? this.state.assetTableFilters.sortDirection : false,\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Mastertag\",\n column_name: \"Mastertag\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n dataIndex: \"mastertag\",\n sortOrder: this.state.assetTableFilters.sortColumn == 'mastertag' ? this.state.assetTableFilters.sortDirection : false,\n responsive: [\"lg\"] as Breakpoint[]\n },\n \n {\n title: \"Org Name\",\n column_name: \"Org Name\",\n dataIndex: \"orgName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'orgname' ? this.state.assetTableFilters.sortDirection : false,\n responsive: [\"lg\"] as Breakpoint[],\n render: (text: any, record: any) => {\n let parents = record?.orgPathName?.includes(\"~\") ? record?.orgPathName.split('~') : [record?.orgPathName];\n if (parents.length > 1) {\n parents = parents.filter((parent: any) => {\n if (!parent.toLowerCase().includes(\"parker\")) {\n return parent\n }\n })\n }\n return (\n parents.length > 2 && record.objectAdmin ?\n <>\n <span className=\"no-word-wrap\">\n <Tooltip overlayInnerStyle={{ width: '350px' }} title={\n parents.map((parent: any, index: number) => {\n return parents.length - 1 == index ? parent : parent + \" \\\\ \" \n })\n }>\n <span>{record.orgName}</span>\n </Tooltip>\n </span> \n </>\n : <span>{record.orgName}</span>\n )\n }\n },\n {\n title: \"Template\",\n column_name: \"Template\",\n dataIndex: \"templateName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: this.state.assetTableFilters.sortColumn == 'template' ? this.state.assetTableFilters.sortDirection : false,\n responsive: [\"lg\"] as Breakpoint[],\n className: appContext.roleName === \"guest\" ? \"hidden\" : \"\",\n render: (text: any, record: any) => (\n record.status != 'inactive' ?\n <>\n {\n (!record.templateIsDeleted && templatePermissions[1]) ? record.templateVisibleToSubOrg ?\n <Badge dot offset={[5, 5]}>\n <a href={`/template/details/${encodeURIComponent(record.templateName)}/${record.templateId}`} onClick={(e) => {this.goToTemplate(e, record.templateName, record.templateId)}}> \n {record.templateName} \n </a>\n </Badge> :\n <a href={`/template/details/${encodeURIComponent(record.templateName)}/${record.templateId}`} onClick={(e) => {this.goToTemplate(e, record.templateName, record.templateId)}}> \n {record.templateName} \n </a> : <></>\n\n }\n {\n (!record.templateIsDeleted && !templatePermissions[1]) ? record.templateVisibleToSubOrg ?\n <Badge dot offset={[5, 5]}>\n <span>{record.templateName}</span> \n </Badge>\n : <span>{record.templateName}</span> \n : <></>\n }\n {\n record.templateIsDeleted &&\n <>\n <Tooltip title=\"Template is deleted\">\n <span className=\"asset-status-red pr-5\" ><CloudServerOutlined /></span>\n </Tooltip>\n <span>{record.templateName}</span>\n </>\n }\n </>\n : <span>{record.templateName}</span>\n ) \n },\n /*\n {\n title: \"Users Subscribed\",\n dataIndex: \"userSubscriptionCount\",\n align: \"center\" as \"center\",\n render: (text: number, record: any) => (\n <div className=\"notifications-tag\">\n {\n text > 0 && \n <Tag color=\"geekblue\">{text}</Tag>\n }\n </div>\n ),\n responsive: [\"lg\"] as Breakpoint[]\n },\n */\n \n {\n title: \"Contract Start Date\",\n column_name: \"Contract Start Date\",\n dataIndex: \"contractStartDate\",\n // sortDirections: ['ascend', 'descend', 'ascend'],\n // sorter: true,\n // sortOrder: this.state.assetTableFilters.sortColumn == 'contractStartDate' ? this.state.assetTableFilters.sortDirection : false,\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n //Hide contract date for no plan part number\n (record.contractStartDate != record.contractEndDate) &&\n (moment(record.contractEndDate, \"L\").diff(moment(), 'days') <= 30 ?\n <>\n <span style={{ color: 'red' }}><b>{record.contractStartDate}</b></span>\n </>\n :\n <span >{record.contractStartDate}</span>\n )\n }\n </span> \n ),\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Contract End Date\",\n column_name: \"Contract End Date\",\n dataIndex: \"contractEndDate\",\n // sortDirections: ['ascend', 'descend', 'ascend'],\n // sorter: true,\n // sortOrder: this.state.assetTableFilters.sortColumn == 'contractEndDate' ? this.state.assetTableFilters.sortDirection : false,\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n //Hide contract date for no plan part number\n (record.contractStartDate != record.contractEndDate) &&\n (moment(record.contractEndDate, \"L\").diff(moment(), 'days') <= 30 ?\n <>\n <span style={{ color: 'red' }}><b>{record.contractEndDate}</b></span>\n </>\n :\n <span >{record.contractEndDate}</span>\n )\n }\n </span> \n ),\n responsive: [\"lg\"] as Breakpoint[]\n },\n {\n title: \"Actions\",\n column_name: \"Actions\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n ((access==null || (access && access.length===0))\n && (!record.blockedassetOrgId ? true : (contextUser.homeOrg.orgId !== record.blockedassetOrgId ? true:false)))?\n (record.status != 'replaced' ?\n (\n <Space>\n \n {\n // Roles and permissions\n // (\n // record.objectAdmin ||\n // (\n // !record.objectAdmin && \n // record.status !== \"whitelisted\"\n // )\n // ) && \n\n (isupdate || isBarko) &&\n <Tooltip title=\"Edit Asset\">\n <Button data-id=\"assets-edit-asset-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.assetMaintOpen(e, record)}}/>\n </Tooltip>\n }\n {\n contextUser.contextUserIsAdmin &&\n record.blockedassetOrgId && contextUser.homeOrg.orgTree.length < 3 &&\n <Popconfirm\n title={\"Do you really want to unblock the asset?\"}\n onConfirm={(e) => {this.blockAsset(e, record)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Unblock Asset\">\n <Button shape=\"circle\" icon={<LockOutlined />} />\n </Tooltip>\n </Popconfirm>\n }\n {\n contextUser.contextUserIsAdmin && \n !record.blockedassetOrgId && contextUser.homeOrg.orgTree.length < 3 &&\n <Popconfirm\n title={\"Do you really want to block the asset?\"}\n onConfirm={(e) => {this.blockAsset(e, record)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Block Asset\">\n <Button shape=\"circle\" icon={<UnlockOutlined />} />\n </Tooltip>\n </Popconfirm>\n } \n {\n (contextUser.contextUserIsSuperUser) &&\n record.status === \"active\" &&\n this.confirmInactivation(record, true)\n }\n \n {/*\n (contextUser.contextUserIsSuperUser) &&\n (record.status === \"inactive\" || record.status === \"whitelisted\") &&\n this.confirmActivation(record)\n */}\n </Space>)\n :\n <Tooltip title={`Asset replaced with ${record.activeMastertag}`}>\n\n <Space>\n \n {\n // Roles and permissions\n // (\n // record.objectAdmin ||\n // (\n // !record.objectAdmin && \n // record.status !== \"whitelisted\"\n // )\n // ) && \n\n (isupdate || isBarko) &&\n <Tooltip title=\"Edit Asset\">\n <Button style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}}\n data-id=\"assets-edit-asset-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.assetMaintOpen(e, record)}}/>\n </Tooltip>\n } \n {/*\n (contextUser.contextUserIsSuperUser) &&\n (record.status === \"inactive\" || record.status === \"whitelisted\") &&\n this.confirmActivation(record)\n */}\n </Space>\n </Tooltip>)\n :\n <Tooltip placement=\"leftTop\" title = { assetRestricted } >\n <Space>\n {\n // Roles and permissions\n // (\n // record.objectAdmin ||\n // (\n // !record.objectAdmin && \n // record.status !== \"whitelisted\"\n // )\n // ) && \n\n (isupdate || isBarko) &&\n <Tooltip title=\"Edit Asset Denied\">\n <Button style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}}\n data-id=\"assets-edit-asset-button\" type=\"default\" icon={<EditOutlined />}/>\n </Tooltip>\n }\n {\n contextUser.contextUserIsAdmin &&\n record.blockedassetOrgId && contextUser.homeOrg.orgTree.length < 3 &&\n <Popconfirm\n title={\"Do you really want to unblock the asset?\"}\n onConfirm={(e) => {this.blockAsset(e, record)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Unblock Asset\">\n <Button style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}} shape=\"circle\" icon={<LockOutlined />} />\n </Tooltip>\n </Popconfirm>\n }\n {\n contextUser.contextUserIsAdmin && \n !record.blockedassetOrgId && contextUser.homeOrg.orgTree.length < 3 &&\n <Popconfirm\n title={\"Do you really want to block the asset?\"}\n onConfirm={(e) => {this.blockAsset(e, record)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Block Asset\">\n <Button style={{pointerEvents: 'none', cursor: 'default', opacity: '0.5', color:'#808080'}} shape=\"circle\" icon={<UnlockOutlined />} />\n </Tooltip>\n </Popconfirm>\n } \n {\n (contextUser.contextUserIsSuperUser) &&\n record.status === \"active\" &&\n this.confirmInactivation(record, false)\n }\n \n {/*\n (contextUser.contextUserIsSuperUser) &&\n (record.status === \"inactive\" || record.status === \"whitelisted\") &&\n this.confirmActivation(record)\n */} \n </Space>\n </Tooltip>\n )\n }\n ];\n\n\n /* remove unselected columns by user */\n if(!canTagRead) tableColumns.splice(tableColumns.map((item) => item.title).indexOf('Tags'), 1);\n\n let allColumns = tableColumns.map(a => {return {...a}})\n \n const handleMenuClick = async(columnName: string) => {\n\n await this.setState((prevState) => ({\n ...prevState,\n tableColumnsHidden: this.state.tableColumnsHidden.indexOf(columnName) === -1 ? [...prevState.tableColumnsHidden, columnName] : [ ...prevState.tableColumnsHidden.filter(ex => ex !== columnName) ]\n }));\n\n }\n \n const handleVisibleChange = (visibility: boolean) => {\n this.setState({ columnSelectionVisible: visibility });\n }\n\n const onSearchColumnSelection = async(e: any) => {\n await this.setState({ columnSelectionFilter: e.target.value });\n }\n\n const menu = (\n <Menu>\n <div>\n <Input placeholder=\"Filter Columns\" allowClear onChange={onSearchColumnSelection} />\n </div>\n {\n // eslint-disable-next-line array-callback-return\n tableColumns.map((column:any) => {\n if(column.column_name !== 'Actions' && column.column_name.toLowerCase().includes(this.state.columnSelectionFilter.toLowerCase())){\n return ( \n <Menu.Item key={column.column_name}> \n <Checkbox \n onClick={() => handleMenuClick(column.column_name)}\n defaultChecked={!this.state.tableColumnsHidden.includes(column.column_name)}\n >\n {column.column_name}\n </Checkbox> \n </Menu.Item>\n )\n }\n })\n }\n </Menu>\n );\n\n\n tableColumns = allColumns.filter((column:any) => !this.state.tableColumnsHidden.includes(column.column_name))\n\n return (\n \n <div data-id=\"assets-container\" className=\"layout-content\">\n \n {\n this.state.mode === \"details\" &&\n <div data-id=\"assets-breadcrumbs-container\">\n <Breadcrumb data-id=\"assets-breadcrumbs\" separator=\"/\">\n <Breadcrumb.Item data-id=\"assets-breadcrumb-0\" key=\"assets-breadcrumb-0\" href=\"# \" onClick={(e) => {this.cancelDetailsMode(e)}}>All Assets</Breadcrumb.Item>\n <Breadcrumb.Item data-id=\"assets-breadcrumb-1\" key=\"assets-breadcrumb-1\">\n <Tooltip title=\"Exit Asset Details View\"> \n <>\n <a href=\"# \" className=\"pr-5\" onClick={(e) => {this.cancelDetailsMode(e)}}><CloseCircleOutlined /></a>\n Asset {this.state.mastertag} Details\n </>\n </Tooltip>\n </Breadcrumb.Item>\n </Breadcrumb>\n </div>\n }\n\n <Row gutter={8}>\n <Col xs={24} lg={this.state.mode === \"default\" ? 10 : 24}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip>\n {\n this.state.mode === \"default\" &&\n <span>Assets</span>\n }\n {\n this.state.mode !== \"default\" &&\n <span>Asset {this.state.mastertag} Details</span>\n }\n </div>\n </div>\n </Col> \n </Row>\n {\n this.state.mode === \"default\" && isread &&\n <Row gutter={8}>\n <Col xs={24} lg={12} className=\"mt-10\">\n <span className=\"asset-status-green pr-5\" ></span>\n <Radio.Group value={this.state.assetTableFilters.status} buttonStyle=\"solid\" onChange={this.onStatusChange}>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"Active assets list\" arrowPointAtCenter>\n <div style={{ display: 'inline-block', margin: '0 0 0 0', padding: '0 0 0 0', borderRadius: '0', border: '0'}}>\n <Radio.Button value=\"active\">\n <CheckCircleOutlined className=\"pr-5\" />Active\n </Radio.Button>\n </div>\n </Tooltip>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title={\n <div>\n <span>Assets with expired contract having:</span><br />\n <span>1. Deactivated SIM</span><br />\n <span>2. Disabled on system</span><hr />\n <span><b>Note:</b> Contact your system admin for reactivation of assets</span>\n </div>\n } arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"inactive\">\n <CloseCircleOutlined className=\"pr-5\" />Inactive\n </Radio.Button>\n </div>\n </Tooltip>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"Assets not yet deployed. Assets with no assigned template\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"whitelisted\">\n <ClockCircleOutlined className=\"pr-5\" />Whitelisted\n </Radio.Button>\n </div>\n </Tooltip>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"Show all assets regardless of type\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"active,inactive,whitelisted,replaced\"\n >All</Radio.Button>\n </div>\n </Tooltip>\n \n {/* <Tooltip mouseEnterDelay={0.5} arrowPointAtCenter title={`Assets with lite capabilities only`} placement=\"bottom\">\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"LiteAssets\">Lite</Radio.Button>\n </div>\n </Tooltip> */}\n\n </Radio.Group>\n </Col>\n <Col xs={24} lg={12} className=\"content-header-controls mt-10\">\n <Space>\n { this.state.isAssetTableFiltersSet &&\n <Tooltip title={<><span>- Reset all filters</span><br /><span>- Restore table to original state</span></>}>\n <Button\n style={{ backgroundColor: '#eba134', color: 'white' }}\n icon={<Icon component={filterRemove} style={{fontSize: 22 }} />}\n onClick={() => this.resetAssetTableFilters()}\n />\n </Tooltip>\n }\n\n {\n (isread) && !this.state.showLiteAssets && \n <Tooltip mouseEnterDelay={0.5} title=\"Search by asset name, mastertag, template name, serial, organization, asset model, tag\">\n <Search\n data-id=\"assets-search-field\" \n placeholder=\"Search by asset name, mastertag, template name, serial, organization, asset model, tag\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.state.assetTableFilters.searchText}\n />\n </Tooltip>\n } \n {\n this.state.showLiteAssets && \n <Tooltip mouseEnterDelay={0.5} title=\"Search by asset name, mastertag, template name, serial, organization, asset model, tag\">\n <Search\n data-id=\"assets-search-field\" \n placeholder=\"Search by asset name, mastertag, partnumber, planquota, organization, template\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onLiteAssetSearch}\n onChange={this.onLiteAssetSearchChange}\n className=\"search-field\"\n value={this.props.assetsList.liteAssets.searchText}\n />\n </Tooltip>\n }\n {\n (contextUser.contextUserIsAdmin || iscreate) && !this.state.showLiteAssets && \n <div className=\"add-user-button\">\n <Button data-id=\"assets-search-new-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => this.assetMaintOpen(e, {})}>\n <span>Asset</span>\n </Button>\n </div>\n }\n {\n\n !this.state.showLiteAssets && \n <div className=\"add-user-button\">\n <Dropdown \n overlay={menu}\n onVisibleChange={handleVisibleChange}\n visible={this.state.columnSelectionVisible}\n >\n <Button data-id=\"assets-search-new-button\" type=\"primary\">\n <span>Columns</span>\n <PlusOutlined />\n </Button>\n </Dropdown>\n </div>\n }\n </Space>\n </Col>\n </Row>\n }\n {\n (isread) && !this.state.showLiteAssets &&\n <Table \n data-id=\"assets-data\" \n className=\"mt-15\"\n //style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record) => record.gatewayId}\n columns={tableColumns}\n dataSource={tableData}\n onChange={this.sortAssetsTable}\n showSorterTooltip={false}\n />\n }\n { \n this.state.showLiteAssets &&\n <LiteAssets/>\n }\n <AssetMaint iscreate={iscreate} isupdate={isupdate} isread={isread}/>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => { \n return { \n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n assetsList: state.assetsReducer.assetsState.assetsList, \n permissionsset: state.permissionsReducer,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n )(Assets);\n \n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\n\nexport function getGatewaysControllers(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n searchText?: string,\n filters?: any[any],\n controllerId?:string\n) {\n \n return async (dispatch: any) => {\n\n let filtersObj:any = [];\n filters && filters['status'] != null ? filtersObj = {'statusFilter': filters['status']} : filtersObj = {}\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/gateways_controllers\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({ type: \"CONTROLLERS_GET_SUCCESS\", payload: response.data.data.gateways_controllers });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n dispatch({ type: \"CONTROLLERS_GET_FAILED\", payload: {data: null, page: page} });\n errorResponse(me, error);\n });\n };\n}\n\n\nexport function initiateControllerOTA(\n controllerInfo: any,\n applicationInfo: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\n return async (dispatch: any) => {\n\n let iqanOpenOtaRequestForm = {\n orgId: applicationInfo.orgId,\n gatewayId: controllerInfo.gatewayId,\n controllerId: controllerInfo.controllerId,\n applicationId: applicationInfo.applicationId,\n controllerAddress: controllerInfo.address,\n pathName: applicationInfo.storageLocation.slice(37),\n // serialNumber: controllerInfo.serialNumber,\n }\n\n Axios.post(\n appConfigs.server.URL + \"/ui/api/ota_controller/\" + controllerInfo.mastertag,\n iqanOpenOtaRequestForm,\n {\n responseType: \"json\", \n headers: {},\n }\n )\n .then(response => { \n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(\"OTA Successfully Initiated\");\n }\n // dispatch({ type: \"INITIATE_CONTROLLER_OTA_SUCCESS\", payload: response.data.data.installation_id });\n }\n )\n .catch(function (error) {\n \n if (callbackFnFailure != null) {\n callbackFnFailure(error)\n }\n // dispatch({ type: \"INITIATE_CONTROLLER_OTA_FAILED\", payload: null });\n });\n };\n}\n\n\n\n\nexport function updateOTAStatusFromDeviceTwin(\n installationDetails: any,\n controllerDetails: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n\n return async (dispatch: any) => {\n\n Axios.post(\n appConfigs.server.URL + \"/ui/api/update_ota_status/\",\n installationDetails,\n {\n responseType: \"json\", \n headers: {},\n params: {\n mastertag: controllerDetails.mastertag,\n controllerAddress: controllerDetails.address,\n }\n }\n )\n .then(response => { \n\n console.log(response.data)\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(\"OTA Successfully Initiated\");\n }\n }\n )\n .catch(function (error) {\n \n console.log(\"error\");\n console.log(error);\n \n if (callbackFnFailure != null) {\n callbackFnFailure(error)\n }\n });\n };\n}\n\n\n\n// export function getApplications(\n// me: any, \n// callbackFnSuccess?: any,\n// callbackFnFailure?: any,\n// page: number = 1,\n// searchText?: string,\n// filters?: any[any],\n// applicationId?:string\n// ) {\n \n// return async (dispatch: any) => {\n\n// let filtersObj:any = [];\n// filters && filters['status'] != null ? filtersObj = {'statusFilter': filters['status']} : filtersObj = {}\n\n// Axios.get(\n// appConfigs.server.URL + \"/ui/api/applications\", {\n// responseType: \"json\", \n// headers: {},\n// params: {\n// searchText: searchText,\n// page: page,\n// pageSize: appConfigs.tables.pageSize,\n// applicationId: (applicationId||\"\"),\n// filters: (filters['status'] ? \"\" : encodeURIComponent(JSON.stringify(filtersObj)) )\n// }\n// }\n// )\n// .then(response => { \n// if (callbackFnSuccess != null) {\n// callbackFnSuccess(response.data.data.applications);\n// }\n// dispatch({ type: \"APPLICATIONS_GET_SUCCESS\", payload: {data: response.data.data.applications, page: page} });\n// }\n// )\n// .catch(function (error) {\n// console.log('error', error)\n// if (callbackFnFailure != null) {\n// callbackFnFailure(me, error)\n// }\n// errorResponse(me, error);\n// });\n// };\n// }\n\n\nexport function getApplications(\n controllerId: string,\n callbackFnFailure: Function,\n callbackFnSuccess?: Function,\n) {\n \n return async (dispatch: any) => {\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/applications\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: \"\",\n page: 1,\n pageSize: 99999,\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({ type: \"APPLICATIONS_LIST_GET_SUCCESS\", applications: response.data.data.applications });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n callbackFnFailure(error)\n dispatch({ type: \"APPLICATIONS_LIST_GET_SUCCESS\", applications: null });\n });\n };\n}\n\n\nexport function getApplicationVersions(\n applicationId:string,\n callbackFnFailure: Function,\n callbackFnSuccess?: Function\n) {\n \n return async (dispatch: any) => {\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/get_application_versions\", {\n responseType: \"json\", \n headers: {},\n params: {\n applicationId: applicationId,\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({ type: \"APP_VERSIONS_GET_SUCCESS\", versions: response.data.data.versions });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n callbackFnFailure(error)\n });\n };\n}\n\n\nexport function getInstallationsHistory(\n controllerId:string,\n gatewaysId:string,\n callbackFnFailure: Function,\n callbackFnSuccess?: Function\n) {\n \n return async (dispatch: any) => {\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/controller_installations\", {\n responseType: \"json\", \n headers: {},\n params: {\n gatewayId: gatewaysId,\n controllerId: controllerId,\n }\n }\n )\n .then(response => { \n console.log(response);\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(\"Installation History Loaded Successfully\");\n }\n dispatch({ type: \"GET_CONTROLLER_INSTALLATIONS_SUCCESS\", installationHistory: response.data.data.controller_installations });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n callbackFnFailure(error)\n });\n };\n}\n\nexport function controllersSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CONTROLLER_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function updateControllerSelection(\n selectedController: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"UPDATE_CONTROLLER_SELECTION\", selectedController: selectedController });\n }\n} \n\nexport function controllerSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CONTROLLERS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n}\n\nexport function openDrawer(title: string, width: number, record: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"OPEN_DRAWER\", payload: { title: title, width: width, record: record } });\n\t};\n}\n\nexport function openInstallationProgressDrawer(title: string, width: number, record: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"OPEN_INSTALL_PROGRESS_DRAWER\", payload: { title: title, width: width, record: record } });\n\t};\n}\n\nexport function closeDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"CLOSE_DRAWER\" });\n\t};\n}\n\n\nexport function closeInstallationProgressDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"CLOSE_INSTALL_PROGRESS_DRAWER\" });\n\t};\n}\n\nexport function drawerTabChange(activeTab: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"DRAWER_TAB_CHANGE\", activeTab: activeTab });\n\t};\n}\n\n\n\nexport function getAllControllersList() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/controllers\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\tpage: 1,\n\t\t\t\tpageSize: 9999,\n\t\t\t},\n\t\t}).then((response) => {\n let controllers = response.data.data.controllers;\n\t\t\tdispatch({ type: \"SET_CONTROLLERS_LIST\", payload: { assetsList: controllers } });\n\t\t}).catch(function (error) {\n dispatch({ type: \"SET_LOADING_CONTROLLERS\", payload: { state: false } });\n errorResponse(null, error);\n });\n\t};\n}\n\n\n\nexport function modifyController(\n selectedControllersToModify: any,\n callbackFnSuccess?: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ADD_CONTROLLER\", payload: { state: true } });\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/modify_controllers\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n params: {\n controllers: encodeURIComponent(JSON.stringify(selectedControllersToModify))\n\t\t\t},\n\t\t}).then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data);\n }\n\t\t\tdispatch({ type: \"ADD_CONTROLLER_SUCCESSFULLY\" });\n\t\t}).catch(function (error) {\n dispatch({ type: \"ADD_CONTROLLER\", payload: { state: false } });\n console.log('error', error)\n errorResponse(null, error);\n });\n\t};\n}","import { Button, Card, Col, Divider, Drawer, Form, Input, message, Row, Select, Space, Tabs } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { formInit } from \"../../utils/apiHelpers/formHelpers\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport * as actions from \"./actions\";\n\nconst { TabPane } = Tabs;\nconst { Option } = Select;\nconst { TextArea } = Input;\n\ninterface Prop {\n context: any,\n controllers: any,\n controllerMaintOptions: any,\n selectedController: any,\n closeDrawer: Function,\n drawerTabChange: Function,\n getApplications: Function,\n getApplicationVersions: Function,\n initiateControllerOTA: Function,\n}\n\nconst AppMaintInstallation: React.FC<Prop> = (props) => {\n\n const formRef = React.createRef<FormInstance>();\n \n const [selectedApp, setSelectedApp] = useState<any>({})\n\n const { applications } = props.controllers; \n \n const onDrawerClose = () => {\n props.closeDrawer();\n };\n\n const onTabChange = (key: string) => {\n props.drawerTabChange(key);\n }\n\n useEffect(() => {\n props.getApplications(props.controllerMaintOptions.controllerId, callbackFnFailure)\n }, [])\n\n\n const onFinish = (values: any) => {\n\n console.log(\"onFinish\")\n console.log(props.selectedController)\n console.log(formRef.current?.getFieldsValue())\n props.initiateControllerOTA(props.selectedController, formRef.current?.getFieldsValue(), callbackFnSuccess, callbackFnFailure);\n\n props.closeDrawer();\n\n }\n\n const getVersions = (value: any) => {\n let selectedApp = applications.filter((app: any) => app.id == value)[0]\n\n formRef.current!.setFieldsValue({\n applicationType: selectedApp.type.charAt(0).toUpperCase() + selectedApp.type.slice(1),\n requiresApproval: selectedApp.requiresApproval.charAt(0).toUpperCase() + selectedApp.requiresApproval.slice(1),\n currentVersion: selectedApp.version,\n gatewayId: props.selectedController.gatewayId,\n controllerId: props.selectedController.controllerId,\n orgId: selectedApp.orgId,\n storageLocation: selectedApp.storageLocation,\n });\n // props.getApplicationVersions(value, callbackFnFailure)\n }\n\n const callbackFnFailure = (error: any) => {\n message.error(\"Failed to initiate OTA\")\n }\n\n const callbackFnSuccess = (messageDetails: any) => {\n message.success(\"OTA Initiated Successfully\")\n }\n\n return (\n <Drawer\n title={props.controllerMaintOptions.title}\n width={props.controllerMaintOptions.width}\n onClose={onDrawerClose}\n visible={props.controllerMaintOptions.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button type=\"default\" onClick={onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n\n <Button data-id=\"controllers-maint-submit-button\" type=\"primary\" form=\"appMaintInstallationForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n \n </Space>\n }\n >\n {\n <Tabs activeKey={props.controllerMaintOptions.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}> \n <TabPane tab={props.controllerMaintOptions.tabs[0].title} key=\"1\" disabled={props.controllerMaintOptions.tabs[0].disabled}>\n <Form\n id=\"appMaintInstallationForm\"\n ref={formRef}\n layout=\"vertical\"\n onFinish={onFinish}\n > \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item name=\"controllerId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item name=\"gatewayId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item name=\"orgId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item name=\"storageLocation\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n </Col> \n </Row> \n \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Select Application\"\n name=\"applicationId\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Select\n placeholder=\"Select Application to Install\"\n onChange={getVersions}\n >\n {applications !== null && applications.map((application:any, index:number) => (\n <Option key={application.id} value={application.id} >\n Type: { application?.type?.charAt(0).toUpperCase() + application?.type?.slice(1) } - Name: {application?.name} - Version: {application?.version}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> \n </Row> \n \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Application Type\"\n name=\"applicationType\"\n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={true} />\n </Form.Item>\n </Col> \n \n\n {/* <Col span={12}>\n <Form.Item\n label=\"Application Version\"\n name=\"appVersion\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n placeholder=\"Select Application Version\"\n >\n {appVersions !== null && appVersions.map((version:any, index:number) => (\n <Option key={version.versionId} value={version.versionId} >\n {version.versionNumber}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col> */}\n\n </Row> \n\n\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n label=\"Requires Operator Approval\"\n name=\"requiresApproval\"\n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={true} />\n </Form.Item>\n </Col> \n \n\n <Col span={12}>\n <Form.Item\n label=\"Current Installed Version\"\n name=\"currentVersion\" \n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={true} />\n </Form.Item>\n </Col>\n\n </Row> \n \n\n </Form>\n </TabPane> \n </Tabs> \n } \n </Drawer>\n );\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n controllers: state.userControllersReducers.userControllersState.controllers,\n controllerMaintOptions: state.userControllersReducers.userControllersState.controllers.controllerMaintOptions,\n selectedController: state.userControllersReducers.userControllersState.controllers.selectedController\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AppMaintInstallation);","import { SyncOutlined } from \"@ant-design/icons\";\nimport { Button, Card, Col, Divider, Drawer, Form, Input, message, Row, Select, Space, Table, Tabs, Tag, Tooltip, Typography } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { formInit } from \"../../utils/apiHelpers/formHelpers\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport * as actions from \"./actions\";\nimport './usercontrollers.css'\n\nconst { TabPane } = Tabs;\nconst { Option } = Select;\nconst { TextArea } = Input;\n\ninterface Prop {\n context: any,\n controllers: any,\n controllerMaintOptions: any,\n closeInstallationProgressDrawer: Function,\n updateOTAStatusFromDeviceTwin: Function,\n drawerTabChange: Function,\n getInstallationsHistory: Function,\n}\n\nconst AppMaintInstallation: React.FC<Prop> = (props) => {\n\n const { tableConfig, installationHistory } = props.controllerMaintOptions;\n\n const onDrawerClose = () => {\n props.closeInstallationProgressDrawer();\n };\n\n const onTabChange = (key: string) => {\n props.drawerTabChange(key);\n }\n\n useEffect(() => {\n\n if (props.controllerMaintOptions.record != null) {\n \n props.getInstallationsHistory(props.controllerMaintOptions.record.controllerId, props.controllerMaintOptions.record.gatewayId, callbackFnFailure, callbackFnSuccess)\n }\n\n }, [props.controllerMaintOptions.record])\n\n const callbackFnFailure = (error: any) => {\n message.error(\"Failed to load data \")\n }\n\n const callbackFnSuccess = (messageInfo: string) => {\n // message.success(messageInfo)\n }\n\n\n const columns = [\n {\n title: \"Process\",\n dataIndex: \"process\",\n key: \"process\",\n render: (text: any, record: any) => ( \n <span>{record.process}</span>\n )\n },\n {\n title: \"By\",\n dataIndex: \"doneBy\",\n key: \"doneBy\",\n render: (text: any, record: any) => ( \n <span>{record.doneBy}</span>\n )\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n key: \"status\",\n render: (text: any, record: any) => ( \n <span>{record.status}</span>\n )\n },\n {\n title: \"Timestamp\",\n dataIndex: \"timestamp\",\n key: \"timestamp\",\n render: (text: any, record: any) => ( \n <span>{record.timestamp}</span>\n )\n },\n {\n title: \"Notes\",\n dataIndex: \"notes\",\n key: \"notes\",\n render: (text: any, record: any) => ( \n <span>{record.notes}</span>\n )\n }\n ];\n\n const getDeviceTwinUpdates = (installationDetails: any) => {\n console.log(installationDetails);\n props.updateOTAStatusFromDeviceTwin(installationDetails, props.controllerMaintOptions.record, onOtaStatusUpdatedSuccess )\n }\n\n const onOtaStatusUpdatedSuccess = (message: any) => {\n // message.success(message)\n props.getInstallationsHistory(props.controllerMaintOptions.record.controllerId, props.controllerMaintOptions.record.gatewayId, callbackFnFailure, callbackFnSuccess)\n }\n \n console.log(\"props.controllerMaintOptions\")\n console.log(props.controllerMaintOptions)\n\n return (\n <Drawer\n title={props.controllerMaintOptions.title}\n width={props.controllerMaintOptions.width}\n onClose={onDrawerClose}\n visible={props.controllerMaintOptions.info_visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button type=\"default\" onClick={onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n </Space>\n }\n >\n {\n <Tabs activeKey={props.controllerMaintOptions.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}> \n <TabPane tab={props.controllerMaintOptions.tabs[0].title} key=\"1\" disabled={props.controllerMaintOptions.tabs[0].disabled}>\n <Row style={{ padding: \"5px\" }} gutter={4}>\n { props.controllerMaintOptions.installationHistory?.map((installation:any) => \n <>\n <Row style={{padding: \"8px\", border: \"1px dashed #a8a8a8\"}} gutter={4}>\n <Col span={20}>\n <span style={{fontSize: \"16px\"}}><b>Application Name: </b> {installation.applicationName}</span>\n </Col>\n <Col span={4}>\n <Tooltip title=\"Fetch details from Device Twin\">\n <Button style={{ float: \"right\" }} icon={<SyncOutlined />} type=\"ghost\" onClick={() => getDeviceTwinUpdates(installation)} />\n </Tooltip>\n </Col>\n <Col span={12}>\n <span><b>Submitted By: </b>{ installation.createdBy }</span>\n </Col>\n <Col span={12}>\n <span><b>Version: </b>{ installation.applicationVersion }</span>\n </Col>\n <Col span={12}>\n <span><b>Submitted At: </b>{ installation?.createdAt != null ? moment(installation?.createdAt?.slice(0, -10), 'YYYY-MM-DD HH:mm:ss').format(\"MM/DD/YYYY hh:mm:ss A\") : \"N/A\" }</span>\n </Col>\n <Col span={12}>\n <span><b>Type: </b>{ installation.applicationType.charAt(0).toUpperCase() + installation.applicationType.slice(1) }</span>\n </Col>\n\n\n <table className=\"installation_progress\" style={{ marginTop: \"10px\", width: '100%'}}>\n <thead>\n <th>Process</th>\n <th>By</th>\n <th>Status</th>\n <th>Timestamp</th>\n <th>Notes</th>\n </thead>\n <tbody>\n <tr>\n {/* <Tooltip title=\"This is when the user sent the request to start the installation process\"> */}\n <td>OTA Scheduled:</td>\n {/* </Tooltip> */}\n <td>{ installation.createdBy }</td>\n <td>\n {\n installation.createdStatus.toLowerCase() == 'success' ? <Tag style={{ marginTop: \"2px\" }} color=\"#87d068\">Success</Tag> : \n installation.createdStatus.toLowerCase() == 'pending' ? <Tag style={{ marginTop: \"2px\" }} color=\"#ffc100\">Pending</Tag> : \n installation.createdStatus.toLowerCase() == 'failed' ? <Tag style={{ marginTop: \"2px\" }} color=\"#f71010\">Failed</Tag> :\n <Tag style={{ marginTop: \"2px\" }} color=\"#CBCBCB\">Unknown</Tag>\n \n }\n </td>\n <td>\n {\n installation?.createdAt != null ? moment(installation?.createdAt?.slice(0, -10), 'YYYY-MM-DD HH:mm:ss').format(\"MM/DD/YYYY hh:mm:ss A\") : \"N/A\"\n }\n </td>\n \n <Tooltip /* className={`${installation.createdNotes != null ? '' : 'none'}`} */ title={\n installation?.createdNotes?.split(\"\\n\").map(function (noteLine: any) {\n return (<span>{noteLine}</span>);\n })\n }>\n <td className={`${installation.createdNotes != null ? 'process' : ''}`} >\n {`${installation.createdNotes != null ? 'Notes' : ''}`}\n </td>\n </Tooltip>\n </tr>\n <tr>\n {/* <Tooltip title=\"This indicates when the installation file is downloaded by the gateways and is ready for installation to the device but awaiting approval\"> */}\n <td>OTA file transferred to gateway:</td>\n {/* </Tooltip> */}\n <td>System</td>\n <td>\n {\n installation.downloadedStatus.toLowerCase() == 'success' ? <Tag style={{ marginTop: \"2px\" }} color=\"#87d068\">Success</Tag> : \n installation.downloadedStatus.toLowerCase() == 'pending' ? <Tag style={{ marginTop: \"2px\" }} color=\"#ffc100\">Pending</Tag> : \n installation.downloadedStatus.toLowerCase() == 'failed' ? <Tag style={{ marginTop: \"2px\" }} color=\"#f71010\">Failed</Tag> :\n <Tag style={{ marginTop: \"2px\" }} color=\"#CBCBCB\">Unknown</Tag>\n }\n </td>\n <td>\n {\n installation?.downloadedAt != null ? moment(installation?.downloadedAt?.slice(0, -10), 'YYYY-MM-DD HH:mm:ss').format(\"MM/DD/YYYY hh:mm:ss A\") : \"N/A\"\n }\n </td>\n <Tooltip /* className={`${installation.createdNotes != null ? '' : 'none'}`} */ title={\n installation?.downloadedNotes?.split(\"\\n\").map(function (noteLine: any) {\n return (<span>{noteLine}</span>);\n })\n }>\n <td className={`${installation.downloadedNotes != null ? 'process' : ''}`} >\n {`${installation.downloadedNotes != null ? 'Notes' : ''}`}\n </td>\n </Tooltip>\n </tr>\n {/* <tr>\n <Tooltip title=\"This indicates the status of approval SMS delivery by the system\">\n <td className=\"process\">Approval SMS Delivery:</td>\n </Tooltip>\n <td>System</td>\n <td><Tag style={{marginTop: \"2px\"}} color=\"#87d068\">Delivered</Tag> <Tag style={{marginTop: \"2px\"}} color=\"#ffc100\">Pending</Tag><Tag style={{marginTop: \"2px\"}} color=\"#f71010\">Failed</Tag></td>\n <td>06/29/2022, 10:39:24 AM</td>\n <td>N/A</td>\n </tr>\n <tr>\n <Tooltip title=\"This indicates the status of SMS approval by the operator\">\n <td className=\"process\">SMS Approval:</td>\n </Tooltip>\n <td>User Operator</td>\n <td><Tag style={{marginTop: \"2px\"}} color=\"#87d068\">Approved</Tag> <Tag style={{marginTop: \"2px\"}} color=\"#ffc100\">Pending</Tag> <Tag style={{marginTop: \"2px\"}} color=\"#f71010\">Not Approved</Tag></td>\n <td>06/29/2022, 11:39:24 AM</td>\n <td>N/A</td>\n </tr> */}\n <tr>\n {/* <Tooltip title=\"This indicates the status of file installation after operator approval\"> */}\n <td>OTA Installed on controller:</td>\n {/* </Tooltip> */}\n <td>System</td>\n <td>\n {\n installation.installedStatus.toLowerCase() == 'success' ? <Tag style={{ marginTop: \"2px\" }} color=\"#87d068\">Success</Tag> : \n installation.installedStatus.toLowerCase() == 'pending' ? <Tag style={{ marginTop: \"2px\" }} color=\"#ffc100\">Pending</Tag> : \n installation.installedStatus.toLowerCase() == 'failed' ? <Tag style={{ marginTop: \"2px\" }} color=\"#f71010\">Failed</Tag> :\n <Tag style={{ marginTop: \"2px\" }} color=\"#CBCBCB\">Unknown</Tag>\n \n }\n </td>\n <td>\n {\n installation?.installedAt != null ? moment(installation?.installedAt?.slice(0, -10), 'YYYY-MM-DD HH:mm:ss').format(\"MM/DD/YYYY hh:mm:ss A\") : \"N/A\"\n }\n </td>\n <Tooltip /* className={`${installation.createdNotes != null ? '' : 'none'}`} */ title={\n installation?.installedNotes?.split(\"\\n\").map(function (noteLine: any) {\n return (<span>{noteLine}</span>);\n })\n }>\n <td className={`${installation.installedNotes != null ? 'process' : ''}`} >\n {`${installation.installedNotes != '100' ? installation.installedNotes != null ? installation.installedNotes + '%' : \"\" : '100% Completed'}`}\n </td>\n </Tooltip>\n </tr>\n </tbody>\n </table>\n \n </Row>\n\n <Col span={24}>\n <Divider></Divider>\n </Col>\n \n </>\n )}\n \n </Row>\n\n </TabPane> \n </Tabs> \n } \n </Drawer>\n );\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n controllers: state.userControllersReducers.userControllersState.controllers,\n controllerMaintOptions: state.userControllersReducers.userControllersState.controllers.controllerMaintOptions\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AppMaintInstallation);","import React, { useContext, useState, useEffect, useRef } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Button, Space, Table, Input, Popconfirm, Form, Select, message, DatePicker, Card, Popover, Tag } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport \"./usercontrollers.css\";\nimport history from '../../utils/history';\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { InfoOutlined, PlusOutlined } from \"@ant-design/icons\";\nimport moment from 'moment';\nimport AppMaintInstallation from \"./AppMaintInstallation\";\nimport AppInstallationProgress from \"./AppInstallationProgress\";\nimport { appConfigs } from \"../../utils/configurations\";\n\nconst { Search } = Input;\n\n\ninterface Props{\n controllersSetSearch: Function,\n controllerSetPagination: Function,\n getGatewaysControllers: Function,\n openDrawer: Function,\n openInstallationProgressDrawer: Function,\n getAllControllersList: Function,\n updateControllerSelection: Function,\n setTab: Function,\n context: any,\n controllers: any,\n permissions: any,\n controllersModification: any,\n selectedController: any\n}\n\nconst UsersControllers: React.FC<Props> = (props) => {\n\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n const [selectedFilters, setSelectedFilters] = useState<any>({});\n\n const onTabChange = (key:string) => {\n props.setTab(key)\n }\n\n const { tableConfig, tableData } = props.controllers.controllersList;\n\n useEffect(() => {\n // props.getAllControllersList()\n props.getGatewaysControllers(null, null, null, 1, props.controllers.controllersList.searchText, [{\"status\": null}])\n props.controllerSetPagination(onPaginationChange(1));\n }, [])\n\n const renderControllersTable = (pagination: any, filters: any, sorter: any, extra: any, e:any) => {\n setSelectedFilters(filters)\n props.getGatewaysControllers(null, null, null, pagination.current, props.controllers.controllersList.searchText, filters)\n }\n\n const onSearch = (searchText: string) => { \n props.controllersSetSearch((searchText || \"\"));\n\n if((searchText || \"\")===\"\") {\n history.push(\"/controllers\");\n }\n \n setTimeout(function() {\n props.getGatewaysControllers(null, null, null, 1, searchText, selectedFilters); \n }, 100); \n }\n\n const onSearchChange = (e: any) => {\n let value = e.target.value;\n props.controllersSetSearch((value || \"\"));\n }\n\n const onPaginationChange = (page: number) => {\n props.getGatewaysControllers(null, null, null, page, props.controllers.controllersList.searchText, selectedFilters);\n };\n\n const tableColumns = [\n {\n title: 'Asset Name',\n dataIndex: 'gatewayName',\n },\n {\n title: 'Mastertag',\n dataIndex: 'mastertag',\n },\n {\n title: 'Controller Name',\n dataIndex: 'controllerName',\n },\n {\n title: 'Make',\n dataIndex: 'make',\n },\n {\n title: \"Model\",\n dataIndex: \"model\",\n },\n {\n title: \"Serial Number\",\n dataIndex: \"serialNumber\",\n },\n {\n title: \"Address\",\n dataIndex: \"address\",\n },\n // {\n // title: \"Installed Applications\",\n // dataIndex: \"installedApps\",\n // width: '18%',\n // render: (text: string, record: any) => (\n // record.installedApps.map((app: any, index: number) => {\n // return (<><Tag style={{marginTop: \"3px\"}}>{app.name}-{app.version}</Tag><br/></>)\n // })\n // )\n // },\n {\n title: \"Status\",\n dataIndex: \"status\",\n filterMultiple: true,\n filteredValue: selectedFilters.hasOwnProperty('status') ? selectedFilters.status : [],\n filters: props.controllers.controllersList.columnsFilters.status?.map((status: any) => {\n return { 'value': status, 'text': status }\n }),\n },\n {\n title: \"Actions\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Installations\">\n <Button\n type=\"default\" \n icon={<InfoOutlined />}\n onClick={(e) => { props.openInstallationProgressDrawer(\"Installations History for: (\" + record.gatewayName + ' - ' + record.controllerName + ')', drawerWidth, record); }}\n />\n </Tooltip>\n }\n </Space>\n )\n }\n ]\n\n const rowSelection = {\n onChange: (selectedRowKeys: React.Key[], selectedRows: any[]) => {\n // console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\n // console.log(selectedRows[0]);\n props.updateControllerSelection(selectedRows[0])\n }\n };\n\n\n return (\n\n <div className=\"layout-content\">\n <Row gutter={8}>\n \n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n {\n <span>Controllers</span>\n }\n </div>\n </div>\n </Col>\n\n </Row>\n \n <div className=\"mt-15\">\n <Row justify=\"end\" gutter={24}>\n \n <Col xs={24} lg={24} className=\"content-header-controls\">\n <Space>\n <Search\n data-id=\"controller-search-field\"\n key=\"search-field\"\n placeholder=\"Search By Name, Make, Model, Tags\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onSearchChange}\n className=\"search-field\"\n value={props.controllers.controllersList.searchText}\n />\n\n <Button data-id=\"assets-search-new-button\" disabled={props.selectedController == null} type=\"primary\" icon={<PlusOutlined />} onClick={(e) => props.openDrawer(\"Install Application\", drawerWidth, {})}>\n <span>App Installation</span>\n </Button>\n </Space>\n </Col>\n\n \n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n rowSelection={{\n type: 'radio',\n ...rowSelection,\n }}\n data-id=\"controllers-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record) => record.id}\n columns={tableColumns}\n dataSource={tableData}\n onChange={renderControllersTable}\n showSorterTooltip={false}\n />\n </Col> \n </Row>\n \n </div>\n\n <AppMaintInstallation/>\n <AppInstallationProgress/>\n </div>\n\n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n controllers: state.userControllersReducers.userControllersState.controllers,\n controllersModification: state.userControllersReducers.userControllersState.controllers.controllersModification,\n selectedController: state.userControllersReducers.userControllersState.controllers.selectedController\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(UsersControllers);\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function templatesSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATES_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function templatesSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATES_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function getTemplate(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string\n) {\n return async (dispatch: any) => {\n if(templateId){\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n let data = response.data.data.templates == null || (response.data.data.templates.length || 0) === 0 ? {} : response.data.data.templates[0];\n dispatch({ type: \"TEMPLATE_DETAILS_SUCCESS\", payload: {data: data}});\n if (callbackFnSuccess != null) { \n callbackFnSuccess(me, data);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n }\n else\n {\n dispatch({ type: \"TEMPLATE_DETAILS_SUCCESS\", payload: {data: null}});\n }\n }\n}\n\nexport function getTemplates(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number = 1,\n mode: string,\n searchText?: string,\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n mode: mode,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.templates == null || (response.data.data.templates.length || 0) === 0 ? [] : response.data.data.templates;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"TEMPLATES_GET_TEMPLATES_SUCCESS\", payload: {data: data, page: page} }); \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function templatesListRefreshOnUpdate(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATES_LIST_REFRESH_ON_UPDATE\" });\n };\n}\n\nexport function templateMaintOpen(\n me: any, \n mode: string,\n title: string,\n width: number,\n record: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATES_TEMPLATE_MAINT_OPEN\", payload: {mode: mode, title: title, width: width, record: record} });\n };\n}\n\nexport function templateMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATES_TEMPLATE_MAINT_CLOSE\" });\n };\n}\n\nexport function templateSetGlobalMode(\n mode: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATE_SET_GLOBAL_MODE\", mode: mode });\n }\n}\n\nexport function getTemplatesForCopyCollection(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n orgId: string,\n searchText?: string \n) {\n return async (dispatch: any) => {\n if(orgId){\n Axios.get(\n appConfigs.server.URL + \"/ui/api/getTemplatesbyOrgId\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => { \n let data = response.data.data.templates == null || (response.data.data.templates.length || 0) === 0 ? [] : response.data.data.templates;\n dispatch({ type: \"GET_TEMPLATES_SUCCESS\", payload: {data: data} });\n dispatch({ type: \"TEMPLATE_DETAILS_SUCCESS\", payload: {data: null}});\n if (callbackFnSuccess != null) {\n callbackFnSuccess(me,data);\n } \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n }\n else\n {\n dispatch({ type: \"GET_TEMPLATES_SUCCESS\", payload: {data: null} });\n dispatch({ type: \"TEMPLATE_DETAILS_SUCCESS\", payload: {data: null}});\n }\n}\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function templateMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/templates\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n const mode = Object.keys(record).length > 0 && record.hasOwnProperty(\"templateId\") && (record.templateId || \"\") !== \"\" ? \"update\" : \"insert\";\n callbackFnSuccess(response.data.data.templates[0], mode);\n }\n dispatch({ type: \"TEMPLATES_MAINT_SUCCESS\", record: response.data.data.templates[0] });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function templateDelete(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId,\n {}\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(templateId); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function templateMaintInfoOrgsGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n orgId?: string,\n searchText?: string\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs-lov\" + ((orgId || \"\") !== \"\" ? \"/\" + orgId : \"\"), {\n responseType: \"json\", \n headers: {},\n params: {\n mode: (orgId || \"\") === \"\" ? \"all\" : \"single\",\n scope: \"all\",\n includeTree: false,\n orgId: orgId,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({ type: \"TEMPLATES_MAINT_ORGS_SUCCESS\", payload: {data: response.data.data.orgs} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n} ","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function templateDuplicateOrgsGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n orgId?: string,\n searchText?: string\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs-lov\" + ((orgId || \"\") !== \"\" ? \"/\" + orgId : \"\"), {\n responseType: \"json\", \n headers: {},\n params: {\n mode: (orgId || \"\") === \"\" ? \"all\" : \"single\",\n scope: \"all\",\n includeTree: false,\n orgId: orgId,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({ type: \"TEMPLATES_DUPLICATE_ORGS_SUCCESS\", payload: {data: response.data.data.orgs} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n} \n\nexport function templateDuplicate(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n newName: string,\n newDescription: string,\n newOrgId: string,\n templateVisibleToSubOrg: boolean,\n clonedSignals:any\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId + \"/duplicate\",\n { \n name: newName,\n description: newDescription,\n orgId: newOrgId,\n templateVisibleToSubOrg: templateVisibleToSubOrg,\n clonedSignals\n },\n {\n responseType: \"json\"\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.templates[0]); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function templateCopyCollection(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n orgId: string, \n clonedSignals: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + `/ui/api/templates/${templateId}/copycollection`,\n clonedSignals,\n {\n responseType: \"json\",\n headers: {},\n params: {orgId:orgId}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response,orgId);\n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}","import React from \"react\";\nimport { Form, Select } from 'antd';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nconst { Option } = Select;\n\ninterface Prop {\n templateMaintInfoOrgsGet: Function,\n templatesList: any,\n context: any\n}\n\nclass TemplateMaintInfoOrg extends React.Component<Prop, {}> {\n \n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.templatesList.templateMaint.instance !== prevProps.templatesList.templateMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n this.props.templateMaintInfoOrgsGet(this, null, null, null, null);\n }\n\n render() {\n \n const { orgs } = this.props.templatesList.templateMaint.modes[0];\n\n return (\n <Form.Item\n name=\"orgId\"\n label=\"Org Name\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n > \n <Select \n data-id=\"assets-maint-asset-info-org-id\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n >\n {orgs.map((record:any, index:number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n templatesList: state.templatesReducers.templatesState.templatesList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TemplateMaintInfoOrg);","import React from \"react\";\nimport { Form, Input, message, Switch, Alert, Row, Col, Tooltip, Space } from 'antd';\nimport { InfoCircleOutlined } from '@ant-design/icons';\nimport { FormInstance } from 'antd/lib/form';\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { stringToUrlString } from \"../../../utils/commonHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from '../../../utils/history';\n\nimport TemplateMaintInfoOrg from \"./TemplateMaintInfoOrg\";\n\nconst { TextArea } = Input;\n\ninterface Prop {\n templateMaint: Function,\n templatesListRefreshOnUpdate: Function,\n getTemplates: Function,\n templateMaintClose: Function,\n context: any,\n templatesList: any\n}\n\nclass TemplateMaintInfo extends React.Component<Prop, FormState> { \n \n state: FormState = {};\n\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n this.componentUpdate(this.props.templatesList.templateMaint.record);\n }\n\n componentDidUpdate(prevProps: Prop, prevState: FormState) {\n if (this.props.templatesList.templateMaint.instance !== prevProps.templatesList.templateMaint.instance) {\n this.componentUpdate(this.props.templatesList.templateMaint.record);\n }\n }\n\n componentUpdate(record:any) {\n formInit(this); \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue({\n templateId: record.templateId,\n name: record.name,\n orgId: this.props.context.appContext.orgId,\n description: record.description,\n templateVisibleToSubOrg: record.templateVisibleToSubOrg\n });\n }\n };\n\n onFinish = (values: any) => { \n resetFormErrors(this, this.formRef.current);\n this.props.templateMaint(this, this.onFinishSuccess, this.onFinishFailure, {...values, templateVisibleToSubOrg: values && values.templateVisibleToSubOrg === undefined ? false: values.templateVisibleToSubOrg });\n };\n\n onFinishSuccess = (record: any, mode: string) => { \n this.props.templateMaintClose(this);\n\n const me = this;\n setTimeout(function () {\n if (mode === \"insert\") {\n history.push(\"/template/details/\" + stringToUrlString(record.name) + \"/\" + record.templateId);\n } \n else {\n me.props.getTemplates(me, me.getTemplatesSuccess(mode), null, me.props.templatesList.tableConfig.pagination.current, me.props.templatesList.mode, me.props.templatesList.searchText); \n } \n }, 250); \n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n\n getTemplatesSuccess = (mode: string) => { \n message.success(\"Template has been successfully \" + (mode === \"insert\" ? \"created\" : \"updated\"));\n this.props.templateMaintClose(this);\n }\n\n render() {\n \n return (\n\n <>\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"template-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"template-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n\n <Form\n style={{marginTop: 15}} \n {...appConfigs.settings.formLayout.mainLayout}\n id=\"templateMaintInfoForm\"\n ref={this.formRef} \n onFinish={this.onFinish}\n > \n <Form.Item \n name=\"templateId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n \n <Form.Item\n label=\"Name\"\n name=\"name\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} placeholder=\"Template unique name\" />\n </Form.Item>\n \n {\n this.formRef.current !== null &&\n (this.formRef.current!.getFieldValue(\"templateId\") || \"\") === \"\" && \n <TemplateMaintInfoOrg />\n }\n {\n this.props.context.appContext.roleName.toLowerCase() === \"admin\" &&\n <Form.Item\n label=\"Allow sub-orgs to use this master template\" \n labelCol={{ span: 10 }}\n > \n <Row>\n <Col span={3}>\n <Form.Item noStyle name=\"templateVisibleToSubOrg\" valuePropName=\"checked\">\n <Switch />\n </Form.Item> \n </Col>\n <Col span={1}>\n <Tooltip title=\"Any change done to this master template will automatically apply to all the assets using this template in all sub-orgs\">\n <InfoCircleOutlined style={{ fontSize: '120%', color: '#1890ff'}} />\n </Tooltip>\n </Col>\n </Row> \n </Form.Item> \n\n }\n \n <Form.Item\n label=\"Description\"\n name=\"description\" \n >\n <TextArea maxLength={255} rows={6} placeholder=\"A brief template description\" />\n </Form.Item>\n\n </Form>\n \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n templatesList: state.templatesReducers.templatesState.templatesList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TemplateMaintInfo);","import React from \"react\";\nimport { Form, Select } from 'antd';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nconst { Option } = Select;\n\ninterface Prop {\n templateDuplicateOrgsGet: Function,\n templatesList: any,\n context: any\n}\n\nclass TemplateDuplicateOrg extends React.Component<Prop, {}> {\n \n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.templatesList.templateMaint.instance !== prevProps.templatesList.templateMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n this.props.templateDuplicateOrgsGet(this, null, null, this.props.context.appContext.orgId); \n this.props.templateDuplicateOrgsGet(this, null, null, null, null); \n }\n\n render() {\n \n const { orgs } = this.props.templatesList.templateMaint.modes[1];\n\n return (\n <Form.Item\n name=\"orgId\"\n label=\"Destination Org\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n > \n <Select \n data-id=\"assets-maint-asset-info-org-id\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n >\n {orgs.map((record:any, index:number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n templatesList: state.templatesReducers.templatesState.templatesList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TemplateDuplicateOrg);","import React from \"react\";\nimport { Form, Input, message, Row, Col, Tooltip, Switch,Tree } from 'antd';\nimport { InfoCircleOutlined } from '@ant-design/icons';\nimport { FormInstance } from 'antd/lib/form';\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport TemplateDuplicateOrg from \"./TemplateDuplicateOrg\";\nimport { createTreeStructure } from \"../../../utils/commonHelpers\";\n\n\nconst { TextArea } = Input;\n\ninterface Prop {\n templateDuplicate: Function,\n templatesListRefreshOnUpdate: Function,\n context: any,\n templatesList: any,\n signalValidation:Function,\n onDrawerClose: Function\n}\n\ninterface State extends FormState{ \n signalData:any,\n expandedKeys:Array<string>,\n selectedkeys:Array<string>,\n enableSignalCollectons:boolean,\n autoExpandParent:boolean,\n checkedKeys:Array<string>,\n checkable:boolean,\n flattenedSignals:any\n}\n\nclass TemplateDuplicate extends React.Component<Prop, State> { \n \n state: State ={\n signalData:[],\n expandedKeys:[],\n selectedkeys:[],\n enableSignalCollectons:false,\n autoExpandParent:true,\n checkedKeys:[],\n checkable:false,\n flattenedSignals:[]\n };\n\n formRef = React.createRef<FormInstance>();\n \n componentDidMount() {\n this.componentUpdate(this.props.templatesList.templateMaint.record);\n }\n\n componentDidUpdate(prevProps: Prop, prevState: FormState) {\n if (this.props.templatesList.templateMaint.instance !== prevProps.templatesList.templateMaint.instance) {\n this.componentUpdate(this.props.templatesList.templateMaint.record);\n }\n }\n\n componentUpdate(record:any) {\n formInit(this); \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue({\n templateId: record.templateId,\n orgId: this.props.context.appContext.orgId,\n templateVisibleToSubOrg: record.templateVisibleToSubOrg,\n clonedSignals:null\n }); \n this.setSignalTree(record); \n }\n };\n\n onFinish = (values: any) => {\n resetFormErrors(this, this.formRef.current);\n const { templateId, name, description, orgId, templateVisibleToSubOrg,clonedSignals } = values\n this.props.templateDuplicate(this, this.onFinishSuccess, this.onFinishFailure, templateId, name, description, orgId, templateVisibleToSubOrg === undefined ? false : templateVisibleToSubOrg,clonedSignals);\n };\n\n onFinishSuccess = (record: any) => { \n message.success(\"Template has been successfully duplicated\");\n this.props.templatesListRefreshOnUpdate(this);\n this.props.onDrawerClose();\n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n\n setSignalTree = (record: any) => { \n if(record.datapoints) {\n const treeData = this.formatTreeData(record.datapoints);\n let uniqueExpandKeys = this.setExpanededKey(treeData);\n this.setState({signalData:treeData,\n expandedKeys:uniqueExpandKeys,\n enableSignalCollectons:true,\n checkedKeys:uniqueExpandKeys \n }); \n this.props.signalValidation(uniqueExpandKeys.length,true);\n }\n }\n\n formatTreeData = (datapoints: any) => {\n let signalCollection = JSON.parse(datapoints || []);\n const treeData = signalCollection.map(createTreeStructure); \n this.getFlattenedSignals(signalCollection);\n return treeData;\n };\n\n getFlattenedSignals=(datapoints:any)=>{\n let signals:any=[];\n datapoints.forEach((sc:any)=>{\n if(sc.values && sc.values.length > 0)\n {\n sc.values.forEach((sig:any) => {\n signals.push({'signalCollectionId': sc._id, 'signalId': sig._id})\n });\n }\n else{\n signals.push({'signalCollectionId': sc._id, 'signalId': null})\n }\n })\n this.setState({flattenedSignals:signals});\n }\n \n setExpanededKey = (data: any) => {\n let uniqueExpandKeys;\n const expanedKeys = data.reduce(\n (acc: any, curr: any) => {\n acc = acc.concat(curr.key);\n return acc;\n },\n []\n );\n if (expanedKeys) {\n uniqueExpandKeys = expanedKeys.filter((elem: any, pos: any) => {\n return expanedKeys.indexOf(elem) === pos;\n });\n }\n return uniqueExpandKeys;\n }\n\n onExpand = (expandedKeysValue:any) => {\n this.setState({expandedKeys:expandedKeysValue,autoExpandParent:false});\n };\n\n onCheck = (checkedKeysValue:any) => {\n const selectedSignals = [];\n let flattenedSignals=this.state.flattenedSignals;\n for(var i =0; i < flattenedSignals.length; i++){\n if(checkedKeysValue.indexOf(flattenedSignals[i].signalCollectionId) > -1 || checkedKeysValue.indexOf(flattenedSignals[i].signalId) > -1){\n selectedSignals.push(flattenedSignals[i]);\n }\n }\n this.formRef.current!.setFieldsValue({\n clonedSignals:flattenedSignals.length-selectedSignals.length==0?null:selectedSignals\n });\n let isEnableSignalCollection=flattenedSignals.length-selectedSignals.length==0;\n this.setState({checkedKeys:checkedKeysValue,\n enableSignalCollectons:isEnableSignalCollection});\n \n this.props.signalValidation(checkedKeysValue.length,isEnableSignalCollection);\n };\n \n onEnableSignalCollection = (checked:any) => {\n let keyLength:number;\n if(!checked)\n {\n keyLength=0;\n this.setState({checkedKeys:[]})\n }\n else\n {\n keyLength=this.state.expandedKeys.length;\n this.setState({checkedKeys:this.state.expandedKeys})\n this.formRef.current!.setFieldsValue({\n clonedSignals:null\n });\n }\n this.setState({enableSignalCollectons: checked}); \n this.props.signalValidation(keyLength,checked);\n };\n \n render() {\n \n return (\n\n <>\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"template-duplicate-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"template-duplicate-error-message\" message={this.state.formErrorMessage}/>}\n\n <Form\n style={{marginTop: 15}}\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"templateDuplicateForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n > \n <Form.Item \n name=\"clonedSignals\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item> \n <Form.Item \n name=\"templateId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n \n <Form.Item\n label=\"New Name\"\n name=\"name\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} placeholder=\"New template unique name\" />\n </Form.Item> \n\n <Form.Item\n label=\"Allow sub-orgs to use this master template\"\n labelCol={{ span: 10 }}\n > \n <Row>\n <Col span={3}>\n <Form.Item noStyle name=\"templateVisibleToSubOrg\" valuePropName=\"checked\">\n <Switch />\n </Form.Item> \n </Col>\n <Col span={1}>\n <Tooltip title=\"Any change done to this master template will automatically apply to all the assets using this template in all sub-orgs\">\n <InfoCircleOutlined style={{ fontSize: '120%', color: '#1890ff'}} />\n </Tooltip>\n </Col>\n </Row> \n </Form.Item>\n\n <Form.Item\n label=\"New Description\"\n name=\"description\" \n >\n <TextArea rows={6} placeholder=\"A brief description of new template\" maxLength={255}/>\n </Form.Item>\n\n <TemplateDuplicateOrg />\n \n <Form.Item\n label=\"Signal Collections\"\n name=\"enableSignalCollectons\"\n valuePropName=\"checked\"\n > \n \n <Switch \n \n checked={this.state.enableSignalCollectons}\n onChange={this.onEnableSignalCollection}\n />\n \n <span style={{ marginLeft:'3px' }}>Select all</span> \n\n { this.state.checkedKeys.length ===0 &&\n <div style={{ color: 'red',marginLeft:'2px' }}>Select atleast one signal</div>\n }\n\n \n </Form.Item>\n \n <Form.Item\n label=\"\"\n style={{marginLeft:'140px'}}\n name=\"signals\"\n \n >\n <Tree\n checkable\n onExpand={this.onExpand}\n expandedKeys={this.state.expandedKeys}\n autoExpandParent={this.state.autoExpandParent}\n onCheck={this.onCheck}\n checkedKeys={this.state.checkedKeys}\n selectedKeys={this.state.selectedkeys}\n treeData={this.state.signalData}\n />\n </Form.Item>\n </Form>\n \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n templatesList: state.templatesReducers.templatesState.templatesList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TemplateDuplicate);","import React from \"react\";\nimport { Form, Input, message, Tooltip, Switch, Tree, Select, Modal, Button } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport { createTreeStructure, uuidv4 } from \"../../../utils/commonHelpers\";\nimport { WarningOutlined } from \"@ant-design/icons\";\nconst { Option } = Select;\nconst lodash = require('lodash');\ninterface Prop {\n templateCopyCollection: Function,\n templatesListRefreshOnUpdate: Function,\n getTemplate: Function,\n getTemplatesForCopyCollection: Function,\n context: any,\n templateDuplicateOrgsGet: Function;\n templatesList: any,\n assetsList: any,\n closePopUp: Function,\n signalValidation: Function,\n onDrawerClose: Function\n}\n\ninterface State extends FormState {\n signalData: any,\n expandedKeys: Array<string>,\n selectedkeys: Array<string>,\n enableSignalCollectons: boolean,\n autoExpandParent: boolean,\n checkedKeys: Array<string>,\n checkable: boolean,\n matchingSignals: boolean,\n destinationCollectionExists: boolean,\n isModalVisible: boolean,\n isModalVisibleForDuplicateName: boolean,\n signalOverride: boolean,\n flattenedSignals: any,\n destinationCollection: any,\n signalCount: any,\n templateId: any,\n isSignalWarningEnabled: boolean,\n destinationTemplateCollectionData: any,\n duplicationCollectionSignals: any,\n newCollectionSignals: any,\n templateOrgId: any,\n sourceDataPoints: any,\n sourceTemplateData: any,\n receivedsignalCollections: any,\n receivedorgTemplates: any\n}\n\nclass TemplateCopyCollection extends React.Component<Prop, State> {\n\n constructor(props: any) {\n super(props);\n this.onTemplateIdChange = this.onTemplateIdChange.bind(this)\n }\n state: State = {\n signalData: [],\n expandedKeys: [],\n selectedkeys: [],\n enableSignalCollectons: false,\n autoExpandParent: true,\n matchingSignals: false,\n isModalVisible: false,\n isModalVisibleForDuplicateName: false,\n signalOverride: false,\n checkedKeys: [],\n checkable: false,\n destinationCollectionExists: false,\n destinationCollection: undefined,\n isSignalWarningEnabled: false,\n signalCount: 0,\n flattenedSignals: [],\n duplicationCollectionSignals: [],\n newCollectionSignals: [],\n destinationTemplateCollectionData: [],\n templateId: null,\n templateOrgId:null,\n sourceDataPoints: null,\n sourceTemplateData: null,\n receivedsignalCollections: false,\n receivedorgTemplates: false\n };\n\n formRef = React.createRef<FormInstance>();\n onOrgIdChange = (value: string) => { \n this.formRef.current!.resetFields([\"templateId\",\"collectionId\"]);\n this.setState({receivedorgTemplates: false, destinationCollection: undefined, templateId: undefined, duplicationCollectionSignals:[]});\n if (value) { \n this.props.getTemplatesForCopyCollection(this,this.getOrgTemplatesSuccess, null,value,null);\n }\n else{\n this.props.getTemplatesForCopyCollection(this,null, null,value,null);\n }\n }\n getOrgTemplatesSuccess(me:any, data:any){\n me.setState({receivedorgTemplates: true});\n }\n onCollectionChange(value: string, options: any) {\n this.setState({ destinationCollection: value[value.length - 1] });\n this.formRef.current!.setFieldsValue({ collectionId: value[value.length - 1] });\n this.onTemplateIdChange(this.formRef.current?.getFieldsValue().templateId, false);\n }\n \n templateDetailsSuccess(me:any, destData:any){\n \n let sourceData = me.props.templatesList.templateMaint.record.datapoints; \n let templateId=me.formRef.current?.getFieldsValue().templateId; \n let orgId = me.formRef.current?.getFieldsValue().orgId; \n let collectionId = me.formRef.current?.getFieldsValue().collectionId; \n let enableSignalCollections = me.state.enableSignalCollectons;\n let destTemplateData = destData? destData?.datapoints? JSON.parse(destData?.datapoints):null: null;//details ? JSON.parse(details?.datapoints) : null;\n let sourceTemplateData = JSON.parse(sourceData);\n if(destTemplateData) {\n if (enableSignalCollections) {\n me.validateSignalCollection(sourceTemplateData, destTemplateData, templateId, orgId, collectionId);\n } else {\n if (me.state.checkedKeys.length > 0) {\n sourceTemplateData.map((st: any) => {\n for (let i = st.values?.length - 1; i >= 0; i--) {\n if (!me.state.checkedKeys.includes(st.values[i]._id)) {\n st.values.splice(i, 1);\n }\n }\n });\n for (let i = sourceTemplateData.length - 1; i >= 0; i--) {\n if ((!me.state.checkedKeys.includes(sourceTemplateData[i]._id)\n && sourceTemplateData[i].values.length === 0)\n ) {\n sourceTemplateData.splice(i, 1);\n }\n }\n me.setState({sourceTemplateData: sourceTemplateData}); \n me.validateSignalCollection(sourceTemplateData, destTemplateData, templateId, orgId, collectionId);\n }\n }\n }\n me.setState({receivedsignalCollections: true});\n }\n\n onTemplateIdChange = (value: any, isTemplateChange: boolean=true) => {\n this.setState({\n templateId: value,\n duplicationCollectionSignals: []\n });\n this.formRef.current!.setFieldsValue({\n templateId: value\n });\n if(isTemplateChange){\n this.formRef.current!.setFieldsValue({\n collectionId: undefined\n });\n this.setState({receivedsignalCollections: false,\n destinationCollection: undefined});\n if(value) {\n this.props.getTemplate(this,this.templateDetailsSuccess,null,value);\n }\n else\n {\n this.props.getTemplate(this,null,null,value);\n }\n }\n else {\n let tempdata = this.props.templatesList.selectedTemplateDetails;\n let sourceTemplateData = JSON.parse(this.props.templatesList.templateMaint.record.datapoints);\n let destTemplateData = tempdata? tempdata?.datapoints?JSON.parse(tempdata?.datapoints) : null : null;\n if (this.state.enableSignalCollectons) {\n this.validateSignalCollection(sourceTemplateData, destTemplateData, this.formRef.current?.getFieldsValue().templateId, this.formRef.current?.getFieldsValue().orgId, this.formRef.current?.getFieldsValue().collectionId);\n } else {\n if (this.state.checkedKeys.length > 0) {\n sourceTemplateData.map((st: any) => {\n for (let i = st.values?.length - 1; i >= 0; i--) {\n if (!this.state.checkedKeys.includes(st.values[i]._id)) {\n st.values.splice(i, 1);\n }\n }\n });\n for (let i = sourceTemplateData.length - 1; i >= 0; i--) {\n if ((!this.state.checkedKeys.includes(sourceTemplateData[i]._id)\n && sourceTemplateData[i].values.length === 0)\n ) {\n sourceTemplateData.splice(i, 1);\n }\n }\n this.setState({sourceTemplateData: sourceTemplateData}); \n this.validateSignalCollection(sourceTemplateData, destTemplateData, this.formRef.current?.getFieldsValue().templateId, this.formRef.current?.getFieldsValue().orgId, this.formRef.current?.getFieldsValue().collectionId);\n }\n }\n }\n }\n componentDidMount() {\n this.componentUpdate(this.props.templatesList.templateMaint.record);\n }\n\n\n componentUpdate(record: any) {\n this.props.templateDuplicateOrgsGet(this, null, null, null, null);\n this.props.getTemplatesForCopyCollection(this,this.getOrgTemplatesSuccess, null,this.props.context.appContext.orgId, null);\n formInit(this);\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.formRef.current!.setFieldsValue({\n orgId: this.props.context.appContext.orgId,\n templateVisibleToSubOrg: record.templateVisibleToSubOrg,\n clonedSignals: null\n });\n this.setSignalTree(record);\n }\n };\n\n validateSignalCollection = (sourceTemplateData: any, destTemplateData: any, templateId: any, orgId: any, destinationCollection: any) => {\n var copyCollectionData: any = [];\n let matchingCollectionSignals: any = [];\n let newSignals: any = [];\n let isDuplicateSignalAvailable: boolean = false;\n let destinationCollectionFound: any;\n this.setState({\n duplicationCollectionSignals: [],\n matchingSignals: false\n });\n if (destinationCollection) {\n matchingCollectionSignals=[];\n destinationCollectionFound = destTemplateData?.find((ele: any) => (ele?._id === destinationCollection));\n if (destinationCollectionFound) {\n this.setState({\n destinationCollectionExists: true\n })\n copyCollectionData.push(destinationCollectionFound);\n sourceTemplateData?.filter((sourceCollectionData: any) => {\n if (!sourceCollectionData?.type || sourceCollectionData.type.toLowerCase() === \"none\") {\n for (let i = sourceCollectionData.values?.length - 1; i >= 0; i--) {\n let signalFound = destinationCollectionFound.values.find((ele: any) => (ele.label.toLowerCase() === sourceCollectionData.values[i].label?.toLowerCase()));\n if (signalFound) {\n isDuplicateSignalAvailable = true;\n matchingCollectionSignals.push({ \"signalId\": sourceCollectionData.values[i]._id, \"signalName\": sourceCollectionData.values[i].label, \"signalCollectionId\": sourceCollectionData._id, \"collectionName\": sourceCollectionData.name, \"signalData\": sourceCollectionData.values[i] });\n for (let j = copyCollectionData[0].values?.length - 1; j >= 0; j--) {\n let removedDuplicate : boolean = false\n if(copyCollectionData[0].values[j]?.label.toLowerCase() === signalFound.label.toLowerCase())\n {\n copyCollectionData[0].values.splice(j, 1);\n removedDuplicate = true;\n }\n if(removedDuplicate) {\n break;\n }\n }\n } else {\n const uuid = uuidv4();\n sourceCollectionData.values[i]._id = uuid;\n newSignals.push(sourceCollectionData.values[i]);\n }\n }\n }\n })\n copyCollectionData[0].values = newSignals;\n if (isDuplicateSignalAvailable) {\n this.setState({\n matchingSignals: true\n });\n } \n else {\n this.setState({\n matchingSignals: false\n });\n }\n if (matchingCollectionSignals.length > 0) {\n\n this.setState({\n duplicationCollectionSignals: matchingCollectionSignals\n });\n }\n if (newSignals.length > 0) {\n\n this.setState({\n newCollectionSignals: copyCollectionData\n });\n\n }\n }\n else {\n this.setState({\n destinationCollectionExists: false\n })\n let newCollection = {\n \"all_signals\": true,\n \"name\": destinationCollection,\n \"type\": \"none\",\n \"update_interval\": \"60s\",\n \"values\": [],\n \"_id\": uuidv4()\n }\n\n sourceTemplateData?.filter((sourceCollectionData: any) => {\n if (!sourceCollectionData?.type || sourceCollectionData.type.toLowerCase() === \"none\") {\n sourceCollectionData.values?.filter((sourceSignal: any) => {\n newSignals.push(sourceSignal);\n }\n );\n }\n if (newSignals.length > 0) {\n newSignals?.filter((signals: any) => {\n const uuid = uuidv4();\n signals._id = uuid;\n })\n newCollection.values = newSignals;\n copyCollectionData.push(newCollection);\n }\n\n this.setState({\n matchingSignals: false,\n newCollectionSignals: newCollection\n });\n\n })\n }\n }\n else {\n matchingCollectionSignals = [];\n sourceTemplateData?.filter((sourceCollectionData: any) => {\n let collectionFound = destTemplateData?.find((ele: any) => (ele?.name?.toLowerCase() === sourceCollectionData?.name.toLowerCase()));\n if (!sourceCollectionData?.type || sourceCollectionData?.type.toLowerCase() === \"none\") {\n if (collectionFound) {\n newSignals = [];\n sourceCollectionData?.values?.filter((sourceSignal: any) => {\n let signalFound = collectionFound?.values?.find((ele: any) => (ele?.label.toLowerCase() === sourceSignal?.label.toLowerCase()));\n if (signalFound) {\n isDuplicateSignalAvailable = true;\n matchingCollectionSignals.push({ \"signalId\": sourceSignal._id, \"signalName\": sourceSignal.label, \"signalCollectionId\": sourceCollectionData._id, \"collectionName\": collectionFound.name, \"signalData\": sourceSignal });\n } else {\n newSignals.push(sourceSignal);\n }\n })\n if (newSignals.length > 0) {\n const uuid = uuidv4();\n sourceCollectionData._id = uuid;\n newSignals?.filter((signals: any) => {\n const uuid = uuidv4();\n signals._id = uuid;\n })\n sourceCollectionData.values = newSignals;\n copyCollectionData.push(sourceCollectionData);\n }\n if (isDuplicateSignalAvailable) {\n this.setState({\n matchingSignals: true\n });\n }\n }\n else {\n const uuid = uuidv4();\n sourceCollectionData._id = uuid;\n sourceCollectionData.values?.filter((signals: any) => {\n const uuid = uuidv4();\n signals._id = uuid;\n })\n copyCollectionData.push(sourceCollectionData);\n }\n }\n });\n if (matchingCollectionSignals.length > 0) {\n this.setState({\n duplicationCollectionSignals: matchingCollectionSignals\n });\n }\n if (copyCollectionData.length > 0) {\n this.setState({\n newCollectionSignals: copyCollectionData\n });\n }\n }\n }\n\n hasDuplicateSignalName = (collection:any, signalName:any) => {\n var hasDuplicate = Object.create(null);\n return collection.some((coll:any) => {\n return coll[signalName] && (hasDuplicate[coll[signalName]] || !(hasDuplicate[coll[signalName]] = true));\n });\n };\n\n onFinish = (values: any) => {\n const { templateId, collectionId } = values;\n let tempOrgId= this.props.templatesList.templates.find((template:any)=>template.templateId===templateId).templateOrgId;\n let destTemplateData = JSON.parse(this.props.templatesList?.selectedTemplateDetails?.datapoints);\n if (!collectionId) {\n if (this.state.matchingSignals && !this.state.signalOverride) {\n this.setState({\n templateOrgId: tempOrgId,\n isModalVisible: true\n });\n }\n else if (!this.state.matchingSignals) {\n this.state.newCollectionSignals?.filter((col: any) => {\n let sameCollectionExists: boolean = false;\n for(let i = destTemplateData.length-1;i>=0;i--) {\n if(col.name === destTemplateData[i]?.name){\n sameCollectionExists = true;\n let signalsmerged=[...destTemplateData[i].values,...col.values]\n destTemplateData[i].values = signalsmerged;\n }\n if (sameCollectionExists) {\n break;\n }\n } \n if (!sameCollectionExists) {\n destTemplateData.push(col);\n }\n });\n let isDuplicateNameavailable :any = false;\n //checking for duplicate collection name\n if(!isDuplicateNameavailable){\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData,\"label\");\n } \n for(let i = destTemplateData?.length-1;i>=0;i--) {\n if(!isDuplicateNameavailable){\n //checking for duplicate signal name in a collection\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData[i].values,\"label\");\n }\n }\n if(!isDuplicateNameavailable){\n this.props.templateCopyCollection(this, this.onFinishSuccess, this.onFinishFailure, templateId, tempOrgId, destTemplateData);\n this.props.closePopUp();\n }\n else\n {\n this.setState({isModalVisibleForDuplicateName: true});\n }\n }\n\n }\n else {\n if (this.state.destinationCollectionExists) {\n if (this.state.matchingSignals && !this.state.signalOverride) {\n this.setState({\n templateOrgId: tempOrgId,\n isModalVisible: true\n });\n }\n else {\n let isDuplicateNameavailable :any = false;\n this.state.newCollectionSignals?.filter((col: any) => {\n for(let i = destTemplateData?.length-1;i>=0;i--) {\n if(col.name === destTemplateData[i].name){\n let mergedsignals = [... destTemplateData[i].values,...col.values];\n destTemplateData[i].values = mergedsignals;\n }\n if(!isDuplicateNameavailable){\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData[i].values,\"label\");\n }\n }\n });\n //checking for duplicate collection name\n if(!isDuplicateNameavailable){\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData,\"label\");\n } \n if(!isDuplicateNameavailable){\n this.props.templateCopyCollection(this, this.onFinishSuccess, this.onFinishFailure, templateId, tempOrgId, destTemplateData);\n this.props.closePopUp();\n }\n else\n {\n this.setState({isModalVisibleForDuplicateName: true});\n }\n }\n }\n else {\n let isDuplicateNameavailable :any = false;\n //checking for duplicate collection name\n if(!isDuplicateNameavailable){\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData,\"label\");\n } \n destTemplateData.push(this.state.newCollectionSignals);\n for(let i = destTemplateData?.length-1;i>=0;i--) {\n if(!isDuplicateNameavailable){\n //checking for duplicate signal name in a collection\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData[i].values,\"label\");\n }\n }\n if(!isDuplicateNameavailable){\n this.props.templateCopyCollection(this, this.onFinishSuccess, this.onFinishFailure, templateId, tempOrgId, destTemplateData);\n this.props.closePopUp();\n }\n else\n {\n this.setState({isModalVisibleForDuplicateName: true});\n }\n }\n }\n };\n onFinishSuccess = (record: any, orgId:any) => {\n this.setState({\n isModalVisible: false,\n signalOverride: false\n });\n this.props.getTemplatesForCopyCollection(this,this.getOrgTemplatesSuccess, null,orgId, null);\n message.success(\"Template collections has been successfully copied\");\n this.props.onDrawerClose();\n }\n\n onFinishFailure = (error: any) => {\n errorResponse(this, error);\n }\n\n setSignalTree = (record: any) => {\n if (record.datapoints) {\n const treeData = this.formatTreeData(record.datapoints);\n let uniqueExpandKeys = this.setExpanededKey(treeData);\n this.setState({\n sourceDataPoints: record.datapoints,\n signalData: treeData,\n expandedKeys: uniqueExpandKeys,\n enableSignalCollectons: true,\n checkedKeys: uniqueExpandKeys\n });\n this.props.signalValidation(uniqueExpandKeys.length, true);\n }\n }\n\n formatTreeData = (datapoints: any) => {\n let signalCollection = JSON.parse(datapoints || []);\n let count = 0;\n let genericCollections: any = [];\n signalCollection.map((ele: any) => {\n if (!ele?.type || ele?.type.toLowerCase() === \"none\") {\n genericCollections.push(ele);\n count++;\n ele.values?.filter((signal: any) => {\n count++\n })\n }\n })\n this.setState({ signalCount: count });\n const treeData = genericCollections.map(createTreeStructure);\n this.getFlattenedSignals(signalCollection);\n return treeData;\n };\n\n getFlattenedSignals = (datapoints: any) => {\n let signals: any = [];\n datapoints.forEach((sc: any) => {\n if (sc.values && sc.values.length > 0) {\n\n let signalIds: any = [];\n sc.values.forEach((sig: any) => {\n signalIds.push(sig._id)\n });\n signals.push({ 'signalCollectionId': sc._id, 'signalId': signalIds })\n\n }\n else {\n signals.push({ 'signalCollectionId': sc._id, 'signalId': null })\n }\n })\n this.setState({ flattenedSignals: signals });\n }\n\n setExpanededKey = (data: any) => {\n let uniqueExpandKeys;\n const expanedKeys = data.reduce(\n (acc: any, curr: any) => {\n acc = acc.concat(curr.key);\n return acc;\n },\n []\n );\n if (expanedKeys) {\n uniqueExpandKeys = expanedKeys.filter((elem: any, pos: any) => {\n return expanedKeys.indexOf(elem) === pos;\n });\n }\n return uniqueExpandKeys;\n }\n\n onExpand = (expandedKeysValue: any) => {\n this.setState({ expandedKeys: expandedKeysValue, autoExpandParent: false });\n };\n\n\n\n onCheck = (checkedKeysValue: any) => {\n const selectedSignals: any = [];\n let sourceTemplateData = JSON.parse(this.props.templatesList?.templateMaint?.record?.datapoints);\n let destTemplateData = (this.props.templatesList?.selectedTemplateDetails?.datapoints)?JSON.parse(this.props.templatesList.selectedTemplateDetails.datapoints):null;//.find((ele: any) => (ele.templateId === this.formRef.current?.getFieldsValue().templateId)).datapoints);\n if (checkedKeysValue.length > 0) {\n sourceTemplateData.map((st: any) => {\n for (let i = st.values?.length - 1; i >= 0; i--) {\n if (!checkedKeysValue.includes(st.values[i]._id)) {\n st.values.splice(i, 1);\n }\n }\n });\n for (let i = sourceTemplateData.length - 1; i >= 0; i--) {\n if ((!checkedKeysValue.includes(sourceTemplateData[i]._id)\n && sourceTemplateData[i].values.length === 0)\n ) {\n sourceTemplateData.splice(i, 1);\n }\n }\n this.setState({sourceTemplateData: sourceTemplateData});\n if(destTemplateData){\n this.validateSignalCollection(sourceTemplateData, destTemplateData, this.formRef.current?.getFieldsValue().templateId, this.formRef.current?.getFieldsValue().orgId, this.formRef.current?.getFieldsValue().collectionId);\n }\n }\n\n let isEnableSignalCollection = this.state.signalCount - checkedKeysValue.length == 0;\n this.formRef.current!.setFieldsValue({\n clonedSignals: isEnableSignalCollection ? null : selectedSignals\n });\n this.setState({\n checkedKeys: checkedKeysValue,\n enableSignalCollectons: isEnableSignalCollection\n });\n\n this.props.signalValidation(checkedKeysValue.length, isEnableSignalCollection);\n };\n\n onEnableSignalCollection = (checked: any) => {\n let keyLength: number;\n if (!checked) {\n keyLength = 0;\n this.setState({ checkedKeys: [],\n duplicationCollectionSignals:[] });\n\n }\n else {\n keyLength = this.state.expandedKeys.length;\n this.setState({ checkedKeys: this.state.expandedKeys })\n this.formRef.current!.setFieldsValue({\n clonedSignals: null\n });\n this.validateSignalCollection(this.props.templatesList.templateMaint.record?.datapoints?JSON.parse(this.props.templatesList.templateMaint.record?.datapoints):null, \n this.props.templatesList.selectedTemplateDetails?.datapoints?JSON.parse(this.props.templatesList.selectedTemplateDetails.datapoints):null,\n this.formRef.current?.getFieldsValue().templateId, this.formRef.current?.getFieldsValue().orgId,\n this.formRef.current?.getFieldsValue().collectionId); \n }\n this.setState({ enableSignalCollectons: checked });\n this.props.signalValidation(keyLength, checked);\n \n };\n handleOkDuplicateName = () => {\n this.setState({\n isModalVisibleForDuplicateName: false\n });\n }\n handleCancelDuplicateName = () => {\n this.setState({\n isModalVisibleForDuplicateName: false\n });\n }\n handleCancel = () => {\n this.setState({\n isModalVisible: false\n });\n this.props.closePopUp();\n };\n\n handleOk = () => {\n this.setState({\n isModalVisible: false,\n signalOverride: true\n }); \n let destTemplateData = JSON.parse(this.props.templatesList?.selectedTemplateDetails?.datapoints);\n if (!this.formRef.current?.getFieldsValue().collectionId) {\n destTemplateData?.filter((ele: any) => {\n this.state.duplicationCollectionSignals?.filter((duplicate: any) => {\n if (duplicate.collectionName.toLowerCase() === ele.name.toLowerCase()) {\n for(let j=ele.values.length-1;j>=0;j--) {\n if(ele.values[j].label.toLowerCase()===duplicate.signalName.toLowerCase()) {\n ele.values.splice(j,1);\n ele.values.push(duplicate.signalData);\n }\n } \n }\n });\n });\n\n this.state.newCollectionSignals?.filter((col: any) => {\n let sameCollectionExists: boolean = false;\n for (let i = destTemplateData?.length - 1; i >= 0; i--) {\n if (destTemplateData[i]?.name.toLowerCase() === col.name?.toLowerCase()) {\n sameCollectionExists = true;\n let signalsmerged=[...destTemplateData[i].values,...col.values]\n destTemplateData[i].values = signalsmerged;\n }\n if (sameCollectionExists) {\n break;\n }\n }\n if (!sameCollectionExists) {\n destTemplateData.push(col);\n }\n });\n }\n else {\n if (this.state.destinationCollectionExists) {\n \n destTemplateData?.filter((ele: any) => { \n if (ele._id === this.formRef.current?.getFieldsValue().collectionId) {\n this.state.duplicationCollectionSignals?.filter((duplicate: any) => {\n let replaced:boolean = false;\n for(let j=ele.values.length-1;j>=0;j--) {\n if(ele.values[j].label.toLowerCase()===duplicate.signalName.toLowerCase()) {\n ele.values.splice(j,1);\n ele.values.push(duplicate.signalData);\n replaced = true;\n }\n if(replaced)\n {\n break;\n }\n }\n });\n }\n \n });\n this.state.newCollectionSignals.map((ele: any) => {\n if (ele._id === this.formRef.current?.getFieldsValue().collectionId) {\n destTemplateData?.filter((destele: any) => {\n if(destele.name?.toLowerCase()===ele.name?.toLowerCase()){\n let signalsmerged = [...ele?.values,...destele?.values];\n destele.values = signalsmerged;\n }\n\n });\n }\n });\n }\n }\n let isDuplicateNameavailable :any = false;\n //checking for duplicate collection name\n if(!isDuplicateNameavailable){\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData,\"label\");\n }\n for(let i = destTemplateData?.length-1;i>=0;i--) {\n if(!isDuplicateNameavailable){\n //checking for duplicate signal name in a collection\n isDuplicateNameavailable = this.hasDuplicateSignalName(destTemplateData[i].values,\"label\");\n }\n }\n if(!isDuplicateNameavailable){\n this.props.templateCopyCollection(this, this.onFinishSuccess, this.onFinishFailure, this.formRef.current?.getFieldsValue().templateId, this.state.templateOrgId, destTemplateData);\n this.props.closePopUp();\n }\n else\n {\n this.setState({isModalVisibleForDuplicateName: true});\n }\n };\n\n render() {\n let { templates } = this.props.templatesList;\n templates = templates?.filter((template:any)=> template.templateId!==this.props.templatesList.templateMaint.record?.templateId);\n const destTemp = this.props.templatesList?.selectedTemplateDetails?.datapoints;\n let destgenericCollections:[] = [];\n if(destTemp !== null && destTemp !== undefined) {\n destgenericCollections = JSON.parse(destTemp).filter((data:any)=> (!data.type || data.type===\"none\"));\n }\n const { orgs } = this.props.templatesList.templateMaint.modes[1];\n this.state.signalData.filter((ele: any) => {\n ele.children?.filter((child: any) => {\n child.icon = null;\n })\n });\n if (this.state.duplicationCollectionSignals.length > 0) {\n this.state.signalData.filter((ele: any) => {\n ele.children?.filter((child: any) => {\n let collection = this.state.duplicationCollectionSignals.find((col: any) => (col.signalId === child.key));\n if (collection) {\n child.icon = \n <WarningOutlined title=\"Indicates matching signal in source and destination template collections\" style={{ color: \"red\" }} />\n }\n else {\n child.icon = null;\n }\n })\n })\n }\n else\n {\n this.state.signalData.filter((ele: any) => {\n ele.children?.filter((child: any) => {\n child.icon = null;\n })\n })\n }\n return (\n\n <>\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"template-copy-success-message\" message={this.state.formSuccessMessage} />}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"template-copy-error-message\" message={this.state.formErrorMessage} />}\n\n <Form\n style={{ marginTop: 15 }}\n // {...appConfigs.settings.formLayout.mainLayout}\n labelCol={{ span: 6 }}\n wrapperCol={{ span: 24 }}\n id=\"templateCopyCollectionForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n >\n <Form.Item\n name=\"clonedSignals\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item\n name=\"templateId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item\n name=\"orgId\"\n label=\"Destination Org\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n data-id=\"assets-maint-asset-info-org-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\"\n placeholder=\"Select...\"\n allowClear\n onChange={this.onOrgIdChange}\n >\n {orgs !== null && orgs.map((record: any, index: number) => (\n <Option key={index} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n <Form.Item\n label=\"Destination Template\"\n name=\"templateId\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n data-id=\"template-copy-collection-template-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\"\n placeholder=\"Select...\"\n loading = {templates?.length === 0 && this.formRef.current?.getFieldsValue().orgId\n && !this.state.receivedorgTemplates}\n //disabled = {templates.length === 0 }\n allowClear\n onChange={(value:any)=>this.onTemplateIdChange(value,true)}\n >\n {templates !== null && templates?.map((record: any, index: number) => (\n record.templateVisibleToSubOrg ?\n <Option key={index} value={record.templateId} style={{ color: \"blue\" }}>\n {record.name}\n </Option>\n :\n <Option key={index} value={record.templateId}>\n {record.name}\n </Option>\n ))}\n </Select>\n {\n templates?.length === 0 \n && this.formRef.current?.getFieldsValue().orgId\n && this.state.receivedorgTemplates &&\n <div style={{ color: 'blue' }}>\n <span>No templates available for the selected Organization</span>\n </div>\n }\n </Form.Item>\n\n <Form.Item\n name=\"collectionId\"\n label=\"Destination Collection\"\n // rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n mode=\"tags\"\n data-id=\"template-copy-collection-destination-collection-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\"\n placeholder=\"Select...\"\n allowClear\n maxTagCount={1}\n loading = {destgenericCollections.length === 0 && templates?.length > 0 \n && this.state.templateId\n && !this.state.receivedsignalCollections}\n //disabled = {destgenericCollections.length === 0}\n value={this.state.destinationCollection}\n onChange={(value: any, options: any) => this.onCollectionChange(value, options)}\n >\n { destgenericCollections.length > 0 && destgenericCollections.map((record: any, index: number) => (\n <Option key={index} value={record._id}>\n {record.name}\n </Option>\n ))}\n </Select>\n {\n destgenericCollections?.length === 0 && templates?.length > 0\n && this.state.templateId\n && this.state.receivedsignalCollections &&\n <div style={{ color: 'blue' }}>\n <span>No collections in the selected template</span>\n </div>\n }\n </Form.Item>\n {\n this.state.duplicationCollectionSignals?.length > 0 &&\n <div style={{ color: 'red', paddingLeft: '50px', paddingBottom:'10px' }}>\n <WarningOutlined style={{ color: \"red\" }} /> <span>Indicates matching signals in source and destination template collections</span>\n </div> \n }\n\n {\n (JSON.parse(this.props.templatesList?.templateMaint?.record?.datapoints).filter((collection:any) => \n (!collection.type || collection.type===\"none\")).length === 0) &&\n <div style={{ color: 'red', paddingLeft: '50px', paddingBottom:'10px' }}>\n <span>No signals available to copy. Please select a source template with atleast one generic collection.</span>\n </div>\n }\n\n {\n (JSON.parse(this.props.templatesList?.templateMaint?.record?.datapoints).filter((collection:any) => \n (!collection.type || collection.type===\"none\")).length > 0) &&\n <Form.Item\n label=\"Signal Collections\"\n name=\"enableSignalCollectons\"\n valuePropName=\"checked\"\n >\n <Switch\n checked={this.state.enableSignalCollectons}\n onChange={this.onEnableSignalCollection}\n />\n <span style={{ marginLeft: '3px' }}>Select all</span>\n {this.state.checkedKeys.length === 0 &&\n <div style={{ color: 'red', marginLeft: '2px' }}>Select atleast one signal</div>\n }\n </Form.Item> \n } \n <Form.Item\n label=\"\"\n style={{ marginLeft: '140px' }}\n name=\"signals\"\n >\n <Tree\n checkable\n onExpand={this.onExpand}\n expandedKeys={this.state.expandedKeys}\n autoExpandParent={this.state.autoExpandParent}\n onCheck={this.onCheck}\n checkedKeys={this.state.checkedKeys}\n selectedKeys={this.state.selectedkeys}\n showIcon\n treeData={this.state.signalData}\n //treeData={sourceTree}\n />\n </Form.Item>\n {<Modal title=\"Duplicate Signal found\" visible={this.state.isModalVisible}\n onOk={this.handleOk}\n onCancel={this.handleCancel}\n footer={[\n <Button onClick={this.handleCancel}>No</Button>,\n <Button type=\"primary\" onClick={this.handleOk}>\n Yes\n </Button>,\n ]}\n >\n <ul>\n {this.state.duplicationCollectionSignals.length>0?this.state.duplicationCollectionSignals?.map((record: any) => (\n <li>{record.signalName}</li>\n )):null}\n </ul>\n <p>Same collection signals found in the destination template. Do you want to override destination template collection signals data?</p>\n <p><b><h3>Note: Once those signals are Overridden, previously collected signals data will be lost.</h3></b></p>\n </Modal>\n }\n {<Modal title=\"Duplicate Signal Name\" visible={this.state.isModalVisibleForDuplicateName}\n onOk={this.handleOkDuplicateName}\n onCancel={this.handleCancelDuplicateName}\n footer={[\n <Button type=\"primary\" onClick={this.handleOkDuplicateName}>\n OK\n </Button>,\n ]}\n >\n <ul>\n <li>Same collection name not allowed multiple times within a template</li>\n <li>Same signal name not allowed multiple times within a collection.</li>\n </ul>\n <p>Please remove the duplicate names to proceed further.</p>\n </Modal>\n }\n </Form>\n\n </>\n );\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n assetsList: state.assetsReducer.assetsState.assetsList,\n templatesList: state.templatesReducers.templatesState.templatesList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TemplateCopyCollection);","import React from \"react\";\nimport { Drawer, Button, Space, Modal } from \"antd\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions/templates\";\n\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport TemplateMaintInfo from \"./templateMaintInfo/TemplateMaintInfo\";\nimport TemplateDuplicate from \"./templateDuplicate/TemplateDuplicate\";\nimport TemplateCopyCollection from \"./templateCopyCollection/TemplateCopyCollection\";\n\ninterface Prop {\n templatesListRefreshOnUpdate: Function,\n getTemplates: Function,\n templateMaintClose: Function, \n templatesList: any\n}\ninterface State {\n isModalVisible: boolean,\n signalLength:number,\n isEnabledAllSignals:boolean,\n showSignalDuplicateModel:boolean\n showSignalCopyModel:boolean\n}\n\nclass TemplateMaint extends React.Component<Prop, State> { \n \n state: State = {\n isModalVisible: false,\n signalLength:1,\n isEnabledAllSignals:false,\n showSignalDuplicateModel:false,\n showSignalCopyModel:false\n };\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.templatesList.templateMaint.instance !== prevProps.templatesList.templateMaint.instance) {\n }\n } \n\n onDrawerClose = () => {\n if (this.props.templatesList.refreshOnUpdate) {\n this.props.getTemplates(this, null, null, this.props.templatesList.tableConfig.pagination.current, this.props.templatesList.mode, this.props.templatesList.searchText);\n }\n this.props.templateMaintClose(this);\n };\n\n showModal = () => {\n this.setState((prevState) => (\n { \n ...prevState, \n isModalVisible: true,\n showSignalDuplicateModel:!prevState.isEnabledAllSignals,\n showSignalCopyModel:!prevState.showSignalCopyModel \n }));\n };\n\n handleOk = () => {\n this.setState({ \n isModalVisible: false,\n });\n };\n\n\n handleCancel = () => {\n this.setState({\n isModalVisible: false,\n showSignalDuplicateModel:false,\n showSignalCopyModel:false\n });\n }; \n\n signalValidation=(signalLength:number,isEnabledAllSignals:boolean)=>{\n this.setState({signalLength:signalLength,isEnabledAllSignals:isEnabledAllSignals});\n }\n\n render() {\n \n const { templateMaint } = this.props.templatesList;\n return (\n <Drawer\n data-id=\"template-maint-drawer\" \n title={templateMaint.title}\n width={templateMaint.width}\n onClose={this.onDrawerClose}\n visible={templateMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"template-maint-close\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n templateMaint.mode === \"template\" && \n <Button data-id=\"template-maint-submit\" type=\"primary\" form=\"templateMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n templateMaint.mode === \"duplicate\" && templateMaint.record != null \n && this.state.isEnabledAllSignals &&\n <Button data-id=\"template-duplicate-submit\" type=\"primary\"\n form=\"templateDuplicateForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n {\n templateMaint.mode === \"duplicate\" && templateMaint.record != null \n && !this.state.isEnabledAllSignals &&\n <>\n <Button data-id=\"template-duplicate-submit\" type=\"primary\"\n key=\"submit\" htmlType=\"submit\" onClick={this.showModal} disabled={this.state.signalLength===0}>\n {appConfigs.settings.form.submitButtonText}\n </Button>\n\n <Modal title=\"Confirm cloning subset of signals\" visible={this.state.showSignalDuplicateModel} \n onOk={this.handleOk}\n onCancel={this.handleCancel} \n footer={[\n <Button onClick={this.handleCancel}>No</Button>,\n <Button data-id=\"template-duplicate-submit\" type=\"primary\" form=\"templateDuplicateForm\" key=\"submit\" onClick={this.handleOk} htmlType=\"submit\">\n Yes\n </Button>,\n ]}\n >\n <p>Only selected signals will be cloned to the new template. Do you want to proceed?</p> \n </Modal>\n </>\n }\n\n {\n templateMaint.mode === \"copy\" && templateMaint.record != null \n && templateMaint.record.orgId != null && templateMaint.record.templateId != null &&\n <>\n <Button data-id=\"template-copy-submit\" type=\"primary\"\n // key=\"submit\" htmlType=\"submit\" onClick={this.showModal} disabled={this.state.signalLength===0}>\n key=\"submit\" htmlType=\"submit\" form=\"templateCopyCollectionForm\" disabled={this.state.signalLength===0}>\n {appConfigs.settings.form.submitButtonText}\n </Button>\n\n <Modal title=\"Confirm copy collection subset of signals\" visible={this.state.showSignalCopyModel} \n onOk={this.handleOk}\n onCancel={this.handleCancel} \n footer={[\n <Button onClick={this.handleCancel}>No</Button>,\n <Button data-id=\"template-copy-submit\" type=\"primary\" form=\"templateCopyCollectionForm\" key=\"submit\" onClick={this.handleOk} htmlType=\"submit\">\n Yes\n </Button>,\n ]}\n >\n <p>Only selected signals will be copied to the destination template. Do you want to proceed?</p> \n </Modal>\n </>\n }\n {/* { \n templateMaint.mode === \"duplicate\" && templateMaint.record != null && templateMaint.record.remoteControl === 1 && \n <>\n <Button type=\"primary\" disabled={this.state.signalLength===0} onClick={this.showModal}>\n {appConfigs.settings.form.submitButtonText}\n </Button>\n <Modal title=\"Confirm to duplicate a subset of command\" visible={this.state.isModalVisible} \n onOk={this.handleOk}\n onCancel={this.handleCancel} \n footer={[\n <Button onClick={this.handleCancel}>No</Button>,\n <Button data-id=\"template-duplicate-submit\" type=\"primary\" form=\"templateDuplicateForm\" key=\"submit\" onClick={this.handleOk} htmlType=\"submit\">\n Yes\n </Button>,\n ]}\n >\n <p>Only a subset of the commands allowed by the target org will be duplicated. Are you sure to duplicate the template?</p> \n </Modal>\n </>\n } */}\n </Space>\n }\n >\n {\n templateMaint.mode === \"template\" && \n <TemplateMaintInfo /> \n }\n {\n templateMaint.mode === \"duplicate\" && \n <TemplateDuplicate onDrawerClose={this.onDrawerClose} signalValidation={this.signalValidation}/> \n }\n {\n templateMaint.mode === \"copy\" && \n <TemplateCopyCollection onDrawerClose={this.onDrawerClose} signalValidation={this.signalValidation} closePopUp={this.handleCancel}/> \n }\n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n templatesList: state.templatesReducers.templatesState.templatesList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TemplateMaint);","import React, { Component } from \"react\";\nimport { Table, Button,Popover, Tag, Popconfirm, Input, Row, Col, Space, Tooltip, message, Badge, Radio, Typography } from \"antd\";\nimport { PlusOutlined, EllipsisOutlined, CopyOutlined, EditOutlined, DeleteOutlined, UnorderedListOutlined, GlobalOutlined, BlockOutlined } from \"@ant-design/icons\";\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport { stringToUrlString, closePopover, getPermissions, assetTableFilter, setAssetTableFilters } from \"../../utils/commonHelpers\";\nimport history from '../../utils/history';\n\nimport TemplateMaint from \"./TemplateMaint\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport \"./templ.css\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\n//import { getPermissions } from \"../../actions/permissions\";\n\nconst { Search } = Input;\n\ninterface Prop {\n templatesSetPagination: Function,\n templatesSetSearch: Function,\n getTemplates: Function,\n getTemplate: Function,\n templateMaintOpen: Function,\n getTemplatesForCopyCollection: Function,\n templateDelete: Function,\n templateDuplicate: Function,\n context: any,\n templatesList: any,\n permissions: any,\n templateSetGlobalMode: any\n}\n\nclass Templates extends Component<Prop, {}> {\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n \n componentDidMount () {\n this.props.templatesSetPagination(this.onPaginationChange);\n this.props.getTemplates(this, null, null, 1, this.props.templatesList.mode, this.props.templatesList.searchText); \n }\n\n onPaginationChange = (page: number) => {\n this.props.getTemplates(this, null, null, page, this.props.templatesList.mode, this.props.templatesList.searchText);\n };\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n\n if ( action === \"add\") {\n this.props.templateMaintOpen(this, \"template\", \"New Template\", this.drawerWidth, {});\n }\n else if ( action === \"edit\") {\n this.props.templateMaintOpen(this, \"template\", \"Edit Template :: \" + record.name, this.drawerWidth, record);\n }\n else if ( action === \"copy\") {\n this.props.templateMaintOpen(this, \"copy\", \"Copy Collection :: \" + record.name, this.drawerWidth, record);\n }\n else if ( action === \"duplicate\") {\n this.props.templateMaintOpen(this, \"duplicate\", \"Duplicate Template :: \" + record.name, this.drawerWidth, record);\n }\n else if ( action === \"delete\") {\n this.props.templateDelete(this, this.templateDeleteSucess, null, record.templateId); \n }\n else if ( action === \"details\") {\n this.goToDetails(e, record.name, record.templateId); \n }\n \n closePopover(); \n }\n\n templateDeleteSucess = (templateId:string) => {\n message.success(\"Template has been successfully deleted\");\n this.onPaginationChange(this.props.templatesList.tableConfig.pagination.current);\n }\n\n onSearch = (searchText: string) => { \n let me = this;\n\n this.props.templatesSetSearch((searchText || \"\"));\n setTimeout(function() {\n me.props.getTemplates(me, null, null, 1, me.props.templatesList.mode, searchText);\n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.templatesSetSearch((value || \"\"));\n }\n\n goToDetails = (e: any, templateName: string, templateId: number) => {\n e.preventDefault();\n history.push(\"/template/details/\" + stringToUrlString(templateName) + \"/\" + templateId);\n };\n\n onStatusChange = (e: any) => {\n e.preventDefault();\n this.props.templateSetGlobalMode(e.target.value);\n this.props.getTemplates(this, null, null, 1, e.target.value, this.props.templatesList.searchText); \n };\n\n goToAssets = (e:any, filter: assetTableFilter, ) => {\n e.preventDefault();\n setAssetTableFilters(filter);\n history.push(\"/assets\")\n }\n\n confirmDeletion = (record:any) => (\n <Popconfirm\n title={\"Are you sure to delete this template?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Template\"> \n <Button data-id=\"templates-actions-delete-button\" type=\"default\" icon={<DeleteOutlined />} className=\"delete-template\" />\n </Tooltip>\n </Popconfirm>\n );\n\n actions = (record:any, isCreate:any, isRead:any, isUpdate:any, isDelete:any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"large\">\n {\n (record.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\")) ?\n (<Tooltip title=\"Edit Template\">\n <Button data-id=\"templates-actions-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.onAction(e, record, \"edit\")}} /> \n </Tooltip>) : \n (!record.templateVisibleToSubOrg && isUpdate) ?\n (<Tooltip title=\"Edit Template\">\n <Button data-id=\"templates-actions-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.onAction(e, record, \"edit\")}} /> \n </Tooltip>) : <></> \n }\n {\n (record.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\")) ?\n this.confirmDeletion(record) :\n (!record.templateVisibleToSubOrg && isDelete)?\n this.confirmDeletion(record) : <></>\n }\n {\n (record.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" && isCreate && isUpdate)) ?\n <Tooltip title=\"Copy Collection\">\n <Button data-id=\"templates-actions-copy-button\" type=\"default\" icon={<BlockOutlined />} onClick={(e) => {this.onAction(e, record, \"copy\")}} /> \n </Tooltip> :\n (!record.templateVisibleToSubOrg && isCreate && isUpdate) ?\n <Tooltip title=\"Copy Collection\">\n <Button data-id=\"templates-actions-copy-button\" type=\"default\" icon={<BlockOutlined />} onClick={(e) => {this.onAction(e, record, \"copy\")}} /> \n </Tooltip> : <></>\n }\n {\n (record.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" && isCreate && isUpdate)) ?\n <Tooltip title=\"Duplicate Template\">\n <Button data-id=\"templates-actions-duplicate-button\" type=\"default\" icon={<CopyOutlined />} onClick={(e) => {this.onAction(e, record, \"duplicate\")}} /> \n </Tooltip> :\n (!record.templateVisibleToSubOrg && isCreate && isUpdate) ?\n <Tooltip title=\"Duplicate Template\">\n <Button data-id=\"templates-actions-duplicate-button\" type=\"default\" icon={<CopyOutlined />} onClick={(e) => {this.onAction(e, record, \"duplicate\")}} /> \n </Tooltip> : <></>\n }\n \n {\n (isRead) &&\n <Tooltip title=\"List Template Details\">\n <Button data-id=\"templates-actions-details-button\" type=\"default\" icon={<UnorderedListOutlined />} onClick={(e) => {this.onAction(e, record, \"details\")}} /> \n </Tooltip>\n }\n \n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n >\n <Button data-id=\"templates-actions-button\" type=\"default\" icon={<EllipsisOutlined />} /> \n </Popover>\n );\n \n render() { \n\n const { user:contextUser } = this.props.context;\n const { tableConfig, tableData } = this.props.templatesList;\n const result = getPermissions(this.props.permissions.permissions.templates);\n if (!this.props.context.user.contextUserIsAdmin && !result[1]){\n history.push(\"/not-found\") \n }\n let isCreate = result[0];\n let isRead = result[1];\n let isUpdate = result[2];\n let isDelete = result[3];\n const tableColumns = [\n {\n title: \"Name\",\n dataIndex: \"name\",\n key: \"name\",\n //width: 50,\n render: (text: any, record: any) => (\n record.templateVisibleToSubOrg ?\n <Tooltip title=\"Global Template Details\"> \n <Badge dot offset={[5, 5]}>\n <a href=\"# \" onClick={(e) => {this.goToDetails(e, record.name, record.templateId)}}> \n {record.name} \n </a>\n </Badge> \n </Tooltip> : <Tooltip title=\"List Template Details\">\n <a href=\"# \" onClick={(e) => {this.goToDetails(e, record.name, record.templateId)}}> \n {record.name} \n </a> \n </Tooltip>\n ) \n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n key: \"description\",\n responsive: [\"md\"] as Breakpoint[]\n },\n {\n title: \"Org Name\",\n dataIndex: \"orgName\",\n key: \"orgName\",\n responsive: [\"md\"] as Breakpoint[]\n },\n {\n title: \"Collections\",\n dataIndex: \"collectionCount\",\n key: \"collectionCount\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n render: (collectionCount: number, record: any) => (\n <div className=\"notifications-tag\">\n {\n collectionCount > 0 && \n <Tag color=\"geekblue\">{collectionCount}</Tag>\n }\n </div>\n )\n },\n {\n title: \"Assets\",\n dataIndex: \"assetCount\",\n key: \"assetCount\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n render: (assetCount: number, record:any) => (\n <div \n className=\"notifications-tag\" \n onClick={(e) => this.goToAssets(e,\n {\n page: 1,\n status: 'active',\n searchText: record.name,\n sortColumn: 'asset',\n sortDirection: 'ascend',\n alertInterval: '1 day',\n listMode: true,\n filters: { tags: null },\n }\n )}\n >\n {\n <Tooltip title = {\"View Assigned Assets\"}>\n <Tag style={{cursor:'pointer'}}\n>\n <Typography.Text underline style={{color:\"#1890FF\"}}>\n {assetCount}\n </Typography.Text>\n </Tag>\n </Tooltip>\n }\n </div>\n )\n },\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n <> \n {\n (isCreate || isRead || isUpdate || isDelete) && \n this.actions(record, isCreate, isRead, isUpdate, isDelete)\n }\n {/* {\n !record.objectAdmin &&\n <Tooltip title=\"List Template Details\">\n <Button data-id=\"templates-actions-details-button\" type=\"default\" icon={<UnorderedListOutlined />} onClick={(e) => {this.onAction(e, record, \"details\")}} /> \n </Tooltip>\n } */}\n </>\n )\n }\n ];\n\n return (\n <div data-id=\"templates-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col sm={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation />\n </Tooltip>\n Templates\n </div>\n </div> \n </Col>\n </Row>\n <Row gutter={8}> \n <Col xs={24} lg={12} className=\"mt-10\">\n <span className=\"asset-status-green pr-5\" ></span>\n <Radio.Group value={this.props.templatesList.mode} buttonStyle=\"solid\" onChange={this.onStatusChange}>\n <Radio.Button value=\"all\">All</Radio.Button>\n <Radio.Button value=\"global\"><GlobalOutlined className=\"pr-5\"/>Global Template</Radio.Button>\n </Radio.Group>\n </Col>\n <Col xs={24} lg={12} className=\"content-header-controls\">\n <Space size=\"middle\">\n { \n <Search\n data-id=\"templates-search-field\"\n placeholder=\"Search by name, description and organization\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.props.templatesList.searchText}\n /> \n }\n \n {\n (isCreate) &&\n <Tooltip title=\"Create New Template\"> \n <Button data-id=\"templates-new-template-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add\")}>\n <span>Template</span>\n </Button>\n </Tooltip> \n }\n </Space>\n </Col>\n </Row>\n <div className=\"mt-15\">\n <TemplateMaint /> \n { \n <Table \n data-id=\"templates-data\" \n {...tableConfig}\n rowKey={(record) => record.templateId}\n columns={tableColumns}\n dataSource={tableData}\n />\n } \n \n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n templatesList: state.templatesReducers.templatesState.templatesList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Templates);\n ","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function templateDetailsTabChange(\n me: any,\n tab: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATE_DETAILS_TAB_CHANGE\", tab: tab });\n };\n}\n\nexport function getTemplate(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n let record = response.data.data.templates == null || (response.data.data.templates.length || 0) === 0 ? {} : response.data.data.templates[0];\n if (callbackFnSuccess != null) {\n callbackFnSuccess(record);\n }\n dispatch({ type: \"TEMPLATE_DETAILS_GET_TEMPLATE_SUCCESS\", record: record });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n//Request URL: http://localhost:8080/ui/api/templates/242bf9b0-c8f3-11e8-a384-d1aa7ba0fd74/info?fieldName=name&fieldValue=Demo%20Case%2031\n\nexport function templateMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n fieldName: string,\n fieldValue: string\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId + \"/info?fieldName=\" + fieldName + \"&fieldValue=\" + fieldValue,\n {},\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.templates[0]);\n }\n dispatch({ type: \"TEMPLATE_DETAILS_MAINT_TEMPLATE_SUCCESS\", record: response.data.data.templates[0] });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n errorResponse(me, error, false);\n }\n );\n }\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function signalCollectionsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_COLLECTIONS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function signalCollectionsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_COLLECTIONS_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function getSignalCollection(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n signalCollectionId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId +\"/signal-collections/\" + signalCollectionId, {\n responseType: \"json\", \n headers: {},\n params: {\n page: 1,\n pageSize: 999\n }\n }\n )\n .then(response => { \n let record = response.data.data.signalCollections == null || (response.data.data.signalCollections.length || 0) === 0 ? {} : response.data.data.signalCollections[0];\n if (callbackFnSuccess != null) {\n callbackFnSuccess(record);\n }\n dispatch({ type: \"SIGNAL_COLLECTION_MAINT_SET_RECORD\", record: record });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getSignalCollections(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n page: number = 1,\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId + \"/signal-collections\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n let data = response.data.data.signalCollections == null || (response.data.data.signalCollections.length || 0) === 0 ? [] : response.data.data.signalCollections;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"SIGNAL_COLLECTIONS_GET_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function signalCollectionDelete(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n signalCollectionId: string\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId + \"/signal-collections/\" + signalCollectionId,\n {}\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(templateId, signalCollectionId); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function signalCollectionMaintOpen(\n me: any, \n width: number,\n record: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_COLLECTION_MAINT_OPEN\", payload: {width: width, record: record} });\n };\n}\n\nexport function signalCollectionMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_COLLECTION_MAINT_CLOSE\" });\n };\n}\n\nexport function signalCollectionSetRecord(\n me: any, \n record: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_COLLECTION_MAINT_SET_RECORD\", record: record });\n };\n}\n\nexport function signalCollectionMaintSubmit(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n const editMode = (record.signalCollectionId || \"\") !== \"\" ? \"edit\" : \"insert\";\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/templates/\" + record.templateId + \"/signal-collections\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n let record = response.data.data.signalCollections == null || (response.data.data.signalCollections.length || 0) === 0 ? {} : response.data.data.signalCollections[0];\n if (callbackFnSuccess != null) {\n callbackFnSuccess(editMode, record);\n }\n dispatch({ type: \"SIGNAL_COLLECTION_MAINT_SUCCESS\", record: record });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\n","export function signalsOpen(\n me: any, \n title: string,\n width: number,\n signalCollectionId: string,\n signalCollectionName: string,\n signalCollectionType: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNALS_OPEN\", payload: {title: title, width: width, signalCollectionId: signalCollectionId, signalCollectionName: signalCollectionName, signalCollectionType: signalCollectionType} });\n };\n}\n\nexport function signalsClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"SIGNALS_CLOSE\" });\n };\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function signalMaintOpen(\n me: any, \n width: number,\n record: any,\n collectionType: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_MAINT_OPEN\", payload: {width: width, record: record, collectionType: collectionType} });\n };\n}\n\nexport function signalMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_MAINT_CLOSE\" });\n };\n}\n\nexport function signalMaintSetRecord(\n me: any, \n record: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_MAINT_SET_RECORD\", record: record });\n };\n}\n\nexport function getSignal(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n signalId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/signals/template/\" + templateId + \"/signals/\" + signalId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let record = response.data.data.signals == null || (response.data.data.signals.length || 0) === 0 ? {} : response.data.data.signals[0];\n if (callbackFnSuccess != null) {\n callbackFnSuccess(record);\n }\n dispatch({ type: \"SIGNAL_MAINT_SET_RECORD\", record: record });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getJ1939s(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n searchText?: string,\n j1939Id?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/j1939s\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n j1939Id: j1939Id,\n page: 1,\n pageSize: appConfigs.tables.j1939PageSize\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.j1939s);\n }\n dispatch({ type: \"SIGNAL_GET_J1939S_SUCCESS\", payload: {data: response.data.data.j1939s} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getCommandPgns(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n searchText?: string,\n commandPgn?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/command-pgns\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n commandPgn: commandPgn,\n page: 1,\n pageSize: appConfigs.tables.commandPgnPageSize\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.commandPgns);\n }\n dispatch({ type: \"SIGNAL_GET_COMMAND_PGN_SUCCESS\", payload: {data: response.data.data.commandPgns} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getCommandControllers(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n searchText?: string,\n commandControllerSaId?: number, \n commandPgn?: number\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/command-controllers-lov\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText, \n commandControllerSaId: commandControllerSaId\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.commandControllers);\n }\n \n if (commandPgn !== null && commandPgn === 65305) {\n //Only gateway 37 is allowed as receiving from MD4 text to gateway for D2C text; for C2D text, it is broadcasting\n let allowedControllers = [];\n let defaultGatewayDevice = {\n cmdControllerSaId: 37, \n cmdControllerSaName: 'Off Vehicle Gateway'};\n allowedControllers.push(defaultGatewayDevice); \n dispatch({ type: \"SIGNAL_GET_COMMAND_CONTROLLER_SUCCESS\", payload: {data: allowedControllers} });\n } else {\n dispatch({ type: \"SIGNAL_GET_COMMAND_CONTROLLER_SUCCESS\", payload: {data: response.data.data.commandControllers} });\n }\n \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function signalMaintSubmit(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: String,\n record: any\n) {\n const editMode = (record.signalId || \"\") !== \"\" ? \"edit\" : \"insert\";\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId + \"/signals\",\n {\n ...record, \n \"signalRule\": {\n \"ruleId\" : record.ruleId,\n \"ruleName\" : record.ruleName,\n \"criticalLowValue\" : record.criticalLowValue,\n \"warningLowValue\" : record.warningLowValue,\n \"warningHighValue\" : record.warningHighValue,\n \"criticalHighValue\" : record.criticalHighValue,\n \"infoLowValue\" : record.infoLowValue,\n \"infoHighValue\" : record.infoHighValue\n },\n \"signalIncrementalRule\":{\n \"ruleId\":record.incrementalRuleId,\n \"ruleName\":record.incrementalRuleName,\n \"ruleType\":record.incrementalRuleType,\n \"ruleValue\":record.incrementalRuleValue\n },\n \"offlineRule\":{\n \"ruleId\":record.offlineRuleId,\n \"ruleName\":record.offlineRuleName,\n \"offlineSince\":record.offlineSince,\n \"offlineDuration\":record.offlineDuration\n },\n \"mergeRule\":{\n \"mergeRuleId\":record.mergeRuleId,\n \"mergeRuleName\": record.mergeRuleName,\n \"leftMergeRule\":record.leftMergeRule,\n \"rightMergeRule\":record.rightMergeRule,\n \"mergeRuleOperator\":record.mergeRuleOperator\n }\n },\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n let record = response.data.data.signals == null || (response.data.data.signals.length || 0) === 0 ? {} : response.data.data.signals[0];\n if (callbackFnSuccess != null) {\n callbackFnSuccess(editMode, record);\n }\n dispatch({ type: \"SIGNAL_MAINT_SUCCESS\", record: record, editMode: editMode });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function getUnits(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n \n) {\n\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/signals/units\", {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n let result = response.data.data.units == null || (response.data.data.units.length || 0) === 0 ? {} : response.data.data.units;\n let units=result.filter((o:any)=>o.name!=='Other');\n let otherUnits=result.filter((o:any)=>o.name==='Other');\n if(otherUnits.length)\n {\n for (let i = 0; i < otherUnits.length; i++) {\n units.push(otherUnits[i]);\n }\n }\n else\n {\n units.push({ name: \"Other\",symbol:\"\",stdSymbol:\"\" });\n }\n if (callbackFnSuccess != null) {\n callbackFnSuccess(units);\n }\n dispatch({ type: \"Units_GET_SUCCESS\", data: units });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function signalListSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_LIST_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function signalListSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_LIST_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function signalListRefreshOnUpdate(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"SIGNAL_LIST_REFRESH_ON_UPDATE\" });\n };\n}\n\nexport function getSignals(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n signalCollectionId: string,\n signalCollectionName: string,\n signalCollectionType: string,\n page: number = 1,\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/signals/template/\" + templateId + \"/collection/\" + signalCollectionId, {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.signals);\n }\n dispatch({ type: \"SIGNALS_GET_SUCCESS\", payload: {signalCollectionId: signalCollectionId, signalCollectionName: signalCollectionName, signalCollectionType: signalCollectionType, data: response.data.data.signals, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function signalDelete(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n signalId: string\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/signals/template/\" + templateId + \"/signal/\" + signalId,\n {}\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(signalId); \n }\n dispatch({ type: \"SIGNAL_DELETE_SUCCESS\" });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function dm1FaultsSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATE_DETAILS_DM1_FAULTS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function dm1FaultsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"TEMPLATE_DETAILS_DM1_FAULTS_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function getDm1Faults(\n me: any, \n listType: string,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n page: number = 1,\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId + \"/dm1-faults\", {\n responseType: \"json\", \n headers: {},\n params: {\n listType: listType,\n searchText: searchText,\n page: page,\n pageSize: 999\n }\n }\n )\n .then(response => { \n let data = response.data.data.dm1Faults == null || (response.data.data.dm1Faults.length || 0) === 0 ? [] : response.data.data.dm1Faults;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"TEMPLATE_DETAILS_DM1_FAULTS_GET_SUCCESS\", payload: {data: data, page: page, listIndex: (listType=='whitelist')?0:1}});\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function dm1MessagingMaint(\n me: any, \n callbackSuccessFn: any,\n callbackErrorFn: any,\n record: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/templates/\" + record.templateId + \"/dm1-messaging\",\n {\n templateId: record.templateId,\n dm1MessagingCan0Enabled: record.dm1MessagingCan0Enabled,\n dm1MessagingCan0UpdateInterval: record.dm1MessagingCan0UpdateInterval,\n dm1MessagingCan1Enabled: record.dm1MessagingCan1Enabled,\n dm1MessagingCan1UpdateInterval: record.dm1MessagingCan1UpdateInterval,\n dm1WhitelistType: record.dm1WhitelistType,\n dm1NotificationDelaySeconds: record.dm1NotificationDelaySeconds,\n maxDayDm1: record.maxDayDm1\n },\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n let record = response.data.data.templates == null || (response.data.data.templates.length || 0) === 0 ? {} : response.data.data.templates[0];\n if (callbackSuccessFn != null) {\n callbackSuccessFn(record);\n }\n dispatch({ type: \"TEMPLATE_DETAILS_DM1_MESSAGING_MAINT_SUCCESS\", record });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn();\n }\n }\n );\n \n };\n}\n\nexport function dm1FaultsDelete(\n me: any, \n listType: string,\n index: number\n) {\n return (dispatch: any) => {\n dispatch({ type: \"DM1_FAULTS_DELETE\", index: index , listIndex: (listType=='whitelist')?0:1 });\n }\n}\n\nexport function dm1FaultsDbDelete(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n listType: string,\n dm1Id: string\n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId + \"/dm1-faults/\" + dm1Id+\"/list-type/\"+listType,\n {}\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(dm1Id); \n }\n dispatch({ type: \"DM1_FAULTS_DB_DELETE_SUCCESS\", dm1Id: dm1Id , listIndex: (listType=='whitelist')?0:1 });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function dm1FaultsAddRecord(\n me: any,\n listType: string\n) {\n return async (dispatch: any) => {\n dispatch({ type: \"DM1_FAULTS_ADD_RECORD\", payload: {listIndex: (listType=='whitelist')?0:1} }); \n } \n}\n\nexport function dm1FaultsAddRecords(\n me: any,\n listType: string,\n data: any\n) {\n return async (dispatch: any) => {\n dispatch({ type: \"DM1_FAULTS_ADD_RECORDS\", data: data, listIndex: (listType=='whitelist')?0:1}); \n } \n}\n\nexport function dm1FaultsSetFieldValue(\n me: any,\n listType: string,\n index: number,\n fieldName: string,\n fieldValue: any\n) {\n return async (dispatch: any) => {\n dispatch({ type: \"DM1_FAULTS_SET_FIELD_VALUE\", listIndex: (listType=='whitelist')?0:1,index: index, fieldName: fieldName, fieldValue: fieldValue}); \n } \n}\n\nexport function dm1FaultsMaint(\n me: any, \n callbackFnSuccess: any,\n callbackErrorFn: any,\n templateId: string,\n listType: string,\n data: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId + \"/dm1-faults\",\n {\n templateId: templateId,\n dm1Faults: data\n },\n {\n responseType: \"json\", \n headers: {},\n params: {\n listType: listType\n }\n }\n )\n .then(response => {\n let data = response.data.data.dm1Faults == null || (response.data.data.dm1Faults.length || 0) === 0 ? [] : response.data.data.dm1Faults;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"TEMPLATE_DETAILS_DM1_FAULTS_GET_SUCCESS\", payload: {data: data, page: 1, listIndex: (listType=='whitelist')?0:1} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackErrorFn != null) {\n callbackErrorFn();\n }\n }\n );\n \n };\n}\n\n//feature can track when csv file is imported\n// export function dm1FaultsSetImportFlag(\n// me: any,\n// listType: string,\n// val: boolean \n// ) {\n// return (dispatch: any) => {\n// dispatch({ type: \"TEMPLATE_DETAILS_DM1_FAULTS_SET_IMPORT_FLAG\", payload: {val: val, listIndex: (listType=='whitelist')?0:1 } });\n// }\n// } \n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function iqanFileUploadMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n record: any\n) {\n return async (dispatch: any) => {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/templates/\" + templateId + \"/iqan-telematic-file-process\",\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(record);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport * as actions from \"../actions\";\n\nexport function getPinnedSignals(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n preference: string\n){\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId +\"/signalpreferences\", {\n responseType: \"json\", \n headers: {},\n params: {\n preference: 'pinnedsignals'\n }\n }\n ).then(\n response => {\n let record = response.data.data.signals == null ? { id: \"\", preferedSignals: []} : response.data.data.signals; \n dispatch({ type: \"PREFERED_SIGNALS_SUCCESS\", payload: record});\n }\n )\n .catch(function (error) {\n // if (callbackFnFailure != null) {\n // callbackFnFailure(null, error);\n // }\n errorResponse(null, error);\n });\n }\n}\n\nexport function savePinnedSignals(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n preference: string,\n preferedSignals: any\n){\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId +\"/signalpreferences\", \n preferedSignals, \n {\n responseType: \"json\",\n headers: {},\n params: {\n preference: 'pinnedsignals'\n }\n }\n ).then(\n response=> {\n callbackFnSuccess(response);\n } \n ).catch(function (error) { \n errorResponse(null, error);\n });\n }\n\n}\n\n\n\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport * as actions from \"../actions\";\n\nexport function getOperatorSignals(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n preference: string\n){\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId +\"/signalpreferences\", {\n responseType: \"json\", \n headers: {},\n params: {\n preference: preference\n }\n }\n ).then(\n response => {\n let record = response.data.data.signals == null ? { id: \"\", preferedSignals: []} : response.data.data.signals; \n dispatch({ type: \"OPR_PREFERED_SIGNALS_SUCCESS\", payload: record});\n }\n )\n .catch(function (error) {\n errorResponse(null, error);\n });\n }\n}\n\nexport function saveOperatorSignals(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string,\n preference: string,\n preferedSignals: any\n){\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId +\"/signalpreferences\", \n preferedSignals, \n {\n responseType: \"json\",\n headers: {},\n params: {\n preference: preference\n }\n }\n ).then(\n response=> {\n callbackFnSuccess(response);\n } \n ).catch(function (error) { \n errorResponse(null, error);\n });\n }\n\n}\n\n\n\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function getQuotasApplied(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n templateId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/templates/\"+ templateId + \"/quotas-applied\", {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => { \n let data = response.data.data.templates == null || (response.data.data.templates.length || 0) === 0 ? [] : response.data.data.templates;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"QUOTAS_APPLIED_GET_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}","import React from \"react\";\nimport { Card, Descriptions, Switch, Tag, Empty, Tooltip, Button, Space, Pagination, Input, Popconfirm, message } from \"antd\";\nimport { EditOutlined, DeleteOutlined, EyeInvisibleFilled, YahooFilled } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from '../../../utils/history';\nimport { closePopover, numberZeroPositive } from \"../../../utils/commonHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport \"./signals.css\";\n\nconst { Search } = Input;\n\ninterface Prop {\n signalListSetPagination: Function,\n signalListSetSearch: Function,\n getSignal: Function,\n getSignals: Function, \n signalDelete: Function,\n signalMaintOpen: Function,\n getTemplate: Function,\n signals: any,\n signalList: any,\n templateDetails: any,\n iscreateOrUpdateTemplate: boolean,\n isread: boolean,\n isdelete: boolean,\n iscreateRules: boolean,\n isreadRules: boolean,\n isupdateRules: boolean,\n isdeleteRules: boolean,\n isGlobalTemplate: boolean\n context: any\n}\n\nclass SignalList extends React.Component<Prop, {}> { \n \n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth) - (window.innerWidth > 575 ? 100 : 0);\n descriptionSpan:number = window.innerWidth > 700 ? 0 : 1;\n \n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n capitalizeFirstLetter(str: string) {\n if (!str) {\n return str;\n } else {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n \n }\n\n componentDidMount() {\n this.props.signalListSetPagination(this.onPaginationChange);\n this.componentUpdate(1);\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.signals.instance !== prevProps.signals.instance) {\n this.componentUpdate(1);\n }\n }\n\n componentUpdate(pageNumber: number) {\n this.props.getSignals(this, this.componentUpdateSuccess, null, this.getTemplateId(), this.props.signals.signalCollectionId, this.props.signals.signalCollectionName, this.props.signals.signalCollectionType, pageNumber, this.props.signalList.searchText);\n };\n\n componentUpdateSuccess = (signals: any) => { \n if ((signals.length || 0) === 0 && (this.props.signalList.searchText || \"\") === \"\") {\n this.props.signalMaintOpen(this, this.drawerWidth, {}, this.props.signals.signalCollectionType);\n }\n }\n\n onPaginationChange = (pageNumber: number) => {\n this.componentUpdate(pageNumber);\n };\n\n onSearch = (searchText: string) => { \n let me = this;\n\n this.props.signalListSetSearch(searchText || \"\"); \n\n setTimeout(function(){\n me.componentUpdate(1);\n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.signalListSetSearch((value || \"\"));\n }\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n\n if ( action === \"delete\" ) {\n this.props.signalDelete(this, this.onSignalDeleteSuccess, null, this.getTemplateId(), record.signalId);\n }\n else if ( action === \"edit\" ) {\n this.props.getSignal(this, this.onGetSignalSuccess, null, this.getTemplateId(), record.signalId);\n }\n }\n\n onGetSignalSuccess = (record:any) => {\n this.props.signalMaintOpen(this, this.drawerWidth, record, this.props.signals.signalCollectionType);\n }\n\n onSignalDeleteSuccess = (signalId:string) => {\n message.success(\"Signal has been successfully deleted\"); \n this.props.getSignals(this, this.onSignalDeleteSuccess2, null, this.getTemplateId(), this.props.signals.signalCollectionId, this.props.signals.signalCollectionName, this.props.signals.signalCollectionType, this.props.signalList.tableConfig.pagination.current, this.props.signalList.searchText);\n this.props.getTemplate(this, null, null, this.getTemplateId());\n }\n\n onSignalDeleteSuccess2 = (signalId:string) => {\n if ((this.props.signalList.tableData.length || 0) === 0) { \n if (this.props.signalList.tableConfig.pagination.current !== 1) {\n this.componentUpdate(this.props.signalList.tableConfig.pagination.current - 1);\n }\n }\n }\n \n confirmDeletion = (record:any) => (\n <Popconfirm\n title={\"Are you sure to delete this signal?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Signal\"> \n <Button data-id=\"signal-list-signal-delete-button\" type=\"default\" icon={<DeleteOutlined />} />\n </Tooltip>\n </Popconfirm>\n );\n\n closePopover = () => (\n document.dispatchEvent(\n new MouseEvent(\"mousedown\", {\n bubbles: true,\n view: window\n })\n )\n );\n\n getSignalName(signalid:string){\n let signalName = \"\";\n const { templateRecord } = this.props.templateDetails;\n\n if(this.props.templateDetails.templateRecord.datapoints.length > 0){ \n let commands = JSON.parse(this.props.templateDetails.templateRecord.datapoints)\n .filter((t:any) => t.type && t.type === \"Command\"); \n commands.map((collection:any) => { \n let signals=collection.values;\n if(!signalName || signalName === \"\"){\n signals.map((signal:any) => { \n if(signalid === signal._id && templateRecord.orgCmdPgnSpns.includes(signal.pgn || '- || signal.spn')){\n signalName = signal.label;\n }\n });\n }\n });\n }\n return signalName ;\n }\n\n \n doesOrgSupportCommandSignal(signalid:string){\n var supported = false; \n let contextOrgCmdPgnSpns = this.props.templateDetails.templateRecord.orgCmdPgnSpns === null? '' :\n this.props.templateDetails.templateRecord.orgCmdPgnSpns;\n if (contextOrgCmdPgnSpns === '-') {\n supported= false;\n return supported;\n }\n if(this.props.templateDetails.templateRecord.datapoints.length > 0){ \n let commands = JSON.parse(this.props.templateDetails.templateRecord.datapoints)\n .filter((t:any) => t.type && t.type === \"Command\"); \n commands.map((collection:any) => { \n let signals=collection.values;\n signals.map((signal:any) => { \n if(signalid === signal._id){\n if (contextOrgCmdPgnSpns.includes((signal.pgn === null? '0':signal.pgn) + \"-\" + (signal.spn===null? '0' : signal.spn))) {\n supported = true; \n }\n }\n });\n }\n \n );\n }\n return supported ;\n }\n \n getLeftMergeRuleName=( (record:any) => {\n let leftMergeRuleName = \"\";\n\n if (record.mergeRule && record.signalRule && record.offlineRule ) {\n leftMergeRuleName = (record.mergeRule.leftMergeRule === record.signalRule.ruleId )?\n record.signalRule.ruleName : record.offlineRule.ruleName\n \n }\n return leftMergeRuleName; \n });\n\n getRightMergeRuleName =( (record:any) => {\n let rightMergeRuleName = \"\";\n\n if (record.mergeRule && record.signalRule && record.offlineRule ) {\n rightMergeRuleName = (record.mergeRule.rightMergeRule === record.signalRule.ruleId )?\n record.signalRule.ruleName : record.offlineRule.ruleName; \n }\n return rightMergeRuleName; \n });\n\n isLeftOffline =( (record:any) => {\n let isLeftOffline = false; \n\n if (record.mergeRule && record.signalRule && record.offlineRule ) {\n isLeftOffline = record.mergeRule.leftMergeRule === record.offlineRule.ruleId;\n }\n return isLeftOffline; \n });\n\n render() {\n \n const { templateRecord } = this.props.templateDetails;\n const contextOrgCmdPgnSpns = templateRecord.orgCmdPgnSpns === null? '' : templateRecord.orgCmdPgnSpns;\n return (\n <>\n {\n ((this.props.signalList.tableData.length || 0) > 0 || ((this.props.signalList.tableData.length || 0) === 0 && this.props.signals.signalList.searchText) && this.props.isread) &&\n <Search\n data-id=\"signal-list-search-field\"\n placeholder=\"Search by signal name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n style={{marginBottom: 20, width: '100%'}}\n value={this.props.signalList.searchText}\n /> \n } \n {\n (this.props.signalList.tableData.length || 0) > 0 &&\n <Card style={{ marginBottom: 15, border:\"0px\"}}\n data-id=\"signal-signal-card\"\n size=\"small\" \n >\n <Pagination \n {...this.props.signalList.tableConfig.pagination}\n style={{ float: 'right'}}\n onChange={this.onPaginationChange}\n />\n </Card>\n } \n {\n (this.props.signalList.tableData.length || 0) === 0 &&\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n }\n {\n this.props.signalList.tableData.map((record:any, index:number) => (\n <Card \n data-id=\"signal-list-signal-card\"\n key={\"signal-\" + record.signalId}\n size=\"small\" \n title={\n <>\n { /* read or modify rules or signal */\n \n ( ( (templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\") ||\n (!templateRecord.templateVisibleToSubOrg && (this.props.iscreateOrUpdateTemplate || this.props.isupdateRules || this.props.isread || this.props.isreadRules \n || this.props.iscreateRules || this.props.isdeleteRules) )\n ) &&\n ( record.signalCollectionType !== \"Command\" ||\n (record.signalCollectionType === \"Command\" && \n contextOrgCmdPgnSpns.includes((record.pgn===null ? '0': record.pgn) + '-' + (record.spn===null? '1':record.spn))\n )\n ) \n ) && \n //A user with an admin role can delete a collection for a global template defined in the current org, but is visible to suborg\n // however, an admin role in suborg only, who is viewing the global template defined in the prevous org yet the local suborg does not grant the permission for command\n // cannot delete the global template's command collection\n // TBD OPS-3092 it seems there is a defect, that an admin role in the suborg only can delete the generic collection of global template defined in the parent org \n // i.e, if Parker make a global template availble to the suborg, the suborg's admin can delete the collection of the Parker's global template\n // UI and db function may need a new flag isContextOrgSameAsTemplateOrg\n // note; contextOrgCmdPgnSpns means support the command in the local suborg even though the template is defined at parent org\n \n // a user with delete template permission can delete generic or command collection if the org has permission for command.\n // TBD OPS-3092 it seems there is a defect that a user cannot delete a GPS or IAQN diagnostic collection\n // UI and db function need to check a new flag isContextOrgSameAsTemplateOrg\n \n <Tooltip title=\"Edit Signal\">\n <>\n <span className=\"pr-5\">Signal Name:</span>\n <Tooltip title=\"Edit Signal\">\n <a href=\"# \" onClick={(e) => {this.onAction(e, record, \"edit\")}}>\n {record.label} \n </a>\n </Tooltip> \n </>\n </Tooltip>\n }\n\n { // global templates supports more command pgns/features than the suborg\n // or rare case disable the org permission on command control after previously enable it\n ( ( (templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\") ||\n (!templateRecord.templateVisibleToSubOrg && (this.props.iscreateOrUpdateTemplate || this.props.isupdateRules || this.props.isread || this.props.isreadRules \n || this.props.iscreateRules || this.props.isdeleteRules) \n )\n ) &&\n ( (record.signalCollectionType === \"Command\" && \n !contextOrgCmdPgnSpns.includes((record.pgn === null ? '0' : record.pgn )+ '-' + (record.spn===null? '1': record.spn))\n )\n ) \n ) && \n <>\n <EyeInvisibleFilled className=\"invisible-signal\"/>\n \n <Tooltip title=\"Command Not Applicable to the Org\">\n <a href = \"#\" style={{ backgroundColor:'#EBEBEB', color: '#A6A6A6', textDecorationLine: 'line-through' }}>Signal Name: {record.label} </a>\n </Tooltip> \n </>\n\n }\n { \n ( (templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() !== \"admin\") ||\n (!templateRecord.templateVisibleToSubOrg && !this.props.iscreateOrUpdateTemplate && \n !this.props.isupdateRules && !this.props.iscreateRules && !this.props.isreadRules && !this.props.isdeleteRules) \n ) && \n <>\n <span className=\"pr-5\">Signal Name:</span>\n <span>{record.label} </span>\n </>\n }\n </>\n\n } \n style={{ marginBottom: 15}}\n className={record.signalCollectionType === \"GPS\" && !(record.signalRule && (numberZeroPositive(record.signalRule.criticalLowValue) || numberZeroPositive(record.signalRule.criticalHighValue) || numberZeroPositive(record.signalRule.warningLowValue) || numberZeroPositive(record.signalRule.warningHighValue))) ? \"gps-card-body\" : \"\" }\n extra={\n <>\n \n <Space size=\"middle\" style={{ float: 'left' }}>\n { \n <>\n {\n ( (templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\" &&\n (record.signalCollectionType !== \"Command\" ||\n (record.signalCollectionType === \"Command\" && \n contextOrgCmdPgnSpns.includes((record.pgn===null? '0':record.pgn) + '-' + (record.spn===null? '1':record.spn))\n )\n ) \n ) \n || \n (!templateRecord.templateVisibleToSubOrg && record.signalCollectionType !== \"GPS\" && record.signalCollectionType !== \"IQAN Diagnostics\" &&\n (record.signalCollectionType !== \"Command\" || \n (record.signalCollectionType === \"Command\" && (contextOrgCmdPgnSpns === null || record.pgn === null || contextOrgCmdPgnSpns.includes(record.pgn)))\n ) &&\n this.props.isdelete\n )\n ) &&\n this.confirmDeletion(record)\n } \n {\n ( ( (templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\") ||\n (!templateRecord.templateVisibleToSubOrg &&\n (this.props.iscreateOrUpdateTemplate || this.props.isupdateRules || this.props.isread || this.props.isreadRules \n || this.props.iscreateRules || this.props.isdeleteRules)\n )\n ) &&\n ( record.signalCollectionType !== \"Command\" ||\n (record.signalCollectionType === \"Command\" && \n contextOrgCmdPgnSpns.includes((record.pgn===null? '0': record.pgn) + '-' + (record.spn===null? '1': record.spn))\n )\n ) \n ) &&\n <Tooltip title=\"Edit Signal\">\n <Button data-id=\"signal-list-signal-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.onAction(e, record, \"edit\")}}/>\n </Tooltip>\n } \n \n </>\n }\n </Space>\n \n </>\n }\n >\n {\n (record.signalCollectionType === \"none\" || record.signalCollectionType === \"Command\") &&\n <Descriptions bordered column={2}>\n <Descriptions.Item label=\"PGN\" span={1 + this.descriptionSpan}>{record.pgn}</Descriptions.Item>\n <Descriptions.Item label=\"PGN Name\" span={1 + this.descriptionSpan}>{record.pgnName}</Descriptions.Item>\n \n {\n (record.signalCollectionType === \"none\" && record.requestPgn && record.requestInterval) && \n <Descriptions.Item label=\"PGN Interval\" span={1 + this.descriptionSpan}>{record.requestInterval}</Descriptions.Item>\n }\n { \n (record.signalCollectionType === \"none\" && record.requestPgn && record.pgnDestinationAddress) &&\n <Descriptions.Item label=\"Source Address\" span={1 + this.descriptionSpan}>{record.pgnDestinationAddress}</Descriptions.Item> \n }\n { \n (record.signalCollectionType === \"none\" && record.requestPgn && record.pgnSourceAddress) &&\n <Descriptions.Item label=\"Destination Address\" span={1 + this.descriptionSpan}>{record.pgnSourceAddress}</Descriptions.Item> \n }\n\n <Descriptions.Item label=\"SPN\" span={1 + this.descriptionSpan}>{record.spn}</Descriptions.Item>\n <Descriptions.Item label=\"SPN Name\" span={1 + this.descriptionSpan}>{record.spnName}</Descriptions.Item>\n\n <Descriptions.Item label=\"Bit Length\" span={1 + this.descriptionSpan}>{record.bitLength}</Descriptions.Item>\n <Descriptions.Item label=\"First Bit\" span={1 + this.descriptionSpan}>{record.firstBit}</Descriptions.Item>\n\n <Descriptions.Item label=\"Offset\" span={1 + this.descriptionSpan}>{record.offset}</Descriptions.Item>\n <Descriptions.Item label=\"Scaling\" span={1 + this.descriptionSpan}>{record.scaling}</Descriptions.Item>\n\n <Descriptions.Item label=\"Unit\" span={1 + this.descriptionSpan}>{record.unit}</Descriptions.Item>\n <Descriptions.Item label=\"Source\" span={1 + this.descriptionSpan}><span className=\"break-long-string\">{record.source}</span></Descriptions.Item>\n\n {\n record.signalCollectionType !== \"Command\" && \n <Descriptions.Item label=\"Source Address\" span={1 + this.descriptionSpan}>{record.sourceAddress}</Descriptions.Item>\n }\n\n {\n record.signalCollectionType !== \"Command\" && \n <Descriptions.Item label=\"J1939 Error Checking\" span={1 + this.descriptionSpan}>\n <Switch checked={record.j1939Error} />\n </Descriptions.Item>\n }\n \n {\n record.canHeader && \n this.doesOrgSupportCommandSignal(record.commandId) && \n <Descriptions.Item label=\"CAN Header\" span={2}><span className=\"break-long-string\">{record.canHeader}</span></Descriptions.Item>\n }\n {\n record.commandId && \n <Descriptions.Item label=\"Corresponding Command Name\" span={2}><span className=\"break-long-string\">{this.getSignalName(record.commandId)}</span></Descriptions.Item> \n \n }\n {\n record.signalCollectionType === \"Command\" && record.canAddress && \n <Descriptions.Item label={record.pgn===65305 ? \"Gateway CAN Address\" : \"Destination Controller CAN Address\"}\n span={1 + this.descriptionSpan}>{record.canAddress}</Descriptions.Item>\n }\n {\n record.format && (record.format || \"\") !== \"\" && \n <Descriptions.Item label=\"Format\" span={1 + this.descriptionSpan}>{this.capitalizeFirstLetter(record.format)}</Descriptions.Item>\n }\n {\n (record.signalCollectionType === \"Command\" && record.min &&\n (record.format === \"integer\" || record.format === \"float\")) &&\n <Descriptions.Item label=\"Min\" span={1 + this.descriptionSpan}>{record.min}</Descriptions.Item>\n }\n {\n (record.signalCollectionType === \"Command\" && record.format === \"text\" ) &&\n <Descriptions.Item label=\"Multi-package\" span={1 + this.descriptionSpan}>{(record.max || \"\") === \"140\" ? \"Yes\" : \"No\"}</Descriptions.Item>\n }\n {\n record.signalCollectionType === \"Command\" && record.max &&\n <Descriptions.Item label=\"Max\" span={1 + this.descriptionSpan}>{record.max}</Descriptions.Item> \n }\n \n </Descriptions>\n }\n {\n record.signalCollectionType === \"IQAN Diagnostics\" &&\n <Descriptions bordered column={2}>\n <Descriptions.Item label=\"Source\">{record.source}</Descriptions.Item>\n </Descriptions>\n }\n {\n record.signalRule &&\n (\n record.signalRule.criticalLowValue !== null || record.signalRule.criticalHighValue !== null || \n record.signalRule.warningLowValue !== null || record.signalRule.warningHighValue !== null ||\n record.signalRule.infoLowValue !== null || record.signalRule.infoHighValue !== null\n ) &&\n <Card size=\"small\" key={\"rule-\" + record.signalId} className=\"mt-20\">\n <div className=\"rule-blocks\">\n <div>\n <span className=\"pr-5\">Alarm</span>\n <strong>{record.signalRule.ruleName}</strong>\n </div>\n {\n (record.signalRule.criticalLowValue !== null || record.signalRule.criticalHighValue !== null || record.signalRule.warningLowValue !== null || record.signalRule.warningHighValue !== null) &&\n <div>\n <span className=\"rule-critical\">{record.signalRule.criticalLowValue !== null || record.signalRule.criticalHighValue !== null ? \"Critical\" : \"\"}</span>\n { \n (record.signalRule.criticalLowValue !== null || record.signalRule.criticalHighValue !== null) && (record.signalRule.warningLowValue !== null || record.signalRule.warningHighValue !== null) &&\n <span className=\"pl-5 pr-5\">+</span>\n }\n <span className=\"rule-warning\">{record.signalRule.warningLowValue !== null || record.signalRule.warningHighValue !== null ? \"Warning\" : \"\"}</span>\n <span className=\"pl-5\">when {record.label} is</span>\n </div>\n }\n {\n (record.signalRule.infoLowValue !== null || record.signalRule.infoHighValue !== null) &&\n <div>\n <span className=\"rule-info\">Info</span>\n </div>\n }\n <div className=\"mt-10\">\n { \n numberZeroPositive(record.signalRule.infoLowValue) &&\n <Tag color=\"#1e90ff\">\n <div>{record.signalRule.infoLowValue}</div>\n <div>{record.signalRule.infoLowLabel}</div>\n </Tag>\n }\n { \n numberZeroPositive(record.signalRule.criticalLowValue) &&\n <Tag color=\"#9b0000\">\n <div>{record.signalRule.criticalLowValue}</div>\n <div>{record.signalRule.criticalLowLabel}</div>\n </Tag>\n }\n { \n numberZeroPositive(record.signalRule.warningLowValue) &&\n <Tag color=\"#efb20e\">\n <div>{record.signalRule.warningLowValue}</div>\n <div>{record.signalRule.warningLowLabel}</div>\n </Tag>\n }\n {\n ((record.signalRule.criticalLowValue !== null || record.signalRule.warningLowValue !== null) &&( record.signalRule.criticalHighValue !== null || record.signalRule.warningHighValue !== null)) &&\n <Tag color=\"#e6e6e6\">\n <div> </div>\n <div> </div>\n </Tag>\n } \n { \n numberZeroPositive(record.signalRule.warningHighValue) &&\n <Tag color=\"#efb20e\">\n <div>{record.signalRule.warningHighValue}</div>\n <div>{record.signalRule.warningHighLabel}</div>\n </Tag>\n }\n { \n numberZeroPositive(record.signalRule.criticalHighValue) &&\n <Tag color=\"#9b0000\">\n <div>{record.signalRule.criticalHighValue}</div>\n <div>{record.signalRule.criticalHighLabel}</div>\n </Tag>\n }\n { \n numberZeroPositive(record.signalRule.infoHighValue) &&\n <Tag color=\"#1e90ff\">\n <div>{record.signalRule.infoHighValue}</div>\n <div>{record.signalRule.infoHighLabel}</div>\n </Tag>\n }\n \n \n </div>\n </div>\n \n </Card>\n \n } \n \n {\n \n record.signalIncrementalRule &&\n <Card size=\"small\" key=\"1\" className=\"mt-20\">\n <div style={{margin:'10px',textAlign:'center'}}>\n <div>\n <span className=\"pr-5\">Incremental Value</span>\n \n </div>\n <div><strong>{record.signalIncrementalRule.ruleValue}</strong></div>\n </div>\n </Card>\n }\n {\n \n record.offlineRule &&\n <Card size=\"small\" key=\"2\" className=\"mt-20\">\n <div style={{margin:'10px',textAlign:'center'}}>\n <div><span className=\"pr-5\"> Offline <strong>{record.offlineRule.ruleName}</strong></span></div>\n <div> <Tag color=\"blue\">\n <div><strong>{record.offlineRule.offlineDuration +\" \" + (record.offlineRule.offlineDuration > 1 ? record.offlineRule.offlineSince:record.offlineRule.offlineSince.substring(0,record.offlineRule.offlineSince.length-1))}</strong>\n </div>\n <div>over</div>\n </Tag></div>\n </div>\n </Card>\n }\n {\n\n record.mergeRule &&\n <Card size=\"small\" key=\"3\" className=\"mt-20\">\n <div style={{margin:'10px',textAlign:'center'}}>\n <div><span className=\"pr-5\">Merge <strong>{record.mergeRule.mergeRuleName}</strong></span></div>\n <Tag color= {this.isLeftOffline(record)?\"blue\":\"orange\"}><strong>{this.getLeftMergeRuleName(record)}</strong></Tag>\n {\" \" + record.mergeRule.mergeRuleOperator + \" \"}\n <Tag color={this.isLeftOffline(record)?\"orange\":\"blue\"}><strong>{this.getRightMergeRuleName(record)}</strong></Tag>\n </div>\n </Card>\n }\n </Card> \n \n )\n )}\n {\n (this.props.signalList.tableData.length || 0) > 0 &&\n <Pagination \n {...this.props.signalList.tableConfig.pagination}\n style={{ float: 'right'}}\n onChange={this.onPaginationChange}\n />\n }\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n signals: state.templateDetailsReducers.templateDetailsState.signals,\n signalList: state.templateDetailsReducers.templateDetailsState.signals.signalList,\n templateDetails: state.templateDetailsReducers.templateDetailsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(SignalList);","import React from \"react\";\nimport { Drawer, Button, Space, Tooltip, message } from \"antd\";\nimport { PlusOutlined, LeftOutlined, RightOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from '../../../utils/history';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport SignalList from \"../signals/SignalList\";\n\nimport \"./signals.css\";\n\ninterface Prop {\n signalsClose: Function, \n getSignals: Function, \n signalMaintOpen: Function,\n signalListSetSearch: Function,\n getSignalCollections: Function,\n signals: any,\n signalCollections: any,\n templateDetails: any,\n iscreateOrUpdateTemplate: boolean,\n iscreate: boolean,\n isread: boolean,\n isdelete: boolean,\n iscreateRules: boolean,\n isreadRules: boolean,\n isupdateRules: boolean,\n isdeleteRules: boolean,\n isGlobalTemplate: boolean,\n context: any,\n}\n\nclass Signals extends React.Component<Prop, {}> { \n \n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth - (window.innerWidth > 575 ? 100 : 0));\n\n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n onDrawerClose = () => {\n if (this.props.signalCollections.refreshOnUpdate) {\n this.props.getSignalCollections(this, null, null, this.getTemplateId(), this.props.signalCollections.tableConfig.pagination.current, this.props.signalCollections.searchText);\n } \n this.props.signalsClose(this);\n };\n \n gotoCollection = (e:any, direction:string) => {\n e.preventDefault();\n\n const \n tableData = this.props.signalCollections.tableData;\n let \n currentId = this.props.signals.signalCollectionId,\n currentName = \"\",\n currentType = \"\",\n currentRecordIndex = -1;\n\n tableData.forEach((record: any, index: number) => {\n if (record.signalCollectionId === currentId) {\n currentRecordIndex = index;\n }\n });\n\n if (currentRecordIndex !== -1) {\n if (direction === \"next\" ) {\n currentRecordIndex = (currentRecordIndex === tableData.length - 1 ? 0 : currentRecordIndex + 1);\n }\n if (direction === \"previous\") {\n currentRecordIndex = (currentRecordIndex === 0 ? tableData.length - 1 : currentRecordIndex - 1);\n }\n currentId = tableData[currentRecordIndex].signalCollectionId;\n currentName = tableData[currentRecordIndex].name;\n currentType = tableData[currentRecordIndex].type;\n \n this.props.signalListSetSearch(\"\"); \n this.props.getSignals(this, null, null, this.getTemplateId(), currentId, currentName, currentType, 1, \"\");\n }\n else {\n message.error(\"Unable navigate to \" + direction + \" collection\");\n }\n };\n\n addSignal = (e:any, type:any) => {\n e.preventDefault();\n \n this.props.signalMaintOpen(this, this.drawerWidth, {}, type);\n };\n\n render() {\n \n const { title, width, visible } = this.props.signals;\n const { templateRecord } = this.props.templateDetails; \n let disableAddSignal = (\n (templateRecord.allowedMaxNoOfSignals && templateRecord.noOfSignals &&\n templateRecord.allowedMaxNoOfSignals <= templateRecord.noOfSignals)\n || ( this.props.signals.signalCollectionType === \"Command\" && templateRecord.orgCmdPgnSpns === '-')\n );\n let disableTooltip = this.props.signals.signalCollectionType === \"Command\" && templateRecord.orgCmdPgnSpns === '-' ?\n \"Local org does not support remote control\" :\n \"Exceeds the max no. of signals defined in the quota of assets applied to the template\";\n let addSignalTooltip = disableAddSignal ? disableTooltip : \"Add Signal\";\n \n return (\n <Drawer\n data-id=\"signals-drawer\" \n title={title}\n width={width}\n onClose={this.onDrawerClose}\n visible={visible}\n zIndex={2}\n destroyOnClose={true}\n footer={\n <>\n <Space size=\"middle\" style={{ float: 'left' }}>\n {\n (this.props.signalCollections.tableData.length || 0) > 1 && this.props.isread &&\n <>\n <Tooltip title=\"Previous Collection\">\n <Button data-id=\"signals-previous-collection-button\" type=\"default\" onClick={(e) => {this.gotoCollection(e, \"previous\")}}>\n <LeftOutlined /><span className=\"pl-5\">Collection</span>\n </Button>\n </Tooltip>\n <Tooltip title=\"Next Collection\">\n <Button data-id=\"signals-next-collection-button\" type=\"default\" onClick={(e) => {this.gotoCollection(e, \"next\")}}>\n <span className=\"pr-5\">Collection</span><RightOutlined /> \n </Button>\n </Tooltip>\n </>\n }\n {\n ((templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\") \n || (!templateRecord.templateVisibleToSubOrg && this.props.iscreate &&\n (this.props.signals.signalCollectionType !== \"GPS\" &&\n this.props.signals.signalCollectionType !== \"IQAN Diagnostics\"\n )\n )) &&\n <Tooltip title={addSignalTooltip}>\n <Button disabled={disableAddSignal}data-id=\"signals-new-signal-button\" type=\"default\" icon={<PlusOutlined />} onClick={(e) => {this.addSignal(e,this.props.signals.signalCollectionType)}}>\n <span className=\"pl-5\">Signal</span>\n </Button> \n </Tooltip> \n }\n </Space>\n <Button data-id=\"signals-previous-close-button\" type=\"default\" style={{ float: 'right' }} onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n </>\n }\n >\n <SignalList iscreateOrUpdateTemplate={this.props.iscreateOrUpdateTemplate} isread={this.props.isread} isdelete={this.props.isdelete}\n iscreateRules={this.props.iscreateRules} isreadRules={this.props.isreadRules} isupdateRules={this.props.isupdateRules} isdeleteRules={this.props.isdeleteRules}\n isGlobalTemplate={this.props.isGlobalTemplate}/>\n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n signals: state.templateDetailsReducers.templateDetailsState.signals,\n signalCollections: state.templateDetailsReducers.templateDetailsState.tabs[0],\n templateDetails: state.templateDetailsReducers.templateDetailsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Signals);","import React from \"react\";\nimport { Form, Row, Col, Input, Select, InputNumber, Card, Tooltip, Button, Space, Collapse } from 'antd';\nimport { DeleteOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nconst { Option } = Select;\n\ninterface Prop {\n formRef: any;\n\n signalMaint: any\n iscreateRules: boolean,\n isupdateRules: boolean,\n isdeleteRules: boolean,\n isreadRules: boolean,\n isGlobalTemplate: boolean,\n isadmin: boolean,\n leftMergeRules:any,\n rightMergeRules:any,\n setLeftMergeRules:Function,\n setRightMergeRules:Function\n\n}\n\ninterface State {\n ruleType: string,\n openMergePanel:any\n}\n\nconst { Panel } = Collapse;\n\nclass SignalRule extends React.Component<Prop, State> {\n \n state: State = {\n ruleType: \"\",\n openMergePanel:\"0\"\n };\n\n componentDidMount() {\n this.componentUpdate(); \n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.signalMaint.instance !== prevProps.signalMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n const me = this;\n if (me.props.formRef == null) {\n setTimeout(function() {\n me.setComponentState(me);\n }, 250); \n }\n else {\n me.setComponentState(me);\n }\n }\n\n setComponentState = (me: any) => { \n if (me.props.formRef != null) {\n me.setState({\n ruleType: me.props.formRef.getFieldValue(\"ruleType\"),\n incrementalRuleType:me.props.formRef.getFieldValue(\"incrementalRuleType\"),\n openMergePanel:(me.props.formRef.getFieldValue(\"mergeRuleId\")||\"\")!==\"\"?\"1\":\"0\" \n }); \n }\n }\n\n onRuleTypeChange = (value: string) => { \n this.setState({ruleType: value });\n }\n\n deleteRule = (e: any) => { \n e.preventDefault();\n e.stopPropagation();\n\n this.props.formRef.setFieldsValue({\n // ruleId: \"\",\n ruleName: \"\",\n ruleType: \"alarm\",\n criticalLowValue: \"\",\n warningLowValue: \"\",\n warningHighValue: \"\",\n criticalHighValue: \"\",\n infoLowValue: \"\",\n infoHighValue: \"\"\n });\n this.setComponentState(this); \n }\n\n deleteIncrementalRule=(e:any)=>{\n e.preventDefault();\n e.stopPropagation();\n\n this.props.formRef.setFieldsValue({\n incrementalRuleName:\"\",\n incrementRuleType:\"incremental\",\n incrementalRuleValue:\"\"\n });\n this.setComponentState(this); \n }\n\n deleteOfflineRule=(e:any)=>{\n e.preventDefault();\n e.stopPropagation();\n\n this.props.formRef.setFieldsValue({\n offlineSince:\"\",\n offlineRuleName:\"\",\n offlineDuration:\"\"\n });\n this.setComponentState(this); \n }\n\n onChangeLeftMergeRule=(value:any)=>{\n this.setLeftMergeRules(value);\n } \n\n onChangeRightMergeRule=(value:any)=>{\n this.setRightMergeRules(value);\n } \n\n setLeftMergeRules=(value:any)=>{\n this.props.setLeftMergeRules(value);\n }\n\n setRightMergeRules=(value:any)=>{\n this.props.setRightMergeRules(value);\n }\n\n deleteMergeRule=(e:any)=>{\n e.preventDefault();\n e.stopPropagation();\n\n this.props.formRef.setFieldsValue({\n leftMergeRule:\"\",\n rightMergeRule:\"\",\n mergeRuleOperator:\"\"\n });\n this.setComponentState(this); \n }\n\n setOpenMergePanel=(e:any)=>{\n this.setState(prevState => ({\n ...prevState,\n openMergePanel:prevState.openMergePanel===\"1\"?\"0\":\"1\"\n }))\n }\n \n render() {\n return (\n <div>\n {\n <>\n <Card \n key=\"1\"\n size=\"small\" \n title={\"Rule (1)\" } \n extra={\n <>\n {\n this.props.formRef.getFieldValue(\"ruleId\") &&\n <Space size=\"middle\" style={{ float: 'left' }}>\n {(this.props.isGlobalTemplate && this.props.isadmin || !this.props.isGlobalTemplate && this.props.isdeleteRules) &&\n <Tooltip title=\"Delete Rule\">\n <Button type=\"default\" icon={<DeleteOutlined />} onClick={(e) => {this.deleteRule(e)}}/>\n </Tooltip>}\n </Space>\n }\n </>\n }\n >\n \n <Form.Item \n name=\"ruleId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"mergeRules\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Rule Name\"\n name=\"ruleName\" \n >\n <Input maxLength={255} \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules} />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Rule Type\"\n name=\"ruleType\" \n >\n <Select \n onChange={this.onRuleTypeChange}\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n >\n <Option key=\"alarm\" value=\"alarm\">Alarm</Option>\n <Option key=\"info\" value=\"info\">Info</Option>\n </Select> \n </Form.Item>\n </Col> \n </Row> \n {\n this.state.ruleType === \"alarm\" && \n <> \n <Row gutter={8}>\n <Col xs={8} md={5}>\n <Form.Item\n label=\"Critical Min.\"\n className =\"alert-critical\"\n name=\"criticalLowValue\" \n >\n <InputNumber \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n min={-999000000} \n max={999000000} \n style={{ width: '100%' }} \n //precision={12} \n placeholder=\"Less than\"\n />\n </Form.Item>\n </Col> \n <Col xs={8} md={5}>\n <Form.Item\n label=\"Warning Min.\"\n className =\"alert-warning\"\n name=\"warningLowValue\" \n >\n <InputNumber \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n min={-999000000} \n max={999000000} \n style={{ width: '100%' }} \n //precision={12} \n placeholder=\"Less than\"\n />\n </Form.Item>\n </Col> \n {/* </Row> */}\n <Col xs={8} md={4}>\n <div className=\"center-div\" style={{ padding: \"10px 0 15px\", color: \"rgba(0, 0, 0, 0.85)\" }}>Normal Threshold</div>\n </Col>\n {/* <Row gutter={8}> */}\n <Col xs={8} md={5}>\n <Form.Item\n label=\"Warning Max.\"\n name=\"warningHighValue\" \n className =\"alert-warning\"\n >\n <InputNumber \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n min={-999000000} \n max={999000000} \n style={{ width: '100%' }} \n //precision={12} \n placeholder=\"Greater than\"\n />\n </Form.Item>\n </Col> \n <Col xs={8} md={5}>\n <Form.Item\n label=\"Critical Max.\"\n name=\"criticalHighValue\" \n className =\"alert-critical\"\n >\n <InputNumber \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n min={-999000000} \n max={999000000} \n style={{ width: '100%' }} \n //precision={12} \n placeholder=\"Greater than\"\n />\n </Form.Item>\n </Col> \n </Row> \n </>\n } \n {\n this.state.ruleType === \"info\" &&\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Info Minimum\"\n name=\"infoLowValue\" \n >\n <InputNumber \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n min={-999000000} \n max={999000000} \n style={{ width: '100%' }} \n //precision={12} \n placeholder=\"Less than\"\n />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Info Maximum\"\n name=\"infoHighValue\" \n >\n <InputNumber \n disabled={this.props.isGlobalTemplate && this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n min={-999000000} \n max={999000000} \n style={{ width: '100%' }} \n //precision={12} \n placeholder=\"Greater than\"\n />\n </Form.Item>\n </Col> \n </Row> \n }\n \n </Card> \n <div style={{marginTop:'10px'}}>\n <Card \n key=\"2\"\n size=\"small\" \n \n title={\"Rule (2)\" } \n extra={\n <>\n {\n this.props.formRef.getFieldValue(\"incrementalRuleId\") &&\n <Space size=\"middle\" style={{ float: 'left' }}>\n {(this.props.isGlobalTemplate && this.props.isadmin || !this.props.isGlobalTemplate && this.props.isdeleteRules) &&\n <Tooltip title=\"Delete Rule\">\n <Button type=\"default\" icon={<DeleteOutlined />} onClick={(e) => {this.deleteIncrementalRule(e)}}/>\n </Tooltip>}\n </Space>\n }\n </>\n }\n >\n <Form.Item \n name=\"incrementalRuleId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n name=\"mergeRuleId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Rule Name\"\n name=\"incrementalRuleName\" \n >\n <Input maxLength={255} \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules} />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Rule Type\"\n name=\"incrementalRuleType\" \n >\n <Select \n onChange={this.onRuleTypeChange}\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules}\n >\n <Option key=\"incremental\" value=\"incremental\">Incremental</Option>\n \n </Select> \n </Form.Item>\n </Col> \n </Row> \n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n name=\"incrementalRuleValue\"\n label=\"Incremental Value\"\n style={{width:'100%'}}\n >\n <InputNumber \n \n min={-999000000} \n max={999000000} \n style={{ width: '100%' }} \n />\n </Form.Item>\n </Col> \n \n </Row> \n \n </Card>\n </div>\n <div style={{marginTop:'10px'}}>\n <Card \n key=\"3\"\n size=\"small\" \n \n title={\"Rule (3)\" } \n extra={\n <>\n {\n this.props.formRef.getFieldValue(\"offlineRuleId\") &&\n <Space size=\"middle\" style={{ float: 'left' }}>\n {(this.props.isGlobalTemplate && this.props.isadmin || !this.props.isGlobalTemplate && this.props.isdeleteRules) &&\n <Tooltip title=\"Delete Rule\">\n <Button type=\"default\" icon={<DeleteOutlined />} onClick={(e) => {this.deleteOfflineRule(e)}}/>\n </Tooltip>}\n </Space>\n }\n </>\n }\n >\n <Form.Item \n name=\"offlineRuleId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Row gutter={16}>\n <Col className=\"gutter-row\" span={12}>\n <Form.Item\n label=\"Rule Name\"\n name=\"offlineRuleName\" \n >\n <Input maxLength={255} \n />\n </Form.Item>\n </Col>\n <Col className=\"gutter-row\" span={6}>\n <Form.Item\n name=\"offlineSince\" label=\"Offline Since\">\n <Select>\n {/* <Option key=\"hours\" value=\"hours\">Hours</Option> */}\n <Option key=\"days\" value=\"days\">Days</Option>\n <Option key=\"weeks\" value=\"weeks\">Weeks</Option>\n <Option key=\"months\" value=\"months\">Months</Option>\n </Select>\n </Form.Item>\n </Col>\n <Col className=\"gutter-row\" span={6}>\n <Form.Item\n label=\"\"\n name=\"offlineDuration\"\n style={{ display: 'inline-block', width: '50%',marginTop:'30px'}}\n >\n \n <Input\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules} />\n </Form.Item>\n </Col>\n \n </Row>\n </Card>\n </div>\n {\n \n this.props.leftMergeRules && this.props.leftMergeRules.length >0 &&\n <Row gutter={8}>\n <Col span={24}>\n <Collapse defaultActiveKey={[\"0\"]} activeKey={[this.state.openMergePanel]} onChange={this.setOpenMergePanel} style={{marginTop:'25px'}}>\n <Panel \n header=\"Merge Rules\"\n key=\"1\"\n extra={\n <>\n {\n this.props.formRef.getFieldValue(\"mergeRuleId\") &&\n <Space size=\"middle\" style={{ float: 'left' }}>\n {\n <Tooltip title=\"Delete Merge Rule\">\n <Button type=\"default\" icon={<DeleteOutlined />} onClick={(e) => {this.deleteMergeRule(e)}}/>\n </Tooltip>}\n </Space>\n }\n </>\n }\n \n >\n <Row gutter={16}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Merge Rule Name\"\n name=\"mergeRuleName\" \n >\n <Input maxLength={255} \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateRules && !this.props.isupdateRules} />\n </Form.Item>\n </Col>\n </Row>\n \n <Row gutter={16}>\n <Col className=\"gutter-row\" span={10}>\n <Form.Item\n label=\"Select Rule\"\n name=\"leftMergeRule\"\n > \n <Select \n \n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n allowClear\n onChange={this.onChangeLeftMergeRule}\n > \n {this.props.leftMergeRules && this.props.leftMergeRules.map((mergeRule:any, index:number) => (\n <Option key={mergeRule.ruleId} value={mergeRule.ruleId}>\n {mergeRule.ruleName}\n </Option>\n ))} \n \n </Select> \n\n \n \n </Form.Item> \n \n </Col>\n <Col className=\"gutter-row\" span={4}>\n <Form.Item\n label=\"Operator\"\n name=\"mergeRuleOperator\" \n \n // checked by DB function, so that we allow the customer to change mind to stop configuring the merge ruile\n // otherwise it will hang there once left or right rule is entered and then customer decide to not configure the merge rule\n // rules={[\n // ({ getFieldValue }) => ({\n // // validator(_, value) {\n // // if((getFieldValue('leftMergeRule')||\"\")!==\"\" && (getFieldValue('rightMergeRule')||\"\")!==\"\" && (value||\"\")===\"\")\n // // {\n \n // // return Promise.reject(new Error('Please select the operator'));\n // // }\n // return Promise.resolve();\n // },\n // }),\n // ]} \n > \n <Select allowClear>\n <Option key=\"and\" value=\"and\">AND</Option> \n {/* <Option key=\"or\" value=\"or\">OR</Option> */}\n </Select> \n \n </Form.Item>\n </Col>\n <Col className=\"gutter-row\" span={10}>\n <Form.Item\n label=\"Select Rule\"\n name=\"rightMergeRule\" \n rules={[\n ({ getFieldValue }) => ({\n validator(_, value) {\n if((getFieldValue('leftMergeRule')||\"\")!==\"\" && (getFieldValue('mergeRuleOperator')||\"\")!==\"\" && (value||\"\")===\"\" && getFieldValue('mergeRules').length>1)\n {\n return Promise.reject(new Error('Please select the rule to merge'));\n }\n return Promise.resolve();\n },\n }),\n ]} \n > \n \n <Select \n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n allowClear\n onChange={this.onChangeRightMergeRule} \n // onChange={this.onChangeMergeRule}\n > \n {this.props.rightMergeRules && this.props.rightMergeRules.map((rule2:any, index:number) => (\n <Option key={rule2.ruleId} value={rule2.ruleId}>\n {rule2.ruleName}\n </Option>\n ))} \n \n </Select> \n </Form.Item>\n </Col>\n \n </Row>\n \n </Panel>\n </Collapse>\n </Col>\n </Row>\n\n }\n </>\n }\n\n </div>\n \n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n signalMaint: state.templateDetailsReducers.templateDetailsState.signals.signalMaint\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(SignalRule);","import { CheckOutlined, CloseOutlined } from '@ant-design/icons';\nimport { AutoComplete, Button, Col, Collapse, Form, Input, InputNumber, Row, Select, Switch, message } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport React from \"react\";\n\nimport { errorResponse, resetFormErrors, successResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { numberZeroPositive, scrollToElement } from \"../../../utils/commonHelpers\";\nimport { ErrorAlert, SuccessAlert } from \"../../../utils/Components/formAlerts\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport history from '../../../utils/history';\nimport * as actions from \"../actions\";\n\nimport SignalRule from \"./SignalRule\";\n\nimport \"./signalMaint.css\";\n\n\n\nconst { TextArea } = Input;\n\nconst { Option } = Select;\nconst { Panel } = Collapse;\ninterface commnadSignalType{\n\n signalId: string, \n name: string\n}\n\ninterface Prop {\n getJ1939s: Function,\n getCommandPgns: Function,\n getCommandControllers: Function,\n signalMaintSubmit: Function,\n getSignals: Function,\n signals: any,\n signalMaint: any,\n signalList: any,\n iscreateOrUpdateTemplate: boolean,\n iscreate: boolean,\n isread: boolean,\n iscreateRules: boolean,\n isupdateRules: boolean,\n isreadRules: boolean,\n isdeleteRules: boolean,\n isGlobalTemplate: boolean, \n isadmin: boolean,\n templateDetails: any,\n getTemplate: Function,\n getUnits: Function,\n accept: Function,\n cancel: Function,\n context: any\n}\n\ninterface State {\n signalId: string,\n name: string,\n mode: string,\n pgn: number,\n spn: number,\n sourceName: string,\n matchSourceAddress: boolean,\n sourceAddress: number,\n //signalCollectionType: string,\n ruleType: string\n\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n\n format?: string;\n firstBit?: number;\n bitLength?: number;\n offset?: number,\n scaling?: number,\n min?: number;\n max?: number;\n multiPackage: string;\n commandSignals : Array<commnadSignalType>;\n commandId?: string;\n canAddress?: number;\n uom:string;\n unit:string;\n unitSymbols:Array<String>;\n viewRequestPGN: boolean;\n activeKey: string;\n rules:any;\n leftMergeRules:any;\n rightMergeRules:any,\n messageArray:object[],\n inputValue:string,\n c2dWhitelist: any,\n newMessageText: any,\n multiPackageError: Boolean,\n expandPanel:any\n}\n\n\n\n\n\nconst returnParams: string = \"{}\"\nconst ParamsObjectarray = JSON.parse(returnParams);\n\n\nclass SignalMaintInfo extends React.Component<Prop, State> { \n\n state: State = {\n signalId: \"\",\n name: \"\",\n mode: \"\",\n pgn: 0,\n spn: 1,\n sourceName: \"\",\n matchSourceAddress: false,\n sourceAddress: 0,\n //signalCollectionType: \"none\",\n ruleType: \"\",\n commandSignals: [],\n commandId: \"\",\n canAddress: 39,\n uom:\"\",\n unit:\"\",\n multiPackage: \"Yes\",\n unitSymbols:[],\n viewRequestPGN: false,\n activeKey: \"0\",\n rules:[],\n leftMergeRules:[],\n rightMergeRules:[],\n messageArray:ParamsObjectarray,\n inputValue:\"\",\n c2dWhitelist: [], // assigning default messages\n newMessageText: \"\",\n multiPackageError: false,\n expandPanel:\"1\",\n };\n\n formRef = React.createRef<FormInstance>();\n\n\n\n\n handleAddMessage = () => {\n const newMessage = this.state.newMessageText;\n this.setState(c2dWhitelist => ({\n c2dWhitelist: [...c2dWhitelist.c2dWhitelist, newMessage],\n newMessageText: \"\"\n }), () => {});\n }\n\n\n\n handleRemoveMessage = (index:any) => {\n this.setState(c2dWhitelist => ({\n c2dWhitelist: c2dWhitelist.c2dWhitelist.filter((message:any, i:any) => i !== index)\n }), \n () =>{});\n }\n\n handleNewMessageTextChange = (event:any) => {\n const newMessageText = event.target.value;\n this.setState({ newMessageText });\n }\n\n\n handleMessageTextChange = (event:any, index:any) => {\n const updatedMessage = event.target.value;\n let c2dWlist = [...this.state.c2dWhitelist];\n \n c2dWlist[index] = updatedMessage;\n this.setState({\n c2dWhitelist: c2dWlist\n });\n }\n\n\n setMulti = (value:any) =>{\n const stringValue = String(value);\n this.setState({multiPackage: stringValue});\n if(value===\"Yes\"){\n this.setState({\n bitLength:0, \n max: 140});\n this.formRef.current!.setFieldsValue({\n bitLength:0,\n max: 140\n });\n }\n else{\n this.setState({\n bitLength:64,\n max: 8});\n this.formRef.current!.setFieldsValue({\n bitLength:64,\n max: 8\n });\n }\n }\n \n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n \n componentDidMount() {\n this.componentUpdate(this.props.signalMaint.record); \n \n }\n \n componentDidUpdate(prevProps: Prop, prevState: FormState) {\n if (this.props.signalMaint.instance !== prevProps.signalMaint.instance) {\n this.componentUpdate(this.props.signalMaint.record);\n }\n } \n\n componentUpdate(record:any) {\n if ((record.mode || \"\") === \"J1939 Database\") {\n this.props.getJ1939s(this, null, null, null, record.modeId);\n }\n if (this.props.signalMaint.collectionType === \"Command\") {\n this.props.getCommandPgns(this, null, null, null, record.pgn);\n this.props.getCommandControllers(this, null, null, null, record.canAddress, record.pgn);\n }\n this.props.getUnits(this, this.getUnitsSuccess, null);\n this.props.getTemplate(this, this.getTemplateSuccess, null, this.getTemplateId());\n formInit(this); \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n this.setSignalRecord(record);\n this.setRuleRecord(record);\n \n this.setIncrementalRuleRecord(record);\n this.setOfflineRuleRecord(record);\n this.setMergeRuleRecord(record);\n this.setMergeRules(record);\n this.setRequestPGNRecord(record); \n this.setState({ viewRequestPGN: record.requestPgn,\n activeKey: \"0\" }); \n if(record.requestPgn) {\n this.setState({ viewRequestPGN: record.requestPgn,\n activeKey: \"1\" }); }\n else\n { this.setState({ viewRequestPGN: record.requestPgn,\n activeKey: \"0\" }); } \n \n this.setState({\n signalId: this.formRef.current!.getFieldValue(\"signalId\"),\n name: this.formRef.current!.getFieldValue(\"name\"),\n mode: this.formRef.current!.getFieldValue(\"mode\"),\n sourceName: this.formRef.current!.getFieldValue(\"sourceName\"),\n matchSourceAddress: this.formRef.current!.getFieldValue(\"matchSourceAddress\"),\n sourceAddress: this.formRef.current!.getFieldValue(\"sourceAddress\"),\n //signalCollectionType: record.signalCollectionType,\n ruleType: this.formRef.current!.getFieldValue(\"ruleType\"),\n format: this.formRef.current!.getFieldValue(\"format\"),\n firstBit: this.formRef.current!.getFieldValue(\"firstBit\"),\n bitLength: this.formRef.current!.getFieldValue(\"bitLength\"),\n offset: this.formRef.current!.getFieldValue(\"offset\"), \n scaling: this.formRef.current!.getFieldValue(\"scaling\"), \n min: this.formRef.current!.getFieldValue(\"min\"),\n max: this.formRef.current!.getFieldValue(\"max\"),\n multiPackage:this.formRef.current!.getFieldValue(\"multiPackage\"),\n canAddress: this.formRef.current!.getFieldValue(\"canAddress\"), \n commandId: this.formRef.current!.getFieldValue(\"commandId\"),\n commandSignals: this.getCommandSignals(),\n pgn: this.formRef.current!.getFieldValue(\"pgn\")\n }); \n }\n };\n\n setRequestPGNRecord = (record: any) => {\n if (record.requestPgn != null && record.requestPgn) {\n this.formRef.current!.setFieldsValue({\n requestIntervalValue: record.requestIntervalValue,\n requestIntervalUom: record.requestIntervalUom,\n pgnDestinationAddress: record.pgnSourceAddress,\n pgnSourceAddress: record.pgnDestinationAddress,\n });\n }\n }\n\n setSignalRecord = (record: any) => {\n this.formRef.current!.setFieldsValue({\n templateId: this.getTemplateId(),\n signalCollectionId: (Object.keys(record).length === 0 ? this.props.signals.signalCollectionId : record.signalCollectionId),\n signalId: record.signalId,\n name: record.name,\n mode: record.mode,\n modeId: record.modeId,\n label: record.label,\n canHeader: record.canHeader,\n pgn: record.pgn,\n pgnName: record.pgnName,\n spn: record.spn,\n spnName: record.spnName,\n bitLength: record.bitLength,\n canAddress: record.canAddress,\n firstBit: record.firstBit,\n offset: record.offset,\n scaling: record.scaling,\n //unit: record.unit,\n sourceName: record.sourceName,\n source: record.source,\n matchSourceAddress: record.matchSourceAddress,\n sourceAddress: record.sourceAddress,\n j1939Error: record.j1939Error,\n format: record.format,\n min: record.min,\n max: record.max,\n multiPackage: (record.format || \"float\") === \"text\" && (record.max || 8) > 8 ? \"Yes\": \"No\",\n c2dWhitelist: JSON.parse(record.c2dWhitelist || \"[]\"),\n commandId: record.commandId || \"\"\n });\n this.setState({\n format: record.format,\n pgn: record.pgn, \n c2dWhitelist: JSON.parse(record.c2dWhitelist || \"[]\"),\n });\n }\n\n setRuleRecord = (record: any) => {\n if (record.signalRule != null) {\n this.formRef.current!.setFieldsValue({\n ruleId: record.signalRule.ruleId,\n ruleName: record.signalRule.ruleName,\n ruleType: (numberZeroPositive(record.signalRule.infoLowValue) || numberZeroPositive(record.signalRule.infoHighValue) ? \"info\" : \"alarm\"),\n criticalLowValue: record.signalRule.criticalLowValue,\n warningLowValue: record.signalRule.warningLowValue,\n warningHighValue: record.signalRule.warningHighValue,\n criticalHighValue: record.signalRule.criticalHighValue,\n infoLowValue: record.signalRule.infoLowValue,\n infoHighValue: record.signalRule.infoHighValue\n }); \n }\n else {\n this.formRef.current!.setFieldsValue({\n ruleType: \"alarm\",\n ruleId: \"\",\n }); \n }\n }\n\n setIncrementalRuleRecord=(record:any)=>{\n if(record.signalIncrementalRule!=null)\n {\n this.formRef.current!.setFieldsValue({\n incrementalRuleId:record.signalIncrementalRule.ruleId,\n incrementalRuleName:record.signalIncrementalRule.ruleName,\n incrementalRuleType:record.signalIncrementalRule.ruleType,\n incrementalRuleValue:record.signalIncrementalRule.ruleValue\n });\n }\n else\n {\n this.formRef.current!.setFieldsValue({\n incrementalRuleId:\"\",\n incrementalRuleType:\"incremental\"\n });\n }\n }\n\n setOfflineRuleRecord=(record:any)=>{\n if(record.offlineRule!=null)\n {\n this.formRef.current!.setFieldsValue({\n offlineRuleId:record.offlineRule.ruleId,\n offlineRuleName:record.offlineRule.ruleName,\n offlineSince:record.offlineRule.offlineSince,\n offlineDuration:record.offlineRule.offlineDuration\n }); \n }\n else\n {\n this.formRef.current!.setFieldsValue({\n offlineRuleId:\"\"\n });\n }\n }\n\n setMergeRules=(record: any)=>{\n let rules=[];\n if(record.signalRule!=null){ rules.push({ruleId:record.signalRule.ruleId,ruleName:record.signalRule.ruleName});}\n // if(record.signalIncrementalRule!=null){rules.push({ruleId:record.signalIncrementalRule.ruleId,ruleName:record.signalIncrementalRule.ruleName});}\n if(record.offlineRule!=null){rules.push({ruleId:record.offlineRule.ruleId,ruleName:record.offlineRule.ruleName});}\n this.formRef.current!.setFieldsValue({\n mergeRules:rules\n });\n\n this.setState({leftMergeRules:rules,rightMergeRules:rules});\n \n }\n\n setMergeRuleRecord=(record:any)=>{\n if(record.mergeRule!=null)\n {\n this.formRef.current!.setFieldsValue({\n mergeRuleId:record.mergeRule.mergeRuleId,\n mergeRuleName: record.mergeRule.mergeRuleName,\n leftMergeRule:record.mergeRule.leftMergeRule,\n rightMergeRule:record.mergeRule.rightMergeRule,\n mergeRuleOperator:record.mergeRule.mergeRuleOperator\n }); \n }\n else\n {\n this.formRef.current!.setFieldsValue({\n mergeRuleId:\"\"\n });\n }\n }\n\n setRecordNull = (record: any) => { \n Object.keys(record).forEach(function(index) {\n record[index] = null;\n });\n }\n \n onFinish = (values: any) => {\n const maxLength = this.state.multiPackage === 'Yes' ? 144 : 8;\n const invalidMessages = this.state.c2dWhitelist.filter((message:any) => message.length > maxLength);\n if (invalidMessages.length > 0) {\n message.error(`Error: Message length cannot exceed ${maxLength} characters`);\n this.setState({ multiPackageError: true }); // Set the error state to true\n } \n else {\n this.setState({ multiPackageError: false }); // Set the error state to false \n }\n resetFormErrors(this, this.formRef.current); \n if (!this.state.multiPackageError) { // Check the value of the multiPackageError state variable\n this.props.signalMaintSubmit(this, this.onFinishSuccess, this.onFinishFailure, this.getTemplateId(), \n { ...values, requestPgn:this.state.viewRequestPGN,c2dWhitelist:JSON.stringify(this.state.c2dWhitelist)});\n this.props.accept();\n } else {\n message.error('Error: Please fix the message length error before submitting'); // Display an error message\n }\n };\n\n onFinishSuccess = (editMode: string, record: any) => {\n this.componentUpdate(record);\n successResponse(this, \"Signal has been successfully \" + (editMode === \"edit\" ? \"updated\" : \" created and added to the collection\")); \n scrollToElement(\"[data-id=signals-form-messages]\");\n this.props.getSignals(this, null, null, this.getTemplateId(), this.props.signals.signalCollectionId, this.props.signals.signalCollectionName, this.props.signals.signalCollectionType, this.props.signalList.tableConfig.pagination.current, this.props.signalList.searchText);\n }\n\n onFinishFailure = (error: any) => { \n scrollToElement(\"[data-id=signals-form-messages]\");\n errorResponse(this, error);\n }\n getTemplateSuccess = (record:any) => {\n this.setState({\n commandSignals: this.getCommandSignals()\n });\n }\n\n onModeChange = (mode: string) => { \n this.setState({ mode: mode });\n\n let record = {...this.props.signalMaint.record};\n \n this.setRecordNull(record);\n\n record.templateId = this.props.signalMaint.record.templateId || this.getTemplateId(); \n record.signalCollectionId = this.props.signalMaint.record.signalCollectionId || this.props.signals.signalCollectionId; \n record.signalId = this.props.signalMaint.record.signalId; \n record.mode = mode; \n\n if ((this.props.signalMaint.record.signalId || \"\") === \"\" && mode === \"J1939 Database\") {\n record.sourceName = \"can0\"; \n }\n\n this.setSignalRecord(record);\n if(this.props.signalMaint.collectionType === \"Command\" &&\n this.state.format === \"text\"){\n record.sourceName = \"both\";\n record.max = 140;\n record.canAddress = 37; \n this.formRef.current!.setFieldsValue({bitLength: 0,\n firstBit: 0, multiPackage: \"Yes\", sourceName: \"both\", max: 140});\n }\n if(this.props.signalMaint.collectionType === \"Command\" &&\n this.state.format === \"hex\"){\n record.sourceName = \"both\";\n this.formRef.current!.setFieldsValue({bitLength:64,\n firstBit: 0, multiPackage: \"No\"});\n }\n if(this.props.signalMaint.collectionType === \"Command\" &&\n this.state.format === \"boolean\"){\n record.sourceName = \"both\";\n this.formRef.current!.setFieldsValue({bitLength: 2, multiPackage: \"No\"});\n }\n if(this.props.signalMaint.collectionType === \"Command\" &&\n this.state.format === \"integer\" || this.state.format === \"float\"){\n record.sourceName = \"both\";\n this.formRef.current!.setFieldsValue({bitLength: 32, multiPackage: \"No\"});\n }\n }\n\n \n onCanAddressChange = (address:any) => {\n this.setState({ canAddress: address }); \n \n this.formRef.current!.setFieldsValue({\n canAddress: address\n });\n \n }; \n\n onRuleTypeChange = (value: string) => { \n this.setState({ ruleType: value });\n }\n\n onJ1939TemplateSearch = (value:string) => {\n this.props.getJ1939s(this, null, null, value);\n };\n\n onJ1939TemplateChange = (value:string) => {\n this.props.signalMaint.j1939s.data.forEach((record: any) => {\n if (record.j1939Id === value) {\n this.setSignalRecord(\n {\n templateId: this.getTemplateId(),\n signalCollectionId: this.props.signals.signalCollectionId,\n signalId: this.props.signalMaint.record.signalId,\n mode: \"J1939 Database\",\n modeId: record.j1939Id,\n pgn: record.pgn,\n pgnName: record.pgnName,\n spn: record.spn,\n spnName: record.spnName,\n bitLength: record.bitLength,\n firstBit: record.firstBit,\n offset: record.offset,\n scaling: record.scaling,\n unit: record.unit,\n source: record.source,\n sourceName: \"can0\" \n }\n );\n }\n }); \n };\n\n onCommandPgnSearch = (value:string) => {\n this.props.getCommandPgns(this, null, null, value);\n };\n\n onCommandPgnChange = (value:string) => {\n this.props.signalMaint.commandPgns.data.forEach((record: any) => {\n \n if (record.id === value) { // commandPgnUUID\n\n if (record.pgn === 65305) {\n this.setSignalRecord(\n {\n templateId: this.getTemplateId(),\n signalCollectionId: this.props.signals.signalCollectionId,\n signalId: this.props.signalMaint.record.signalId,\n mode: \"Add New Signal\",\n modeId: record.id, \n pgn: 65305,\n pgnName: record.pgnName,\n spn: record.spn,\n spnName: record.spnName,\n bitLength: 0,\n firstBit: 0,\n format: \"text\",\n canAddress: 37,\n max: 140, \n sourceName: \"both\",\n multiPackage: \"Yes\"\n }\n );\n this.formRef.current!.setFieldsValue({\n format: \"text\",\n max: 140,\n pgn: 65305,\n spn: record.spn,\n bitLength: 0,\n firstBit: 0, \n canAddress: 37, \n sourceName: \"both\",\n unitName: \"\", \n unit: \"\",\n multiPackage: \"Yes\"\n });\n let unitSymbols=this.props.signalMaint.units!.data.filter((f:any)=>f.name=='Other');\n this.setState({\n format: \"text\", \n max: 140, \n pgn: 65305,\n spn: record.spn, \n bitLength: 0, \n firstBit: 0,\n canAddress: 37, \n sourceName: \"both\",\n unitSymbols: unitSymbols,\n unit: \"\",\n multiPackage: \"Yes\"\n });\n this.props.getCommandControllers(this, null, null, \"\", null, 65305);\n\n } else if (record.pgn === 65310) {\n this.setSignalRecord(\n {\n templateId: this.getTemplateId(),\n signalCollectionId: this.props.signals.signalCollectionId,\n signalId: this.props.signalMaint.record.signalId,\n mode: \"Add New Signal\",\n modeId: record.id, \n pgn: record.pgn,\n pgnName: record.pgnName, \n spn: record.spn,\n spnName: record.spnName,\n sourceName: \"both\",\n bitLength: 2,\n format: \"boolean\", \n unitName: \"\", \n unit: \"\",\n }\n );\n this.formRef.current!.setFieldsValue({\n format: \"boolean\",\n pgn: record.pgn,\n spn: record.spn,\n sourceName: \"both\",\n bitLength: 2, \n min: null, \n max: null, \n multiPackage: \"No\"\n });\n this.setState({format: \"boolean\",\n pgn: record.pgn,\n spn: record.spn,\n sourceName: \"both\",\n bitLength: 2,\n multiPackage: \"No\"\n });\n /* } else if (record.pgn >= 65351 && record.pgn <=65370) {\n // reserve about 20, even though initially allocated to customer might be subset of \n this.setSignalRecord(\n {\n templateId: this.getTemplateId(),\n signalCollectionId: this.props.signals.signalCollectionId,\n signalId: this.props.signalMaint.record.signalId,\n mode: \"Add New Signal\",\n modeId: record.id, \n pgn: record.pgn,\n pgnName: record.pgnName, \n spn: record.spn,\n spnName: record.spnName,\n sourceName: \"both\",\n bitLength: 64,\n firstBit: 0,\n format: \"hex\",\n unitName:\"\", \n unit: \"\"\n }\n );\n this.formRef.current!.setFieldsValue({\n format: \"hex\",\n pgn: record.pgn,\n spn: record.spn,\n sourceName: \"both\",\n bitLength: 64, \n min: null, \n max: null,\n unitName: \"\",\n unit: \"\",\n });\n let unitSymbols=this.props.signalMaint.units!.data.filter((f:any)=>f.name=='Other');\n this.setState({format: \"hex\",\n pgn: record.pgn,\n spn: record.spn,\n southName: \"both\",\n bitLength:64,\n firstBit: 0, \n unitSymbols: unitSymbols, \n unit: \"\",\n }); */\n }else {\n this.setSignalRecord(\n {\n templateId: this.getTemplateId(),\n signalCollectionId: this.props.signals.signalCollectionId,\n signalId: this.props.signalMaint.record.signalId,\n mode: \"Add New Signal\",\n modeId: record.id, \n pgn: record.pgn,\n pgnName: record.pgnName,\n spn: record.spn,\n spnName: record.spnName,\n format: record.format, // support text telematic signal\n multiPackage: \"No\"\n }\n );\n }\n\n this.setState({pgn: record.pgn, \n spn: record.spn,\n format: record.format,\n multiPackage: \"No\"\n }\n );\n }\n }); \n };\n\n onCommandControllersSearch = (value:string) => {\n this.props.getCommandControllers(this, null, null, value, null, this.state.pgn);\n };\n\n onCommandControllersChange = (value:string) => {\n this.props.signalMaint.commandControllers.data.forEach((record: any) => {\n if (record.cmdControllerSaId === value) { // commandController's saId\n this.formRef.current!.setFieldsValue({\n canAddress: record.cmdControllerSaId\n });\n this.setState({canAddress: record.cmdControllerSaId});\n }\n }); \n };\n\n onSourceAddressChange = (value:any) => {\n this.setState({ sourceAddress: value });\n }; \n\n onMatchSourceAddressChange = (checked:any) => {\n this.setState({ matchSourceAddress: checked }); \n /* \n this.formRef.current!.setFieldsValue({\n sourceAddress: null\n });\n */\n }; \n\n onSourceNameChange = (sourceName:any) => {\n this.setState({ sourceName: sourceName });\n }; \n onFormatChange = (format:any) => {\n this.setState({ format: format });\n if(format === 'text'){\n if (this.state.pgn === 65305) { /* C2D */\n this.formRef.current!.setFieldsValue({\n format: \"text\", \n max: 140,\n firstBit: 0,\n BitLength: 0,\n canAddress:37,\n multiPackage: \"Yes\"}\n );\n this.setState({\n format: \"text\",\n max: 140, \n firstBit: 0,\n bitLength: 0,\n canAddress: 37,\n multiPackage: \"Yes\"\n });\n this.props.getCommandControllers(this, null, null, \"\", null, 65305);\n } else { /* D2C */\n this.formRef.current!.setFieldsValue({ \n format: \"text\",\n firstBit: 0,\n BitLength: 64\n });\n this.setState({\n format: \"text\",\n firstBit: 0,\n bitLength: 64\n });\n }\n \n }\n else if(format === 'boolean'){\n this.formRef.current!.setFieldsValue({ max:\"\" });\n this.formRef.current!.setFieldsValue({ bitLength:2 });\n } else if(format === 'hex'){\n this.formRef.current!.setFieldsValue({ min:\"\" });\n this.formRef.current!.setFieldsValue({ max:\"\" });\n this.formRef.current!.setFieldsValue({ firstBit:0 });\n this.formRef.current!.setFieldsValue({ bitLength:64 });\n } if(format === 'integer' || format === 'float'){\n this.formRef.current!.setFieldsValue({ min:\"\" });\n this.formRef.current!.setFieldsValue({ max:\"\" });\n this.formRef.current!.setFieldsValue({ firstBit:0 });\n this.formRef.current!.setFieldsValue({ bitLength:32 });\n this.formRef.current!.setFieldsValue({ offset:0 });\n this.formRef.current!.setFieldsValue({ scaling:1 });\n } else\n {\n this.formRef.current!.setFieldsValue({ min:\"\" });\n this.formRef.current!.setFieldsValue({ max:\"\" });\n this.formRef.current!.setFieldsValue({ firstBit:\"\" });\n this.formRef.current!.setFieldsValue({ bitLength:\"\" });\n this.formRef.current!.setFieldsValue({ offset:\"\" });\n this.formRef.current!.setFieldsValue({ scaling:\"\" });\n }\n };\n\n onCommandNameChange = (commandId:any) => {\n this.setState({ commandId: commandId });\n };\n \n getCommandSignals = () => {\n let templateCommandSignals : Array<commnadSignalType>=[];\n let defaultSignal: commnadSignalType = {signalId: \"\", name: \"none\"};\n let orgCmdPgnSpns = this.props.templateDetails.templateRecord.orgCmdPgnSpns;\n if((this.props.signalMaint.collectionType || \"none\") === \"none\"){\n templateCommandSignals.push(defaultSignal);\n if(this.props.templateDetails.templateRecord.datapoints.length > 0){ \n let commands = JSON.parse(this.props.templateDetails.templateRecord.datapoints)\n .filter((t:any) => t.type && t.type === \"Command\");\n let commandSignal: commnadSignalType = {signalId: \"\", name: \"\"};\n commands.map((collection:any) => { \n let signals=JSON.stringify(collection.values);\n JSON.parse(signals).map((signal:any) => { \n commandSignal.signalId = signal._id;\n if (orgCmdPgnSpns.includes(signal.pgn + \"-\" + signal.spn)) { \n commandSignal.name = signal.label;\n } else {\n commandSignal.name = signal.label + \" (NA to org)\";\n }\n templateCommandSignals.push(commandSignal);\n commandSignal = {signalId: \"\", name: \"\"};\n });\n });\n }\n }\n return templateCommandSignals;\n }\n\n onUnitNameChange=(value:any)=>{ \n let units:any=[];\n units=this.props.signalMaint.units!.data.filter((f:any)=>{\n return f.name.toLowerCase()==value.toLowerCase();\n })\n if(units.length)\n {\n this.formRef.current!.setFieldsValue({ unit:units[0].symbol});\n this.setState({unitSymbols:units});\n }\n }\n\n onUnitSearch=(value:string)=>{\n if((value||\"\")!==\"\")\n {\n //pulling unit symbols and names if mapping finds.\n let units=this.props.signalMaint.units!.data.filter((f:any)=>{\n return f.symbol.toLowerCase()==value.toLowerCase();\n })\n if(units.length)\n {\n let unitSymbols=this.props.signalMaint.units!.data.filter((f:any)=>{\n return f.name.toLowerCase()==units[0].name.toLowerCase();\n })\n this.setState({unitSymbols:unitSymbols})\n this.formRef.current!.setFieldsValue({ unitName:unitSymbols.length?units[0].name:''});\n }\n else\n {\n //if there are no mappings present then populating with default other.\n let unitSymbols=this.props.signalMaint.units!.data.filter((f:any)=>f.name=='Other');\n this.setState({unitSymbols:unitSymbols})\n this.formRef.current!.setFieldsValue({ unitName:'Other'});\n }\n }\n }\n \n getUniqueUnits=()=>{\n //pulling distinct unit names\n const units=Array.from(new Map(this.props.signalMaint.units!.data.map((item: any) => [item[\"name\"], item])).values())\n return units;\n }\n\n getUnitsSuccess=(record:any)=>{\n let value=this.props.signalMaint.record.unit;\n if((value||\"\")==\"\")\n {\n //showing default units when new signal creates.\n if(!this.state.signalId)\n {\n let unitSymbols=record.filter((f:any)=>f.name==record[0].name);\n this.setState({unitSymbols:unitSymbols})\n this.formRef.current!.setFieldsValue({ unit:record[0].symbol});\n this.formRef.current!.setFieldsValue({ unitName:record[0].name});\n }\n }\n else\n {\n //if unit presents repopulating respective name along with unit value.\n let units=record.filter((f:any)=> f.symbol==value);\n if(units.length)\n {\n this.formRef.current!.setFieldsValue({ unit:value});\n let unitSymbols=record.filter((f:any)=>f.name==units[0].name);\n this.formRef.current!.setFieldsValue({ unitName:units[0].name});\n this.setState({unitSymbols:unitSymbols})\n }\n else\n {\n this.formRef.current!.setFieldsValue({ unit:value});\n this.formRef.current!.setFieldsValue({ unitName:'Other'});\n let unitSymbols=record.filter((f:any)=>f.name=='Other');\n this.setState({unitSymbols:unitSymbols})\n }\n }\n }\n\n showRequestPGNPanel= (enabled: any) =>\n {\n if (enabled) {\n this.setState({\n viewRequestPGN: true,\n activeKey: \"1\",\n });\n this.formRef.current!.setFieldsValue({\n requestIntervalValue:\"1\",\n requestIntervalUom: \"m\",\n pgnDestinationAddress: \"0\",\n pgnSourceAddress: \"37\",\n sourceName: \"both\" \n }); \n } \n else {\n this.setState({\n viewRequestPGN: false,\n activeKey: \"0\",\n });\n this.formRef.current!.setFieldsValue({\n requestIntervalValue:\"\",\n requestIntervalUom: \"\",\n pgnDestinationAddress: \"\",\n pgnSourceAddress: \"\"\n });\n if(this.state.mode === \"Add New Signal\"){\n this.formRef.current!.setFieldsValue({\n sourceName: \"\"\n });\n }\n else{\n this.formRef.current!.setFieldsValue({\n sourceName: \"can0\"\n });\n }\n\n }\n }\n\n validateTimeUnit= (rule: any, value: any, callback: any) => {\n if(value){\n const interval = this.formRef.current!.getFieldValue('requestIntervalValue');\n if ((value === 'h'&& interval > 24) ||\n (value === 'm'&& interval > 24*60) ||\n (value === 's'&& interval > 24*60*60)) {\n callback(\"Please enter a valid time interval\");\n } \n else {\n callback();\n } \n }\n else {\n callback();\n }\n };\n\n validateTimeValue= (rule: any, value: any, callback: any) => {\n if(value){\n const unit = this.formRef.current!.getFieldValue('requestIntervalUom');\n if ((unit === 'h'&& value > 24) ||\n (unit === 'm'&& value > 24*60) ||\n (unit === 's'&& value > 24*60*60)) {\n callback(\"Please enter a valid time interval\");\n } \n else {\n callback();\n } \n }\n else {\n callback(); \n }\n };\n\n validateTime = () => { \n this.formRef.current!.validateFields(['requestIntervalValue','requestIntervalUom']);\n }\n\n setLeftMergeRules=(value:any)=>{\n let rules= this.formRef.current!.getFieldValue(\"mergeRules\");\n let filteredRules=rules.filter((v:any)=>v.ruleId!==value);\n this.setState({rightMergeRules:filteredRules});\n }\n\n setRightMergeRules=(value:any)=>{\n let rules= this.formRef.current!.getFieldValue(\"mergeRules\");\n let filteredRules=rules.filter((v:any)=>v.ruleId!==value);\n this.setState({leftMergeRules:filteredRules});\n }\n\n allowedSingleFrameUsersDev = [\n '6eb1fbc0-0ffe-11eb-b4af-c7f0a7c1b411','70c429b0-91a7-11e8-af90-51d20134150b',\n '152bd120-309b-11ec-bc2d-bb7291a0ceba','e704a550-4e6b-11ea-8fc9-5f6f1264b2c7',\n 'cad29b40-1d5f-11ea-abaa-a34583f0c422','96d03480-0431-11ee-9567-dfd4928f58e8',\n '7cb0a1a0-542f-11ed-b7bb-f305eb77c106','13131860-537d-11ee-a2ea-233ac79fb151',\n 'ce3bb3a0-9619-11eb-87b2-239c76a096d7','054dda40-59ab-11eb-8ee0-bfaf65ef3261',\n '521a6300-67b3-11eb-a256-dba62bf2eb52'\n ];\n allowedSingleFrameUsersStag = [\n 'a5c3cb80-2b37-11eb-ada0-d3b3466952a6','70c429b0-91a7-11e8-af90-51d20134150b',\n '8279a1a0-62fd-11ec-8f8f-53c130199102','e95b17a0-07ce-11ea-8c1e-29af9f5c9993',\n '9bb0b810-1d5f-11ea-b10c-611371d47cc6','ef77ae80-3819-11ee-b6e7-875b48ebb37d',\n '94a456c0-3819-11ee-a7c5-8b26a0381d3f','dba0aa40-5e6c-11ea-8269-67263d3b9573',\n 'fee680c0-9619-11eb-9d03-1f19554fcd07','3bf339c0-599f-11eb-b6ef-0754ed297eb6'\n ];\n allowedSingleFrameUsersProd = [\n '25c1ec40-2bab-11eb-9f2e-2fc8ff0a0080','70c429b0-91a7-11e8-af90-51d20134150b',\n '8a209140-d985-11eb-87da-f7bca1133f68','e95b17a0-07ce-11ea-8c1e-29af9f5c9993',\n '9bb0b810-1d5f-11ea-b10c-611371d47cc6','910a8d40-08fd-11ee-9e3e-ab5787211252',\n '69bfdee0-6af4-11ed-b1c9-df04de49673c', 'dba0aa40-5e6c-11ea-8269-67263d3b9573',\n 'f0e97000-2f9f-11ee-a86c-135fbbccefd5', \n '1e9aa720-961a-11eb-bc08-ff40daac93b5','fe97d7c0-2bae-11eb-b7a8-aba558bbe8c6'\n ];\n\n render() {\n\n return (\n \n <>\n <div data-id=\"signals-form-messages\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"signals-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"signals-error-message\"message={this.state.formErrorMessage}/>}\n </div>\n\n <Row gutter={8} style={{marginTop: 15}}>\n <Col offset={1} span={23}>\n <Form\n id=\"signalMaintInfoForm\"\n ref={this.formRef}\n layout=\"vertical\"\n onFinish={this.onFinish}\n > \n <Form.Item \n name=\"templateId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n name=\"signalCollectionId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n <Form.Item \n name=\"signalId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n\n {\n // a user shall be able to view the signal content if users has view template permission but cannot update if the user does not have create/update permission\n (this.props.signalMaint.collectionType === \"IQAN Diagnostics\" && (this.props.isread || this.props.iscreateOrUpdateTemplate)) && \n <> \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Signal Name\"\n name=\"label\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input \n maxLength={255}\n disabled={true}\n />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Source\"\n name=\"sourceName\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select \n onChange={this.onSourceNameChange}\n >\n <Option key=\"can0\" value=\"can0\">can0</Option>\n <Option key=\"can1\" value=\"can1\">can1</Option>\n </Select> \n </Form.Item> \n </Col>\n </Row> \n <div className=\"mt-20\"></div>\n </> \n }\n {\n (((this.props.signalMaint.collectionType || \"none\") === \"none\" || this.props.signalMaint.collectionType === \"Command\") && (this.props.isread || this.props.iscreateOrUpdateTemplate)) && \n <Row gutter={8}>\n <Col span={24}>\n \n <Form.Item\n label=\"Signal Source\"\n name=\"mode\" \n >\n <Select \n data-id=\"mode\" \n onChange={this.onModeChange}\n placeholder=\"Select...\"\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate}\n >\n {(this.props.signalMaint.collectionType !== \"Command\") &&\n <Option key=\"J1939 Database\" value=\"J1939 Database\">J1939 Database</Option>\n }\n <Option key=\"Add New Signal\" value=\"Add New Signal\">Custom Signal</Option>\n </Select> \n </Form.Item>\n {\n this.state.mode === \"J1939 Database\" &&\n <>\n <Form.Item\n label=\"J1939 Template\"\n name=\"modeId\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select \n showSearch\n placeholder=\"Search by typing PGN Name, SPN Name, PGN or SPN\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={false}\n onSearch={this.onJ1939TemplateSearch}\n onChange={this.onJ1939TemplateChange}\n notFoundContent={null}\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate}\n allowClear\n >\n {this.props.signalMaint.j1939s!.data.map((record:any, index:number) => (\n <Option key={record.j1939Id} value={record.j1939Id}> \n <div className=\"demo-option-label-item\">\n <div><strong>PGN </strong>{record.pgnName} ({record.pgn})</div>\n <div><strong>SPN </strong>{record.spnName} ({record.spn})</div>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item> \n </>\n }\n {\n ((this.props.signalMaint.collectionType || \"none\") === \"Command\") &&\n (this.state.mode === \"Add New Signal\") &&\n <>\n <Form.Item\n label=\"Command PGNs\"\n name=\"pgn\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select \n showSearch\n placeholder=\"Search by typing Command PGN Name or PGN\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={false}\n onSearch={this.onCommandPgnSearch}\n onChange={this.onCommandPgnChange}\n notFoundContent={null}\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate}\n allowClear\n >\n {this.props.signalMaint.commandPgns!.data.map((record:any, index:number) => ( \n <Option key={record.id} value={record.id}> \n <div className=\"demo-option-label-item\">\n <div><strong>PGN </strong>{record.pgnName} ({record.pgn})</div>\n <div><strong>SPN </strong>{record.spnName} ({record.spn})</div>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item> \n </>\n }\n {\n (\n this.state.mode === \"Add New Signal\" \n ) &&\n <Form.Item\n label=\"Signal Name\"\n name=\"label\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input \n maxLength={255}\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate}\n />\n </Form.Item>\n } \n </Col> \n </Row> \n }\n\n { /* request pgn for D2C telemetry but not D2C text */\n ((\n (this.props.signalMaint.collectionType || \"none\") === \"none\" &&\n (this.state.format || \"float\") === \"float\" \n ) && (this.props.isread || this.props.iscreateOrUpdateTemplate)) &&\n (\n this.state.signalId || \n (!this.state.signalId && this.state.mode) \n ) && \n <>\n \n <Collapse activeKey = {this.state.activeKey}>\n <Panel disabled={!this.state.viewRequestPGN}\n header=\"Request PGN\"\n key=\"1\"\n extra={\n <div>\n \n <Switch\n checkedChildren={<CheckOutlined />}\n unCheckedChildren={<CloseOutlined />} \n onChange = {this.showRequestPGNPanel} \n checked = {this.state.viewRequestPGN} />\n </div>\n }\n >\n <div style={{ marginTop:'-15px'}}>\n <span style={{ color:'#0052CC',fontSize:'12px'}}>This feature requires version 1.2.5 running on Gateway</span>\n </div>\n <Row gutter={8} style={{marginTop: 15}}>\n <Col offset={1} span={23}>\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Request Interval\"\n name=\"requestIntervalValue\"\n rules={[\n { required: this.props.signalMaint.collectionType === \"none\" && this.state.viewRequestPGN, message: appConfigs.errors.fieldErrors.valueRequired },\n { validator: this.validateTimeValue, }\n ]}\n >\n <InputNumber onChange={this.validateTime}\n min={1} \n max={86400} //Maximum time per day in seconds is 86400.\n style={{ width: '100%' }} \n precision={0} \n \n />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Units\"\n name=\"requestIntervalUom\"\n rules={[\n { required: this.props.signalMaint.collectionType === \"none\" && this.state.viewRequestPGN, message: appConfigs.errors.fieldErrors.valueRequired },\n { validator: this.validateTimeUnit, }\n ]} \n >\n <Select onChange={this.validateTime}>\n <Option key=\"s\" value=\"s\">Seconds</Option>\n <Option key=\"m\" value=\"m\">Minutes</Option>\n <Option key=\"h\" value=\"h\">Hours</Option>\n </Select> \n </Form.Item>\n </Col> \n </Row> \n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Source Address\"\n name=\"pgnSourceAddress\"\n rules={[\n { required: this.props.signalMaint.collectionType === \"none\" && this.state.viewRequestPGN, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <InputNumber\n min={0} \n max={255}\n style={{ width: '100%' }} \n precision={0} \n disabled={true}\n />\n </Form.Item>\n \n {/* <div style={{ marginTop:'-15px'}}>\n <span style={{ color:'#0052CC',fontSize:'12px'}}>Allowed Values 0 - 255</span>\n </div> */}\n \n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Destination Address\"\n name=\"pgnDestinationAddress\"\n rules={[\n { required: this.props.signalMaint.collectionType === \"none\" && this.state.viewRequestPGN, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <InputNumber\n min={0} \n max={255}\n style={{ width: '100%' }} \n precision={0} \n \n />\n </Form.Item>\n <div style={{ marginTop:'-15px'}}>\n <span style={{ color:'#0052CC',fontSize:'12px'}}>Allowed Values 0 - 255</span>\n </div>\n </Col> \n </Row>\n </Col>\n </Row>\n </Panel>\n </Collapse> \n </>\n }\n\n {\n (((this.props.signalMaint.collectionType || \"none\") === \"none\" || this.props.signalMaint.collectionType === \"Command\") && (this.props.isread || this.props.iscreateOrUpdateTemplate)) &&\n (\n this.state.signalId || \n (!this.state.signalId && this.state.mode) \n ) && \n <>\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"PGN\"\n name=\"pgn\"\n rules={[\n\n { required: ( ((this.props.signalMaint.collectionType || \"none\") === \"none\" && this.state.viewRequestPGN)), message: appConfigs.errors.fieldErrors.valueRequired }\n\n ]}\n >\n <InputNumber \n min={0} \n max={1000000} \n style={{ width: '100%' }} \n precision={0} \n disabled={this.state.mode === \"J1939 Database\" || (this.props.signalMaint.collectionType || \"none\") === \"Command\" ||\n (this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate)} \n />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"PGN Name\"\n name=\"pgnName\" \n >\n <Input \n maxLength={255} \n disabled \n />\n </Form.Item>\n </Col> \n </Row> \n { /* do not show pgn for D2C and C2D text */\n (((this.props.signalMaint.collectionType || \"none\") === \"none\" &&\n (this.state.format || \"float\") === \"float\"\n ) || \n (this.props.signalMaint.collectionType === \"Command\" && \n this.state.pgn > 65306 && this.state.pgn <= 65350 \n ) \n ) && \n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"SPN\"\n name=\"spn\" \n >\n <InputNumber \n min={0} \n max={1000000} \n style={{ width: '100%' }} \n precision={0} \n disabled\n />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"SPN Name\"\n name=\"spnName\" \n >\n <Input \n maxLength={255} \n disabled\n />\n </Form.Item>\n </Col> \n </Row> \n } \n {\n this.props.signalMaint.collectionType !== \"GPS\" &&\n this.props.signalMaint.collectionType !== \"IQAN Diagnostics\" &&\n this.props.signalMaint.collectionType !== \"Command\" &&\n // this.state.mode === \"Add New Signal\" &&\n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Format\"\n name=\"format\" \n >\n <Select \n onChange={this.onFormatChange}>\n <Option key=\"none\" value=\"\"> </Option>\n <Option key=\"text\" value=\"text\">Text</Option>\n </Select>\n </Form.Item>\n </Col>\n </Row>\n } \n {this.props.signalMaint.collectionType === \"Command\" &&\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Format\"\n name=\"format\" \n rules={[\n\n { required: ( (this.props.signalMaint.collectionType || \"none\") === \"Command\"), \n message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Select \n onChange={this.onFormatChange}\n disabled={this.state.pgn === 65305 || this.state.pgn === 65310 ||\n (this.state.pgn >= 65351 && this.state.pgn <= 65370) }>\n {this.state.pgn === 65311 && <Option key=\"hex\" value=\"hex\">Hex</Option>}\n {this.state.pgn === 65311 && <Option key=\"integer\" value=\"integer\">Integer</Option>}\n {this.state.pgn === 65311 && <Option key=\"float\" value=\"float\">Float</Option>}\n {this.state.pgn === 65310 && <Option key=\"boolean\" value=\"boolean\">Boolean</Option>}\n {(this.state.pgn === 65305 && (this.props.signalMaint.collectionType || \"none\") === \"Command\") &&\n <Option key=\"text\" value=\"text\">Text</Option>}\n {(this.state.pgn >= 65351 && this.state.pgn <= 65370 && \n (this.props.signalMaint.collectionType || \"none\") === \"Command\") &&\n <Option key=\"hex\" value=\"hex\">Hex</Option>}\n {(this.props.signalMaint.collectionType || \"none\") !== \"Command\" &&\n <Option key=\"float\" value=\"float\">Float</Option>}\n </Select>\n </Form.Item>\n </Col>\n <Col xs={24} md={12}>\n <Form.Item\n label={this.state.pgn === 65305 ? \"Gateway CAN Address\" : \"Destination Controller CAN Address\"}\n name=\"canAddress\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select \n showSearch\n placeholder=\"Search by typing Command Controller Source address ID or name\"\n defaultActiveFirstOption={false}\n showArrow={false}\n filterOption={false}\n onSearch={this.onCommandControllersSearch}\n onChange={this.onCommandControllersChange}\n notFoundContent={null}\n disabled={\n (this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate) ||\n this.state.pgn === 65305\n }\n allowClear\n >\n {this.props.signalMaint.commandControllers!.data.map((record:any, index:number) => ( \n <Option key={record.cmdControllerSaId} value={record.cmdControllerSaId}> \n <div className=\"demo-option-label-item\">\n <div>({record.cmdControllerSaId}) {record.cmdControllerSaName}</div>\n </div>\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col>\n </Row>\n }\n {/* This is for integer or float, not text (c2d or d2c), boolean or hex*/\n (((this.props.signalMaint.collectionType || \"none\") === \"none\" &&\n ((this.state.format || \"float\") === \"float\")) ||\n ((this.props.signalMaint.collectionType || \"none\") === \"Command\" &&\n (this.state.format === \"integer\" || this.state.format === \"float\" ||\n ((this.state.format || \"none\") === \"none\" && this.state.pgn != 65305 && this.state.pgn != 65310)))) &&\n <Row gutter={8}>\n <Col xs={24} md={12}>\n \n <Form.Item\n label=\"Unit\"\n name=\"unitName\"\n style={{ display: 'inline-block'}}\n >\n <Select\n showSearch\n disabled={this.state.mode === \"J1939 Database\" ||\n (this.props.isGlobalTemplate && !this.props.isadmin \n || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate) ||\n (this.props.signalMaint.collectionType === \"Command\" && \n ((this.state.format || \"none\") === \"hex\"))\n } \n style={{ width: 165 }}\n onChange={this.onUnitNameChange}\n optionFilterProp=\"children\"\n // filterOption={(input, option) =>\n // option?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0\n // }\n >\n {\n this.getUniqueUnits().map((record:any, index:number) => (\n <Option key={record.id} value={record.name}> \n {record.name}\n </Option>\n ))\n\n }\n </Select>\n\n </Form.Item>\n <Form.Item\n \n name=\"unit\"\n style={{ display: 'inline-block', width: 100,marginTop:'30px'}} \n >\n {/* <Input maxLength={32}\n onChange={ (e) => this.setUnit(e.target.value) }\n placeholder=\"\" \n disabled={this.state.mode === \"J1939 Database\" ||\n (this.props.isGlobalTemplate && !this.props.isadmin \n || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate) ||\n this.state.format === \"text\" || this.state.format === \"boolean\"\n } \n /> */}\n\n <AutoComplete\n showArrow={false}\n allowClear={true}\n disabled={this.state.mode === \"J1939 Database\" ||\n (this.props.isGlobalTemplate && !this.props.isadmin \n || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate) ||\n (this.props.signalMaint.collectionType === \"Command\" && \n (this.state.format || \"none\")=== \"hex\")\n } \n style={{ width: 117, margin: '0 5px' }}\n showSearch\n optionFilterProp=\"children\"\n \n onSearch={this.onUnitSearch}\n >\n {\n this.state.unitSymbols.map((record:any, index:number) => (\n <Option key={record.id} value={record.symbol}> \n {record.symbol}\n </Option>\n ))\n }\n \n </AutoComplete>\n\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Source\"\n name=\"sourceName\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select \n onChange={this.onSourceNameChange}\n >\n <Option key=\"can0\" value=\"can0\">can0</Option>\n <Option key=\"can1\" value=\"can1\">can1</Option>\n {\n ((this.state.mode === \"Add New Signal\" && ( this.props.signalMaint.collectionType === \"Command\" || this.state.viewRequestPGN ))\n || (this.state.mode === \"J1939 Database\" && this.state.viewRequestPGN)) \n &&\n <Option key=\"both\" value=\"both\">both</Option>\n }\n {\n this.state.mode === \"Add New Signal\" && this.props.signalMaint.collectionType !== \"Command\" && !this.state.viewRequestPGN &&\n <Option key=\"custom\" value=\"custom\">custom</Option>\n }\n </Select> \n </Form.Item> \n </Col> \n </Row> \n }\n {/* this is for c2d or d2c text, and boolean, hex */\n ( ((this.props.signalMaint.collectionType || \"none\") === \"none\" && \n (this.state.format || \"float\") === \"text\") ||\n (this.props.signalMaint.collectionType || \"none\") === \"Command\" &&\n (this.state.format === \"text\" || this.state.format === \"boolean\"|| this.state.format === \"hex\"\n || (this.state.format || \"none\" === \"none\") && (this.state.pgn === 65305 || this.state.pgn === 65310 || this.state.pgn > 65350 ))) &&\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Bit Length\"\n name=\"bitLength\"\n style={{ display: 'inline-block', width: 140}}\n >\n <InputNumber \n min={0}\n max={64}\n \n // precision={0} \n disabled={this.state.pgn === 65305 || this.state.pgn === 65310 || this.state.pgn > 65350\n || this.state.format === \"hex\" || this.state.format === \"text\"} \n // placeholder=\"1 - 64\"\n style={{ display: 'inline-block', width: 140}}\n />\n </Form.Item>\n <Form.Item\n label=\"First Bit\"\n name=\"firstBit\"\n style={{ display: 'inline-block', width: 140, margin: '0 2px'}} \n >\n <InputNumber \n min={0} \n max={63}\n // precision={0} \n disabled={this.state.format === \"hex\" || this.state.format === \"text\" || this.state.pgn === 65305 || this.state.pgn > 65350\n }\n style={{ display: 'inline-block', width: 140, margin: '0 2px'}}\n />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Source\"\n name=\"sourceName\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select \n onChange={this.onSourceNameChange}\n >\n <Option key=\"can0\" value=\"can0\">can0</Option>\n <Option key=\"can1\" value=\"can1\">can1</Option>\n {\n ((this.state.mode === \"Add New Signal\" && ( this.props.signalMaint.collectionType === \"Command\" || this.state.viewRequestPGN ))\n || (this.state.mode === \"J1939 Database\" && this.state.viewRequestPGN)) \n &&\n <Option key=\"both\" value=\"both\">both</Option>\n }\n {\n this.state.mode === \"Add New Signal\" && this.props.signalMaint.collectionType !== \"Command\" && !this.state.viewRequestPGN &&\n <Option key=\"custom\" value=\"custom\">custom</Option>\n }\n </Select> \n </Form.Item> \n </Col> \n </Row> \n }\n {\n this.state.mode === \"Add New Signal\" &&\n this.state.sourceName === \"custom\" && \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Custom Source\"\n name=\"source\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Input \n maxLength={255}\n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate}\n />\n </Form.Item> \n </Col> \n </Row>\n }\n {/* This is for command or signals as integer or float */\n ((this.props.signalMaint.collectionType || \"none\") === \"none\" && \n ((this.state.format || \"float\") === \"float\" ) || \n ((this.props.signalMaint.collectionType || \"none\") === \"Command\" &&\n (this.state.format === \"integer\" || this.state.format === \"float\"))) &&\n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Bit Length\"\n name=\"bitLength\"\n >\n <InputNumber \n min={1}\n max={64}\n style={{ width: '100%' }} \n precision={0} \n disabled={this.state.mode === \"J1939 Database\" ||\n (this.props.isGlobalTemplate && !this.props.isadmin || \n !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate) \n } \n placeholder=\"Values 1 - 64\"\n />\n </Form.Item>\n {this.props.signalMaint.collectionType === \"Command\" &&\n <div style={{ marginTop:'-15px'}}>\n <span style={{ color:'#0052CC',fontSize:'12px'}}>Allowed Values 1 - 64</span>\n </div>\n }\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"First Bit\"\n name=\"firstBit\"\n >\n <InputNumber \n min={0} \n max={63}\n style={{ width: '100%' }} \n precision={0} \n disabled={this.state.mode === \"J1939 Database\" ||\n (this.props.isGlobalTemplate && !this.props.isadmin || \n !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate)\n } \n placeholder=\"Values 0 - 63\" \n />\n </Form.Item>\n {this.props.signalMaint.collectionType === \"Command\" &&\n <div style={{ marginTop:'-15px'}}>\n <span style={{ color:'#0052CC',fontSize:'12px'}}>Allowed Values 0 - 63</span>\n </div>\n }\n </Col> \n </Row> \n }\n {(((this.props.signalMaint.collectionType || \"none\") === \"none\" &&\n ((this.state.format || \"float\") === \"float\")) || \n ((this.props.signalMaint.collectionType || \"none\") === \"Command\" &&\n (this.state.format === \"integer\" || this.state.format === \"float\" || \n ((this.state.format || \"none\") === \"none\" && this.state.pgn !== 65305 \n && this.state.pgn !== 65310 && this.state.pgn <= 65350)) )\n ) && \n <Row gutter={8}>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Offset\"\n name=\"offset\" \n >\n <InputNumber \n style={{ width: '100%' }} \n //precision={12} \n disabled={this.state.mode === \"J1939 Database\" || \n (this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate \n && !this.props.iscreateOrUpdateTemplate)} \n />\n </Form.Item>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"Scaling\"\n name=\"scaling\" \n >\n <InputNumber \n style={{ width: '100%' }} \n //precision={12} \n disabled={this.state.mode === \"J1939 Database\" || \n (this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate \n && !this.props.iscreateOrUpdateTemplate)} \n />\n </Form.Item>\n </Col> \n </Row> \n }\n {/* only for generic telemetry that is not text */\n ((this.props.signalMaint.collectionType || \"none\") === \"none\" &&\n (this.state.format || \"float\") === \"float\") && \n <Row gutter={8}>\n <Col xs={24} md={12}>\n <div className=\"matchSourceAddressLabel\">Match Source Address</div>\n <Row gutter={8}>\n <Col xs={6}>\n <Form.Item\n name=\"matchSourceAddress\"\n valuePropName=\"checked\"\n >\n <Switch \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate || this.props.signalMaint.collectionType === \"Command\"}\n onChange={this.onMatchSourceAddressChange}\n />\n </Form.Item> \n </Col> \n <Col xs={18}>\n {\n this.state.matchSourceAddress &&\n <Form.Item\n name=\"sourceAddress\" \n >\n <InputNumber \n min={0} \n max={255} \n style={{ width: '100%' }} \n precision={0} \n onChange={this.onSourceAddressChange}\n placeholder=\"Values 0 - 255\" \n disabled={this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate || this.props.signalMaint.collectionType === \"Command\"}\n />\n </Form.Item> \n }\n </Col>\n </Row>\n </Col> \n <Col xs={24} md={12}>\n <Form.Item\n label=\"J1939 Error Checking\"\n name=\"j1939Error\"\n valuePropName=\"checked\"\n >\n <Switch disabled= {this.props.isGlobalTemplate && !this.props.isadmin || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate || this.props.signalMaint.collectionType === \"Command\"}/>\n </Form.Item> \n </Col> \n </Row> \n }\n {\n (this.props.signalMaint.collectionType !== \"Command\" \n ) &&\n <Row gutter={8}>\n {this.state.mode === \"Add New Signal\" && \n <Col xs={24} md={12}>\n <Form.Item\n label=\"CAN Header\"\n name=\"canHeader\" \n >\n <Input maxLength={255} \n disabled={this.props.isGlobalTemplate && !this.props.isadmin \n || !this.props.isGlobalTemplate && !this.props.iscreateOrUpdateTemplate\n || ((this.props.signalMaint.collectionType || \"none\") === \"none\" &&\n (this.state.format || \"float\") === \"text\") \n } \n />\n </Form.Item>\n </Col>\n }\n { (this.props.signalMaint.collectionType || \"none\") !== \"IQAN Diagnostics\" &&\n // Support response signal for J1939 or Generic signal for non-command, none-IQAN diagnostics\n <Col xs={24} md={12}>\n {\n this.state.commandSignals.length > 0 &&\n <Form.Item\n label=\"Command Name\"\n name=\"commandId\" \n > \n <Select \n onChange={this.onCommandNameChange}>\n { this.state.commandSignals.map(signal =>\n <Option key={signal.signalId } value={signal.signalId}\n style={signal.name.includes(\"(NA to org)\")? {color: '#A6A6A6', textDecorationLine: 'line-through'}\n :{color: \"blue\"}}\n >{signal.name}</Option>)};\n </Select> \n \n </Form.Item>\n }\n </Col>\n }\n </Row>\n }\n {\n this.props.signalMaint.collectionType === \"Command\" &&\n (this.state.pgn <= 65350 && this.state.pgn >= 65305 &&\n (this.state.format === \"integer\" || this.state.format === \"float\" || this.state.format === \"text\" || this.state.pgn == 65305\n || this.state.pgn > 65310 && this.state.pgn <= 65350 )) &&\n <Row gutter={8}>\n <Col xs={24} md={12}>\n {(this.state.format === \"integer\" || this.state.format === \"float\" || this.state.pgn !== 65305 && this.state.pgn !== 65310) &&\n <Form.Item\n label=\"Min\"\n name=\"min\" \n rules={[\n { required: this.state.format === \"integer\" || this.state.format === \"float\", \n message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Input maxLength={255} \n disabled={ this.state.format === \"hex\"}\n /> \n </Form.Item>\n } \n \n\n {(this.state.format === \"text\" || this.state.pgn === 65305 ) &&\n <Form.Item\n label=\"Multi-package\"\n name=\"multiPackage\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n\n <Select disabled={false} onChange={(value) => {\n // temporarily disabled for prod and enable dev/stage testing\n this.setMulti(value);\n const maxLength = value === 'Yes' ? 144 : 8;\n const invalidMessages = this.state.c2dWhitelist.filter((message:any) => message.length > maxLength);\n if (invalidMessages.length > 0) {\n this.setState({ expandPanel: \"1\" }); \n message.error(`Error: Whitelisted messages length cannot exceed ${maxLength} characters when Multi-Package is No`);\n this.setState({ multiPackageError: true }); \n } else {\n this.setState({ multiPackageError: false}); \n }\n }}>\n <Option value=\"Yes\">Yes</Option>\n <Option value=\"No\">No</Option>\n </Select> \n </Form.Item>\n }\n\n {(this.state.pgn===65305) &&\n // appConfigs.app.enableCommandSignalFakeTesting &&\n // this.props.context.appContext.orgId === 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' &&\n // (this.allowedSingleFrameUsersDev.includes(this.props.context.appContext.userId) ||\n // this.allowedSingleFrameUsersStag.includes(this.props.context.appContext.userId) ||\n // this.allowedSingleFrameUsersProd.includes(this.props.context.appContext.userId) ) && \n // temporarily disable for prod and enable dev/stage testing\n <Collapse onChange={(key)=>{\n this.setState({expandPanel:key.length?key[0]: null}) }} activeKey={this.state.expandPanel} style={{width:400}}>\n <Panel header=\"Cloud-to-Device Message Whitelist\" key=\"1\" style={{ width: 398 }}>\n \n {this.state.c2dWhitelist.sort().map((message:any, index:any) => (\n <Row key={index} gutter={8} style={{ marginBottom: 8}}>\n \n {/* // <Row key={index} gutter={8} style={{ marginBottom: 8, border: message.length > (this.state.multiPackage === 'Yes' ? 140 : 8) ? '0.5px solid red' : 'none' }}> */}\n <Col span={60}>\n <TextArea \n value={message} \n onChange={(event) => this.handleMessageTextChange(event, index)} \n style={{width:300, border: message.length > (this.state.multiPackage === 'Yes' ? 140 : 8) ? '0.5px solid red' : '' }} \n autoSize={{ minRows: 1, maxRows: this.state.multiPackage === 'Yes' ? 6 : 1 }}\n maxLength={this.state.multiPackage === 'Yes' ? 140 : 8}\n />\n </Col>\n <Col span={4}>\n <Button type=\"primary\" onClick={() => this.handleRemoveMessage(index)} style={{ zIndex: 1 }}>-</Button>\n </Col>\n </Row>\n ))}\n <Row gutter={8} style={{ marginBottom: 8, width:300}}>\n <Col span={60}>\n <Input\n value={this.state.newMessageText}\n onChange={this.handleNewMessageTextChange}\n style={{ width: 300 }}\n maxLength={this.state.multiPackage === 'Yes' ? 140 : 8}\n placeholder=\"Enter Text Here\"\n />\n </Col>\n <Col span={60} >\n <Button type=\"primary\" onClick={this.handleAddMessage} style={{ zIndex: 1 }}>Add New Message</Button>\n </Col>\n </Row>\n </Panel>\n </Collapse>\n }\n\n \n </Col>\n <Col xs={24} md={12}>\n <Form.Item\n label=\"Max\"\n name=\"max\" \n rules={[\n { required: (this.props.signalMaint.collectionType === \"Command\" &&\n this.state.pgn <= 65350 && \n (this.state.format === \"integer\"|| this.state.format === \"float\" || this.state.format === \"text\" ||\n this.state.pgn === 65305 )), \n message: appConfigs.errors.fieldErrors.valueRequired }\n ]}>\n\n <Input\n maxLength={(this.state.multiPackage === \"Yes\")? 140:80\n } \n disabled={this.state.format === \"hex\" || this.state.pgn == 65305}/>\n </Form.Item>\n </Col>\n </Row>\n }\n \n <div className=\"mt-20\"></div> \n </> \n }\n {\n (\n (this.state.signalId || (!this.state.signalId && this.state.mode)) && \n (this.props.iscreateRules || this.props.isupdateRules || this.props.isreadRules || this.props.isdeleteRules) &&\n (this.props.signalMaint.collectionType !== \"Command\") &&\n ((this.props.signalMaint.collectionType || \"none\") === \"none\" &&\n (this.state.format || \"float\") === \"float\" /* not for D2C text nor command */\n )\n ) && \n <SignalRule setLeftMergeRules={this.setLeftMergeRules} setRightMergeRules={this.setRightMergeRules} leftMergeRules={this.state.leftMergeRules} rightMergeRules={this.state.rightMergeRules} iscreateRules={this.props.iscreateRules} isreadRules={this.props.isreadRules} isupdateRules={this.props.isupdateRules}\n isdeleteRules={this.props.isdeleteRules} formRef={this.formRef.current} isGlobalTemplate = {this.props.isGlobalTemplate} isadmin={this.props.isadmin} /> \n }\n </Form>\n </Col>\n </Row>\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n templateDetails: state.templateDetailsReducers.templateDetailsState,\n signals: state.templateDetailsReducers.templateDetailsState.signals,\n signalMaint: state.templateDetailsReducers.templateDetailsState.signals.signalMaint,\n signalList: state.templateDetailsReducers.templateDetailsState.signals.signalList,\n context: state.contextReducer.context\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(SignalMaintInfo);","import React from \"react\";\nimport { Drawer, Button, Space, Tooltip, message, Modal } from \"antd\";\nimport { PlusOutlined, LeftOutlined, RightOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from '../../../utils/history';\n\nimport SignalMaintInfo from \"./SignalMaintInfo\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\n// import { T } from \"antd/lib/upload/utils\";\n\ninterface Prop {\n signalMaintClose: Function, \n signalMaintSetRecord: Function,\n getSignal: Function,\n signalMaint: any,\n signals: any,\n signalList: any,\n templateDetails: any,\n iscreate: boolean,\n isread: boolean,\n isdelete: boolean,\n iscreateRules: boolean,\n isreadRules: boolean,\n isupdateRules: boolean,\n isdeleteRules: boolean,\n iscreateOrUpdateTemplate: boolean,\n isGlobalTemplate: boolean,\n context: any\n}\ninterface State {\n isModalVisible: boolean,\n canAddress: Number,\n}\nclass SignalMaint extends React.Component<Prop, State> {\n\n state: State = {\n isModalVisible: false,\n canAddress: 39 //initial value set to 39. If any change to that will be handled by this state variable\n };\n \n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n onDrawerClose = () => {\n this.props.signalMaintClose(this);\n };\n\n gotoSignal = (e:any, direction:string) => {\n e.preventDefault();\n\n const \n tableData = this.props.signalList.tableData;\n let \n currentId = this.props.signalMaint.record.signalId,\n currentRecordIndex = -1;\n\n tableData.forEach((record: any, index: number) => {\n if (record.signalId === currentId) {\n currentRecordIndex = index;\n }\n });\n\n if (currentRecordIndex !== -1) {\n if (direction === \"next\" ) {\n currentRecordIndex = (currentRecordIndex === tableData.length - 1 ? 0 : currentRecordIndex + 1);\n }\n if (direction === \"previous\") {\n currentRecordIndex = (currentRecordIndex === 0 ? tableData.length - 1 : currentRecordIndex - 1);\n }\n \n this.props.getSignal(this, null, null, this.getTemplateId(), tableData[currentRecordIndex].signalId);\n }\n else {\n message.error(\"Unable navigate to \" + direction + \" signal\");\n }\n };\n\n addSignal = (e:any) => {\n e.preventDefault();\n this.props.signalMaintSetRecord(this, {});\n }\n\n showModal = () => {\n this.setState({\n isModalVisible: true,\n });\n };\n\n handleOk = () => {\n this.setState({\n \n isModalVisible: false,\n });\n };\n\n handleCancel = () => {\n this.setState({\n isModalVisible: false,\n });\n }; \n render() {\n const { title, width, visible } = this.props.signalMaint;\n const { templateRecord, activeTab, tabs} = this.props.templateDetails;\n\n let disableAddSignal = (\n (templateRecord.allowedMaxNoOfSignals && templateRecord.noOfSignals &&\n templateRecord.allowedMaxNoOfSignals <= templateRecord.noOfSignals)\n || ( this.props.signals.signalCollectionType === \"Command\" && templateRecord.orgCmdPgnSpns === '-')\n );\n let disableTooltip = this.props.signals.signalCollectionType === \"Command\" && templateRecord.orgCmdPgnSpns==='-'?\n \"Local org does not support remote control\" :\n \"Exceeds the max no. of signals defined in the quota of assets applied to the template\";\n let addSignalTooltip = disableAddSignal ? disableTooltip : \"Add Signal\";\n let firstControllerSa = 39;\n if (this.props.signalMaint.commandcontrollers !== null) {\n if (this.props.signalMaint.commandControllers.data !== null && this.props.signalMaint.commandControllers.data.length !== 0 ) {\n let firstController = this.props.signalMaint.commandControllers.data[0];\n if (firstController !== null) {\n firstControllerSa = firstController.cmdControllerSaId;\n } \n }\n }\n\n return (\n <Drawer\n data-id=\"signal-maint-drawer\" \n title={title}\n width={width}\n onClose={this.onDrawerClose}\n visible={visible}\n zIndex={3}\n destroyOnClose={true}\n footer={ \n <> \n <Space size=\"middle\" style={{ float: 'left' }}>\n {\n Object.keys(this.props.signalMaint.record).length !== 0 &&\n (this.props.signalList.tableData.length || 0) > 1 && this.props.isread &&\n <>\n <Tooltip title=\"Previous Signal\">\n <Button data-id=\"signal-maint-previous-signal-button\" type=\"default\" onClick={(e) => {this.gotoSignal(e, \"previous\")}}>\n <LeftOutlined /><span className=\"pl-5\">Signal</span>\n </Button>\n </Tooltip>\n <Tooltip title=\"Next Signal\">\n <Button data-id=\"signal-maint-next-signal-button\" type=\"default\" onClick={(e) => {this.gotoSignal(e, \"next\")}}>\n <span className=\"pr-5\">Signal</span><RightOutlined /> \n </Button>\n </Tooltip> \n </> \n }\n {\n this.props.iscreate && this.props.signals.signalCollectionType !== \"GPS\" &&\n this.props.signals.signalCollectionType !== \"IQAN Diagnostics\" &&\n <Tooltip title={addSignalTooltip}>\n <Button disabled={disableAddSignal} data-id=\"signal-maint-new-signal-button\" type=\"default\" icon={<PlusOutlined />} onClick={(e) => {this.addSignal(e)}}>\n <span className=\"pl-5\">Signal</span>\n </Button> \n </Tooltip> \n } \n </Space> \n <Space size=\"middle\" style={{ float: 'right' }}>\n <Button data-id=\"signal-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n { \n this.props.signals.signalCollectionType !== \"Command\" && \n (this.props.isGlobalTemplate && this.props.context.appContext.roleName.toLowerCase() === \"admin\" ||\n !this.props.isGlobalTemplate && (this.props.iscreateOrUpdateTemplate || \n this.props.iscreateRules || this.props.isupdateRules || this.props.isdeleteRules)) &&\n <Button data-id=\"signal-maint-submit-button\" type=\"primary\" form=\"signalMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n { \n this.props.signals.signalCollectionType === \"Command\" && \n firstControllerSa != 37 &&\n (this.props.isGlobalTemplate && this.props.context.appContext.roleName.toLowerCase() === \"admin\" ||\n !this.props.isGlobalTemplate && (this.props.iscreateOrUpdateTemplate || \n this.props.iscreateRules || this.props.isupdateRules || this.props.isdeleteRules)) &&\n <>\n <Button type=\"primary\" onClick={this.showModal}>\n {appConfigs.settings.form.submitButtonText}\n </Button>\n <Modal title=\"Confirm CAN Address\" visible={this.state.isModalVisible} \n //okButtonProps= { type:'primary', form:'signalMaintInfoForm', key: 'submit', htmlType: 'submit'}\n onOk={this.handleOk}\n onCancel={this.handleCancel} \n footer={[\n <Button onClick={this.handleCancel}>No</Button>,\n <Button key=\"submit\" type=\"primary\" onClick={this.handleOk} data-id=\"signal-maint-submit-button\" form=\"signalMaintInfoForm\" htmlType=\"submit\">\n Yes\n </Button>,\n ]}\n > \n <p>Are you sure the CAN address is the destination address on the controller?</p> \n </Modal>\n </>\n }\n {\n this.props.signals.signalCollectionType === \"Command\" && \n firstControllerSa === 37 && \n (this.props.isGlobalTemplate && this.props.context.appContext.roleName.toLowerCase() === \"admin\"|| !this.props.isGlobalTemplate && this.props.iscreateOrUpdateTemplate) &&\n <Button type=\"primary\" form=\"signalMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n </Space>\n </>\n }\n >\n {\n (this.props.iscreateOrUpdateTemplate|| this.props.isread || this.props.iscreateRules || this.props.isupdateRules || this.props.isdeleteRules || this.props.isreadRules) &&\n <SignalMaintInfo accept={this.handleOk} cancel={this.handleCancel} iscreateOrUpdateTemplate ={this.props.iscreateOrUpdateTemplate} iscreate={this.props.iscreate} isread={this.props.isread}\n iscreateRules={this.props.iscreateRules} isupdateRules={this.props.isupdateRules} isreadRules={this.props.isreadRules} isdeleteRules = {this.props.isdeleteRules}\n isGlobalTemplate = {this.props.isGlobalTemplate} isadmin={this.props.context.appContext.roleName.toLowerCase() === \"admin\"}/>\n }\n \n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n templateDetails: state.templateDetailsReducers.templateDetailsState,\n signals: state.templateDetailsReducers.templateDetailsState.signals,\n signalMaint: state.templateDetailsReducers.templateDetailsState.signals.signalMaint,\n signalList: state.templateDetailsReducers.templateDetailsState.signals.signalList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(SignalMaint);","import React from \"react\";\nimport { Form, Upload, Button, Modal, Tooltip, message, notification, Select, Input } from 'antd';\nimport { ImportOutlined, UploadOutlined, QuestionCircleOutlined } from '@ant-design/icons';\nimport { FormInstance } from 'antd/lib/form';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport history from '../../../utils/history';\nimport { getToken } from \"../../../utils/commonHelpers\";\n\nconst { Option } = Select;\n\ninterface Prop {\n iqanFileUploadMaint: Function,\n getSignalCollections: Function,\n signalCollections: any,\n signalCollectionMaint: any\n}\n\ninterface State {\n visible: boolean;\n}\n\nclass IqanFileUpload extends React.Component<Prop, State> { \n\n state:State = {\n visible: false\n }\n \n formRef = React.createRef<FormInstance>();\n\n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n openModal = (e:any) => { \n e.preventDefault(); \n \n this.setState({\n visible: true\n });\n\n const me = this;\n setTimeout(function() {\n if (me.formRef.current! !== null) {\n me.formRef.current!.setFieldsValue({\n sourceName: \"can0\",\n importMode: \"append\"\n });\n }\n }, 250); \n }; \n\n cancelModal = (e?: any) => {\n if (e) {\n e.preventDefault();\n }\n \n this.setState({\n visible: false\n });\n\n this.formRef.current!.resetFields(); \n\n let items:any = document.querySelectorAll(\".ant-upload-list\"); \n for (let i = items.length; i--;) {\n items[i].innerHTML = \"\";\n }\n };\n\n beforeUpload = (file:any) => {\n const fileType = file.type === \"application/json\";\n const fileSize = file.size / 1024 < 500;\n\n if (!fileType) {\n notification.error({\n message: \"File Processing\",\n description: \"JSON file type is only allowed\"\n });\n }\n if (!fileSize) {\n notification.error({\n message: \"File Processing\",\n description: \"File must be smaller than 500kB\"\n });\n }\n \n return fileType && fileSize;\n }\n\n onFinish = (values: any) => { \n if (!this.formRef.current?.getFieldValue(\"uploadId\")) {\n notification.error({\n message: \"File Processing\",\n description: \"Please select a JSON file\"\n });\n }\n else {\n this.props.iqanFileUploadMaint(this, this.onFinishSuccess, this.onFinishFailure, this.getTemplateId(), values);\n }\n };\n\n onFinishSuccess = (record: any) => { \n this.props.getSignalCollections(this, null, null, this.getTemplateId(), 1, this.props.signalCollections.searchText);\n this.cancelModal(); \n message.success(\"IQAN Telematic Signal File has been successfully processed\"); \n }\n\n onFinishFailure = (error: any) => { \n let errorStatus = !error.response ? 999 : (error.response.status || 999);\n\n if (errorStatus === 404) {\n notification.error({\n message: \"File Processing\",\n description: \"Uploaded file not found\"\n });\n }\n else {\n let formErrors: any = [];\n\n if ((error.response.data.errors.length || 0) > 0) {\n error.response.data.errors.forEach(function (record: any) {\n if (record.type === \"form\") {\n formErrors.push(record.message);\n }\n });\n }\n if (formErrors.length > 0) {\n formErrors.forEach((error: string) => {\n notification.error({\n message: \"File Processing\",\n description: error\n });\n });\n }\n else {\n notification.error({\n message: \"File Processing\",\n description: \"File processing failed with a generic error message - Please try later\"\n });\n }\n }\n }\n\n render() {\n let token=getToken();\n const me = this;\n const uploadProps = {\n name: \"file\",\n action: appConfigs.server.URL + \"/ui/api/templates/\" + this.getTemplateId() + \"/iqan-telematic-upload\",\n headers: {\n //authorization: `Bearer ${JSON.parse(window.localStorage.getItem(\"okta-token-storage\") || \"{}\").idToken.value}`,\n authorization: `Bearer ${token.value||token.idToken}`,\n },\n onChange(info: any) { \n if (info.file.status === \"done\") {\n me.formRef.current!.setFieldsValue({\n uploadId: info.file.response.data.iqanTelematicFile.uploadId\n });\n } \n else if (info.file.status === \"error\") {\n message.error(`${info.file.name} file upload failed.`);\n }\n }\n };\n\n return (\n \n <div>\n <Tooltip title=\"Upload IQAN Telematic Signal File\"> \n <Button data-id=\"signal-collections-iqan-upload-button\" href=\"# \" onClick={(e) => {this.openModal(e)}} target=\"_new\" type=\"default\" icon={<ImportOutlined />}>\n <span>Upload</span>\n </Button>\n </Tooltip>\n\n <Modal\n title=\"Upload IQAN Telematic Signal File\"\n visible={this.state.visible}\n onCancel={this.cancelModal}\n okButtonProps={{ hidden: true }}\n footer={[\n <Button key=\"cancel\" onClick={this.cancelModal}>\n {appConfigs.settings.drawers.cancelButtonText}\n </Button>,\n <Button type=\"primary\" form=\"iqanFileUploadForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n ]}\n >\n <Upload \n {...uploadProps} \n beforeUpload={this.beforeUpload}\n >\n <Button>\n <UploadOutlined /> Select File to Upload\n </Button>\n <Tooltip placement=\"topLeft\" title={appConfigs.messages.iqanTelematicSignalFileTooltip}>\n <QuestionCircleOutlined style={{ marginLeft: '10px'}}/>\n </Tooltip>\n </Upload>\n\n <Form\n id=\"iqanFileUploadForm\"\n ref={this.formRef}\n layout=\"vertical\"\n onFinish={this.onFinish}\n className=\"mt-10\"\n > \n <Form.Item \n name=\"uploadId\"\n style={{ display: 'none' }}\n > \n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item\n label=\"Source\" \n name=\"sourceName\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]} \n >\n <Select\n style={{ minWidth: 180}}\n >\n <Option key=\"can0\" value=\"can0\">can0</Option>\n <Option key=\"can1\" value=\"can1\">can1</Option>\n </Select> \n </Form.Item>\n </Form>\n </Modal>\n </div>\n\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n signalCollections: state.templateDetailsReducers.templateDetailsState.tabs[0],\n signalCollectionMaint: state.templateDetailsReducers.templateDetailsState.tabs[0].signalCollectionMaint\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(IqanFileUpload);","import React, { Component } from \"react\";\nimport { Table, Button, Space, Popover, Tag, Popconfirm, Tooltip, message, Input,Row,Col } from \"antd\";\nimport { PlusOutlined, EditOutlined, EllipsisOutlined, DeleteOutlined, UnorderedListOutlined, EyeInvisibleFilled } from \"@ant-design/icons\";\nimport { Breakpoint } from 'antd/lib/_util/responsiveObserve';\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport history from '../../../utils/history';\nimport { closePopover, getPermissions } from \"../../../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport Signals from \"../signals/Signals\";\nimport SignalMaint from \"../signalMaint/SignalMaint\";\nimport IqanFileUpload from \"../iqanFileUpload/IqanFileUpload\";\n\nimport \"./signalCollections.css\";\n\nconst { Search } = Input;\n\ninterface Prop {\n signalCollectionsSetPagination: Function,\n signalCollectionsSetSearch: Function,\n getSignalCollection: Function,\n getSignalCollections: Function,\n signalCollectionDelete: Function,\n getSignals: Function,\n signalsOpen: Function,\n signalCollectionMaintOpen: Function,\n context: any,\n signalCollections: any,\n templateDetails: any,\n isread: boolean,\n iscreate: boolean,\n isdelete: boolean,\n iscreateRules: boolean, // rules\n isreadRules: boolean,\n isupdateRules: boolean,\n isdeleteRules: boolean,\n iscreateOrUpdateTemplate: boolean,\n isGlobalTemplate: boolean, \n orgCmdPgnSpns: String\n}\n\nclass SignalCollections extends Component<Prop, {}> {\n\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n componentDidMount () {\n this.props.signalCollectionsSetPagination(this.onPaginationChange);\n this.props.signalCollectionsSetSearch(\"\");\n this.props.getSignalCollections(this, null, null, this.getTemplateId(), 1, \"\"); \n }\n \n onPaginationChange = (page: number) => {\n this.props.getSignalCollections(this, null, null, this.getTemplateId(), page, this.props.signalCollections.searchText);\n };\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n\n if ( action === \"add\") {\n this.props.signalCollectionMaintOpen(this, this.drawerWidth, {});\n }\n else if ( action === \"edit\") {\n this.props.getSignalCollection(this, this.getSignalCollectionSuccess, null, this.getTemplateId(), record.signalCollectionId);\n }\n else if ( action === \"delete\") {\n this.props.signalCollectionDelete(this, this.signalCollectiondDeleteSuccess, null, this.getTemplateId(), record.signalCollectionId);\n }\n else if ( action === \"signals\" ) {\n this.props.signalsOpen(this, \"Signals\", this.drawerWidth, record.signalCollectionId, record.name, record.type);\n }\n else if ( action === \"assign\" ) {\n message.info(\"TBD\"); \n }\n \n closePopover(); \n }\n \n getSignalCollectionSuccess = (record: any) => { \n this.props.signalCollectionMaintOpen(this, this.drawerWidth, record);\n }\n \n signalCollectiondDeleteSuccess = (record: any) => { \n const signalCollections = this.props.signalCollections;\n this.props.getSignalCollections(this, this.signalCollectiondDeleteSuccess2, null, this.getTemplateId(), signalCollections.tableConfig.pagination.current, signalCollections.searchText);\n message.success(\"Signal collection has been successfully deleted\"); \n }\n\n signalCollectiondDeleteSuccess2 = (record: any) => { \n const signalCollections = this.props.signalCollections;\n if ((signalCollections.tableData.length || 0) === 0) {\n let goToPage = signalCollections.tableConfig.pagination.current;\n goToPage = (goToPage === 1 ? null : goToPage - 1); \n this.props.getSignalCollections(this, null, null, this.getTemplateId(), goToPage, signalCollections.searchText);\n }\n }\n\n confirmDeletion = (record:any) => (\n <Popconfirm\n title={\"Are you sure to delete this signal collection?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Signal Collection\"> \n <Button data-id=\"signal-collections-actions-delete-button\" type=\"default\" icon={<DeleteOutlined />} className=\"delete-signal-collection\" />\n </Tooltip>\n </Popconfirm>\n );\n \n listColectionSignals = (record:any) => (\n (\n record.type === \"none\" ||\n record.type === \"GPS\" ||\n record.type === \"IQAN Diagnostics\" ||\n record.type === \"Command\"\n ) &&\n <Tooltip title=\"List Collection Signals\">\n <Button data-id=\"signal-collections-actions-signals-button\" type=\"default\" icon={<UnorderedListOutlined />} onClick={(e) => {this.onAction(e, record, \"signals\")}}/> \n </Tooltip>\n );\n\n adminActions = (record:any, isRead:any, isCreateOrUpdate:any, isDelete:any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"large\">\n {\n //if template is a global template and role of the user is admin or access permission logic\n // Non-admin shall be able to view template collection, but not modify it\n ((this.props.templateDetails.templateRecord.templateVisibleToSubOrg \n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || isRead || isCreateOrUpdate) &&\n (record.type === \"none\" || record.type === \"GPS\" || record.type === \"IQAN Diagnostics\" || \n (record.type === \"Command\" && (this.props.orgCmdPgnSpns === null || this.props.orgCmdPgnSpns !== '-')))) ||\n (!this.props.templateDetails.templateRecord.templateVisibleToSubOrg \n && ((isCreateOrUpdate || isRead) &&\n (record.type === \"none\" || record.type === \"GPS\" || record.type === \"IQAN Diagnostics\" || \n (record.type === \"Command\" && (this.props.orgCmdPgnSpns === null || this.props.orgCmdPgnSpns !== '-'))))\n )\n ) &&\n <Tooltip title=\"Edit Signal Collection\">\n <Button data-id=\"signal-collections-actions-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => {this.onAction(e, record, \"edit\")}}/> \n </Tooltip>\n }\n {\n //if template is a global template and role of the user is admin or access permission logic\n ((this.props.templateDetails.templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\" &&\n (record.type === \"none\" || record.type === \"GPS\" || record.type === \"IQAN Diagnostics\" || \n (record.type === \"Command\" && (this.props.orgCmdPgnSpns === null || this.props.orgCmdPgnSpns !== '-'))))\n ||\n (!this.props.templateDetails.templateRecord.templateVisibleToSubOrg && isDelete &&\n (record.type === \"none\" || record.type === \"GPS\" || record.type === \"IQAN Diagnostics\" || \n (record.type === \"Command\" && (this.props.orgCmdPgnSpns === null || this.props.orgCmdPgnSpns !== '-'))))) &&\n this.confirmDeletion(record) \n \n }\n { \n isRead &&\n this.listColectionSignals(record)\n }\n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n >\n <Button data-id=\"signal-collections-actions-button\" type=\"default\" icon={<EllipsisOutlined />} /> \n </Popover>\n );\n\n onSearch = (searchText: string) => { \n let me = this;\n\n this.props.signalCollectionsSetSearch((searchText || \"\"));\n setTimeout(function(){\n me.props.getSignalCollections(me, null, null, me.getTemplateId(), 1, searchText);\n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.signalCollectionsSetSearch((value || \"\"));\n }\n\n render() { \n\n const { tableConfig, tableData, searchText } = this.props.signalCollections;\n const { templateRecord } = this.props.templateDetails; \n\n const tableColumns = [\n {\n title: \"Collection Name\",\n dataIndex: \"name\",\n key: \"name\",\n render: (name: number, record: any) => (\n <>\n {\n !(\n record.type === \"none\" ||\n record.type === \"GPS\" ||\n record.type === \"IQAN Diagnostics\" ||\n record.type === \"Command\" \n ) &&\n <span>{name}</span>\n } \n {\n (\n record.type === \"none\" ||\n record.type === \"GPS\" ||\n record.type === \"IQAN Diagnostics\" ||\n (record.type === \"Command\" && (templateRecord.orgCmdPgnSpns == null || templateRecord.orgCmdPgnSpns !== '-') )\n ) &&\n <Tooltip title=\"List Collection Signals\">\n <a href=\"# \" onClick={(e) => {this.onAction(e, record, \"signals\")}}>{name}</a>\n </Tooltip> \n } \n {\n (record.type === \"Command\" && (templateRecord.orgCmdPgnSpns === '-') ) &&\n <>\n <EyeInvisibleFilled className=\"invisible-collection\"/>\n \n {/* <Text type=\"danger\">{fullName}</Text> */}\n <Tooltip title=\"List Command Collection Not Applicable to the Org\">\n <a href = \"#\" style={{ backgroundColor:'#EBEBEB', color: '#A6A6A6', textDecorationLine: 'line-through' }} onClick={(e) => {this.onAction(e, record, \"signals\")}}>{name}</a>\n </Tooltip> \n </> \n }\n </> \n ),\n width: \"50%\",\n },\n {\n title: \"Capture Interval\",\n dataIndex: \"updateInterval\",\n key: \"updateInterval\",\n align: \"center\" as \"center\",\n render: (type: string, record: any) => (\n <> \n {\n (\n record.type === \"none\" ||\n record.type === \"GPS\" ||\n record.type === \"IQAN Diagnostics\" ||\n (record.type === \"Command\" && (templateRecord.orgCmdPgnSpns == null || templateRecord.orgCmdPgnSpns !== '-') )\n ) &&\n <span>{record.updateInterval}</span>\n }\n {\n ( record.type === \"Command\" && templateRecord.orgCmdPgnSpns === '-') &&\n <span style={{ backgroundColor:'#EBEBEB', color: '#A6A6A6', textDecorationLine: 'line-through' }}>{record.updateInterval}</span> \n }\n </>\n )\n \n },\n {\n title: \"Type\",\n dataIndex: \"type\",\n key: \"type\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n render: (type: string, record: any) => (\n <>\n {\n (\n record.type === \"none\" ||\n record.type === \"GPS\" ||\n record.type === \"IQAN Diagnostics\" ||\n ( record.type === \"Command\" && (templateRecord.orgCmdPgnSpns == null || templateRecord.orgCmdPgnSpns !== '-') )\n ) &&\n <span>{record.type === \"none\" ? \"Generic\" : type}</span>\n }\n {\n ( record.type === \"Command\" && templateRecord.orgCmdPgnSpns === '-') &&\n <span style={{backgroundColor:'#EBEBEB', color: '#A6A6A6', textDecorationLine: 'line-through' }}>{record.type}</span> \n }\n </>\n )\n },\n {\n title: \"Signals\",\n dataIndex: \"signalCount\",\n key: \"signalCount\",\n align: \"center\" as \"center\",\n responsive: [\"md\"] as Breakpoint[],\n width: \"140px\",\n render: (signalCount: number, record: any) => (\n <>\n {\n (\n record.type === \"none\" ||\n record.type === \"GPS\" ||\n record.type === \"IQAN Diagnostics\" ||\n ( record.type === \"Command\" && (templateRecord.orgCmdPgnSpns == null || templateRecord.orgCmdPgnSpns !== '-') )\n ) &&\n <div className=\"notifications-tag\">\n {\n signalCount > 0 && \n <Tag color=\"geekblue\">{signalCount}</Tag>\n }\n </div>\n }\n {\n ( record.type === \"Command\" && templateRecord.orgCmdPgnSpns === '-') &&\n <Tag style={{ backgroundColor:'#EBEBEB', color: '#A6A6A6', textDecorationLine: 'line-through' }}>{signalCount}</Tag> \n }\n </>\n )\n },\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n width: \"140px\",\n render: (text: any, record: any) => ( \n <> \n {\n (\n record.type === \"none\" ||\n record.type === \"GPS\" ||\n record.type === \"IQAN Diagnostics\" ||\n record.type === \"Command\"\n ) &&\n // Non-admin role can view global template but not modify it\n ((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || this.props.isread || this.props.iscreateOrUpdateTemplate)) ||\n (!templateRecord.templateVisibleToSubOrg && (templateRecord.objectAdmin || this.props.isread || this.props.iscreateOrUpdateTemplate))) && \n this.adminActions(record, this.props.isread, this.props.iscreateOrUpdateTemplate, this.props.isdelete)\n }\n {/* {\n !templateRecord.objectAdmin && this.props.isread &&\n this.listColectionSignals(record)\n } */}\n </>\n )\n }\n ];\n\n return (\n <>\n\n <Row>\n <Col>\n <Space size=\"middle\">\n {\n this.props.isread &&\n <Search\n data-id=\"signal-collections-search-field\"\n placeholder=\"Search by name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field template-search\"\n value={searchText}\n /> \n }\n \n <div className=\"hideshow\">\n {\n // (this.props.isGlobalTemplate && this.props.context.appContext.roleName.toLowerCase() === \"admin\") ?\n // <IqanFileUpload data-id=\"signal-collections-upload-iqan-button\"/> :\n ((templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\") \n || (!templateRecord.templateVisibleToSubOrg && (templateRecord.objectAdmin || this.props.iscreate))) &&\n <IqanFileUpload data-id=\"signal-collections-upload-iqan-button\"/> \n }\n </div> \n {\n // (this.props.isGlobalTemplate && this.props.context.appContext.roleName.toLowerCase() === \"admin\") ?\n // <Tooltip title=\"Create new signal collection\">\n // <Button data-id=\"signal-collections-new-collection-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add\")} className=\"template-button\">\n // <span>Collection</span>\n // </Button> \n // </Tooltip> : \n ((templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() === \"admin\") \n || (!templateRecord.templateVisibleToSubOrg && (templateRecord.objectAdmin || this.props.iscreate))) &&\n <Tooltip title=\"Create new signal collection\">\n <Button data-id=\"signal-collections-new-collection-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add\")} className=\"template-button\">\n <span>Collection</span>\n </Button> \n </Tooltip> \n } \n </Space>\n </Col>\n </Row>\n {\n this.props.isread &&\n <Table \n data-id=\"signal-collections-data\"\n {...tableConfig}\n rowKey={(record) => record.signalCollectionId}\n columns={tableColumns}\n dataSource={tableData}\n className=\"mt-10\"\n />\n }\n \n\n <Signals iscreateOrUpdateTemplate={this.props.iscreateOrUpdateTemplate} iscreate={this.props.iscreate} isread={this.props.isread} isdelete={this.props.isdelete} \n iscreateRules={this.props.iscreateRules} isreadRules={this.props.isreadRules} isupdateRules={this.props.isupdateRules} isdeleteRules={this.props.isdeleteRules}\n isGlobalTemplate = {this.props.isGlobalTemplate}/>\n <SignalMaint iscreateOrUpdateTemplate={this.props.iscreateOrUpdateTemplate} iscreate={this.props.iscreate} isread={this.props.isread} isdelete={this.props.isdelete} \n iscreateRules={this.props.iscreateRules} isreadRules={this.props.isreadRules} isupdateRules={this.props.isupdateRules} isdeleteRules={this.props.isdeleteRules}\n isGlobalTemplate = {this.props.isGlobalTemplate} context={this.props.context}/>\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n signalCollections: state.templateDetailsReducers.templateDetailsState.tabs[0],\n templateDetails: state.templateDetailsReducers.templateDetailsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(SignalCollections);\n ","import React from \"react\";\r\nimport { Form, Collapse, Row, Col, Select, Button, Tooltip, Input, message, Switch } from 'antd';\r\nimport { FormInstance } from 'antd/lib/form';\r\n\r\nimport { connect } from \"react-redux\";\r\nimport * as actions from \"../actions\";\r\n\r\nimport { appConfigs } from \"../../../utils/configurations\";\r\nimport { resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\r\n\r\nconst { Option } = Select;\r\nconst { Panel } = Collapse;\r\n\r\ninterface Prop {\r\n dm1MessagingMaint: Function,\r\n templateDetails: any,\r\n isread: boolean\r\n iscreate: boolean,\r\n isupdate: boolean,\r\n context: any\r\n}\r\n\r\ninterface State {\r\n can0: boolean,\r\n can1: boolean\r\n}\r\n\r\nclass Dm1Messaging extends React.Component<Prop, State> {\r\n\r\n state: State = {\r\n can0: false,\r\n can1: false\r\n };\r\n\r\n formRef = React.createRef<FormInstance>();\r\n\r\n componentDidMount() {\r\n this.componentUpdate(this.props.templateDetails.templateRecord); \r\n }\r\n\r\n componentDidUpdate(prevProps: Prop) {\r\n if (this.props.templateDetails.tabs[1].instance !== prevProps.templateDetails.tabs[1].instance) {\r\n this.componentUpdate(this.props.templateDetails.templateRecord);\r\n }\r\n }\r\n\r\n componentUpdate(record:any,flag: number = 0) {\r\n if (flag == 0)\r\n {\r\n this.closeCollapsed();\r\n } \r\n if (this.formRef.current != null) {\r\n this.formRef.current!.resetFields(); \r\n this.formRef.current!.setFieldsValue({\r\n templateId: record.templateId,\r\n dm1MessagingCan0Enabled: record.dm1MessagingCan0Enabled,\r\n dm1MessagingCan0UpdateInterval: record.dm1MessagingCan0UpdateInterval,\r\n dm1MessagingCan1Enabled: record.dm1MessagingCan1Enabled,\r\n dm1MessagingCan1UpdateInterval: record.dm1MessagingCan1UpdateInterval,\r\n dm1WhitelistType: record.dm1WhitelistType,\r\n dm1NotificationDelaySeconds: record.dm1NotificationDelaySeconds, \r\n maxDayDm1: record.maxDayDm1\r\n });\r\n this.setState({\r\n can0: record.dm1MessagingCan0Enabled,\r\n can1: record.dm1MessagingCan1Enabled\r\n });\r\n } \r\n };\r\n\r\n onFinish = (values: any) => { \r\n resetFormErrors(this, this.formRef.current);\r\n\r\n if (values.dm1MessagingCan0Enabled && (values.dm1MessagingCan0UpdateInterval || \"\") === \"\") {\r\n this.formRef.current!.setFieldsValue({\r\n dm1MessagingCan0UpdateInterval: 10\r\n });\r\n }\r\n if (values.dm1MessagingCan1Enabled && (values.dm1MessagingCan1UpdateInterval || \"\") === \"\") {\r\n this.formRef.current!.setFieldsValue({\r\n dm1MessagingCan1UpdateInterval: 10\r\n });\r\n }\r\n if ((values.dm1NotificationDelaySeconds || \"\") === \"\") {\r\n this.formRef.current!.setFieldsValue({\r\n dm1NotificationDelaySeconds: 60\r\n });\r\n }\r\n if ((values.maxDayDm1 || \"\") === \"\") {\r\n this.formRef.current!.setFieldsValue({\r\n maxDayDm1: 0\r\n });\r\n }\r\n \r\n this.props.dm1MessagingMaint(this, this.dm1MessagingMaintSuccess, null, this.formRef.current!.getFieldsValue());\r\n };\r\n\r\n dm1MessagingMaintSuccess = (data:any) => { \r\n message.success(\"Your changes have been successfully processed\");\r\n }\r\n\r\n onCan0Change = (checked:boolean) => {\r\n this.setState({\r\n can0: checked\r\n });\r\n }\r\n\r\n onCan1Change = (checked:boolean) => {\r\n this.setState({\r\n can1: checked\r\n });\r\n }\r\n\r\n closeCollapsed() { \r\n let active:any = document.querySelectorAll(\"[data-id=template-dm1-faults] .ant-collapse-item-active\"); \r\n if (active.length) {\r\n for (var i = 0; i < active.length; i++) { \r\n active[i]!.children[0].click(); \r\n }\r\n }\r\n }\r\n \r\n render() {\r\n \r\n const { templateRecord } = this.props.templateDetails;\r\n\r\n return (\r\n \r\n <div data-id=\"template-dm1-messaging\">\r\n <Collapse data-id=\"template-dm1-messaging-0\" bordered={false} defaultActiveKey={['dm1-messaging']} className=\"auto-close\">\r\n <Panel data-id=\"template-dm1-messaging-1\" header=\"DM1 Messaging\" key=\"dm1-messaging\">\r\n <Form \r\n name=\"templateDm1MessagingForm\"\r\n ref={this.formRef}\r\n layout=\"vertical\"\r\n onFinish={this.onFinish}\r\n >\r\n <Form.Item \r\n name=\"templateId\"\r\n style={{ display: 'none' }}\r\n >\r\n <Input type=\"hidden\" />\r\n </Form.Item>\r\n \r\n {/* Below DM1 messessaging section shall be visible to user who has read permission on either global or local teamplate\r\n the admin or iscreate/isupdate is used to control the submit button visiblity\r\n */}\r\n <Row gutter={16}>\r\n <Col xs={{ span: 24 }} md={{ span: 20 }} xl={{ span: 16 }}>\r\n <Row gutter={16}>\r\n <Col xs={{ span: 24 }} lg={{ span: 9, offset: 0 }}>\r\n <Form.Item\r\n label=\"DM1 Notification List\"\r\n name=\"dm1WhitelistType\" \r\n >\r\n <Select\r\n data-id=\"template-dm1-messaging-dm1-whitelist-type\"\r\n disabled={(templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !this.props.isread && !this.props.iscreate && !this.props.isupdate))\r\n || (!templateRecord.templateVisibleToSubOrg \r\n && (!templateRecord.objectAdmin && !this.props.isread && !this.props.iscreate && !this.props.isupdate))}\r\n >\r\n <Option key={\"all\"} value=\"all\">All</Option>\r\n <Option key={\"none\"} value=\"none\">None</Option>\r\n <Option key={\"whitelist\"} value=\"whitelist\">Whitelist</Option>\r\n <Option key={\"blacklist\"} value=\"blacklist\">Blacklist</Option>\r\n {/* uncomment to add white + black list option\r\n <Option key={\"whiteandblacklist\"} value=\"whiteandblacklist\">Whitelist and Blacklist</Option> */}\r\n \r\n \r\n </Select> \r\n </Form.Item>\r\n </Col> \r\n <Col xs={{ span: 24 }} lg={{ span: 9, offset: 0 }}>\r\n <Form.Item\r\n label=\"DM1 Notification Time Delay\"\r\n name=\"dm1NotificationDelaySeconds\" \r\n initialValue={60} \r\n >\r\n <Input \r\n addonAfter=\"sec.\" \r\n type=\"number\"\r\n min=\"1\" \r\n max=\"86400\" \r\n step=\"1\"\r\n pattern=\"[0-9]*{4}\"\r\n disabled={(templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !this.props.isread && !this.props.iscreate && !this.props.isupdate)) \r\n || (!templateRecord.templateVisibleToSubOrg \r\n && (!templateRecord.objectAdmin && !this.props.isread && !this.props.iscreate && !this.props.isupdate))}\r\n />\r\n </Form.Item>\r\n </Col> \r\n {/* <Col xs={{ span: 24 }} lg={{ span: 9, offset: 1 }}>\r\n <Form.Item\r\n label=\"Max Dm1 per day (0: unlimited)\"\r\n name=\"maxDayDm1\" \r\n initialValue={5} \r\n >\r\n <Input \r\n type=\"number\"\r\n min=\"0\" \r\n max=\"86400\" \r\n step=\"1\"\r\n pattern=\"[0-9]*{4}\"\r\n disabled={(templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !this.props.iscreate && !this.props.isupdate)) \r\n || (!templateRecord.templateVisibleToSubOrg \r\n && (!templateRecord.objectAdmin && !this.props.iscreate && !this.props.isupdate))}\r\n />\r\n </Form.Item>\r\n </Col> \r\n <Col xs={{ span: 0 }} lg={{ span: 4 }}>\r\n </Col> */}\r\n </Row> \r\n <Row gutter={16}>\r\n <Col xs={{ span: 6 }} lg={{ span: 2, offset: 0 }}>\r\n <Form.Item\r\n label=\"CAN0\"\r\n name=\"dm1MessagingCan0Enabled\"\r\n valuePropName=\"checked\"\r\n >\r\n <Switch \r\n defaultChecked={false} \r\n onChange={this.onCan0Change}\r\n disabled={(templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !this.props.isread && !this.props.iscreate && !this.props.isupdate))\r\n || (!templateRecord.templateVisibleToSubOrg \r\n && (!templateRecord.objectAdmin && !this.props.isread && !this.props.iscreate && !this.props.isupdate))}\r\n />\r\n </Form.Item> \r\n </Col> \r\n <Col xs={{ span: 18 }} lg={{ span: 7 }}>\r\n <Form.Item\r\n label=\"Can0 Update Interval\"\r\n name=\"dm1MessagingCan0UpdateInterval\" \r\n initialValue={10} \r\n > \r\n <Input \r\n addonAfter=\"sec.\" \r\n type=\"number\"\r\n min=\"0\" \r\n max=\"86400\" \r\n step=\"1\"\r\n pattern=\"[0-9]*{4}\"\r\n disabled={\r\n (templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !this.props.isread && !this.props.iscreate && !this.props.isupdate))\r\n || (!templateRecord.templateVisibleToSubOrg \r\n && (!this.state.can0 && !templateRecord.objectAdmin && !this.props.isread && !this.props.iscreate && !this.props.isupdate))\r\n } \r\n /> \r\n </Form.Item> \r\n </Col> \r\n <Col xs={{ span: 6 }} lg={{ span: 2, offset: 0 }}>\r\n <Form.Item\r\n label=\"CAN1\"\r\n name=\"dm1MessagingCan1Enabled\"\r\n valuePropName=\"checked\"\r\n >\r\n <Switch \r\n defaultChecked={false} \r\n onChange={this.onCan1Change}\r\n disabled={\r\n (templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !this.props.isread && !this.props.iscreate && !this.props.isupdate))\r\n || (!templateRecord.templateVisibleToSubOrg \r\n && (!templateRecord.objectAdmin && !this.props.isread && !this.props.iscreate && !this.props.isupdate))\r\n }\r\n />\r\n </Form.Item> \r\n </Col> \r\n <Col xs={{ span: 18 }} lg={{ span: 7 }}>\r\n <Form.Item\r\n label=\"Can1 Update Interval\"\r\n name=\"dm1MessagingCan1UpdateInterval\" \r\n initialValue={10} \r\n > \r\n <Input \r\n addonAfter=\"sec.\" \r\n type=\"number\"\r\n min=\"0\" \r\n max=\"86400\" \r\n step=\"1\"\r\n pattern=\"[0-9]*{4}\"\r\n disabled={\r\n (templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !this.props.isread || !this.props.iscreate && !this.props.isupdate))\r\n || (!templateRecord.templateVisibleToSubOrg &&\r\n (!this.state.can1 && !templateRecord.objectAdmin === true && !this.props.isread && !this.props.iscreate && !this.props.isupdate))\r\n } \r\n /> \r\n </Form.Item> \r\n </Col> \r\n <Col xs={{ span: 2 }} lg={{ span: 2 }}>\r\n { <Tooltip title='CAN update interval is not Applicable for Assets with Lite Part Numbers. For Assets with Lite Part Numbers, update interval will be ignored. For each unique DM1 fault, Gateway will upload the first DM1 then discard any of subsequent duplicate ones until the next calendar month starts. Please note that it will upload only predetermined max number of unique DM1 faults in a day.\r\n ' >\r\n <Button style={{backgroundColor:'rgba(248, 248, 248, 1)', borderColor: 'rgba(248, 248, 248, 1)', color: 'rgba(48, 48, 48, 1)', fontSize: \"100%\"}}>{'\\u24D8'}</Button>\r\n </Tooltip> } \r\n </Col> \r\n </Row>\r\n <Row>\r\n {\r\n ((templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\"))\r\n || (!templateRecord.templateVisibleToSubOrg && (templateRecord.objectAdmin || (this.props.iscreate || this.props.isupdate)))) &&\r\n <div>\r\n <Row gutter={16}>\r\n <Col>\r\n <Button\r\n data-id=\"template-dm1-messaging-submit-button\"\r\n className=\"mt-30\"\r\n type=\"primary\"\r\n ghost={true}\r\n onClick={() => this.componentUpdate(this.props.templateDetails.templateRecord,1)}\r\n >\r\n {appConfigs.settings.settingStyleForm.cancleButtonText}\r\n </Button>\r\n </Col>\r\n <Col>\r\n <Button\r\n data-id=\"template-dm1-messaging-submit-button\"\r\n className=\"mt-30\"\r\n type=\"primary\"\r\n htmlType=\"submit\"\r\n >\r\n {appConfigs.settings.settingStyleForm.saveButtonText}\r\n </Button>\r\n </Col>\r\n </Row>\r\n </div> \r\n }\r\n </Row> \r\n </Col> \r\n </Row> \r\n </Form>\r\n </Panel>\r\n </Collapse>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state:any) => {\r\n return {\r\n context: state.contextReducer.context,\r\n templateDetails: state.templateDetailsReducers.templateDetailsState\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n actions\r\n)(Dm1Messaging);","import React from \"react\";\nimport { Upload, Button, Modal, Tooltip, message, notification } from 'antd';\nimport { FileAddOutlined , UploadOutlined, QuestionCircleOutlined } from '@ant-design/icons';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { getToken, uuidv4 } from \"../../../utils/commonHelpers\";\nimport history from '../../../utils/history';\nimport { CSVLink } from \"react-csv\";\n\ninterface Prop {\n dm1FaultsAddRecords: Function,\n // dm1FaultsSetImportFlag : Function, //feature can track when csv file is imported\n editModeSet: Function,\n listType: string,\n dm1Faults: any\n}\n\ninterface State {\n visible: boolean;\n csvData: any,\n csvFileName: string\n}\n\nclass Dm1UploadFile extends React.Component<Prop, State> { \n\n listIndex = (this.props.listType=='whitelist')?0:1;\n csvLink:any = React.createRef<CSVLink>(); \n\n state:State = {\n visible: false,\n csvData: [],\n csvFileName: \"\"\n }\n\n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n openModal = (e:any) => { \n e.preventDefault(); \n this.setState({\n visible: true\n });\n }; \n\n closeModal = (e: any) => {\n e.preventDefault();\n this.setState({\n visible: false\n });\n\n let items:any = document.querySelectorAll(\".ant-upload-list\"); \n for (let i = items.length; i--;) {\n items[i].innerHTML = \"\";\n }\n };\n \n closeModalwhenSuccessful = () => {\n this.setState({\n visible: false\n });\n\n let items:any = document.querySelectorAll(\".ant-upload-list\"); \n for (let i = items.length; i--;) {\n items[i].innerHTML = \"\";\n }\n }; \n\n whiteListCsvData = () => { \n let csvData:any = [];\n let csvRecord:string[] = []; \n\n csvRecord.push(\"DM1Enable\");\n csvRecord.push(\"SA\");\n csvRecord.push(\"SPN\");\n csvRecord.push(\"FMI\");\n csvData.push(csvRecord);\n csvRecord = []; \n csvRecord.push(\"Enabled\");\n csvRecord.push(\"1\");\n csvRecord.push(\"200\");\n csvRecord.push(\"1\");\n csvData.push(csvRecord);\n csvRecord = []; \n csvRecord.push(\"Enabled\");\n csvRecord.push(\"1\");\n csvRecord.push(\"300\");\n csvRecord.push(\"2\");\n csvData.push(csvRecord);\n\n this.setState({ csvData: csvData, csvFileName: \"sample-\" + uuidv4() + \".csv\" });\n }\n\n whiteListSample = (e: any) => { \n e.preventDefault(); \n\n this.whiteListCsvData();\n\n const me = this;\n setTimeout(function () {\n me.csvLink.link.click();\n }, 250); \n }\n\n beforeUpload = (file:any) => {\n const fileType = file.type === \"text/csv\" || file.type === \"text/tsv\" || file.type === \"text/plain\" || file.type === \"application/vnd.ms-excel\";\n const fileSize = file.size / 1024 < 500;\n\n if (!fileType) {\n notification.error({\n message: \"File Processing\",\n description: \"CSV (comma separated values) and text file types are only allowed\"\n });\n }\n if (!fileSize) {\n notification.error({\n message: \"File Processing\",\n description: \"File must be smaller than 500kB\"\n });\n }\n \n return fileType && fileSize;\n }\n\n render() {\n let token=getToken();\n const me = this;\n const uploadProps = {\n name: \"file\",\n action: appConfigs.server.URL + \"/ui/api/templates/\" + this.getTemplateId() + \"/dm1-faults/upload\",\n headers: {\n //authorization: `Bearer ${JSON.parse(window.localStorage.getItem(\"okta-token-storage\") || \"{}\").idToken.value}`,\n authorization: `Bearer ${token.value||token.idToken}`,\n },\n onChange(info: any) { \n if (info.file.status === \"done\") {\n //const totalRecordsPre = (me.props.dm1Faults.tableData[me.listIndex].length || 0);\n me.props.dm1FaultsAddRecords(me, me.props.listType, info.file.response.data.dm1Faults);\n //const totalRecordsPost = (me.props.dm1Faults.tableData[me.listIndex].length || 0);\n message.success(`File has been successfully processed. Click Save to confirm changes!`);\n //me.props.dm1FaultsSetImportFlag(me, me.props.listType, true); //feature can track when csv file is imported\n me.closeModalwhenSuccessful();\n \n // if (totalRecordsPre > 0 && totalRecordsPre === totalRecordsPost) {\n // notification.warning({\n // message: \"File Processing\",\n // description: \"File has been successfully processed - No unique records were found\"\n // });\n // }\n // else {\n // if (totalRecordsPre > 0) {\n // message.success(`File has been successfully processed - ${totalRecordsPost-totalRecordsPre} record${totalRecordsPost-totalRecordsPre > 1 ? \"s\" : \"\"} added. Click Submit to save your changes!`);\n // }\n // else {\n // message.success(`File has been successfully processed. Click button Submit to save your changes!`);\n // }\n // }\n \n } \n else if (info.file.status === \"error\") {\n let formErrors: any = [];\n if (info.file.response.errors && (info.file.response.errors.length || 0) !== 0) {\n info.file.response.errors.forEach(function (record: any) {\n if (record.type === \"form\") {\n formErrors.push(record.message);\n }\n });\n }\n if (formErrors.length > 0) {\n formErrors.forEach((error: string) => {\n notification.error({\n message: \"File Processing\",\n description: error\n });\n });\n }\n else {\n message.error(`${info.file.name} file import failed.`);\n }\n }\n }\n };\n\n return (\n \n <div>\n <Tooltip title=\"Import Data from File\">\n <Button data-id=\"dm1-faults-upload-button\" href=\"# \" onClick={(e) => {this.openModal(e)}} target=\"_new\" type=\"default\" icon={<FileAddOutlined />}>\n <span>Import</span> \n </Button>\n </Tooltip>\n <Modal\n title=\"Add From Whitelist CSV File\"\n visible={this.state.visible}\n onCancel={this.closeModal}\n okButtonProps={{ hidden: true }}\n >\n <Upload \n {...uploadProps} \n beforeUpload={this.beforeUpload}\n >\n <Button>\n <UploadOutlined /> Select File to Import\n </Button>\n <Tooltip placement=\"topLeft\" title={appConfigs.messages.dm1FaultsUploadTooltip}>\n <QuestionCircleOutlined style={{ marginLeft: '10px'}}/>\n </Tooltip>\n <p>Note : Importing will overwrite the current list</p>\n </Upload>\n <div className=\"mt-20\">\n <a href=\"# \" onClick={(e) => {this.whiteListSample(e)}}>Download sample here</a>\n <CSVLink\n data={this.state.csvData}\n filename={this.state.csvFileName}\n className=\"hidden\"\n ref={(r:any) => this.csvLink = r}\n target=\"_blank\"\n />\n </div>\n </Modal>\n </div>\n\n );\n }\n}\n\n\nconst mapStateToProps = (state:any) => {\n return {\n dm1Faults: state.templateDetailsReducers.templateDetailsState.tabs[1]\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Dm1UploadFile);","import React, { Component } from \"react\";\r\nimport { Table, Button, Space, message, notification, Switch, InputNumber, Tooltip, Collapse, Row, Col, Radio } from \"antd\";\r\nimport { PlusOutlined, DeleteOutlined, ExportOutlined, EditOutlined, CheckCircleOutlined, CloseCircleOutlined } from \"@ant-design/icons\";\r\n\r\nimport { appConfigs } from \"../../../utils/configurations\";\r\nimport history from '../../../utils/history';\r\nimport { uuidv4, closePopover, getPermissions } from \"../../../utils/commonHelpers\";\r\n\r\nimport Dm1Messaging from \"./Dm1Messaging\";\r\nimport Dm1UploadFile from \"./Dm1UploadFile\";\r\n\r\nimport { connect } from \"react-redux\";\r\nimport * as actions from \"../actions\";\r\nimport { CSVLink } from \"react-csv\";\r\n\r\nimport \"./dm1Faults.css\";\r\n//import { getPermissions } from \"../../../actions/permissions\";\r\nconst { Panel } = Collapse;\r\n\r\ninterface Prop {\r\n dm1FaultsSetPagination: Function,\r\n dm1FaultsSetSearch: Function,\r\n getDm1Faults: Function,\r\n dm1FaultsDelete: Function,\r\n dm1FaultsDbDelete: Function,\r\n dm1FaultsAddRecord: Function,\r\n dm1FaultsMaint: Function,\r\n dm1FaultsSetFieldValue: Function,\r\n //dm1FaultsSetImportFlag : Function, //feature can track when csv file is imported\r\n dm1ListType: any,\r\n templateDetails: any,\r\n dm1Faults: any, \r\n iscreate: boolean, \r\n isread: boolean,\r\n isupdate: boolean,\r\n isdelete: boolean, \r\n context: any\r\n}\r\n\r\n\r\ninterface State {\r\n editMode: boolean,\r\n csvData: any,\r\n csvFileName: string,\r\n}\r\n\r\n\r\nclass Dm1Faults extends Component<Prop, State> {\r\n listType = this.props.dm1ListType.toLowerCase();\r\n listIndex = (this.listType=='whitelist')?0:1;\r\n \r\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\r\n csvLink:any = React.createRef<CSVLink>(); \r\n \r\n state: State = {\r\n editMode: false,\r\n csvData: [],\r\n csvFileName: \"\"\r\n };\r\n\r\n getTemplateId() {\r\n const pathnameArr = history.location.pathname.split(\"/\");\r\n return pathnameArr[pathnameArr.length - 1];\r\n }\r\n\r\n getTemplateNameUrl() {\r\n const pathnameArr = history.location.pathname.split(\"/\");\r\n return pathnameArr[pathnameArr.length - 2];\r\n }\r\n\r\n componentDidMount () { \r\n this.props.dm1FaultsSetPagination(this.onPaginationChange);\r\n this.props.getDm1Faults(this, this.listType, null, null, this.getTemplateId(), 1, this.props.dm1Faults.searchText);\r\n }\r\n\r\n componentDidUpdate(prevProps: Prop) {\r\n // Typical usage (don't forget to compare props):\r\n if (this.props.templateDetails.templateRecord.dm1WhitelistType !== prevProps.templateDetails.templateRecord.dm1WhitelistType) {\r\n this.setState({editMode: false})\r\n this.props.getDm1Faults(this, this.listType, null, null, this.getTemplateId(), 1, this.props.dm1Faults.searchText);\r\n } \r\n }\r\n onPaginationChange = (page: number) => {\r\n this.props.getDm1Faults(this, this.listType, null, null, this.getTemplateId(), page, this.props.dm1Faults.searchText);\r\n };\r\n\r\n onAction = (e:any, record:any, action:string) => {\r\n e.preventDefault();\r\n\r\n if ( action === \"add\" ) {\r\n }\r\n else if ( action === \"assign\" ) {\r\n message.info(\"TBD\"); \r\n }\r\n \r\n closePopover(); \r\n }\r\n \r\n addRecord = (e:any) => {\r\n e.preventDefault();\r\n if (!this.state.editMode) {\r\n this.setState({\r\n editMode: true\r\n });\r\n }\r\n this.props.dm1FaultsAddRecord(this,this.listType); \r\n }\r\n\r\n editMode = (e: any) => { \r\n e.preventDefault();\r\n this.editModeSet();\r\n }\r\n\r\n editModeSet = () => { \r\n this.setState({\r\n editMode: !this.state.editMode\r\n });\r\n }\r\n\r\n csvRecordPush = (csvRecord: any, attributeValue:string) => { \r\n //Replace single \" character with two \" characters to escape it CSV style\r\n csvRecord.push(attributeValue.replace(/\"/g,'\"\"'));\r\n }\r\n \r\n csvData = () => { \r\n let csvData:any = [];\r\n\r\n this.props.dm1Faults.tableData[this.listIndex].forEach((record: any, index: number) => { \r\n let csvRecord:string[] = []; \r\n if (index === 0) {\r\n this.csvRecordPush(csvRecord, \"DM1Enable\");\r\n this.csvRecordPush(csvRecord, \"SA\");\r\n this.csvRecordPush(csvRecord, \"SPN\");\r\n this.csvRecordPush(csvRecord, \"FMI\");\r\n csvData.push(csvRecord);\r\n }\r\n csvRecord = []; \r\n this.csvRecordPush(csvRecord, (record.enabled ? \"Enabled\" : \"Disabled\"));\r\n this.csvRecordPush(csvRecord, record.sa.toString());\r\n this.csvRecordPush(csvRecord, record.spn.toString());\r\n this.csvRecordPush(csvRecord, record.fmi.toString());\r\n csvData.push(csvRecord);\r\n });\r\n\r\n this.setState({ csvData: csvData, csvFileName: \"dm1-faults-\"+ this.listType + '-' + uuidv4() + \".csv\" });\r\n }\r\n\r\n exportData = (e: any) => { \r\n e.preventDefault(); \r\n\r\n this.csvData();\r\n\r\n const me = this;\r\n setTimeout(function () {\r\n me.csvLink.link.click();\r\n }, 250); \r\n }\r\n \r\n onFinish = (e: any) => { \r\n e.preventDefault(); \r\n \r\n if (!this.state.editMode) {\r\n this.setState({\r\n editMode: true\r\n });\r\n }\r\n \r\n const me = this;\r\n setTimeout(function() {\r\n me.onFinishSubmit();\r\n }, 250); \r\n }\r\n\r\n onFinishSubmit = () => { \r\n let recordValidation:boolean = true;\r\n let duplicatesExist:boolean = false;\r\n let tempData: any ={};\r\n \r\n this.props.dm1Faults.tableData[this.listIndex].every(function (record:any) { \r\n \r\n if (\r\n ((typeof(record.sa) === \"number\" ? record.sa + \"\" : record.sa) || \"\") === \"\" || \r\n ((typeof(record.spn) === \"number\" ? record.spn + \"\" : record.spn) || \"\") === \"\" || \r\n ((typeof(record.fmi) === \"number\" ? record.fmi + \"\" : record.fmi) || \"\") === \"\"\r\n ) {\r\n recordValidation = false;\r\n return false;\r\n }\r\n\r\n let key:string = 'sa'+record.sa.toString()+'spn'+record.spn.toString()+'fmi'+record.fmi.toString() ;\r\n \r\n \r\n if (key in tempData) \r\n {\r\n recordValidation = false;\r\n duplicatesExist = true;\r\n return false;\r\n }\r\n tempData[key]=1\r\n return true;\r\n }); \r\n\r\n\r\n if (!recordValidation) {\r\n if (duplicatesExist){\r\n notification.error({\r\n message: \"Validation Failure\",\r\n description: \"Please ensure you enter a unique combination of SA, SPN and FMI values for all DM1 Faults. Delete duplicate records.\"\r\n });\r\n }\r\n else{\r\n notification.error({\r\n message: \"Validation Failure\",\r\n description: \"Please provide SA, SPN and FMI values for all DM1 Faults. Delete unwanted records.\"\r\n });\r\n }\r\n return false; \r\n }\r\n else {\r\n this.props.dm1FaultsMaint(this, this.onFinishSubmitSuccess, null, this.getTemplateId(), this.listType, this.props.dm1Faults.tableData[this.listIndex]); \r\n }\r\n }\r\n\r\n onFinishSubmitSuccess = (record: any) => { \r\n message.success(\"DM1 Faults records for \"+this.listType+\" have been successfully processed\"); \r\n //if (this.props.dm1Faults.importFlag[this.listIndex]){\r\n // this.props.dm1FaultsSetImportFlag(this,this.listType,false);\r\n // } \r\n }\r\n\r\n onInputChange = (index:number, fieldName:string, fieldValue:any) => {\r\n this.props.dm1FaultsSetFieldValue(this, this.listType, index, fieldName, fieldValue); \r\n };\r\n \r\n deleteRecord = (e:any, index:number, record:any) => {\r\n e.preventDefault();\r\n\r\n if ((record.dm1Id || \"\") !== \"\") {\r\n this.props.dm1FaultsDbDelete(this, this.deleteRecordSuccess, null, this.getTemplateId(), this.listType, record.dm1Id);\r\n }\r\n else {\r\n this.props.dm1FaultsDelete(this, this.listType,index);\r\n this.deleteRecordSuccess(\"\");\r\n }\r\n };\r\n\r\n deleteRecordSuccess = (dm1Id:string) => { \r\n message.success(\"Record has been successfully deleted\"); \r\n };\r\n\r\n render() { \r\n \r\n const { tableConfig, tableData } = this.props.dm1Faults; \r\n const { templateRecord } = this.props.templateDetails;\r\n \r\n\r\n const tableColumns = [\r\n {\r\n title: (this.listType=='whitelist')?\"DM1Enable\":\"DM1Disable\" ,\r\n dataIndex: \"enabled\",\r\n key: \"enabled\",\r\n align: \"center\" as \"center\",\r\n width: \"25%\",\r\n sorter: (record1:any, record2:any) => (record1.enabled ? \"enabled\" : \"disabled\").length - (record2.enabled ? \"enabled\" : \"disabled\").length,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text:number, record:any, index:number) => (\r\n <>\r\n {\r\n this.state.editMode && \r\n <Switch \r\n checked={this.props.dm1Faults.tableData[this.listIndex][index].enabled} \r\n onChange={(value, event) => this.onInputChange(index, \"enabled\", value)} \r\n /> \r\n }\r\n {\r\n !this.state.editMode &&\r\n <>\r\n {\r\n record.enabled &&\r\n <CheckCircleOutlined className=\"dm1-fault-enbled\"/>\r\n }\r\n {\r\n !record.enabled &&\r\n <CloseCircleOutlined className=\"dm1-fault-disabled\"/>\r\n }\r\n </>\r\n }\r\n </>\r\n ) \r\n },\r\n { \r\n title: \"SA\",\r\n dataIndex: \"sa\",\r\n key: \"sa\",\r\n align: \"center\" as \"center\",\r\n width: \"25%\",\r\n sorter: (record1:any, record2:any) => record1.sa - record2.sa,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text:number, record:any, index:number) => (\r\n <>\r\n {\r\n this.state.editMode &&\r\n <InputNumber \r\n name=\"sa\"\r\n min={0} \r\n max={9999} \r\n precision={0} \r\n value={this.props.dm1Faults.tableData[this.listIndex][index].sa} \r\n onChange={(value) =>\r\n this.onInputChange(index, \"sa\", value)\r\n } \r\n />\r\n }\r\n {\r\n !this.state.editMode &&\r\n <span>{text}</span>\r\n }\r\n </>\r\n )\r\n },\r\n {\r\n title: \"SPN\",\r\n dataIndex: \"spn\",\r\n key: \"spn\",\r\n align: \"center\" as \"center\",\r\n width: \"25%\",\r\n sorter: (record1:any, record2:any) => record1.sa - record2.sa,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text:number, record:any, index:number) => (\r\n <>\r\n {\r\n this.state.editMode &&\r\n <InputNumber \r\n name=\"spn\"\r\n min={0} \r\n max={9999} \r\n precision={0} \r\n value={this.props.dm1Faults.tableData[this.listIndex][index].spn} \r\n onChange={(value) =>\r\n this.onInputChange(index, \"spn\", value)\r\n } \r\n />\r\n }\r\n {\r\n !this.state.editMode &&\r\n <span>{text}</span>\r\n }\r\n </>\r\n )\r\n },\r\n {\r\n title: \"FMI\",\r\n dataIndex: \"fmi\",\r\n key: \"fmi\",\r\n align: \"center\" as \"center\",\r\n width: \"25%\",\r\n sorter: (record1:any, record2:any) => record1.sa - record2.sa,\r\n sortDirections: ['descend', 'ascend'],\r\n render: (text:number, record:any, index:number) => (\r\n <>\r\n {\r\n this.state.editMode &&\r\n <InputNumber \r\n name=\"fmi\"\r\n min={0} \r\n max={9999} \r\n precision={0} \r\n value={this.props.dm1Faults.tableData[this.listIndex][index].fmi} \r\n onChange={(value) =>\r\n this.onInputChange(index, \"fmi\", value)\r\n } \r\n />\r\n }\r\n {\r\n !this.state.editMode &&\r\n <span>{text}</span>\r\n }\r\n </>\r\n )\r\n },\r\n {\r\n title: \"Actions\",\r\n align: \"center\" as \"center\",\r\n render: (text:number, record:any, index:number) => (\r\n <>\r\n {\r\n (((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\"))) \r\n || (!templateRecord.templateVisibleToSubOrg && this.props.isdelete)) &&\r\n <Tooltip title=\"Delete Record\">\r\n <Button disabled={!((templateRecord.dm1WhitelistType.toLowerCase() === this.listType)||(templateRecord.dm1WhitelistType.toLowerCase() === \"whiteandblacklist\"))} data-id=\"dm1-faults-delete-button\" type=\"default\" icon={<DeleteOutlined />} onClick={(e) => {this.deleteRecord(e, index, record)}}/>\r\n </Tooltip>\r\n } \r\n </>\r\n )\r\n }\r\n ];\r\n\r\n return (\r\n \r\n <div data-id=\"template-dm1-faults\">\r\n <Collapse data-id=\"template-dm1-messaging-0\" bordered={false} defaultActiveKey={['dm1-messaging']} className=\"auto-close\">\r\n <Panel data-id=\"template-dm1-messaging-1\" header={this.props.dm1ListType} key=\"dm1-messaging\">\r\n <div className=\"mt-20\">\r\n \r\n <Space size=\"middle\">\r\n { \r\n ((templateRecord.dm1WhitelistType.toLowerCase() === this.listType)||(templateRecord.dm1WhitelistType.toLowerCase() === \"whiteandblacklist\")) &&\r\n <>\r\n \r\n {\r\n (((templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\")))\r\n || (!templateRecord.templateVisibleToSubOrg && this.props.iscreate)) && \r\n <Tooltip title=\"Add Blank Record\">\r\n <Button data-id=\"dm1-faults-add-button\" onClick={(e) => {this.addRecord(e)}} type=\"default\" icon={<PlusOutlined />}>\r\n <span>Add</span>\r\n </Button>\r\n </Tooltip>\r\n\r\n }\r\n {\r\n (tableData[this.listIndex].length || 0) > 0 && \r\n (((templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\")))\r\n || (!templateRecord.templateVisibleToSubOrg && this.props.isupdate)) &&\r\n <Tooltip title=\"Edit Records\">\r\n <Button data-id=\"dm1-faults-edit-button\" onClick={(e) => {this.editMode(e)}} type=\"default\" icon={<EditOutlined />}>\r\n <span>Edit</span>\r\n </Button>\r\n </Tooltip>\r\n }\r\n {\r\n (((templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\")))\r\n || (!templateRecord.templateVisibleToSubOrg && (this.props.iscreate || this.props.isupdate)))\r\n &&\r\n <Dm1UploadFile data-id=\"dm1-faults-upload-button\" editModeSet={this.editModeSet} listType={this.listType}/>\r\n }\r\n \r\n </>\r\n }\r\n {\r\n (((templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\")))\r\n || (!templateRecord.templateVisibleToSubOrg && (this.props.iscreate || this.props.isupdate)))\r\n &&\r\n <>\r\n <Tooltip title=\"Export Table Data\">\r\n <Button data-id=\"dm1-faults-export-button\" href=\"# \" onClick={(e) => {this.exportData(e)}} target=\"_new\" type=\"default\" icon={<ExportOutlined />}>\r\n <span>Export</span> \r\n </Button>\r\n </Tooltip>\r\n <CSVLink\r\n data={this.state.csvData}\r\n filename={this.state.csvFileName}\r\n className=\"hidden\"\r\n ref={(r:any) => this.csvLink = r}\r\n target=\"_blank\"\r\n />\r\n </>\r\n }\r\n </Space>\r\n { \r\n ((templateRecord.dm1WhitelistType.toLowerCase() === this.listType)||(templateRecord.dm1WhitelistType.toLowerCase() === \"whiteandblacklist\")) && \r\n ((tableData[this.listIndex].length || 0) > 0) && \r\n (((templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\")))\r\n || (!templateRecord.templateVisibleToSubOrg && (this.props.iscreate || this.props.isupdate))) &&\r\n <div>\r\n <Button data-id=\"dm1-faults-submit-top-button\" href=\"# \" onClick={(e) => {this.onFinish(e)}} type=\"primary\">\r\n {appConfigs.settings.settingStyleForm.saveButtonText}\r\n </Button> \r\n </div> \r\n }\r\n \r\n </div>\r\n \r\n \r\n {\r\n this.props.isread &&\r\n <Table \r\n data-id=\"template-dm1-faults-table\"\r\n {...tableConfig}\r\n rowKey={(record) => record.dm1Id}\r\n columns={tableColumns}\r\n dataSource={tableData[this.listIndex]} \r\n className=\"mt-15\"\r\n />\r\n }\r\n </Panel>\r\n \r\n </Collapse>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state:any) => { \r\n return {\r\n context: state.contextReducer.context,\r\n dm1Faults: state.templateDetailsReducers.templateDetailsState.tabs[1],\r\n templateDetails: state.templateDetailsReducers.templateDetailsState\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n actions\r\n)(Dm1Faults);\r\n ","import React, { Component } from \"react\";\r\nimport { Table, Button, Space, message, notification, Switch, InputNumber, Tooltip, Collapse, Row, Col, Radio } from \"antd\";\r\nimport { PlusOutlined, DeleteOutlined, ExportOutlined, EditOutlined, CheckCircleOutlined, CloseCircleOutlined } from \"@ant-design/icons\";\r\n\r\nimport { appConfigs } from \"../../../utils/configurations\";\r\nimport history from '../../../utils/history';\r\nimport { uuidv4, closePopover, getPermissions } from \"../../../utils/commonHelpers\";\r\n\r\nimport Dm1Messaging from \"./Dm1Messaging\";\r\nimport Dm1UploadFile from \"./Dm1UploadFile\";\r\n\r\nimport { connect } from \"react-redux\";\r\nimport * as actions from \"../actions\";\r\n//import { CSVLink } from \"react-csv\";\r\n\r\nimport Dm1Lists from \"./Dm1Lists\";\r\n\r\nimport \"./dm1Faults.css\";\r\n//import { getPermissions } from \"../../../actions/permissions\";\r\nconst { Panel } = Collapse;\r\n\r\ninterface Prop {\r\n templateDetails: any,\r\n iscreate: boolean, \r\n isread: boolean,\r\n isupdate: boolean,\r\n isdelete: boolean, \r\n context: any\r\n}\r\n\r\n\r\ninterface State {\r\n editMode: boolean,\r\n csvData: any,\r\n csvFileName: string,\r\n}\r\n\r\nclass Dm1Faults extends Component<Prop, State> {\r\n\r\n render() { \r\n\r\n \r\n const { templateRecord } = this.props.templateDetails;\r\n \r\n return (\r\n <div data-id=\"template-dm1-faults\">\r\n {\r\n ((templateRecord.templateVisibleToSubOrg \r\n && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || \r\n this.props.iscreate || this.props.isread || this.props.isupdate))\r\n || (!templateRecord.templateVisibleToSubOrg && (this.props.iscreate || this.props.isupdate || this.props.isread))) &&\r\n <Dm1Messaging iscreate={this.props.iscreate} isread={this.props.isread} isupdate={this.props.isupdate}/>\r\n } \r\n \r\n <Dm1Lists iscreate={this.props.iscreate} isread={this.props.isread} isupdate={this.props.isupdate} isdelete={this.props.isdelete} dm1ListType=\"Whitelist\"/>\r\n <Dm1Lists iscreate={this.props.iscreate} isread={this.props.isread} isupdate={this.props.isupdate} isdelete={this.props.isdelete} dm1ListType=\"Blacklist\"/>\r\n\r\n </div>\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state:any) => {\r\n return {\r\n context: state.contextReducer.context,\r\n dm1Faults: state.templateDetailsReducers.templateDetailsState.tabs[1],\r\n templateDetails: state.templateDetailsReducers.templateDetailsState\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n actions\r\n)(Dm1Faults);\r\n ","import React, { useState } from \"react\";\nimport { Tree } from \"antd\";\n\ntype Value = string[];\n\ninterface Props {\n value?: Value;\n onChange?: (value: Value) => void;\n treeData: any; \n expandedKeys: string[],\n onExpand: any, \n iscreate: boolean,\n isread: boolean,\n isupdate: boolean,\n isGlobalTemplate: boolean,\n isadmin: boolean\n}\n\nconst SignalTree: React.FC<Props> = (props) => {\n const assertDefined = (propName: keyof Props) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n const { value = [], onChange, treeData } = props;\n\n const triggerCheck = (newValues: Value) => {\n if (onChange) {\n onChange(newValues);\n }\n };\n\n const onCheckNode = (selectedKeys: any) => {\n // console.log(selectedKeys); \n triggerCheck(selectedKeys);\n }; \n\n const {iscreate, isread, isupdate, isGlobalTemplate, isadmin} = props;\n\n return (\n <>\n {\n isread &&\n <span>\n <Tree\n checkable\n disabled={isGlobalTemplate && !isadmin || !isGlobalTemplate && !iscreate && !isupdate}\n onExpand={(keys)=>props.onExpand(keys)}\n expandedKeys={props.expandedKeys} \n onCheck={onCheckNode}\n checkedKeys={value}\n treeData={treeData}\n />\n </span>\n }\n {\n (!isread) &&\n <span>\n <Tree/>\n </span>\n }\n </>\n );\n};\n\nexport default SignalTree;\n","export const childNodes = (signals: any) => {\n return {\n key: signals._id,\n title: signals.label,\n };\n};\n\nexport const createTreeStructure = (collection: any) => {\n return {\n key: collection._id,\n title: collection.name,\n children: collection.values && collection.values.map(childNodes),\n };\n};\n\nexport const createJsonForSignalMaint = (datapoints: any, selectedValues: any) => {\n const { signals } = selectedValues;\n const selectedSignals = signals.filter((v: any) => datapoints.every((d: any) => d._id !== v));\n\n const preferedSignalJson = selectedSignals.reduce((acc: any, cur: any) => {\n const signalObject = datapoints.filter((cur1: any) => {\n if(cur1.values) {\n return cur1.values.some((sc: any) => cur === sc._id);\n } else {\n return false;\n } \n });\n return acc.concat({'signalCollectionId': signalObject[0]._id, 'signalId': cur});\n },[]);\n\n return preferedSignalJson;\n}\n","import React, { useEffect, useState, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form, Button, Empty, message } from \"antd\";\nimport * as actions from \"../actions\";\nimport SignalTree from \"./signalTree\";\n// import { useForm } from \"antd/lib/form/util\";\nimport history from \"../../../utils/history\";\nimport {\n createTreeStructure,\n createJsonForSignalMaint,\n} from \"./formatPinnedSignals\";\nimport { appConfigs } from '../../../utils/configurations';\nimport \"./pinnedSignals.css\";\n\n\ninterface Props {\n context: any;\n activeTab: any;\n getTemplate: Function;\n pinnedSignals: any;\n getPinnedSignals: Function;\n savePinnedSignals: Function;\n iscreate: boolean;\n isread: boolean;\n isupdate: boolean;\n // isdelete: boolean;\n isGlobalTemplate: boolean;\n isadmin: boolean;\n}\n\nconst PinnedSignals: React.FC<Props> = (props) => {\n //state variables\n const [form] = Form.useForm();\n const [maxSelected, setMaxSelected] = useState<number>(0);\n const { \n getPinnedSignals,\n savePinnedSignals,\n pinnedSignals,\n } = props;\n const [expandedKeys, setExpandedKeys] = useState<string[]>([]);\n const [isSubmitVisible, setSubmitVisibility] = useState<boolean>(false);\n const [treeSignals, setTreeSignals] = useState([]);\n const [datapoints, setDatapoints] = useState<any>(); \n\n\n const loadPreferedSignals = () => { \n getPinnedSignals(null, null, getTemplateId(), \"pinnedsignals\");\n };\n\n const loadPreferedSignalsCallback = useCallback(loadPreferedSignals, []);\n\n const { activeTab, getTemplate } = props;\n\n const {isadmin, iscreate, isread, isupdate, isGlobalTemplate} = props;\n\n const getTemplateId = () => {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n } \n \n //Load the updated signal collections.\n useEffect(() => {\n if(activeTab === \"3\") {\n getTemplate(null, getTemplateSuccess, null, getTemplateId());\n } \n }, [activeTab]);\n\n const formatTreeData = (datapoints: any) => {\n let submitVisible = false;\n let signalCollection = JSON.parse(datapoints || []);\n //remove the Command collection.\n signalCollection = signalCollection.filter((s: any) => s.type !== \"Command\");\n const treeData = signalCollection.map(createTreeStructure); \n return treeData;\n };\n\n\n const getTemplateSuccess = (response: any) => { \n if(response.datapoints) {\n setDatapoints(response.datapoints);\n const treeData = formatTreeData(response.datapoints);\n setTreeSignals(treeData);\n if(treeData && treeData.length > 0) {\n const submitVisible = treeData.some((elem: any) => elem.children.length > 0);\n setSubmitVisibility(submitVisible);\n }\n loadPreferedSignalsCallback();\n }\n }\n\n const setTreePinnedSignals = (preferedSignals: any): string[] => {\n const treeSignals = pinnedSignals.preferedSignals.reduce((acc: any, curr: any) => {\n acc = acc.concat(curr.signalId);\n return acc;\n }, []);\n return treeSignals;\n }\n\n const setExpanededKey = (preferedSignals: any) => {\n let uniqueExpandKeys;\n const expanedKeys = pinnedSignals.preferedSignals.reduce(\n (acc: any, curr: any) => {\n acc = acc.concat(curr.signalCollectionId);\n return acc;\n },\n []\n );\n if (expanedKeys) {\n uniqueExpandKeys = expanedKeys.filter((elem: any, pos: any) => {\n return expanedKeys.indexOf(elem) === pos;\n });\n }\n return uniqueExpandKeys;\n }\n\n\n\n //Once the API response received, update the tree with new data and selection \n useEffect(() => {\n let signals: string[] = [];\n if (pinnedSignals.preferedSignals) {\n signals = setTreePinnedSignals(pinnedSignals.preferedSignals);\n //Assign the expanded keys\n let uniqueExpandKeys = setExpanededKey(pinnedSignals.preferedSignals); \n setExpandedKeys(uniqueExpandKeys);\n }\n form.setFieldsValue({ signals: signals });\n }, [pinnedSignals.preferedSignals]);\n\n\n const preferedSignalsMaint = (preferedSignalJson: any) => {\n savePinnedSignals(\n preferedSignalsMaintSuccess,\n null,\n getTemplateId(),\n \"pinnedsignals\",\n preferedSignalJson \n );\n };\n\n const preferedSignalsMaintSuccess = (response: any) => {\n message.success('Signal selection saved successfully');\n }\n\n const onExpand = (expandedKeys: any) => { \n setExpandedKeys(expandedKeys);\n };\n\n const saveSignalMaint = useCallback(preferedSignalsMaint, []);\n\n //save the signals into DB.\n const onFinish = (values: any) => {\n const preferedSignalJson = createJsonForSignalMaint(\n JSON.parse(datapoints),\n values\n );\n saveSignalMaint(preferedSignalJson);\n };\n\n\n //Maximum 6 signals can be selected, validate the same\n const checkValidations = (rule: any, value: any) => {\n const newValue = value.filter((v: any) =>\n JSON.parse(datapoints).every((d: any) => d._id !== v)\n );\n setMaxSelected(newValue.length); \n if (!newValue || newValue.length > appConfigs.app.pinnedSignals.maxSignalsSelection) {\n return Promise.reject(`Maximum ${appConfigs.app.pinnedSignals.maxSignalsSelection} signals must be selected`);\n }\n return Promise.resolve();\n };\n\n const fomInitialValues = (): string[] => {\n let signals: string[] = [];\n if (pinnedSignals.preferedSignals) {\n signals = pinnedSignals.preferedSignals.reduce((acc: any, curr: any) => {\n acc = acc.concat(curr.signalId);\n return acc;\n }, []);\n }\n return signals;\n };\n\n\n if (treeSignals && treeSignals?.length > 0) {\n return (\n <Form\n layout=\"vertical\"\n form={form}\n onFinish={onFinish} \n initialValues={{ signals: fomInitialValues() }}\n >\n <Form.Item\n label=\"\"\n name=\"signals\"\n rules={[{ validator: checkValidations }]}\n >\n <SignalTree\n treeData={treeSignals}\n expandedKeys={expandedKeys}\n onExpand={onExpand}\n isupdate={isupdate} iscreate={iscreate} isread={isread} isGlobalTemplate={isGlobalTemplate} isadmin={isadmin}\n />\n </Form.Item>\n <Form.Item>\n <Button type=\"primary\" \n disabled={isGlobalTemplate && !isadmin || \n !isGlobalTemplate && (!iscreate && !isupdate) ||\n maxSelected > appConfigs.app.pinnedSignals.maxSignalsSelection} htmlType=\"submit\">\n Submit\n </Button>\n </Form.Item>\n </Form>\n );\n } else {\n return <Empty />;\n }\n};\n\n\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n pinnedSignals:\n state.templateDetailsReducers.templateDetailsState.tabs[2].pinnedSignals \n };\n};\n\n\nexport default connect(mapStateToProps, actions)(PinnedSignals);\n","import React from \"react\";\nimport { Form, Row, Col, Input, Select, InputNumber, Checkbox } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from '../../../utils/history';\n\nconst { Option } = Select;\n\ninterface Prop {\n signalCollectionMaintSubmit: Function,\n signalMaintOpen: Function,\n getSignalCollections: Function,\n signalCollections: any,\n signalCollectionMaint: any, \n orgCmdPgnSpns: any\n}\n\ninterface State {\n type: string;\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean; \n}\n\nclass CollectionMaintInfo extends React.Component<Prop, State> { \n \n state: State = {\n type: \"\"\n };\n\n formRef = React.createRef<FormInstance>(); \n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth - (window.innerWidth > 575 ? 100 : 0));\n\n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n componentDidMount() {\n this.componentUpdate(this.props.signalCollectionMaint.record);\n }\n\n componentDidUpdate(prevProps: Prop, prevState: FormState) {\n if (this.props.signalCollectionMaint.instance !== prevProps.signalCollectionMaint.instance) {\n this.componentUpdate(this.props.signalCollectionMaint.record);\n }\n }\n\n componentUpdate(record:any) {\n formInit(this); \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue({\n signalCollectionId: record.signalCollectionId,\n templateId: Object.keys(record).length === 0 ? this.getTemplateId() : record.templateId,\n name: record.name,\n updateIntervalValue: Object.keys(record).length === 0 ? 1 : record.updateIntervalValue,\n updateIntervalUom: Object.keys(record).length === 0 ? \"m\" : record.updateIntervalUom,\n type: Object.keys(record).length === 0 ? \"none\" : record.type,\n allSignals: Object.keys(record).length === 0 ? true : record.allSignals\n });\n this.setState({ type: Object.keys(record).length === 0 ? \"none\" : record.type });\n }\n };\n\n\n onFinish = (values: any) => {\n resetFormErrors(this, this.formRef.current);\n this.props.signalCollectionMaintSubmit(this, this.onFinishSuccess, this.onFinishFailure, values);\n };\n\n onFinishSuccess = (editMode:string, record: any) => { \n this.componentUpdate(record);\n successResponse(this, \"Signal collection has been successfully \" + (editMode === \"edit\" ? \"updated\" : \"created and added to the template\")); \n\n this.props.getSignalCollections(this, null, null, this.getTemplateId(), this.props.signalCollections.tableConfig.pagination.current, this.props.signalCollections.searchText); \n\n if (editMode === \"insert\" && (record.type === \"none\" || record.type === \"Command\")) {\n const me = this;\n setTimeout(function() {\n me.props.signalMaintOpen(me, me.drawerWidth, {}, record.type); \n }, 250); \n \n }\n }\n\n onFinishFailure = (error: any) => { \n errorResponse(this, error);\n }\n \n onTypeChange = (type:string) => {\n let \n defaultName = \"\",\n defaultIntervalValue = \"1\",\n defaultIntervalUom = \"m\";\n\n if (type === \"GPS\") {\n defaultName = \"GPS\";\n defaultIntervalValue = \"1\";\n defaultIntervalUom = \"m\";\n }\n else if (type === \"IQAN Diagnostics\") {\n defaultName = \"IQAN Diagnostics\";\n defaultIntervalValue = \"5\";\n defaultIntervalUom = \"m\";\n }\n else if (type === \"Command\") {\n defaultName = \"\";\n defaultIntervalValue = \"0\";\n defaultIntervalUom = \"s\";\n }\n\n const record = this.props.signalCollectionMaint.record;\n if (Object.keys(record).length !== 0 && record.type === type) {\n defaultName = record.name;\n defaultIntervalValue = record.updateIntervalValue;\n defaultIntervalUom = record.updateIntervalUom;\n }\n\n this.formRef.current!.setFieldsValue({\n name: defaultName,\n updateIntervalValue: defaultIntervalValue,\n updateIntervalUom: defaultIntervalUom\n });\n\n this.setState({ type: type });\n }; \n\n render() {\n \n return (\n\n <>\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"signal-collections-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"signal-collections-success-message\" message={this.state.formErrorMessage}/>}\n \n <Row gutter={8} style={{marginTop: 15}}>\n <Col offset={1} span={23}>\n <Form\n id=\"signalCollectionMaintInfoForm\"\n ref={this.formRef}\n layout=\"vertical\"\n onFinish={this.onFinish}\n >\n\n <Row gutter={8}> \n <Col span={24}>\n { \n !((this.state.type || \"\") === \"GPS\" || (this.state.type || \"\") === \"IQAN Diagnostics\")&&\n <Form.Item \n name=\"allSignals\"\n valuePropName=\"checked\"\n >\n <Checkbox \n style={{ width: '100%' }}\n >\n Wait for all signals in collection to send data to cloud<br/><span style={{color:'#0052CC',fontSize:'12px'}}>{\"Minimum Requirements: TP1 2.4.1.5/HED 1.4.1 or later\"}</span>\n </Checkbox> \n </Form.Item>\n } \n </Col> \n </Row>\n <Row gutter={8}>\n <Col xs={24} md={14}>\n <Form.Item\n label=\"Type\"\n name=\"type\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n \n <Select \n onChange={this.onTypeChange}\n >\n <Option key=\"none\" value=\"none\">Generic</Option>\n <Option key=\"GPS\" value=\"GPS\">GPS (one per template)</Option>\n <Option key=\"IQAN Diagnostics\" value=\"IQAN Diagnostics\">IQAN Diagnostics (one per template)</Option>\n {(this.props.orgCmdPgnSpns == null || this.props.orgCmdPgnSpns !== '-') &&\n <Option key=\"Command\" value=\"Command\">Command</Option>}\n </Select> \n \n </Form.Item>\n\n </Col> \n </Row> \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item \n name=\"signalCollectionId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item> \n\n <Form.Item \n name=\"templateId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item> \n\n <Form.Item\n label=\"Name\"\n name=\"name\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input \n maxLength={255} \n placeholder=\"Provide a unique, and easy to understand name for the signal collection\"\n disabled={(this.state.type || \"\") === \"GPS\" || (this.state.type || \"\") === \"IQAN Diagnostics\" } \n />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col xs={24} md={8}>\n <Form.Item\n label=\"Capture Interval\"\n name=\"updateIntervalValue\" \n rules={(this.state.type || \"\") === \"Command\" ? \n [{ required: false, message: appConfigs.errors.fieldErrors.valueRequired}] : \n [{ required: true, message: appConfigs.errors.fieldErrors.valueRequired}]\n }\n >\n <InputNumber \n min={(this.state.type || \"\") === \"Command\" ? 0: 1} \n max={(this.state.type || \"\") === \"Command\" ? 0: 86400000} \n style={{ width: '100%' }} \n precision={0} \n disabled={(this.state.type || \"\") === \"IQAN Diagnostics\" || this.state.type === \"Command\"} \n /> \n </Form.Item>\n </Col>\n <Col xs={24} md={6}>\n <Form.Item\n label=\"Units\"\n name=\"updateIntervalUom\" \n rules={(this.state.type || \"\") === \"Command\" ? \n [{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }] :\n [{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]\n }\n >\n <Select \n disabled={(this.state.type || \"\") === \"IQAN Diagnostics\" || this.state.type === \"Command\"} \n >\n {/* <Option key=\"ms\" value=\"ms\">Milliseconds</Option> */}\n <Option key=\"s\" value=\"s\">Seconds</Option>\n <Option key=\"m\" value=\"m\">Minutes</Option>\n <Option key=\"h\" value=\"h\">Hours</Option>\n </Select> \n </Form.Item>\n </Col>\n </Row> \n </Form>\n </Col>\n </Row>\n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n signalCollections: state.templateDetailsReducers.templateDetailsState.tabs[0],\n signalCollectionMaint: state.templateDetailsReducers.templateDetailsState.tabs[0].signalCollectionMaint,\n orgCmdPgnSpns: state.templateDetailsReducers.templateDetailsState.templateRecord.orgCmdPgnSpns\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(CollectionMaintInfo);","import React from \"react\";\nimport { Drawer, Button, Space, message, Tooltip } from \"antd\";\nimport { PlusOutlined, LeftOutlined, RightOutlined } from \"@ant-design/icons\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nimport CollectionMaintInfo from \"./CollectionMaintInfo\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport history from '../../../utils/history';\n\nimport \"./collectionMaint.css\";\n\ninterface Prop {\n signalCollectionMaintClose: Function, \n signalCollectionSetRecord: Function, \n getSignalCollection: Function,\n getSignalCollections: Function,\n signalCollections: any,\n iscreate: boolean,\n iscreateOrUpdateTemplate: boolean,\n isread: boolean,\n isdelete: boolean,\n isGlobalTemplate: boolean,\n context: any\n}\n\nclass CollectionMaint extends React.Component<Prop, {}> { \n \n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n onDrawerClose = () => {\n if (this.props.signalCollections.refreshOnUpdate) {\n this.props.getSignalCollections(this, null, null, this.getTemplateId(), this.props.signalCollections.tableConfig.pagination.current, this.props.signalCollections.searchText);\n }\n this.props.signalCollectionMaintClose(this);\n };\n\n gotoCollection = (e:any, direction:string) => {\n e.preventDefault();\n\n const \n tableData = this.props.signalCollections.tableData;\n let \n currentId = this.props.signalCollections.signalCollectionMaint.signalCollectionId,\n currentRecordIndex = -1;\n\n tableData.forEach((record: any, index: number) => {\n if (record.signalCollectionId === currentId) {\n currentRecordIndex = index;\n }\n });\n\n if (currentRecordIndex !== -1) {\n if (direction === \"next\" ) {\n currentRecordIndex = (currentRecordIndex === tableData.length - 1 ? 0 : currentRecordIndex + 1);\n }\n if (direction === \"previous\") {\n currentRecordIndex = (currentRecordIndex === 0 ? tableData.length - 1 : currentRecordIndex - 1);\n }\n this.props.getSignalCollection(this, null, null, this.getTemplateId(), tableData[currentRecordIndex].signalCollectionId);\n }\n else {\n message.error(\"Unable navigate to \" + direction + \" collection\");\n }\n };\n \n addCollection = (e:any) => {\n e.preventDefault();\n this.props.signalCollectionSetRecord(this, {});\n };\n\n render() {\n \n const { title, width, visible } = this.props.signalCollections.signalCollectionMaint;\n\n return (\n <Drawer\n data-id=\"signal-collection-maint-drawer\" \n title={title}\n width={width}\n onClose={this.onDrawerClose}\n visible={visible}\n zIndex={1}\n destroyOnClose={true}\n footer={\n <>\n <Space size=\"middle\" style={{ float: 'left' }}>\n {\n (this.props.signalCollections.tableData.length || 0) > 1 &&\n this.props.signalCollections.signalCollectionMaint.signalCollectionId &&\n <>\n <Button data-id=\"collection-maint-previous-collection-button\" type=\"default\" onClick={(e) => {this.gotoCollection(e, \"previous\")}}>\n <LeftOutlined /><span className=\"pl-5\">Collection</span>\n </Button>\n <Button data-id=\"collection-maint-next-collection-button\" type=\"default\" onClick={(e) => {this.gotoCollection(e, \"next\")}}>\n <span className=\"prl-5\">Collection</span><RightOutlined /> \n </Button>\n </>\n }\n {\n (Object.keys(this.props.signalCollections.signalCollectionMaint.record).length !== 0 || this.props.iscreate) &&\n <Tooltip title=\"Create new signal collection\">\n <Button data-id=\"collection-maint-new-collection-button\" type=\"default\" icon={<PlusOutlined />} onClick={(e) => this.addCollection(e)}>\n <span className=\"pl-5\">Collection</span>\n </Button> \n </Tooltip> \n }\n </Space>\n <Space size=\"middle\" style={{ float: 'right' }}>\n <Button type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n (this.props.isGlobalTemplate && this.props.context.appContext.roleName.toLowerCase() === \"admin\"|| !this.props.isGlobalTemplate && this.props.iscreateOrUpdateTemplate) &&\n <Button type=\"primary\" form=\"signalCollectionMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n </Space>\n </>\n }\n >\n <CollectionMaintInfo /> \n </Drawer>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n signalCollections: state.templateDetailsReducers.templateDetailsState.tabs[0]\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(CollectionMaint);","import React, { useState } from \"react\";\nimport { Tree } from \"antd\";\nimport { transpileModule } from \"typescript\";\n\ntype Value = string[];\n\ninterface Props {\n value?: Value;\n onChange?: (value: Value) => void;\n treeData: any; \n expandedKeys: string[],\n onExpand: any,\n iscreate: boolean,\n isupdate: boolean,\n isread: boolean,\n isGlobalTemplate: boolean,\n isadmin: boolean\n}\n\nconst SignalTree: React.FC<Props> = (props) => {\n const assertDefined = (propName: keyof Props) => {\n if (props[propName] === undefined) {\n console.error(`Property '${propName} must be defined for ListSelector`);\n }\n };\n assertDefined(\"onChange\");\n const { value = [], onChange, treeData } = props;\n\n const triggerCheck = (newValues: Value) => {\n if (onChange) {\n onChange(newValues);\n }\n };\n\n const onCheckNode = (selectedKeys: any) => {\n // console.log(selectedKeys); \n triggerCheck(selectedKeys);\n }; \n\n const { isadmin, iscreate, isupdate, isread, isGlobalTemplate } = props;\n\n return (\n <>\n {\n isread &&\n <span>\n <Tree\n checkable\n disabled={isGlobalTemplate && !isadmin || !isGlobalTemplate && !isupdate && !iscreate}\n checkStrictly={true}\n onExpand={(keys)=>props.onExpand(keys)}\n expandedKeys={props.expandedKeys} \n onCheck={onCheckNode}\n checkedKeys={value}\n treeData={treeData}\n />\n </span>\n }\n {!isread &&\n <span><Tree/></span>}\n </>\n );\n};\n\nexport default SignalTree;\n","export const childNodes = (signals: any) => {\n return {\n key: signals._id,\n title: signals.label,\n };\n };\n \n export const createTreeStructure = (collection: any) => {\n return {\n key: collection._id,\n title: collection.name,\n checkable:false,\n children: collection.values && collection.values.map(childNodes),\n };\n };\n \n export const createJsonForSignalMaint = (datapoints: any, selectedValues: any) => {\n const { signals } = selectedValues;\n const selectedSignals = signals.checked.filter((v: any) => datapoints.every((d: any) => d._id !== v));\n \n const preferedSignalJson = selectedSignals.reduce((acc: any, cur: any) => {\n const signalObject = datapoints.filter((cur1: any) => {\n if(cur1.values) {\n return cur1.values.some((sc: any) => cur === sc._id);\n } else {\n return false;\n } \n });\n return acc.concat({'signalCollectionId': signalObject[0]._id, 'signalId': cur});\n },[]);\n \n return preferedSignalJson;\n }\n ","import React, { useEffect, useState, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form, Button, Empty, message } from \"antd\";\nimport * as actions from \"../actions\";\nimport SignalTree from \"./signalTree\";\n// import { useForm } from \"antd/lib/form/util\";\nimport history from \"../../../utils/history\";\nimport {\n createTreeStructure,\n createJsonForSignalMaint,\n} from \"./formatOperatorSignals\";\nimport { appConfigs } from '../../../utils/configurations';\nimport { isArray } from \"@amcharts/amcharts4/core\";\n\n\n\ninterface Props {\n context: any;\n activeTab: any;\n getTemplate: Function;\n operatorSignals: any;\n getOperatorSignals: Function;\n saveOperatorSignals: Function;\n iscreate: boolean;\n isupdate: boolean;\n isread: boolean;\n // isdelete: boolean;\n isGlobalTemplate: boolean;\n isadmin: boolean;\n}\n\nconst OperatorSignals: React.FC<Props> = (props) => {\n //state variables\n const [form] = Form.useForm();\n const [maxSelected, setMaxSelected] = useState<number>(0);\n const { \n getOperatorSignals,\n saveOperatorSignals,\n operatorSignals,\n } = props;\n const [expandedKeys, setExpandedKeys] = useState<string[]>([]);\n const [treeSignals, setTreeSignals] = useState([]);\n const [datapoints, setDatapoints] = useState<any>(); \n\n\n const loadPreferedSignals = () => { \n getOperatorSignals(null, null, getTemplateId(), \"operatorsignals\");\n };\n\n const loadPreferedSignalsCallback = useCallback(loadPreferedSignals, []);\n\n const { activeTab, getTemplate } = props;\n const { isadmin, iscreate, isupdate, isread, isGlobalTemplate } = props;\n\n const getTemplateId = () => {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n } \n \n //Load the updated signal collections.\n useEffect(() => {\n if(activeTab === \"4\") {\n getTemplate(null, getTemplateSuccess, null, getTemplateId());\n } \n }, [activeTab]);\n\n const formatTreeData = (datapoints: any) => {\n let submitVisible = false;\n let signalCollection = JSON.parse(datapoints || []);\n signalCollection = signalCollection.filter((s: any) => s.name !== \"GPS\" && s.type !== \"Command\");\n const treeData = signalCollection.map(createTreeStructure); \n return treeData;\n };\n\n\n const getTemplateSuccess = (response: any) => { \n if(response.datapoints) {\n setDatapoints(response.datapoints);\n const treeData = formatTreeData(response.datapoints);\n setTreeSignals(treeData);\n loadPreferedSignalsCallback();\n }\n }\n\n const setTreeOperatorSignals = (preferedSignals: any): string[] => {\n const treeSignals = operatorSignals.preferedSignals.reduce((acc: any, curr: any) => {\n acc = acc.concat(curr.signalId);\n return acc;\n }, []);\n return treeSignals;\n }\n\n const setExpanededKey = (preferedSignals: any) => {\n let uniqueExpandKeys;\n const expanedKeys = operatorSignals.preferedSignals.reduce(\n (acc: any, curr: any) => {\n acc = acc.concat(curr.signalCollectionId);\n return acc;\n },\n []\n );\n if (expanedKeys) {\n uniqueExpandKeys = expanedKeys.filter((elem: any, pos: any) => {\n return expanedKeys.indexOf(elem) === pos;\n });\n }\n return uniqueExpandKeys;\n }\n\n\n\n //Once the API response received, update the tree with new data and selection \n useEffect(() => {\n let signals: string[] = [];\n if (operatorSignals.preferedSignals) {\n signals = setTreeOperatorSignals(operatorSignals.preferedSignals);\n //Assign the expanded keys\n let uniqueExpandKeys = setExpanededKey(operatorSignals.preferedSignals); \n setExpandedKeys(uniqueExpandKeys);\n }\n form.setFieldsValue({ signals: signals });\n }, [operatorSignals.preferedSignals]);\n\n\n const preferedSignalsMaint = (preferedSignalJson: any) => {\n saveOperatorSignals(\n preferedSignalsMaintSuccess,\n null,\n getTemplateId(),\n \"operatorsignals\",\n preferedSignalJson \n );\n };\n\n const preferedSignalsMaintSuccess = (response: any) => {\n message.success('Signal selection saved successfully');\n }\n\n const onExpand = (expandedKeys: any) => { \n setExpandedKeys(expandedKeys);\n };\n\n const saveSignalMaint = useCallback(preferedSignalsMaint, []);\n\n //save the signals into DB.\n const onFinish = (values: any) => {\n \n const preferedSignalJson = createJsonForSignalMaint(\n JSON.parse(datapoints),\n values\n );\n\n saveSignalMaint(preferedSignalJson);\n };\n\n const checkValidations = (rule: any, value: any) => {\n const newValue = value.checked.filter((v: any) =>\n JSON.parse(datapoints).every((d: any) => d._id !== v)\n );\n setMaxSelected(newValue.length); \n if (!newValue || newValue.length > appConfigs.app.operatorSignals.maxSignalsSelection) {\n return Promise.reject(`Maximum ${appConfigs.app.operatorSignals.maxSignalsSelection} signal must be selected`);\n }\n return Promise.resolve();\n };\n\n const fomInitialValues = (): string[] => {\n let signals: string[] = [];\n if (operatorSignals.preferedSignals) {\n signals = operatorSignals.preferedSignals.reduce((acc: any, curr: any) => {\n acc = acc.concat(curr.signalId);\n return acc;\n }, []);\n }\n return signals;\n };\n\n if (treeSignals && treeSignals?.length > 0) {\n return (\n <Form\n layout=\"vertical\"\n form={form}\n onFinish={onFinish} \n initialValues={{ signals: fomInitialValues() }}\n >\n <Form.Item\n label=\"\"\n name=\"signals\"\n rules={[{ validator: checkValidations }]}\n >\n <SignalTree\n treeData={treeSignals}\n expandedKeys={expandedKeys}\n onExpand={onExpand}\n iscreate={iscreate} isupdate={isupdate} isread={isread} isGlobalTemplate={isGlobalTemplate} isadmin={isadmin}\n />\n </Form.Item>\n <Form.Item>\n <Button type=\"primary\" \n disabled={isGlobalTemplate && !isadmin || \n !isGlobalTemplate && (!iscreate && !isupdate) ||\n maxSelected > appConfigs.app.operatorSignals.maxSignalsSelection} htmlType=\"submit\">\n Submit\n </Button>\n </Form.Item>\n </Form>\n );\n } else {\n return <Empty />;\n }\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n operatorSignals:\n state.templateDetailsReducers.templateDetailsState.tabs[3].operatorSignals \n };\n};\n\n\nexport default connect(mapStateToProps, actions)(OperatorSignals);\n","import React, { Component } from \"react\";\nimport { Table } from \"antd\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport history from '../../../utils/history';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\n\n\nimport \"./quotasApplied.css\";\n\ninterface Prop {\n getQuotasApplied: Function,\n quotasApplied: any,\n templateDetails: any,\n iscreate: boolean,\n isread: boolean,\n isupdate: boolean,\n isdelete: boolean,\n activeTab: any\n}\n\n\n\nclass QuotasApplied extends Component<Prop, {}> {\n\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n componentDidMount () {\n this.props.getQuotasApplied(this, null, null, this.getTemplateId()); \n }\n\n getQuotasAppliedSuccess = (record: any) => { \n // Do nothing\n }\n\n render() { \n\n const { tableConfig, tableData} = this.props.quotasApplied;\n\n const tableColumns = [\n {\n title: \"Quota Plan\",\n dataIndex: \"planQuotaName\",\n key: \"planQuotaName\",\n align: \"center\" as \"center\",\n render: (planQuotaName: string, record: any) => (\n <span>{planQuotaName}</span>\n )\n },\n {\n title: \"Part Number\",\n dataIndex: \"partNumber\",\n key: \"partNumber\",\n align: \"center\" as \"center\",\n render: (partNumber: string, record: any) => (\n <span>{partNumber}</span>\n )\n },\n {\n title: \"Min Capture Interval\",\n dataIndex: \"allowedMinCollectionFreq\",\n key: \"allowedMinCollectionFreq\",\n align: \"center\" as \"center\",\n render: (allowedMinCollectionFreq: string, record: any) => (\n <span>{allowedMinCollectionFreq}</span>\n )\n },\n {\n title: \"Max Signals\",\n dataIndex: \"allowedNoOfSignals\",\n key: \"allowedNoOfSignals\",\n align: \"center\" as \"center\",\n render: (allowedNoOfSignals: number, record: any) => (\n <span>{allowedNoOfSignals}</span>\n )\n },\n {\n title: \"Max Dm1 per day\",\n dataIndex: \"allowedMaxDayDm1\",\n key: \"allowedMaxDayDm1\",\n align: \"center\" as \"center\",\n render: (allowedMaxDayDm1: number, record: any) => (\n <span>{allowedMaxDayDm1}</span>\n )\n },\n {\n title: \"Assets\",\n dataIndex: \"assetsApplied\",\n key: \"assetsApplied\",\n align: \"center\" as \"center\",\n render: (assetsApplied: number, record: any) => (\n <span>{assetsApplied}</span>\n )\n }\n \n ];\n\n return (\n <>\n {\n this.props.isread &&\n <Table \n data-id=\"quotas-applied-data\"\n {...tableConfig}\n rowKey={(record) => record.planQuotaId}\n columns={tableColumns}\n dataSource={tableData}\n className=\"mt-10\"\n />\n }\n \n </>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n quotasApplied: state.templateDetailsReducers.templateDetailsState.tabs[4],\n templateDetails: state.templateDetailsReducers.templateDetailsState\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(QuotasApplied);\n ","import React, { Component } from \"react\";\nimport { Typography, Breadcrumb, Skeleton, Tabs, Tooltip, Button} from \"antd\";\nimport { CaretLeftOutlined } from '@ant-design/icons';\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport history from '../../utils/history';\n\nimport SignalCollections from \"./signalCollections/SignalCollections\";\nimport Dm1Faults from \"./dm1Faults/Dm1Faults\";\nimport PinnedSignals from \"./pinnedSignals/pinnedSignals\";\n\nimport CollectionMaint from \"./collectionMaint/CollectionMaint\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport \"./templateDetails.css\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport OperatorSignals from \"./operatorSignals/OperatorSignals\";\nimport QuotasApplied from \"./quotasApplied/quotasApplied\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\n\nconst { Paragraph } = Typography;\nconst { TabPane } = Tabs;\n\ninterface Prop {\n getTemplate: Function,\n templateMaint: Function,\n templateDetailsTabChange: Function,\n getQuotasApplied: Function, \n templateDetails: any,\n context: any,\n permissions: any,\n quotasApplied: any\n}\n\nclass TemplateDetails extends Component<Prop, {}> {\n\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n getTemplateId() {\n const pathnameArr = history.location.pathname.split(\"/\");\n return pathnameArr[pathnameArr.length - 1];\n }\n\n componentDidMount () {\n if (this.props.context.appContext.roleName.toLowerCase() === \"guest\" || this.props.context.appContext.roleName.toLowerCase() === \"barko_guest\"){\n history.push(\"/not-found\") \n }\n else {\n this.props.getTemplate(this, this.getTemplateSuccess, null, this.getTemplateId());\n }\n }\n\n componentWillUnmount() {\n this.props.templateDetailsTabChange(this, \"1\");\n }\n \n getTemplateSuccess = (record:any) => { \n }\n\n onTemplateNameChange = (value:string) => {\n this.props.templateMaint(this, null, null, this.getTemplateId(), \"name\", value);\n }\n\n onTemplateDescriptionChange = (value:string) => {\n this.props.templateMaint(this, null, null, this.getTemplateId(), \"description\", value);\n }\n\n goToTemplates = (e:any) => {\n e.preventDefault();\n history.push(\"/templates\");\n }\n\n onTabChange = (key:string) => {\n this.props.templateDetailsTabChange(this, key);\n }\n\n render() { \n \n const { templateRecord, activeTab, tabs} = this.props.templateDetails;\n const result = getPermissions(this.props.permissions.permissions.templates);\n const dm1Faults = getPermissions(this.props.permissions.permissions.dm1_settings);\n const rules = getPermissions(this.props.permissions.permissions.alert_settings);\n\n let iscreate = result[0]; \n let isread = result[1]; \n let isupdate = result[2]; \n let isdelete = result[3];\n let iscreateDm1Faults = false; \n let isreadDm1Faults = false\n let isupdateDm1Faults = false;\n let isdeleteDm1Faults = false;\n let iscreateRules = false;\n let isreadRules = false\n let isupdateRules = false;\n let isdeleteRules = false;\n let iscreateOrUpdateTemplate = false; \n let noEditDisplay = false; \n let orgCmdPgnSpns = templateRecord.orgCmdPgnSpns; \n\n let isadmin = false; \n\n //ops-2453, it should be enabled based on template permission\n // const oprPermissionResult = getPermissions(this.props.permissions.permissions.operator_support);\n // let isSignalCreate = oprPermissionResult[0];\n // let isSignalUpdate = oprPermissionResult[2];\n // let isSignalDelete = oprPermissionResult[3]; \n\n if(templateRecord.objectAdmin || isupdate) {\n noEditDisplay = true\n }\n\n if(iscreate || dm1Faults[0]) { iscreateDm1Faults = true; }\n if(isread || dm1Faults[1]) { isreadDm1Faults = true; }\n if(isupdate || dm1Faults[2]) { isupdateDm1Faults = true; }\n if(isdelete || dm1Faults[3]) { isdeleteDm1Faults = true; }\n\n if(iscreate || rules[0]) {iscreateRules = true; }\n if(isread || rules[1]) { isreadRules = true; }\n if(isupdate || rules[2]) { isupdateRules = true; }\n if(isdelete || rules[3]) { isdeleteRules = true; }\n if(iscreate || isupdate) { iscreateOrUpdateTemplate = true; }\n \n\n // The user who has view template subcomponent permission shall be able to view the tab\n // these type of user who does not have update permission will not see submit button but can view tab detail at least for dm1 definition\n // It is unclear for pinned signal/operator, if they cannot update, there is no reason for them to see the pinned signal/operator tab detail\n\n return (\n <div data-id=\"template-details-container\" className=\"layout-content\">\n <div data-id=\"template-details-breadcrumbs-container\">\n <Breadcrumb data-id=\"template-details-breadcrumbs\" separator=\"/\">\n <Breadcrumb.Item data-id=\"template-details-breadcrumb-element\" key=\"breadcrumb-0\" href=\"# \" onClick={(e) => {this.goToTemplates(e)}}>Templates</Breadcrumb.Item>\n <Breadcrumb.Item data-id=\"template-details-breadcrumb-element\" key=\"breadcrumb-1\">Template Details</Breadcrumb.Item>\n </Breadcrumb>\n </div>\n \n {\n ((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || isread))\n || (!templateRecord.templateVisibleToSubOrg && (templateRecord.objectAdmin || isread || isupdate))) &&\n <>\n <div className=\"content-header page-title\">\n {\n templateRecord.templateId &&\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation />\n </Tooltip> \n <Paragraph editable={(this.props.context.appContext.roleName.toLowerCase() === \"admin\" || isupdate) &&\n { onChange: this.onTemplateNameChange }}>{templateRecord.name}</Paragraph> \n { (templateRecord.quotasApplied) &&\n <Tooltip title={templateRecord.quotasApplied} >\n <Button style={{backgroundColor:'rgba(228, 241, 254, 1)', borderColor: 'rgba(228, 241, 254, 1)', color: 'rgba(1, 124, 132, 1)', fontSize: \"50%\"}}>Lite</Button>\n </Tooltip> \n } \n </div>\n }\n {\n !templateRecord.templateId &&\n <Skeleton.Input active={true} size=\"default\" />\n }\n \n </div>\n {\n templateRecord.templateId && ((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\"))\n || (!templateRecord.templateVisibleToSubOrg && (templateRecord.objectAdmin || isupdate))) &&\n <Paragraph editable={{ onChange: this.onTemplateDescriptionChange }}>{templateRecord.description || \"\"}</Paragraph> \n }\n {\n !templateRecord.templateId &&\n <Skeleton.Input active={true} size=\"small\" />\n }\n </> \n }\n {\n ((templateRecord.templateVisibleToSubOrg && this.props.context.appContext.roleName.toLowerCase() !== \"admin\" && !isread)\n || (!templateRecord.templateVisibleToSubOrg && (!templateRecord.objectAdmin && !isread && !isupdate))) &&\n <>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation />\n </Tooltip>\n <span>{templateRecord.name}</span>\n </div>\n </div>\n {\n templateRecord.description &&\n <div>{templateRecord.description || \"\"}</div>\n } \n <div className=\"mt-15\"></div> \n </>\n }\n \n <Tabs activeKey={activeTab} size=\"large\" type=\"card\" onChange={this.onTabChange}>\n {/* ops-2453 */} \n {\n (isreadRules || isread) &&\n <TabPane data-id=\"template-details-collections-tab-button\" tab={tabs[0].title} key=\"1\"> \n <SignalCollections iscreate={iscreate} iscreateRules={iscreateRules} isread={isread} isreadRules={isreadRules} \n isupdateRules={isupdateRules} isdelete={isdelete} isdeleteRules={isdeleteRules} iscreateOrUpdateTemplate={iscreateOrUpdateTemplate} \n isGlobalTemplate = {templateRecord.templateVisibleToSubOrg} orgCmdPgnSpns={orgCmdPgnSpns} />\n </TabPane>\n }\n {/* ops-2453 */} \n {\n (isreadDm1Faults) &&\n <TabPane data-id=\"template-details-dm1-faults-tab-button\" tab={tabs[1].title} key=\"2\"> \n <Dm1Faults iscreate={iscreateDm1Faults} isread={isreadDm1Faults} isupdate={isupdateDm1Faults} isdelete={isdeleteDm1Faults}/>\n </TabPane>\n }\n \n {/* ops-1224 */}\n { /* A user with read permision shall be able to read but shall not be able to update for both global or local template */\n ((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || isread)) \n || (!templateRecord.templateVisibleToSubOrg && (isread || iscreateOrUpdateTemplate))) &&\n <TabPane data-id=\"template-details-pinned-signals-tab-button\" tab={tabs[2].title} key=\"3\"> \n <PinnedSignals activeTab={activeTab} isadmin={this.props.context.appContext.roleName.toLowerCase() === \"admin\"} iscreate={iscreate} isread={isread} isupdate={isupdate} isGlobalTemplate={templateRecord.templateVisibleToSubOrg}/>\n </TabPane> \n }\n {/* ops-2453 , it should be enabled based on template permission */}\n { /* A user with read permisison can read, but shall not be update */\n ((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || isread))\n || (!templateRecord.templateVisibleToSubOrg && (isread || iscreateOrUpdateTemplate))) &&\n \n <TabPane \n data-id=\"template-details-opr-signals-tab-button\"\n tab={(<Tooltip title=\"User may define signal from template collections, to be used as operator identification. Typical operator ID signal would come from a keypad entry, RFID reader, fob reader, etc...\" >{tabs[3].title}</Tooltip>)} \n key=\"4\"\n >\n <OperatorSignals activeTab={activeTab} isadmin={this.props.context.appContext.roleName.toLowerCase() === \"admin\"} iscreate={iscreate} isread={isread} isupdate={isupdate} isGlobalTemplate={templateRecord.templateVisibleToSubOrg}/>\n </TabPane> \n }\n {\n ((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || isread)) \n || (!templateRecord.templateVisibleToSubOrg && (isread || iscreateOrUpdateTemplate))) &&\n (templateRecord.quotasApplied) &&\n <TabPane data-id=\"template-details-quotas-applied-tab-button\" tab={tabs[4].title} key=\"5\"> \n <QuotasApplied iscreate={iscreate} isread={isread} isupdate={isupdate} isdelete={isdelete} activeTab={activeTab}/>\n </TabPane> \n }\n </Tabs> \n \n {((templateRecord.templateVisibleToSubOrg && (this.props.context.appContext.roleName.toLowerCase() === \"admin\" || isread)) \n || (!templateRecord.templateVisibleToSubOrg && (isread || iscreateOrUpdateTemplate))) &&\n <CollectionMaint iscreate={iscreate} isread={isread} iscreateOrUpdateTemplate={iscreate || isupdate} isdelete={isdelete} isGlobalTemplate = {templateRecord.templateVisibleToSubOrg} context={this.props.context}/> \n } \n </div>\n \n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n templateDetails: state.templateDetailsReducers.templateDetailsState,\n permissions: state.contextReducer.data,\n quotasApplied: state.templateDetailsReducers.templateDetailsState.tabs[4]\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(TemplateDetails);\n ","import React from 'react';\nimport { Result, Button } from 'antd';\n\nimport history from '../../utils/history';\nimport \"./notFound404.css\";\n\nconst goHome = (e:any) => {\n e.preventDefault();\n history.push(\"/map\");\n}\n\nconst NotFound404: any = () => {\n \n return (\n <Result\n status=\"404\"\n title=\"404\"\n subTitle=\"Sorry, the page you visited does not exist.\"\n extra={\n <Button type=\"primary\" onClick={(e:any) => goHome(e)}>Back Home</Button>\n }\n />\n );\n};\n\nexport default NotFound404;","import Axios from \"axios\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function getOprs(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number = 1,\n searchText?: string,\n operatorId?:string\n\n) {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/operators\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n operatorId: (operatorId||\"\")\n }\n }\n )\n .then(response => { \n let data = response.data.data.operators == null || (response.data.data.operators.length || 0) === 0 ? [] : response.data.data.operators;\n \n data.forEach((item: any, index: number) => {\n data[index]['mastertags'] = JSON.parse(data[index]['mastertags'])\n // data[index]['mastertags'] = data[index]['mastertags']?.sort(sortAlphabetically)\n });\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"OPRS_GET_SUCCESS\", payload: {data: data, page: page} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function getOpr(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n operatorId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/operators/id/\" + operatorId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.operator);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function oprMaintOpen(\n me: any, \n title: string,\n width: number,\n record: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPRS_OPR_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n\nexport function oprMaintClose(\n me: any\n) { \n return (dispatch: any) => {\n dispatch({ type: \"OPRS_OPR_MAINT_CLOSE\" });\n };\n}\n\nexport function oprSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPR_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function oprSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPRS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function oprsListRefreshOnUpdate(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPRS_LIST_REFRESH_ON_UPDATE\" });\n };\n}\n\nexport function clearTableData(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPRS_LIST_CLEAR\", payload: {data: [], page: 1} });\n };\n}\n\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { formatTagsForPosting } from \"../../../utils/commonHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function operatorOrgsGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n orgId?: string\n\n) {\n return async (dispatch: any) => { \n Axios.get(\n appConfigs.server.URL + \"/ui/api/orgs-lov\", {\n responseType: \"json\", \n headers: {},\n params: {\n mode: (orgId || \"\") === \"\" ? \"administered\" : \"single\",\n scope: \"all\",\n includeTree: false,\n page: 1,\n pageSize: 9999\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({ type: \"OPR_HOME_ORGS_SUCCESS\", payload: {data: response.data.data.orgs} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n} \n\nexport function operatorOrgUsersGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string,\n \n) {\n\n return async (dispatch: any) => { \n Axios.get(\n // appConfigs.server.URL + \"/ui/api/orgs/\" + orgId + \"/users\", \n // {\n // responseType: \"json\", \n // headers: {},\n // params: {\n // role: \"admin\",\n // pageSize: appConfigs.tables.pageSize\n // }\n // }\n appConfigs.server.URL + \"/ui/api/users/okta\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId:orgId,\n administered: false,\n pageSize: 10000\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.users);\n }\n dispatch({ type: \"OPR_MAINT_ORG_USERS_GET_SUCCESS\", payload: {data: response.data.data.users} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n });\n };\n}\n\nexport function operatorOrgAssetsGet(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string,\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/control-assets?page=1&pageSize=9999\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId: orgId\n }\n }\n )\n .then(response => {\n let data = (response.data.data.orgAssets == null || response.data.data.orgAssets.equipment == null ||\n (response.data.data.orgAssets.equipment.length || 0) === 0 ) ? [] : response.data.data.orgAssets.equipment;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgAssets.equipment);\n }\n \n data = data.map((tag: any) => tag['mastertag']).filter((item: any, i: any, ar: any) => ar.indexOf(item) === i).sort();\n \n dispatch({ type: \"OPR_MAINT_ORG_ASSETS_GET_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\n\nexport function operatorOrgAccessTypesGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string,\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/org-operator-access-types\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId\n }\n }\n )\n .then(response => { \n let data = (response.data.data.accessTypes == null ||\n (response.data.data.accessTypes.length || 0) === 0 ) ? [] : response.data.data.accessTypes;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.accessTypes);\n }\n \n data = data.map((tag: any) => tag['accessType']).filter((item: any, i: any, ar: any) => ar.indexOf(item) === i).sort();\n \n dispatch({ type: \"OPR_MAINT_ORG_ACCESS_TYPES_GET_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function rfidSetValue(\n me: any,\n value: any\n) {\n return async (dispatch: any) => {\n dispatch({ type: \"OPR_RFID_SET_FIELD_VALUE\", payload: {data: value}}); \n } \n}\n\nexport function oprMaint(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any,\n operatorHistoryId?:string,\n isOverride?:boolean\n) {\n \n return async (dispatch: any) => {\n record.mastertags = formatTagsForPosting(record.mastertags);\n \n let url=\"/ui/api/operators?override=\"+isOverride+\"&operatorHistoryId=\" + (operatorHistoryId || \"\")\n Axios.post(\n appConfigs.server.URL + url,\n record,\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n \n let data = response.data.data.operator == null ? {} : response.data.data.operator;\n \n data['mastertags'] = JSON.parse(data['mastertags']);\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"OPR_MAINT_SUCCESS\", payload: {data: data} });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n }\n );\n }\n}\n\nexport function oprMaintTabsEnable(\n me: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"OPR_MAINT_TABS_ENABLE\" });\n };\n}\n\nexport function operatorDelete(\n me: any, \n callbackSuccessFn: any,\n callbackFailureFn: any,\n operatorId:string\n \n) {\n return async (dispatch: any) => {\n Axios.delete(\n appConfigs.server.URL + \"/ui/api/operators/\" + operatorId,\n {}\n )\n .then(response => {\n if (callbackSuccessFn != null) {\n callbackSuccessFn(response); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFailureFn != null) {\n callbackFailureFn(error);\n }\n }\n ); \n };\n}\n\nexport function getOperatorsForExport(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n searchText?: string,\n\n) {\n\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/operators.csv\", {\n headers: {},\n params: {\n searchText: searchText,\n }\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data);\n }\n\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}","import React from \"react\";\nimport { Form, Select, Card, Input } from 'antd';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\n\nconst { Option } = Select;\n\ninterface Prop {\n \n oprList: any,\n context: any,\n operatorOrgsGet:Function,\n operatorOrgUsersGet:Function,\n operatorOrgAssetsGet:Function,\n operatorOrgAccessTypesGet: Function,\n formRef: any\n}\n\nclass OprHomeOrg extends React.Component<Prop, {}> {\n\n componentDidMount() {\n this.componentUpdate();\n }\n \n componentDidUpdate(prevProps: Prop) {\n if (this.props.oprList.oprMaint.instance !== prevProps.oprList.oprMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n this.props.operatorOrgsGet(this, null, null,\"\");\n }\n \n onOperatorOrgChange=(value: string)=>{\n if((value||\"\")!==\"\")\n {\n this.props.formRef.setFieldsValue({\n userId: undefined\n })\n this.props.operatorOrgUsersGet(this,null,null,value);\n this.props.operatorOrgAssetsGet(this,null,null,'all', value);\n this.props.operatorOrgAccessTypesGet(this,null,null,'all', value);\n }\n }\n \n render() {\n const { operatorOrgs } = this.props.oprList.oprMaint;\n return (\n \n \n <Form.Item\n name=\"orgId\"\n label=\"Organization\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n > \n <Select \n data-id=\"oprs-maint-info-home-org-id\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n onChange={this.onOperatorOrgChange} \n >\n {operatorOrgs !== null && operatorOrgs.map((record:any, index:number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select> \n </Form.Item>\n \n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n oprList: state.oprReducers.oprState.oprList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OprHomeOrg);","import { Button, Card, Form, Input, Select, Space } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { errorResponse, resetFormErrors, successResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { ErrorAlert, SuccessAlert } from \"../../../utils/Components/formAlerts\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"../actions\";\nimport OprHomeOrg from \"./OprHomeOrg\";\n\nconst { Option } = Select;\ninterface Prop{\n oprList:any,\n oprMaint:Function,\n oprsListRefreshOnUpdate: Function,\n context: any,\n oprMaintClose:Function,\n operatorOrgUsersGet:Function, \n operatorOrgAssetsGet:Function,\n operatorOrgAccessTypesGet: Function\n rfidSetValue: Function\n}\n\ninterface State extends FormState {\n accessType: string;\n rfidValue: string;\n isOveridePanelDisplay: boolean;\n overrideErrorMessage: string;\n isOverrideRFID: boolean;\n}\n\nclass OprMaintInfo extends React.Component<Prop> { \n state: State = {\n accessType: \"\",\n rfidValue: \"\",\n isOveridePanelDisplay: false,\n overrideErrorMessage: \"\",\n isOverrideRFID: false\n };\n formRef = React.createRef<FormInstance>();\n componentDidMount() {\n this.componentUpdate(this.props.oprList.oprMaint.record);\n }\n componentDidUpdate(prevProps: Prop) {\n if (this.props.oprList.oprMaint.instance !== prevProps.oprList.oprMaint.instance) {\n this.componentUpdate(this.props.oprList.oprMaint.record);\n }\n }\n componentUpdate(record:any) {\n formInit(this);\n let orgId = (record.orgId || \"\") === \"\" ? this.props.context.appContext.orgId:record.orgId;\n this.props.operatorOrgUsersGet(this, null, null,orgId);\n this.props.operatorOrgAssetsGet(this, null, null, 'all', orgId);\n this.props.operatorOrgAccessTypesGet(this, null, null, 'all', orgId);\n \n if (this.formRef.current != null) {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue({\n orgId: (record.orgId || \"\") === \"\" ? (this.props.context.appContext.roleName === \"admin\" ? this.props.context.appContext.orgId: null) : record.orgId, \n operatorIdValue:record.operatorIdValue,\n accessType:record.accessType,\n accessCardValue:record.accessCardValue,\n userId:record.userId,\n assetName:record.assetName,\n accessCardId:record.accessCardId,\n mastertags: record.mastertags?.map((assetTag:any) => {return {value: assetTag.mastertag, label: assetTag.mastertag, key: assetTag.mastertag} }),\n id:record.id\n \n });\n }\n }\n \n onFinish = (values: any) => {\n resetFormErrors(this, this.formRef.current);\n this.props.oprMaint(this, this.onFinishSuccess, this.onFinishFailure, values, this.props.oprList.oprMaint.record.operatorsHistoryId, this.state.isOverrideRFID);\n };\n\n onFinishSuccess = (record: any) => { \n this.props.oprsListRefreshOnUpdate(this);\n \n if (record != null && record.operatorIdValue != null && \n Object.keys(record.operatorIdValue) != null && Object.keys(record.operatorIdValue).length !== 0) {\n this.componentUpdate(record);\n }\n this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n successResponse(this, \"Operator has been successfully processed\"); \n }\n onFinishFailure = (error: any) => { \n if (error.response.data.errors[0].reference === \"override\") {\n const errMsg = error.response.data.errors[0].message;\n this.setState({ isOveridePanelDisplay: true, overrideErrorMessage: errMsg });\n }\n else {\n this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n errorResponse(this, error);\n }\n }\n\n onOverrideSubmit = (e: any) => {\n this.setState({ isOverrideRFID: true });\n this.formRef.current?.submit();\n }\n cancelOverride = (e: any) => {\n this.setState({ isOverrideRFID: false, isOveridePanelDisplay: false, overrideErrorMessage: \"\" });\n } \n \n onAccessTypeChange = (value:any) => {\n this.setState({ accessType: value });\n if (value.toLowerCase() !== 'rfid') {\n this.setState({ rfidValue: \"\"})\n this.props.rfidSetValue(this, \"\");\n }\n }; \n\n onInputRfidChange = (value:any) => {\n this.setState({ rfidValue: value || \"\" == \"\"? \"\" : value.target.value})\n this.props.rfidSetValue(this, value || \"\" == \"\"? \"\" : value.target.value);\n }; \n\n render(){\n const { orgUsers, orgAssets, orgAccessTypes, rfidValue } = this.props.oprList.oprMaint.tabs[0];\n const {operatorsHistoryId, mastertags, accessType} = this.props.oprList.oprMaint.record;\n \n return(\n <div data-id=\"opr-maint-info\">\n {this.state.formSuccess && !this.state.formError && <SuccessAlert data-id=\"oprs-maint-info-success-message\" message={this.state.formSuccessMessage}/>}\n {this.state.formError && !this.state.formSuccess && <ErrorAlert data-id=\"oprs-maint-info-error-message\" message={this.state.formErrorMessage}/>}\n\n {\n this.state.isOveridePanelDisplay &&\n\n <Card style={{ height: '150px', backgroundColor: '#d9d9d94d' }}>\n <p>{this.state.overrideErrorMessage}.</p>\n <p>Do you want to override operator?</p>\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"opr-maint-close-button\" type=\"default\" onClick={(e) => this.cancelOverride(e)}>\n No\n </Button>\n <Button data-id=\"opr-maint-submit-button\" type=\"primary\" form=\"oprMaintInfoForm\" key=\"submit\" onClick={(e) => this.onOverrideSubmit(e)}>\n Yes\n </Button>\n\n </Space>\n </Card>\n\n }\n <Form\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"oprMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n className=\"mt-15\"\n > \n <OprHomeOrg formRef={this.formRef.current}/>\n <Form.Item \n name=\"id\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"accessCardId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"assetId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n \n <Form.Item\n label=\"Operator ID\"\n name=\"operatorIdValue\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={50}/>\n </Form.Item>\n\n <Form.Item\n label=\"Access Type\"\n name=\"accessType\" \n // rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select \n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n onChange={this.onAccessTypeChange} \n >\n\n {\n orgAccessTypes !== null && orgAccessTypes.map((accessType:any, index:number) => {\n return (\n <Option key={index} value={accessType}>\n {accessType}\n </Option>\n )})} \n </Select> \n \n \n </Form.Item>\n {\n \n <Form.Item\n label=\"RFID\"\n name=\"accessCardValue\" \n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input value = {this.state.rfidValue} onChange={this.onInputRfidChange}\n disabled={\n ((operatorsHistoryId||\"\")===\"\" && ((this.state.accessType ||\"\") === \"RFID\" || accessType === \"RFID\"))?false:true} maxLength={10}/>\n </Form.Item>\n\n }\n \n <Form.Item\n name=\"userId\"\n label=\"User\"\n > \n <Select \n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\" \n \n >\n {orgUsers !== null && orgUsers.map((record:any, index:number) => (\n <Option key={record.userId} value={record.userId}>\n {record.fullName}\n </Option>\n ))}\n </Select> \n </Form.Item>\n\n <Form.Item\n name=\"assetName\"\n label=\"Asset Last Accessed\"\n style={{display:(this.props.oprList.oprMaint.record.assetName||\"\")==\"\"?'none':''}}\n >\n <Input disabled maxLength={32}/>\n </Form.Item>\n\n <Form.Item\n label=\"Controlled Assets\"\n name=\"mastertags\"\n \n initialValue={mastertags == null ? [] : mastertags?.map((asset: any) => {\n return { value: asset.mastertag, label: asset.mastertag, key: asset.mastertag }\n })} \n > \n <Select \n\n mode=\"tags\"\n style={{ width: '100%'}}\n placeholder=\"Select mastertags\"\n disabled={((this.state.accessType ||\"\") === \"RFID\" || \n (accessType === \"RFID\" && (this.state.accessType || \"\").toLowerCase() !== \"asset-mapping\")) ||\n this.props.oprList.oprMaint.record.status == 'inactive' } \n labelInValue\n showSearch\n showArrow={true}\n allowClear\n // optionFilterProp=\"children\"\n className=\"select-before\" \n \n >\n {orgAssets !== null && orgAssets.map((mastertag:any, index:number) => {\n return (\n <Option key={index} value={mastertag}>\n {mastertag}\n </Option>\n )})}\n \n </Select> \n \n </Form.Item> \n \n </Form>\n \n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n oprList: state.oprReducers.oprState.oprList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(OprMaintInfo);","import React from \"react\";\nimport { Drawer, Tabs, Button, Space } from \"antd\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport OprMaintInfo from \"./OprMaintInfo/OprMaintInfo\";\nimport history from '../../utils/history';\n\nconst {TabPane}=Tabs;\n\ninterface Prop{\n oprList: any,\n getOprs: Function,\n oprMaintClose:Function,\n oprsListRefreshOnUpdate: Function,\n}\n\nclass oprMaint extends React.Component<Prop> { \n componentDidUpdate(prevProps: Prop) {\n if (this.props.oprList.oprMaint.instance !== prevProps.oprList.oprMaint.instance) {\n this.closeCollapsed();\n }\n } \n\nonDrawerClose = () => {\n \n if (this.props.oprList.refreshOnUpdate) {\n //history.push(\"/operators\");\n this.props.getOprs(this, null, null, this.props.oprList.tableConfig.pagination.current, this.props.oprList.searchText);\n }\n this.props.oprMaintClose(this); \n};\n\ncloseCollapsed() { \n let active:any = document.querySelectorAll(\"[data-id=opr-maint-drawer] .ant-collapse-item-active\"); \n if (active.length) {\n for (var i = 0; i < active.length; i++) { \n active[i]!.children[0].click(); \n }\n }\n}\n\nrender(){\n const { oprMaint } = this.props.oprList;\n \n return(\n <Drawer\n data-id=\"opr-maint-drawer\" \n title={oprMaint.title}\n width={oprMaint.width}\n onClose={this.onDrawerClose}\n visible={oprMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"opr-maint-close-button\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n {\n oprMaint.activeTab === \"1\" &&\n <Button data-id=\"opr-maint-submit-button\" type=\"primary\" form=\"oprMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n }\n </Space>\n }\n >\n <Tabs data-id=\"users-maint-info-tabs\" activeKey={oprMaint.activeTab} size=\"large\" type=\"card\">\n <TabPane data-id=\"opr-maint-info-tab-button\" tab={oprMaint.tabs[0].title} key=\"1\"> \n <OprMaintInfo />\n </TabPane> \n </Tabs> \n </Drawer>\n );\n}\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n oprList: state.oprReducers.oprState.oprList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(oprMaint);\n","import React, { Component } from \"react\";\nimport { Table, Button, Popover, Popconfirm, Input, Row, Col, Tag, Breadcrumb, Upload, Space, Tooltip, message, notification } from \"antd\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport history from '../../utils/history';\nimport { PlusOutlined,ExportOutlined,ImportOutlined,EditOutlined,DeleteOutlined,EllipsisOutlined,UserAddOutlined,UserDeleteOutlined} from \"@ant-design/icons\";\nimport \"./oprs.css\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport OprMaint from \"./oprMaint\";\nimport { closePopover, getPermissions, getToken } from \"../../utils/commonHelpers\";\nimport { CSVLink } from \"react-csv\";\n\nconst { Search } = Input;\n\ninterface Prop{\n oprSetSearch: Function,\n oprSetPagination:Function,\n getOprs: Function,\n oprMaintOpen: Function,\n context: any,\n oprList: any,\n oprMaint:Function,\n operatorDelete: Function,\n getOperatorsForExport: Function,\n permissions: any\n clearTableData: Function,\n}\n\ninterface State {\n csvData: any,\n csvFileName: string\n isOperator?: boolean;\n}\n\nclass Operators extends Component<Prop, State> {\n state: State = {\n csvData: [],\n csvFileName: \"\",\n isOperator:true\n };\n\n drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n csvLink: any = React.createRef<CSVLink>(); \n\n getValuesFromPath=(index:number)=>{\n const pathArr = history.location.pathname.split(\"/\");\n return pathArr[index];\n }\n getStateFromHistory=()=>{\n return ((history.location.state || true) as State).isOperator;\n }\n\n componentDidMount(){\n // if (!this.props.context.user.contextUserIsAdmin) { \n this.props.oprSetPagination(this.onPaginationChange);\n this.getOprs();\n \n } \n\n getOprs() {\n const isOperator = this.getStateFromHistory(); //checking operator false or true\n const primaryKey = this.getValuesFromPath(3) //primary key \n const value = this.getValuesFromPath(2) //value\n if ((primaryKey||\"\") === \"\") {\n this.props.getOprs(this, null, null, 1, this.props.oprList.searchText);\n }\n else {\n // this.props.oprSetSearch(value);\n if(!isOperator)\n {\n //incase of RFID passing clearing table data and passing accesscardvalue and operatorhistoryod\n let obj = { accessCardValue: \"\", operatorsHistoryId: \"\"};\n obj.accessCardValue = this.getValuesFromPath(2);\n obj.operatorsHistoryId =this.getValuesFromPath(3);\n this.props.clearTableData();\n this.oprMaintOpenDo(obj);\n }\n else\n {\n this.props.getOprs(this, this.getOprSuccess, null, 1, null , isOperator?primaryKey:\"\");\n }\n \n }\n }\n\n getOprSuccess = (data: any) => {\n this.oprMaintOpenDo((data[0]||[]));\n }\n\n oprMaintOpenDo = (record: any) => {\n const title = Object.keys((record)).length === 0 ? \"New Operator\" : (record.operatorIdValue || \"\") === \"\" ? \"New Operator\" : \"Edit Operator ::\" + record.operatorIdValue;\n this.props.oprMaintOpen(this, title, this.drawerWidth, record);\n }\n\n \n onPaginationChange = (page: number) => {\n this.props.getOprs(this, null, null, page, this.props.oprList.searchText);\n };\n\n onAction = (e:any, record:any, action:string) => {\n e.preventDefault();\n if ( action === \"add-opr\" ) {\n this.props.oprMaintOpen(this, \"New Operator\", this.drawerWidth,{});\n }\n else if ( action === \"edit-opr\" ) {\n this.props.oprMaintOpen(this, \"Edit Operator :: \" + record.operatorIdValue, this.drawerWidth, record);\n }\n else if (action === \"delete\") {\n this.props.operatorDelete(this, this.operatorDeleteSucess, null, record.id); \n } \n\n closePopover(); \n \n }\n\n operatorDeleteSucess = (data:any) => {\n message.success(\"Operator has been successfully deleted\");\n this.onPaginationChange(this.props.oprList.tableConfig.pagination.current);\n }\n\n actions = (record: any, appContext: any, contextUser: any,isUpdate: any, isDelete: any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"small\">\n {\n (isUpdate) &&\n <Tooltip title=\"Edit Operator\">\n <Button data-id=\"opr-edit-button\" type=\"default\" icon={<EditOutlined />} onClick={(e) => { this.onAction(e, record, \"edit-opr\") }} />\n </Tooltip>\n }\n {/* {!record.activeInScope && this.confirmStatus(record, \"activate\")}\n {record.activeInScope && this.confirmStatus(record, \"deactivate\")}\n */}\n {(isDelete) && this.confirmDeletion(record)} \n </Space>\n </div>\n }\n title={\n <div className=\"center-div\">Actions</div>\n }\n trigger=\"click\"\n >\n <Button data-id=\"opr-actions-button\" type=\"default\" icon={<EllipsisOutlined />} /> \n </Popover>\n);\n\nconfirmStatus = (record:any, action:string) => (\n <Popconfirm\n title={\"Are you sure to \" + (action === \"activate\" ? \"activate\" : \"deactivate\") + \" this user?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, action)}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {\n action === \"activate\" &&\n <Tooltip title=\"Activate User\"> \n <Button data-id=\"opr-activate-button\" type=\"default\" icon={<UserAddOutlined />} />\n </Tooltip>\n }\n {\n action !== \"activate\" &&\n <Tooltip title=\"Deactivate User\"> \n <Button data-id=\"opr-deactivate-button\" type=\"default\" icon={<UserDeleteOutlined />} />\n </Tooltip>\n }\n </div>\n </Popconfirm>\n);\nconfirmDeletion = (record:any) => (\n <Popconfirm\n title={\"Are you sure to delete this operator?\"}\n onCancel={closePopover}\n onConfirm={(e) => {this.onAction(e, record, \"delete\")}}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Tooltip title=\"Delete Operator\"> \n <Button data-id=\"opr-delete-button\" type=\"default\" icon={<DeleteOutlined />} />\n </Tooltip>\n </Popconfirm>\n);\n onSearch = (searchText: string) => { \n let me = this;\n this.props.oprSetSearch((searchText || \"\"));\n if((searchText || \"\")===\"\")\n {\n history.push(\"/operators\");\n }\n setTimeout(function() {\n me.props.getOprs(me, null, null, 1, searchText); \n }, 100); \n }\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.oprSetSearch((value || \"\"));\n }\n\n onExport = (e: any) => {\n e.preventDefault();\n this.props.getOperatorsForExport(this, this.oprExportSuccess, null, this.props.oprList.searchText);\n }\n\n oprExportSuccess = (data: any) => {\n this.setState({ csvData: data, csvFileName: \"operators.csv\" })\n const me = this;\n setTimeout(function () {\n me.csvLink.link.click();\n }, 250);\n }\n beforeUpload = (file: any) => {\n const fileType = file.type === \"text/csv\" || file.type === \"text/tsv\" || file.type === \"text/plain\" || file.type === \"application/vnd.ms-excel\";\n if (!fileType) {\n notification.error({\n message: \"File Processing\",\n description: \"CSV (comma separated values) and text file types are only allowed\"\n });\n }\n\n return fileType;\n }\n\n handleChange = (info: any) => {\n if (info.file.status === \"done\") {\n message.success(\"File has been successfully processed\");\n this.onPaginationChange(this.props.oprList.tableConfig.pagination.current);\n }\n else if (info.file.status === \"error\") {\n let formErrors: any = [];\n\n if (info.file.response.errors && (info.file.response.errors.length || 0) !== 0) {\n info.file.response.errors.forEach(function (record: any) {\n if (record.type === \"form\") {\n formErrors.push(record.message);\n }\n });\n }\n if (formErrors.length > 0) {\n formErrors.forEach((error: string) => {\n notification.error({\n message: \"File Processing\",\n description: error\n });\n });\n }\n else {\n message.error(`${info.file.name} file upload failed.`);\n }\n }\n }; \n\n render(){\n const { contextUser, appContext } = this.props.context;\n const { tableConfig, tableData } = this.props.oprList;\n \n const result = getPermissions(this.props.permissions.permissions.operator_support); \n if (!this.props.context.user.contextUserIsAdmin && !result[1]){\n history.push(\"/not-found\") \n }\n let isCreate = result[0];\n let isRead = result[1];\n let isUpdate = result[2];\n let isDelete = result[3];\n\n let token=getToken();\n const tableColumns = [\n {\n title: \"Operator ID\",\n dataIndex: \"operatorIdValue\",\n },\n {\n title: \"RFID/Access Card\",\n dataIndex: \"accessCardValue\",\n },\n {\n title: \"Asset Last accessed\",\n dataIndex: \"assetName\",\n },\n {\n title: \"Organization\",\n dataIndex: \"orgName\",\n },\n {\n title: \"Access Type\",\n dataIndex: \"accessType\",\n },\n {\n title: \"Assets controlled\",\n dataIndex: \"mastertags\",\n // responsive: [\"lg\"] as Breakpoint[],\n render: (record: any) => (\n <>\n {record?.map((assetTag: any, key: number) => {\n return (\n <Tag key={key} style={{ margin: '2px' }}>\n { assetTag.mastertag}\n </Tag>\n ); \n })}\n </>\n ),\n \n },\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n render: (text: any, record: any) => ( \n this.actions(record, appContext, contextUser, isUpdate, isDelete)\n )\n \n }\n ]\n const uploadProps = {\n name: \"file\",\n action: appConfigs.server.URL + \"/ui/api/operators/upload\",\n headers: {\n \n //authorization: `Bearer ${JSON.parse(window.localStorage.getItem(\"okta-token-storage\") || \"{}\").idToken.value}`,\n authorization: `Bearer ${token.value||token.idToken}`,\n },\n showUploadList: false\n };\n return (\n <div data-id=\"operators-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n Operators\n </div>\n </div>\n </Col>\n \n \n <Col xs={24} lg={18} className=\"content-header-controls\">\n \n <Space size=\"middle\"> \n {\n (isCreate && isUpdate) &&\n <Upload\n {...uploadProps}\n onChange={this.handleChange}\n >\n <Button>\n <ImportOutlined /> Import\n </Button>\n </Upload>\n }\n {\n (isRead) &&\n <Tooltip title=\"Export Operators\">\n <Button data-id=\"opr-export-button\" onClick={(e) => this.onExport(e)} icon={<ExportOutlined />}>\n <span>Export</span>\n </Button>\n </Tooltip>\n }\n <CSVLink\n data={this.state.csvData}\n filename={this.state.csvFileName}\n className=\"hidden\"\n ref={(r: any) => this.csvLink = r}\n target=\"_blank\"\n />\n \n {\n (isRead) &&\n <Search\n data-id=\"operator-search-field\"\n key=\"search-field\"\n placeholder=\"Search by ID, Access Card, Asset, Tags\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n className=\"search-field\"\n value={this.props.oprList.searchText}\n\n />\n }\n {\n (isCreate) &&\n <Tooltip title=\"Create New Operator\">\n <Button data-id=\"opr-search-new-opr-button\" type=\"primary\"\n icon={<PlusOutlined />} onClick={(e) => this.onAction(e, {}, \"add-opr\")}>\n <span>Operator</span>\n </Button>\n </Tooltip>\n }\n </Space>\n </Col>\n </Row>\n <div className=\"mt-15\">\n {(isRead) &&\n <Table\n data-id=\"oprs-data\"\n {...tableConfig}\n rowKey={(record) => record.id}\n columns={tableColumns}\n dataSource={tableData}\n\n />\n }\n <OprMaint/> \n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n oprList: state.oprReducers.oprState.oprList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Operators);\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getTutorials() {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/get_tutorials\"\n )\n .then(response => { \n dispatch({ type: \"TUTORIALS_GET_SUCCESS\", data: response.data.data.tutorials });\n }\n )\n .catch(function (error) {\n console.log(`error`, error)\n });\n };\n}\n\nexport function getTutorial(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n tutorialId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/tutorial/id/\" + tutorialId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.operator);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function tutorialsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"TUTORIAL_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n} \n","import React, { Component, useEffect } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Button, Space, Avatar, Card } from \"antd\";\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport \"./tutorials.css\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { PauseOutlined, CaretRightOutlined, FullscreenOutlined } from \"@ant-design/icons\";\nimport Meta from \"antd/lib/card/Meta\";\nimport ReactPlayer from 'react-player'\n\nconst { TabPane } = Tabs;\n\ninterface Props{\n getTutorials: Function,\n setTab: Function,\n context: any,\n tutorials: any,\n permissions: any\n}\n\nconst Tutorials: React.FC<Props> = (props) => {\n\n\n const onTabChange = (key:string) => {\n props.setTab(key)\n }\n\n\n useEffect(() => {\n props.getTutorials()\n }, [])\n\n return (\n\n <div className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n {\n <span>Video Tutorials</span>\n }\n </div>\n </div>\n </Col>\n </Row>\n \n <div className=\"mt-15\">\n <Tabs activeKey={props.tutorials.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}>\n\n <TabPane tab=\"All Tutorials\" key=\"1\"> \n <Row gutter={8}>\n {\n props.tutorials.tutorialsList.map((tutorial:any, index:number) => (\n <Col xs={12} sm={12} md={8} lg={8} xl={8} key={tutorial.id}>\n <Card\n style={{ height: '%50', padding: '3px' }}\n cover={\n <ReactPlayer \n url={tutorial.link}\n controls={true}\n width='260'\n height='160'\n playsinline={true}\n stopOnUnmount={false}\n />\n }\n // actions={[\n // <CaretRightOutlined key=\"play\" />,\n // <PauseOutlined key=\"pause\" />,\n // <FullscreenOutlined key=\"fullscreen\" />,\n // ]}\n >\n <Meta\n title={tutorial.title}\n description={tutorial.description}\n />\n </Card>\n </Col>\n \n ))\n }\n \n </Row>\n </TabPane> \n\n <TabPane tab=\"Map Tutorials\" key=\"2\">\n <Row gutter={8}>\n <Col xs={12} sm={12} md={8} lg={8} xl={8}>\n <Card\n style={{ height: '%50', padding: '3px' }}\n cover={\n <ReactPlayer \n url=''\n controls={true}\n width='260'\n height='160'\n playsinline={true}\n />\n }\n // actions={[\n // <CaretRightOutlined key=\"play\" />,\n // <PauseOutlined key=\"pause\" />,\n // <FullscreenOutlined key=\"fullscreen\" />,\n // ]}\n >\n <Meta\n title=\"Coming Soon...\"\n description=\"More tutorials are coming soon\"\n />\n </Card>\n </Col>\n </Row>\n </TabPane>\n\n <TabPane tab=\"Alerts Tutorials\" key=\"3\">\n <Row gutter={8}>\n {\n props.tutorials.tutorialsList.filter((record:any, index:number) => (\n record.category === 'Alerts'\n ))\n .map((tutorial:any, index:number) => (\n <Col xs={12} sm={12} md={8} lg={8} xl={8} key={tutorial.id}>\n <Card\n style={{ height: '%50', padding: '3px' }}\n cover={\n <div className='player-wrapper'>\n <ReactPlayer\n url={tutorial.link}\n controls\n width='260'\n height='160'\n className='react-player'\n stopOnUnmount={false}\n />\n </div>\n }\n // actions={[\n // <CaretRightOutlined key=\"play\" />,\n // <PauseOutlined key=\"pause\" />,\n // <FullscreenOutlined key=\"fullscreen\" />,\n // ]}\n >\n <Meta\n title={tutorial.title}\n description={tutorial.description}\n />\n </Card>\n </Col>\n \n ))\n }\n </Row>\n </TabPane>\n\n \n\n <TabPane tab=\"Assets Tutorials\" key=\"4\"> \n <Row gutter={8}>\n <Col xs={12} sm={12} md={8} lg={8} xl={8}>\n <Card\n style={{ height: '%50', padding: '3px' }}\n cover={\n <ReactPlayer \n url=''\n controls={true}\n width='260'\n height='160'\n playsinline={true}\n />\n }\n // actions={[\n // <CaretRightOutlined key=\"play\" />,\n // <PauseOutlined key=\"pause\" />,\n // <FullscreenOutlined key=\"fullscreen\" />,\n // ]}\n >\n <Meta\n title=\"Coming Soon...\"\n description=\"More tutorials are coming soon\"\n />\n </Card>\n </Col>\n </Row>\n </TabPane> \n\n <TabPane tab=\"More...\" key=\"5\">\n <Row gutter={8}>\n <Col xs={12} sm={12} md={8} lg={8} xl={8}>\n <Card\n style={{ height: '%50', padding: '3px' }}\n cover={\n <ReactPlayer \n url=''\n controls={true}\n width='260'\n height='160'\n playsinline={true}\n />\n }\n // actions={[\n // <CaretRightOutlined key=\"play\" />,\n // <PauseOutlined key=\"pause\" />,\n // <FullscreenOutlined key=\"fullscreen\" />,\n // ]}\n >\n <Meta\n title=\"Coming Soon...\"\n description=\"More tutorials are coming soon\"\n />\n </Card>\n </Col>\n </Row>\n </TabPane>\n </Tabs> \n </div>\n </div>\n\n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n tutorials: state.tutorialsReducers.tutorialsState.tutorials,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Tutorials);\n","import { Button, Card, Col, Divider, Drawer, Row, Space, Tabs } from \"antd\";\nimport moment from \"moment\";\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"./actions\";\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n context: any,\n contractMaintOptions: any,\n closeDrawer: Function,\n drawerTabChange: Function,\n}\n\nconst ContractMaint: React.FC<Prop> = (props) => {\n \n const onDrawerClose = () => {\n props.closeDrawer();\n };\n\n const onTabChange = (key: string) => {\n props.drawerTabChange(key);\n }\n \n const contractMaintOptions = props.contractMaintOptions;\n let changesHistoryDetails = null\n\n if(contractMaintOptions.activeTab === \"2\"){\n changesHistoryDetails = JSON.parse(contractMaintOptions?.record?.changesHistory)\n }\n\n const checkEquality = (oldValue: any, newValue: any) => {\n if (oldValue == newValue)\n return true\n return false\n }\n \n return (\n <Drawer\n title={contractMaintOptions.title}\n width={contractMaintOptions.width}\n onClose={onDrawerClose}\n visible={contractMaintOptions.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button type=\"default\" onClick={onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n\n {/* {\n contractMaintOptions.activeTab === \"1\" &&\n <Button data-id=\"assets-maint-submit-button\" type=\"primary\" form=\"contractMaintOptionsInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n } */}\n \n </Space>\n }\n >\n {\n <Tabs activeKey={contractMaintOptions.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}> \n <TabPane tab={contractMaintOptions.tabs[0].title} key=\"1\" disabled={contractMaintOptions.tabs[0].disabled}>\n <Card title=\"Current Contract Details:\" style={{ borderColor: '#dbdbdb', width: '100%' }}>\n <table style={{ fontSize: \"15px\", width: '100%'}}>\n <thead></thead>\n <tbody>\n <tr style={{borderBottom: '1px #dbdbdb solid'}}>\n <th>Master Tag:</th>\n <td>{ contractMaintOptions.record.masterTag }</td>\n </tr>\n <tr style={{borderBottom: '1px #dbdbdb solid'}}>\n <th>Org Name:</th>\n <td>{ contractMaintOptions.record.orgName }</td>\n </tr>\n <tr style={{borderBottom: '1px #dbdbdb solid'}}>\n <th>Part Number:</th>\n <td>{ contractMaintOptions.record.partNumber }</td>\n </tr>\n <tr style={{borderBottom: '1px #dbdbdb solid'}}>\n <th>Status:</th>\n <td>{ contractMaintOptions.record.status }</td>\n </tr>\n <tr style={{borderBottom: '1px #dbdbdb solid'}}>\n <th>Contract Period</th>\n <td>{ contractMaintOptions.record.startDate } - { contractMaintOptions.record.endDate }</td>\n </tr>\n </tbody>\n </table>\n </Card>\n </TabPane> \n \n \n <TabPane tab={contractMaintOptions.tabs[1].title} key=\"2\" disabled={contractMaintOptions.tabs[1].disabled}>\n { changesHistoryDetails !== null && changesHistoryDetails.map((record:any, index:number) => (\n <Row justify=\"space-between\" style={{ border: '1px #dbdbdb solid', paddingLeft: '20px', paddingRight: '20px', marginBottom: '10px' }}>\n <Col span={24}>\n <h3 style={{color: '#37806d', paddingTop: '10px',}}>{'A change logged on ' + moment(record.created_at).format('ddd, MMM Do YYYY, h:mm:ss A') + (index === 0 ? ' - (Most Recent)' : '') }</h3>\n </Col>\n <Col span={11}>\n <Card size=\"small\" title=\"Old Values\" style={{ border: '1px #dbdbdb dashed', width: '100%' }}>\n <table style={{ fontSize: \"15px\", width: '100%'}}>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.contract_start_date, record.new_record_value.contract_start_date) ? '' : 'entryChanged'}>\n <th>Contract Start Date</th>\n <td>{ record.old_record_value.contract_start_date }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.contract_end_date, record.new_record_value.contract_end_date) ? '' : 'entryChanged'}>\n <th>Contract End Date</th>\n <td>{ record.old_record_value.contract_end_date }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.additionalDetails?.gatewayStatus,record.new_record_value.additionalDetails?.gatewayStatus) ? '' : 'entryChanged'}>\n <th>Gateway Status:</th>\n <td>{ record.old_record_value.additionalDetails?.gatewayStatus }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.additionalDetails?.SIMStatus,record.new_record_value.additionalDetails?.SIMStatus) ? '' : 'entryChanged'}>\n <th>SIM Status:</th>\n <td>{ record.old_record_value.additionalDetails?.SIMStatus }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.additionalDetails?.IoTHubStatus,record.new_record_value.additionalDetails?.IoTHubStatus) ? '' : 'entryChanged'}>\n <th>IoTHub Status:</th>\n <td>{ record.old_record_value.additionalDetails?.IoTHubStatus }</td>\n </tr>\n </table>\n </Card>\n </Col>\n <Col span={11}>\n <Card size=\"small\" title=\"New Values\" style={{ border: '1px #dbdbdb dashed', width: '100%' }}>\n <table style={{ fontSize: \"15px\", width: '100%'}}>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.contract_start_date, record.new_record_value.contract_start_date ) ? '' : 'entryChanged'}>\n <th>Contract Start Date</th>\n <td>{ record.new_record_value.contract_start_date }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.contract_end_date, record.new_record_value.contract_end_date ) ? '' : 'entryChanged'}>\n <th>Contract End Date</th>\n <td>{ record.new_record_value.contract_end_date }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.additionalDetails?.gatewayStatus, record.new_record_value.additionalDetails?.gatewayStatus) ? '' : 'entryChanged'}>\n <th>Gateway Status:</th>\n <td>{ record.new_record_value.additionalDetails?.gatewayStatus }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.additionalDetails?.SIMStatus, record.new_record_value.additionalDetails?.SIMStatus) ? '' : 'entryChanged'}>\n <th>SIM Status:</th>\n <td>{ record.new_record_value.additionalDetails?.SIMStatus }</td>\n </tr>\n <tr \n style={{borderBottom: '1px #dbdbdb solid'}}\n className={checkEquality(record.old_record_value.additionalDetails?.IoTHubStatus, record.new_record_value.additionalDetails?.IoTHubStatus) ? '' : 'entryChanged'}>\n <th>IoTHub Status:</th>\n <td>{ record.new_record_value.additionalDetails?.IoTHubStatus }</td>\n </tr>\n </table>\n </Card>\n </Col>\n <p style={{ marginTop: '15px' }}>\n <h4 style={{ color: '#37806d' }}>{'Changed By: ' + record.created_by_name}</h4>\n <h4 style={{ color: '#37806d', marginTop: '-10px' }}>{'User Notes: ' + record.notes}</h4>\n </p>\n \n </Row>\n \n ))}\n\n { changesHistoryDetails === null &&\n <h3 style={{ color: 'red', textAlign: 'center' }}>No Audit Log Available</h3>\n }\n </TabPane> \n </Tabs> \n } \n </Drawer>\n );\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n contractMaintOptions: state.contractsReducers.contractsState.contracts.contractMaintOptions\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ContractMaint);","import React, { useContext, useState, useEffect, useRef } from \"react\";\r\nimport { Modal, Row, Col, Tooltip, Tabs, Button, Space, Table, Input, Popconfirm, Form, Select, message, DatePicker, Card, Popover, Divider, Checkbox } from \"antd\";\r\nimport { FormInstance } from 'antd/lib/form';\r\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\r\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\r\nimport \"./contracts.css\";\r\nimport history from '../../../utils/history';\r\nimport { connect } from \"react-redux\";\r\nimport * as actions from \"./actions\";\r\nimport { ExclamationCircleFilled, InfoOutlined } from \"@ant-design/icons\";\r\nimport moment from 'moment';\r\nimport ContractMaint from \"./ContractMaint\";\r\nimport { appConfigs } from \"../../../utils/configurations\";\r\nimport { useDispatch } from 'react-redux';\r\n\r\nconst { Search } = Input;\r\nconst { TextArea } = Input;\r\nconst { Option } = Select;\r\n\r\nconst { TabPane } = Tabs;\r\n\r\n\r\ninterface Props{\r\n contractsSetSearch: Function,\r\n contractSetPagination: Function,\r\n getContracts: Function,\r\n openDrawer: Function,\r\n getAllAssetsList: Function,\r\n addToContractsList: Function,\r\n addToRenewalsToolList: Function,\r\n removeFromContractsList: Function,\r\n removeFromRenewalsToolList: Function,\r\n modifyContract: Function,\r\n addServicePlanToBucket: Function,\r\n updateField: Function,\r\n updateRenewalField: Function,\r\n getBillableCustomerList: Function,\r\n getServicePlansList: Function,\r\n getCustomerBucketDetails: Function,\r\n setTab: Function,\r\n context: any,\r\n contracts: any,\r\n permissions: any,\r\n contractsModification: any,\r\n renewalTool: any,\r\n billableCustomers: any,\r\n customerBucketDetails: any\r\n servicePlansList: any\r\n}\r\n\r\nconst ServicePlanTab: React.FC<Props> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n const formRef = React.createRef<FormInstance>();\r\n const [showZeros, setShowZeros] = useState(false)\r\n const [isModalVisible, setIsModalVisible] = useState(false)\r\n\r\n useEffect(() => {\r\n props.getBillableCustomerList()\r\n props.getServicePlansList()\r\n return () => {\r\n dispatch({ \r\n type: \"GET_CUSTOMER_BUCKET_DETAILS\", \r\n payload: { customerBucketDetails: [] } // Or any default value you want\r\n });\r\n };\r\n\r\n }, [])\r\n\r\n const toggleZeros = () => {\r\n setShowZeros(!showZeros)\r\n }\r\n\r\n const showModal = () => {\r\n setIsModalVisible(true);\r\n };\r\n \r\n const handleOk = () => {\r\n setIsModalVisible(false);\r\n\r\n resetFormErrors(null, formRef.current); \r\n\r\n formRef.current?.setFieldsValue({\r\n allowDuplicate: true,\r\n })\r\n\r\n console.log(formRef.current?.getFieldsValue())\r\n props.addServicePlanToBucket(formRef.current?.getFieldsValue(), submitNewServicePlanSuccess, submitNewServicePlanFailure)\r\n };\r\n \r\n const handleCancel = () => {\r\n setIsModalVisible(false);\r\n };\r\n\r\n const customerSelected = (organizationId:any) => {\r\n props.getCustomerBucketDetails(organizationId)\r\n }\r\n\r\n const onFinishServicePlanAddition = (values: any) => {\r\n resetFormErrors(null, formRef.current); \r\n\r\n formRef.current?.setFieldsValue({\r\n allowDuplicate: false,\r\n })\r\n\r\n console.log(values)\r\n console.log(formRef.current?.getFieldsValue())\r\n\r\n props.addServicePlanToBucket(formRef.current?.getFieldsValue(), submitNewServicePlanSuccess, submitNewServicePlanFailure)\r\n }\r\n\r\n const submitNewServicePlanSuccess = (description: any, organizationId: any) => {\r\n message.success(\"Service Plan(s) Added To Bucket Successfully!\");\r\n props.getCustomerBucketDetails(organizationId)\r\n }\r\n\r\n const submitNewServicePlanFailure = (defaultMessage: any, ServerMessage: any) => {\r\n if (ServerMessage.includes('Record Already Exists')) {\r\n showModal()\r\n } else {\r\n message.error(ServerMessage ? ServerMessage : defaultMessage);\r\n }\r\n }\r\n\r\n\r\n const customerBucketTableColumn = [\r\n {\r\n title: 'Service Plan Description',\r\n dataIndex: 'packageName',\r\n },\r\n {\r\n title: 'Service Plan Part Number',\r\n dataIndex: 'partNumber',\r\n },\r\n {\r\n title: 'Available Quantity',\r\n dataIndex: 'total_available_quantity',\r\n render: (text: string, record: any) => {\r\n // console.log('record :>> ', record);\r\n const content = (\r\n <table className=\"styled-table\" style={{overflow:'auto',height:'300px',display: 'block'}}>\r\n <thead style={{position:'sticky',top: 0}}>\r\n <tr>\r\n <th style={{whiteSpace: 'nowrap' }}>Created At</th>\r\n <th style={{whiteSpace: 'nowrap' }}>PO Number</th>\r\n <th style={{whiteSpace: 'nowrap' }}>SO Number</th>\r\n <th>Purchased Quantity</th>\r\n <th>Used (Assigned) Quantity</th>\r\n <th>Available Quantity</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody>\r\n { record.partNumberBucketEntries?.map((bucketEntry:any, index: number) => \r\n <tr key={index}>\r\n <td style={{whiteSpace: 'nowrap' }}>{ moment(bucketEntry.createdAt).format('MM/DD/YYYY HH:mm:ss') }</td>\r\n <td style={{whiteSpace: 'nowrap' }}>{bucketEntry.poNumber}</td>\r\n <td style={{whiteSpace: 'nowrap' }}>{bucketEntry.soNumber}</td>\r\n <td>{bucketEntry.purchasedQuantity}</td>\r\n <td>{bucketEntry.purchasedQuantity - bucketEntry.availableQuantity}</td>\r\n <td>{bucketEntry.availableQuantity}</td>\r\n </tr>\r\n )}\r\n </tbody>\r\n\r\n </table>\r\n );\r\n\r\n if(record.total_available_quantity > 0) {\r\n return (\r\n <Popover placement=\"topLeft\" key={record.partNumber} content={content} title=\"PO History\">\r\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{record.total_available_quantity}</span>\r\n </Popover >\r\n )\r\n } else {\r\n return (\r\n <span style={{ cursor: \"pointer\" }}>{record.total_available_quantity}</span>\r\n )\r\n }\r\n\r\n }\r\n },\r\n ];\r\n\r\n \r\n return (\r\n\r\n <>\r\n \r\n <Modal title=\"Duplicate Entry Found!\" visible={isModalVisible} okText=\"Yes, Add\" cancelText=\"No\" okType=\"danger\" onOk={handleOk} onCancel={handleCancel}>\r\n We found a duplicate entry with the same PO, SO, and Part Number! Are you sure you still want to add this record?\r\n </Modal>\r\n \r\n <Form\r\n id=\"updateCustomerBucket\"\r\n ref={formRef}\r\n layout=\"vertical\"\r\n onFinish={onFinishServicePlanAddition}\r\n > \r\n <Row style={{padding: '0px', margin: '0px'}} gutter={24}>\r\n\r\n <Col style={{ marginTop: '10px' }} xs={6} sm={6} md={6} lg={6} xl={6}>\r\n\r\n <Form.Item style={{display: \"none\"}} name=\"allowDuplicate\" >\r\n <Input value=\"false\" type='hidden' />\r\n </Form.Item>\r\n \r\n <Form.Item\r\n label=\"Billable Customer\"\r\n name=\"orgId\" \r\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\r\n >\r\n \r\n <Select\r\n placeholder=\"Select A Customer\"\r\n showSearch\r\n style={{ width: '100%' }}\r\n onChange={(value, e) => customerSelected(value)}\r\n optionFilterProp=\"children\"\r\n filterOption={(input, option) => {\r\n return option?.children?.toLowerCase().indexOf(input.toLowerCase()) >= 0\r\n }}\r\n >\r\n {\r\n props.billableCustomers.map((item:any) => (\r\n <Option style={{fontSize: '12px'}} key={item.sapCustomerNumber} value={item.organizationId}>{item.customerName}</Option>\r\n ))\r\n }\r\n </Select>\r\n\r\n </Form.Item>\r\n\r\n </Col>\r\n\r\n <Col style={{ marginTop: '10px' }} xs={4} sm={4} md={4} lg={4} xl={4}>\r\n <Form.Item \r\n label=\"Purchase Order\"\r\n name=\"PONumber\"\r\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\r\n >\r\n <Input\r\n style={{ width: '100%' }}\r\n placeholder=\"Enter PO#\"\r\n />\r\n </Form.Item>\r\n </Col>\r\n\r\n <Col style={{ marginTop: '10px' }} xs={4} sm={4} md={4} lg={4} xl={4}>\r\n <Form.Item \r\n label=\"Sales Order\"\r\n name=\"SONumber\"\r\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\r\n >\r\n <Input\r\n style={{ width: '100%' }}\r\n placeholder=\"Enter SO #\"\r\n />\r\n </Form.Item>\r\n </Col>\r\n\r\n <Col style={{ marginTop: '10px' }} xs={4} sm={4} md={4} lg={4} xl={4}>\r\n <Form.Item \r\n label=\"Quantity\"\r\n name=\"Quantity\"\r\n rules={[\r\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired },\r\n { validator: (_, value) => {\r\n if (!Number.isInteger(Number(value))) {\r\n return Promise.reject('Whole Numbers Only'); \r\n } \r\n return Promise.resolve(); \r\n \r\n }}\r\n ]}\r\n >\r\n <Input\r\n placeholder=\"Enter Quantity\"\r\n style={{ width: '100%' }}\r\n />\r\n </Form.Item>\r\n </Col>\r\n\r\n\r\n <Col style={{ marginTop: '10px' }} xs={6} sm={6} md={6} lg={6} xl={6}>\r\n <Form.Item\r\n label=\"Service Plan\"\r\n name=\"partNumberId\" \r\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\r\n >\r\n \r\n <Select\r\n placeholder=\"Select Service Plan\"\r\n showSearch\r\n style={{ width: '100%' }}\r\n optionFilterProp=\"children\"\r\n filterOption={(input, option) => {\r\n return option?.children?.toLowerCase().indexOf(input.toLowerCase()) >= 0\r\n }}\r\n >\r\n {\r\n props.servicePlansList.map((item:any) => (\r\n item.packageActive===true&&\r\n <Option style={{fontSize: '12px'}} key={item.servicePlanId} value={item.servicePlanId}>{item.packageName}</Option>\r\n ))\r\n\r\n }\r\n </Select>\r\n \r\n </Form.Item>\r\n </Col>\r\n\r\n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\r\n <Form.Item>\r\n <Button \r\n style={{ width: '100%' }}\r\n type=\"primary\"\r\n htmlType=\"submit\"\r\n >\r\n Add Service Plan Details\r\n </Button>\r\n </Form.Item>\r\n </Col>\r\n\r\n </Row>\r\n\r\n </Form>\r\n\r\n <Divider></Divider>\r\n\r\n {\r\n props.customerBucketDetails.length > 0 &&\r\n <Col style={{ marginTop: '10px' }} xs={24} sm={24} md={24} lg={24} xl={24}>\r\n <h2>\r\n <span style={{ marginRight: \"5px\"}}>Selected Customer Bucket Details</span>\r\n {/* <span onClick={toggleZeros} style={{ marginLeft: \"3px\", fontSize: '12px', color: \"#1890FF\", textDecoration: \"underline\", cursor: \"pointer\", userSelect: \"none\" }}>{!showZeros ? 'Show' : 'Hide'} Zero Quantities</span> */}\r\n {/* <Button \r\n onClick={toggleZeros} \r\n size='small'\r\n type={!showZeros ? \"primary\" : \"default\"}\r\n style={{ float: 'right'}}\r\n >{!showZeros ? 'Show' : 'Hide'} Zeros</Button> */}\r\n {/* <Checkbox \r\n onClick={toggleZeros}\r\n defaultChecked={showZeros}\r\n style={{ float: 'right'}}\r\n >\r\n <span style={{marginLeft: \"2px\"}}>Show Zero Quantities</span>\r\n </Checkbox> */}\r\n </h2>\r\n <Table\r\n pagination={false}\r\n columns={customerBucketTableColumn}\r\n dataSource={!showZeros ? props.customerBucketDetails.filter((details:any) => details['total_available_quantity'] > 0) : props.customerBucketDetails}\r\n size=\"small\"\r\n />\r\n </Col>\r\n }\r\n \r\n \r\n\r\n </>\r\n\r\n );\r\n}\r\n\r\n\r\nconst mapStateToProps = (state:any) => {\r\n return {\r\n permissions: state.contextReducer.data,\r\n context: state.contextReducer.context,\r\n contracts: state.contractsReducers.contractsState.contracts,\r\n contractsModification: state.contractsReducers.contractsState.contracts.contractsModification,\r\n renewalTool: state.contractsReducers.contractsState.contracts.renewalTool,\r\n billableCustomers: state.contractsReducers.contractsState.contracts.billableCustomers,\r\n servicePlansList: state.contractsReducers.contractsState.contracts.servicePlansList,\r\n customerBucketDetails: state.contractsReducers.contractsState.contracts.customerBucketDetails\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n actions\r\n)(ServicePlanTab);","import React, { useContext, useState, useEffect, useRef } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Button, Space, Table, Input, Popconfirm, Form, Select, message, DatePicker, Card, Popover, Modal, Divider } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport \"./contracts.css\";\nimport history from '../../../utils/history';\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { InfoOutlined } from \"@ant-design/icons\";\nimport moment from 'moment';\nimport ContractMaint from \"./ContractMaint\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport ServicePlanTab from \"./ServicePlanTab\";\nimport { checkObjectKeyValuesNotEmpty } from \"../../../utils/commonHelpers\";\n\nconst { Search } = Input;\nconst { TextArea } = Input;\nconst { Option } = Select;\n\nconst { TabPane } = Tabs;\n\n\ninterface Props{\n contractsSetSearch: Function,\n contractSetPagination: Function,\n getContracts: Function,\n openDrawer: Function,\n getAllAssetsList: Function,\n addToContractsList: Function,\n addToRenewalsToolList: Function,\n removeFromContractsList: Function,\n removeFromRenewalsToolList: Function,\n modifyContract: Function,\n submitNewRenewal: Function,\n assignServicePlanToGateway: Function,\n updateField: Function,\n updateRenewalField: Function,\n setTab: Function,\n context: any,\n contracts: any,\n permissions: any,\n contractsModification: any,\n renewalTool: any\n}\n\nconst Contracts: React.FC<Props> = (props) => {\n\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n const [selectedFilters, setSelectedFilters] = useState<any>({});\n const [selectedPartNumber, setSelectedPartNumber] = useState<any>('');\n const [renewalSelectedMastertag, setRenewalSelectedMastertag] = useState<any>(null);\n const [isModalVisible, setIsModalVisible] = useState(false)\n const [modalMessage, setModalMessage] = useState('')\n\n const onTabChange = (key:string) => {\n props.setTab(key)\n }\n\n const { tableConfig, tableData } = props.contracts.contractsList;\n\n useEffect(() => {\n props.getAllAssetsList()\n props.contractSetPagination(onPaginationChange(1));\n }, [])\n\n const showModal = () => {\n setIsModalVisible(true);\n };\n \n const handleOk = () => {\n\n setIsModalVisible(false);\n\n let InputValidated = true\n\n // Future Validations\n props.renewalTool.selectedRenewalList.map((newRenewal: any) => {\n // console.log(newRenewal)\n if ( newRenewal.orderNumber == '' || newRenewal.customerPO == '' || newRenewal.partNumber == '' ) {\n InputValidated = false\n message.error(\"All fields are required\")\n }\n })\n\n if(InputValidated){\n\n const selectedServicePlan = props.renewalTool.selectedRenewalList[0]['renewal_packages'].filter((servicePlan:any) => servicePlan.partNumber === selectedPartNumber)\n \n const postValue = {\n orgId: props.renewalTool.selectedRenewalList[0]['orgID'],\n gatewayId: props.renewalTool.selectedRenewalList[0]['gatewayID'],\n masterTag: props.renewalTool.selectedRenewalList[0]['mastertag'],\n partNumberId: selectedServicePlan[0]['id'],\n customerNumber: props.renewalTool.selectedRenewalList[0]['customerNumber'],\n billToName: props.renewalTool.selectedRenewalList[0]['billToName'],\n customerPO: props.renewalTool.selectedRenewalList[0]['customerPO'],\n orderNumber: props.renewalTool.selectedRenewalList[0]['orderNumber'],\n partNumber: props.renewalTool.selectedRenewalList[0]['partNumber'],\n userConfirmed: true,\n addLog: true\n }\n \n if(checkObjectKeyValuesNotEmpty(postValue)){\n props.assignServicePlanToGateway(postValue, submitNewRenewalSuccess, submitNewRenewalFailure)\n } else {\n message.warning(\"Unable to process request. Please contact your system administrator\");\n console.log(postValue, props.renewalTool.selectedRenewalList[0])\n }\n\n // props.submitNewRenewal(props.renewalTool.selectedRenewalList, submitNewRenewalSuccess, submitNewRenewalFailure)\n }\n\n };\n \n const handleCancel = () => {\n setIsModalVisible(false);\n };\n\n const renderContractsTable = (pagination: any, filters: any, sorter: any, extra: any, e:any) => {\n setSelectedFilters(filters)\n props.getContracts(null, null, null, pagination.current, props.contracts.contractsList.searchText, filters)\n }\n\n const onSearch = (searchText: string) => { \n props.contractsSetSearch((searchText || \"\"));\n\n if((searchText || \"\")===\"\") {\n history.push(\"/admin/contracts\");\n }\n \n setTimeout(function() {\n props.getContracts(null, null, null, 1, searchText, selectedFilters); \n }, 100); \n }\n\n const onSearchChange = (e: any) => {\n let value = e.target.value;\n props.contractsSetSearch((value || \"\"));\n }\n\n const onPaginationChange = (page: number) => {\n props.getContracts(null, null, null, page, props.contracts.contractsList.searchText, selectedFilters);\n };\n\n const tableColumns = [\n {\n title: 'Mastertag',\n dataIndex: 'masterTag',\n render: (text: string, record: any) => {\n \n const content = (\n <table className=\"styled-table\" style={{width: '405px'}}>\n <thead>\n <tr>\n <th>Mastertag</th>\n <th>Created On</th>\n <th>Start Date</th>\n <th>End Date</th>\n <th>Part Number</th>\n <th>PO#</th>\n <th>SO#</th>\n <th>Created By</th>\n </tr>\n </thead>\n <tbody>\n { JSON.parse(record.billingContractHistory)?.map((billing:any) => \n <tr key={billing.id}>\n <td>{billing.mastertag}</td>\n <td>{billing.built_on}</td>\n <td>{billing.contract_start_date}</td>\n <td>{billing.contract_end_date}</td>\n <td>{billing.partNumber}</td>\n <td></td>\n <td></td>\n <td>{billing.full_name}</td>\n </tr>\n )}\n { JSON.parse(record.renewalContractHistory)?.map((renewal:any) => \n <tr key={renewal.pts_id}>\n <td>{renewal.mastertag}</td>\n <td>{renewal.created_date}</td>\n <td>{renewal.contract_start_date}</td>\n <td>{renewal.contract_end_date}</td>\n <td>{renewal.partNumber}</td>\n <td>{renewal.po_number}</td>\n <td>{renewal.so_number}</td>\n <td>{renewal.full_name}</td>\n </tr>\n )}\n </tbody>\n\n </table>\n );\n\n if(record.billingContractHistory || record.renewalContractHistory) {\n return (\n <Popover placement=\"topLeft\" key={record.masterTag} content={content} title=\"Asset Detail View\">\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{record.masterTag}</span>\n </Popover >\n )\n } else {\n return (\n <Popover placement=\"topLeft\" key={record.masterTag} content={<p>No Contract History</p>} title=\"Asset Detail View\">\n <span style={{ cursor: \"pointer\" }}>{record.masterTag}</span>\n </Popover >\n )\n }\n\n }\n },\n {\n title: 'Asset Name',\n dataIndex: 'assetName',\n },\n {\n title: \"Org Name\",\n dataIndex: \"orgName\",\n },\n {\n title: 'Billable Customer',\n dataIndex: 'billing_customer',\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n record.billingContractHistory != null ?\n <Tooltip title={\n <>\n <span>PTS Customer #: {JSON.parse(record.billingContractHistory)[0].pts_customer_number}</span>\n <br/>\n <span>SAP Customer #: {JSON.parse(record.billingContractHistory)[0].sap_customer_number}</span>\n </>\n }>\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{JSON.parse(record.billingContractHistory)[0].customer_name}</span>\n </Tooltip>\n :\n <span >No Customer</span>\n }\n </span> \n ),\n },\n {\n title: \"Part Number\",\n dataIndex: \"partNumber\",\n },\n {\n title: \"Contract Start Date\",\n dataIndex: \"startDate\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n moment(record.endDate, \"L\").diff(moment(), 'days') <= 30 ?\n <>\n <span style={{ color: 'red' }}><b>{record.startDate}</b></span>\n </>\n :\n <span >{record.startDate}</span>\n }\n </span> \n ),\n },\n {\n title: \"Contract End Date\",\n dataIndex: \"endDate\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n {\n moment(record.endDate, \"L\").diff(moment(), 'days') <= 30 ?\n <>\n <span style={{ color: 'red' }}><b>{record.endDate}</b></span>\n </>\n :\n <span >{record.endDate}</span>\n }\n </span> \n ),\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n filterMultiple: true,\n filteredValue: selectedFilters.hasOwnProperty('status') ? selectedFilters.status : [],\n filters: props.contracts.contractsList.columnsFilters.status?.map((status: any) => {\n return { 'value': status, 'text': status }\n }),\n },\n \n {\n title: \"Actions\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Contract\">\n <Button\n data-id=\"assets-edit-asset-button\"\n type=\"default\" \n style={ record.changesHistory ? { backgroundColor:'#e6d9ad', color: \"white\", border: \"solid #8a8a8a 1px\"} : {} }\n icon={<InfoOutlined />}\n onClick={(e) => { props.openDrawer(\"Mastertag (\" + record.masterTag + ') Contract Details', drawerWidth, record); }}\n />\n </Tooltip>\n } \n </Space>\n )\n }\n ]\n\n\n\n //Modify Contracts \n const onChangeModify = (value: any) => {\n console.log('value :>> ', value);\n let selectedAssetDetails = props.contractsModification.assetsList.filter((record:any) => (\n record.masterTag === value\n ))[0]\n\n // console.log('selectedAssetDetails', selectedAssetDetails)\n props.addToContractsList(selectedAssetDetails, getContractDetailsFailed)\n\n }\n\n //Renewal Tool \n const onRenewalToolChangeModify = (value: any) => {\n // console.log('value :>> ', value);\n let selectedAssetDetails = props.renewalTool.assetsList.filter((record:any) => (\n record.masterTag === value\n ))[0]\n\n // console.log('selectedAssetDetails', selectedAssetDetails)\n props.addToRenewalsToolList(selectedAssetDetails, getRenewalDetailsFailed)\n setRenewalSelectedMastertag(null)\n\n }\n\n const getContractDetailsFailed = (error: any) => {\n console.log(error)\n message.error(\"Error While Retrieving Asset Data (Gateway Does Not Have Contract Or Whitelisted!!)\");\n }\n\n const getRenewalDetailsFailed = (error: any, respMessage: string) => {\n console.log(error)\n message.error(respMessage);\n }\n\n const removeFromContractsList = (mastertag: any) => {\n props.removeFromContractsList(mastertag)\n }\n\n const removeFromRenewalsToolList = (mastertag: any) => {\n props.removeFromRenewalsToolList(mastertag)\n }\n\n const contractsModificationColumns = [\n {\n title: 'Mastertag',\n dataIndex: 'mastertag',\n render: (text: string, record: any) => {\n console.log('record :>> ', record);\n const content = (\n <table className=\"styled-table\" style={{width: '405px'}}>\n <thead>\n <tr>\n <th>Mastertag</th>\n <th>Created On</th>\n <th>Start Date</th>\n <th>End Date</th>\n <th>Part Number</th>\n <th>PO#</th>\n <th>SO#</th>\n <th>Created By</th>\n </tr>\n </thead>\n <tbody>\n { record.billing_contract_history?.map((billing:any) => \n <tr key={billing.id}>\n <td>{billing.mastertag}</td>\n <td>{billing.built_on}</td>\n <td>{billing.contract_start_date}</td>\n <td>{billing.contract_end_date}</td>\n <td>{billing.partNumber}</td>\n <td></td>\n <td></td>\n <td>{billing.full_name}</td>\n </tr>\n )}\n { record.renewal_contract_history?.map((renewal:any) => \n <tr key={renewal.id}>\n <td>{renewal.mastertag}</td>\n <td>{renewal.created_date}</td>\n <td>{renewal.contract_start_date}</td>\n <td>{renewal.contract_end_date}</td>\n <td>{renewal.partNumber}</td>\n <td>{renewal.po_number}</td>\n <td>{renewal.so_number}</td>\n <td>{renewal.full_name}</td>\n </tr>\n )}\n </tbody>\n\n </table>\n );\n\n if(record.billing_contract_history || record.renewal_contract_history) {\n return (\n <Popover placement=\"topLeft\" key={record.mastertag} content={content} title=\"Asset Detail View\">\n <span style={{ cursor: \"pointer\", color: \"#119FFB\", textDecoration: \"underline\" }}>{record.mastertag}</span>\n </Popover >\n )\n } else {\n return (\n <Popover placement=\"topLeft\" key={record.mastertag} content={<p>No Contract History</p>} title=\"Asset Detail View\">\n <span style={{ cursor: \"pointer\" }}>{record.mastertag}</span>\n </Popover >\n )\n }\n\n }\n },\n {\n title: 'Contract Start Date',\n dataIndex: 'contract_start_date',\n render: (text: string, record: any) => (\n <Tooltip title=\"Select New Contract Start Date\">\n <DatePicker \n defaultValue={moment(record.contract_start_date, 'MM/DD/YYYY')}\n format={'MM/DD/YYYY'}\n style={{ width: '100%' }}\n onChange={(value, dateString) => updateField(dateString, 'contract_start_date', record)}\n />\n </Tooltip>\n )\n \n },\n {\n title: 'Contract End Date',\n dataIndex: 'contract_end_date',\n render: (text: string, record: any) => (\n <Tooltip title=\"Select New Contract End Date\">\n <DatePicker \n defaultValue={moment(record.contract_end_date, 'MM/DD/YYYY')}\n format={'MM/DD/YYYY'}\n style={{ width: '100%' }}\n onChange={(value, dateString) => updateField(dateString, 'contract_end_date', record)}\n />\n </Tooltip>\n )\n },\n {\n title: 'Asset Status',\n dataIndex: 'old_gateway_status',\n render: (text: string, record: any) => (\n <Tooltip title=\"Select New Portal Status\">\n <Select \n defaultValue={record.old_gateway_status} \n style={{ width: '100%' }}\n onChange={(value, e) => updateField(value, 'new_gateway_status', record)}\n >\n <Option value=\"active\">Active</Option>\n <Option value=\"inactive\">Inactive</Option>\n </Select>\n </Tooltip>\n )\n },\n {\n title: 'SIM Status',\n dataIndex: 'old_sim_status',\n render: (text: string, record: any) => (\n <Tooltip title=\"Select New Portal Status\">\n <Select\n defaultValue={record.old_sim_status}\n style={{ width: '100%' }}\n onChange={(value, e) => updateField(value, 'new_sim_status', record)}\n >\n <Option value=\"ACTIVATED\">Active</Option>\n <Option value=\"DEACTIVATED\">Inactive</Option>\n </Select>\n </Tooltip>\n )\n },\n {\n title: 'IoTHub Status',\n dataIndex: 'old_iothub_status',\n render: (text: string, record: any) => (\n <Tooltip title=\"Select New Portal Status\">\n <Select\n defaultValue={record.old_iothub_status}\n style={{ width: '100%' }}\n onChange={(value, e) => updateField(value, 'new_iothub_status', record)}\n >\n <Option value=\"enabled\">Active</Option>\n <Option value=\"disabled\">Inactive</Option>\n </Select>\n </Tooltip>\n )\n },\n {\n title: 'Change Justification',\n dataIndex: 'justification',\n render: (text: string, record: any) => (\n <Tooltip title=\"Enter Justification (Required) Min 10 Characters\">\n <TextArea\n placeholder=\"Enter Justification\"\n minLength={10}\n defaultValue={record.justification}\n autoSize={{ minRows: 2, maxRows: 10 }}\n onChange={(e) => updateJustification(e, 'justification', record)}\n onBlur={(e) => updateJustification(e, 'justification', record)}\n style={{ width: '100%', border: record.justification?.trim().length < 10 ? '#C70039 2px solid' : '#097969 2px solid'}}\n />\n </Tooltip>\n )\n },\n {\n title: 'Action',\n render: (text: string, record: any) => (\n <Tooltip title=\"Remove Row\">\n <Button \n style={{ width: '100%' }}\n type=\"link\"\n onClick={() => removeFromContractsList(record.mastertag)}\n >\n Remove\n </Button>\n </Tooltip>\n )\n },\n ];\n\n\n const renewalToolColumns = [\n {\n title: 'Mastertag',\n dataIndex: 'mastertag',\n },\n {\n title: 'Customer Name',\n dataIndex: 'customer_name',\n render: (text: string, record: any) => (\n <span>{record.billing_contract_history[0].customer_name}</span>\n )\n },\n // {\n // title: 'PTS Customer #',\n // dataIndex: 'pts_customer_number',\n // render: (text: string, record: any) => (\n // <span>{record.billing_contract_history[0].pts_customer_number}</span>\n // )\n // },\n {\n title: 'Order Number',\n dataIndex: 'order_number',\n render: (text: string, record: any) => (\n <Tooltip title=\"Enter Service Order Number\">\n <Input\n placeholder=\"Order Number\"\n minLength={10}\n onChange={(e) => updateRenewalField(e.target.value, 'orderNumber', record)}\n onBlur={(e) => updateRenewalField(e.target.value, 'orderNumber', record)}\n />\n </Tooltip>\n )\n },\n {\n title: 'PO Number',\n dataIndex: 'po_number',\n render: (text: string, record: any) => (\n <Tooltip title=\"Enter PO Number\">\n <Input\n placeholder=\"PO Number\"\n minLength={10}\n onChange={(e) => updateRenewalField(e.target.value, 'customerPO', record)}\n onBlur={(e) => updateRenewalField(e.target.value, 'customerPO', record)}\n />\n </Tooltip>\n )\n },\n {\n title: 'Renewal Package',\n dataIndex: 'renewal_package',\n width: 350,\n render: (text: string, record: any) => (\n <Tooltip title=\"Select Renewal Package\">\n <Select\n placeholder=\"Select Renewal Package\"\n showSearch\n style={{ width: '100%' }}\n onChange={(value, e) => updateRenewalField(value, 'partNumber', record)}\n optionFilterProp=\"children\"\n filterOption={(input, option) => {\n return option?.children?.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n >\n {\n record.renewal_packages && record.renewal_packages.map((item:any) => (\n <Option style={{fontSize: '12px'}} key={item.partNumber} value={item.partNumber}>{item.package_name}</Option> /* {item.nickname} */\n ))\n }\n </Select>\n </Tooltip>\n )\n },\n {\n title: 'Action',\n render: (text: string, record: any) => (\n <Tooltip title=\"Remove Row\">\n <Button \n style={{ width: '100%' }}\n type=\"link\"\n onClick={() => removeFromRenewalsToolList(record.mastertag)}\n >\n Remove\n </Button>\n </Tooltip>\n )\n },\n ];\n\n\n const updateJustification = (e:any, fieldName:string, record:any) => {\n if(e.target.value){\n props.updateField(e.target.value, fieldName, record.mastertag)\n }\n }\n\n const updateField = (value:any, fieldName:string, record:any) => {\n props.updateField(value, fieldName, record.mastertag)\n }\n\n \n const updateRenewalField = (value:any, fieldName:string, record:any) => {\n if(fieldName === 'partNumber'){\n setSelectedPartNumber(value)\n }\n props.updateRenewalField(value, fieldName, record.mastertag)\n }\n\n const contractUpdateSuccess = (description: any) => {\n console.log('message', description.description)\n message.success(\"Contract Data Updated Successfully!\");\n }\n\n const enterLoading = (val:any) => {\n \n let InputValidated = true\n\n props.contractsModification.selectedContractList.map((contract:any) => {\n if(contract.justification.trim().length < 10){\n message.error(\"Mastertag: (\" + contract.mastertag + \") is Missing Justification (Minimum 10 Characters)\");\n InputValidated = false\n }\n })\n\n if(InputValidated){\n props.modifyContract(props.contractsModification.selectedContractList, contractUpdateSuccess)\n }\n }\n\n\n const submitNewRenewalSuccess = (data: any, resultMessage: any) => {\n\n if(resultMessage === 'Renewal Contract Assigned, Activated and Downgraded Successfully'){\n message.success(\"Service Plan Assigned and Activated Successfully!, Template Resetted! Please assign Lite template\");\n } else {\n message.success(\"Renewal Entered Successfully!\");\n }\n \n removeFromRenewalsToolList(props.renewalTool.selectedRenewalList[0].mastertag)\n\n }\n\n const submitNewRenewalFailure = (defaultMessage: any, ServerMessage: any) => {\n if(ServerMessage?.includes('There is an active contract expiring on') || ServerMessage?.includes('There is a pending service plan')){\n setModalMessage(ServerMessage)\n showModal()\n } else {\n message.error(ServerMessage ? ServerMessage : defaultMessage, 10);\n }\n }\n\n\n const submitNewRenewal = (val:any) => {\n \n let InputValidated = true\n\n // Future Validations\n props.renewalTool.selectedRenewalList.map((newRenewal: any) => {\n // console.log(newRenewal)\n if ( newRenewal.orderNumber == '' || newRenewal.customerPO == '' || newRenewal.partNumber == '' ) {\n InputValidated = false\n message.error(\"All fields are required\")\n }\n })\n\n if(InputValidated){\n\n const selectedServicePlan = props.renewalTool.selectedRenewalList[0]['renewal_packages'].filter((servicePlan:any) => servicePlan.partNumber === selectedPartNumber)\n\n console.log(props.renewalTool.selectedRenewalList[0])\n const postValue = {\n orgId: props.renewalTool.selectedRenewalList[0]['orgID'],\n gatewayId: props.renewalTool.selectedRenewalList[0]['gatewayID'],\n masterTag: props.renewalTool.selectedRenewalList[0]['mastertag'],\n partNumberId: selectedServicePlan[0]['id'],\n customerNumber: props.renewalTool.selectedRenewalList[0]['customerNumber'],\n billToName: props.renewalTool.selectedRenewalList[0]['billToName'],\n customerPO: props.renewalTool.selectedRenewalList[0]['customerPO'],\n orderNumber: props.renewalTool.selectedRenewalList[0]['orderNumber'],\n partNumber: props.renewalTool.selectedRenewalList[0]['partNumber'],\n userConfirmed: false,\n addLog: true\n }\n \n console.log(postValue)\n\n if(checkObjectKeyValuesNotEmpty(postValue)){\n props.assignServicePlanToGateway(postValue, submitNewRenewalSuccess, submitNewRenewalFailure)\n } else {\n message.warning(\"Unable to process request. Please contact your system administrator\");\n console.log(postValue, props.renewalTool.selectedRenewalList[0])\n }\n\n // props.submitNewRenewal(props.renewalTool.selectedRenewalList, submitNewRenewalSuccess, submitNewRenewalFailure)\n }\n }\n\n // console.log('props.contractsModification.selectedContractList', props.contractsModification.selectedContractList)\n\n const contractsHistoryColumns = [\n {\n title: 'Mastertag',\n dataIndex: 'mastertag',\n },\n ]\n\n return (\n <>\n <Modal title=\"Entry Warning\" visible={isModalVisible} okText=\"Yes, Add\" cancelText=\"No\" okType=\"danger\" onOk={handleOk} onCancel={handleCancel}>\n <span>{ modalMessage }</span><br />\n <span>Are you sure you still want to add this service plan?</span> \n </Modal>\n \n <div className=\"layout-content\">\n <Row gutter={8}>\n \n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n {\n <span>Contracts Management</span>\n }\n </div>\n </div>\n </Col>\n </Row>\n \n <div className=\"mt-15\">\n <Tabs activeKey={props.contracts.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}>\n <TabPane tab=\"Contracts List\" key=\"1\"> \n <Row justify=\"end\" gutter={24}>\n \n <Col xs={12} lg={8} className=\"content-header-controls\">\n <Search\n data-id=\"contract-search-field\"\n key=\"search-field\"\n placeholder=\"Search By Master Tag, Name, Org Name, End Date\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onSearchChange}\n className=\"search-field\"\n value={props.contracts.contractsList.searchText}\n />\n </Col>\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n data-id=\"contracts-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record) => record.masterTag+record.assetName}\n columns={tableColumns}\n dataSource={tableData}\n onChange={renderContractsTable}\n showSorterTooltip={false}\n />\n </Col> \n </Row>\n </TabPane> \n\n \n\n \n <TabPane tab=\"Modify Existing Contracts\" key=\"2\">\n <Row gutter={24}>\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Select\n style={{width: '100%'}}\n showSearch\n disabled={props.contractsModification.selectedContractList.length > 0}\n placeholder=\"Select a Gateway to Edit\"\n onChange={onChangeModify}\n loading={props.contractsModification.loadingAssetsList}\n optionFilterProp=\"children\"\n filterOption={(input, option) => {\n return option?.value?.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n >\n {\n props.contractsModification.assetsList && props.contractsModification.assetsList.map((item:any) => (\n <Option key={item.gatewayID} value={item.masterTag}>{item.masterTag}</Option> /* {item.nickname} */\n ))\n }\n </Select>\n </Col>\n\n <Col style={{marginTop: '10px'}} xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n dataSource={props.contractsModification.selectedContractList}\n columns={contractsModificationColumns}\n rowKey={(record) => record.mastertag}\n showSorterTooltip={false}\n pagination={false}\n />\n </Col>\n\n <Col style={{marginTop: '10px'}} xs={24} sm={24} md={24} lg={24} xl={24}>\n <Button \n style={{ width: '100%' }}\n type=\"primary\"\n loading={props.contractsModification.submittingContractList}\n onClick={(e) => enterLoading(e)}\n disabled={props.contractsModification.selectedContractList.length === 0}\n >\n Update Contract(s) and Asset(s) Details\n </Button>\n </Col>\n\n </Row>\n </TabPane>\n\n\n \n <TabPane tab=\"Add Renewal To Gateway\" key=\"3\">\n <Row gutter={24}>\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Select\n style={{width: '100%'}}\n showSearch\n disabled={props.renewalTool.selectedRenewalList.length > 0}\n placeholder=\"Select a gateway to add renewal\"\n value={renewalSelectedMastertag}\n onChange={onRenewalToolChangeModify}\n loading={props.renewalTool.loadingAssetsList}\n optionFilterProp=\"children\"\n filterOption={(input, option) => {\n return option?.value?.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n >\n {\n props.renewalTool.assetsList && props.renewalTool.assetsList.map((item:any) => (\n <Option key={item.gatewayID} value={item.masterTag}>{item.masterTag}</Option> /* {item.nickname} */\n ))\n }\n </Select>\n </Col>\n\n <Col style={{marginTop: '10px'}} xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n dataSource={props.renewalTool.selectedRenewalList}\n columns={renewalToolColumns}\n rowKey={(record) => record.mastertag}\n showSorterTooltip={false}\n pagination={false}\n />\n </Col>\n\n <Col style={{marginTop: '10px'}} xs={24} sm={24} md={24} lg={24} xl={24}>\n <Button \n style={{ width: '100%' }}\n type=\"primary\"\n loading={props.renewalTool.submittingRenewalList}\n onClick={(e) => submitNewRenewal(e)}\n disabled={props.renewalTool.selectedRenewalList.length === 0}\n >\n Add Renewal Details\n </Button>\n </Col>\n\n {\n props.renewalTool.selectedRenewalList.length > 0 &&\n <>\n \n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Divider></Divider>\n </Col>\n\n \n <Col style={{marginTop: '10px'}} xs={24} sm={24} md={24} lg={24} xl={24}>\n <h2>Asset Detailed View</h2>\n <table className=\"styled-table\" style={{width: '100%'}}>\n <thead>\n <tr>\n <th>Mastertag</th>\n <th>Created On</th>\n <th>Start Date</th>\n <th>End Date</th>\n <th>Part Number</th>\n <th>PO#</th>\n <th>SO#</th>\n <th>Created By</th>\n </tr>\n </thead>\n <tbody>\n { props.renewalTool?.selectedRenewalList[0]?.billing_contract_history?.map((billing:any) => \n <tr key={billing.id}>\n <td>{billing.mastertag}</td>\n <td>{billing.built_on}</td>\n <td>{billing.contract_start_date}</td>\n <td>{billing.contract_end_date}</td>\n <td>{billing.partNumber}</td>\n <td></td>\n <td></td>\n <td>{billing.full_name}</td>\n </tr>\n )}\n { props.renewalTool?.selectedRenewalList[0]?.renewal_contract_history?.map((renewal:any) => \n <tr key={renewal.id}>\n <td>{renewal.mastertag}</td>\n <td>{renewal.created_date}</td>\n <td>{renewal.contract_start_date}</td>\n <td>{renewal.contract_end_date}</td>\n <td>{renewal.partNumber}</td>\n <td>{renewal.po_number}</td>\n <td>{renewal.so_number}</td>\n <td>{renewal.full_name}</td>\n </tr>\n )}\n </tbody>\n\n </table>\n </Col>\n </>\n }\n \n\n </Row>\n </TabPane>\n\n\n <TabPane tab=\"Add Service Plan To Buckets\" key=\"4\">\n <ServicePlanTab />\n </TabPane>\n\n \n </Tabs> \n </div>\n\n <ContractMaint/>\n </div>\n </>\n\n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n contracts: state.contractsReducers.contractsState.contracts,\n contractsModification: state.contractsReducers.contractsState.contracts.contractsModification,\n renewalTool: state.contractsReducers.contractsState.contracts.renewalTool,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Contracts);\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getApplications(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n searchText?: string,\n filters?: any[any],\n applicationId?:string\n) {\n \n return async (dispatch: any) => {\n\n let filtersObj:any = [];\n filters && filters['status'] != null ? filtersObj = {'statusFilter': filters['status']} : filtersObj = {}\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/applications\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n applicationId: (applicationId||\"\"),\n filters: (filters['status'] ? \"\" : encodeURIComponent(JSON.stringify(filtersObj)) )\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.applications);\n }\n dispatch({ type: \"APPLICATIONS_GET_SUCCESS\", payload: {data: response.data.data.applications, page: page} });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function applicationsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"APPLICATION_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function applicationSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"APPLICATIONS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n}\n\nexport function openDrawer(title: string, width: number, record: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"OPEN_DRAWER\", payload: { title: title, width: width, record: record } });\n\t};\n}\n\nexport function closeDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"CLOSE_DRAWER\" });\n\t};\n}\n\nexport function drawerTabChange(activeTab: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"DRAWER_TAB_CHANGE\", activeTab: activeTab });\n\t};\n}\n\n\n\nexport function getAllApplicationsList() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/applications\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\tpage: 1,\n\t\t\t\tpageSize: 9999,\n\t\t\t},\n\t\t}).then((response) => {\n let applications = response.data.data.applications;\n\t\t\tdispatch({ type: \"SET_APPLICATIONS_LIST\", payload: { applicationsList: applications } });\n\t\t}).catch(function (error) {\n dispatch({ type: \"SET_LOADING_APPLICATIONS\", payload: { state: false } });\n errorResponse(null, error);\n });\n\t};\n}\n\n\n\nexport function getAllControllersList(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n pageSize?: number\n) {\n \n return async (dispatch: any) => {\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/controllers\", {\n responseType: \"json\", \n headers: {},\n params: {\n page: page,\n pageSize: pageSize,\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({ type: \"GET_CONTROLLERS_LIST\", controllersList: response.data.data.controllers });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\n\nexport function ApplicationMaint(\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n applicationInfo?: any,\n) {\n \n return async (dispatch: any) => {\n\n console.log(\"applicationInfo\")\n console.log(applicationInfo)\n var formData = new FormData();\n\n formData.append(\"controllerId\", applicationInfo.compatibleControllers);\n formData.append(\"name\", applicationInfo.applicationName);\n formData.append(\"type\", applicationInfo.type);\n formData.append(\"version\", applicationInfo.version);\n formData.append(\"description\", applicationInfo.description);\n formData.append(\"requiresApproval\", applicationInfo.requiredApproval);\n formData.append(\"mode\", \"add\");\n formData.append(\"file\", applicationInfo.fileUpload[0].originFileObj);\n\n Axios({\n method: \"POST\",\n url: appConfigs.server.URL + \"/ui/api/modify_application\",\n data: formData,\n headers: { \"Content-Type\": 'multipart/form-data;' }\n })\n .then(response => { \n \n console.log(response.data.status)\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.status);\n }\n\n dispatch({ type: \"APPLICATION_MAINT_SUCCESS\", payload: response.data.application });\n }\n )\n .catch(function (error) {\n console.log('error', error)\n if (callbackFnFailure != null) {\n callbackFnFailure(error)\n }\n\n dispatch({ type: \"APPLICATION_MAINT_FAILED\", payload: 'Failed' });\n });\n };\n}\n\n\n\nexport function modifyController(\n selectedApplicationsToModify: any,\n callbackFnSuccess?: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ADD_APPLICATION\", payload: { state: true } });\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/modify_applications\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n params: {\n applications: encodeURIComponent(JSON.stringify(selectedApplicationsToModify))\n\t\t\t},\n\t\t}).then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data);\n }\n\t\t\tdispatch({ type: \"ADD_APPLICATION_SUCCESSFULLY\" });\n\t\t}).catch(function (error) {\n dispatch({ type: \"ADD_APPLICATION\", payload: { state: false } });\n console.log('error', error)\n errorResponse(null, error);\n });\n\t};\n}","import { Button, Card, Col, Divider, Drawer, Form, Input, Row, Select, Space, Tabs, Upload, message } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport moment from \"moment\";\nimport React, { useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"./actions\";\nimport { InboxOutlined } from '@ant-design/icons';\nimport { UploadProps } from \"antd/lib/upload\";\n\nconst { TabPane } = Tabs;\nconst { Option } = Select;\nconst { TextArea } = Input;\nconst { Dragger } = Upload;\n\nconst dragProps: UploadProps = {\n name: 'file',\n multiple: false,\n beforeUpload(fileInfo: any) {\n return false;\n },\n};\n\ninterface Prop {\n context: any,\n controllersList: any,\n applicationMaintOptions: any,\n closeDrawer: Function,\n drawerTabChange: Function,\n ApplicationMaint: Function,\n getApplications: Function,\n}\n\nconst ControllerMaint: React.FC<Prop> = (props) => {\n\n const formRefNewApp = React.createRef<FormInstance>();\n const formRefNewVersion = React.createRef<FormInstance>();\n \n const onDrawerClose = () => {\n props.closeDrawer();\n };\n\n const onTabChange = (key: string) => {\n props.drawerTabChange(key);\n }\n\n useEffect(() => {\n\n console.log(props.applicationMaintOptions.record)\n\n if (formRefNewApp.current != null) {\n formRefNewApp.current!.resetFields(); \n formRefNewApp.current!.setFieldsValue({\n applicationId: props.applicationMaintOptions.record.id,\n applicationName: props.applicationMaintOptions.record.name,\n type: props.applicationMaintOptions.record.type,\n version: props.applicationMaintOptions.record.version,\n requiredApproval: props.applicationMaintOptions.record.requiresApproval,\n compatibleControllers: props.applicationMaintOptions.record.controllerId,\n description: props.applicationMaintOptions.record.description\n });\n }\n \n }, [props])\n\n\n const onFinish = (values: any) => {\n // console.log(values)\n props.ApplicationMaint(onFinishSuccess, onFinishFailure, values)\n }\n\n const onFinishSuccess = (record: any) => { \n message.success(\"Application Added Successfully\");\n props.getApplications(null, null, null, 1, \"\", {});\n props.closeDrawer();\n }\n\n const onFinishFailure = (error: any) => { \n message.error(\"Error posting data\");\n }\n\n const getUploadFile = (e:any) => {\n console.log('Upload event:', e);\n\n // if (Array.isArray(e)) {\n // return e;\n // }\n return e && e.fileList;\n };\n \n return (\n <Drawer\n title={props.applicationMaintOptions.title}\n width={props.applicationMaintOptions.width}\n onClose={onDrawerClose}\n visible={props.applicationMaintOptions.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button type=\"default\" onClick={onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n\n <Button data-id=\"applications-maint-submit-button\" type=\"primary\" form=\"applicationMaintOptionsInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n \n </Space>\n }\n >\n {\n <Tabs activeKey={props.applicationMaintOptions.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}> \n <TabPane tab={props.applicationMaintOptions.tabs[0].title} key=\"1\" disabled={props.applicationMaintOptions.tabs[0].disabled}>\n <Form\n id=\"applicationMaintOptionsInfoForm\"\n ref={formRefNewApp}\n layout=\"vertical\"\n onFinish={onFinish}\n > \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item name=\"applicationId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n </Col> \n </Row> \n \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Application Name\"\n name=\"applicationName\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input maxLength={255} disabled={props.applicationMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col> \n \n </Row> \n \n <Row gutter={8}>\n \n <Col span={12}>\n <Form.Item\n label=\"Type\"\n name=\"type\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select>\n <Option value=\"application\">Application</Option>\n <Option value=\"firmware\">Firmware</Option>\n <Option value=\"Runtime\">Runtime</Option>\n <Option value=\"bsp\">BSP</Option>\n <Option value=\"Others\">Others</Option>\n </Select>\n\n </Form.Item>\n </Col> \n \n\n <Col span={12}>\n <Form.Item\n label=\"Version\"\n name=\"version\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={props.applicationMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col> \n\n <Col span={12}>\n <Form.Item\n label=\"Requires Operator Approval\"\n name=\"requiredApproval\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select>\n <Option value=\"no\">No</Option>\n <Option value=\"yes\">Yes</Option>\n </Select>\n\n </Form.Item>\n </Col> \n\n <Col span={12}>\n <Form.Item\n label=\"Compatible Controllers List\"\n name=\"compatibleControllers\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n\n <Select>\n {props.controllersList !== null && props.controllersList.map((controller:any, index:number) => (\n <Option key={controller.id} value={controller.id} >\n {controller.name}\n </Option>\n ))}\n </Select>\n \n </Form.Item>\n </Col> \n\n </Row>\n\n <Row gutter={8}>\n \n <Col span={24}>\n <Form.Item\n label=\"Description\"\n name=\"description\" \n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <TextArea rows={4} disabled={props.applicationMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col> \n\n <Col span={24}>\n <Form.Item\n label=\"Upload File\"\n name=\"fileUpload\"\n getValueFromEvent={getUploadFile}\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Dragger {...dragProps}>\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">Click or drag file to this area to upload</p>\n <p className=\"ant-upload-hint\">Support for a single upload only. This file which will be loaded in to the controller\n </p>\n </Dragger>\n </Form.Item>\n \n </Col>\n \n </Row>\n\n\n </Form>\n </TabPane> \n\n\n\n {/* <TabPane tab={props.applicationMaintOptions.tabs[1].title} key=\"2\" disabled={props.applicationMaintOptions.tabs[1].disabled}>\n <Form\n id=\"applicationMaintOptionsVersionInfoForm\"\n ref={formRefNewVersion}\n layout=\"vertical\"\n onFinish={onFinish}\n > \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item name=\"applicationId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n </Col> \n </Row> \n \n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n label=\"Application Version\"\n name=\"applicationVersion\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input maxLength={255} disabled={props.applicationMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col>\n \n <Col span={12}>\n <Form.Item\n label=\"Requires Operator Approval\"\n name=\"requiredApproval\"\n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Select>\n <Option value=\"no\">No</Option>\n <Option value=\"yes\">Yes</Option>\n </Select>\n </Form.Item>\n </Col> \n \n <Col span={12}>\n <Form.Item\n label=\"Previous Compatible Version\"\n name=\"type\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={props.applicationMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col> \n\n <Col span={24}>\n <Form.Item\n label=\"Description\"\n name=\"description\" \n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <TextArea rows={4} disabled={props.applicationMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col>\n\n\n <Col span={24}>\n <Form.Item\n label=\"Upload File\"\n name=\"fileUpload\" \n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <TextArea rows={4} disabled={props.applicationMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col>\n\n </Row> \n\n\n </Form>\n </TabPane> */}\n\n </Tabs> \n } \n </Drawer>\n );\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n applicationMaintOptions: state.applicationsReducers.applicationsState.applications.applicationMaintOptions,\n controllersList: state.applicationsReducers.applicationsState.applications.controllersList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ControllerMaint);","import React, { useContext, useState, useEffect, useRef } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Button, Space, Table, Input, Popconfirm, Form, Select, message, DatePicker, Card, Popover } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport \"./applications.css\";\nimport history from '../../../utils/history';\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { InfoOutlined, PlusOutlined, EditOutlined } from \"@ant-design/icons\";\nimport moment from 'moment';\nimport ApplicationMaint from \"./ApplicationMaint\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nconst { Search } = Input;\n\n\ninterface Props{\n applicationsSetSearch: Function,\n applicationSetPagination: Function,\n getApplications: Function,\n openDrawer: Function,\n getAllApplicationsList: Function,\n getAllControllersList: Function,\n setTab: Function,\n context: any,\n applications: any,\n permissions: any,\n applicationsModification: any\n}\n\nconst Applications: React.FC<Props> = (props) => {\n\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n const [selectedFilters, setSelectedFilters] = useState<any>({});\n\n const onTabChange = (key:string) => {\n props.setTab(key)\n }\n\n const { tableConfig, tableData } = props.applications.applicationsList;\n\n useEffect(() => {\n props.getAllApplicationsList()\n props.getAllControllersList(null, null, null, 1, 99999)\n props.applicationSetPagination(onPaginationChange(1));\n }, [])\n\n const renderApplicationsTable = (pagination: any, filters: any, sorter: any, extra: any, e:any) => {\n setSelectedFilters(filters)\n props.getApplications(null, null, null, pagination.current, props.applications.applicationsList.searchText, filters)\n }\n\n const onSearch = (searchText: string) => { \n props.applicationsSetSearch((searchText || \"\"));\n\n if((searchText || \"\")===\"\") {\n history.push(\"/admin/applications\");\n }\n \n setTimeout(function() {\n props.getApplications(null, null, null, 1, searchText, selectedFilters); \n }, 100); \n }\n\n const onSearchChange = (e: any) => {\n let value = e.target.value;\n props.applicationsSetSearch((value || \"\"));\n }\n\n const onPaginationChange = (page: number) => {\n props.getApplications(null, null, null, page, props.applications.applicationsList.searchText, selectedFilters);\n };\n\n const tableColumns = [\n {\n title: 'Application Name',\n dataIndex: 'name',\n },\n {\n title: 'Type',\n dataIndex: 'type',\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n <span >{record.type[0].toUpperCase() + record.type.slice(1)}</span>\n </span> \n )\n },\n {\n title: \"Version\",\n dataIndex: \"version\",\n },\n {\n title: \"Approval Required\",\n dataIndex: \"requiresApproval\",\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n <span >{record.requiresApproval[0].toUpperCase() + record.requiresApproval.slice(1)}</span>\n </span> \n )\n },\n {\n title: \"Compatible Controller\",\n dataIndex: \"controllerName\",\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n },\n // {\n // title: \"Installations Count\",\n // dataIndex: \"installationCount\",\n // },\n {\n title: \"Status\",\n dataIndex: \"status\",\n filterMultiple: true,\n filteredValue: selectedFilters.hasOwnProperty('status') ? selectedFilters.status : [],\n filters: props.applications.applicationsList.columnsFilters.status?.map((status: any) => {\n return { 'value': status, 'text': status }\n }),\n render: (text: any, record: any) => (\n <span className=\"no-word-wrap\">\n <span >{record.status[0].toUpperCase() + record.status.slice(1)}</span>\n </span> \n )\n },\n {\n title: \"Actions\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Application\">\n <Button\n type=\"default\" \n icon={<EditOutlined />}\n onClick={(e) => { props.openDrawer(record.name, drawerWidth, record); }}\n />\n </Tooltip>\n } \n </Space>\n )\n }\n ]\n\n\n return (\n\n <div className=\"layout-content\">\n <Row gutter={8}>\n \n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n {\n <span>Applications Management</span>\n }\n </div>\n </div>\n </Col>\n\n </Row>\n \n <div className=\"mt-15\">\n <Row justify=\"end\" gutter={24}>\n \n <Col xs={24} lg={24} className=\"content-header-controls\">\n <Space>\n <Search\n data-id=\"application-search-field\"\n key=\"search-field\"\n placeholder=\"Search By Name, Make, Model, Tags\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onSearchChange}\n className=\"search-field\"\n value={props.applications.applicationsList.searchText}\n />\n\n <Button data-id=\"applications-search-new-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => props.openDrawer(\"New Application\", drawerWidth, {})}>\n <span>Application</span>\n </Button>\n </Space>\n </Col>\n\n \n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n data-id=\"applications-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record) => record.make+'-'+record.model+'-'+record.partNumber}\n columns={tableColumns}\n dataSource={tableData}\n onChange={renderApplicationsTable}\n showSorterTooltip={false}\n />\n </Col> \n </Row>\n \n </div>\n\n <ApplicationMaint/>\n </div>\n\n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n applications: state.applicationsReducers.applicationsState.applications,\n applicationsModification: state.applicationsReducers.applicationsState.applications.applicationsModification,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Applications);\n","import React, { useContext, useState, useEffect, useRef } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Button, Space, Table, Input, Popconfirm, Form, Select, message, DatePicker, Card, Popover, Modal, Divider } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport { successResponse, errorResponse, resetFormErrors } from \"../../utils/apiHelpers/apiHelpers\";\nimport history from '../../utils/history';\nimport { connect } from \"react-redux\";\nimport * as actions from \"./Contracts/actions\";\nimport { InfoOutlined } from \"@ant-design/icons\";\nimport moment from 'moment';\nimport { appConfigs } from \"../../utils/configurations\";\nimport { checkObjectKeyValuesNotEmpty } from \"../../utils/commonHelpers\";\nimport { height } from \"@amcharts/amcharts4/.internal/core/utils/Utils\";\n\nconst { Search } = Input;\nconst { TextArea } = Input;\nconst { Option } = Select;\n\nconst { TabPane } = Tabs;\n\n\ninterface Props{\n getAllAssetsList: Function,\n context: any,\n permissions: any,\n}\n\nconst AIOT: React.FC<Props> = (props) => {\n\n useEffect(() => {\n // console.log(\"\");\n }, [])\n\n return (\n <div style={{height: \"100%\"}}>\n <Row style={{height: \"100%\"}} gutter={8}>\n <Col style={{height: \"100%\"}} xs={24} lg={24}>\n <iframe style={{height: \"100%\"}} height=\"100%\" width=\"100%\" src=\"https://cognition-demo.camgian.com/\" />\n </Col>\n </Row> \n </div>\n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(AIOT);\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getControllers(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n searchText?: string,\n filters?: any[any],\n controllerId?:string\n) {\n \n return async (dispatch: any) => {\n\n let filtersObj:any = [];\n filters && filters['status'] != null ? filtersObj = {'statusFilter': filters['status']} : filtersObj = {}\n\n Axios.get(\n appConfigs.server.URL + \"/ui/api/controllers\", {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n controllerId: (controllerId||\"\"),\n filters: (filters['status'] ? \"\" : encodeURIComponent(JSON.stringify(filtersObj)) )\n }\n }\n )\n .then(response => { \n //console.log(response.data.data.controllers);\n \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({ type: \"CONTROLLERS_GET_LIST_SUCCESS\", payload: {data: response.data.data.controllers, page: page} });\n }\n )\n .catch(function (error) {\n //console.log('error', error)\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function controllersSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CONTROLLER_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function controllerSetPagination(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CONTROLLERS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n}\n\nexport function openDrawer(title: string, width: number, record: any) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"OPEN_DRAWER\", payload: { title: title, width: width, record: record } });\n\t};\n}\n\nexport function closeDrawer() {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"CLOSE_DRAWER\" });\n\t};\n}\n\nexport function drawerTabChange(activeTab: string) {\n\treturn (dispatch: any) => {\n\t\tdispatch({ type: \"DRAWER_TAB_CHANGE\", activeTab: activeTab });\n\t};\n}\n\n\n\nexport function getAllControllersList() {\n\treturn (dispatch: any) => {\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/controllers\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n\t\t\tparams: {\n\t\t\t\tpage: 1,\n\t\t\t\tpageSize: 9999,\n\t\t\t},\n\t\t}).then((response) => {\n let controllers = response.data.data.controllers;\n\t\t\tdispatch({ type: \"SET_CONTROLLERS_LIST\", payload: { assetsList: controllers } });\n\t\t}).catch(function (error) {\n dispatch({ type: \"SET_LOADING_CONTROLLERS\", payload: { state: false } });\n errorResponse(null, error);\n });\n\t};\n}\n\n\n\nexport function modifyController(\n selectedControllersToModify: any,\n callbackFnSuccess?: any\n) {\n return (dispatch: any) => {\n dispatch({ type: \"ADD_CONTROLLER\", payload: { state: true } });\n\t\tAxios.get(appConfigs.server.URL + \"/ui/api/modify_controllers\", {\n\t\t\tresponseType: \"json\",\n\t\t\theaders: {},\n params: {\n controllers: encodeURIComponent(JSON.stringify(selectedControllersToModify))\n\t\t\t},\n\t\t}).then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data);\n }\n\t\t\tdispatch({ type: \"ADD_CONTROLLER_SUCCESSFULLY\" });\n\t\t}).catch(function (error) {\n dispatch({ type: \"ADD_CONTROLLER\", payload: { state: false } });\n //console.log('error', error)\n errorResponse(null, error);\n });\n\t};\n}","import { Button, Card, Col, Divider, Drawer, Form, Input, Row, Select, Space, Tabs } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport moment from \"moment\";\nimport React, { useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"./actions\";\n\nconst { TabPane } = Tabs;\nconst { Option } = Select;\nconst { TextArea } = Input;\n\ninterface Prop {\n context: any,\n controllerMaintOptions: any,\n closeDrawer: Function,\n drawerTabChange: Function,\n}\n\nconst ControllerMaint: React.FC<Prop> = (props) => {\n\n const formRef = React.createRef<FormInstance>();\n \n const onDrawerClose = () => {\n props.closeDrawer();\n };\n\n const onTabChange = (key: string) => {\n props.drawerTabChange(key);\n }\n\n useEffect(() => {\n\n //console.log(formRef.current)\n //console.log(props.controllerMaintOptions.record)\n if (formRef.current != null) {\n formRef.current?.resetFields(); \n formRef.current?.setFieldsValue({\n mode: props.controllerMaintOptions.record.id ? \"update\" : \"add\", \n controllerId: props.controllerMaintOptions.record.id,\n name: props.controllerMaintOptions.record.name,\n make: props.controllerMaintOptions.record.make,\n model: props.controllerMaintOptions.record.model,\n });\n }\n \n }, [props.controllerMaintOptions])\n\n\n const onFinish = (values: any) => {\n\n formRef.current!.setFieldsValue({\n mode: props.controllerMaintOptions.controllerId ? \"update\" : \"add\", \n });\n\n //console.log(formRef.current?.getFieldsValue())\n }\n \n return (\n <Drawer\n title={props.controllerMaintOptions.title}\n width={props.controllerMaintOptions.width}\n onClose={onDrawerClose}\n visible={props.controllerMaintOptions.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button type=\"default\" onClick={onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n\n <Button data-id=\"controllers-maint-submit-button\" type=\"primary\" form=\"controllerMaintOptionsInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n \n </Space>\n }\n >\n {\n <Tabs activeKey={props.controllerMaintOptions.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}> \n <TabPane tab={props.controllerMaintOptions.tabs[0].title} key=\"1\" disabled={props.controllerMaintOptions.tabs[0].disabled}>\n <Form\n id=\"controllerMaintOptionsInfoForm\"\n ref={formRef}\n layout=\"vertical\"\n onFinish={onFinish}\n > \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item name=\"controllerId\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item name=\"mode\" style={{ display: 'none' }} >\n <Input type=\"hidden\" />\n </Form.Item>\n </Col> \n </Row> \n \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Device Name\"\n name=\"name\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input maxLength={255} disabled={props.controllerMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col> \n </Row> \n \n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n label=\"Make\"\n name=\"make\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={props.controllerMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col> \n \n\n <Col span={12}>\n <Form.Item\n label=\"Model\"\n name=\"model\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Input maxLength={255} disabled={props.controllerMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col>\n\n </Row> \n\n\n <Row gutter={8}>\n \n <Col span={24}>\n <Form.Item\n label=\"Description\"\n name=\"description\" \n rules={[{ required: false, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <TextArea rows={4} disabled={props.controllerMaintOptions.record.status == 'inactive'} />\n </Form.Item>\n </Col> \n \n </Row>\n\n </Form>\n </TabPane> \n </Tabs> \n } \n </Drawer>\n );\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n controllerMaintOptions: state.controllersReducers.controllersState.controllers.controllerMaintOptions\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ControllerMaint);","import React, { useContext, useState, useEffect, useRef } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Button, Space, Table, Input, Popconfirm, Form, Select, message, DatePicker, Card, Popover } from \"antd\";\nimport { FormInstance } from 'antd/lib/form';\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport \"./controllers.css\";\nimport history from '../../../utils/history';\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { InfoOutlined, PlusOutlined } from \"@ant-design/icons\";\nimport moment from 'moment';\nimport ControllerMaint from \"./DeviceMaint\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nconst { Search } = Input;\n\n\ninterface Props{\n controllersSetSearch: Function,\n controllerSetPagination: Function,\n getControllers: Function,\n openDrawer: Function,\n getAllControllersList: Function,\n setTab: Function,\n context: any,\n controllers: any,\n permissions: any,\n controllersModification: any\n}\n\nconst Controllers: React.FC<Props> = (props) => {\n\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n const [selectedFilters, setSelectedFilters] = useState<any>({});\n\n const onTabChange = (key:string) => {\n props.setTab(key)\n }\n\n const { tableConfig, tableData } = props.controllers.controllersList;\n\n useEffect(() => {\n props.getAllControllersList()\n props.controllerSetPagination(onPaginationChange(1));\n }, [])\n\n const renderControllersTable = (pagination: any, filters: any, sorter: any, extra: any, e:any) => {\n setSelectedFilters(filters)\n props.getControllers(null, null, null, pagination.current, props.controllers.controllersList.searchText, filters)\n }\n\n const onSearch = (searchText: string) => { \n props.controllersSetSearch((searchText || \"\"));\n\n if((searchText || \"\")===\"\") {\n history.push(\"/admin/controllers\");\n }\n \n setTimeout(function() {\n props.getControllers(null, null, null, 1, searchText, selectedFilters); \n }, 100); \n }\n\n const onSearchChange = (e: any) => {\n let value = e.target.value;\n props.controllersSetSearch((value || \"\"));\n }\n\n const onPaginationChange = (page: number) => {\n props.getControllers(null, null, null, page, props.controllers.controllersList.searchText, selectedFilters);\n };\n\n const tableColumns = [\n {\n title: 'Device Name',\n dataIndex: 'name',\n },\n {\n title: 'Make',\n dataIndex: 'make',\n },\n {\n title: \"Model\",\n dataIndex: \"model\",\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n },\n {\n title: \"Technical Specs\",\n dataIndex: \"technicalSpecs\",\n },\n // {\n // title: \"Apps Count\",\n // dataIndex: \"appsCount\",\n // },\n // {\n // title: \"Assets Count\",\n // dataIndex: \"assetsCount\",\n // },\n // {\n // title: \"Tags\",\n // dataIndex: \"tags\",\n // },\n {\n title: \"Status\",\n dataIndex: \"status\",\n filterMultiple: true,\n filteredValue: selectedFilters.hasOwnProperty('status') ? selectedFilters.status : [],\n filters: props.controllers.controllersList.columnsFilters.status?.map((status: any) => {\n return { 'value': status, 'text': status }\n }),\n },\n {\n title: \"Actions\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Controller\">\n <Button\n type=\"default\" \n icon={<InfoOutlined />}\n onClick={(e) => { props.openDrawer(record.name, drawerWidth, record); }}\n />\n </Tooltip>\n } \n </Space>\n )\n }\n ]\n\n\n return (\n\n <div className=\"layout-content\">\n <Row gutter={8}>\n \n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n {\n <span>Add Device</span>\n }\n </div>\n </div>\n </Col>\n\n </Row>\n \n <div className=\"mt-15\">\n <Row justify=\"end\" gutter={24}>\n \n <Col xs={24} lg={24} className=\"content-header-controls\">\n <Space>\n <Search\n data-id=\"controller-search-field\"\n key=\"search-field\"\n placeholder=\"Search By Name, Make, Model, Tags\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onSearchChange}\n className=\"search-field\"\n value={props.controllers.controllersList.searchText}\n />\n\n <Button data-id=\"assets-search-new-button\" type=\"primary\" icon={<PlusOutlined />} onClick={(e) => props.openDrawer(\"New Device\", drawerWidth, {})}>\n <span>Device</span>\n </Button>\n </Space>\n </Col>\n\n \n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n data-id=\"controllers-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record) => record.make+'-'+record.model+'-'+record.partNumber}\n columns={tableColumns}\n dataSource={tableData}\n onChange={renderControllersTable}\n showSorterTooltip={false}\n />\n </Col> \n </Row>\n \n </div>\n\n <ControllerMaint/>\n </div>\n\n );\n\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n controllers: state.controllersReducers.controllersState.controllers,\n controllersModification: state.controllersReducers.controllersState.controllers.controllersModification,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(Controllers);\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\ntype FileType = 'zip' | 'json' | 'app' | 'pesp' | 'png' | 'txt' | 'pdf' | 'jpg' | 'mp3' | 'doc' | 'docx' | 'xls' | 'xlsx' | 'ppt' | 'pptx' | 'csv' | 'html' | 'css' | 'js' | 'ts' | 'java' | 'cpp' | 'c' | 'py' | 'php' | 'sql' | 'xml' | 'svg' | 'gif' | 'bmp' | 'avi' | 'mp4' | 'mov' | 'wmv' | 'wav' | 'ogg' | 'flac' | 'aac' | 'wma' | 'ogg' | 'ogg' | 'wav' | 'flac' | 'aac' | 'wma' | 'ogg' | 'midi' | 'mpg' | 'mpeg' | 'mkv' | 'rar' | '7z' | 'tar' | 'gz' | 'bz2' | 'exe' | 'bat' | 'msi' | 'dll' | 'jar' | 'apk' | 'ipa' | 'deb' | 'rpm' | 'woff' | 'woff2' | 'ttf' | 'otf' | 'eps' | 'ai' | 'psd' | 'indd' | 'cdr' | 'fla' | 'swf' | 'unity3d' | 'blend' | 'max' | '3ds' | 'obj' | 'stl' | 'fbx' | 'dae' | 'dwg' | 'dxf' | 'skp' | 'sldprt' | 'sldasm' | 'step' | 'iges' | 'prt' | 'asm' | 'iso' | 'img' | 'bin' | 'cue' | 'mdf' | 'm3u' | 'pls' | 'aspx' | 'jsp' | 'php' | 'cgi' | 'dll' | 'class' | 'sh' | 'bat' | 'pl' | 'jsx' | 'tsx' | 'vue' | 'php' | 'asp' | 'jsp' | 'aspx' | 'erb' | 'jsp' | 'cfm' | 'cgi' | 'pl' | 'lua' | 'rb' | 'cs' | 'vb' | 'f#' | 'swift' | 'kotlin' | 'dart' | 'scala' | 'groovy' | 'r' | 'go' | 'rust' | 'elixir' | 'haskell' | 'typescript' | 'coffeescript' | 'perl' | 'powershell' | 'batch' | 'bash' | 'zsh' | 'makefile' | 'cmake' | 'gradle' | 'dockerfile' | 'yaml' | 'ini' | 'cfg' | 'jsonc' | 'yml' | 'toml' | 'conf' | 'properties' | 'jsx' | 'tsx' | 'vue' | 'md' | 'markdown' | 'rst' | 'adoc' | 'tex' | 'rtf' | 'wps' | 'odt' | 'ott' | 'docx' | 'dotx' | 'rtf' | 'odp' | 'otp' | 'pptx' | 'potx' | 'pps' | 'ppsx' | 'key' | 'sketch' | 'xd' | 'ps' | 'eps' | 'pdf' | 'xps' | 'odp' | 'otp' | 'sxd' | 'std' | 'uof' | 'html' | 'mht' | 'mhtml' | 'htm' | 'xml' | 'dtd' | 'xsd' | 'xsl' | 'svg' | 'xhtml' | 'plist' | 'rtf' | 'txt' | 'csv' | 'log' | 'md' | 'xml' | 'json' | 'yaml' | 'yml' | 'tsv' | 'wks' | '123' | 'wk1' | 'wk3' | 'wk4' | 'xlk' | 'xls' | 'xlm' | 'xlt' | 'xlw' | 'xla' | 'xlsx' | 'xlsm' | 'xltm' | 'xltx' | 'ods' | 'ots' | 'qbw' | 'qbb' | 'qbm' | 'qbi' | 'qbr' | 'wlmp' | 'camproj' | 'mxf' | 'asf' | 'vob' | 'mts' | 'm2ts' | 'mod' | 'tod' | 'dv' | 'mpg' | 'mpeg' | 'avi' | 'wmv' | 'mp4' | 'mov' | 'm4v' | 'mkv' | 'flv' | 'f4v' | 'swf' | '3gp' | 'webm' | 'gif' | 'mp3' | 'wma' | 'wav' | 'flac' | 'aac' | 'ogg' | 'amr' | 'm4a' | 'ape' | 'aiff' | 'au' | 'mid' | 'midi' | 'rm' | 'ogg' | 'ra' | 'ram' | 'mp2' | 'mka' | 'ogg' | 'ape' | 'mpc' | 'cda' | 'snd' | 'aif' | 'aac' | 'flac' | 'ac3' | 'dts' | 'aob' | 'mpg' | 'mpeg' | 'ts' | 'mkv' | 'mp4' | 'm4v' | 'flv' | 'f4v' | 'mov' | 'avi' | 'wmv' | 'rmvb' | 'rm' | '3gp' | 'dv' | 'vob' | 'mts' | 'm2ts' | 'swf' | 'gif' | 'jpg' | 'jpeg' | 'png' | 'bmp' | 'tiff' | 'psd' | 'thm' | 'tif' | 'webp' | 'svg' | 'ai' | 'eps' | 'cdr' | 'ico' | 'pcx' | 'raw' | 'wmf' | 'emf' | 'dwg' | 'dxf' | 'dgn' | 'skp' | '3dm' | 'stp' | 'iges' | 'step' | 'brep' | 'stl' | 'obj' | 'ply' | 'wrl' | '3ds' ;\n\nexport function getSoftwares(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number=1,\n searchText?: string,\n filters?: any[any],\n systemSwId?: string ) \n{\n return async (dispatch: any) => \n {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let filtersObj: any = [];\n filters && filters[\"status\"] != null\n ? (filtersObj = { statusFilter: filters[\"status\"] })\n : (filtersObj = {});\n\n Axios.get(appConfigs.server.URL + \"/ui/api/software-listing\",\n {\n params: {\n orgId: null,\n systemSwId: systemSwId,\n searchText: searchText,\n scope: \"all\",\n page: page,\n pageSize: appConfigs.tables.pageSize\n },\n }\n ).then((response) => \n {\n if (callbackFnSuccess != null) \n {\n callbackFnSuccess(response.data.data.softwareList);\n }\n dispatch({\n type: \"SOFTWARES_GET_SUCCESS\",\n payload: { data: response.data.data.softwareList, page: page },\n });\n }).catch(function (error) \n {\n if (callbackFnFailure != null) \n {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function softwaresSetSearch(searchText: string) \n{\n return (dispatch: any) => \n {\n dispatch({ type: \"SOFTWARE_SET_SEARCH\", searchText: searchText });\n };\n}\n\nexport function softwareSetPagination(onPaginationChange: any) \n{\n return (dispatch: any) => \n {\n dispatch({type: \"SOFTWARES_SET_PAGINATION\", onPaginationChange: onPaginationChange});\n };\n}\n\nexport function setTab(tabNumber: string) \n{\n return (dispatch: any) => \n {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n };\n}\n\nexport function openDrawer(title: string, width: number, record: any) \n{\n return (dispatch: any) => \n {\n dispatch({type: \"OPEN_DRAWER\",payload: { title: title, width: width, record: record }});\n };\n}\n\nexport function closeDrawer() \n{\n return (dispatch: any) => \n {\n dispatch({ type: \"CLOSE_DRAWER\" });\n };\n}\n\nexport function drawerTabChange(activeTab: string) \n{\n return (dispatch: any) => \n {\n dispatch({ type: \"DRAWER_TAB_CHANGE\", activeTab: activeTab });\n };\n}\n\nexport function getAllSoftwaresList() \n{\n return (dispatch: any) => \n {\n Axios.get(appConfigs.server.URL + \"/ui/api/software-listing\", {\n responseType: \"json\",\n headers: {},\n params: {\n page: 1,\n pageSize: appConfigs.tables.pageSize,\n },\n }).then((response) => \n {\n let softwares = response.data.data.softwareListing;\n dispatch({type: \"SET_SOFTWARES_LIST\", payload: { softwaresList: softwares }});\n }).catch(function (error) \n {\n dispatch({type: \"SET_LOADING_SOFTWARES\", payload: { state: false },});\n errorResponse(null, error);\n });\n };\n}\n\nexport function getAllControllersList(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n pageSize?: number\n) \n{\n return async (dispatch: any) => \n {\n Axios.get(appConfigs.server.URL + \"/ui/api/controllers\", \n {\n responseType: \"json\",\n headers: {},\n params: {\n page: page,\n pageSize: pageSize,\n },\n }).then((response) => \n {\n if (callbackFnSuccess != null)\n {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({type: \"GET_CONTROLLERS_LIST\", controllersList: response.data.data.controllers,});\n }).catch(function (error)\n {\n if (callbackFnFailure != null) \n {\n callbackFnFailure(error);\n }\n errorResponse(me, error);\n });\n };\n}\nexport function softwareCsuOrgGet(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n orgId?: string,\n searchText?: string)\n{\n return async (dispatch: any) => \n { \n Axios.get(appConfigs.server.URL + \"/ui/api/csu-orgs-lov\" + ((orgId || \"\") !== \"\" ? \"/\" + orgId : \"\"),\n {\n responseType: \"json\", \n headers: {},\n params: {\n mode: (orgId || \"\") === \"\" ? \"all\" : \"single\",\n scope: \"all\",\n includeTree: false,\n orgId: orgId,\n searchText: searchText,\n page: 1,\n pageSize: 9999\n }\n }).then(response => \n {\n if (callbackFnSuccess != null) \n {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({ type: \"SOFTWARE_MAINT_ORGS_SUCCESS\", payload: {data: response.data.data.orgs} });\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n };\n} \n\nexport function SoftwareMaint(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n softwareInfo?: any\n) {\n\n return async (dispatch: any) => {\n //console.log(\"before calling post upload-csu-software softwareInfo\", softwareInfo);\n var formData = new FormData();\n formData.append(\"orgId\", softwareInfo.orgId);\n if (softwareInfo.mode !== \"Add\") {\n formData.append(\"systemSoftwareIdStr\",softwareInfo.systemSoftwareId);\n formData.append(\"packageName\",softwareInfo.packageName);\n } else {\n formData.append(\"systemSoftwareIdStr\", \"\");\n formData.append(\"packageName\",\"\");\n }\n formData.append(\"name\", softwareInfo.name);\n formData.append(\"version\", softwareInfo.version);\n formData.append(\"packageName\", softwareInfo.packageName);\n formData.append(\"mode\", softwareInfo.mode);\n formData.append(\"availableToSubOrgs\", softwareInfo.availableToSubOrgs);\n formData.append(\"description\", softwareInfo.description);\n formData.append(\"devicemodel\", softwareInfo.devicemodel);\n formData.append(\"softwaretype\", softwareInfo.softwaretype);\n // formData.append(\"formatRevision\", softwareInfo.formatRevision);\n // formData.append(\"numDevice\", softwareInfo.numDeivce);\n // formData.append(\"numCsu\", softwareInfo.numCsu);\n // formData.append(\"createdOn\", softwareInfo.createdOn);\n // formData.append(\"csu\", JSON.stringify(softwareInfo.csu));\n if (softwareInfo.mode === \"Add\") {\n formData.append(\"file\", softwareInfo.fileUpload[0].originFileObj);\n }\n //console.log(\"post upload-csu-software formData\", Object.fromEntries(formData));\n\n Axios(\n // \"http://localhost:8080/ui/api/upload-csu-software\", \n appConfigs.server.URL + \"/ui/api/upload-software-package\",\n {\n method: \"POST\",\n data: formData,\n headers: { \"Content-Type\": \"multipart/form-data;\" },\n // params for org requires an UI to choose a suborg from the drop down list and only upload this one to the suborg.\n // currently, we shall assume this software is uploaded for the root customer org and shall be available to all its suborg\n // TODO for the DB function to view ancestor's org\n // params: {\n // orgId: orgId // \"db7eb2e0-5849-11e7-893e-f94b4bc7246b\",\n\n // },\n }\n ).then((response) => {\n //console.log(\"upload-csu-software response.data\", response.data);\n if (callbackFnSuccess != null) {\n callbackFnSuccess(me, response.data.status);\n }\n\n dispatch({\n type: \"SOFTWARE_MAINT_SUCCESS\",\n payload: response.data.data.softwareUploads,\n });\n })\n .catch(function (error) {\n //console.log(\"error\", error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n errorResponse(me, error);\n });\n };\n\n}\n\n\nexport function SoftwarePreview(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n softwareInfo?: any\n) {\n return async (dispatch: any) => {\n //console.log(\"softwareInfo\", softwareInfo);\n // console.log(\"softwareInfo.fileUpload[0]\", softwareInfo?.fileUpload[0]?.originFileObj);\n var formData = new FormData();\n\n formData.append(\"mode\", \"add\");\n formData.append(\"file\", softwareInfo[0].originFileObj);\n // formData.append(\"file\", softwareInfo.fileUpload[0].originFileObj);\n //console.log(\"softwarePreview formData\", softwareInfo[0].originFileObj)\n //console.log(\"url\" ,appConfigs.server.URL +\"/ui/api/software-preview\")\n Axios(\n appConfigs.server.URL +\"/ui/api/software-preview\",\n {\n method: \"POST\",\n data: formData,\n headers: { \"Content-Type\": \"multipart/form-data;\" }\n }\n ).then((response) => {\n //console.log(\"Software-preview API response.data\", response.data);\n if (callbackFnSuccess != null) {\n //console.log(\"calling callbackFnSuccess\")\n callbackFnSuccess(response.data?.data?.profile, softwareInfo);\n }\n //console.log(\"SOFTWARE_PREVIEW_SUCCESS response.data\", response.data)\n\n })\n .catch(function (error) {\n // console.log(\"Software preview error\", error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n dispatch({ type: \"SOFTWARE_PREVUEW_FAILED\", payload: \"Failed\" });\n errorResponse(me, error);\n });\n\n };\n\n}\n\nexport function getControllers(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any, \n orgId: string) \n{\n return async (dispatch: any) => \n {\n Axios.get(appConfigs.server.URL + \"/ui/api/get_controllers\", \n {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId,\n }\n }).then(response => \n { \n let data = response.data.data.getControllers == null || (response.data.data.getControllers.length || 0) === 0 ? [] : response.data.data.getControllers;\n if (callbackFnSuccess != null)\n {\n callbackFnSuccess(data);\n }\n dispatch({ type: \"SOFTWARE_DEVICE_MODEL_SUCCESS\", payload: {data: data} });\n }\n ).catch(function (error) \n {\n if (callbackFnFailure != null) \n {\n callbackFnFailure(me, error)\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function downloadPackage(\n me: any,\n callbackSuccessFn: any,\n callbackErrorFn: any,\n url: string,\n fileType:FileType,\n fileName: string) \n{\n return async (dispatch: any) => \n {\n Axios({\n url: url,\n method: \"GET\",\n responseType: \"blob\", \n }).then(response => \n {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", fileName);\n document.body.appendChild(link);\n link.click(); \n if (callbackSuccessFn != null)\n {\n callbackSuccessFn(response.data.data.context);\n }\n dispatch({ type: \"DOWNLOAD_FILE_SUCCESS\", payload: {data: link} });\n }).catch(function (error) \n { \n errorResponse(me, error, false);\n if (callbackErrorFn != null) \n {\n callbackErrorFn(error);\n }\n })\n }\n}","/* eslint-disable no-self-compare */\nimport React from \"react\";\nimport {Button,Col,Drawer,Form,Input,Row,Select,Space,Tabs,Upload,message,Tooltip, Switch} from \"antd\";\nimport { FormInstance } from \"antd/lib/form\";\nimport { connect } from \"react-redux\";\nimport { formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { localizeUtcDate} from \"../../../utils/commonHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"./actions\";\nimport { InboxOutlined, InfoCircleOutlined } from \"@ant-design/icons\";\nimport { UploadProps } from \"antd/lib/upload\";\nconst { TabPane } = Tabs;\nconst { Option } = Select;\nconst { TextArea } = Input;\nconst { Dragger } = Upload;\n\nconst dragProps: UploadProps = {\n name: \"file\",\n multiple: false,\n beforeUpload(fileInfo: any) {\n return false;\n },\n};\n\ninterface State {\n formError?: boolean;\n formErrorMessage?: string[];\n formSuccess?: boolean;\n formSuccessMessage?: string;\n formCommit?: boolean;\n mastertag?: string;\n enableSoftwarePreview: boolean;\n summary: any; \n zipFiles: any;\n csu: any; \n enableSubmit: boolean;\n profile: any; \n orgs: any;\n orgId: any;\n availableToSubOrgs: boolean;\n mode: string;\n name: string,\n version: string,\n packageName: string,\n description: string,\n devicemodel:string;\n softwaretype:any;\n}\n\ninterface Prop {\n context: any;\n controllersList: any;\n softwareMaintOptions: any;\n enableSoftwarePreview: boolean;\n closeDrawer: Function;\n drawerTabChange: Function;\n SoftwareMaint: Function;\n getSoftwares: Function;\n SoftwarePreview: Function; \n softwareCsuOrgGet: Function;\n softwares: any;\n getControllers:Function;\n}\n\nclass SoftwareMaint extends React.Component<Prop, State> { \n formRef = React.createRef<FormInstance>();\n formRefNewVersion = React.createRef<FormInstance>();\n\n state: State = {\n name: \"\",\n version: \"\",\n packageName: \"\",\n enableSoftwarePreview: false, \n enableSubmit: false,\n summary: {}, \n zipFiles: null,\n csu: {},\n profile: {}, \n orgs: [], \n orgId: null,\n mode: \"\",\n availableToSubOrgs: false, \n description: \"\",\n devicemodel:\"\",\n softwaretype:\"\"\n };\n\n onDrawerClose = () => {\n this.props.closeDrawer();\n this.setState({enableSoftwarePreview: false,\n enableSubmit: false, \n zipFiles: null,\n summary: {},\n csu: [],\n profile: {}, \n orgId: null,\n availableToSubOrgs: false,\n mode: \"\",\n name: \"\",\n version: \"\", \n packageName:\"\",\n description: \"\"\n });\n };\n\n componentDidMount() { \n formInit(this); \n this.softwareMaintFormRef(this.formRef); \n if (this.props.softwareMaintOptions?.visible ) {\n this.componentUpdate(this.props.softwareMaintOptions?.record);\n }\n }\n\n componentDidUpdate(prevProps: Prop, prevState: any) {\n if (this.props.softwareMaintOptions?.instance !== prevProps.softwareMaintOptions?.instance){\n this.componentUpdate(this.props.softwareMaintOptions?.record);\n }\n if (this.props.softwareMaintOptions?.systemSoftwareId && !prevProps.softwareMaintOptions?.systemSoftwareId){\n this.componentUpdate(this.props.softwareMaintOptions?.record);\n }\n\n }\n\n componentUpdate(record: any) {\n formInit(this);\n if ((this.state.orgs || []).length === 0) {\n this.props.softwareCsuOrgGet(this, this.softwareCsuOrgGetSuccess, null, null/*record.orgId*/);\n }\n if (this.formRef.current != null) {\n if (record?.systemSoftwareId) {\n this.formRef.current!.resetFields(); \n this.formRef.current!.setFieldsValue({\n systemSoftwareId : record?.systemSoftwareId,\n enableSoftwarePreview: true,\n name: record?.name,\n version: record?.version,\n orgId: record?.orgId, // for update mode, this is read-only\n availableToSubOrgs: record?.availableToSubOrgs,\n description: record?.description,\n status: record.status,\n packageName: record?.packageName,\n devicemodel:record.devicemodel,\n softwaretype:record.softwaretype,\n orgs: record.orgs,\n csu: JSON.parse(record.csu),\n mode: \"Update\",\n isFromAncestor: record.isFromAncestor,\n });\n this.setState({\n enableSoftwarePreview: true,\n orgId: record?.orgId,\n availableToSubOrgs: record?.availableToSubOrgs,\n summary: {\n packageName: record?.packagename,\n },\n orgs: record?.orgs,\n csu: JSON.parse(record.csu),\n mode: \"Update\"\n });\n }\n\n }\n\n };\n\n softwareMaintFormRef=(form:any)=>{\n this.formRef=form;\n}\n\n\n utcToLocal = ((timeUtc:string) => timeUtc === null? null: localizeUtcDate(timeUtc, {\n year: 'numeric', \n month: '2-digit', \n day: 'numeric', \n hour: \"2-digit\", \n minute: \"2-digit\", \n second: \"2-digit\" , \n hour12: true\n }));\n\n softwareCsuOrgGetSuccess = (\n data: any) => { \n if ((data.length || 0) === 0) {\n } else {\n this.setState({\n orgs: data\n })\n }\n };\n\n onOrgIdChange = (value: string) => {\n this.props.getControllers(this, null, null, value); \n let shallBeAvailableToSubOrgs = (value==='c6adcb40-be92-11e6-9ed6-a5bc9cb5279b' ? false: true);\n this.formRef.current!.setFieldsValue({\n orgId: value,\n availableToSubOrgs: shallBeAvailableToSubOrgs\n });\n this.setState({\n orgId: value,\n availableToSubOrgs: shallBeAvailableToSubOrgs\n })\n }\n OnDeviceModelChange = (value: string) => {\n this.formRef.current!.setFieldsValue({\n devicemodel: value,\n });\n this.setState({\n devicemodel: value,\n })\n\n }\n OnSoftwareTypeChange= (value: string) => {\n this.formRef.current!.setFieldsValue({\n softwaretype: value,\n });\n this.setState({\n softwaretype: value,\n })\n\n }\n\n onFinish = (values: any) => {\n this.props.SoftwareMaint(this, this.onFinishSuccess, this.onFinishFailure, values);\n this.setState({zipFiles: values, \n enableSoftwarePreview: false,\n enableSubmit: false, \n summary: {},\n csu: [], \n profile: {}\n });\n };\n\n onFinishSuccess = (record: any) => {\n message.success(\"Software Added Successfully\");\n this.props.getSoftwares(null, null, null, 1, \"\", {});\n this.props.closeDrawer();\n };\n\n onFinishFailure = (error: any) => {\n if (error?.response?.data?.errors && error?.response?.data?.errors.length >0) {\n message.error(error?.response?.data?.errors[0]?.message);\n } else {\n message.error(\"Failed to update software with a validation error\");\n }\n };\n\n\n getUploadFile = (e: any) => {\n // if (Array.isArray(e)) {\n // return e;\n // }\n if (e) {\n this.setState({zipFiles: e.fileList, \n enableSoftwarePreview: true}); \n this.props.SoftwarePreview(this, this.onSuccessGetSoftwarePreview, this.onFailureGetSoftwarePreviewError, e.fileList);\n } else {\n return this.state.zipFiles;\n }\n\n return e && e.fileList;\n };\n\n\n getSoftwarePreview= (file: any) => { \n this.props.SoftwarePreview(this, this.onSuccessGetSoftwarePreview, this.onFailureGetSoftwarePreviewError, file);\n }\n\n onSuccessGetSoftwarePreview = (profile: any, zipFiles: any) => { \n let summary = {\n packageName: profile.packageName,\n version: profile.version,\n formatRevision: profile.formatRevision,\n createdOn: this.utcToLocal(profile.createdOn),\n numDevice: profile.numDevice,\n numCsu: profile.numCsu\n };\n let sortedCsuList = JSON.parse(profile.csu); \n this.setState({ \n enableSoftwarePreview: true,\n enableSubmit: true,\n summary: summary,\n csu: sortedCsuList,\n zipFiles: this.state.zipFiles,\n mode: \"Add\"\n }) \n\n this.formRef.current!.setFieldsValue({\n enableSoftwarePreview: true,\n enableSubmit: true, \n packageName: profile.packageName,\n formatReview: profile.formatRevision,\n numDevice: profile.numDevice,\n numCsu: profile.numCsu, \n createdOn: this.utcToLocal(profile.createdOn),\n csu: sortedCsuList,\n zipFiles: zipFiles, \n mode: \"Add\"\n });\n\n }\n\n\n onFailureGetSoftwarePreviewError = (error: any) => { \n errorResponse(this, error);\n }\n\n\n render() { \n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let orgsLen = (this.props.softwareMaintOptions?.orgs || []).length;\n return (\n <Drawer\n title={this.props.softwareMaintOptions.title}\n width={this.props.softwareMaintOptions.width}\n onClose={() => {this.props.closeDrawer()}}\n visible={this.props.softwareMaintOptions.visible}\n destroyOnClose={true}\n\n footer={\n <Space size=\"large\" style={{ float: \"right\" }}>\n {(this.state.enableSoftwarePreview || \n (this.props.softwareMaintOptions?.record?.systemSoftwareId || \"\") !== \"\" ) &&\n <Tooltip title=\"Enabled after previewing the uploaded file and preview\">\n <Button\n data-id=\"softwares-maint-submit-button\"\n type=\"primary\"\n form=\"softwareMaintOptionsInfoForm\"\n key=\"submit\"\n htmlType=\"submit\"\n >\n {appConfigs.settings.form.submitButtonText}\n </Button>\n </Tooltip>\n }\n </Space>\n } \n >\n <Tabs\n activeKey={this.props.softwareMaintOptions.activeTab}\n size=\"large\"\n type=\"card\"\n onChange={(key: string)=>this.props.drawerTabChange(key)}\n >\n <TabPane\n tab={this.props.softwareMaintOptions.tabs[0].title}\n key=\"1\"\n disabled={this.props.softwareMaintOptions.tabs[0].disabled}\n >\n <Form\n id=\"softwareMaintOptionsInfoForm\"\n ref={this.formRef}\n layout=\"vertical\"\n onFinish={this.onFinish}\n > \n <Form.Item \n name=\"systemSoftwareId\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"mode\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"csu\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Form.Item \n name=\"isFromAncestor\"\n style={{ display: 'none' }}\n >\n <Input type=\"hidden\" />\n </Form.Item>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n label=\"Software Name\"\n name=\"name\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input maxLength={255} disabled={this.props.softwareMaintOptions?.record?.status === 'inactive' || \n this.props.softwareMaintOptions?.record?.isFromAncestor} />\n </Form.Item>\n </Col> \n <Col span={12}>\n <Form.Item\n label=\"Version\"\n name=\"version\" \n shouldUpdate={true} \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired }\n ]}\n >\n <Input maxLength={255} disabled={this.props.softwareMaintOptions?.record?.status === 'inactive' || \n this.props.softwareMaintOptions?.record?.isFromAncestor} />\n </Form.Item>\n </Col> \n </Row> \n <Row gutter={8}>\n <Col span={12}> \n <Form.Item \n label=\"Org Name\"\n name=\"orgId\" \n >\n <Select \n data-id=\"software-maint-org-id\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n onChange={this.onOrgIdChange}\n disabled={this.props.softwareMaintOptions?.record?.systemSoftwareId || \"\" !== \"\" || \n this.props.softwareMaintOptions?.record?.isFromAncestor} \n >\n {(this.props.softwareMaintOptions?.orgs || []).length !== 0 && \n this.props.softwareMaintOptions?.orgs?.map((record:any, index:number) => (\n <Option key={index} value={record.orgId}> \n {record.name}\n </Option>\n )) }\n </Select> \n </Form.Item> \n </Col> \n\n <Col span={12}>\n <Form.Item\n label=\"Allow sub-orgs to use\" \n labelCol={{ span: 10 }}\n > \n <Row>\n <Col span={3}>\n <Form.Item noStyle name=\"availableToSubOrgs\" valuePropName=\"checked\">\n <Switch disabled={ this.props.softwareMaintOptions?.record?.isFromAncestor}/>\n </Form.Item> \n </Col>\n <Col span={1}>\n <Tooltip title=\"This software package will be available to sub-orgs\">\n <InfoCircleOutlined style={{ fontSize: '120%', color: '#1890ff'}} />\n </Tooltip>\n </Col>\n </Row> \n </Form.Item> \n </Col>\n </Row> \n <Row gutter={8}>\n <Col span={12}> \n <Form.Item \n label=\"Device Model\"\n name=\"devicemodel\" \n >\n <Select \n data-id=\"software-maint-device model\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n onChange={this.OnDeviceModelChange}\n disabled={this.props.softwareMaintOptions?.record?.systemSoftwareId || \"\" !== \"\" || \n this.props.softwareMaintOptions?.devicemodel?.isFromAncestor} \n >\n {(this.props.softwareMaintOptions?.devicemodel || []).length !== 0 && \n this.props.softwareMaintOptions?.devicemodel?.map((record:any, index:number) => (\n <Option key={index} value={record.model}> \n {record.model}\n </Option>\n )) }\n </Select> \n </Form.Item> \n </Col> \n <Col span={12}>\n <Form.Item\n label=\"Software Type\"\n name=\"softwaretype\"\n >\n <Select\n data-id=\"software-maint-software-type\"\n showSearch\n showArrow={true}\n optionFilterProp=\"children\"\n className=\"select-before\" \n placeholder=\"Select...\"\n allowClear\n disabled={this.props.softwareMaintOptions?.record?.systemSoftwareId || \"\" !== \"\" || \n this.props.softwareMaintOptions?.softwaretype?.isFromAncestor} \n onChange={this.OnSoftwareTypeChange}>\n <Option value=\"System\">System</Option>\n <Option value=\"Application\">Application</Option>\n <Option value=\"Runtime\">Runtime</Option>\n <Option value=\"Platform\">Platform</Option>\n <Option value=\"Others\">Others</Option>\n </Select>\n </Form.Item>\n\n </Col>\n </Row> \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Description\"\n name=\"description\" \n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <TextArea rows={2} placeholder=\"A brief desccription the purpose of this package\"\n disabled={this.props.softwareMaintOptions?.record?.isFromAncestor}/>\n </Form.Item>\n </Col> \n </Row>\n {!this.props?.softwareMaintOptions?.record?.systemSoftwareId &&\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n label=\"Upload File\"\n name=\"fileUpload\"\n getValueFromEvent={this.getUploadFile}\n // rules={[\n // {\n // required: true,\n // message: appConfigs.errors.fieldErrors.valueRequired,\n // },\n // ]}\n >\n <Dragger {...dragProps} \n disabled={this.props.softwareMaintOptions?.record?.systemSoftwareId || \"\" !== \"\"}>\n\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">\n Click or drag a file to this area to upload\n </p>\n </Dragger>\n </Form.Item>\n </Col>\n </Row>}\n </Form>\n </TabPane>\n </Tabs> \n </Drawer>\n );\n };\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n softwareMaintOptions:\n state.softwaresReducers.softwaresState.softwares.softwareMaintOptions,\n controllersList:\n state.softwaresReducers.softwaresState.softwares.controllersList,\n enableSoftwarePreview: state.enableSoftwarePreview,\n softwares: state.softwaresReducers.softwaresState.softwares\n };\n};\n\nexport default connect(mapStateToProps, actions)(SoftwareMaint);","import React, { useState, useEffect } from \"react\";\nimport { Row, Col, Tooltip, Button, Space, Table, Input, Badge } from \"antd\";\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport \"./softwares.css\";\nimport history from \"../../../utils/history\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { PlusOutlined, DownloadOutlined } from \"@ant-design/icons\";\nimport SoftwareMaint from \"./SoftwareMaint\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport {getPermissions} from \"../../../utils/commonHelpers\";\nconst { Search } = Input;\n\ninterface Props { \n softwaresSetSearch: Function;\n softwareSetPagination: Function;\n getSoftwares: Function;\n openDrawer: Function;\n getAllSoftwaresList: Function;\n getAllControllersList: Function;\n setTab: Function;\n context: any;\n softwares: any;\n permissions: any;\n softwaresModification: any;\n downloadPackage:Function;\n }\nconst Softwares: React.FC<Props> = (props) => \n { \n \n const [page, setPage] = useState(1);\n const [selectedFilters, setSelectedFilters] = useState<any>({});\n\n useEffect(() => {\n props.softwareSetPagination(onPaginationChange);\n props.getSoftwares(null,null,null, 1, '',null);\n }\n , []);\n\n const drawerWidth: number = Math.min(\n window.innerWidth,\n appConfigs.settings.drawers.defaultWidth\n );\n\n const { tableConfig, tableData } = props.softwares.softwaresList;\n\n const onPaginationChange = (page: number) => {\n\n props.getSoftwares(null,null,null, page, '',null);\n };\n\n const handleDownloadClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => \n {\n const fileName = event.currentTarget.getAttribute('data-filename');\n const versionNumber = event.currentTarget.getAttribute('data-version');\n const orgid = event.currentTarget.getAttribute('data-orgid');\n const deviceModel = event.currentTarget.getAttribute('data-devicemodel');\n // eslint-disable-next-line no-template-curly-in-string\n const url = appConfigs.server.URL +`/ui/api/download-software-package?pathName=${fileName}&orgId=${orgid}&version=${versionNumber}&isCmnsota=false&devicemodel=${deviceModel}`;\n const fileType= fileName?.split('.').pop();\n props.downloadPackage(null, null, null, url, fileType , fileName);\n };\n\n const tableColumns = [\n {\n title: \"Software Name\",\n dataIndex: \"name\",\n render: (text: any, record: any) => (\n record.availableToSubOrgs ?\n <Tooltip title=\"Visible to suborg\"> \n <Badge dot offset={[5, 5]}> \n {record.name} \n </Badge> \n </Tooltip> : \n <Tooltip title=\"Not visible to suborg\"> \n {record.name} \n </Tooltip> \n ) \n },\n \n {\n title: \"Version\",\n dataIndex: \"version\",\n },\n {title: \"Organization Name\",\n dataIndex: \"orgName\",\n render: (text: any, record: any) => {\n let parents = record?.orgPathName?.includes(\"~\") ? record?.orgPathName.split('~') : [record?.orgPathName];\n if (parents.length > 1) {\n // eslint-disable-next-line array-callback-return\n parents = parents.filter((parent: any) => {\n if (!parent.toLowerCase().includes(\"parker\")) {\n return parent\n }\n })\n }\n return (\n parents.length > 2 ?\n <>\n <span className=\"no-word-wrap\">\n <Tooltip overlayInnerStyle={{ width: '350px' }} title={\n parents.map((parent: any, index: number) => {\n return parents.length - 1 === index ? parent : parent + \" \\\\ \" \n })\n }>\n <span>{record.orgName}</span>\n </Tooltip>\n </span> \n </>\n : <span>{record.orgName}</span>\n )\n }\n },\n {\n title: \"Device Model\",\n dataIndex: \"deviceModel\",\n },\n {\n title: \"Software Type\",\n dataIndex: \"softwareType\",\n },\n {\n title: \"System Package\",\n dataIndex: \"packageName\",\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n }, \n {\n title: \"Download\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"Download Software\">\n <Button\n type=\"default\" \n icon={<DownloadOutlined />}\n onClick={handleDownloadClick}\n data-filename={record.packageName}\n data-version={record.version}\n data-orgid={record.orgId}\n data-devicemodel={record.deviceModel}\n />\n </Tooltip>\n } \n </Space>\n )\n }\n \n ];\n\n const onSearch = (searchText: string) => { \n props.softwaresSetSearch((searchText || \"\"));\n\n if((searchText || \"\")===\"\") {\n history.push(\"/admin/softwares\");\n }\n \n setTimeout(function() {\n props.getSoftwares(null, null, null, 1, searchText, selectedFilters); \n }, 100); \n }\n\n const onSearchChange = (e: any) => {\n let value = e.target.value;\n props.softwaresSetSearch((value || \"\"));\n }\n \n const renderSoftwareTable = (pagination: any, filters: any, sorter: any) => {\n setSelectedFilters(filters);\n setPage(pagination.current);\n }\n\n return(\n <>\n <div className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n {<span>Softwares Management</span>}\n </div>\n </div>\n </Col>\n </Row>\n <Row justify=\"end\" gutter={24}>\n <Col xs={24} lg={24} className=\"content-header-controls\">\n <Space>\n <Search\n data-id=\"softwares-search-field\"\n key=\"search-field\"\n placeholder=\"Search By Name, version, Organization Name, Software Type, Device Model, System Package,\tStatus,\tDescription\"\n\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onSearchChange}\n className=\"search-field\"\n value={props.softwares.softwaresList.searchText}\n />\n\n <Button\n data-id=\"softwares-search-new-button\"\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={(e) =>\n props.openDrawer(\"New Software\", drawerWidth, {})\n }\n >\n <span>Software</span>\n </Button>\n </Space>\n </Col>\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n data-id=\"softwares-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record:any) => record.gatewayId}\n columns={tableColumns}\n dataSource={tableData}\n onChange={renderSoftwareTable}\n showSorterTooltip={false}\n />\n </Col>\n </Row>\n <SoftwareMaint />\n </div>\n </>\n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n softwares: state.softwaresReducers.softwaresState.softwares,\n softwaresModification:\n state.softwaresReducers.softwaresState.softwares.softwaresModification,\n };\n};\n\nexport default connect(mapStateToProps, actions)(Softwares);\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getControllerOtaManagement(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n searchText?: string,\n filters?: any[any],\n controllerId?:string) \n{ \n return async (dispatch: any) => \n {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let filtersObj:any = [];\n filters && filters['status'] != null ? filtersObj = {'statusFilter': filters['status']} : filtersObj = {}\n Axios.get(appConfigs.server.URL + \"/ui/api/ota_controllers\",\n {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }).then(response => \n { \n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({ type: \"CSUS_GET_SUCCESS\", payload: response.data.data.gateways_controllers });\n }).catch(function (error) \n {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n dispatch({ type: \"CSUS_GET_FAILED\", payload: {data: null, page: page} });\n errorResponse(me, error);\n });\n };\n}\nexport function controllerOtaManagementSetSearch(searchText: string ) \n{\n return (dispatch: any) => \n {\n dispatch({ type: \"CSU_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function updateControllerOtaManagementSelection(selectedController: string )\n{\n return (dispatch: any) => \n {\n dispatch({ type: \"UPDATE_CSU_SELECTION\", selectedController: selectedController });\n }\n} \n\nexport function ControllerOtaManagementSetPagination(onPaginationChange: any)\n{\n return (dispatch: any) => \n {\n dispatch({ type: \"CSU_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} \n\nexport function setTab(tabNumber: string )\n{\n return (dispatch: any) => \n {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n}\nexport function openDrawer(title: string, width: number, record: any) \n{\n\treturn (dispatch: any) => \n {\n\t\tdispatch({ type: \"OPEN_DRAWER\", payload: { title: title, width: width, record: record } });\n\t};\n}\n\nexport function openInstallationProgressDrawer(title: string, width: number, record: any) \n{\n\treturn (dispatch: any) => \n {\n\t\tdispatch({ type: \"OPEN_INSTALL_PROGRESS_DRAWER\", payload: { title: title, width: width, record: record } });\n\t};\n}\n\nexport function closeDrawer() \n{\n\treturn (dispatch: any) => \n {\n\t\tdispatch({ type: \"CLOSE_DRAWER\" });\n\t};\n}\n\nexport function closeInstallationProgressDrawer() \n{\n\treturn (dispatch: any) => \n {\n\t\tdispatch({ type: \"CLOSE_INSTALL_PROGRESS_DRAWER\" });\n\t};\n}\n\nexport function drawerTabChange(activeTab: string) \n{\n\treturn (dispatch: any) => \n {\n\t\tdispatch({ type: \"DRAWER_TAB_CHANGE\", activeTab: activeTab });\n\t};\n}\nexport function getSoftwares(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number=1,\n searchText?: string,\n filters?: any[any],\n systemSwId?: string ) \n{\n return async (dispatch: any) => \n {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let filtersObj: any = [];\n filters && filters[\"status\"] != null\n ? (filtersObj = { statusFilter: filters[\"status\"] })\n : (filtersObj = {});\n\n Axios.get(appConfigs.server.URL + \"/ui/api/software-listing\",\n {\n params: {\n orgId: null,\n systemSwId: systemSwId,\n searchText: searchText,\n scope: \"all\",\n page: page,\n pageSize: appConfigs.tables.pageSize\n },\n }\n ).then((response) => \n {\n if (callbackFnSuccess != null) \n {\n callbackFnSuccess(response.data.data.softwareList);\n }\n dispatch({\n type: \"SOFTWARES_GET_SUCCESS\",\n payload: { data: response.data.data.softwareList, page: page },\n });\n }).catch(function (error) \n {\n if (callbackFnFailure != null) \n {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n export function getDeviceDiscovery(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n mastertag?:string,)\n{\n return async (dispatch: any) => \n {\n Axios.get(appConfigs.server.URL + `/api/iqanopen/GATEWAY/${mastertag}/system-discovery`,).then((response) => \n {\n if (callbackFnSuccess != null) \n {\n callbackFnSuccess(response.data.data.systemDiscovery);\n }\n dispatch({ type: \"DISCOVERY_GET_SUCCESS\",payload: { data: response.data.data.systemDiscovery},});\n }).catch(function (error) \n {\n if (callbackFnFailure != null) \n {\n callbackFnFailure(me, error);\n }\n dispatch({ type: \"DISCOVERY_GET_FAILED\", payload: {data: null}});\n errorResponse(me, error);\n });\n };\n }\n export function getSystemStatus(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n mastertag?:string,) \n {\n return async (dispatch: any) => \n {\n Axios.get(appConfigs.server.URL + `/api/iqanopen/GATEWAY/${mastertag}/status`,).then((response) => \n {\n if (callbackFnSuccess != null) \n {\n callbackFnSuccess(response.data.data.systemStatus);\n }\n dispatch({type: \"SYSTEMSTATUS_GET_SUCCESS\", payload: { data: response.data.data.systemStatus},});\n }).catch(function (error) \n {\n if (callbackFnFailure != null) \n {\n callbackFnFailure(me, error);\n }\n dispatch({ type: \"SYSTEMSTATUS_GET_FAILED\", payload: {data: null}});\n errorResponse(me, error);\n });\n };\n }\n export function CsuMaint(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n mastertag?:any,\n csuInfo?: any,\n ) {\n \n return async (dispatch: any) => {\n var formData = new FormData();\n\n if(csuInfo!==null)\n {\n formData.append(\"devicemodel\", csuInfo.DeviceName ||'');\n formData.append(\"softwaretype\", csuInfo.softwareType||'');\n formData.append(\"version\", csuInfo.version||'');\n formData.append(\"hardwareId\", csuInfo.hardwareId||'');\n formData.append(\"operatorApproval\", csuInfo.operatorapproval||'');\n formData.append(\"packageName\", csuInfo.packageName||'');\n formData.append(\"orgId\", csuInfo.orgId||'');\n formData.append(\"address\", csuInfo.address||'');\n }\n //console.log(\"post install-csu-software formData\", Object.fromEntries(formData));\n Axios( \n appConfigs.server.URL + `/api/iqanopen/GATEWAY/${mastertag}/install-software-package`,\n {\n method: \"POST\",\n data: Object.fromEntries(formData),\n headers: { \"Content-Type\": \"application/json;\" },\n }\n ).then((response) => {\n //console.log(\"install-csu-software response.data\", response.data);\n if (callbackFnSuccess != null) {\n callbackFnSuccess(me, response.data.status);\n }\n \n dispatch({\n type: \"CSU_MAINT_SUCCESS\",\n payload: response.data.data.softwareUploads,\n });\n })\n .catch(function (error) {\n //console.log(\"error\", error);\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n errorResponse(me, error);\n });\n };\n \n }\nexport function getSystemHistory(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n mastertag?:string,) \n{\n return async (dispatch: any) => \n {\n Axios.get(appConfigs.server.URL + `/api/iqanopen/GATEWAY/${mastertag}/history`,)\n .then((response) => \n {\n if (callbackFnSuccess != null) \n {\n callbackFnSuccess(response.data.data.systemHistory);\n }\n dispatch({type: \"SYSTEMHISTORY_GET_SUCCESS\",payload: { data: response.data.data.systemHistory}});\n }).catch(function (error) \n {\n if (callbackFnFailure != null)\n {\n callbackFnFailure(me, error);\n }\n dispatch({ type: \"SYSTEMHISTORY_FAILED\", payload: {data: null}});\n errorResponse(me, error);\n });\n };\n}\nexport function ControllerOtaManagement(\n me: any, \n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n page: number = 1,\n searchText?: string,\n filters?: any[any],\n controllerId?:string) \n{\n return async (dispatch: any) => \n {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let filtersObj:any = [];\n filters && filters['status'] != null ? filtersObj = {'statusFilter': filters['status']} : filtersObj = {}\n Axios.get(appConfigs.server.URL + \"/ui/api/device_ota_management\", \n {\n responseType: \"json\", \n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize\n }\n }).then(response => \n { \n if (callbackFnSuccess != null) \n {\n callbackFnSuccess(response.data.data.controllers);\n }\n dispatch({ type: \"DEVICE_OTA_GET_SUCCESS\", payload: response.data.data.controllers_ota});\n }).catch(function (error) \n {\n if (callbackFnFailure != null) \n {\n callbackFnFailure(me, error)\n }\n dispatch({ type: \"DEVICE_OTA_GET_FAILED\", payload: {data: null, page: page} });\n errorResponse(me, error);\n });\n };\n}\n\nexport function getAllSoftwaresList() \n{\n return (dispatch: any) => \n {\n Axios.get(appConfigs.server.URL + \"/ui/api/software-listing\", {\n responseType: \"json\",\n headers: {},\n }).then((response) => \n {\n dispatch({\n type: \"SOFTWARES_LIST_SUCCESS\",\n payload: { data: response.data.data.softwareList},\n \n });\n }).catch(function (error) \n {\n dispatch({type: \"SET_LOADING_SOFTWARES\", payload: { state: false },});\n errorResponse(null, error);\n });\n };\n}","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useEffect, useState } from \"react\";\nimport { Modal, Select, Col, Row, Form, Radio, message } from \"antd\";\nimport { connect } from \"react-redux\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"./actions\";\nimport { resetFormErrors } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormInstance } from \"antd/lib/form/Form\";\nimport \"./uds.css\";\n\nconst { Option } = Select;\n\ninterface Prop {\n getSoftwares: Function;\n csus: any;\n CsuMaint: Function;\n getAllSoftwaresList:Function;\n}\n\nexport const SoftwareInstallation: React.FC<Prop> = (props: any) => {\n\n const [isModalVisible, setIsModalVisible] = useState(false);\n const [operatorApproval, setOperatorApproval] = useState<string | null>(null);\n const [selectedSoftwareDevice, setSelectedSoftwareDevice] = useState<any>(null);\n const [selectedSoftwareType, setSelectedSoftwareType] = useState<any>(null);\n const [selectedSoftwarePackage, setSelectedSoftwarePackage] = useState<any>(null);\n\n useEffect(() => \n {\n //props.getSoftwares();\n props.getAllSoftwaresList();\n }, []);\n \n const handleOk = () => \n {\n setIsModalVisible(false);\n formRef.current?.setFieldsValue({\n userConfirmed: true,\n });\n };\n\n const handleCancel = () => \n {\n setIsModalVisible(false);\n };\n\n const onFinishUpdateInstalltionSoftware= (values: any) => \n {\n const formattedValues = \n {\n ...values,\n operatorApproval: operatorApproval || null,\n version: getSelectedVersion(),\n hardwareId: getHardwareId(),\n orgId:getOrgId(),\n address:getAddress()\n };\n props.CsuMaint(null, onFinishSuccess, onFinishFailure,props.csus.csuMaintOptions.record.mastertag,formattedValues);\n resetFormErrors(null, formRef.current);\n };\n\n const onFinishSuccess = () => \n {\n message.success(\"Software Queued Successfully\");\n };\n\n const onFinishFailure = (error: any) =>\n {\n const errorMessage = error?.response?.data?.errors?.[0]?.message || \n \"Failed to install software with an error\";\n message.error(errorMessage);\n };\n\n const formRef = React.createRef<FormInstance>();\n\n const getSelectedVersion = () => \n {\n const selectedItem:any = Object.values(props.csus.csuList.csuMaint.record).find((item: any) =>\n item.deviceModel === selectedSoftwareDevice &&\n item.softwareType === selectedSoftwareType &&\n item.packageName === selectedSoftwarePackage);\n return selectedItem ? selectedItem.version : null;\n };\n const getOrgId = () => \n {\n const selectedItem:any = Object.values(props.csus.csuList.csuMaint.record).find((item: any) =>\n item.deviceModel === selectedSoftwareDevice &&\n item.softwareType === selectedSoftwareType &&\n item.packageName === selectedSoftwarePackage);\n return selectedItem ? selectedItem.orgId : null;\n };\n const getHardwareId = () => \n {\n const discovery = JSON.parse(props.csus.csuList.csuMaint.discovery?.discovery);\n return discovery ? discovery.map((device: any) => device.HardwareID) : null;\n };\n const getAddress = () => \n {\n const address = JSON.parse(props.csus.csuList.csuMaint.discovery?.discovery);\n return address ? address.map((device: any) => device.address) : null;\n };\n const onSoftwareDeviceChange = (value: any) =>\n {\n setSelectedSoftwareDevice(value);\n };\n\n const onSoftwareTypeChange = (value: any) => \n {\n setSelectedSoftwareType(value);\n };\n\n const onSoftwarePackageChange = (value: any) => \n {\n setSelectedSoftwarePackage(value);\n };\n \n const onChangeOperatorApproval = (e: any) => \n {\n setOperatorApproval(e.target.value);\n };\n \n return (\n <>\n <Modal\n title=\"Entry Warning\"\n visible={isModalVisible}\n okText=\"Yes, Add\"\n cancelText=\"No\"\n okType=\"danger\"\n onOk={handleOk}\n onCancel={handleCancel}\n >\n <span>Are you sure you still want to go to Installations?</span>\n </Modal>\n <Form id=\"softwareInstalltion\" \n ref={formRef}\n layout=\"vertical\" \n onFinish={onFinishUpdateInstalltionSoftware}\n >\n <Row gutter={8}>\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Form.Item \n name=\"DeviceName\" \n label=\"Select Device\" \n rules={[{ \n required: true, \n message: appConfigs.errors.fieldErrors.valueRequired \n }]}>\n <Select\n placeholder=\"Select Device\"\n showSearch\n style={{ width: \"100%\" }}\n optionFilterProp=\"children\"\n onChange={onSoftwareDeviceChange}\n filterOption={(input, option) =>\n option?.children[0]?.props?.children[0].toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {props.csus.csuList.csuMaint.record !== null &&\n [...new Set(Object.values(props.csus.csuList.csuMaint.record).map((item: any) => \n item.deviceModel))].map((uniqueOption: any, index) => (\n <Option key={uniqueOption} value={uniqueOption}>\n {uniqueOption}\n </Option>\n ))}\n </Select>\n </Form.Item>\n <Form.Item \n name=\"softwareType\" \n label=\"Select Software Type\" \n rules=\n {[{ \n required: true,\n message: appConfigs.errors.fieldErrors.valueRequired \n }]}>\n <Select\n placeholder=\"Select Software Type\"\n showSearch\n style={{ width: \"100%\" }}\n optionFilterProp=\"children\"\n onChange={onSoftwareTypeChange}\n filterOption={(input, option) =>\n option?.children[0]?.props?.children[0].toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {props.csus.csuList.csuMaint.record !== null &&\n [...new Set(Object.values(props.csus.csuList.csuMaint.record).map((item: any) =>\n item.softwareType))].map((uniqueOption: any, index) => (\n <Option key={uniqueOption} value={uniqueOption}>\n {uniqueOption}\n </Option>\n ))}\n </Select>\n </Form.Item>\n <Form.Item \n name=\"packageName\" \n label=\"Select Package Name\" \n rules={[{ \n required: true, \n message: appConfigs.errors.fieldErrors.valueRequired \n }]}>\n <Select\n placeholder=\"Select Package Name\"\n showSearch\n style={{ width: \"100%\" }}\n optionFilterProp=\"children\"\n onChange={onSoftwarePackageChange}\n filterOption={(input, option) =>\n option?.children[0]?.props?.children[0].toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {props.csus.csuList.csuMaint.record !== null &&\n Object.keys(props.csus.csuList.csuMaint.record).map((item: any) =>\n props.csus.csuList.csuMaint.record[item].deviceModel === selectedSoftwareDevice &&\n props.csus.csuList.csuMaint.record[item].softwareType === selectedSoftwareType ? (\n <Option key={Math.random()} value={props.csus.csuList.csuMaint.record[item].packageName}>\n {props.csus.csuList.csuMaint.record[item].packageName}\n </Option>) : \"\")}\n </Select>\n </Form.Item>\n </Col>\n <Col span={24}>\n <div>\n <Form.Item name=\"operatorapproval\" label=\"Operator approval\" rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}>\n <Radio.Group name=\"radiogroup\" onChange={onChangeOperatorApproval} value={operatorApproval}>\n <Radio value=\"Yes\">Yes</Radio>\n <Radio value=\"No\">No</Radio>\n </Radio.Group>\n </Form.Item>\n </div>\n </Col>\n <Col span={24}>\n <div style={{ marginTop: \"20px\" }}>\n {operatorApproval &&\n props.csus.csuList.csuMaint.record !== null &&\n Object.keys(props.csus.csuList.csuMaint.record).map((item: any) =>\n props.csus.csuList.csuMaint.record[item].deviceModel === selectedSoftwareDevice &&\n props.csus.csuList.csuMaint.record[item].softwareType === selectedSoftwareType &&\n props.csus.csuList.csuMaint.record[item].packageName === selectedSoftwarePackage ? (\n <div key={item}>\n <h4 style={{ marginBottom: \"20px\" }}>Selected Software Details:</h4>\n <h4>Device Model: {props.csus.csuList.csuMaint.record[item].deviceModel}</h4>\n <h4>Software Type: {props.csus.csuList.csuMaint.record[item].softwareType}</h4>\n <h4>Version: {getSelectedVersion()}</h4>\n <h4>Software Package Name: {props.csus.csuList.csuMaint.record[item].packageName}</h4>\n <h4>Operator Approval: {operatorApproval}</h4>\n <h4>Hardware Id: {getHardwareId()}</h4>\n <h4>Address: {getAddress()}</h4>\n </div>\n ) : \"\")}\n </div>\n </Col>\n </Row>\n </Form>\n </>\n );\n};\n const mapStateToProps = (state: any) => ({\n context: state.contextReducer.context,\n csus: state.DeviceReducers.DeviceState.csus,\n selectedCSU: state.DeviceReducers.DeviceState.csus.selectedCSU,\n permissions: state.contextReducer.data,\n });\nexport default connect(mapStateToProps, actions)(SoftwareInstallation);","import React, {useState } from \"react\";\nimport {Modal, Col, Row, Form, Card } from \"antd\";\nimport { FormInstance } from \"antd/lib/form\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\ninterface Prop {\n getDeviceDiscovery: Function;\n csus: any;\n}\nexport const DeviceDiscovery: React.FC<Prop> = (props) => {\n const formRef = React.createRef<FormInstance>();\n const [isModalVisible, setIsModalVisible] = useState(false);\n \n const handleOk = () => \n {\n setIsModalVisible(false);\n formRef.current?.setFieldsValue({\n userConfirmed: true,\n });\n };\n const handleCancel = () => \n {\n setIsModalVisible(false);\n };\n return (\n <>\n <Modal\n title=\"Entry Warning\"\n visible={isModalVisible}\n okText=\"Yes, Add\"\n cancelText=\"No\"\n okType=\"danger\"\n onOk={handleOk}\n onCancel={handleCancel}\n >\n </Modal>\n <Form id=\"DeviceDiscovery\" ref={formRef} layout=\"vertical\">\n <Row gutter={8}>\n <Col span={24}>\n <Card style={{ borderColor: \"#dbdbdb\", width: \"100%\", overflowX: \"auto\" }}>\n <div style={{ maxWidth: \"100%\", overflowX: \"auto\" }}>\n {(props.csus.csuList.csuMaint.discovery!==null)?<table className=\"styled-table\" style={{ width: \"100%\" }}>\n <thead>\n <tr key={Math.random()}>\n <th style={{ width: \"10%\" }}>Mode</th>\n <th style={{ width: \"10%\" }}>Model</th>\n <th style={{ width: \"10%\" }}>Serial</th>\n <th style={{ width: \"10%\" }}>Hardware Id</th>\n <th style={{ width: \"10%\" }}>PcbaVariantID</th>\n <th style={{ width: \"10%\" }}>Runtime Version</th>\n <th style={{ width: \"10%\" }}>Platform Version</th>\n <th style={{ width: \"10%\" }}>Application Version</th>\n </tr>\n </thead>\n <tbody>\n {props.csus.csuList.csuMaint.discovery?.discovery &&\n JSON.parse(props.csus.csuList.csuMaint.discovery?.discovery).map((device: any) => (\n <tr key={Math.random()}>\n <td>{device.Mode}</td>\n <td>{device.Controller}</td>\n <td>{device.SerialNumber}</td>\n <td>{device.HardwareID}</td>\n <td>{device.PcbaVariantID}</td>\n <td>{device.SoftwareDetails.RuntimeVersion}</td>\n <td>{device.SoftwareDetails.PlatformVersion}</td>\n <td>{device.SoftwareDetails.ApplicationVersion}</td>\n </tr>\n ))}\n </tbody>\n </table>:<div><p>There is no Discovery available for this Device at this moment.</p></div>}\n </div>\n </Card>\n </Col>\n </Row>\n </Form>\n </>\n );\n};\nconst mapStateToProps = (state: any) => ({\n context: state.contextReducer.context,\n csus: state.DeviceReducers.DeviceState.csus,\n selectedCSU: state.DeviceReducers.DeviceState.csus.selectedCSU,\n permissions: state.contextReducer.data,\n});\nexport default connect(mapStateToProps, actions)(DeviceDiscovery);","import React, { useEffect} from \"react\";\nimport { Col, Row, Form, Button} from \"antd\";\nimport { FormInstance } from \"antd/lib/form\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { ReloadOutlined } from '@ant-design/icons';\n\ninterface Prop {\n getSystemStatus: Function;\n csus: any;\n csuMaintOptions: any,\n}\n\ninterface SystemStatus {\n [key: string]: string;\n }\n\n\nexport const DeviceStatus: React.FC<Prop> = (props) => {\n const formRef = React.createRef<FormInstance>();\n\n useEffect(() => {\n props.getSystemStatus(null,null,null,props.csuMaintOptions.record.mastertag);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n \n const onRefresh=()=>\n {\n props.getSystemStatus(null,null,null,props.csuMaintOptions.record.mastertag);\n }\nconst StatusFields : string[] = [\"hardwareId\",\"softwareType\", \"version\", \"status\", \"action\",\"updatedAt\"]\n//console.log(props.csus.csuList.csuMaint.systemstatus);\n return (\n \n <>\n <Form\n id=\"SoftwareStatus\"\n ref={formRef}\n layout=\"vertical\"\n >\n {props.csus.csuList.csuMaint.systemstatus!=null ? <Row gutter={24}> \n <Col xs={24} lg={10}>\n <Button \n data-id=\".csu-status-refresh-button\" \n className=\"mt-10\" \n onClick={onRefresh}\n type=\"default\" \n icon={<ReloadOutlined />}\n > \n Refresh\n </Button>\n </Col> \n <Col span={24}>\n <table className=\"styled-table\" style={{ width: \"100%\" }}>\n <thead>\n <tr key={Math.random()}>\n <th>HardwareId</th>\n <th>File Type</th>\n <th>Version</th>\n <th>Status</th>\n <th>Action</th>\n <th>Updated At</th>\n </tr>\n </thead>\n <tbody>\n <tr> \n {\n props.csus.csuList.csuMaint.systemstatus && \n Object.entries(StatusFields).map(([key, field]) => ( \n <td key={field}>\n {props.csus.csuList.csuMaint.systemstatus[field]}\n </td> \n ))\n }\n </tr>\n </tbody>\n </table>\n </Col>\n </Row>:<div><p>There is no Status available for this Device at this moment.</p></div>}\n </Form>\n </>\n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n csus: state.DeviceReducers.DeviceState.csus,\n selectedCSU: state.DeviceReducers.DeviceState.csus.selectedCSU,\n permissions: state.contextReducer.data,\n csuMaintOptions: state.DeviceReducers.DeviceState.csus.csuMaintOptions\n };\n};\n\nexport default connect(mapStateToProps, {\n ...actions,\n})(DeviceStatus);","import React, { useEffect} from \"react\";\nimport { Col, Row, Form, Button,Table} from \"antd\";\nimport { FormInstance } from \"antd/lib/form\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { ReloadOutlined } from '@ant-design/icons';\n\ninterface Prop {\n getSystemHistory: Function;\n csus: any;\n csuMaintOptions: any,\n}\n\ninterface SystemHistory {\n [key: string]: string;\n }\n export const DeviceHistory: React.FC<Prop> = (props) =>\n{\n const formRef = React.createRef<FormInstance>();\n const { tableConfig={}, tableData } = props.csus.systemhistory || {}; \n \n useEffect(() =>\n {\n props.getSystemHistory(null,null,null,props.csuMaintOptions.record.mastertag);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onRefresh=()=>\n {\n props.getSystemHistory(null,null,null,props.csuMaintOptions.record.mastertag);\n }\n const tableColumns = [\n {\n title: 'Hardware Id',\n dataIndex: 'hardwareId',\n },\n {\n title: 'Software Type',\n dataIndex: 'softwareType',\n },\n {\n title: 'version',\n dataIndex: 'version',\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n },\n {\n title: \"Action\",\n dataIndex: \"action\",\n },\n {\n title: \"Updated At\",\n dataIndex: \"updatedAt\",\n },\n ]\n return (\n <>\n <Form\n id=\"SoftwareHistory\"\n ref={formRef}\n layout=\"vertical\"\n >\n {(props.csus.csuList.csuMaint.systemhistory != null && props.csus.systemhistory != null) ? (\n <Row gutter={24}>\n <Col xs={24} lg={10}>\n <Button\n data-id=\".csu-history-refresh-button\"\n className=\"mt-10\"\n onClick={onRefresh}\n type=\"default\"\n icon={<ReloadOutlined />}\n >\n Refresh\n </Button>\n </Col>\n <Col span={24}>\n {tableConfig && ( \n <Table\n className=\"styled-table\"\n data-id=\"controllers-data\"\n style={{ overflowX: 'auto' }}\n {...tableConfig}\n columns={tableColumns}\n dataSource={tableData}\n showSorterTooltip={false}\n />\n )}\n {!tableConfig && (\n <div><p>There is no History available for this Device at this moment.</p></div>\n )}\n </Col>\n </Row>\n ) : (\n <div><p>There is no History available for this Device at this moment.</p></div>\n )}\n </Form>\n </>\n );\n};\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n csus: state.DeviceReducers.DeviceState.csus,\n selectedCSU: state.DeviceReducers.DeviceState.csus.selectedCSU,\n permissions: state.contextReducer.data,\n csuMaintOptions: state.DeviceReducers.DeviceState.csus.csuMaintOptions\n };\n};\nexport default connect(mapStateToProps, {\n ...actions,\n})(DeviceHistory);","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Button, Drawer, Space, Tabs } from \"antd\";\nimport React, { useEffect} from \"react\";\nimport { connect } from \"react-redux\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport * as actions from \"./actions\";\nimport {SoftwareInstallation} from \"./SoftwareInstallation\";\nimport {DeviceDiscovery} from \"./DeviceDiscovery\"\nimport {DeviceStatus} from \"./DeviceStatus\"\nimport {DeviceHistory} from \"./DeviceHistory\"\nimport \"./uds.css\";\n\nconst { TabPane } = Tabs;\n\ninterface Prop {\n context: any,\n csus: any,\n csuMaintOptions: any,\n closeInstallationProgressDrawer: Function,\n drawerTabChange: Function,\n getSoftwares:Function,\n getDeviceDiscovery: Function,\n getSystemStatus: Function,\n getSystemHistory: Function,\n getAllSoftwaresList:Function;\n CsuMaint:Function,\n}\n\nconst SoftwareInstallationProgress: React.FC<Prop> = (props) => {\n\n const onDrawerClose = () => {\n props.closeInstallationProgressDrawer();\n };\n\n const onTabChange = (key: string) => {\n props.drawerTabChange(key);\n }\n useEffect(() => {\n\n if (props.csuMaintOptions.record != null) {\n props.getDeviceDiscovery(null,null,null,props.csuMaintOptions.record.mastertag);\n props.getSystemStatus(null,null,null,props.csuMaintOptions.record.mastertag);\n //props.getSystemHistory(null,null,null,props.csuMaintOptions.record.mastertag);\n }\n }, [props.csuMaintOptions.record])\n\n return (\n <Drawer\n title={props.csuMaintOptions.title}\n width={props.csuMaintOptions.width}\n onClose={onDrawerClose}\n visible={props.csuMaintOptions.info_visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n {props.csuMaintOptions.activeTab === \"2\" &&\n <Button data-id=\"update-to-install-software\" type=\"primary\" form=\"softwareInstalltion\" key=\"submit\" htmlType=\"submit\">\n Update\n </Button>\n } \n <Button type=\"default\" onClick={onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button> \n </Space>\n \n }\n >\n {\n <Tabs data-id=\"csu-maint-csu-info-tabs\" activeKey={props.csuMaintOptions.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}> \n <TabPane tab={props.csuMaintOptions.tabs[0].title} key=\"1\" disabled={props.csuMaintOptions.tabs[0].disabled}>\n <DeviceDiscovery getDeviceDiscovery={props.getDeviceDiscovery} csus={props.csus} />\n </TabPane>\n\n {/* {(props.csuMaintOptions.record!==null \n && props.csuMaintOptions.record.connectionStatus===\"ONLINE\"\n && props.csuMaintOptions.record.connectionStatus===\"ONLINE\")? */}\n <TabPane tab={props.csuMaintOptions.tabs[1].title} key=\"2\" disabled={props.csuMaintOptions.tabs[1].disabled}>\n <SoftwareInstallation getAllSoftwaresList={props.getAllSoftwaresList} getSoftwares={props.getSoftwares} csus={props.csus} CsuMaint={props.CsuMaint} />\n </TabPane>\n {/* :\n <TabPane tab={props.csuMaintOptions.tabs[1].title} key=\"2\" disabled></TabPane>} */}\n\n {/* {(props.csuMaintOptions.record!==null \n && props.csuMaintOptions.record.connectionStatus===\"ONLINE\")? */}\n <TabPane tab={props.csuMaintOptions.tabs[2].title} key=\"3\" disabled={props.csuMaintOptions.tabs[2].disabled}>\n <DeviceStatus getSystemStatus={props.getSystemStatus} csus={props.csus} csuMaintOptions={props.csuMaintOptions} />\n </TabPane>\n {/* :\n <TabPane tab={props.csuMaintOptions.tabs[2].title} key=\"3\" disabled></TabPane>} */}\n\n <TabPane tab={props.csuMaintOptions.tabs[3].title} key=\"4\" disabled={props.csuMaintOptions.tabs[3].disabled}>\n <DeviceHistory getSystemHistory={props.getSystemHistory} csus={props.csus} csuMaintOptions={props.csuMaintOptions}/>\n </TabPane>\n </Tabs> \n } \n </Drawer>\n );\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n csus: state.DeviceReducers.DeviceState.csus,\n selectedCSU: state.DeviceReducers.DeviceState.csus.selectedCSU,\n csuMaintOptions: state.DeviceReducers.DeviceState.csus.csuMaintOptions\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(SoftwareInstallationProgress);","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { useEffect,useState} from \"react\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { Row, Col, Tooltip, Button, Space, Table, Input } from \"antd\";\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport { EditOutlined,FileTextOutlined, ClockCircleOutlined} from \"@ant-design/icons\";\nimport history from '../../../utils/history';\nimport { appConfigs } from \"../../../utils/configurations\";\nimport SoftwareInstallationProgress from \"./SoftwareInstallationProgress\";\nimport onlineIcon from \"../../../assets/images/map-status/online.png\";\nimport offlineIcon from \"../../../assets/images/map-status/offline.png\";\nimport { \n CheckCircleOutlined, CloseCircleOutlined\n} from \"@ant-design/icons\";\nimport \"./uds.css\";\n\nconst { Search } = Input;\n\ninterface Props{\n context: any,\n csus: any,\n selectedCSU: any,\n getControllerOtaManagement:Function,\n ControllerOtaManagement:Function,\n ControllerOtaManagementSetPagination:Function,\n updateControllerOtaManagementSelection:Function,\n controllerOtaManagementSetSearch:Function,\n openDrawer: Function,\n openInstallationProgressDrawer: Function,\n}\n\nconst UDS: React.FC<Props> = (props) => {\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n const [selectedFilters, setSelectedFilters] = useState<any>({});\n const { tableConfig, tableData } = props.csus.csuList;\n const [page, setPage] = useState(1);\n\n useEffect(() => {\n props.ControllerOtaManagement(null, null, null, 1, props.csus.csuList.searchText, [{\"status\": null}])\n props.ControllerOtaManagementSetPagination(onPaginationChange);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n const renderControllersTable = (pagination: any, filters: any, sorter: any) => \n { \n setSelectedFilters(filters);\n setPage(pagination.current);\n }\n const onSearch = (searchText: string) => { \n props.controllerOtaManagementSetSearch((searchText || \"\"));\n\n if((searchText || \"\")===\"\") {\n history.push(\"/csu\");\n }\n \n setTimeout(function() {\n props.ControllerOtaManagement(null, null, null, 1, searchText, selectedFilters); \n }, 100); \n }\n\n const onSearchChange = (e: any) => {\n let value = e.target.value;\n props.controllerOtaManagementSetSearch((value || \"\"));\n }\n const onPaginationChange = (page: number) => {\n\n props.ControllerOtaManagement(null, null, null, page, '', null);\n };\n const tableColumns = [\n {\n title: 'Asset',\n dataIndex: 'gatewayName',\n render: (text: any, record: any) => \n <span className=\"no-word-wrap\">\n {\n record.notesCount > 0 &&\n <span className=\"asset-status-yellow pr-3\" ><FileTextOutlined /></span>\n }\n {\n record.status === \"active\" &&\n <span className=\"asset-status-green pr-5\" ><CheckCircleOutlined /></span>\n }\n {\n record.status === \"inactive\" &&\n <span className=\"asset-status-red pr-5\" ><CloseCircleOutlined /></span>\n }\n {\n record.status === \"whitelisted\" &&\n <span className=\"asset-status-gray pr-5\" ><ClockCircleOutlined /></span>\n }\n {record.gatewayName}\n </span>\n },\n {\n title: 'Connection',\n dataIndex: \"gatewayName\",\n render: (text: any, record: any) => (\n <>\n {\n record.connectionStatus === \"ONLINE\" && record.status !== \"inactive\" && record.status !== \"whitelisted\" &&\n <Tooltip title=\"Online\">\n <span className=\"asset-status-green alarm-info-icon pr-5\" ><img src={onlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {\n record.connectionStatus === \"ONLINE\" && record.status !== \"active\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {\n record.connectionStatus === \"OFFLINE\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n </>\n )\n },\n {\n title: 'Mastertag',\n dataIndex: 'mastertag',\n },\n {\n title: 'Hardware Id',\n dataIndex: 'hardwareId',\n },\n {\n title: 'Serial Number',\n dataIndex: 'serialNumber',\n },\n {\n title: \"Device Name\",\n dataIndex: \"deviceName\",\n },\n {\n title: \"Actions\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <span className=\"no-word-wrap\">\n {\n <Tooltip title=\"Manage Controllers\">\n <Button\n type=\"default\" \n icon={<EditOutlined />}\n onClick={(e) => { props.openInstallationProgressDrawer(\"Asset :: (\" + record.gatewayName + ' - ' + record.status + ')', drawerWidth, record); }}\n \n />\n </Tooltip>\n }</span>\n )\n }\n ]\n return (\n\n <div className=\"layout-content\">\n <Row gutter={8}>\n \n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\"> \n <BackNavigation /> \n </Tooltip> \n {\n <span>Device OTA Management</span>\n }\n </div>\n </div>\n </Col>\n\n </Row>\n \n <div className=\"mt-15\">\n <Row justify=\"end\" gutter={24}>\n \n <Col xs={24} lg={24} className=\"content-header-controls\">\n <Space>\n <Search\n data-id=\"csu-search-field\"\n key=\"search-field\"\n placeholder=\"Search By Name, Make, Model, Tags\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onSearchChange}\n className=\"search-field\"\n value={props.csus.csuList.searchText}\n />\n\n {/* <Button data-id=\"csu-search-new-button\" \n //</Space>disabled={props.selectedController == null} \n type=\"primary\" icon={<PlusOutlined />} onClick={(e) => props.openDrawer(\"Install Application\", drawerWidth, {})}>\n <span>App Installation</span>\n </Button> */}\n </Space>\n </Col>\n\n \n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <Table \n data-id=\"controllers-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record) => record.id}\n columns={tableColumns}\n dataSource={tableData}\n onChange={renderControllersTable}\n showSorterTooltip={false}\n />\n </Col> \n </Row>\n \n </div>\n <SoftwareInstallationProgress/> \n </div>\n\n );\n}\n\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n csus: state.DeviceReducers.DeviceState.csus,\n selectedCSU: state.DeviceReducers.DeviceState.csus.selectedCSU,\n permissions: state.contextReducer.data,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(UDS);","import Axios from \"axios\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function getReportSchedulesList(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n page: number = 1,\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(appConfigs.server.URL + \"/ui/api/report-schedules\", {\n responseType: \"json\",\n headers: {},\n params: {\n searchText: searchText,\n page: page,\n pageSize: appConfigs.tables.pageSize,\n },\n })\n .then((response) => {\n let data =\n response.data.data.schedules == null ||\n (response.data.data.schedules.length || 0) === 0\n ? []\n : response.data.data.schedules;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n dispatch({\n type: \"REPORT_SCHEDULES_LIST_GET_SUCCESS\",\n payload: { data: data, page: page },\n });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function scheduleMaintOpen(\n me: any,\n title: string,\n width: number,\n record: any,\n action: any\n) {\n return async (dispatch: any) => {\n Axios.get(appConfigs.server.URL + \"/ui/api/tags\", {\n responseType: \"json\",\n headers: {},\n params: {},\n }).then((response) => {\n let data =\n response.data.data.orgTags == null ||\n (response.data.data.orgTags.length || 0) === 0\n ? []\n : response.data.data.orgTags;\n data = data\n .map((tag: any) => tag[\"tagName\"].toUpperCase())\n .filter((item: any, i: any, ar: any) => ar.indexOf(item) === i)\n .sort();\n\n dispatch({ type: \"ORG_TAGS_SUCCESS\", payload: { data: data } });\n dispatch({\n type: \"REPORT_SCHEDULES_MAINT_OPEN\",\n payload: {\n title: title,\n width: width,\n record: record,\n action: action,\n },\n });\n });\n };\n}\n\nexport function scheduleMaintClose(me: any) {\n return (dispatch: any) => {\n dispatch({ type: \"REPORT_SCHEDULES_MAINT_CLOSE\" });\n };\n}\n\nexport function scheduleSetPagination(onPaginationChange: any) {\n return (dispatch: any) => {\n dispatch({\n type: \"REPORT_SCHEDULES_SET_PAGINATION\",\n onPaginationChange: onPaginationChange,\n });\n };\n}\n\nexport function scheduleSetSearch(searchText: string) {\n return (dispatch: any) => {\n dispatch({ type: \"REPORT_SCHEDULES_SET_SEARCH\", searchText: searchText });\n };\n}\n\nexport function scheduleStatus(\n me: any,\n callbackSuccessFn: any,\n callbackFailureFn: any,\n scheduleId: string,\n status: string\n) {\n return async (dispatch: any) => {\n Axios.put(\n appConfigs.server.URL +\n \"/ui/api/report-schedules/\" +\n scheduleId +\n \"/\" +\n status,\n {},\n {\n responseType: \"json\",\n }\n )\n .then((response) => {\n if (callbackSuccessFn != null) {\n callbackSuccessFn(response.data.data.scheduleId, scheduleId);\n }\n })\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFailureFn != null) {\n callbackFailureFn(error);\n }\n });\n };\n}\n","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\n\nexport function scheduleMaintInfoOrgsGet(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n orgId?: string,\n searchText?: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL +\n \"/ui/api/orgs-lov\" +\n ((orgId || \"\") !== \"\" ? \"/\" + orgId : \"\"),\n {\n responseType: \"json\",\n headers: {},\n params: {\n mode: (orgId || \"\") === \"\" ? \"all\" : \"single\",\n scope: \"all\",\n includeTree: false,\n orgId: orgId,\n searchText: searchText,\n page: 1,\n pageSize: 9999,\n },\n }\n )\n .then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.orgs);\n }\n dispatch({\n type: \"REPORT_SCHEDULES_ORGS_SUCCESS\",\n payload: { data: response.data.data.orgs },\n });\n })\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n });\n };\n}\n\nexport function scheduleMaintInfoReportsGet(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: string\n) {\n return async (dispatch: any) => {\n Axios.get(appConfigs.server.URL + \"/ui/api/orgReports/\" + orgId, {\n responseType: \"json\",\n headers: {},\n })\n .then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.reports);\n }\n dispatch({\n type: \"REPORT_SCHEDULES_REPORTS_GET_SUCCESS\",\n payload: { data: response.data.reports, orgId: response.data.orgId },\n });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function scheduleMaintInfoUsersGet(\n me: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL +\n \"/ui/api/users/okta?administered=true&pageSize=9999\",\n {\n responseType: \"json\",\n headers: {},\n }\n )\n .then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.users);\n }\n dispatch({\n type: \"REPORT_SCHEDULES_USERS_SUCCESS\",\n payload: { data: response.data.data.users },\n });\n })\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n });\n };\n}\n\nexport function scheduleMaint(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n record: any\n) {\n return async (dispatch: any) => {\n Axios.post(appConfigs.server.URL + \"/ui/api/report-schedules\", record, {\n responseType: \"json\",\n headers: {},\n })\n .then((response) => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.scheduleId, record.mode);\n }\n dispatch({\n type: \"REPORT_SCHEDULES_MAINT_SUCCESS\",\n payload: { data: response.data.schedule },\n });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n });\n };\n}\n\nexport function getOrgTags(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string\n) {\n return async (dispatch: any) => {\n Axios.get(appConfigs.server.URL + \"/ui/api/tags\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId: orgId,\n },\n })\n .then((response) => {\n let data =\n response.data.data.orgTags == null ||\n (response.data.data.orgTags.length || 0) === 0\n ? []\n : response.data.data.orgTags;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n\n data = data\n .map((tag: any) => tag[\"tagName\"].toUpperCase())\n .filter((item: any, i: any, ar: any) => ar.indexOf(item) === i)\n .sort();\n\n dispatch({ type: \"ORG_TAGS_SUCCESS\", payload: { data: data } });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\nexport function getScheduleOrgTags(\n me: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n status: string,\n orgId: string\n) {\n \n return async (dispatch: any) => {\n Axios.get(appConfigs.server.URL + \"/ui/api/orgtags\", {\n responseType: \"json\",\n headers: {},\n params: {\n orgId: orgId,\n },\n })\n .then((response) => {\n let data =\n response.data.data.orgTags == null ||\n (response.data.data.orgTags.length || 0) === 0\n ? []\n : response.data.data.orgTags;\n if (callbackFnSuccess != null) {\n callbackFnSuccess(data);\n }\n\n data = data\n .map((tag: any) => tag[\"tagName\"].toUpperCase())\n .filter((item: any, i: any, ar: any) => ar.indexOf(item) === i)\n .sort();\n\n dispatch({ type: \"SCHEDULE_ORG_TAGS_SUCCESS\", payload: { data: data } });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n","import React from \"react\";\nimport { Form, Select } from 'antd';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nconst { Option } = Select;\n\ninterface Prop {\n scheduleMaintInfoOrgsGet: Function,\n scheduledList: any,\n context: any,\n scheduleMaintInfoReportsGet: Function,\n formRef: any,\n}\n\nclass ScheduleMaintInfoOrg extends React.Component<Prop, {}> {\n\n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n if (this.props.scheduledList.scheduledMaint.instance !== prevProps.scheduledList.scheduledMaint.instance) {\n this.componentUpdate();\n }\n }\n\n componentUpdate() {\n this.props.scheduleMaintInfoOrgsGet(this, null, null, null, null);\n }\n\n onOrgChange = (value: string, option: any) => {\n if ((value || \"\") !== \"\") {\n this.props.scheduleMaintInfoReportsGet(this, null, null, value);\n }\n }\n\n render() {\n\n const { orgs } = this.props.scheduledList.scheduledMaint;\n const { mode } = this.props.scheduledList.scheduledMaint;\n\n return (\n <Form.Item\n name=\"orgId\"\n label=\"Org Name\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n data-id=\"schedule-maint-schedule-info-org-id\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select...\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n onChange={this.onOrgChange}\n disabled={mode === \"edit\"}\n >\n {orgs.map((record: any, index: number) => (\n <Option key={record.orgId} value={record.orgId}>\n {record.name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n );\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n scheduledList: state.reportSchedulesReducers.reportScheduledState.scheduledList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ScheduleMaintInfoOrg);","import React from \"react\";\nimport { Form, Select, Spin } from 'antd';\n\nimport { appConfigs } from \"../../../utils/configurations\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\n\nconst { Option } = Select;\n\ninterface Prop {\n scheduleMaintInfoUsersGet: Function,\n scheduledList: any,\n context: any,\n formRef: any,\n subscribers: string[]\n}\n\ninterface State {\n loading: boolean;\n}\n\nclass ScheduleMaintInfoUsers extends React.Component<Prop, State> {\n\n state: State = {\n loading: true\n };\n\n componentDidMount() {\n this.componentUpdate();\n }\n\n componentDidUpdate(prevProps: Prop) {\n\n let usersList = this.props.scheduledList.scheduledMaint.users;\n\n if (this.props.scheduledList.scheduledMaint.instance !== prevProps.scheduledList.scheduledMaint.instance) {\n this.componentUpdate();\n }\n else if (usersList && usersList.length > 0 &&\n this.props.subscribers.length > 0 &&\n this.props.scheduledList.scheduledMaint.mode === \"edit\") {\n\n this.props.formRef.setFieldsValue({\n subscribe: this.props.subscribers\n })\n }\n\n if (!usersList && this.state.loading){\n this.setState({ loading: false });\n }\n else if (usersList && usersList.length > 0 && this.state.loading) {\n this.setState({ loading: false });\n }\n \n }\n\n componentUpdate() {\n this.props.scheduleMaintInfoUsersGet(this, null, null, null, null);\n }\n\n filterUsersArray(element: any, index: number, array: any) {\n return element.activeInScope == true;\n }\n\n\n render() {\n\n const { users } = this.props.scheduledList.scheduledMaint;\n\n let finalUsers = [];\n if (users && users.length > 0) {\n finalUsers = users.filter(this.filterUsersArray);\n }\n\n return (\n <Spin spinning={this.state.loading}>\n <Form.Item\n name=\"subscribe\"\n label=\"Subscribe\"\n rules={[{ required: true, message: appConfigs.errors.fieldErrors.valueRequired }]}\n >\n <Select\n data-id=\"schedule-maint-schedule-info-user-id\"\n mode=\"multiple\"\n showSearch\n showArrow={true}\n allowClear\n placeholder=\"Select user\"\n optionFilterProp=\"children\"\n className=\"select-before\"\n >\n {finalUsers && finalUsers.length > 0 && finalUsers.map((record: any, index: number) => (\n <Option key={record.userId} value={record.userId}>\n {record.fullName} ({record.email})\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Spin>\n );\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n scheduledList: state.reportSchedulesReducers.reportScheduledState.scheduledList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ScheduleMaintInfoUsers);","import React, { useState } from \"react\";\nimport {\n Form,\n Input,\n message,\n Select,\n Checkbox,\n DatePicker,\n Row,\n Col,\n Radio,\n Collapse,\n Space,\n} from \"antd\";\nimport moment, { Moment } from \"moment\";\nimport { FormInstance } from \"antd/lib/form\";\n\nimport { appConfigs } from \"../../../utils/configurations\";\nimport {\n errorResponse,\n resetFormErrors,\n} from \"../../../utils/apiHelpers/apiHelpers\";\nimport { FormState, formInit } from \"../../../utils/apiHelpers/formHelpers\";\nimport { SuccessAlert, ErrorAlert } from \"../../../utils/Components/formAlerts\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"../actions\";\nimport history from \"../../../utils/history\";\nimport ScheduleMaintInfoOrg from \"./scheduleMaintInfoOrg\";\nimport ScheduleMaintInfoReports from \"./scheduleMaintInfoReports\";\nimport ScheduleMaintInfoUsers from \"./scheduleMaintInfoUsers\";\nimport { getPermissions } from \"../../../utils/commonHelpers\";\nconst { Option } = Select;\nconst weekOptions = [\n { label: \"Mon\", value: \"1\" },\n { label: \"Tue\", value: \"2\" },\n { label: \"Wed\", value: \"3\" },\n { label: \"Thu\", value: \"4\" },\n { label: \"Fri\", value: \"5\" },\n { label: \"Sat\", value: \"6\" },\n { label: \"Sun\", value: \"7\" },\n];\n\nconst todayDate = new Date();\nconst firstDayofMonth = new Date(todayDate.getFullYear(), todayDate.getMonth());\nconst firstDayofNextMonth = new Date(\n todayDate.getFullYear(),\n todayDate.getMonth() + 1\n);\nlet subscribers: string[] = [];\ninterface Prop {\n context: any;\n scheduledList: any;\n scheduleMaint: Function;\n scheduleMaintClose: Function;\n getReportSchedulesList: Function;\n scheduleMaintInfoReportsGet: Function;\n getOrgTags: Function;\n getScheduleOrgTags: Function;\t\t \n permissions: any;\n}\n\ninterface State extends FormState {\n frequency: string;\n capabilityCheckbox: string[];\n formErrorMessage?: string[];\n formSuccessMessage?: string;\n assetTagDDL:boolean;\n orgTagDDL:boolean; \n currentUnitValue:string;\n orgTagsErrorMsg:string;\n}\n\nclass ScheduleMaintInfo extends React.Component<Prop, State> {\n state: State = {\n frequency: \"\",\n capabilityCheckbox: [],\n\t assetTagDDL:false,\n orgTagDDL:false,\n currentUnitValue:'gallons',\n orgTagsErrorMsg:'' \n };\n \n formRef = React.createRef<FormInstance>();\n\n componentDidMount() {\n this.componentUpdate(this.props.scheduledList.scheduledMaint.record);\n if(this.props.scheduledList.scheduledMaint.record.orgTags){\n this.setState({ assetTagDDL: true });\n }\n }\n\n componentDidUpdate(prevProps: Prop, prevState: FormState) {\n let isDifferentInstance =\n this.props.scheduledList.scheduledMaint.instance !==\n prevProps.scheduledList.scheduledMaint.instance;\n let isDifferentOrg =\n this.props.scheduledList.scheduledMaint.selectedOrgId !==\n prevProps.scheduledList.scheduledMaint.selectedOrgId;\n\n if (isDifferentInstance) {\n this.componentUpdate(this.props.scheduledList.scheduledMaint.record);\n } else if (\n isDifferentOrg &&\n this.props.scheduledList.scheduledMaint.mode === \"new\"\n ) {\n // When org change reset capabilityCheckbox\n this.setState({ capabilityCheckbox: [] });\n }\n }\n\n componentUpdate(record: any) {\n this.props.scheduleMaintInfoReportsGet(\n this,\n null,\n null,\n record.orgId ? record.orgId : this.props.context.appContext.orgId\n );\n\n let capabilities: string[] = [];\n let days: string[] = [];\n let tagValues: string[] = [];\n let orgTagValues: string[] = [];\n if (record.capabilities) {\n capabilities = record.capabilities.split(\",\");\n this.setState({ capabilityCheckbox: capabilities });\n }\n\n if (record.subscribers) {\n subscribers = record.subscribers.split(\",\");\n }\n if (record.tags) {\n tagValues = record.tags?.split(\",\");\n }\n\t if (record.orgTags) {\n orgTagValues = record.orgTags?.split(\",\");\n }\n if (record.days) {\n days = record.days.split(\",\");\n }\n\n let hours, minutes;\n let currentClientTimeZone = Intl.DateTimeFormat().resolvedOptions()\n .timeZone;\n\n if (\n record.clientScheduledTime &&\n currentClientTimeZone === record.clientTimezone\n ) {\n let timeIndex = record.clientScheduledTime.indexOf(\":\");\n hours = record.clientScheduledTime.substring(\n record.clientScheduledTime.indexOf(\"T\") + 1,\n timeIndex\n );\n minutes = record.clientScheduledTime.substring(\n timeIndex + 1,\n record.clientScheduledTime.indexOf(\"Z\")\n );\n } else if (\n record.clientScheduledTime &&\n currentClientTimeZone !== record.clientTimezone\n ) {\n // If edit timezone is different covert UTC time to local\n let clientScheduledTime = new Date(record.scheduledTime);\n hours = clientScheduledTime.getHours();\n minutes = clientScheduledTime.getMinutes();\n }\n formInit(this);\n if (this.formRef.current != null) {\n this.formRef.current!.resetFields();\n this.setState({ frequency: record.frequency });\n if(record.unit){\n this.setState({ currentUnitValue: record.unit });\n }\n this.formRef.current!.setFieldsValue({\n orgId: record.orgId\n ? record.orgId\n : this.props.context.appContext.orgId,\n name: record.scheduleName,\n frequency: record.frequency,\n scheduletimeHours: hours,\n scheduletimeMintues: minutes,\n dayofmonth:\n (record.frequency === \"Monthly\" || record.frequency === \"CalendarMonth\")\n ? moment().date(Number(record.days))\n : \"\",\n tags: tagValues.map((tag: any) => {\n return {\n value: tag,\n label: tag,\n key: tag,\n };\n }),\n orgTags: orgTagValues.map((tag: any) => {\n return {\n value: tag,\n label: tag,\n key: tag,\n };\n }),\t\t\t \n\t\tdayofweeks: (record.frequency === \"Weekly\" || record.frequency === \"CalendarWeek\") ? days : \"\",\n });\n }\n }\n\n onFrequencyChange = (value: string, option: any) => {\n if ((value || \"\") !== \"\") {\n this.setState({ frequency: value });\n } else {\n this.setState({ frequency: \"\" });\n }\n };\n \n onOrgTagsChange = (values: any) => {\n if(values.length>0){\n this.setState({ assetTagDDL: true });\n }else{\n this.setState({ assetTagDDL: false });\n } \n };\n\n onAssetTagsChange = (values: any) => {\n if(values.length===0){\n this.setState({ orgTagDDL: false });\n }\n };\n\n onFinish = (values: any) => { \n let scheduleAddEdit = this.props.scheduledList.scheduledMaint\n .scheduleAddEdit;\n scheduleAddEdit.mode = this.props.scheduledList.scheduledMaint.mode;\n scheduleAddEdit.scheduleId = this.props.scheduledList.scheduledMaint.record\n .scheduleId\n ? this.props.scheduledList.scheduledMaint.record.scheduleId\n : -1;\n\n if (\n this.state.capabilityCheckbox &&\n this.state.capabilityCheckbox.length > 0\n ) {\n resetFormErrors(this, this.formRef.current);\n\n scheduleAddEdit.name = values.name;\n scheduleAddEdit.subscribers = values.subscribe;\n scheduleAddEdit.orgId = values.orgId;\n let tagArray = values.tags.map((a: any) => a.value);\n let scheduleOrgTagArray = values.orgTags.map((b: any) => b.value);\n if(this.state.assetTagDDL===false){\n if(scheduleOrgTagArray.length>0){\n scheduleAddEdit.tags = \"\";\n scheduleAddEdit.orgTags = scheduleOrgTagArray.toString();\n }else{\n scheduleAddEdit.tags = tagArray.toString();\n scheduleAddEdit.orgTags = \"\";\n }\n }else{\n scheduleAddEdit.tags = \"\";\n scheduleAddEdit.orgTags = scheduleOrgTagArray.toString();\n }\n scheduleAddEdit.frequency = values.frequency;\n scheduleAddEdit.reports = this.state.capabilityCheckbox;\n scheduleAddEdit.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n scheduleAddEdit.timeZoneOffset = todayDate.getTimezoneOffset();\n let localIsoDateString = todayDate.toISOString().substring(0, 10);\n let localIsoScheduleTimeString =\n \"T\" + values.scheduletimeHours + \":\" + values.scheduletimeMintues + \"Z\";\n let clientScheduledTimeString = localIsoDateString.concat(\n localIsoScheduleTimeString\n );\n let scheduledTime =\n localIsoDateString +\n \" \" +\n values.scheduletimeHours +\n \":\" +\n values.scheduletimeMintues;\n\n scheduleAddEdit.clientScheduledTime = clientScheduledTimeString;\n scheduleAddEdit.scheduledTime = scheduledTime;\n\n if ((values.frequency === \"Weekly\" || values.frequency === \"CalendarWeek\") && values.dayofweeks.length > 0) {\n scheduleAddEdit.dayOfWeek = values.dayofweeks.toString();\n scheduleAddEdit.dayOfMonth = \"\";\n } else if (values.frequency === \"Monthly\" || values.frequency === \"CalendarMonth\") {\n scheduleAddEdit.dayOfMonth = values.dayofmonth._d.getDate();\n scheduleAddEdit.dayOfWeek = \"\";\n } else if (values.frequency === \"Daily\") {\n scheduleAddEdit.dayOfWeek = \"\";\n scheduleAddEdit.dayOfMonth = \"\";\n }\n \n //capability id \"26\" is ePTOV2\n if(this.state.capabilityCheckbox.includes(\"26\")){\n scheduleAddEdit.unit=this.state.currentUnitValue;\n }else{\n scheduleAddEdit.unit=null;\n }\n \n this.props.scheduleMaint(\n this,\n this.onFinishSuccess,\n this.onFinishFailure,\n scheduleAddEdit\n );\n } else { \n // errorResponse(this, \"Atleast one report should be selected / Org does not have reports access\");\n // When no report is selected\n message.error(\"Atleast one report should be selected / Org does not have reports access\");\n }\n };\n\n onFinishSuccess = (record: any, mode: string) => {\n this.props.scheduleMaintClose(this);\n const me = this;\n me.props.getReportSchedulesList(\n me,\n me.getScheduleSuccess(mode),\n null,\n me.props.scheduledList.tableConfig.pagination.current,\n me.props.scheduledList.searchText\n );\n };\n\n onFinishFailure = (error: any) => {\n errorResponse(this, error);\n };\n\n getScheduleSuccess = (mode: string) => {\n message.success(\n \"Schedule has been successfully \" +\n (mode === \"new\" ? \"created\" : \"updated\")\n );\n this.props.scheduleMaintClose(this);\n };\n\n filterReportsArray(element: any, index: number, array: any) {\n return element.access == true;\n }\n\n onCapabilityChange = (e: any) => {\n let checkBoxCurrentState = this.state.capabilityCheckbox;\n if (e.target.checked) {\n checkBoxCurrentState.push(e.target.value.toString());\n } else if (!e.target.checked) {\n const index = checkBoxCurrentState.indexOf(e.target.value.toString());\n if (index > -1) {\n checkBoxCurrentState.splice(index, 1);\n }\n }\n this.setState({ capabilityCheckbox: checkBoxCurrentState });\n };\n\n findCapability = (item: any) => {\n if (!item) {\n }\n };\n \n render() {\n const { reports } = this.props.scheduledList.scheduledMaint;\n \n let finalReports = [];\n if (reports && reports.length > 0) {\n finalReports = reports.filter(this.filterReportsArray);\n }\n const result = getPermissions(\n this.props.permissions.permissions.operator_support\n );\n const tagPermissions = getPermissions(\n this.props.permissions.permissions.asset_tagging\n );\n\n let isOprRead = result[1];\n let canTagCreate = tagPermissions[0];\n let canTagRead = tagPermissions[1];\n let canTagDelete = tagPermissions[3];\n \n const checkTagsValidations = async (rule: any, options: any) => {\n let newValues: any = [];\n let existingValues = [];\n newValues = options?.map((o: any) => o.value);\n existingValues = this.props.scheduledList.scheduledMaint.record.tags?.split(\n \",\"\n );\n \n if (options?.length) { \n if (options?.length > appConfigs.app.assetTags.maxAssetTags) {\n options.pop();\n return Promise.reject(\n `Maximum of ${appConfigs.app.assetTags.maxAssetTags} tags allowed`\n );\n }\n if (\n options[options.length - 1]?.value.length >\n appConfigs.app.assetTags.maxAllowCharactersPerTags\n ) {\n options.pop();\n return Promise.reject(\n `Maximum of ${appConfigs.app.assetTags.maxAllowCharactersPerTags} characters allowed per tags`\n );\n } \n }\n return Promise.resolve();\n };\n const checkOrgTagsValidations = async (rule: any, options: any) => {\n let newValues: any = [];\n let existingValues = [];\n newValues = options?.map((o: any) => o.value);\n existingValues = this.props.scheduledList.scheduledMaint.record.orgTags?.split(\n \",\"\n );\n \n if (options?.length) { \n if (options?.length > appConfigs.app.orgTags.maxOrgTags) {\n options.pop();\n this.setState({ orgTagsErrorMsg: `Maximum of ${appConfigs.app.orgTags.maxOrgTags} tags allowed` }); \n return Promise.reject(\n `Maximum of ${appConfigs.app.orgTags.maxOrgTags} tags allowed`\n );\n }else{\n this.setState({ orgTagsErrorMsg: '' });\n }\n if (\n options[options.length - 1]?.value.length >\n appConfigs.app.orgTags.maxAllowCharactersPerTags\n ) {\n options.pop();\n this.setState({ orgTagsErrorMsg: `Maximum of ${appConfigs.app.orgTags.maxAllowCharactersPerTags} characters allowed per tags` }); \n return Promise.reject(\n `Maximum of ${appConfigs.app.orgTags.maxAllowCharactersPerTags} characters allowed per tags`\n );\n } \n }\n return Promise.resolve();\n };\n return (\n <>\n {this.state.formSuccess && !this.state.formError && (\n <SuccessAlert\n data-id=\"schedule-maint-info-success-message\"\n message={this.state.formSuccessMessage}\n />\n )}\n {this.state.formError && !this.state.formSuccess && (\n <ErrorAlert\n data-id=\"schedule-maint-info-error-message\"\n message={this.state.formErrorMessage}\n />\n )}\n\n <Form\n style={{ marginTop: 15 }}\n {...appConfigs.settings.formLayout.mainLayout}\n id=\"scheduleMaintInfoForm\"\n ref={this.formRef}\n onFinish={this.onFinish}\n >\n {this.formRef.current !== null && (\n <ScheduleMaintInfoOrg formRef={this.formRef.current} />\n )} \n \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Org Tags\"\n name=\"orgTags\"\n initialValue={this.props.scheduledList.scheduledMaint.record?.orgTags?.split(\n \",\"\n )}\n key={Math.random()}\n rules={[{ validator: checkOrgTagsValidations }]}\n help={<span style={{color:'#ff4d4f',fontSize:'14px'}}>{this.state.orgTagsErrorMsg}</span> }\n extra={ <span style={{color:'#0052CC',fontSize:'14px'}}>Org Tags will have precedence over Asset Tags</span> }\n >\n <Select\n mode=\"tags\"\n style={{ width: \"100%\", textTransform: \"uppercase\" }}\n placeholder=\"Select Org Tags\"\n disabled={\n this.state.orgTagDDL\n }\n labelInValue\n onInputKeyDown={(e) => e.preventDefault()}\n\t\t\t\t\tonChange={this.onOrgTagsChange}\n id=\"orgTagsDDL\"\n >\n {this.props.scheduledList.scheduledMaint.selectedOrgTag?.map(\n (tagName: any, index: number) => (\n <Option key={index} value={tagName.toUpperCase()}>\n {tagName.toUpperCase()}\n </Option>\n )\n )}\n </Select>\n </Form.Item>\n </Col>\n <Col span={12}></Col>\n </Row>\n \n <Row gutter={8}>\n <Col span={24}>\n <Form.Item\n label=\"Asset Tags\"\n name=\"tags\"\n initialValue={this.props.scheduledList.scheduledMaint.record?.tags?.split(\n \",\"\n )}\n key={Math.random()}\n rules={[{ validator: checkTagsValidations }]}\n >\n \n <Select\n mode=\"tags\"\n style={{ width: \"100%\", textTransform: \"uppercase\" }}\n placeholder=\"Select Asset Tags\"\n disabled={\n this.state.assetTagDDL\n }\n labelInValue\n onInputKeyDown={(e) => e.preventDefault()}\n\t\t\t\t\tonChange={this.onAssetTagsChange}\n id=\"assetTagsDDL\"\n >\n {this.props.scheduledList.scheduledMaint.selectedTag?.map(\n (tagName: any, index: number) => (\n <Option key={index} value={tagName.toUpperCase()}>\n {tagName.toUpperCase()}\n </Option>\n )\n )}\n </Select>\n </Form.Item>\n </Col>\n <Col span={12}></Col>\n </Row>\n \n <Form.Item\n label={<div><label style={{ color: \"red\" }}>* </label><label>Reports</label></div>}\n name=\"reports\" \n >\n <Row gutter={[8, 24]}>\n {finalReports.map((item: any, index: number) => {\n let isSelected = this.state.capabilityCheckbox.includes(\n item.id.toString()\n );\n return (\n <Col span={12} key={index}>\n <Checkbox\n checked={isSelected}\n value={item.id}\n onChange={this.onCapabilityChange} \n >\n {item.name === \"GatewayService\" ? \"Gateway\" : (item.name === \"ePTOExtended\" ? \"ePTOV2\" : item.name)}\n\n </Checkbox>\n { item.name === \"ePTOExtended\" && isSelected &&\n <Radio.Group name=\"ePTOExtendedRadio\" onChange={(e) => { \n this.setState({currentUnitValue:e.target.value})\n }} value={this.state.currentUnitValue}>\n <Radio value={'gallons'}>Gallons</Radio>\n <Radio value={'liters'}>Liters</Radio> \n </Radio.Group>\n }\n </Col>\n );\n })}\n\n {finalReports && finalReports.length == 0 && (\n <span className=\"no-reports-access-text\">\n Org does not have reports access\n </span>\n )}\n </Row>\n </Form.Item>\n <Form.Item\n label=\"Name\"\n name=\"name\"\n rules={[\n {\n required: true,\n message: appConfigs.errors.fieldErrors.valueRequired,\n },\n ]}\n >\n <Input maxLength={255} placeholder=\"Schedule name\" />\n </Form.Item>\n {this.formRef.current !== null && (\n <ScheduleMaintInfoUsers\n formRef={this.formRef.current}\n subscribers={subscribers}\n />\n )}\n <Form.Item\n name=\"frequency\"\n label=\"Frequency\"\n rules={[\n {\n required: true,\n message: appConfigs.errors.fieldErrors.valueRequired,\n },\n ]}\n help={ this.state.frequency &&\n <span style={{color:'#0052CC',fontSize:'14px'}}>{this.state.frequency == \"Daily\" ?\n \"Retrive data from the previous day\": (this.state.frequency == \"CalendarWeek\" ? \n \"Retrieve data from last week, spanning from Sunday to Saturday\": (this.state.frequency == \"CalendarMonth\" ? \n \"Retrieve data from last month\": (this.state.frequency == \"Weekly\" ? \n \"Retrieve data from the past seven days\": (this.state.frequency == \"Monthly\" ? \n \"Retrieve data from the past 30 days\": \"\"))))\n }</span> \n }\n >\n <Select\n data-id=\"schedule-maint-frequency\"\n showArrow={true}\n allowClear\n placeholder=\"Select frequency\"\n onChange={this.onFrequencyChange}\n >\n <Option key=\"Daily\" value=\"Daily\" title=\"Retrieve data from the previous day\">\n Daily\n </Option>\n <Option key=\"CalendarWeek\" value=\"CalendarWeek\" title=\"Retrieve data from last week, spanning from Sunday to Saturday\">\n Calendar Week\n </Option>\n <Option key=\"CalendarMonth\" value=\"CalendarMonth\" title=\"Retrieve data from last month\">\n Calendar Month\n </Option>\n <Option key=\"Weekly\" value=\"Weekly\" title=\"Retrieve data from the past seven days\">\n Weekly\n </Option>\n <Option key=\"Monthly\" value=\"Monthly\" title=\"Retrieve data from the past 30 days\">\n Monthly\n </Option>\n </Select>\n </Form.Item>\n {this.state.frequency && (this.state.frequency === \"Weekly\" || this.state.frequency === \"CalendarWeek\") && (\n <Form.Item\n label=\"Select week\"\n name=\"dayofweeks\"\n valuePropName=\"value\"\n rules={[\n {\n required: true,\n message: appConfigs.errors.fieldErrors.valueRequired,\n },\n ]}\n >\n <Checkbox.Group>\n {weekOptions.map((item, index) => (\n <Checkbox value={item.value} key={index}>\n {item.label}\n </Checkbox>\n ))}\n </Checkbox.Group>\n </Form.Item>\n )}\n {this.state.frequency && (this.state.frequency === \"Monthly\" || this.state.frequency === \"CalendarMonth\") && (\n <Form.Item\n label=\"Select day\"\n name=\"dayofmonth\"\n rules={[\n {\n required: true,\n message: appConfigs.errors.fieldErrors.valueRequired,\n },\n ]}\n >\n <DatePicker\n format=\"DD\"\n disabledDate={(d) =>\n !d ||\n d.isAfter(firstDayofNextMonth) ||\n d.isSameOrBefore(firstDayofMonth)\n }\n />\n </Form.Item>\n )}\n <Form.Item \n label={<div><label style={{ color: \"red\" }}>* </label><label>Schedule Time</label></div>}\n name=\"scheduletime\"\n >\n <Row gutter={8}>\n <Col span={6}>\n <Form.Item\n name=\"scheduletimeHours\"\n noStyle\n rules={[\n {\n required: true,\n message: appConfigs.errors.fieldErrors.valueRequired,\n },\n ]}\n >\n <Select placeholder=\"Select hours\">\n <Option key=\"07\" value=\"07\">\n 7\n </Option>\n <Option key=\"08\" value=\"08\">\n 8\n </Option>\n <Option key=\"09\" value=\"09\">\n 9\n </Option>\n <Option key=\"10\" value=\"10\">\n 10\n </Option>\n <Option key=\"12\" value=\"12\">\n 12\n </Option>\n <Option key=\"13\" value=\"13\">\n 13\n </Option>\n <Option key=\"14\" value=\"14\">\n 14\n </Option>\n <Option key=\"15\" value=\"15\">\n 15\n </Option>\n <Option key=\"16\" value=\"16\">\n 16\n </Option>\n <Option key=\"17\" value=\"17\">\n 17\n </Option>\n <Option key=\"18\" value=\"18\">\n 18\n </Option>\n <Option key=\"19\" value=\"19\">\n 19\n </Option>\n <Option key=\"20\" value=\"20\">\n 20\n </Option>\n <Option key=\"21\" value=\"21\">\n 21\n </Option>\n <Option key=\"22\" value=\"22\">\n 22\n </Option>\n <Option key=\"23\" value=\"23\">\n 23\n </Option>\n </Select>\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item\n name=\"scheduletimeMintues\"\n noStyle\n rules={[\n {\n required: true,\n message: appConfigs.errors.fieldErrors.valueRequired,\n },\n ]}\n >\n <Select placeholder=\"Select minutes\">\n <Option key=\"00\" value=\"00\">\n 00\n </Option>\n <Option key=\"15\" value=\"15\">\n 15\n </Option>\n <Option key=\"30\" value=\"30\">\n 30\n </Option>\n <Option key=\"45\" value=\"45\">\n 45\n </Option>\n </Select>\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n </Form>\n </>\n );\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n scheduledList: state.reportSchedulesReducers.reportScheduledState.scheduledList,\n };\n};\n\nexport default connect(mapStateToProps, actions)(ScheduleMaintInfo);\n","import React from \"react\";\nimport { Drawer, Button, Space } from \"antd\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions/reportSchedules\";\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport ScheduleMaintInfo from \"./scheduleMaintInfo/ScheduleMaintInfo\";\n\ninterface Prop {\n scheduledList: any,\n scheduleMaintClose: Function\n}\n\nclass SchedulesMaint extends React.Component<Prop, {}> {\n\n onDrawerClose = () => {\n this.props.scheduleMaintClose(this);\n };\n\n render() {\n\n const { scheduledMaint } = this.props.scheduledList;\n\n return (\n <Drawer\n data-id=\"schedule-maint-drawer\"\n title={scheduledMaint.title}\n width={scheduledMaint.width}\n onClose={this.onDrawerClose}\n visible={scheduledMaint.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"schedule-maint-close\" type=\"default\" onClick={this.onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n\n <Button data-id=\"schedule-maint-submit\" type=\"primary\" form=\"scheduleMaintInfoForm\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.settings.form.submitButtonText}\n </Button>\n\n </Space>\n }\n >\n {\n <ScheduleMaintInfo />\n }\n\n </Drawer>\n );\n }\n\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n scheduledList: state.reportSchedulesReducers.reportScheduledState.scheduledList\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(SchedulesMaint);","import React, { Component } from \"react\";\nimport {\n Table,\n Button,\n Popover,\n Popconfirm,\n Input,\n Row,\n Col,\n Space,\n Tooltip,\n Switch,\n Typography,\n message,\n} from \"antd\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport history from \"../../utils/history\";\nimport {\n PlusOutlined,\n EditOutlined,\n DeleteOutlined,\n EllipsisOutlined,\n} from \"@ant-design/icons\";\nimport { connect } from \"react-redux\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport { closePopover } from \"../../utils/commonHelpers\";\nimport * as actions from \"./actions\";\nimport { localizeUtcDate, getPermissions } from \"../../utils/commonHelpers\";\nimport SchedulesMaint from \"./SchedulesMaint\";\nimport \"./schedules.css\";\n\nconst { Search } = Input;\nconst { Text } = Typography;\n\ninterface Prop {\n getReportSchedulesList: Function;\n context: any;\n scheduledList: any;\n scheduleMaintOpen: Function;\n permissions: any;\n scheduleSetPagination: Function;\n scheduleSetSearch: Function;\n scheduleStatus: Function;\n getOrgTags: Function;\n getScheduleOrgTags: Function;\n}\n\nclass ReportSchedules extends Component<Prop> {\n drawerWidth: number = Math.min(\n window.innerWidth,\n appConfigs.settings.drawers.defaultWidth\n );\n\n componentDidMount() {\n const reportPermissions = getPermissions(\n this.props.permissions.permissions.reports\n );\n if (!this.props.context.user.contextUserIsAdmin && !reportPermissions[1]) {\n history.push(\"/not-found\");\n } else {\n this.props.scheduleSetPagination(this.onPaginationChange);\n this.props.getReportSchedulesList(this, null, null, 1, null);\n }\n }\n\n onPaginationChange = (page: number) => {\n this.props.getReportSchedulesList(\n this,\n null,\n null,\n page,\n this.props.scheduledList.searchText\n );\n };\n\n confirmStatus = (record: any, appContext: any, action: string) => (\n <Popconfirm\n title={\n \"Are you sure to \" +\n (action === \"enable\" ? \"enable\" : \"disable\") +\n \" this schedule?\"\n }\n onCancel={closePopover}\n onConfirm={(e) => {\n this.onAction(e, record, action);\n }}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {action === \"enable\" && (\n <Tooltip title=\"Enable Schedule\">\n <Switch\n checkedChildren=\"on\"\n unCheckedChildren=\"off\"\n checked={record.active}\n />\n </Tooltip>\n )}\n {action !== \"enable\" && appContext.roleName.toLowerCase() === \"admin\" && (\n <Tooltip title=\"Disable Schedule\">\n <Switch\n checkedChildren=\"on\"\n unCheckedChildren=\"off\"\n checked={record.active}\n />\n </Tooltip>\n )}\n </div>\n </Popconfirm>\n );\n\n confirmDeletion = (record: any) => (\n <Popconfirm\n title={\n \"Are you absolutely sure to delete this schedule?\\n\\nThis action cannot be undone!\"\n }\n onCancel={closePopover}\n onConfirm={(e) => {\n this.onAction(e, record, \"delete\");\n }}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <div>\n {\n <Tooltip title=\"Delete schedule\">\n <Button\n data-id=\"schedule-delete-button\"\n type=\"default\"\n icon={<DeleteOutlined />}\n />\n </Tooltip>\n }\n </div>\n </Popconfirm>\n );\n\n onAction = (e: any, record: any, action: string) => {\n e.preventDefault();\n\n if (action === \"new\") {\n this.props.scheduleMaintOpen(\n this,\n \"New Schedule\",\n this.drawerWidth,\n {},\n action\n );\n this.props.getOrgTags(this, null, null, \"all\", record.orgId);\n this.props.getScheduleOrgTags(this, null, null, \"all\", record.orgId);\n \n } else if (action === \"edit\") {\n this.props.getScheduleOrgTags(this, null, null, \"all\", record.orgId);\n this.props.scheduleMaintOpen(\n this,\n \"Edit Schedule :: \" + record.scheduleName,\n this.drawerWidth,\n record,\n action\n );\n //this.props.getOrgTags(this, null, null, \"all\", record.orgId);\n \n } else if (\n action === \"enable\" ||\n action === \"disable\" ||\n action === \"delete\"\n ) {\n this.props.scheduleStatus(\n this,\n this.onStatusSuccess,\n null,\n record.scheduleId,\n action\n );\n }\n\n closePopover();\n };\n\n onStatusSuccess = (record: any, userId: string) => {\n message.success(\"Schedule has been successfully updated\");\n this.props.getReportSchedulesList(\n this,\n null,\n null,\n this.props.scheduledList.tableConfig.pagination.current,\n this.props.scheduledList.searchText\n );\n };\n\n onSearch = (searchText: string) => {\n let me = this;\n\n this.props.scheduleSetSearch(searchText || \"\");\n setTimeout(function () {\n me.props.getReportSchedulesList(me, null, null, 1, searchText);\n }, 100);\n };\n\n onSearchChange = (e: any) => {\n let value = e.target.value;\n this.props.scheduleSetSearch(value || \"\");\n };\n\n actions = (record: any, appContext: any, contextUser: any) => (\n <Popover\n content={\n <div className=\"center-div\">\n <Space size=\"large\">\n {record.active ? <Tooltip title=\"Edit Schedule\">\n <Button\n data-id=\"sch-edit-button\"\n type=\"default\"\n icon={<EditOutlined />}\n onClick={(e) => {\n this.onAction(e, record, \"edit\");\n }}\n /></Tooltip>: <Tooltip title=\"Please Enable Schedule To Edit\">\n <Button\n data-id=\"sch-edit-button\"\n type=\"default\"\n icon={<EditOutlined />}\n disabled\n />\n </Tooltip>}\n {this.props.context.user.contextUserIsAdmin &&\n this.confirmDeletion(record)}\n {!record.active &&\n this.props.context.user.contextUserIsAdmin &&\n this.confirmStatus(record, appContext, \"enable\")}\n {record.active &&\n this.props.context.user.contextUserIsAdmin &&\n this.confirmStatus(record, appContext, \"disable\")}\n </Space>\n </div>\n }\n title={<div className=\"center-div\">Actions</div>}\n trigger=\"click\"\n >\n <Button\n data-id=\"sch-actions-button\"\n type=\"default\"\n icon={<EllipsisOutlined />}\n />\n </Popover>\n );\n\n render() {\n const { contextUser, appContext } = this.props.context;\n const { tableConfig, tableData } = this.props.scheduledList;\n\n const tableColumns = [\n {\n title: \"Name\",\n dataIndex: \"scheduleName\",\n render: (scheduleName: string, record: any) => (\n <>\n {record.active.toString() !== \"true\" && (\n <>\n <Text type=\"danger\">{scheduleName}</Text>\n </>\n )}\n {record.active.toString() === \"true\" && <span>{scheduleName}</span>}\n </>\n ),\n },\n {\n title: \"Organization\",\n dataIndex: \"orgName\",\n },\n {\n title: \"Reports\",\n dataIndex: \"reports\",\n },\n {\n title: \"Org Tags\",\n dataIndex: \"orgTags\",\n },\n {\n title: \"Asset Tags\",\n dataIndex: \"tags\",\n }, \n {\n title: \"Frequency\",\n dataIndex: \"scheduled\",\n },\n {\n title: \"Scheduled Time\",\n dataIndex: \"scheduledTime\",\n render: (text: any, record: any) => (\n <>\n {record.scheduledTime ? (\n <span>{new Date(record.scheduledTime).toLocaleTimeString()}</span>\n ) : (\n <>{appConfigs.app.assets.offlineHavingNoDateText}</>\n )}\n </>\n ),\n },\n {\n title: \"Created By\",\n dataIndex: \"createdBy\",\n },\n {\n title: \"Last Run\",\n dataIndex: \"lastRun\",\n render: (lastRun: string, record: any) => (\n // <>{lastRun ? localizeUtcDate(lastRun, this.props.scheduledList.dateFormatOptions) : lastRun}</>\n <>\n {record.status !== \"success\" && (\n <>\n <Tooltip title=\"System failed to send the scheduled report. We will attempt to run manually.\">\n <Text type=\"warning\">\n {lastRun\n ? localizeUtcDate(\n lastRun,\n this.props.scheduledList.dateFormatOptions\n )\n : lastRun}\n </Text>\n </Tooltip>\n </>\n )}\n {record.status === \"success\" && (\n <span className=\"last-run-sucess-text\">\n {lastRun\n ? localizeUtcDate(\n lastRun,\n this.props.scheduledList.dateFormatOptions\n )\n : lastRun}\n </span>\n )}\n </>\n ),\n },\n\n {\n title: \"Actions\",\n key: \"action\",\n align: \"center\" as \"center\",\n fixed: 'right',\n render: (text: any, record: any) =>\n this.actions(record, appContext, contextUser),\n },\n ];\n\n return (\n <div data-id=\"schedules-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={6}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n Schedules\n </div>\n </div>\n </Col>\n\n <Col xs={24} lg={18} className=\"content-header-controls\">\n <Space size=\"middle\">\n <Search\n data-id=\"schedules-search-field\"\n key=\"search-field\"\n placeholder=\"Search by Org, Report, Name\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n className=\"search-field\"\n onSearch={this.onSearch}\n onChange={this.onSearchChange}\n value={this.props.scheduledList.searchText}\n />\n <Tooltip title=\"Create New Schedule\">\n <Button\n data-id=\"add-new-schedule-button\"\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={(e) => this.onAction(e, {}, \"new\")}\n >\n <span>Schedule</span>\n </Button>\n </Tooltip>\n </Space>\n </Col>\n </Row>\n <div className=\"mt-15\">\n <SchedulesMaint />\n <Table\n size='small'\n // scroll={{ x: 1200, y: 400 }}\n data-id=\"schedules-data\"\n {...tableConfig}\n rowKey={(record) => record.scheduleId}\n columns={tableColumns}\n dataSource={tableData}\n tableLayout='fixed'\n />\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n scheduledList:\n state.reportSchedulesReducers.reportScheduledState.scheduledList,\n };\n};\n\nexport default connect(mapStateToProps, actions)(ReportSchedules);\n","import React, { useEffect, useRef, useState } from 'react'\n\nimport * as am4core from \"@amcharts/amcharts4/core\";\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\nimport '@amcharts/amcharts4/charts';\nimport am4themes_material from \"@amcharts/amcharts4/themes/material\";\nimport am4themes_animated from \"@amcharts/amcharts4/themes/animated\";\n\nimport './fleetOverview.css'\n\nimport { connect, useDispatch } from \"react-redux\";\nimport * as rootActions from \"../../actions\";\nimport { Button, Card, Col, message, Row, Select, Statistic, Table, Tooltip } from 'antd';\nimport { ArrowDownOutlined, ArrowUpOutlined, DownloadOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport { getPercentageChange, numberWithCommas } from '../../utils/commonHelpers';\nimport moment from 'moment';\n\nam4core.useTheme(am4themes_material);\nam4core.useTheme(am4themes_animated);\n\n\nexport function useClickOutsideStats(ref: any) {\n\n const dispatch = useDispatch()\n \n useEffect(() => {\n\n function handleClickOutside(event: any) {\n /* prevent close on tooltip and select or on click outside */\n let doesCloseOn = [\n 'ant-tooltip-inner',\n 'ant-select-item-option-content',\n 'btn-flOv',\n 'ant-btn header-stats-big ant-btn-ghost',\n 'ant-select-item ant-select-item-option ant-select-item-option-active ant-select-item-option-selected',\n 'ant-select-item-empty',\n 'ant-empty-description',\n 'ant-empty-image',\n 'ant-empty-img-simple-path',\n 'ant-empty ant-empty-normal ant-empty-small',\n ]\n\n setTimeout(() => {\n if (ref.current && (!ref.current.contains(event.target) && !doesCloseOn.includes(event.target.className)) && ref.current.className == 'statsLayoutOpen') {\n dispatch({ type: \"SET_FLEET_STATS_VISIBILITY\", visible: false });\n dispatch({ type: \"SET_NOTIFICATION_VISIBILITY\", visible: false });\n }\n }, 20);\n \n }\n\n // Bind the event listener\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref]);\n}\n\ninterface Props {\n fleetStatsVisibility: Function,\n updateDm1DailyCount: Function,\n updateDm1HeatMap: Function,\n stats: any\n}\n\n\nconst FleetStatsOverview = (props: Props) => {\n\n const wrapperRef = useRef(null);\n useClickOutsideStats(wrapperRef)\n\n const { data } = props.stats\n const { dm1DailyCount, dm1HeatMapData } = props.stats\n\n const [selectedMasterTag7Days, setSelectedMasterTag7Days] = useState(\"\")\n const [selectedMasterTagHeatMap, setSelectedMasterTagHeatMap] = useState(\"\")\n const [DM1Percent, setDM1Percent] = useState(getPercentageChange(data.dm1CountYesterday , data.dm1Count))\n const [alertsPercent, setAlertsPercent] = useState(getPercentageChange(data.criticalAlertsCountYesterday, data.criticalAlertsCount))\n\n const getDm1DailyCountByAsset = (mastertag: string) => {\n setSelectedMasterTag7Days(mastertag)\n props.updateDm1DailyCount(mastertag, dailyCountGetFailure)\n }\n\n const getDm1DailyCountHeatMap = (mastertag: string) => {\n setSelectedMasterTagHeatMap(mastertag)\n props.updateDm1HeatMap(mastertag, dailyCountGetFailure)\n }\n\n const dailyCountGetFailure = (error:any) => {\n const errorCode:number = !error.response ? 999 : (error.response.status || 999);\n\n if (errorCode === 401) {\n message.error(\"Unauthorized data access.\");\n }\n \n if (errorCode > 400) {\n message.error(\"Error while retrieving data please try again\");\n } else {\n message.error(\"Unable to retrieve requested data\");\n }\n }\n\n const pad = (number:number) => {\n return (number < 10) ? (\"0\" + number) : number;\n }\n\n let DayNameArray = [moment().format('ddd').toUpperCase()]\n for (let index = 1; index < 7; index++) {\n DayNameArray.push(moment().subtract(index, 'day').format('ddd').toUpperCase())\n }\n\n /* update heatmap */\n useEffect(() => {\n\n let weeklyHeatMapData: any = [];\n \n if (dm1HeatMapData.length > 0) {\n\n if (dm1HeatMapData) {\n\n let AMPM = 'AM';\n let Hours = 0;\n let tmp = []\n for (let day = 0; day < 7; day++) { //0=Today's date\n for (let hour = 0; hour <= 23; hour++) { //00=12am\n if (hour >= 12) {\n AMPM = 'PM'; Hours = hour - 12;\n if (hour == 12) {\n Hours = hour;\n }\n } else {\n AMPM = 'AM';\n if (hour == 0) {\n Hours = 12\n } else {\n Hours = hour\n }\n }\n\n tmp = dm1HeatMapData.filter((item: any) => item['dayHour'] == (DayNameArray[day] + '-' + pad(hour)));\n\n weeklyHeatMapData.push({\n \"hour\": Hours + AMPM,\n \"weekday\": DayNameArray[day],\n \"value\": tmp.length > 0 ? tmp[0].count : 0\n })\n \n }\n }\n weeklyHeatMapData.reverse();\n }\n\n } else {\n weeklyHeatMapData = [];\n }\n\n\n /* HeatMap Chart */\n let chartHeatMap = am4core.create(\"chartHeatMap\", am4charts.XYChart);\n chartHeatMap.maskBullets = false;\n\n let xAxis = chartHeatMap.xAxes.push(new am4charts.CategoryAxis());\n let yAxis = chartHeatMap.yAxes.push(new am4charts.CategoryAxis());\n\n xAxis.dataFields.category = \"weekday\";\n yAxis.dataFields.category = \"hour\";\n\n xAxis.renderer.grid.template.disabled = true;\n xAxis.renderer.minGridDistance = 40;\n\n yAxis.renderer.grid.template.disabled = true;\n yAxis.renderer.inversed = true;\n yAxis.renderer.minGridDistance = 30;\n\n let seriesHeatMap = chartHeatMap.series.push(new am4charts.ColumnSeries());\n seriesHeatMap.dataFields.categoryX = \"weekday\";\n seriesHeatMap.dataFields.categoryY = \"hour\";\n seriesHeatMap.dataFields.value = \"value\";\n seriesHeatMap.sequencedInterpolation = true;\n seriesHeatMap.defaultState.transitionDuration = 3000;\n\n let bgColor = new am4core.InterfaceColorSet().getFor(\"background\");\n\n let columnTemplate = seriesHeatMap.columns.template;\n columnTemplate.strokeWidth = 1;\n columnTemplate.strokeOpacity = 0.2;\n // columnTemplate.stroke = bgColor;\n columnTemplate.tooltipText = \"{weekday}, {hour}: {value.workingValue.formatNumber('#.')}\";\n columnTemplate.width = am4core.percent(100);\n columnTemplate.height = am4core.percent(100);\n\n seriesHeatMap.heatRules.push({\n target: columnTemplate,\n property: \"fill\",\n min: am4core.color(bgColor),\n max: chartHeatMap.colors.getIndex(0)\n });\n\n // heat legend\n let heatLegend = chartHeatMap.bottomAxesContainer.createChild(am4charts.HeatLegend);\n heatLegend.width = am4core.percent(100);\n heatLegend.series = seriesHeatMap;\n heatLegend.valueAxis.renderer.labels.template.fontSize = 9;\n heatLegend.valueAxis.renderer.minGridDistance = 30;\n\n // heat legend behavior\n seriesHeatMap.columns.template.events.on(\"over\", function(event) {\n handleHover(event.target);\n })\n\n seriesHeatMap.columns.template.events.on(\"hit\", function(event) {\n handleHover(event.target);\n })\n\n function handleHover(column: any) {\n if (!isNaN(column.dataItem.value)) {\n heatLegend.valueAxis.showTooltipAt(column.dataItem.value)\n }\n else {\n heatLegend.valueAxis.hideTooltip();\n }\n }\n\n seriesHeatMap.columns.template.events.on(\"out\", function(event) {\n heatLegend.valueAxis.hideTooltip();\n })\n \n chartHeatMap.data = weeklyHeatMapData\n\n \n }, [dm1HeatMapData])\n\n\n /* Update Bar Chart */\n useEffect(() => {\n\n let chartBar = am4core.create(\"chartdivBar\", am4charts.XYChart);\n chartBar.colors.saturation = 0.4;\n\n let dailyData: any = []\n if (dm1DailyCount) {\n\n let dmDailyCountArr = JSON.parse(dm1DailyCount)\n let tmp = []\n\n for (let day = 0; day < 7; day++) { //0=Today's date\n\n tmp = dmDailyCountArr.filter((item: any) => item['day_name'] == (DayNameArray[day]))\n\n dailyData.push({\n day: DayNameArray[day],\n dm1Count: tmp.length > 0 ? tmp[0]['dm1count'] : 0\n })\n }\n dailyData.reverse();\n }\n \n\n if (dailyData.length == 0) {\n const noDataMessagecontainer = chartBar.chartContainer.createChild(am4core.Container);\n noDataMessagecontainer.align = 'center';\n noDataMessagecontainer.isMeasured = false;\n noDataMessagecontainer.x = am4core.percent(50);\n noDataMessagecontainer.horizontalCenter = 'middle';\n noDataMessagecontainer.y = am4core.percent(50);\n noDataMessagecontainer.verticalCenter = 'middle';\n noDataMessagecontainer.layout = 'vertical';\n\n const messageLabel = noDataMessagecontainer.createChild(am4core.Label);\n messageLabel.text = 'There is no data to show';\n messageLabel.textAlign = 'middle';\n messageLabel.maxWidth = 300;\n messageLabel.wrap = true;\n } else {\n chartBar.data = dailyData;\n }\n \n \n // Create axes\n let categoryAxis = chartBar.xAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"day\";\n categoryAxis.title.text = \"Day\";\n categoryAxis.renderer.minGridDistance = 30;\n\n let valueAxis = chartBar.yAxes.push(new am4charts.ValueAxis());\n valueAxis.title.text = \"DM1 Count\";\n\n // Create series\n let series = chartBar.series.push(new am4charts.ColumnSeries());\n series.dataFields.valueY = \"dm1Count\";\n series.dataFields.categoryX = \"day\";\n series.columns.template.tooltipText = \"Day: {categoryX}\\nTotal DM1: {valueY}\";\n series.sequencedInterpolation = true;\n series.defaultState.transitionDuration = 1000;\n series.sequencedInterpolationDelay = 100;\n series.columns.template.strokeOpacity = 0;\n\n series.columns.template.adapter.add(\"fill\", (fill, target) => {\n return am4core.color(\"#0092eb\")\n });\n \n var fillModifier = new am4core.LinearGradientModifier();\n fillModifier.brightnesses = [0, 1, 1, 0];\n fillModifier.offsets = [0, 0.45, 0.55, 1];\n fillModifier.gradient.rotation = 180;\n series.columns.template.fillModifier = fillModifier;\n \n var valueLabel = series.bullets.push(new am4charts.LabelBullet());\n valueLabel.label.text = \"{valueY}\";\n valueLabel.label.fontSize = 12;\n valueLabel.label.verticalCenter = \"bottom\"\n // valueLabel.label.dy = -10;\n\n \n }, [dm1DailyCount])\n\n\n /* on data change */\n useEffect(() => {\n\n /* Bar Chart */\n let chartBar = am4core.create(\"chartdivBar\", am4charts.XYChart);\n chartBar.colors.saturation = 0.4;\n\n let dailyData: any = []\n if (data.dmDailyCount) {\n\n let dmDailyCount = JSON.parse(data.dmDailyCount)\n let tmp = []\n\n for (let day = 0; day < 7; day++) { //0=Today's date\n\n tmp = dmDailyCount.filter((item: any) => item['day_name'] == (DayNameArray[day]))\n\n dailyData.push({\n day: DayNameArray[day],\n dm1Count: tmp.length > 0 ? tmp[0]['dm1count'] : 0\n })\n }\n dailyData.reverse();\n }\n\n // console.log(`dmDailyCount`, JSON.parse(data.dmDailyCount))\n\n if (dailyData.length == 0) {\n const noDataMessagecontainer = chartBar.chartContainer.createChild(am4core.Container);\n noDataMessagecontainer.align = 'center';\n noDataMessagecontainer.isMeasured = false;\n noDataMessagecontainer.x = am4core.percent(50);\n noDataMessagecontainer.horizontalCenter = 'middle';\n noDataMessagecontainer.y = am4core.percent(50);\n noDataMessagecontainer.verticalCenter = 'middle';\n noDataMessagecontainer.layout = 'vertical';\n\n const messageLabel = noDataMessagecontainer.createChild(am4core.Label);\n messageLabel.text = 'There is no data to show';\n messageLabel.textAlign = 'middle';\n messageLabel.maxWidth = 300;\n messageLabel.wrap = true;\n } else {\n chartBar.data = dailyData;\n }\n \n \n // Create axes\n let categoryAxis = chartBar.xAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"day\";\n categoryAxis.title.text = \"Day\";\n categoryAxis.renderer.minGridDistance = 30;\n\n let valueAxis = chartBar.yAxes.push(new am4charts.ValueAxis());\n valueAxis.title.text = \"DM1 Count\";\n\n // Create series\n let series = chartBar.series.push(new am4charts.ColumnSeries());\n series.dataFields.valueY = \"dm1Count\";\n series.dataFields.categoryX = \"day\";\n series.columns.template.tooltipText = \"Day: {categoryX}\\nTotal DM1: {valueY}\";\n series.sequencedInterpolation = true;\n series.defaultState.transitionDuration = 1000;\n series.sequencedInterpolationDelay = 100;\n series.columns.template.strokeOpacity = 0;\n\n series.columns.template.adapter.add(\"fill\", (fill, target) => {\n return am4core.color(\"#0092eb\")\n });\n \n var fillModifier = new am4core.LinearGradientModifier();\n fillModifier.brightnesses = [0, 1, 1, 0];\n fillModifier.offsets = [0, 0.45, 0.55, 1];\n fillModifier.gradient.rotation = 180;\n series.columns.template.fillModifier = fillModifier;\n \n \n var valueLabel = series.bullets.push(new am4charts.LabelBullet());\n valueLabel.label.text = \"{valueY}\";\n valueLabel.label.fontSize = 12;\n valueLabel.label.verticalCenter = \"bottom\"\n // valueLabel.label.dy = -10;\n\n\n\n /* Pie Chart */\n let chartPie = am4core.create(\"chartdivPie\", am4charts.PieChart);\n\n chartPie.data = [{\n \"status\": \"Active Assets\",\n \"count\": data.gatewaysCount - data.expiredGateways - data.whitelistedGateways,\n \"color\": am4core.color(\"#30b08e\")\n }, {\n \"status\": \"Inactive Assets\",\n \"count\": data.expiredGateways,\n \"color\": am4core.color(\"#055cb0\")\n }, {\n \"status\": \"Whitelisted Assets\",\n \"count\": data.whitelistedGateways,\n \"color\": am4core.color(\"#71abff\")\n }];\n \n chartPie.innerRadius = am4core.percent(40);\n chartPie.hiddenState.properties.innerRadius = am4core.percent(0);\n chartPie.hiddenState.properties.radius = am4core.percent(100);\n\n chartPie.legend = new am4charts.Legend();\n chartPie.legend.position = \"right\";\n chartPie.legend.labels.template.text = \"[bold {color}]{name}[/]\";\n \n let pieSeries = chartPie.series.push(new am4charts.PieSeries());\n \n\n pieSeries.dataFields.value = \"count\";\n pieSeries.dataFields.category = \"status\";\n\n pieSeries.slices.template.stroke = am4core.color(\"#2a4858\");\n pieSeries.slices.template.strokeWidth = 1;\n pieSeries.slices.template.strokeOpacity = 0.8;\n pieSeries.slices.template.showOnInit = true;\n pieSeries.slices.template.hiddenState.properties.shiftRadius = 1;\n pieSeries.slices.template.propertyFields.fill = \"color\";\n\n pieSeries.legendSettings.valueText = \"[bold {color}]{value}[/]\";\n\n // Disable ticks and labels\n pieSeries.labels.template.disabled = true;\n pieSeries.ticks.template.disabled = true;\n\n // let rgm = new am4core.RadialGradientModifier();\n // rgm.brightnesses.push(-0.8, -0.8, -0.5, 0, - 0.5);\n // pieSeries.slices.template.fillModifier = rgm;\n // pieSeries.slices.template.strokeModifier = rgm;\n // pieSeries.slices.template.strokeOpacity = 0.4;\n // pieSeries.slices.template.strokeWidth = 0;\n \n\n setDM1Percent(getPercentageChange(data.dm1CountYesterday , data.dm1Count))\n setAlertsPercent(getPercentageChange(data.criticalAlertsCountYesterday, data.criticalAlertsCount))\n\n\n\n /* HeatMap Chart */\n let weeklyHeatMapData: any = [];\n let dmHeatMap = JSON.parse(data.dmHeatMap)\n\n if (dmHeatMap) {\n\n if (dmHeatMap.length > 0) {\n\n let AMPM = 'AM';\n let Hours = 0;\n let tmp = []\n for (let day = 0; day < 7; day++) { //0=Today's date\n for (let hour = 0; hour <= 23; hour++) { //00=12am\n if (hour >= 12) {\n AMPM = 'PM'; Hours = hour - 12;\n if (hour == 12) {\n Hours = hour;\n }\n } else {\n AMPM = 'AM';\n if (hour == 0) {\n Hours = 12\n } else {\n Hours = hour\n }\n }\n\n tmp = dmHeatMap.filter((item: any) => item['day_hour'] == (DayNameArray[day] + '-' + pad(hour)));\n \n weeklyHeatMapData.push({\n \"hour\": Hours + AMPM,\n \"weekday\": DayNameArray[day],\n \"value\": tmp.length > 0 ? tmp[0].count : 0\n })\n \n }\n }\n weeklyHeatMapData.reverse();\n }\n\n } else {\n weeklyHeatMapData = [];\n }\n\n // console.log('moment().utcOffset :>> ', moment().utcOffset()/60);\n // console.log(`dmHeatMap`, dmHeatMap)\n // console.log(`weeklyHeatMapData`, weeklyHeatMapData)\n\n /* HeatMap Chart */\n let chartHeatMap = am4core.create(\"chartHeatMap\", am4charts.XYChart);\n chartHeatMap.maskBullets = false;\n\n let xAxis = chartHeatMap.xAxes.push(new am4charts.CategoryAxis());\n let yAxis = chartHeatMap.yAxes.push(new am4charts.CategoryAxis());\n\n xAxis.dataFields.category = \"weekday\";\n yAxis.dataFields.category = \"hour\";\n\n xAxis.renderer.grid.template.disabled = true;\n xAxis.renderer.minGridDistance = 40;\n\n yAxis.renderer.grid.template.disabled = true;\n yAxis.renderer.inversed = true;\n yAxis.renderer.minGridDistance = 30;\n\n let seriesHeatMap = chartHeatMap.series.push(new am4charts.ColumnSeries());\n seriesHeatMap.dataFields.categoryX = \"weekday\";\n seriesHeatMap.dataFields.categoryY = \"hour\";\n seriesHeatMap.dataFields.value = \"value\";\n seriesHeatMap.sequencedInterpolation = true;\n seriesHeatMap.defaultState.transitionDuration = 3000;\n\n let bgColor = new am4core.InterfaceColorSet().getFor(\"background\");\n\n let columnTemplate = seriesHeatMap.columns.template;\n columnTemplate.strokeWidth = 1;\n columnTemplate.strokeOpacity = 0.2;\n // columnTemplate.stroke = bgColor;\n columnTemplate.tooltipText = \"{weekday}, {hour}: {value.workingValue.formatNumber('#.')}\";\n columnTemplate.width = am4core.percent(100);\n columnTemplate.height = am4core.percent(100);\n\n seriesHeatMap.heatRules.push({\n target: columnTemplate,\n property: \"fill\",\n min: am4core.color(bgColor),\n max: chartHeatMap.colors.getIndex(0)\n });\n\n // heat legend\n let heatLegend = chartHeatMap.bottomAxesContainer.createChild(am4charts.HeatLegend);\n heatLegend.width = am4core.percent(100);\n heatLegend.series = seriesHeatMap;\n heatLegend.valueAxis.renderer.labels.template.fontSize = 9;\n heatLegend.valueAxis.renderer.minGridDistance = 30;\n\n // heat legend behavior\n seriesHeatMap.columns.template.events.on(\"over\", function(event) {\n handleHover(event.target);\n })\n\n seriesHeatMap.columns.template.events.on(\"hit\", function(event) {\n handleHover(event.target);\n })\n\n function handleHover(column: any) {\n if (!isNaN(column.dataItem.value)) {\n heatLegend.valueAxis.showTooltipAt(column.dataItem.value)\n }\n else {\n heatLegend.valueAxis.hideTooltip();\n }\n }\n\n seriesHeatMap.columns.template.events.on(\"out\", function(event) {\n heatLegend.valueAxis.hideTooltip();\n })\n \n chartHeatMap.data = weeklyHeatMapData\n \n\n }, [data])\n\n\n /* Top 5 Assets by DM1 Count */\n let dataSource: any = []\n if (data.assetsDmCountJSON) {\n JSON.parse(data.assetsDmCountJSON).map((asset:any, index:number) => {\n dataSource.push({key: index, name: asset.nickname, count: asset.dmcount})\n })\n }\n \n const columns = [\n {\n title: 'Asset Name',\n dataIndex: 'name',\n key: 'key',\n },\n {\n title: 'DM 1 Count',\n dataIndex: 'count',\n key: 'key',\n },\n ];\n\n return (\n <div ref={wrapperRef} className={`${props.stats.visible ? \"statsLayoutOpen\" : \"statsLayoutClose\"}` }>\n <Row gutter={[8*1, 8*1]} >\n <Col className={`${props.stats.visible ? \"slideTop1\" : \"slideTop1Reversed\"} `} xs={24} sm={24} md={12} lg={12} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#ff9c4a\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 50 }} gutter={[0,0]}>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ position: 'absolute', marginTop: \"-8px\", color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.dm1AssetsCount) } Assets</span><br />\n <span style={{ position: 'absolute', marginTop: \"5px\" }}>(Assets with DM1 alerts past 24 Hours)</span>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n <Col className={`${props.stats.visible ? \"slideTop1\" : \"slideTop1Reversed\"}`} xs={24} sm={24} md={12} lg={12} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#fc2d42\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 50 }} gutter={[0,0]}>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ position: 'absolute', marginTop: \"-8px\", color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.criticalAlertsAssetsCount) } Assets</span><br />\n <span style={{ position: 'absolute', marginTop: \"5px\" }}>(Assets with critical alerts past 24 Hours)</span>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n\n <Col className={`${props.stats.visible ? \"slideTop1\" : \"slideTop1Reversed\"}`} xs={24} sm={24} md={12} lg={12} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#20c997\" , backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\" , borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 50 }} gutter={[0,0]}>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ position: 'absolute', marginTop: \"-8px\", color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.activeUsers) } Users</span><br />\n <span style={{ position: 'absolute', marginTop: \"5px\" }}>(Active sessions within last hour)</span>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n\n\n\n\n \n <Col className={`${props.stats.visible ? \"slideTop1\" : \"slideTop1Reversed\"} `} xs={24} sm={24} md={12} lg={12} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#fd7e14\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.dm1Count) } DM1 Alerts</span>\n <span>(Last 24 Hours)</span>\n </Col>\n <Col span={24} >\n { parseFloat(DM1Percent) >= 0 ?\n <ArrowUpOutlined style={{ fontSize: 24, fontWeight: \"bolder\", marginRight: '3px', color: \"white\" }} />\n :\n <ArrowDownOutlined style={{ fontSize: 24, fontWeight: \"bolder\", marginRight: '3px', color: \"white\" }} />\n }\n <span style={{ color: \"white\" }}><span style={{ fontSize: 22 }}>{numberWithCommas(Math.abs(parseInt(DM1Percent.split(\".\")[0])))}</span><span>.{DM1Percent.split(\".\")[1]} % (From prior 48h's { numberWithCommas(data.dm1CountYesterday) } alerts)</span></span>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n <Col className={`${props.stats.visible ? \"slideTop1\" : \"slideTop1Reversed\"}`} xs={24} sm={24} md={12} lg={12} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#f41127\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.criticalAlertsCount) } Critical Alerts</span>\n <span>(Last 24 Hours)</span>\n </Col>\n <Col span={24} >\n { parseFloat(alertsPercent) >= 0 ?\n <ArrowUpOutlined style={{ fontSize: 24, fontWeight: \"bolder\", marginRight: '3px', color: \"white\" }} />\n :\n <ArrowDownOutlined style={{ fontSize: 24, fontWeight: \"bolder\", marginRight: '3px', color: \"white\" }} />\n }\n <span style={{ color: \"white\" }}><span style={{ fontSize: 22 }}>{numberWithCommas(Math.abs(parseInt(alertsPercent.split(\".\")[0])))}</span><span>.{alertsPercent.split(\".\")[1]} % (From prior 48h's { numberWithCommas(data.criticalAlertsCountYesterday) } alerts)</span></span>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n <Col className={`${props.stats.visible ? \"slideTop1\" : \"slideTop1Reversed\"}`} xs={24} sm={24} md={12} lg={12} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#20c997\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.onlineCount) } ONLINE</span>\n <span style={{ color: \"white\" }}>(As of today {moment(props.stats.timestamp).format('h:mmA')})</span>\n </Col>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ color: \"#4a4a4a\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.offlineCount) } OFFLINE</span>\n <span style={{ color: \"#4a4a4a\" }}>(Last seen 7 days ago)</span>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n\n \n\n {/* <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card className={`${data.expiringSoon > 0 ? 'changeColor' : ''}`} size=\"small\" style={{ backgroundColor: \"#d1d1d1\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"#4a4a4a\" }} span={24}>\n <span style={{ color: \"#4a4a4a\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.expiringSoon) } Assets</span>\n <span>(Expiring within 60 days)</span>\n <Button className='downloadStatsButton' style={{ backgroundColor: 'white' }} type=\"ghost\">\n <DownloadOutlined style={{ fontSize: \"19px\", color: 'black' }} />\n </Button>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card className={`${data.expiredGateways > 0 ? 'changeColor' : ''}`} size=\"small\" style={{ backgroundColor: \"#d1d1d1\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"#4a4a4a\" }} span={24}>\n <span style={{ color: \"#4a4a4a\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.expiredGateways) } Assets</span>\n <span>(Already expired)</span>\n <Button className='downloadStatsButton' style={{ backgroundColor: 'white' }} type=\"ghost\">\n <DownloadOutlined style={{ fontSize: \"19px\", color: 'black' }} />\n </Button>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={8} lg={8} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card className={`${data.expiredGateways > 0 ? 'changeColor' : ''}`} size=\"small\" style={{ backgroundColor: \"#d1d1d1\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"#4a4a4a\" }} span={24}>\n <span style={{ color: \"#4a4a4a\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.expiredGateways) } Assets</span>\n <span>(Already expired)</span>\n <Button className='downloadStatsButton' style={{ backgroundColor: 'white' }} type=\"ghost\">\n <DownloadOutlined style={{ fontSize: \"19px\", color: 'black' }} />\n </Button>\n </Col>\n </Row>\n </Card>\n </div>\n </Col> */}\n\n <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={24} lg={24} xl={24}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#6f42c1\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.outsideGeofenceCount) } Assets</span>\n <span>(Reported Outside Geofence(s))</span>\n </Col>\n <Col style={{ color: \"white\" }} span={24}>\n <span style={{ color: \"white\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.insideGeofenceCount) } Assets</span>\n <span>(Reported Inside Geofence(s))</span>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={12} lg={12} xl={8}></Col>\n <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={12} lg={12} xl={8}></Col>\n\n <Col className={`${props.stats.visible ? \"slideTop3\" : \"slideTop3Reversed\"}`} xs={12} sm={12} md={12} lg={12} xl={12}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#f0f0f0\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", minHeight: 305 }} title={<><span style={{ fontSize: 18 }}>Top 5 Assets by DM1 Count</span> <span style={{ fontSize: 14 }}>(Last 7 Days)</span> <Tooltip title=\"Shows top five assets by overall DM1 count regardless of DM1 type\"><InfoCircleOutlined style={{ color: \"#0d6efd\", marginLeft: \"2px\"}} /></Tooltip></> } >\n <Table size=\"small\" dataSource={dataSource} columns={columns} pagination={false} />\n </Card>\n </div>\n </Col>\n\n\n\n <Col className={`${props.stats.visible ? \"slideTop3\" : \"slideTop3Reversed\"}`} xs={12} sm={12} md={12} lg={12} xl={12}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#f0f0f0\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\" }} title={<><span style={{ fontSize: 18 }}>Assets Status</span> <span style={{ fontSize: 14 }}>(Total of { data.gatewaysCount } Assets)</span> <Tooltip title=\"Shows assets count based on current status (Active, Inactive or Whitelisted)\"><InfoCircleOutlined style={{ color: \"#0d6efd\", marginLeft: \"2px\"}} /></Tooltip></> } >\n <Row style={{ height: 235 }} gutter={[0, 0]}>\n <Col span={24}>\n <div id=\"chartdivPie\" style={{ width: '100%', height: '100%' }}></div>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n\n <Col className={`${props.stats.visible ? \"slideTop4\" : \"slideTop4Reversed\"}`} xs={12} sm={12} md={12} lg={12} xl={12}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#f0f0f0\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\" }} title={\n <Row gutter={[0, 0]}>\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <span style={{ fontSize: 18 }}>DM1 Count By Day </span>\n <span style={{ fontSize: 14 }}>{selectedMasterTag7Days == '' ? \"(Overall Fleet Health)\" : `(${selectedMasterTag7Days})`}</span>\n <Tooltip title=\"Shows DM1 count per day for all assets for the last 7 days (You can also select specific asset from drop down list to get asset's details).\"><InfoCircleOutlined style={{ color: \"#0d6efd\", marginLeft: \"2px\"}} /></Tooltip>\n </Col>\n\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n\n <Select\n placeholder=\"Select Asset\"\n style={{ width: '100%' }}\n showSearch\n onChange={getDm1DailyCountByAsset}\n optionFilterProp=\"children\"\n filterOption={(input, option) => {\n return (option?.children[0]?.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option?.children[2]?.toLowerCase().indexOf(input.toLowerCase()) >= 0)\n }}\n >\n {\n props.stats.assetsWithDm1.map((asset:any) => (\n <Select.Option key={asset.mastertag} value={asset.mastertag}>{asset.nickname} / {asset.mastertag}</Select.Option>\n ))\n \n }\n </Select>\n \n </Col>\n \n \n \n \n </Row>\n }>\n <Row gutter={[0, 0]}>\n <Col style={{ height: 350 }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <div id=\"chartdivBar\" style={{ width: '100%', height: '100%', margin: \"10px auto\" }}></div>\n </Col>\n \n \n </Row>\n </Card>\n </div>\n </Col>\n\n\n <Col className={`${props.stats.visible ? \"slideTop4\" : \"slideTop4Reversed\"}`} xs={12} sm={12} md={12} lg={12} xl={12}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card size=\"small\" style={{ backgroundColor: \"#f0f0f0\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\" }} title={\n <Row gutter={[0, 0]}>\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n <span style={{ fontSize: 18 }}>DM1 Count By Day </span>\n <span style={{ fontSize: 14 }}>{selectedMasterTagHeatMap == '' ? \"(Overall Fleet Health)\" : `(${selectedMasterTagHeatMap})`}</span>\n <Tooltip title=\"Shows DM1 count per hour for all assets for the last 7 days (You can select specific asset from drop down list to get asset's details)\"><InfoCircleOutlined style={{ color: \"#0d6efd\", marginLeft: \"2px\"}} /></Tooltip>\n </Col>\n\n <Col xs={24} sm={24} md={24} lg={24} xl={24}>\n\n <Select\n placeholder=\"Select Asset\"\n style={{ width: '100%' }}\n showSearch\n onChange={getDm1DailyCountHeatMap}\n optionFilterProp=\"children\"\n filterOption={(input, option) => {\n return (option?.children[0]?.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option?.children[2]?.toLowerCase().indexOf(input.toLowerCase()) >= 0)\n }}\n >\n {\n props.stats.assetsWithDm1.map((asset:any) => (\n <Select.Option key={asset.mastertag} value={asset.mastertag}>{asset.nickname} / {asset.mastertag}</Select.Option>\n ))\n }\n </Select>\n \n </Col>\n \n \n \n \n </Row>\n }>\n <Row gutter={[0, 0]}>\n <Col style={{ height: 350 }} xs={24} sm={24} md={24} lg={24} xl={24}>\n <div id=\"chartHeatMap\" style={{ width: '100%', height: '100%', margin: \"10px auto\" }}></div>\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n\n\n {/* <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={12} lg={12} xl={8}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card style={{ borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }}>\n <Row style={{ height: 55 }} gutter={[0,0]}>\n <Col style={{ color: \"#4a4a4a\" }} span={24}>\n <Statistic\n title=\"Active\"\n value={11.28}\n precision={2}\n valueStyle={{ color: '#3f8600' }}\n prefix={<ArrowUpOutlined />}\n suffix=\"%\"\n />\n </Col>\n </Row>\n </Card>\n </div>\n </Col> */}\n\n <Col className={`${props.stats.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={24} lg={24} xl={24}>\n <span>* All times are in UTC.</span>\n </Col>\n\n </Row>\n </div>\n )\n\n}\n\n\n\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n stats: state.contextReducer.stats,\n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState,\n permissions: state.contextReducer.data,\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n }\n)(React.memo(FleetStatsOverview));","import React, { useEffect, useRef, useState } from 'react'\n\nimport './fleetOverview.css'\n\nimport { connect, useDispatch } from \"react-redux\";\nimport * as rootActions from \"../../actions\";\nimport { Button, Card, Col, message, Row, Select, Statistic, Table, Tooltip } from 'antd';\nimport { DownloadOutlined } from '@ant-design/icons';\nimport { getPercentageChange, numberWithCommas } from '../../utils/commonHelpers';\nimport moment from 'moment';\n\n\nexport function useClickOutsideNotifications(ref: any) {\n\n const dispatch = useDispatch()\n \n useEffect(() => {\n\n function handleClickOutside(event: any) {\n /* prevent close on tooltip and select or on click outside */\n let doesCloseOn = [\n 'ant-tooltip-inner',\n 'ant-select-item-option-content',\n 'btn-notification',\n 'ant-btn header-notifications-big ant-btn-ghost',\n 'ant-select-item ant-select-item-option ant-select-item-option-active ant-select-item-option-selected',\n 'ant-select-item-empty',\n 'ant-empty-description',\n 'ant-empty-image',\n 'ant-empty-img-simple-path',\n 'ant-empty ant-empty-normal ant-empty-small',\n ]\n\n setTimeout(() => {\n if (ref.current && (!ref.current.contains(event.target) && !doesCloseOn.includes(event.target.className)) && ref.current.className == 'notificationsLayoutOpen') {\n dispatch({ type: \"SET_NOTIFICATION_VISIBILITY\", visible: false });\n dispatch({ type: \"SET_FLEET_STATS_VISIBILITY\", visible: false });\n }\n }, 20);\n\n \n \n }\n\n // Bind the event listener\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref]);\n}\n\ninterface Props {\n notificationVisibility: Function,\n notifications: any\n stats: any\n}\n\n\nconst NotificationsOverview = (props: Props) => {\n\n const wrapperRef = useRef(null);\n useClickOutsideNotifications(wrapperRef)\n\n const { data } = props.stats\n\n\n const pad = (number:number) => {\n return (number < 10) ? (\"0\" + number) : number;\n }\n\n let DayNameArray = [moment().format('ddd').toUpperCase()]\n for (let index = 1; index < 7; index++) {\n DayNameArray.push(moment().subtract(index, 'day').format('ddd').toUpperCase())\n }\n\n\n return (\n <div ref={wrapperRef} className={`${props.notifications.visible ? \"notificationsLayoutOpen\" : \"notificationsLayoutClose\"}` }>\n <Row gutter={[8*1, 8*1]} >\n \n <Col className={`${props.notifications.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={8} lg={12} xl={12}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card className={`${data.expiringSoon > 0 ? '' : ''}`} size=\"small\" style={{ backgroundColor: \"#d1d1d1\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"#4a4a4a\" }} span={24}>\n <span style={{ color: \"#4a4a4a\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.expiringSoon) } Assets</span>\n <span>(Contracts Expiring Within 60 Days)</span>\n {/* <Button className='downloadStatsButton' style={{ backgroundColor: 'white' }} type=\"ghost\">\n <DownloadOutlined style={{ fontSize: \"19px\", color: 'black' }} />\n </Button> */}\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n <Col className={`${props.notifications.visible ? \"slideTop2\" : \"slideTop2Reversed\"}`} xs={24} sm={24} md={8} lg={12} xl={12}>\n <div style={{ padding: '8px 8px', borderRadius: '3px' }}>\n <Card className={`${data.expiredGateways > 0 ? 'changeColor' : ''}`} size=\"small\" style={{ backgroundColor: \"#d1d1d1\", backgroundImage: \"linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))\", borderRadius: \"5px\", padding: \"1px\", margin: \"1px\" }} >\n <Row style={{ height: 80 }} gutter={[0,0]}>\n <Col style={{ color: \"#4a4a4a\" }} span={24}>\n <span style={{ color: \"#4a4a4a\", fontSize: 26, marginRight: \"6px\" }}>{ numberWithCommas(data.expiredGateways) } Assets</span>\n <span>(Expired Contracts)</span>\n {/* <Button className='downloadStatsButton' style={{ backgroundColor: 'white' }} type=\"ghost\">\n <DownloadOutlined style={{ fontSize: \"19px\", color: 'black' }} />\n </Button> */}\n </Col>\n </Row>\n </Card>\n </div>\n </Col>\n\n \n\n </Row>\n </div>\n )\n\n}\n\n\n\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n notifications: state.contextReducer.notifications,\n stats: state.contextReducer.stats,\n fleetOverviewState: state.fleetOverviewReducers.fleetOverviewState,\n permissions: state.contextReducer.data,\n };\n};\n\nexport default connect(\n mapStateToProps,\n { \n ...rootActions,\n }\n)(React.memo(NotificationsOverview));","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function getCalibrations(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: any,\n sortColumn: any,\n sortDirection: any,\n searchText: any,\n category: any,\n testMode:number,\n page: number = 1\n) {\n return (dispatch: any) => {\n Axios.get(\n // appConfigs.server.URL + \"/ui/api/cmns-csu/calibrations?testMode=\"+testMode, {\n appConfigs.server.URL + \"/ui/api/cmns-csu/calibrations\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId,\n sortColumn: sortColumn,\n sortDirection: sortDirection,\n category: category,\n searchText: searchText,\n testMode : testMode,\n }\n })\n .then(response => {\n if (callbackFnSuccess != null) { \n let record = response.data == null || (response.data|| 0) === 0 ? {} : response.data;\n callbackFnSuccess(record);\n }\n dispatch({\n type: \"CSU_ALL_DATA\",\n payload: {\n data: response.data,\n page: page\n }\n });\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n //errorResponse(error);\n });\n //dispatch({ type: \"ASSETS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n}\n\nexport function getOTAHistory(\n callbackFnSuccess: any,\n callbackFnFailure: any,\n orgId: any,\n sortColumn: any,\n sortDirection: any,\n searchText: any,\n typeText: string,\n page: number = 1, \n pageSize: number\n) {\n // console.log(\"getOTAHistory typeText=\", typeText)\n return (dispatch: any) => {\n Axios.get(\n // appConfigs.server.URL + \"/ui/api/cmns/getCalibrations?\", {\n appConfigs.server.URL + \"/ui/api/cmns-csu/status-history\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgId: orgId,\n sortColumn: sortColumn,\n sortDirection: sortDirection,\n searchText: searchText, \n type: typeText,\n page: page,\n pageSize: pageSize\n }\n })\n .then(response => {\n dispatch({\n type: \"CSU_HISTORY_DATA\",\n payload: {\n data: response.data,\n page: page\n }\n });\n if (callbackFnSuccess != null) { \n let record = response.data == null || (response.data|| 0) === 0 ? {} : response.data;\n //callbackFnSuccess(record);\n }\n \n })\n .catch(function (error) {\n console.log(\"history API returns error\", error)\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n //errorResponse(error);\n });\n //dispatch({ type: \"ASSETS_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n}\n\nexport function csuMaintClose() { \n return (dispatch: any) => {\n dispatch({ type: \"CSU_MAINT_CLOSE\" });\n };\n}\n\nexport function assetMaintTabChange(\n activeTab: string\n) {\n return (dispatch: any) => {\n dispatch({ type: \"CSU_MAINT_TAB_CHANGE\", activeTab: activeTab });\n };\n}\n\n\nexport function csuMaintOpen(\n title: string,\n width: number,\n record: any,\n callbackFnSuccess?: any,\n callbackFnFailure?: any,\n) {\n return (dispatch: any) => {\n dispatch({ type: \"CALIBRATION_MAINT_OPEN\", payload: {title: title, width: width, record: record} });\n };\n}\n//calibrationMaintOpen(title, drawerWidth, record){\n\n\n\n\nexport function processAction(\n data:any,\n actionType: any,\n callbackFnSuccess: any,\n callbackFnFailure: any,\n startStep: any = null\n) {\n return(dispatch:any) => {\n // if(actionType === 'approve update' || actionType === 'cancel update') {\n Axios.post(\n appConfigs.server.URL + \"/ui/api/cmns-csu/processAction\", data, {\n responseType: \"json\",\n headers: {},\n params: {\n actionType: actionType,\n startStep: startStep\n }\n })\n .then(response => {\n if (callbackFnSuccess != null) { \n let record = (response.data.data.OTA == null || (response.data.data.OTA.length || 0) === 0) ? {} : response.data.data.OTA;\n callbackFnSuccess(record, actionType);\n }\n })\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(error);\n }\n //errorResponse(error);\n });\n //}\n // else if(actionType === 'deny update') {\n // debugger;\n // let data1 = {\n // \"systemJobId\": \"e45db8f4-bab5-4fd0-990a-ae1ab0a06789\",\n // \"csuJobId\": \"e45db8f4-bab5-4fd0-990a-ae1ab0a06596\",\n // \"systemSoftwareName\": \"POLASH\",\n // \"systemSoftwareVersion\": \"2023-09-15T16:06:08Z\",\n // \"address\": 0,\n // \"fileType\": \"pendingCal\",\n // \"version\": \"2023-09-26T16:06:08Z\",\n // \"operation\": \"update\",\n // \"priority\": 4,\n // \"order\": 1,\n // \"status\": \"sendFailed\",\n // \"code\": \"500\",\n // \"message\": \"NRC error etc\",\n // \"retries\": 0\n // }\n // Axios.post(\n // appConfigs.server.URL + \"/api/csu/GATEWAY/QW7J2OY8/status\", data1, {\n // responseType: \"json\", \n // headers: {},\n // params: {\n // boxId: '20094029865',\n // esn: '78000001'\n // }\n // })\n // .then(response => {\n // if (callbackFnSuccess != null) { \n // // let record = response.data.data.OTA == null || (response.data.data.OTA.length || 0) === 0 ? {} : response.data.data.OTA;\n // // callbackFnSuccess(record);\n // console.log(\"RESPONSE: \"+ JSON.stringify(response));\n // }\n // })\n // .catch(function (error) {\n // if (callbackFnFailure != null) {\n // callbackFnFailure(error);\n // }\n // //errorResponse(error);\n // });\n // }\n\n }\n}\n\nexport function csuSetPaginationForAll(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CSU_ALL_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n}\n\nexport function setSearch(search:any) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_SEARCH\", search: search });\n }\n}\n\nexport function csuSetPaginationForHistory(\n onPaginationChange: any \n) {\n return (dispatch: any) => {\n dispatch({ type: \"CSU_HISTORY_SET_PAGINATION\", onPaginationChange: onPaginationChange });\n }\n} ","import { Descriptions } from \"antd\";\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions/csu\";\ninterface Props { \n context: any;\n permissions: any;\n tabData: any;\n csuList: any;\n csus: any;\n getCalibrations: Function;\n }\n\nconst CSUInfo: React.FC<Props> = (props) => {\n const { csuList } = props;\n let descriptionSpan:number = window.innerWidth > 700 ? 0 : 1;\n console.log(\"RECORD DATA: \"+ JSON.stringify(csuList));\n console.log(\"RECORD DATA INFO: \"+ JSON.stringify(csuList.record.info));\n return(\n \n <>\n <Descriptions bordered column={2}>\n\n <Descriptions.Item label=\"Esn\" span={1 + descriptionSpan}>{(csuList?.record)?(csuList.record.esn? csuList.record.esn:null):null}</Descriptions.Item>\n <Descriptions.Item label=\"Box Id\" span={1 + descriptionSpan}>{(csuList?.record)?(csuList.record.boxId? csuList.record.boxId:null):null}</Descriptions.Item>\n\n <Descriptions.Item label=\"Address\" span={1 + descriptionSpan}>{(csuList?.record)?(csuList.record.address? csuList.record.address:null):null}</Descriptions.Item>\n <Descriptions.Item label=\"VIN\" span={1 + descriptionSpan}>{(csuList?.record?.info)? (csuList.record.vin) :null}</Descriptions.Item>\n \n <Descriptions.Item label=\"Current Version\" span={1 + descriptionSpan}>{(csuList?.record)?(csuList.record.currentVersion? csuList.record.currentVersion:null):null}</Descriptions.Item>\n <Descriptions.Item label=\"New Version\" span={1 + descriptionSpan}>{(csuList?.record)?(csuList.record.newVersion? csuList.record.newVersion:null):null}</Descriptions.Item>\n \n <Descriptions.Item label=\"Telematics Version\" span={1 + descriptionSpan}>{(csuList?.record?.info)?(JSON.parse(csuList.record.info).telematicsVesion? JSON.parse(csuList.record.info).telematicsVesion:null):null}</Descriptions.Item>\n <Descriptions.Item label=\"Telematics Supplier Id\" span={1 + descriptionSpan}>{(csuList?.record?.info)?(JSON.parse(csuList.record.info).telematicsSupplierId?JSON.parse(csuList.record.info).telematicsSupplierId:null):null}</Descriptions.Item>\n\n <Descriptions.Item label=\"OTA Status\" span={1 + descriptionSpan}>{(csuList?.record)?(csuList.record.otaStatus? csuList.record.otaStatus:null):null}</Descriptions.Item>\n <Descriptions.Item label=\"OTA code\" span={1 + descriptionSpan}>{(csuList?.record?.info)?(JSON.parse(csuList.record.info).otaCode? JSON.parse(csuList.record.info).otaCode:null):null}</Descriptions.Item>\n\n <Descriptions.Item label=\"OTA Message\" span={1 + descriptionSpan}>{(csuList?.record?.info)?(JSON.parse(csuList.record.info).otaMessage? JSON.parse(csuList.record.info).otaMessage:null):null}</Descriptions.Item>\n <Descriptions.Item label=\"Calibration from\" span={1 + descriptionSpan}>{(csuList?.record?.persistMode)? ((csuList.record.persistMode===2)?\"Simulation\": \"Cummins\"):null}</Descriptions.Item>\n \n\n </Descriptions>\n <div>\n <div></div>\n <div></div>\n </div>\n <div>\n <div></div>\n <div></div>\n </div>\n <div>\n <div></div>\n <div></div>\n </div>\n </>)\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n csus: state.csuReducer.csuState.csu.csuList.all,\n csuList: state.csuReducer.csuState.csu.csuList.calibrationMaint,\n };\n };\n\nexport default connect(mapStateToProps, actions)(CSUInfo);\n","import { Button, Drawer, Row, Space, Tabs } from \"antd\";\nimport React from \"react\";\nimport { connect, useDispatch } from \"react-redux\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport * as actions from \"./actions/csu\";\nimport \"./csu.css\";\nimport CSUInfo from \"./CSUInfo\";\n\n\nconst { TabPane } = Tabs;\ninterface Props { \n context: any;\n permissions: any;\n csuMaintClose: Function; \n getCalibrations: Function;\n csuList:any;\n assetMaintTabChange: Function;\n }\n\n const CalibrationMaint: React.FC<Props> = (props) => {\n // const [activeTab, setActiveTab] = useState(\"1\");\n const { csuList } = props;\n const dispatch = useDispatch();\n console.log(\"CSU Maint: \"+ JSON.stringify(csuList));\n const onDrawerClose = () => {\n props.csuMaintClose();\n };\n\n const onTabChange = (key:string) => {\n props.assetMaintTabChange(key);\n };\n return(\n \n <>\n <Row gutter={8}>\n <Drawer\n data-id=\"csu-maint-drawer\" \n title={csuList.title}\n width={csuList.width}\n onClose={onDrawerClose}\n visible={csuList.visible}\n destroyOnClose={true}\n footer={\n <Space size=\"large\" style={{ float: 'right' }}>\n <Button data-id=\"csu-maint-close-button\" type=\"default\" onClick={onDrawerClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n </Space>\n } >\n <Tabs activeKey={csuList.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}>\n {\n \n <TabPane tab={csuList.tabs[0].title} key=\"1\" data-id=\"csu-maint-info-tab-button\">\n <CSUInfo tabData={csuList.activeTab} ></CSUInfo>\n </TabPane> \n }\n \n \n </Tabs> \n\n </Drawer>\n\n\n </Row>\n </>\n )\n };\n\n const mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n csuList: state.csuReducer.csuState.csu.csuList.calibrationMaint,\n };\n };\n\n// const mapDispatchToProps = (dispatch: (arg0: { type: string; }) => any) => {\n// return {\n// // dispatching plain actions\n// calibrationMaintOpen: (record: any) => dispatch({ type: 'CALIBRATION_MAINT_OPEN' }),\n// csuMaintClose: () => dispatch({ type: 'CSU_MAINT_CLOSE' }),\n// //reset: () => dispatch({ type: 'RESET' }),\n// }\n// }\n\nexport default connect(mapStateToProps, actions)(CalibrationMaint);\n//export default connect(mapStateToProps, mapDispatchToProps)(CalibrationMaint);\n","import {\n CheckCircleOutlined,\n CheckSquareFilled,\n CloseSquareFilled,\n InfoOutlined,\n LikeOutlined,\n Loading3QuartersOutlined,\n PushpinOutlined,\n StopFilled\n} from \"@ant-design/icons\";\nimport { Button, Col, Radio, Row, Space, Table, Tooltip, message } from \"antd\";\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport offlineIcon from \"../../assets/images/map-status/offline.png\";\nimport onlineIcon from \"../../assets/images/map-status/online.png\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport * as actions from \"./actions/csu\";\nimport CalibrationMaint from \"./CalibrationMaint\";\nimport \"./csu.css\";\n\n\ninterface Props { \n context: any;\n permissions: any;\n tabData: any;\n search: string;\n isSearch: boolean;\n csus: any;\n getCalibrations: Function;\n csuMaintOpen: Function;\n csuSetPaginationForAll: Function,\n processAction: Function;\n resetSearch: Function;\n }\nconst CSU: React.FC<Props> = (props) => {\n // const [calibrations, setCalibrations] = useState([]);\n // const { contextUser, appContext } = props.context;\n const [category, setCategory] = useState(\"Approval Required\");\n const [disableAction, setDisableAction] = useState(false);\n const result = getPermissions(props.permissions.permissions.asset_widgets);\n const [sortColumn, setSortColumn] = useState(\"assetname\");\n const [page, setPage] = useState(1);\n const [sortDirection, setSortDirection] = useState(\"ascend\");\n const [open, setOpen] = useState(false);\n const { tableConfig, tableData, search } = props.csus;\n useEffect(() => {\n if (props.tabData === \"1\") {\n // props.getCalibrations(getOTAOnSuccess,getOTAOnError,null, null, null, '', null, 1);\n props.csuSetPaginationForAll(onPaginationChange);\n props.getCalibrations(getOTAOnSuccess,getOTAOnError,null, null, null, props.search, category,0, page);\n }\n // return () => {\n // setCalibrations([]);\n // }\n }, [props.isSearch, page]);\n\n useEffect(() => {\n if (props.tabData === \"1\") {\n // props.getCalibrations(getOTAOnSuccess,getOTAOnError,null, null, null, '', null, 1);\n props.csuSetPaginationForAll(onPaginationChange);\n props.getCalibrations(getOTAOnSuccess,getOTAOnError,null, null, null, props.search, category,0, 1);\n }\n // return () => {\n // setCalibrations([]);\n // }\n }, [props.search, props.tabData, category]);\n\n\n const getOTAOnSuccess = (ota:any)=>{\n props.resetSearch();\n ota.map((data:any) => {\n // console.log(\"CALIBRATION INFO: \"+ JSON.stringify(data));\n });\n // setCalibrations(ota);\n }\n\n const getOTAOnError = (error:any) => {\n console.log(\"Error: \"+ JSON.stringify(error));\n }\n\n const initiateAction=(e:any,record:any, operationType: any) =>{\n console.log(\"e: \"+ e);\n console.log(\"operationType: \"+ operationType);\n console.log(\"record: \"+ JSON.stringify(record));\n let startStep: any = null;\n if(operationType.toString().toLowerCase() === \"approve update\") {\n startStep = 1;\n if(record.approved === 1) {\n if(!record.storageLocation || record.storageLocation.toString()===\"\" ||record.storageLocation === null)\n {\n startStep = 2;\n }\n else\n {\n if(!record.csuJobId || record.csuJobId === null){\n startStep = 3;\n }\n }\n\n }\n }\n setDisableAction(true);\n props.processAction(record, operationType.toString().toLowerCase(),actionOnSuccess,actionOnError, startStep);\n }\n\n const actionOnSuccess = (data:any, operationType:any) => {\n //console.log(\"DATA: \"+ data);\n //console.log(\"JSON STRINGIFY DATA: \"+ JSON.stringify(data));\n if(operationType.toString().toLowerCase()===\"cancel update\")\n {\n message.success(\"OTA Cancellation initiated successfully.\");\n }\n else\n {\n message.success(\"OTA Update initiated successfully.\");\n }\n setDisableAction(false);\n props.getCalibrations(null,null,null, null, null, search, category,0, page);\n }\n\n const actionOnError = (error:any) => {\n // console.log(\"Error: \"+ JSON.stringify(error));\n message.error(error?.response?.data?.errors?.length > 0 ?\n \"Error: \"+error?.response?.data?.errors[0].message :\n \"Failed to initiate the OTA process.\")\n setDisableAction(false);\n }\n\n const calibrationMaintOpen = (e:any, record:any) => {\n e.preventDefault();\n calibrationMaintOpenDo(record);\n };\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n const calibrationMaintOpenDo = (record:any) => {\n const title = \"Asset :: \" + (record.nickname || record.mastertag) + \" :: \" + record.status.charAt(0).toUpperCase() + record.status.slice(1);\n props.csuMaintOpen(title, drawerWidth, record);\n }\n\n const actionType = (type: any) => {\n if(type == 1) {\n return \"Approve Update\";\n }\n else if(type == 2) {\n return \"Deny Update\";\n }\n else if(type == 3) {\n return \"Retry Update\";\n }\n else if(type == 4) {\n return \"Cancel Update\";\n }\n else if(type == 5) {\n return \"Restore\";\n }\n else if(type == 6) {\n return \"Approve Restore\";\n }\n else if(type == 7) {\n return \"Deny Restore\";\n }\n else if(type == 8) {\n return \"Retry Restore\";\n }\n else if(type == 9) {\n return \"Cancel Restore\";\n }\n }\n console.log(\"Table Config ALL: \"+ JSON.stringify(tableConfig));\n\n console.log(\"TABLE DATA ALL\");\n console.log(\"+++++++++++++++++++++++++++++++++++++++++++++++++\");\n console.log(\"HOSTORY DATA ALL: \"+ tableData);\n // console.log(\"+++++++++++++++++++++++++++++++++++++++++++++++++\");\n\n const onPaginationChange = (page: number) => {\n props.getCalibrations(getOTAOnSuccess,getOTAOnError,null, null, null, search, category,0, page);\n };\n\n const onStatusChange = (e: any) => {\n e.preventDefault();\n setPage(1);\n setCategory(e.target.value || 'Approval Required');\n let status = e.target.value;\n props.getCalibrations(getOTAOnSuccess,getOTAOnError,null, null, null, search, status, 0, 1);\n };\n console.log(\"+++++++++++++++++++++++++++++++++++++++++++++++++\");\n console.log(\"Category: \"+ category);\n console.log(\"+++++++++++++++++++++++++++++++++++++++++++++++++\");\n \n let tableColumns = [\n {\n title: \"Asset\",\n column_name:\"assetName\",\n dataIndex: \"assetName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'assetname' ? sortDirection : false,\n },\n {\n title: \"Status\",\n column_name:\"connectionStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'connectionstatus' ? sortDirection : false,\n render: (text: any, record: any) => (\n <>\n {\n record.connectionStatus === \"ONLINE\" && //record.status !== \"inactive\" && record.status !== \"whitelisted\" &&\n <Tooltip title=\"Online\">\n <span className=\"asset-status-green alarm-info-icon pr-5\" ><img src={onlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {/* {\n record.connectionStatus === \"ONLINE\" && record.status !== \"active\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n } */}\n {\n record.connectionStatus === \"OFFLINE\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n </>\n )\n },\n {\n title: <Tooltip mouseEnterDelay={0.5} data-title=\"Status Since\" title=\"Represents most recent device's connect/disconnect timestamp\"><span>Status Since</span></Tooltip>,\n column_name: \"Status Since\",\n // responsive: [\"xl\"] as Breakpoint[],\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n //sortOrder: this.state.assetTableFilters.sortColumn == 'statussince' ? this.state.assetTableFilters.sortDirection : false,\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <>\n {\n record.connection_status === 'whitelisted' ?\n <>{appConfigs.app.assets.offlineHavingNoDateText}</>\n :record.disconnetedSince ?\n <span>{new Date(record.disconnetedSince).toLocaleString()}</span>\n : <>{appConfigs.app.assets.offlineHavingNoDateText}</>\n //: <>{appConfigs.app.assets.onlineText}</>\n }\n </>\n )\n },\n {\n title: \"Mastertag\",\n column_name:\"mastertag\",\n dataIndex: \"mastertag\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'mastertag' ? sortDirection : false,\n },\n {\n title: \"ESN\",\n column_name:\"esn\",\n dataIndex: \"esn\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'esn' ? sortDirection : false,\n },\n {\n title: \"Current Version\",\n column_name:\"currentVersion\",\n dataIndex: \"currentVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'currentversion' ? sortDirection : false,\n },\n {\n title: \"New Version\",\n column_name:\"newVersion\",\n // dataIndex: \"newVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'newversion' ? sortDirection : false,\n // <Badge.Ribbon text=\"Hippies\">\n // <Card title=\"Pushes open the window\" size=\"small\">\n // and raises the spyglass.\n // </Card>\n // </Badge.Ribbon>\n render: (text: any, record: any) => (\n <>\n {\n // <div> <span className=\"ribbon\">{(record?.persistMode)? ((record.persistMode===2)?\"TEST\": \"CMNS\"):null}</span>\n // <span>{record.newVersion}</span>\n // </div>\n <div> {(record?.persistMode)? ((record.persistMode===2)?<span className=\"ribbon\">TEST</span>:\"\"):\"\"}\n <span>{record.newVersion}</span>\n </div>\n }\n </>\n )\n },\n // {\n // title: \"Available Time\",\n // column_name:\"availableTime\",\n // //dataIndex: \"availableTime\",\n // sortDirections: ['ascend', 'descend', 'ascend'],\n // sorter: true,\n // sortOrder: sortColumn == 'availabletime' ? sortDirection : false,\n // render: (text: any, record: any) => (\n // <> \n // { \n // <span>{moment(record.availableTime).format('MM/DD/YYYY, HH:mm:ss A').toLocaleString()}</span> \n // }\n // </>\n // )\n // },\n {\n title: \"OTA Status\",\n column_name:\"otaStatus\",\n dataIndex: \"otaStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'otastatus' ? sortDirection : false,\n },\n {\n title: \"Status At\",\n column_name:\"statusAt\",\n // dataIndex: \"statusAt\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'statusat' ? sortDirection : false,\n render: (text: any, record: any) => (\n <> \n { \n <span>{moment(record.statusAt).format('MM/DD/YYYY, h:mm:ss A').toLocaleString()}</span> \n }\n </>\n )\n },\n {\n title: \"Attempts\",\n column_name:\"attempts\",\n dataIndex: \"attempts\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'attempts' ? sortDirection : false,\n },\n {\n title: \"Requests\",\n column_name:\"reqs\",\n dataIndex: \"reqs\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'reqs' ? sortDirection : false,\n },\n {\n title: \"Operation\",\n column_name:\"operation\",\n dataIndex: \"operation\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'operation' ? sortDirection : false,\n },\n {\n title: \"Org Name\",\n column_name:\"orgName\",\n dataIndex: \"orgName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'orgname' ? sortDirection : false,\n },\n {\n title: \"Category\",\n column_name:\"category\",\n dataIndex: \"category\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'category' ? sortDirection : false,\n },\n {\n title: \"Info\",\n column_name:\"info\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Info\">\n <Button\n type=\"default\" \n icon={<InfoOutlined />}\n // onClick={(e) => { props.openInstallationProgressDrawer(\"Installations History for: (\" + record.gatewayName + ' - ' + record.controllerName + ')', drawerWidth, record); }}\n />\n </Tooltip>\n }\n </Space>\n )\n }//,\n\n // {\n // title: \"Actions\",\n // column_name:\"actionList\",\n // //dataIndex: \"orgName\"\n // align: \"center\" as \"center\",\n // render: (text: string, record: any) =>(\n // <>\n // <div>\n // {/* //{record.actionList.replace(/['\"]+/g, '').map((tag:any) => { */}\n // { record.actionList.substr(0, record.actionList.length - 1).substr(1).split(',').map((tag:any,index:any) => {\n // return (\n // (tag === \"\")?\n // <div style={{cursor: \"default\"}}>{record.otaStatus}</div>\n // :\n // // <div>\n // // <Button type=\"primary\" className = \"buttonBorder\" disabled={record.category.toLowerCase() != \"approval required\"?true:false}\n // // key={\"actionButton\"+index+\"-\"+tag} onClick={(e)=>initiateAction(e,record,actionType(tag))}>\n // // {actionType(tag)}\n // // </Button>\n // // <Button type=\"primary\" danger key={\"actionButton\"+index+\"-\"+tag} \n // // onClick={(e)=>initiateAction(e,record,\"Deny Update\")}>\n // // Deny Update\n // // </Button>\n // // </div>\n // <div>\n // <Tooltip placement=\"top\" title={actionType(tag)}>\n // <Button size=\"middle\" type=\"default\" icon={<CheckSquareFilled />} style={{ marginLeft: '2px', color: '#44ce1b' }} onClick={(e)=>initiateAction(e,record,actionType(tag))}/>\n // </Tooltip>\n // <Tooltip placement=\"top\" title=\"Deny Update\">\n // <Button size=\"middle\" type=\"default\" icon={<StopFilled />} style={{ marginLeft: '2px', color: '#e51f1f' }} onClick={(e)=>initiateAction(e,record,\"Deny Update\")}/>\n // </Tooltip>\n // </div>\n \n // );\n // })}\n // </div>\n // </>\n \n // ) \n \n // }\n ];\n\n\n \n let tableColumnswithAction = [\n {\n title: \"Asset\",\n column_name:\"assetName\",\n dataIndex: \"assetName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'assetname' ? sortDirection : false,\n },\n {\n title: \"Status\",\n column_name:\"connectionStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'connectionStatus' ? sortDirection : false,\n render: (text: any, record: any) => (\n <>\n {\n record.connectionStatus === \"ONLINE\" && //record.status !== \"inactive\" && record.status !== \"whitelisted\" &&\n <Tooltip title=\"Online\">\n <span className=\"asset-status-green alarm-info-icon pr-5\" ><img src={onlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {/* {\n record.connectionStatus === \"ONLINE\" && record.status !== \"active\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n } */}\n {\n record.connectionStatus === \"OFFLINE\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n </>\n )\n },\n {\n title: <Tooltip mouseEnterDelay={0.5} data-title=\"Status Since\" title=\"Represents most recent device's connect/disconnect timestamp\"><span>Status Since</span></Tooltip>,\n column_name: \"Status Since\",\n // responsive: [\"xl\"] as Breakpoint[],\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n //sortOrder: this.state.assetTableFilters.sortColumn == 'statussince' ? this.state.assetTableFilters.sortDirection : false,\n align: \"center\" as \"center\",\n render: (text: any, record: any) => (\n <> \n {\n record.connection_status === 'whitelisted' ?\n <>{appConfigs.app.assets.offlineHavingNoDateText}</>\n :record.disconnetedSince ? \n <span>{new Date(record.disconnetedSince).toLocaleString()}</span> \n : <>{appConfigs.app.assets.offlineHavingNoDateText}</> \n //: <>{appConfigs.app.assets.onlineText}</>\n }\n </>\n )\n },\n {\n title: \"Mastertag\",\n column_name:\"mastertag\",\n dataIndex: \"mastertag\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'mastertag' ? sortDirection : false,\n },\n {\n title: \"ESN\",\n column_name:\"esn\",\n dataIndex: \"esn\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'esn' ? sortDirection : false,\n },\n {\n title: \"Current Version\",\n column_name:\"currentVersion\",\n dataIndex: \"currentVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'currentversion' ? sortDirection : false,\n },\n {\n title: \"New Version\",\n column_name:\"newVersion\",\n // dataIndex: \"newVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'newversion' ? sortDirection : false,\n render: (text: any, record: any) => (\n <> \n { // <div> <span className=\"ribbon\">{(record?.persistMode)? ((record.persistMode===2)?\"TEST\": \"CMNS\"):null}</span>\n // <span>{record.newVersion}</span>\n // </div> \n <div> {(record?.persistMode)? ((record.persistMode===2)?<span className=\"ribbon\">TEST</span>:\"\"):\"\"}\n <span>{record.newVersion}</span>\n </div> \n \n }\n </>\n )\n },\n // {\n // title: \"Available Time\",\n // column_name:\"availableTime\",\n // //dataIndex: \"availableTime\",\n // sortDirections: ['ascend', 'descend', 'ascend'],\n // sorter: true,\n // sortOrder: sortColumn == 'availabletime' ? sortDirection : false,\n // render: (text: any, record: any) => (\n // <> \n // { \n // <span>{moment(record.availableTime).format('MM/DD/YYYY, HH:mm:ss A').toLocaleString()}</span> \n // }\n // </>\n // )\n // },\n {\n title: \"OTA Status\",\n column_name:\"otaStatus\",\n //dataIndex: \"otaStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'otaStatus' ? sortDirection : false,\n render: (text: any, record: any) => (\n <> \n { \n (record.otaStatus === \"Downloading to Engine\" || record.otaStatus === \"Buffering\")?\n // <div> <span>{record.otaStatus}</span><br/> \n // {/* <span style={{color:'#0052CC',fontSize:'12px'}}>{\"Buffering might take 40 minutes (if the size is 3MB, it might take longer)\"}</span> */}\n // <span style={{color:'#0052CC',fontSize:'12px'}}>{\"Buffering might take 40 minutes\"}</span>\n // </div>\n <div>\n <Tooltip title=\"Downloading might take some time\">\n <span>{record.otaStatus}</span>\n </Tooltip>\n </div>\n :\n <div> <span>{record.otaStatus}</span> </div>\n }\n \n \n </>\n )\n },\n {\n title: \"Status At\",\n column_name:\"statusAt\",\n // dataIndex: \"statusAt\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'statusat' ? sortDirection : false,\n render: (text: any, record: any) => (\n <> \n { \n <span>{moment(record.statusAt).format('MM/DD/YYYY, h:mm:ss A').toLocaleString()}</span> \n }\n </>\n )\n },\n {\n title: \"Attempts\",\n column_name:\"attempts\",\n dataIndex: \"attempts\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'attempts' ? sortDirection : false,\n },\n {\n title: \"Requests\",\n column_name:\"reqs\",\n dataIndex: \"reqs\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'reqs' ? sortDirection : false,\n },\n {\n title: \"Operation\",\n column_name:\"operation\",\n dataIndex: \"operation\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'operation' ? sortDirection : false,\n },\n {\n title: \"Org Name\",\n column_name:\"orgName\",\n dataIndex: \"orgName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'orgname' ? sortDirection : false,\n },\n {\n title: \"Category\",\n column_name:\"category\",\n dataIndex: \"category\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'category' ? sortDirection : false,\n },\n {\n title: \"Info\",\n column_name:\"info\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Info\">\n <Button\n type=\"default\" \n icon={<InfoOutlined />}\n onClick={(e:any) => {calibrationMaintOpen(e, record)}}\n />\n </Tooltip>\n }\n </Space>\n )\n },\n {\n title: \"Actions\",\n column_name:\"actionList\",\n //dataIndex: \"orgName\"\n align: \"center\" as \"center\",\n render: (text: string, record: any) =>(\n <>\n <div>\n {/* //{record.actionList.replace(/['\"]+/g, '').map((tag:any) => { */}\n { record.actionList.substr(0, record.actionList.length - 1).substr(1).split(',').map((tag:any,index:any) => {\n return (\n (tag === \"\" && (record.category.toLowerCase()!==\"completed\") && record?.actionList.toString()!==\"[]\")?\n <div style={{cursor: \"default\"}}>{record.otaStatus}</div>\n :\n // <div>\n // <Button type=\"primary\" className = \"buttonBorder\" disabled={record.category.toLowerCase() != \"approval required\"?true:false}\n // key={\"actionButton\"+index+\"-\"+tag} onClick={(e)=>initiateAction(e,record,actionType(tag))}>\n // {actionType(tag)}\n // </Button>\n // <Button type=\"primary\" danger key={\"actionButton\"+index+\"-\"+tag} \n // onClick={(e)=>initiateAction(e,record,\"Deny Update\")}>\n // Deny Update\n // </Button>\n // </div>\n (record.category.toLowerCase() === \"approval required\")?\n <div>\n <Tooltip placement=\"top\" title=\"Approve Update\">\n <Button size=\"middle\" disabled={record.hasInProgressOta || disableAction} type=\"default\" icon={<CheckSquareFilled />} style={{ marginLeft: '2px', color: '#44ce1b' }} onClick={(e)=>initiateAction(e,record,actionType(tag))}/>\n </Tooltip>\n\n <Tooltip placement=\"top\" title=\"Deny Update\">\n <Button size=\"middle\" disabled={record.hasInProgressOta || disableAction} type=\"default\" icon={<StopFilled />} style={{ marginLeft: '2px', color: '#e51f1f' }} onClick={(e)=>initiateAction(e,record,\"Deny Update\")}/>\n </Tooltip>\n </div>\n :\n ((record.category.toLowerCase()===\"in progress\" || record.category.toLowerCase()===\"interruptions\")?\n <div>\n <Tooltip placement=\"top\" title=\"Cancel Update\">\n <Button size=\"middle\" type=\"default\" disabled={record.otaStatus.toLowerCase().includes(\"cancel\") || disableAction }icon={<CloseSquareFilled />} style={{ marginLeft: '2px', color: '#808080' }} onClick={(e)=>initiateAction(e,record,\"Cancel Update\")}/>\n </Tooltip> \n </div>\n :\n ((record.category.toLowerCase()===\"completed\")?\n (record.otaStatus.toLowerCase().includes(\"fail\")) &&\n //checking NRC22 condition to hide retry option in UI. OTA code for NRC 22 is 34.\n !((record.info)?(parseInt(JSON.parse(record.info).otaCode) === 34 ):false) &&\n <div>\n <Tooltip placement=\"top\" title=\"Retry Update\">\n <Button type=\"primary\" onClick={(e)=>initiateAction(e,record,\"Retry Failed Update\")}>Retry</Button>\n </Tooltip>\n </div>\n :\"\"))\n \n );\n })}\n </div>\n </>\n )\n }\n ]\n \n// let testData = {actionList:\"[1]\",\n// assetName:\"BMITCP5L\",\n// availableTime:\"2024-01-06 03:00:00+00\",\n// boxId:\"20332097340\",\n// category:\"In progress\",\n// connectionStatus:\"ONLINE\",\n// csuJobId: null,\n// currentVersion:\"PARKER3.00\",\n// disconnetedSince: 1704449993721,\n// ecmModel: \"6B S5 D067\",\n// esn:\"78000003\",\n// esnCalReqId:\"e85f0c00-ae94-11ee-ad41-b7c9e66c358d\",\n// info: \"{\\\"otaCode\\\": null, \\\"retries\\\": null, \\\"features\\\": \\\"CD,CSU\\\", \\\"otaMessage\\\": null, \\\"encryptionLevel\\\": \\\"2\\\", \\\"otStatusInternal\\\": null, \\\"telematicsVesion\\\": \\\"01030000\\\", \\\"telematicsSupplierId\\\": \\\"0\\\"}\",\n// mac:\"BMITCP5L\",\n// mastertag:\"BMITCP5L\",\n// newVersion:\"PARKER5.02\",\n// operation: \"update\",\n// orgId: \"c6adcb40-be92-11e6-9ed6-a5bc9cb5279b\",\n// orgName:\"Parker\",\n// orgPathName:\"Parker\",\n// otaStatus:\"Send Pending\",\n// priority:\"4\",\n// recordNo:1,\n// status:\"active\",\n// tags:\"[]\",\n// totalRecords:7,\n// vin:\"PARKERCSUTEST0003\"}\n const sortAssetsTable = (pagination: any, filters: any, sorter: any) => {\n let sortColumn: string | undefined = undefined;\n let sortDirection: string | undefined = undefined;\n if (sorter && Object.keys(sorter).length > 0) {\n const { column, order } = sorter;\n sortDirection = order;\n if (column?.title?.hasOwnProperty('props')) {\n sortColumn = column?.title?.props['data-title'].toLowerCase().replace(/\\s/g, '')\n } else {\n sortColumn = column?.title.toLowerCase().replace(/\\s/g, '');\n }\n }\n\n setPage(pagination.current);\n setSortColumn(sortColumn || '');\n setSortDirection(sortDirection || '');\n //this.state.assetTableFilters.filters = filters?.tags?.length > 0 ? filters : {tags: null}\n //setAssetTableFilters(this.state.assetTableFilters)\n\n //this.setState({ isAssetTableFiltersSet: isAssetTableFiltersSet() });\n //this.props.getAssets(...this.getTableFilterParams());\n // props.getCalibrations(getOTAOnSuccess,getOTAOnError,null, sortColumn, sortDirection, props.search, category,0, page);\n\n }\n\n\n return(\n \n <>\n <div>\n {/* <div data-id=\"csu-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={8}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n ECM OTA Management\n </div>\n </div>\n </Col>\n <Col xs={24} lg={14} className=\"content-header-controls\">\n <Space size=\"middle\">\n {\n //(permissions.isRead) &&\n <Search\n data-id=\"ecm-ota-search-field\"\n key=\"search-field\"\n placeholder=\"Search by esn, version, mastertag\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n //onSearch={onSearch}\n //onChange={onSearchChange}\n className=\"search-field\"\n // value={this.props.orgsList.searchText}\n /> \n } \n </Space>\n </Col>\n </Row> */}\n\n {/* <Row gutter={8}>\n <Col xs={24} lg={8}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Button type=\"primary\" className = \"buttonBorder\" \n key={actionType(1)} onClick={(e)=>initiateAction(e,testData,actionType(1))}>\n {actionType(1)}\n </Button>\n </div>\n </div>\n </Col>\n \n </Row> */}\n <Row gutter={8}>\n <Col xs={24} lg={12} className=\"mt-10\">\n <span className=\"asset-status-green pr-5\" ></span>\n <Radio.Group value={category} buttonStyle=\"solid\" onChange={onStatusChange}>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"ECMs with calibrations which require approval from the operator to initatiate installation\" arrowPointAtCenter>\n <div style={{ display: 'inline-block', margin: '0 0 0 0', padding: '0 0 0 0', borderRadius: '0', border: '0'}}>\n <Radio.Button value=\"Approval Required\">\n <PushpinOutlined className=\"pr-5\" />Approval Required\n </Radio.Button>\n </div>\n </Tooltip>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"ECMs with Calibrations in progress\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"In Progress\">\n <Loading3QuartersOutlined className=\"pr-5\" />In Progress\n </Radio.Button>\n </div>\n </Tooltip>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"ECMs with calibrations completed\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"Completed\">\n <LikeOutlined className=\"pr-5\" />Completed\n </Radio.Button>\n </div>\n </Tooltip>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"ECMs with upto Date\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"Up to date\">\n <CheckCircleOutlined className=\"pr-5\" />Up to date\n </Radio.Button>\n </div>\n </Tooltip>\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"ECMs with installation interuptions\" arrowPointAtCenter>\n <div style={{ display: 'inline-block', margin: '0 0 0 0', padding: '0 0 0 0', borderRadius: '0', border: '0'}}>\n <Radio.Button value=\"Interruptions\">\n <PushpinOutlined className=\"pr-5\" />Interruptions\n </Radio.Button>\n </div>\n </Tooltip>\n\n <Tooltip mouseEnterDelay={0.5} placement=\"bottom\" title=\"Show all ECMs regardless of type of calibration\" arrowPointAtCenter>\n <div style={{ display: 'inline-block'}}>\n <Radio.Button value=\"All\"\n >All</Radio.Button>\n </div>\n </Tooltip>\n </Radio.Group>\n </Col>\n </Row>\n\n <Row gutter={8}>\n <Table \n data-id=\"calibrations-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }} \n {...tableConfig}\n rowKey={(record:any) => record.gatewayId}\n columns={(category === \"Up to date\")?tableColumns: tableColumnswithAction}\n dataSource={tableData}\n onChange={sortAssetsTable}\n showSorterTooltip={false}\n />\n </Row>\n <CalibrationMaint />\n </div>\n </>\n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n csus: state.csuReducer.csuState.csu.csuList.all\n };\n };\n \nexport default connect(mapStateToProps, actions)(CSU);\n","import { InfoOutlined } from \"@ant-design/icons\";\nimport { Button, Row, Space, Table, Tooltip } from \"antd\";\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport offlineIcon from \"../../assets/images/map-status/offline.png\";\nimport onlineIcon from \"../../assets/images/map-status/online.png\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport * as actions from \"./actions/csu\";\nimport \"./csu.css\";\n\ninterface Props { \n context: any;\n permissions: any;\n search: string,\n tabData: any;\n csus: any;\n isSearch: boolean;\n getOTAHistory: Function;\n csuMaintOpen: Function;\n csuSetPaginationForHistory: Function;\n resetSearch: Function;\n }\nconst CSUHistory: React.FC<Props> = (props) => {\n // const [calibrationsHistory, setCalibrationsHistory] = useState([]);\n const { contextUser, appContext } = props.context;\n const [sortColumn, setSortColumn] = useState(\"assetname\");\n const [page, setPage] = useState(1);\n const [sortDirection, setSortDirection] = useState(\"ascend\");\n const result = getPermissions(props.permissions.permissions.asset_widgets); \n const { tableConfig, tableData, search } = props.csus;\n console.log(\"Table Config: \"+ JSON.stringify(tableConfig));\n useEffect(() => {\n if(props.tabData === \"2\") {\n props.csuSetPaginationForHistory(onPaginationChange);\n props.getOTAHistory(getOTAHistoryOnSuccess,getOTAHistoryOnError,null, null, null, props.search, \"all\", 1, null);\n \n }\n // return () => {\n // // setCalibrationsHistory([]);\n // }\n }, [props.search, props.tabData]);\n useEffect(() => {\n if(props.tabData === \"2\") {\n props.csuSetPaginationForHistory(onPaginationChange); \n props.getOTAHistory(getOTAHistoryOnSuccess,getOTAHistoryOnError,null, null, null, props.search, \"all\", page, null);\n \n }\n // return () => {\n // // setCalibrationsHistory([]);\n // }\n }, [props.isSearch, page]);\n\n const getOTAHistoryOnSuccess = (ota:any)=>{\n props.resetSearch();\n ota.map((data:any) => {\n // console.log(\"CSU status history INFO: \"+ JSON.stringify(data));\n });\n // setCalibrationsHistory(ota);\n }\n\n const getOTAHistoryOnError = (error:any) => {\n props.resetSearch();\n console.log(\"Error: \"+ JSON.stringify(error));\n }\n\n const actionOnSuccess = (data:any) => {\n\n }\n\n const actionOnError = (error:any) => {\n\n }\n\n const calibrationMaintOpen = (e:any, record:any) => { \n e.preventDefault();\n calibrationMaintOpenDo(record);\n };\n const drawerWidth: number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n const calibrationMaintOpenDo = (record:any) => {\n const title = \"Asset :: \" + (record.nickname || record.mastertag) + \" :: \" + record.status.charAt(0).toUpperCase() + record.status.slice(1);\n props.csuMaintOpen(title, drawerWidth, record);\n }\n\n\n const onPaginationChange = (page: number) => {\n //if(tableData && tableData.length < 1) {\n props.getOTAHistory(getOTAHistoryOnSuccess,getOTAHistoryOnError,null, null, null, props.search, \"all\", page, null);\n //}\n };\n\n const sortAssetsTable = (pagination: any, filters: any, sorter: any) => {\n let sortColumn: string | undefined = undefined;\n let sortDirection: string | undefined = undefined;\n if (sorter && Object.keys(sorter).length > 0) {\n const { column, order } = sorter;\n sortDirection = order;\n if (column?.title?.hasOwnProperty('props')) {\n sortColumn = column?.title?.props['data-title'].toLowerCase().replace(/\\s/g, '')\n } else {\n sortColumn = column?.title.toLowerCase().replace(/\\s/g, '');\n }\n }\n setPage(pagination.current);\n setSortColumn(sortColumn || '');\n setSortDirection(sortDirection || '');\n //props.getOTAHistory(getOTAHistoryOnSuccess,getOTAHistoryOnError,null, sortColumn, sortDirection, props.search, 'all', page, null);\n\n }\n\n console.log(\"TABLE DATA\");\n console.log(\"+++++++++++++++++++++++++++++++++++++++++++++++++\");\n console.log(\"HOSTORY DATA: \"+ tableData);\n console.log(\"+++++++++++++++++++++++++++++++++++++++++++++++++\");\n const ParkerOrgId = 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b'\n let tableHistoryColumns = [\n {\n title: \"Asset\",\n column_name:\"assetName\",\n dataIndex: \"assetName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'assetname' ? sortDirection : false,\n },\n {\n title: \"Mastertag\",\n column_name:\"mastertag\",\n dataIndex: \"mastertag\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'mastertag' ? sortDirection : false,\n },\n {\n title: \"ESN\",\n column_name:\"esn\",\n dataIndex: \"esn\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'esn' ? sortDirection : false,\n },\n {\n title: \"Current Version\",\n column_name:\"currentVersion\",\n dataIndex: \"currentVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'currentversion' ? sortDirection : false,\n },\n {\n title: \"New Version\",\n column_name:\"newVersion\",\n dataIndex: \"newVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'newversion' ? sortDirection : false,\n },\n {\n title: \"Old OTA Status\",\n column_name:\"oldStatus\",\n dataIndex: \"oldStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'oldstatus' ? sortDirection : false,\n }, \n {\n title: \"OTA Status\",\n column_name:\"otaStatus\",\n dataIndex: \"otaStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'otastatus' ? sortDirection : false,\n },\n {\n title: \"CSU Status at\",\n column_name:\"statusAt\",\n //dataIndex: \"statusAt\"\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'statusat' ? sortDirection : false,\n render: (text: any, record: any) => (\n <> \n { \n <span>{moment(record.statusAt).format('MM/DD/YYYY, h:mm:ss A').toLocaleString()}</span> \n }\n </>\n )\n },\n {\n title: \"Attempts\",\n column_name:\"attempts\",\n dataIndex: \"attempts\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'attempts' ? sortDirection : false,\n },\n {\n title: \"Requests\",\n column_name:\"reqs\",\n dataIndex: \"reqs\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'reqs' ? sortDirection : false,\n },\n {\n title: \"Category\",\n column_name:\"category\",\n dataIndex: \"category\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'category' ? sortDirection : false,\n },\n {\n title: \"Operation\",\n column_name:\"operation\",\n dataIndex: \"operation\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'operation' ? sortDirection : false,\n },\n {\n title: \"Org Name\",\n column_name:\"orgName\",\n dataIndex: \"orgName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'orgname' ? sortDirection : false,\n },\n {\n title: \"Info\",\n column_name:\"info\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Info\">\n <Button\n type=\"default\" \n icon={<InfoOutlined />}\n onClick={(e:any) => {calibrationMaintOpen(e, record)}}\n />\n </Tooltip>\n }\n </Space>\n )\n }//,\n // {\n // title: \"Actions\",\n // column_name:\"actionList\",\n // //dataIndex: \"orgName\"\n // align: \"center\" as \"center\",\n // render: (text: string, record: any) =>(\n // <>\n // <div className=\"container\">\n // {/* //{record.actionList.replace(/['\"]+/g, '').map((tag:any) => { */}\n // { record.actionList.substr(0, record.actionList.length - 1).substr(1).split(',').map((tag:any,index:any) => {\n // return (\n // (tag === \"\")?\n // <div style={{cursor: \"default\"}}>{record.otaStatus}</div>\n // :\n // null\n // );\n // })}\n // </div>\n // </>\n \n // ) \n \n // }\n ]\n \n let tableHistoryColumnsWithConnectionStatus = [\n {\n title: \"Asset\",\n column_name:\"assetName\",\n dataIndex: \"assetName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'assetname' ? sortDirection : false,\n },\n {\n title: \"Status\",\n column_name:\"connectionStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'connectionstatus' ? sortDirection : false,\n render: (text: any, record: any) => (\n <>\n {\n record.connectionStatus === \"ONLINE\" && //record.status !== \"inactive\" && record.status !== \"whitelisted\" &&\n <Tooltip title=\"Online\">\n <span className=\"asset-status-green alarm-info-icon pr-5\" ><img src={onlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n {/* {\n record.connectionStatus === \"ONLINE\" && record.status !== \"active\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n } */}\n {\n record.connectionStatus === \"OFFLINE\" &&\n <Tooltip title=\"Offline\">\n <span className=\"asset-status-red alarm-info-icon pr-5\" ><img src={offlineIcon} alt=\"\" /></span>\n </Tooltip>\n }\n </>\n )\n },\n {\n title: \"Mastertag\",\n column_name:\"mastertag\",\n dataIndex: \"mastertag\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'mastertag' ? sortDirection : false,\n },\n {\n title: \"ESN\",\n column_name:\"esn\",\n dataIndex: \"esn\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'esn' ? sortDirection : false,\n },\n {\n title: \"Current Version\",\n column_name:\"currentVersion\",\n dataIndex: \"currentVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'currentversion' ? sortDirection : false,\n },\n {\n title: \"New Version\",\n column_name:\"newVersion\",\n dataIndex: \"newVersion\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'newversion' ? sortDirection : false,\n },\n {\n title: \"Old OTA Status\",\n column_name:\"oldStatus\",\n dataIndex: \"oldStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'oldstatus' ? sortDirection : false,\n }, \n {\n title: \"OTA Status\",\n column_name:\"otaStatus\",\n dataIndex: \"otaStatus\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'otastatus' ? sortDirection : false,\n },\n {\n title: \"CSU Status at\",\n column_name:\"statusAt\",\n //dataIndex: \"statusAt\"\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'statusat' ? sortDirection : false,\n render: (text: any, record: any) => (\n <> \n { \n <span>{moment(record.statusAt).format('MM/DD/YYYY, h:mm:ss A').toLocaleString()}</span> \n }\n </>\n )\n },\n {\n title: \"Attempts\",\n column_name:\"attempts\",\n dataIndex: \"attempts\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'attempts' ? sortDirection : false,\n },\n {\n title: \"Requests\",\n column_name:\"reqs\",\n dataIndex: \"reqs\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'reqs' ? sortDirection : false,\n },\n {\n title: \"Category\",\n column_name:\"category\",\n dataIndex: \"category\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'category' ? sortDirection : false,\n },\n {\n title: \"Operation\",\n column_name:\"operation\",\n dataIndex: \"operation\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'operation' ? sortDirection : false,\n },\n {\n title: \"Org Name\",\n column_name:\"orgName\",\n dataIndex: \"orgName\",\n sortDirections: ['ascend', 'descend', 'ascend'],\n sorter: true,\n sortOrder: sortColumn == 'orgname' ? sortDirection : false,\n },\n {\n title: \"Info\",\n column_name:\"info\",\n align: \"center\" as \"center\",\n render: (text: string, record: any) => (\n <Space>\n {\n <Tooltip title=\"View Info\">\n <Button\n type=\"default\" \n icon={<InfoOutlined />}\n onClick={(e:any) => {calibrationMaintOpen(e, record)}}\n />\n </Tooltip>\n }\n </Space>\n )\n }//,\n // {\n // title: \"Actions\",\n // column_name:\"actionList\",\n // //dataIndex: \"orgName\"\n // align: \"center\" as \"center\",\n // render: (text: string, record: any) =>(\n // <>\n // <div className=\"container\">\n // {/* //{record.actionList.replace(/['\"]+/g, '').map((tag:any) => { */}\n // { record.actionList.substr(0, record.actionList.length - 1).substr(1).split(',').map((tag:any,index:any) => {\n // return (\n // (tag === \"\")?\n // <div style={{cursor: \"default\"}}>{record.otaStatus}</div>\n // :\n // null\n // );\n // })}\n // </div>\n // </>\n \n // ) \n \n // }\n ]\n\n return(\n \n <>\n <div> \n <Row gutter={8}>\n <Table \n data-id=\"ota-history-data\" \n className=\"mt-15\"\n style={{ overflowX: 'auto' }}\n {...tableConfig }\n rowKey={(record:any) => record.gatewayId}\n // columns={(appContext.orgId === ParkerOrgId)? tableHistoryColumnsWithConnectionStatus :tableHistoryColumns}\n columns = {tableHistoryColumnsWithConnectionStatus}\n dataSource={tableData}\n onChange={sortAssetsTable}\n showSorterTooltip={false}\n />\n </Row>\n </div>\n </>\n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n csus: state.csuReducer.csuState.csu.csuList.history\n };\n };\n\nexport default connect(mapStateToProps, actions)(CSUHistory);\n","import { Col, Input, Row, Space, Tabs, Tooltip } from \"antd\";\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { getPermissions } from \"../../utils/commonHelpers\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport { appConfigs } from \"../../utils/configurations\";\nimport * as actions from \"./actions/csu\";\nimport CSU from \"./CSU\";\nimport \"./csu.css\";\nimport CSUHistory from \"./CSUHistory\";\n\n\nconst { Search } = Input;\nconst { TabPane } = Tabs;\ninterface Props { \n context: any;\n permissions: any;\n getCalibrations: Function;\n setSearch: Function;\n }\n\n const OTA: React.FC<Props> = (props) => {\n const [calibrations, setCalibrations] = useState([]);\n const [ searchText, setSearchText ] = useState(\"\");\n const [ passSearchText, setPassSearchText ] = useState(\"\");\n const [ isSearch, setIsSearch ] = useState(false);\n const { contextUser, appContext } = props.context;\n const result = getPermissions(props.permissions.permissions.asset_widgets);\n const [activeTab, setActiveTab] = useState(\"1\");\n const onSearchChange = (e: any) => {\n setIsSearch(false);\n let value = e.target.value.trim();\n setSearchText(value || \"\");\n }\n\n const onSearch = (searchText: string) => {\n setSearchText(searchText || \"\");\n setPassSearchText(searchText || \"\");\n props.setSearch(passSearchText);\n setIsSearch(true);\n }\n\n const onTabChange = (key:string) => {\n setActiveTab(key);\n }\n \n const resetSearch = () => {\n setIsSearch(false);\n }\n \n return(\n \n <>\n {\n (appConfigs.app.enableCumminsUI)&&\n <div data-id=\"ota-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={8}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n ECM OTA Management\n </div>\n </div>\n </Col>\n <Col xs={24} lg={14} className=\"content-header-controls\">\n <Space size=\"middle\">\n {\n //(permissions.isRead) &&\n <Search\n data-id=\"ecm-ota-search-field\"\n key=\"search-field\"\n placeholder=\"Search by esn, version, mastertag\"\n enterButton=\"Search\"\n size=\"middle\"\n allowClear\n onSearch={onSearch}\n onChange={onSearchChange}\n className=\"search-field\"\n value={searchText}\n /> \n } \n </Space>\n </Col>\n </Row>\n <Row gutter={8}>\n\n <Tabs activeKey={activeTab} size=\"large\" type=\"card\" onChange={onTabChange}>\n { \n <TabPane tab=\"Calibrations\" key=\"1\" data-id=\"cmns-ota-all-tab-button\">\n <CSU tabData = {activeTab} search = {passSearchText} isSearch = {isSearch} resetSearch = {resetSearch}></CSU>\n </TabPane> \n }\n { \n <TabPane tab=\"History\" key=\"2\" data-id=\"cmns-ota-history-tab-button\">\n <CSUHistory tabData = {activeTab} search = {passSearchText} isSearch = {isSearch} resetSearch = {resetSearch}></CSUHistory>\n </TabPane>\n } \n </Tabs> \n </Row>\n </div>\n }\n </>\n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n \n };\n };\n\nexport default connect(mapStateToProps, actions)(OTA);\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getVideoTutorials() {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/get_tutorials\"\n )\n .then(response => { \n dispatch({ type: \"VIDEOTUTORIALS_GET_SUCCESS\", data: response.data.data.tutorials });\n console.log(response.data.data.tutorials);\n }\n )\n .catch(function (error) {\n console.log(`error`, error)\n });\n };\n}\n\nexport function getTutorial(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n tutorialId: string\n) {\n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/tutorial/id/\" + tutorialId, {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(response.data.data.operator);\n }\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}\n\nexport function tutorialsSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"TUTORIAL_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n} \n","import React, { useState,useEffect } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Card } from \"antd\";\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport ReactPlayer from 'react-player';\nimport { PlayCircleOutlined } from \"@ant-design/icons\";\nimport Meta from \"antd/lib/card/Meta\";\nconst { TabPane } = Tabs;\ninterface Props \n{\n getVideoTutorials: Function,\n setTab: Function,\n context: any,\n tutorials: any,\n permissions: any,\n}\nconst VideoTutorials: React.FC<Props> = (props) => \n{\n const [playingUrl, setPlayingUrl] = useState<string | null>(null);\n\n useEffect(() => {\n props.getVideoTutorials();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onTabChange = (key: string) => {\n props.setTab(key)\n }\n return (<div className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n <span>Video Tutorials</span>\n </div>\n </div>\n </Col>\n </Row>\n <div className=\"mt-15\">\n <Tabs activeKey={props.tutorials.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}>\n <TabPane tab=\"All Tutorials\" key=\"1\">\n <Row gutter={12}>\n {props.tutorials.tutorialsList.map((tutorial: any) => \n (tutorial.category === \"All videos\" &&\n <Col xs={12} sm={12} md={8} lg={8} xl={8} key={tutorial.id}>\n <Card\n style={{ padding:'3px',marginBottom: '10px' }}\n onClick={() => setPlayingUrl(tutorial.link)}\n cover={\n playingUrl === tutorial.link ? (\n <ReactPlayer\n url={tutorial.link}\n controls\n width=\"100%\"\n height=\"160\"\n playsinline={true}\n stopOnUnmount={false}\n //onPause={() => setPlayingUrl(null)}\n />) : (<><img\n src={tutorial.thumbnail}\n alt=\"Thumbnail\"\n style={{\n width: \"100%\",\n height: \"160\",\n objectFit: \"cover\"\n }}\n />\n <div style={{\n position: \"absolute\",\n top:\"42%\",\n left: \"45%\",\n transform:\"transalte(-50%,-50%)\",\n\n }}>\n <PlayCircleOutlined style={{fontSize:30,color:'grey'}}/>\n </div>\n </>\n )\n }>\n <Meta\n title={tutorial.title}\n description={tutorial.description}\n />\n </Card>\n </Col>\n ))}\n </Row>\n </TabPane>\n </Tabs>\n </div>\n </div>\n );\n}\nconst mapStateToProps = (state: any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n tutorials: state.tutorialsReducers.tutorialsState.tutorials,\n };\n};\nexport default connect(\n mapStateToProps,\n actions\n)(VideoTutorials);","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getReleaseNotes() {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/get_tutorials\"\n )\n .then(response => { \n dispatch({ type: \"RELEASENOTES_GET_SUCCESS\", data: response.data.data.tutorials });\n console.log(response.data.data.tutorials);\n }\n )\n .catch(function (error) {\n console.log(`error`, error)\n });\n };\n}\n\n\nexport function releasenotesSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"RELEASENOTES_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n} \n","import React, { useEffect } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Card } from \"antd\";\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport { UploadOutlined } from '@ant-design/icons';\nimport { Button, message, Upload } from 'antd';\nimport Icon, {FilePdfOutlined} from \"@ant-design/icons\";\nimport { appConfigs } from \"../../../utils/configurations\";\n// import { getToken } from \"../../../utils/commonHelpers\";\nimport axios from \"axios\";\n\n\nconst { TabPane } = Tabs;\ninterface Props {\n getReleaseNotes: Function,\n setTab: Function,\n context: any,\n releasenotes: any,\n permissions: any\n}\nconst ReleaseNotes: React.FC<Props> = (props) => {\n useEffect(() => {\n props.getReleaseNotes();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onTabChange = (key: string) => {\n props.setTab(key)\n }\n\n const handleFileUpload = async (options: any) => {\n const { onSuccess, onError, file, onProgress } = options; \n // let token=getToken();\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('category', \"Release Notes\");\n formData.append('fileName', file.name);\n try {\n const response = await axios.post(appConfigs.server.URL + \"/ui/api/upload-release-notes\", formData, {\n headers: {\n \"Content-Type\": \"multipart/form-data\" \n }\n });\n\n if (response.status === 200) {\n message.success('File uploaded successfully!');\n props.getReleaseNotes();\n } else {\n message.error('File upload failed!');\n }\n } catch (error) {\n console.error('Error uploading file:', error);\n message.error('File upload failed!');\n }\n };\n\n const beforeFileUpload = (file:any) => {\n const fileType = file.type === 'application/pdf';\n // const fileSize = file.size / 1024 < 500;\n\n if (!fileType) {\n message.error('Only PDF file type is allowed');\n } \n \n return fileType;\n }\n\n\n const filteredList = props.releasenotes.releasenotesList.filter((releasenotesdata: any) =>\n releasenotesdata.category === 'Release Notes');\n filteredList.sort((a: any, b: any) => b.id - a.id);\n\n\n return (<div className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n <span>Release Notes</span>\n </div>\n </div>\n </Col>\n </Row>\n <div className=\"mt-15\">\n <Tabs activeKey={props.releasenotes.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}>\n <TabPane tab=\"All Release Notes\" key=\"1\">\n {(\n props.context.appContext.userId === 'da915c00-d3c9-11ed-92c5-b79e53de7502' || // Rupa prod\n props.context.appContext.userId === 'ba085340-afa0-11ee-b3af-9f9a6f95957b' || // Rupa dev\n props.context.appContext.userId === 'a44d5840-5f65-11eb-818b-7f8b88f38ec0' || // Sanath prod\n props.context.appContext.userId === '52f11900-5f65-11eb-9e05-ef71659b2f26' || // Sanath dev\n props.context.appContext.userId === '9bb0b810-1d5f-11ea-b10c-611371d47cc6' || // Ravi Teja - Prod\n props.context.appContext.userId === 'cad29b40-1d5f-11ea-abaa-a34583f0c422' || // Ravi Teja - Dev\n props.context.appContext.userId === '0a967c60-4015-11ef-8399-f3910b970a6f' ) && // Arsheen - Dev\n <div>\n <Upload \n multiple={false} \n beforeUpload={beforeFileUpload}\n customRequest={handleFileUpload}\n showUploadList={false}\n >\n <Button icon={<UploadOutlined />}>Upload File</Button>\n </Upload>\n </div>}\n\n <div>\n <ul style={{ listStyleType: 'disc', padding: '5px' }}>\n {filteredList.slice(0, 20).map((releasenotesdata: any) => (\n <li key={releasenotesdata.id} style={{ marginBottom: '5px', fontSize: '16px' }}>\n <a href={releasenotesdata.link} target=\"_blank\" rel=\"noopener noreferrer\">\n <FilePdfOutlined style={{ margin: '15px', fontSize: '180%' }} />\n {releasenotesdata.title}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </TabPane>\n </Tabs>\n </div>\n </div>\n );\n}\nconst mapStateToProps = (state: any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n releasenotes: state.releasenotesReducers.releasenotesState.releasenotes,\n };\n};\nexport default connect(\n mapStateToProps,\n actions\n)(ReleaseNotes);","import Axios from \"axios\";\nimport { errorResponse } from \"../../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../../utils/configurations\";\n\nexport function getUserGuide() {\n \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/ui/api/get_tutorials\"\n )\n .then(response => { \n dispatch({ type: \"USERGUIDE_GET_SUCCESS\", data: response.data.data.tutorials });\n console.log(response.data.data.tutorials);\n }\n )\n .catch(function (error) {\n console.log(`error`, error)\n });\n };\n}\n\n\nexport function userguideSetSearch(\n searchText: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"USERGUIDE_SET_SEARCH\", searchText: searchText });\n }\n} \n\nexport function setTab(\n tabNumber: string \n) {\n return (dispatch: any) => {\n dispatch({ type: \"SET_TAB\", tabNumber: tabNumber });\n }\n} \n","import React, { useState,useEffect } from \"react\";\nimport { Row, Col, Tooltip, Tabs, Card } from \"antd\";\nimport BackNavigation from \"../../../utils/Components/BackNavigation\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport Meta from \"antd/lib/card/Meta\";\nimport Icon, {\n FilePdfOutlined} from \"@ant-design/icons\";\nconst { TabPane } = Tabs;\ninterface Props \n{\n getUserGuide: Function,\n setTab: Function,\n context: any,\n userguide: any,\n permissions: any,\n}\nconst UserGuide: React.FC<Props> = (props) => \n{\n const [playingUrl, setPlayingUrl] = useState<string | null>(null);\n const [numPages, setNumPages] = useState<number>();\n const [pageNumber, setPageNumber] = useState<number>(1);\n\n useEffect(() => {\n props.getUserGuide();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onTabChange = (key: string) => {\n props.setTab(key)\n }\n const onDocumentLoadSuccess=({ numPages }: { numPages: number }): void=> {\n setNumPages(numPages);\n }\n \n return (<div className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={14}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n <span>User Guide</span>\n </div>\n </div>\n </Col>\n </Row>\n <div className=\"mt-15\">\n <Tabs activeKey={props.userguide.activeTab} size=\"large\" type=\"card\" onChange={onTabChange}>\n <TabPane tab=\"All User Guides\" key=\"1\"> \n <ul style={{ listStyleType: 'disc', padding:'5px' }}>\n {props.userguide.userguideList.map((userguidedata:any, index:number) => (\n userguidedata.category === \"Userguide\" && (\n <li key={userguidedata.id} style={{ marginBottom: '5px',fontSize: '16px' }}>\n <a href={userguidedata.link} target=\"_blank\" rel=\"noopener noreferrer\">\n <FilePdfOutlined style={{ margin: '15px', fontSize: '180%' }} />\n {userguidedata.title}\n </a>\n </li>\n )\n ))}\n </ul>\n </TabPane>\n </Tabs>\n </div>\n </div>\n );\n}\nconst mapStateToProps = (state: any) => {\n return {\n permissions: state.contextReducer.data,\n context: state.contextReducer.context,\n userguide: state.userguideReducer.userguideState.userguide,\n };\n};\nexport default connect(\n mapStateToProps,\n actions\n)(UserGuide);","import Axios from \"axios\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function getSerialNumberList(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n) { \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/api/assets-op-lite/?mode=org-and-below&status=active\" , {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) { \n let data = response.data.data.assets == null || (response.data.data.assets.length || 0) === 0 ? {} : response.data.data.assets[0];\n callbackFnSuccess(data);\n }\n dispatch({\n type: \"DANAREPORTS_GET_SUCCESS\",\n payload: { data: response.data.data.assets }, \n });\n \n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error);\n }\n errorResponse(me, error);\n });\n };\n}","import React, { useState,useEffect } from \"react\";\nimport {\n Row,\n Col,\n Tooltip,\n Select,\n Spin\n} from \"antd\";\nimport BackNavigation from \"../../utils/Components/BackNavigation\";\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport \"./danareports.css\";\n\ninterface Props {\n reportList:any,\n getSerialNumberList :Function;\n}\nconst Danareports: React.FC<Props> = (props) => \n { \n const [selectedMac, setSelectedMac] = useState<string | null>(null);\n const [selectedMasterTag, setSelectedMasterTag] = useState<string | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n\n useEffect(() => {\n props.getSerialNumberList(null,null,null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n , []);\n const selectOptions = props.reportList.reports?.map((report: any) => ({ \n value: report.mac, \n label: report.mac, \n }));\n\n // Function to handle the change of selected MAC and fetch corresponding masterTag\n const handleSelectChange = (value: string) => {\n setSelectedMac(value);\n setLoading(true);\n // Finding the report object based on the selected MAC and extract the masterTag\n const selectedReport = props.reportList.reports.find(\n (report: any) => report.mac === value\n );\n if (selectedReport) {\n setSelectedMasterTag(selectedReport.mastertag);\n }\n };\n\n // Function to handle iframe onLoad event to hide the spinner\n const handleIframeLoad = () => {\n setLoading(false); \n };\n\n // Function to handle iframe error in case there's an issue loading the content\n const handleIframeError = () => {\n setLoading(false);\n };\n \n // Dynamic iframe URL based on selected MAC\n const iframeUrl = selectedMac\n ? `https://dana-example-iframe-fca4erghfkg6hkas.eastus-01.azurewebsites.net/home?param=${selectedMasterTag}`\n : \"\";\n \n useEffect(() => {\n if (loading) {\n const timer = setTimeout(() => {\n setLoading(false); // Stop spinner after 10 seconds\n // console.log(\"Loading timeout reached.\");\n }, 10000); // 10 seconds timeout\n return () => clearTimeout(timer); // Clean up the timer on component unmount\n }\n }, [loading]);\n return(\n \n <div data-id=\"schedules-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={24}>\n <div className=\"content-header page-title\">\n <div style={{ display: \"flex\" }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n DANA Reports\n </div>\n </div>\n </Col>\n \n <Col xs={24} lg={4} className=\"content-header-controls\">\n <div className=\"content-header\">\n <div style={{ display: \"flex\", marginTop: '20px' }}>\n <Select\n size=\"large\"\n style={{ width: '100%' }}\n showSearch\n placeholder=\"Select serial number\"\n options={selectOptions}\n onChange={handleSelectChange}\n /> \n </div>\n </div>\n </Col>\n {loading ? (\n <Col xs={24} lg={24}>\n <div style={{ textAlign: \"center\", padding: \"50px 0\" }}>\n <Spin size=\"large\" tip=\"Loading...\" />\n </div>\n </Col>\n ) : (\n <iframe\n src={iframeUrl} // Dynamic URL based on selected value\n title=\"DANA Reports\"\n style={{\n border: \"none\",\n width: \"100%\",\n height: \"800px\",\n overflow: \"hidden\",\n }}\n scrolling=\"no\"\n allowFullScreen\n onLoad={handleIframeLoad} // Trigger loading spinner hide when iframe loads\n onError={handleIframeError} // Handle errors if iframe fails to load\n />\n )}\n </Row>\n </div>\n );\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n reportList:\n state.danaReportReducer.danaReportState.reportList,\n };\n};\n\nexport default connect(mapStateToProps, actions)(Danareports);\n","import Axios from \"axios\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { appConfigs } from \"../../../utils/configurations\";\n\nexport function orgreportAccessGet(\n me?: any,\n callbackSuccessFn?: any,\n callbackErrorFn?: any,\n selectedOrgId?: any\n) {\n return async (dispatch: any) => {\n //console.log(selectedOrgId);\n await Axios.get(\n //`http://localhost:8080/ui/api/report-schedules/orgReportMapping/${selectedOrgId}`,\n appConfigs.server.URL + `/ui/api/report-schedules/orgReportMapping/${selectedOrgId}`, \n {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackSuccessFn != null) {\n callbackSuccessFn(response.data);\n }\n dispatch({ type: \"ORGREPORT_ACCESS_SUCCESS\", payload: {data: response.data.data.orgReportMappingList} });\n }\n )\n .catch(function (error) { \n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"REPORT_ACCESS_FAILURE\", error: error });\n }\n );\n };\n}\nexport function getReportsToken(\n me?: any,\n callbackSuccessFn?: any,\n callbackErrorFn?: any,\n) {\n return async (dispatch: any) => {\n await Axios.get(\n //`http://localhost:8080/ui/api/report-schedules/generate`,\n appConfigs.server.URL + `/ui/api/report-schedules/generate`, \n {\n responseType: \"json\", \n headers: {},\n params: {}\n }\n )\n .then(response => { \n if (callbackSuccessFn != null) {\n callbackSuccessFn(response);\n }\n dispatch({ type: \"REPORTSTOKEN_ACCESS_SUCCESS\", payload: {data: response.data} });\n }\n )\n .catch(function (error) { \n if (callbackErrorFn != null) {\n callbackErrorFn(error);\n }\n dispatch({ type: \"REPORTSTOKEN_ACCESS_FAILURE\", error: error });\n }\n );\n };\n}","import { Col, Row, Select, Tooltip, message } from 'antd'\nimport * as powerbiClient from 'powerbi-client'\nimport { models } from 'powerbi-client'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { connect } from 'react-redux'\nimport BackNavigation from '../../utils/Components/BackNavigation'\nimport * as actions from './actions'\nimport './reports.css'\n// Define the Props interface\ninterface Props {\n orgReportList: any\n context: any\n orgreportAccessGet: Function\n getReportsToken: Function\n}\nconst Reports: React.FC<Props> = (props) => {\n const [selectedReport, setSelectedReport] = useState<string | undefined>(\n undefined,\n )\n const [selectedWorkSpaceId, setSelectedWorkSpaceId] = useState<string | null>(\n null,\n )\n const [selectedReportId, setSelectedReportId] = useState<string | null>(null)\n const [selectedDatasetId, setSelectedDatasetId] = useState<string | null>(\n null,\n )\n const [loading, setLoading] = useState<boolean>(false)\n const [reportsData, setReportsData] = useState<any>(null)\n const { appContext } = props.context\n const [token, setToken] = useState<string | null>(null)\n const [powerBICredentials, setPowerBICredentials] = useState<string | null>(\n null,\n )\n const [isFetched, setIsFetched] = useState<boolean>(false)\n const reportClass = 'powerbi-embed-container'\n const embedContainerRef = useRef<HTMLDivElement | null>(null)\n // Fetch token and report data\n useEffect(() => {\n props.orgreportAccessGet(null, null, null, appContext.orgId)\n props.getReportsToken(null, null, null)\n }, [])\n useEffect(() => {\n if (\n !token &&\n props.orgReportList &&\n props.orgReportList.accessToken.access_token\n ) {\n setToken(props.orgReportList.accessToken.access_token)\n }\n if (\n props.orgReportList.orgReportMappingList && props.orgReportList.orgReportMappingList.length > 0\n ) {\n setSelectedReport(props.orgReportList.orgReportMappingList[0]?.description);\n setSelectedWorkSpaceId(props.orgReportList.orgReportMappingList[0]?.workspaceID)\n setSelectedReportId(props.orgReportList.orgReportMappingList[0]?.reportID)\n setSelectedDatasetId(props.orgReportList.orgReportMappingList[0]?.datasetID)\n }\n }, [props.orgReportList, props.orgReportList.orgReportMappingList, token])\n useEffect(() => {\n if (token && selectedWorkSpaceId && !isFetched) {\n fetchReportsData(token, selectedWorkSpaceId)\n }\n }, [token, selectedWorkSpaceId, isFetched])\n const fetchReportsData = async (token: string, workspaceId: string) => {\n if (!token) {\n message.error('Access token is missing.')\n return\n }\n try {\n setLoading(true)\n const response = await fetch(\n `https://api.powerbi.com/v1.0/myorg/groups/${workspaceId}/reports`,\n {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n },\n )\n const data = await response.json()\n if (response.ok) {\n setReportsData(data.value)\n setIsFetched(true)\n } else {\n throw new Error(data.error.message || 'Failed to fetch reports')\n }\n } catch (error) {\n setLoading(false)\n } finally {\n setLoading(false)\n }\n }\n useEffect(() => {\n if (reportsData && reportsData.length > 0 && !selectedReport) {\n const firstReport = reportsData[0]\n setSelectedReport(firstReport.description)\n setSelectedWorkSpaceId(firstReport.workspaceID)\n setSelectedReportId(firstReport.reportID)\n setSelectedDatasetId(firstReport.datasetID)\n }\n }, [reportsData, selectedReport])\n const selectOptions = props.orgReportList.orgReportMappingList.map(\n (report: any) => ({\n value: report.description,\n label: report.description,\n }),\n )\n const handleSelectChange = (value: string) => {\n setSelectedReport(value)\n setLoading(true)\n const selectedReport = props.orgReportList.orgReportMappingList.find(\n (report: any) => report.description === value,\n )\n console.log(\"selectedReport:\" + selectedReport);\n if (selectedReport) {\n setSelectedWorkSpaceId(selectedReport.workspaceID)\n setSelectedReportId(selectedReport.reportID)\n setSelectedDatasetId(selectedReport.datasetID)\n setPowerBICredentials(null)\n setIsFetched(false) // To trigger fetching of new report data\n }\n }\n useEffect(() => {\n if (selectedReportId && selectedWorkSpaceId && token) {\n setPowerBICredentials(null)\n generatePowerBIToken()\n }\n }, [selectedReportId, selectedWorkSpaceId, token])\n const generatePowerBIToken = async () => {\n let accessToken = token\n if (!accessToken) {\n accessToken = props.orgReportList.accessToken.access_token;\n }\n if (!selectedWorkSpaceId || !selectedReportId || !accessToken) {\n message.error('Missing necessary data for token generation.')\n return\n }\n let contextUserId = appContext.userId\n let contextOrgId = appContext.orgId\n let selectedReportDatasetID = selectedDatasetId\n // Define requestBody as a global variable\n let requestBody = {\n accessLevel: 'View',\n identities: [\n {\n username: contextOrgId, // Initially set to contextOrgId\n roles: ['OrgID', 'Role2'],\n datasets: [selectedReportDatasetID],\n },\n ],\n }\n // Check for the specific conditions to modify contextOrgId\n const reportName = selectedReport // This will be the name of the selected report\n const parkerOrgId = 'c6adcb40-be92-11e6-9ed6-a5bc9cb5279b'\n // ePTO/PX condition\n if (\n (reportName === 'ePTO' ||\n reportName === 'PX Report' ||\n reportName === 'ePTO Extended' ||\n reportName === 'State Of Charge') &&\n contextOrgId === parkerOrgId\n ) {\n contextOrgId = '925a4395-11c8-4497-9174-66ba6cf10bfc' // Set to Viatec org ID\n // Update the requestBody to reflect the new contextOrgId\n requestBody.identities[0].username = contextOrgId\n }\n // Toyota Reports condition\n else if (\n (reportName === 'Utilization' ||\n reportName === 'PM' ||\n reportName === 'Operator Checklist' ||\n reportName === 'Incident' ||\n reportName === 'Tire Summary') &&\n contextOrgId === parkerOrgId\n ) {\n contextOrgId = '7ff34c90-36b2-11e8-8e2e-6f1fbe0d469d' // Set to Toyota org ID\n // Update the requestBody to reflect the new contextOrgId\n requestBody.identities[0].username = contextOrgId\n }\n // Default condition where requestBody is modified based on user and report\n else {\n // Additional conditions based on reportName\n if (\n appContext.mode !== 'support' &&\n appContext.userId != null &&\n reportName !== 'IQANBilling' &&\n contextOrgId !== parkerOrgId\n ) {\n contextOrgId = contextUserId // Set contextOrgId to contextUserId for these conditions\n // Update the requestBody to reflect the new contextOrgId\n requestBody = {\n accessLevel: 'View',\n identities: [\n {\n username: contextOrgId, // Set updated contextOrgId here\n roles: ['UserOrgs'],\n datasets: [selectedReportDatasetID],\n },\n ],\n }\n }\n }\n // console.log(requestBody)\n try {\n const response = await fetch(\n `https://api.powerbi.com/v1.0/myorg/groups/${selectedWorkSpaceId}/reports/${selectedReportId}/GenerateToken`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n Authorization: `Bearer ${accessToken}`,\n },\n body: JSON.stringify(requestBody),\n },\n )\n const data = await response.json()\n if (response.ok) {\n setPowerBICredentials(data.token)\n }\n } catch (error) {\n //message.error(`Error generating token: ${error.message}`);\n }\n }\n // Embed Power BI Report using the powerbi-client\n const embedReport = async () => {\n if (\n !embedContainerRef.current ||\n !powerBICredentials ||\n !selectedReportId\n ) {\n return\n }\n const embedConfig = {\n type: 'report',\n id: selectedReportId || '',\n embedUrl:\n reportsData?.find((report: any) => report.id === selectedReportId)\n ?.embedUrl || '',\n accessToken: powerBICredentials || '',\n tokenType: models.TokenType.Embed,\n settings: {\n panes: {\n filters: { expanded: false, visible: false },\n },\n },\n }\n // Check if the report description is \"GatewayService\" or \"IQANBilling\" and enable the filter pane\n // console.log(\"reportsData:\"+JSON.stringify(reportsData));\n const selectedReportData = reportsData?.find(\n (report: any) => report.id === selectedReportId,\n )\n console.log(\"selectedReportId:\"+selectedReportId);\n console.log(\"selectedReportData.name:\"+selectedReportData.name);\n if (\n selectedReportData &&\n (selectedReportData.name === 'GatewayService' ||\n selectedReportData.name === 'IQANBilling')\n ) {\n embedConfig.settings.panes.filters.expanded = true\n embedConfig.settings.panes.filters.visible = true\n }\n if (!embedConfig.embedUrl) {\n //console.log('embed URL is missing for the selected Report')\n return\n }\n const embedContainer: HTMLElement = embedContainerRef.current\n const powerbi: powerbiClient.service.Service = window['powerbi']\n const report = powerbi.embed(\n embedContainer,\n embedConfig,\n ) as powerbiClient.Report\n // Listen for events and apply slicer filters after report is loaded\n report.on('loaded', async () => {\n // console.log('Report loaded.')\n await setSlicerFilter(report)\n })\n report.on('rendered', () => {\n //console.log('rendered')\n setInterval(() => checkSlicerFilters(report), 5000) // Run every 5 seconds\n })\n report.on('error', (event: powerbiClient.service.ICustomEvent<any>) => {\n //console.error('Error embedding report:', event.detail)\n })\n }\n const checkSlicerFilters = async (report: any) => {\n console.log('checkSlicerFilters')\n try {\n const pages: powerbiClient.Page[] = await report.getPages()\n const page = pages.find((page) => page.isActive)\n if (!page) {\n //console.error('Active page not found')\n return\n }\n const visuals: powerbiClient.VisualDescriptor[] = await page.getVisuals()\n visuals.forEach(async (visual: any) => {\n if (visual.type === 'slicer') {\n try {\n const slicerState = await visual.getSlicerState()\n //console.log('Slicer State:', slicerState)\n let selectedFromDate = ''\n let selectedToDate = ''\n slicerState.filters.forEach((filter: any) => {\n if (\n filter.target?.table === 'CalenderTable' &&\n filter.target.column === 'datestamp'\n ) {\n filter.conditions.forEach((condition: any) => {\n if (condition.operator === 'GreaterThanOrEqual') {\n let fromDate = new Date(condition.value)\n fromDate.setDate(fromDate.getDate() + 1) // Add 1 day\n selectedFromDate =\n fromDate.toISOString().split('T')[0] + 'T00:00:00'\n //console.log('Selected From Date:', selectedFromDate)\n if (selectedFromDate) {\n sessionStorage.setItem(\n 'selectedFromDate',\n selectedFromDate,\n )\n }\n } else if (condition.operator === 'LessThan') {\n selectedToDate =\n new Date(condition.value).toISOString().split('T')[0] +\n 'T00:00:00'\n //console.log('Selected To Date:', selectedToDate)\n if (selectedToDate) {\n sessionStorage.setItem('selectedToDate', selectedToDate)\n }\n }\n })\n }\n })\n } catch (error) {\n //console.error('Error getting slicer state:', error)\n }\n }\n })\n } catch (error) {\n //console.error('Error checking slicer filters:', error)\n }\n }\n const setSlicerFilter = async (report: powerbiClient.Report) => {\n let date = new Date()\n let fromDate: string = new Date(date.setDate(date.getDate() - 14))\n .toISOString()\n .split('T')[0] // 14 days ago\n // console.log(fromDate)\n let toDate: string = new Date().toISOString().split('T')[0] // today's date\n // console.log(toDate)\n let storedFromDate = sessionStorage.getItem('selectedFromDate')\n let storedToDate = sessionStorage.getItem('selectedToDate')\n // console.log(storedFromDate)\n // console.log(storedToDate)\n if (!storedFromDate) {\n storedFromDate = fromDate.toString().split('T')[0] + 'T00:00:00'\n }\n if (!storedToDate) {\n storedToDate = toDate\n }\n // Initialize the filter condition array\n const conditions: models.IAdvancedFilter['conditions'] = [\n {\n operator: 'GreaterThanOrEqual',\n value: storedFromDate,\n },\n ]\n // Only add the \"LessThan\" condition if both storedFromDate and storedToDate are available\n if (storedFromDate && storedToDate) {\n conditions.push({\n operator: 'LessThanOrEqual',\n value: storedToDate,\n })\n }\n const filter: models.IAdvancedFilter = {\n $schema: 'http://powerbi.com/product/schema#advanced',\n filterType: models.FilterType.Advanced,\n target: {\n table: 'CalenderTable',\n column: 'datestamp',\n },\n logicalOperator: 'And',\n conditions: conditions,\n }\n try {\n const pages: powerbiClient.Page[] = await report.getPages()\n const activePage: powerbiClient.Page = pages.find(\n (page) => page.isActive,\n )!\n const visuals: powerbiClient.VisualDescriptor[] = await activePage.getVisuals()\n const slicer: powerbiClient.VisualDescriptor = visuals.find(\n (visual) =>\n visual.type === 'slicer' &&\n (visual.name === '4bf621c8d9c9c7f03a44' || // ePTO || ePTOV2\n visual.name === 'b130e82820402bd21880' || // FleetSummary\n visual.name === '1226946fe38dc9ef21d3' || // Impact\n visual.name === 'baad5eddef19b74d7dd7' || // Lift\n visual.name === '4bf621c8d9c9c7f03a44' || // PX\n visual.name === '7f258d946175434384ad' || // Health\n visual.name === '93efc7bb6ec205624c28' || // Operations\n visual.name === '01297dba8eb8e3a45ca6' || // SOC\n visual.name === 'bdf3bd571b9d7600a8d5'), // Utilization\n )!\n await slicer.setSlicerState({ filters: [filter] })\n console.log('Slicer filter applied.')\n } catch (error) {\n console.error('Error applying slicer filter:', error)\n }\n }\n useEffect(() => {\n if (powerBICredentials && selectedReportId) {\n embedReport()\n }\n }, [powerBICredentials, selectedReportId])\n return (\n <div data-id=\"schedules-container\" className=\"layout-content\">\n <Row gutter={8}>\n <Col xs={24} lg={24}>\n <div className=\"content-header page-title\">\n <div style={{ display: 'flex' }}>\n <Tooltip title=\"Go To Previous Page\">\n <BackNavigation />\n </Tooltip>\n Reports\n </div>\n </div>\n </Col>\n <Col xs={24} lg={4} className=\"content-header-controls\">\n <div className=\"content-header\">\n <div\n style={{\n display: 'flex',\n marginTop: '20px',\n marginBottom: '20px',\n }}\n >\n <Select\n size=\"large\"\n style={{ width: '100%' }}\n showSearch\n placeholder=\"Select Report\"\n options={selectOptions}\n onChange={handleSelectChange}\n value={selectedReport}\n />\n </div>\n </div>\n </Col>\n <Col xs={24} lg={24}>\n {selectedReport && (\n <div\n ref={embedContainerRef}\n className={reportClass}\n style={{ height: '600px' }}\n />\n )}\n </Col>\n </Row>\n </div>\n )\n}\nconst mapStateToProps = (state: any) => {\n return {\n context: state.contextReducer.context,\n permissions: state.contextReducer.data,\n orgReportList: state.ReportReducer.ReportState.orgReportList,\n }\n}\nexport default connect(mapStateToProps, actions)(Reports)\n","import React, { Component } from \"react\";\nimport { useOktaAuth } from '@okta/okta-react';\nimport { Layout, message} from \"antd\";\nimport Axios from \"axios\";\nimport \"antd/dist/antd.css\";\nimport \"./App.css\";\n\nimport { Router } from \"react-router-dom\";\nimport history from './utils/history';\nimport { SecureRoute } from '@okta/okta-react';\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\nimport QuestionBank from \"./pages/TaylorAccess/QuestionManagement/QuestionBank\";\nimport TaylorOperators from \"./pages/TaylorAccess/OperatorManagement/Operators\";\nimport OperatorsHistory from \"./pages/TaylorAccess/OperatorManagement/OperatorsHistory\";\n\nimport { \n setHeaderColor, loadingIndicatorStart, \n loadingIndicatorEnd, clientStorageClear, loadPage, getLoginUrl,\n isSilentRequest,\n getToken,\n isContextUrl\n} from \"./utils/commonHelpers\";\n\nimport TopHeader from \"./layouts/TopHeader\";\nimport LeftSider from \"./layouts/LeftSider\";\n\nimport FleetOverview from \"./pages/FleetOverview2/FleetOverview\";\nimport Dashboard from './pages/Dashboard';\nimport Dashboard2 from './pages/Dashboard2';\nimport Orgs from \"./pages/Orgs/Orgs\";\nimport Users from \"./pages/Users/Users\";\nimport Roles from \"./pages/Roles/Roles\";\n//import Countries from \"./pages/Countries/Countries\";\nimport Alerts from \"./pages/Alerts/Alerts\";\nimport Assets from \"./pages/Assets/Assets\";\nimport UsersControllers from \"./pages/Controllers/UsersControllers\";\nimport Templates from \"./pages/Templates/Templates\";\nimport TemplateDetails from \"./pages/TemplateDetails/TemplateDetails\";\nimport NotFound404 from \"./pages/NotFound404/NotFound404\";\nimport Operators from \"./pages/Operators/Oprs\";\nimport Tutorials from \"./pages/Help/Tutorials/Tutorials\";\nimport Contracts from \"./pages/Admin/Contracts/Contracts\";\n//import Controllers from \"./pages/Admin/Controllers/Controllers\";\nimport Applications from \"./pages/Admin/Applications/Applications\";\nimport AIOT from \"./pages/Admin/AIOT\";\nimport Controllers from \"./pages/Iqanopen/Controllers/Devices\";\nimport Softwares from \"./pages/Iqanopen/Softwares/Softwares\";\nimport UDS from \"./pages/Iqanopen/UpdateDeviceSoftware/UDS\";\nimport ReportSchedules from \"./pages/ReportSchedules/Schedules\";\nimport { appConfigs } from \"./utils/configurations\";\nimport FleetStatsOverview from \"./pages/FleetOverview2/FleetStatsOverview\";\nimport NotificationsOverview from \"./pages/FleetOverview2/NotificationsOverview\";\nimport OTA from \"./pages/CSU/OTA\";\nimport VideoTutorials from \"./pages/Help/VideoTutorials/VideoTutorials\";\nimport ReleaseNotes from \"./pages/Help/ReleaseNotes/ReleaseNotes\";\nimport UserGuide from \"./pages/Help/UserGuide/UserGuide\";\nimport DanaIframeIntegration from \"./pages/Dana/Danareports\";\nimport Reports from \"./pages/Reports/reports\";\nconst { Content } = Layout;\n\ninterface Prop {\n contextGet: Function,\n supportModeInit: Function,\n supportMode: any,\n context: any,\n reportAccessGet: Function,\n userOrgAccessGet: Function,\n permissionsGet: Function, \n maxCommandPermissionValueGet: Function, \n getQuickStats: Function, \n getAssetsWithDMs: Function, \n permissions: any, \n orgSelector: any, \n maxCommandPermissionValue : any,\n stats: any, \n notifications: any, \n}\n\nfunction isSecure() {\n let \n oktaStorage:string = window.localStorage.getItem(\"okta-token-storage\") || \"{}\",\n oktaStorageJson:any = JSON.parse(oktaStorage); \n\n return \"idToken\" in oktaStorageJson && \"value\" in oktaStorageJson.idToken && (oktaStorageJson.idToken.value || \"\") !== \"\";\n}\n\nfunction interceptorsSetup(props: any, supportMode: any, permissions: any) {\n \n Axios.interceptors.request.use(\n function(config) { \n let \n oktaStorage:string = window.localStorage.getItem(\"okta-token-storage\") || \"{}\",\n oktaStorageJson:any = JSON.parse(oktaStorage),\n supportModeString:string = window.sessionStorage.getItem(\"support-mode\") || \"{}\",\n supportModeJson:any = JSON.parse(supportModeString);\n \n if (!isSilentRequest(config.url || \"\")) {\n loadingIndicatorStart(); \n }\n let token=getToken();\n //config.headers.Authorization = `Bearer ${oktaStorageJson.idToken.value}`; \n if(token === null)\n {\n loadPage(getLoginUrl());\n }\n config.headers.Authorization = `Bearer ${token.value||token.idToken}`; \n if (supportModeString !== \"{}\") {\n config.headers[\"X-support-org-id\"] = supportModeJson.orgId;\n }\n\n return config;\n }, \n function(error) {\n loadingIndicatorEnd();\n return Promise.reject(error);\n }\n );\n Axios.interceptors.response.use(\n function (response) {\n \n\n if (isContextUrl(response.config.url || \"\")) {\n if (!response.data.data.context.user.active) {\n clientStorageClear();\n loadingIndicatorStart();\n message.loading(\"Logging out Deactivated User...\", 0);\n localStorage.removeItem(\"pathname\");\n window.localStorage.setItem(\"logoutInProgress\", \"true\");\n // authService.logout(window.location.origin + \"/login\");\n }\n }\n\n if (!isSilentRequest(response.config.url || \"\")) {\n loadingIndicatorEnd();\n }\n return response;\n }, \n function (error) {\n loadingIndicatorEnd();\n return Promise.reject(error);\n }\n );\n}\n\nclass App extends Component<Prop, {}> {\n\n menuCounter: number = 0;\n \n componentDidMount () { \n if (isSecure()) {\n interceptorsSetup(this.props.context, this.props.supportMode, this.props.permissions); \n this.props.contextGet(this, this.contextGetSuccess, this.contextGetFailure);\n this.props.permissionsGet(this, this.permissionsGetSuccess, this.contextGetFailure);\n this.props.maxCommandPermissionValueGet(this, this.maxCommandPermissionValueGetSuccess, this.contextGetFailure);\n this.props.getQuickStats(this, this.statsGetSuccess, this.contextGetFailure);\n this.props.getAssetsWithDMs(this.contextGetFailure);\n this.props.supportModeInit(this, null); \n }\n else { \n loadPage(getLoginUrl()); \n }\n }\n\n contextGetSuccess = (data:any) => {\n setTimeout(function () {\n setHeaderColor(data.orgSettings.headerColor || \"#000000\");\n }, 250); \n \n if (data.appContext.orgId) {\n this.props.reportAccessGet(this, null, null, data.appContext.orgId);\n this.props.userOrgAccessGet(this, null, null, data.appContext.orgId, data.appContext.userId); \n this.props.maxCommandPermissionValueGet(this, null, null, data.appContext.orgId, data.appContext.userId); \n } \n }\n\n contextGetFailure = (error:any) => {\n const errorCode:number = !error.response ? 999 : (error.response.status || 999);\n \n if (errorCode === 400 || errorCode === 500) {\n const loginUrl = getLoginUrl();\n const loginError = {\n \"stop\" : true, \n \"errorCode\": errorCode, \n \"errorObject\": error.response.data.errors\n };\n \n loadingIndicatorStart();\n clientStorageClear();\n window.sessionStorage.setItem(\"loginError\", JSON.stringify(loginError)); \n loadPage(loginUrl); \n }\n else {\n if (errorCode !== 401) {\n message.error(\"Unable to get app user context\");\n }\n }\n }\n\n permissionsGetSuccess = () => {\n setTimeout(() =>{},250); \n }\n\n\n maxCommandPermissionValueGetSuccess = () => {\n setTimeout(() =>{},250); \n }\n\n statsGetSuccess = () => {\n setTimeout(() =>{},250); \n }\n\n rolesGetSuccess = () => {\n setTimeout(() =>{},250); \n }\n \n \n render() {\n \n let contractsOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'contracts')[0]?.orgsList;\n let applicationsOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'applications')[0]?.orgsList;\n let aiotOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'aiot')[0]?.orgsList;\n let iqanopenOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'iqanopen')[0]?.orgsList;\n let controllersOrgsList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'controllers')[0]?.orgsList;\n let contractsUsersList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'contracts')[0]?.usersList;\n let applicationsUsersList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'applications')[0]?.usersList;\n let aiotUsersList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'aiot')[0]?.usersList;\n let controllersUsersList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'controllers')[0]?.usersList;\n let iqanopenUsersList= this.props.context?.systemSettings?.filter((sysSetting: any) => sysSetting.settingName === 'iqanopen')[0]?.usersList;\n return (\n <Router history={history}>\n <Layout>\n {\n (this.props.context.initialized || false) &&\n <LeftSider />\n }\n <Layout className=\"site-layout\" style={{ height: \"100vh\" }}>\n {\n (this.props.context.initialized || false) &&\n <TopHeader />\n }\n <Content>\n\n {\n (this.props.stats.initialized && this.props.orgSelector.orgSelection.length > 0) &&\n <FleetStatsOverview />\n }\n\n {\n (this.props.stats.initialized && this.props.orgSelector.orgSelection.length > 0) &&\n <NotificationsOverview />\n }\n \n <SecureRoute exact path=\"/map\" render={() => {\n //---------------------------------------------------------------------------------------------------\n // In general, push the component only when /context comes back, not before. Otherwise, the component\n // will be pushed twice (first time for blank context and second time for the updated context) \n // resulting in fireing twice component level listeners.\n //---------------------------------------------------------------------------------------------------\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <FleetOverview mapMode={this.props.context.orgSettings.fleetMapDefaultView} />;\n }\n }} />\n \n <SecureRoute exact path=\"/organizations\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Orgs />;\n }\n }} />\n\n <SecureRoute exact path=\"/users\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Users />;\n }\n }} />\n <SecureRoute exact path=\"/roles\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Roles />;\n }\n }} />\n {/*\n OPS 1149\n \n <SecureRoute exact path=\"/countries\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Countries />;\n }\n }} />\n */}\n <SecureRoute exact path=\"/alerts\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Alerts />;\n }\n\n }} /> \n\n <SecureRoute exact path=\"/alerts/:mode\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Alerts />;\n }\n }} /> \n\n <SecureRoute exact path=\"/assets\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Assets />;\n }\n }} />\n\n <SecureRoute exact path=\"/ota\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <OTA />;\n }\n }} />\n\n\n <SecureRoute exact path=\"/controllers\" render={() => {\n if (\n (this.props.context.initialized || false) && \n this.props.context.user.contextUserIsAdmin && \n (controllersOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n && \n \n (controllersUsersList == null\n ? false\n : controllersUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId)\n )\n ){\n this.menuCounter++;\n return <UsersControllers />;\n }\n }} />\n\n <SecureRoute exact path=\"/assets/:mastertag/details\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Assets />;\n }\n }} />\n { !appConfigs.app.enableDashboard2 ? \n (<SecureRoute exact path=\"/assets/:assetId\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Dashboard />;\n }\n }} />) :\n (\n <SecureRoute exact path=\"/assets/:assetId\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Dashboard2 />;\n }\n }} />\n\n ) \n }\n\n <SecureRoute exact path=\"/templates\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Templates />;\n }\n }} />\n\n <SecureRoute exact path=\"/template/details/:templateName/:templateId\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <TemplateDetails />;\n }\n }} />\n <SecureRoute exact path=\"/reports\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Reports/>;\n }\n }} />\n <SecureRoute exact path=\"/reportschedules\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <ReportSchedules />;\n }\n }} />\n\n <SecureRoute exact path=\"/danareports\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <DanaIframeIntegration/>;\n }\n }} />\n \n\n <SecureRoute exact path=\"/operators\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Operators />;\n }\n }} />\n <SecureRoute exact path=\"/operators/:operatorId\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Operators />;\n }\n }} />\n <SecureRoute exact path=\"/operators/:operatorId/:operatorsHistoryId\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Operators />;\n }\n }} />\n <SecureRoute exact path=\"/tutorials\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <Tutorials />;\n }\n }} />\n <SecureRoute exact path=\"/videotutorials\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <VideoTutorials />;\n }\n }} />\n <SecureRoute exact path=\"/questionmanagement\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <QuestionBank />;\n }\n }} />\n <SecureRoute exact path=\"/operatorsmanagement\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <TaylorOperators />;\n }\n }} />\n <SecureRoute exact path=\"/operatorshistory\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <OperatorsHistory />;\n }\n }} />\n <SecureRoute exact path=\"/releasenotes\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <ReleaseNotes />;\n }\n }} />\n <SecureRoute exact path=\"/userguide\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <UserGuide />;\n }\n }} />\n <SecureRoute exact path=\"/admin/contracts\" render={() => {\n if ((this.props.context.initialized || false) && this.props.context.user.contextUserIsAdmin && ((contractsOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId)) && \n (\n (contractsUsersList == null\n ? false\n : contractsUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId))\n ))) {\n this.menuCounter++;\n return <Contracts />;\n }\n }} />\n\n <SecureRoute exact path=\"/admin/controllers\" render={() => {\n if ((this.props.context.initialized || false) && this.props.context.user.contextUserIsAdmin && (controllersOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n && \n (controllersUsersList == null\n ? false\n : controllersUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId))\n ) \n {\n this.menuCounter++;\n return <Controllers />;\n }\n }} />\n\n\n <SecureRoute exact path=\"/admin/applications\" render={() => {\n if ((this.props.context.initialized || false) && this.props.context.user.contextUserIsAdmin && (applicationsOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n && (applicationsUsersList == null\n ? false\n : applicationsUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId))\n )\n {\n this.menuCounter++;\n return <Applications />;\n }\n }} />\n\n\n\n <SecureRoute exact path=\"/admin/aiot\" render={() => {\n if ((this.props.context.initialized || false)\n && (\n (aiotOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n && (\n (aiotUsersList == null\n ? false\n : aiotUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId))\n )\n )) {\n this.menuCounter++;\n return <AIOT />;\n }\n }} /> \n <SecureRoute exact path=\"/Iqanopen/controllers\" render={() => {\n if ((this.props.context.initialized || false)\n && (\n (iqanopenOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n && (\n (iqanopenUsersList == null\n ? false\n : iqanopenUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId))\n )\n )) {\n this.menuCounter++;\n return <Controllers />;\n }\n }} />\n <SecureRoute exact path=\"/Iqanopen/softwares\" render={() => {\n if ((this.props.context.initialized || false)\n && (\n (iqanopenOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n && (\n (iqanopenUsersList == null\n ? false\n : iqanopenUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId))\n )\n )) {\n this.menuCounter++;\n return <Softwares />;\n }\n }} />\n <SecureRoute exact path=\"/Iqanopen/UpdateDeviceSoftware\" render={() => {\n if ((this.props.context.initialized || false)\n && (\n (iqanopenOrgsList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.orgId))\n && (\n (iqanopenUsersList == null\n ? false\n : iqanopenUsersList?.replaceAll('\"', \"\").slice(1, -1).split(\",\").includes(this.props.context.appContext.userId))\n )\n )) {\n this.menuCounter++;\n return <UDS />;\n }\n }} />\n\n <SecureRoute exact path=\"/not-found\" render={() => {\n if ((this.props.context.initialized || false)) {\n this.menuCounter++;\n return <NotFound404 />;\n }\n }} />\n\n <SecureRoute path=\"*\" render={() => {\n if ((this.props.context.initialized || false)) {\n if ((this.menuCounter || 0) === 0) {\n return <NotFound404 />;\n }\n }\n }} />\n \n </Content>\n </Layout>\n </Layout>\n </Router>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n supportMode: state.supportModeReducer, \n context: state.contextReducer.context,\n stats: state.contextReducer.stats,\n notifications: state.contextReducer.notifications,\n report: state.reportReducer,\n userOrgAccess: state.userOrgAccessReducer,\n permissions: state.contextReducer.data,\n orgSelector: state.orgSelectorReducers.orgSelectorState.orgSelector,\n maxCommandPermissionValue : state.contextReducer.data,\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(App);","export const getCookie = (name: string):string => { \n let ca: Array<string> = document.cookie.split(';');\n let caLen: number = ca.length;\n let cookieName = `${name}=`;\n let c: string;\n\n for (let i: number = 0; i < caLen; i += 1) {\n c = ca[i].replace(/^\\s+/g, '');\n if (c.indexOf(cookieName) === 0) {\n return c.substring(cookieName.length, c.length);\n }\n }\n return '';\n}\n\nexport const deleteCookie = (name: string):void => { \n setCookie(name, '', -1);\n}\n\nexport const setCookie = (name: string, value: string, expireDays: number, path: string = ''):void => { \n let d: Date = new Date();\n d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);\n let expires: string = `expires=${d.toUTCString()}`;\n let cpath: string = path ? `; path=${path}` : '';\n document.cookie = `${name}=${value}; ${expires}${cpath}`;\n}","import Axios from \"axios\";\nimport { appConfigs } from \"../../../utils/configurations\";\nimport { errorResponse } from \"../../../utils/apiHelpers/apiHelpers\";\nimport { string } from \"@amcharts/amcharts4/core\";\n\nexport function loginGet(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n pathname: string\n) {\n \n const currentUrl = window.location.href.toLowerCase();\n const { claytonServerURL, hoistServerURL, toyotaServerURL } = appConfigs.server;\n var orgUrl:any;\n if (currentUrl.includes(claytonServerURL.toLowerCase())) {\n orgUrl = \"clayton\";\n }\n else if (currentUrl.includes(toyotaServerURL.toLowerCase()))\n {\n orgUrl = \"toyota\";\n }\n else if (currentUrl.includes(hoistServerURL.toLowerCase()))\n {\n orgUrl = \"hoist\";\n } \n else\n {\n var pathnameArr = pathname.split(\"/\");\n orgUrl = (pathnameArr.length > 2 ? pathnameArr[pathnameArr.length - 1].trim() : \"\").toLowerCase();\n } \n return async (dispatch: any) => {\n Axios.get(\n appConfigs.server.URL + \"/public/ui/login\", {\n responseType: \"json\", \n headers: {},\n params: {\n orgUrl: orgUrl\n }\n }\n )\n .then(response => { \n if (callbackFnSuccess != null) { \n callbackFnSuccess(response.data.data.login, orgUrl);\n }\n dispatch({ type: \"LOGIN_GET_SUCCESS\", data: response.data.data.login });\n }\n )\n .catch(function (error) {\n if (callbackFnFailure != null) {\n callbackFnFailure(me, error)\n }\n //errorResponse(me, error);\n });\n };\n}\n\nexport function forgotPassword(\n me: any, \n callbackFnSuccess: any,\n callbackFnFailure: any,\n emailAddress: string\n) {\n return async () => { \n Axios.post(\n appConfigs.server.URL + \"/public/api/users/okta/forgot-password\",\n {\n emailAddress: emailAddress\n },\n {\n responseType: \"json\", \n headers: {}\n }\n )\n .then(response => {\n if (callbackFnSuccess != null) {\n callbackFnSuccess(emailAddress); \n }\n }\n )\n .catch(function (error) {\n errorResponse(me, error, false);\n if (callbackFnFailure != null) {\n callbackFnFailure();\n }\n }\n );\n }\n}\n\n","import React from 'react';\nimport { Drawer, Button } from 'antd';\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport { setLoginTermsAndConditions } from \"../../utils/commonHelpers\";\nimport { setCookie } from \"../../utils/cookieHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\nimport \"./login.css\";\n\ninterface Prop {\n login: any,\n context: any\n}\n\ninterface State {\n termsVisible: boolean;\n defaultLanguage?: string\n}\n\nclass LoginFooter extends React.Component<Prop, State> { \n\n drawerWidth:number = Math.min(window.innerWidth, appConfigs.settings.drawers.defaultWidth);\n\n state:State = {\n termsVisible: false\n } \n\n componentDidUpdate() {\n setTimeout(function() {\n setLoginTermsAndConditions();\n }, 250); \n }\n\n termsOpen = (e:any) => { \n e.preventDefault();\n this.setState({\n termsVisible: true\n });\n };\n\n termsClose = () => { \n this.setState({\n termsVisible: false\n });\n };\n\n onLanguageChange = (value: string) => { \n this.setState({\n defaultLanguage: value\n });\n setCookie(\"language\", value, 365);\n };\n\n render() {\n \n const { /*languages, languageIsoCode2, languageIsoCode2Default,*/ backgroundUrl, termsAndConditions } = this.props.login;\n \n const href = window.location.href.toLowerCase();\n let showHelp = true;\n if (href.includes(appConfigs.server.claytonServerURL.toLowerCase()) ||\n href.includes(appConfigs.server.hoistServerURL.toLowerCase()) ||\n href.includes(appConfigs.server.toyotaServerURL.toLowerCase())) \n {\n showHelp = false;\n } \n\n return (\n <div className=\"login-footer\">\n {/*\n languages.length > 0 &&\n <Select \n value={this.state.defaultLanguage || getCookie(\"language\") || languageIsoCode2 || languageIsoCode2Default} \n onChange={this.onLanguageChange} \n style={{ marginBottom: '20px'}}\n >\n {languages.map((record:any, index:number) => (\n <Option key={record.isoCode2} value={record.isoCode2}> \n {\"Language: \" + record.name}\n </Option>\n ))}\n </Select>\n */}\n\n {showHelp ? (\n <>\n <div>\n <a href=\"# \" className={backgroundUrl ? \"login-footer-link\" : \"\"} onClick={(e) => {this.termsOpen(e)}}>\n {appConfigs.app.login.en.termsAndConditionsLinkText}\n </a>\n </div>\n <div className={backgroundUrl ? \"login-footer-text\" : \"\"}>\n {appConfigs.app.login.en.copyrightText}\n </div>\n </>\n ) : (\n <div className={backgroundUrl ? \"login-footer-text\" : \"\"}>\n <a href=\"https://www.parker.com/us/en/privacy-policies/end-user-license-agreement.html\" target=\"_blank\">\n © Privacy Policy.\n </a>\n </div>\n )}\n\n <Drawer\n data-id=\"login-terms-and-conditions-drawer\" \n title={\n <>\n <div className=\"ant-modal-title\">{appConfigs.app.termsAndConditions.title}</div>\n <div className=\"mt-10\"><h5>{appConfigs.app.termsAndConditions.subTitle}</h5></div>\n </>\n }\n width={this.drawerWidth}\n onClose={this.termsClose}\n visible={this.state.termsVisible}\n destroyOnClose={true}\n footer={ \n <Button data-id=\"login-terms-and-conditions-close-button\" type=\"default\" onClick={this.termsClose}>\n {appConfigs.settings.drawers.closeButtonText}\n </Button>\n }\n > \n <div className=\"loginTermsAndConditionsDisplay\"></div>\n </Drawer>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n login: state.loginReducer\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(LoginFooter);\n \n","import React, { useState, useEffect } from 'react';\nimport { Modal, Row, Col } from 'antd';\nimport { CloseCircleTwoTone } from \"@ant-design/icons\";\n\nimport { appConfigs } from \"../../utils/configurations\";\n\nimport \"./login.css\";\n\ninterface Props {\n visible: boolean;\n closeErrorModal: Function;\n}\n\nconst LoginError: React.FC<Props> = (props) => {\n\n const [errorModalErrorMessage, setErrorModalErrorMessage] = useState(\"\");\n \n const displayError = () => {\n const error:any = JSON.parse(window.sessionStorage.getItem(\"loginError\") || \"{}\");\n let errorHtml: string = \"\";\n\n window.sessionStorage.removeItem(\"loginError\");\n\n errorHtml += \"<ul>\";\n if (error.errorObject != null && (error.errorObject.length || 0) !== 0) {\n error.errorObject.forEach(function(record:any) {\n errorHtml += \"<li>\" + (record.message.startsWith(\"APP-ERR#\") ? record.message.substring(record.message.indexOf(':') + 1) : record.message)+ \"</li>\";\n });\n }\n else {\n errorHtml += \"<li>Error message not captured - Please try again later</li>\"; \n }\n errorHtml += \"</ul>\";\n\n setErrorModalErrorMessage(errorHtml);\n }\n\n const closeErrorModal = () => {\n props.closeErrorModal();\n }\n\n useEffect(() => {\n if (props.visible) {\n displayError();\n }\n }, [props.visible]);\n\n return (\n\n <Modal\n data-id=\"login-modal-error\"\n title=\"IQAN Connect\"\n visible={props.visible}\n onOk={closeErrorModal}\n onCancel={closeErrorModal}\n footer={false}\n >\n <Row gutter={16}>\n <Col xs={3}>\n <CloseCircleTwoTone \n data-id=\"login-modal-error-icon\"\n twoToneColor=\"#ff4d4f\" \n />\n </Col>\n <Col xs={21}>\n <div><h4>Sorry, we've encountered the following issues:</h4></div>\n <div className=\"mt-20\" dangerouslySetInnerHTML={{__html: errorModalErrorMessage}}></div> \n </Col>\n </Row>\n </Modal>\n\n );\n};\n\nexport default LoginError;\n \n","import React, { useState } from 'react';\nimport { Form, Input, Button } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\n\nimport { appConfigs } from \"../../utils/configurations\";\nimport { loadingIndicatorStart, loadingIndicatorEnd} from \"../../utils/commonHelpers\";\n\nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n\ninterface Props {\n forgotPassword: Function,\n login: any,\n context: any,\n\n visible: boolean,\n forgotPasswordClose: Function\n}\n\nconst ForgotPassword: React.FC<Props> = (props) => {\n \n const formRef = React.createRef<FormInstance>();\n const [successVisible, setSuccessVisible] = useState(false);\n const [isParker, setIsParker] = useState(false);\n\n const forgotPasswordClose = (e:any) => { \n e.preventDefault();\n\n setSuccessVisible(false);\n props.forgotPasswordClose();\n }\n\n const onFinish = (values: any) => {\n loadingIndicatorStart();\n props.forgotPassword(null, onFinishSuccess, onFinishFailure, values.emailAddress);\n }\n\n const onFinishSuccess = (emailAddress: string) => {\n loadingIndicatorEnd();\n setSuccessVisible(true);\n setIsParker(emailAddress.toLowerCase().indexOf(\"@parker.com\") !== -1);\n }\n \n const onFinishFailure = () => {\n loadingIndicatorEnd();\n }\n\n return (\n <>\n { \n props.visible &&\n <div id=\"forgot-password\">\n {\n !successVisible &&\n <Form\n layout=\"vertical\"\n id=\"forgot-password-form\"\n ref={formRef}\n onFinish={onFinish}\n className=\"mt-15\"\n > \n <h2>{appConfigs.app.login.en[\"password.reset.title\"]}</h2>\n \n <Form.Item\n label={appConfigs.app.login.en[\"primaryauth.username.placeholder\"]}\n name=\"emailAddress\" \n rules={[\n { required: true, message: appConfigs.errors.fieldErrors.valueRequired},\n { type: \"email\", message: appConfigs.errors.fieldErrors.invalidEmail},\n () => ({\n validator(rule, value) {\n if (value && value.toLowerCase().indexOf(\"@parker.com\") !== -1) {\n return Promise.reject(appConfigs.app.login.en[\"password.forgot.emailSent.parker.desc\"]);\n }\n else {\n return Promise.resolve();\n }\n }\n })\n ]}\n >\n <Input maxLength={255} />\n </Form.Item> \n\n <div className=\"mt-20\">\n <Button data-id=\"forgot-password-form-submit-button\" type=\"primary\" key=\"submit\" htmlType=\"submit\">\n {appConfigs.app.login.en[\"password.forgot.sendText\"]}\n </Button> \n </div>\n \n <div className=\"mt-20\">\n <a href=\"# \" onClick={forgotPasswordClose}>{appConfigs.app.login.en.goback}</a>\n </div>\n </Form>\n }\n {\n successVisible &&\n <div id=\"forgot-password-success\">\n <h2>\n {\n isParker &&\n appConfigs.app.login.en[\"password.forgot.emailSent.parker.title\"]\n }\n {\n !isParker &&\n appConfigs.app.login.en[\"password.forgot.emailSent.title\"]\n }\n </h2>\n {\n isParker &&\n <div dangerouslySetInnerHTML={{__html: appConfigs.app.login.en[\"password.forgot.emailSent.parker.desc\"]}}></div>\n }\n {\n !isParker &&\n <div dangerouslySetInnerHTML={{__html: appConfigs.app.login.en[\"password.forgot.emailSent.desc\"]}}></div>\n }\n <div className=\"mt-30\">\n <Button data-id=\"forgot-password-back-buttonn\" type=\"primary\" key=\"back\" htmlType=\"submit\" onClick={forgotPasswordClose}>\n {appConfigs.app.login.en.goback}\n </Button> \n </div>\n </div>\n }\n </div>\n }\n </>\n\n );\n};\n\nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n login: state.loginReducer\n };\n};\n\nexport default connect(\n mapStateToProps,\n actions\n)(ForgotPassword);","import { appConfigs } from '../../utils/configurations';\n\nexport default {\n oidc: {\n issuer: appConfigs.okta.oidc.issuer,\n redirectUri: `${appConfigs.server.deploymentServerURL}`,\n clientId: appConfigs.okta.oidc.clientId,\n scopes: appConfigs.okta.oidc.scopes,\n pkce: appConfigs.okta.oidc.pkce,\n disableHttpsCheck: appConfigs.okta.oidc.disableHttpsCheck\n },\n resourceServer: {\n messagesUrl: `${appConfigs.server.deploymentServerURL}/api/messages`\n }\n};","import React from \"react\";\nimport parkerLogo from \"../../assets/images/parker-logo.jpg\";\nimport maintenanceLogo from \"../../assets/images/settings.png\";\nconst MaintenancePage: React.FC = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n <img\n height=\"351px\"\n width=\"351px\"\n src={maintenanceLogo}\n className=\"image-preview\"\n alt=\"maintenance Logo preview\"\n />\n <h1 style={{ fontSize: \"20px\" ,paddingTop:\"20px\"}}>\n We are performing some updates to our system to enhance your experience.\n Please\n <br />\n check back in a few hours.\n </h1>\n </div>\n );\n};\nexport default MaintenancePage;","import React, { useState, useEffect } from 'react';\nimport { useOktaAuth } from '@okta/okta-react';\nimport * as OktaSignIn from '@okta/okta-signin-widget';\nimport '@okta/okta-signin-widget/dist/css/okta-sign-in.min.css';\n \nimport LoginFooter from \"./LoginFooter\";\nimport LoginError from \"./LoginError\";\nimport ForgotPassword from \"./ForgotPassword\";\nimport { setLogin, setElementDisplay, loadingIndicatorStart, clientStorageClear, checkOktaTokenExpired } from \"../../utils/commonHelpers\";\n \nimport { connect } from \"react-redux\";\nimport * as actions from \"./actions\";\n \nimport config from './config';\nimport { appConfigs } from \"../../utils/configurations\";\nimport MaintenancePage from './MaintenancePage';\n \ninterface Prop {\n loginGet: Function,\n login: any,\n context: any\n}\n \nconst Login: React.FC<Prop> = (props) => {\n \n let helpLinksTimer:any;\n \n const { authService } = useOktaAuth();\n \n const [errorModalVisible, setErrorModalVisible] = useState(false);\n const [forgotPasswordVisible, setForgotPasswordVisible] = useState(false);\n const [currentUrl] = useState<String>((window.location.hash ? \"/\" + window.location.hash : window.location.pathname).toLowerCase());\n //\n //Identify intermediate Okta page load, usually URL starts with /#code=... \n //\n const [intermediateOktaFlow] = useState<Boolean>(window.location.hash.startsWith(\"#code=\"));\n const [parkerOktaFlow] = useState<Boolean>(window.location.search.startsWith(\"?fromLogin=true\"));\n const [isAccessDenied] = useState<Boolean>(window.location.href.includes(\"&error=access_denied\"));\n \n const openErrorModal = () => {\n setErrorModalVisible(true);\n }\n \n const closeErrorModal = () => {\n if (errorModalVisible) {\n setErrorModalVisible(false);\n }\n }\n \n const forgotPasswordOpen = (e:any) => {\n e.preventDefault();\n \n setElementDisplay(\"#sign-in-widget\", \"none\");\n setForgotPasswordVisible(true);\n }\n \n const forgotPasswordClose = () => {\n if (forgotPasswordVisible) {\n setElementDisplay(\"#sign-in-widget\", \"block\");\n setForgotPasswordVisible(false);\n \n }\n }\n \n const renderEl = (oktaSignIn: any) => {\n \n oktaSignIn.renderEl(\n {\n el: '#sign-in-widget'\n },\n function success(res: any) { \n },\n function error(err: any) {\n console.error(err);\n }\n );\n }\n \n const goToPage = (redirectUri: string, url:string) => {\n loadingIndicatorStart();\n setTimeout(function () {\n window.location.href = redirectUri + url;\n }, 150); \n }\n \n const reloadPage = () => {\n loadingIndicatorStart();\n setTimeout(function () {\n window.location.href = window.location.href + \"\";\n }, 150); \n }\n \n const tokenFromUrl = (oktaSignIn: any, redirectUri:string) => {\n oktaSignIn.authClient.token.parseFromUrl()\n .then(\n function success(res: any) { \n authService.updateAuthState();\n \n const accessToken = res.tokens.accessToken;\n const idToken = res.tokens.idToken;\n \n oktaSignIn.authClient.tokenManager.add(\"accessToken\", accessToken);\n oktaSignIn.authClient.tokenManager.add(\"idToken\", idToken);\n \n //ops-2656,2622 fix\n localStorage.removeItem(\"isPageRefreshed\");\n let url=localStorage.getItem(\"pathname\") || \"/map\";\n if(url===\"/\" || url===\"/not-found\")\n {\n url=\"/map\";\n }\n goToPage(redirectUri, url);\n },\n function error(err: any) { \n const loginError = {\n \"stop\" : true,\n \"errorCode\": null,\n \"errorObject\": [\n {\n \"code\": err.hasOwnProperty(\"errorCode\") ? err.errorCode : null,\n \"message\": err.hasOwnProperty(\"message\") ? err.message : \"An error has been detected - Please contact Parker Support\"\n } \n ]\n };\n \n window.sessionStorage.setItem(\"loginError\", JSON.stringify(loginError)); \n goToPage(window.localStorage.getItem(\"loginUrl\") || window.location.href, \"\")\n }\n )\n }\n \n const sessionCheck = (oktaSignIn: any) => {\n oktaSignIn.authClient.session.exists()\n .then(\n function (exists: boolean) {\n if (exists) {\n if(isAccessDenied)\n {\n tokenFromUrl(oktaSignIn, window.location.origin);\n }\n else\n {\n let isTokenExpired=checkOktaTokenExpired();\n if(isTokenExpired && !parkerOktaFlow)\n {\n clientStorageClear();\n renderEl(oktaSignIn);\n }\n else\n {\n loadingIndicatorStart();\n oktaSignIn.authClient.token.getWithRedirect({\n responseType: 'code'\n })\n }\n } \n }\n else {\n renderEl(oktaSignIn);\n }\n },\n function error(err: any) {\n renderEl(oktaSignIn);\n }\n )\n .catch(\n function (err: any) {\n renderEl(oktaSignIn);\n }\n );\n }\n \n const hasLoginError = ():boolean => {\n return (window.sessionStorage.getItem(\"loginError\") || \"{}\") !== \"{}\";\n }\n \n const processLoginError = (oktaSignIn: any) => {\n renderEl(oktaSignIn);\n if (JSON.parse(window.sessionStorage.getItem(\"loginError\") || \"{}\").hasOwnProperty(\"silent\")) {\n window.sessionStorage.removeItem(\"loginError\");\n }\n else {\n openErrorModal();\n }\n }\n \n const customizeHelpLinks = () => {\n if (document.querySelectorAll(\"div.auth-footer a.list.forgot-password\").length === 0) {\n let container:any = document.querySelectorAll(\"div.auth-footer\");\n if (container.length > 0) {\n let newAnchor = document.createElement(\"a\"); \n newAnchor.appendChild(document.createTextNode(appConfigs.app.login.en[\"forgotpassword\"])); \n newAnchor.addEventListener(\"click\", forgotPasswordOpen);\n newAnchor.classList.add(\"list\");\n newAnchor.classList.add(\"forgot-password\");\n container[0].appendChild(newAnchor); \n if (document.querySelectorAll(\"input#okta-signin-password\").length > 0) {\n clearInterval(helpLinksTimer);\n }\n }\n }; \n } \n \n useEffect(() => {\n \n const { pkce, issuer, clientId, scopes } = config.oidc;\n \n if (!intermediateOktaFlow && !parkerOktaFlow) {\n completeLogout();\n props.loginGet(null, loginGetSuccess, null, currentUrl); \n //eslint-disable-next-line\n helpLinksTimer = setInterval(customizeHelpLinks, 1000);\n }\n \n const oktaSignIn = new OktaSignIn({ \n baseUrl: issuer.split('/oauth2')[0],\n clientId,\n redirectUri: window.location.origin,\n features: {\n idpDiscovery: true\n },\n idpDiscovery: {\n requestContext: window.location.origin\n },\n logo: \"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\",\n i18n: {\n en: appConfigs.app.login.en\n },\n authParams: {\n pkce,\n issuer,\n display: 'page',\n responseMode: 'fragment',\n scopes,\n },\n });\n \n if (oktaSignIn.hasTokensInUrl()) {\n tokenFromUrl(oktaSignIn, window.location.origin);\n } else {\n if (hasLoginError()) {\n processLoginError(oktaSignIn);\n }\n else {\n sessionCheck(oktaSignIn);\n } \n }\n \n }, []);\n \n const loginGetSuccess = (data:any, orgUrl:string) => {\n setTimeout(function () {\n setLogin(data.headerColor, data.logoUrl, data.loginLogoUrl, data.loginBackgroundUrl, data.termsAndConditions);\n }, 150); \n \n if ((orgUrl || \"\") !== \"\" ) {\n const loginUrl = ((orgUrl || \"login\") !== \"login\" ? \"/login/\" : \"\") + orgUrl.toLocaleLowerCase();\n window.localStorage.setItem(\"loginUrl\", loginUrl);\n if (currentUrl !== loginUrl) {\n loadingIndicatorStart();\n window.location.href = loginUrl;\n }\n }\n else {\n window.localStorage.setItem(\"loginUrl\", \"/login\");\n }\n }\n \n const completeLogout = () => {\n const logoutInProgress = window.localStorage.getItem(\"logoutInProgress\") || \"\";\n \n if (logoutInProgress !== \"\") {\n window.localStorage.removeItem(\"logoutInProgress\");\n \n //ops-2656 fix\n window.localStorage.removeItem(\"pathname\");\n window.localStorage.removeItem(\"isPageRefreshed\");\n \n const pathname = window.location.pathname.toLowerCase();\n const loginUrl = window.localStorage.getItem(\"loginUrl\");\n \n if (pathname !== loginUrl) {\n loadingIndicatorStart();\n window.location.href = loginUrl || \"/login\";\n }\n }\n }\n const href = window.location.href.toLowerCase();\n let showHelp = true;\n if (href.includes(appConfigs.server.hoistServerURL.toLowerCase()) ||\n href.includes(appConfigs.server.toyotaServerURL.toLowerCase()))\n {\n showHelp = false;\n }\n \n return (\n \n appConfigs.app.enableMaintenanceMode?\n <div ><MaintenancePage/></div>:\n <>\n {\n intermediateOktaFlow &&\n <div style={{ padding: 20 }}>Loading...</div>\n }\n {\n !intermediateOktaFlow && showHelp?\n <div data-id=\"login-container\" className=\"layout-content\">\n \n <div id=\"sign-in-widget\" /> \n \n <LoginError visible={errorModalVisible} closeErrorModal={closeErrorModal}/> \n <ForgotPassword visible={forgotPasswordVisible} forgotPasswordClose={forgotPasswordClose}/>\n <LoginFooter />\n <div className=\"loginTermsAndConditions\" style={{ display: 'none'}}></div> \n </div>:<div data-id=\"login-container\" className=\"toyota-layout-content\">\n \n <div id=\"sign-in-widget\" /> \n \n <LoginError visible={errorModalVisible} closeErrorModal={closeErrorModal}/> \n <ForgotPassword visible={forgotPasswordVisible} forgotPasswordClose={forgotPasswordClose}/>\n <LoginFooter />\n <div className=\"loginTermsAndConditions\" style={{ display: 'none'}}></div> \n </div>\n }\n </>\n );\n};\n \nconst mapStateToProps = (state:any) => {\n return {\n context: state.contextReducer.context,\n login: state.loginReducer.loginState\n };\n};\n \nexport default connect(\n mapStateToProps,\n actions\n)(Login);","import React, { Component } from \"react\";\nimport { Helmet } from \"react-helmet\"\nimport Axios from \"axios\";\nimport { appConfigs } from \"./utils/configurations\";\n\ninterface State{\n versionNo: string\n}\n\nclass VersionNumber extends Component<{},State>{\n state: State={\n versionNo: \"\"\n }\n\n versionNumberGet = async()=> { \n Axios.get(\n appConfigs.server.URL + \"/public/ui/api/platform-versions?latest=\" + true, \n { \n transformRequest: [(data, headers) => { \n delete headers.common.Authorization;\n }] \n }).then(response => {\n this.setState({versionNo: \"IQAN Connect v\" + response.data.data.preferences[0].version});\n \n }) \n }\n\n componentDidMount() {\n this.versionNumberGet(); \n }\n\n render(){\n\n return(\n <Helmet>\n <title>\n { \n (window.location.href.toLowerCase().includes(appConfigs.server.claytonServerURL.toLowerCase()))\n ? \"Clayton Equipment v\" + this.state.versionNo.split(\"v\").pop()\n : (window.location.href.toLowerCase().includes(appConfigs.server.hoistServerURL.toLowerCase()))\n ?\"Hoist Telematics\"\n : (window.location.href.toLowerCase().includes(appConfigs.server.toyotaServerURL.toLowerCase()))\n ?\"THD Telematics\"\n : this.state.versionNo\n }\n </title> \n </Helmet> \n );\n }\n}\n\nexport default VersionNumber;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Helmet } from \"react-helmet\"\n\nimport * as serviceWorker from \"./serviceWorker\";\nimport * as amCore from '@amcharts/amcharts4/core';\n\nimport { Provider } from \"react-redux\";\nimport { createStore, applyMiddleware } from \"redux\";\nimport reduxThunk from \"redux-thunk\";\nimport reducers from \"./reducers\";\n\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\nimport { Security, SecureRoute, LoginCallback } from '@okta/okta-react';\n\nimport App from \"./App\";\nimport Login from \"./pages/Login/Login\";\nimport config from './pages/Login/config';\nimport { appConfigs } from \"./utils/configurations\";\nimport { getLoginUrl, loadPage } from \"./utils/commonHelpers\";\nimport VersionNumber from \"./VersionNumber\";\n\nimport \"./index.css\";\n\namCore.options.commercialLicense = true;\n\nconst createStoreWithMiddleware = applyMiddleware(reduxThunk)(createStore);\n\nfunction onAuthRequired({ history }: any) {\n loadPage(getLoginUrl());\n}\n/*\n Okta custom Sing-In widget workaround workflow requires existance of \"/\", \"/login\" and \"/implicit/callback\" routes.\n The workflow will be broken without it.\n*/\n\nReactDOM.render(\n <> \n <VersionNumber />\n \n <Provider store={createStoreWithMiddleware(reducers)}> \n <Router>\n <Security\n {...config.oidc}\n onAuthRequired={onAuthRequired}\n >\n <Switch>\n <Route path=\"/\" exact component={Login} />\n <Route path=\"/login\" component={Login} />\n <Route path=\"/implicit/callback\" component={LoginCallback} />\n <SecureRoute \n render={() => {\n return <App />;\n }}\n />\n </Switch>\n </Security>\n </Router>,\n </Provider>\n </>,\n document.getElementById(\"root\")\n);\n\nserviceWorker.unregister();","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABoUlEQVRIS+2U0VHCQBCG/2UbwArECsQKxArUCoQKJJO7Z8JzjkmsQKxArECtQK1AqUAsIKyzzIUJIRCGGd64mctcLrn97v5/9wgHbnTg+DgCahWulShJklaWZQMAbd816Kd2Zh4GQfCzjbIV4JxLAdznAUTkXcdEdJnPEVEahmGwCbIR4JwbA7gDMCWiKAxDfV+20WjUFZEIwCmAsTGmVwWpBPjFjwC+mLkTBMGsanGSJM0sy94AnAO4NcZMyv+tAfyiDwAnzNyu09h7pJ78MvNFeTMrgDiOIyJSzZsAnowx3do0AVCQc+Y9GS49ygcFQ6cAJswcbZKmDPWnVj9uvCcPxpj+IiH04Y/5rYZ6WSo1rzuNB6lcp8x8pvIuAF6aARH1ytlSF7T8PU8QEQmstekKQESurLWaFXu3OI47RPQqIkNrbZQD+kSU5JN7Ry+osXICr52WvADoVeXzLlDnnJr8DOCPmVuaJMs0LRSXxlLY1jumAtgCoF2vkqWX5TroNBqNvohc77LjtaolepnP52nRx9rbdB9Qcc0RUKvgwSX6B1aUwxkEa7jkAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAABrElEQVQ4T62T0VXCQBBF3yzRH5O4HRg7SAmhAvnXHKACsQKxArEC0eC3WAGUgBVoB8YQfiTueIYknAiIHI/7mczeee/NDuGfDv0TB7+C9K3W0ixux/G2phtBcjmzzDmADoAFSFgAelambjZB10AFZATgWC4CapxzTFCAX6xM1VdhayA7OhwDRltZLVgtzpt8CvgtDaf1qtUlSIrmlmlSrqKehnGh5HsydqQDwIwY6Oxl6q5stgBV7RAwnIZJa1uwTuT2GWgAWNpcgOzI7RHQqGXKr9o5GLgdYj7JoTSuBq1vtZdZZiI5pmHSLUDOBKChfCiV2AN3CGaPWKwCTOgw0SGxape27cjtAhSk4XtQgCRgnqRhIuOG5EAw/arCXB26gGpUQD2A/CWoKLouQ3bunRYTeVWF0uDgQft7H4jjdvzqRE6DQY9MuJidJRJNfooAmwCuWKkhfZomSD1Vp2dHzoSALoN8AJcAbkoX396RBDjfhyYjr9mMmNCfnSXt1YHM9+GVykohW1YEvuTEwFFezM+saq3ZaSyTWju7LK0ne/anpd32GH/696uiXaFfk4LVE+BSi+cAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABCUlEQVQ4T5WTTQ4BQRCFX41I2LkAYTNhhRtwA27ADdyEG+AkuEFbSISFyZyAFYlQ0j16dOseP73qVOp9qXpVRTDeodoqXe/nBUAtM/76s8gHxW4tEkcdI/35LtaZNkQBfhe7EPpfbENoV64LEJpGzycK0OMbJkZ8DsYShKntDQvaVepsBYNcO4w2QlV2u0iRCOPtQObsK40Rg8dmvgsAZmG8HWpvtONZrfoAUptCvpmcBZjrslNA0o7plerEB0jFsmyrBQ/ks4nJVkoTlSd+E50x8pEC6vNdup2u9AyMlTNGxjpZpIz+/PfwjDLW+Vyh81rlfyBPsfTHPqZfIIZYTcE550+QN7HUPgBOj7UmXWqeQwAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAABF0lEQVQ4T52TO07DUBBFz9iF21g4NckKkDu7gqwAZQWElRBWwBJIdgArwJ1DFVgB7m0pblGUDLLxixz/kHjdvLlzdHVHIwy8dMOHBXoR4PfJpK+RxixFeCj6qjyOQ5Zd2k7Absvo8M0XMKqGctth6vrkTUgnIItZIdydiZW1F7L4E5DG3IjwZqxbQq7wVNWzcUhUh7QcZO9EKNeFyHZw93sm1pFtNRR5AbNeQBazQHg2AtVfsXFU/iv3XsjKaE4OOoIr0m8DILEdfBPoCVBf26CDxlpLwC5mcpBybc1nrLbSt5WpG5KUgHpwDcJrVd92wF+8gLnU19YSCXM9kp+FWBMVGUm2IQEuB05iqJVIcTACV/8BKHz+AJBgYxerZ+jwAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAOCAYAAAAMn20lAAAAvUlEQVQoU3WPzRWCMBCEZ6JnTQdiB3QgJVgC8LxrB9qBNiBiCVagVqB2QAnAHda3CSIe3Fv2y84P8Wf42dtYrBh5AAgIJl+wkkhauepHIS490MUkaQ4wDEzD3Q8Y2tHGEoqRLYAIRMGGSZnz6QDGsEP9+miWvdQ0bcUZi5zr0yh2oJPTqNCoZcbcg1Q2Atk70HJe5iwcmKbtDcACwKvKTOgvPSgAzADcq8xEPdBiJNddj4qkN+8CBGqnHfT9BjtHSmAEN830AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAABi0lEQVQ4T42UwXHCQAxFn8yEa0gFkA7oIOkgdIBzwVfSAVQQODHmEkogFcRUEKggdBCOmRxQRsIEe8GAZnbs9Vp//5f+rhCEvtHgl+/we3EuCXJ2/dyipgwCsNK8KvfkjprSB24RHkuJSuZz4V16LK8G1QmPRHwAi4qkFjCTpKyipEhT/yF2dsITSgO4l8SfR5GXpIuw9kVlzJYlNZouosdCNEWt8Jq6tDVbZtTYFOXl7G3zlk4wpjYgIvacXdh7gy2dEDQ7JUtTTxxJwqhI3VkLDznjhasUGhdBc7mxsTyy367+1kwbGVsyIl4dFCFDaQPjkKmmbNwJu9hIwt0R+N56VrqIrx0oDPOaVHZVU7fQvKI85l/bcOQ9ChpVVVNL6kjiaipDp7RRPq8F3dhBCA3vTsitxA0rfmgTMSiDCsr+1Bz4rCRhfsazZiWLWf5sGWjfa3HoZJhvh+KIpfu+eDcoTcTLMzx723jilBhlRJ2WPLsT/qMAak20+wLqdC6C5oxMWreiQy/hofgD8G+ycVwEfb4AAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/asset_down.26dcac92.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/critical-pin.aceeebfe.svg\";","module.exports = __webpack_public_path__ + \"static/media/dm1-pin.8d0988fa.svg\";","module.exports = __webpack_public_path__ + \"static/media/warning-pin.1c5f4829.svg\";","module.exports = __webpack_public_path__ + \"static/media/info-pin.89e27f70.svg\";","module.exports = __webpack_public_path__ + \"static/media/online-pin.f271c3b5.svg\";","module.exports = __webpack_public_path__ + \"static/media/offline-pin.33793a06.svg\";","module.exports = __webpack_public_path__ + \"static/media/chat_history_widget.b58b3eba.jpg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAcCAYAAACdz7SqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhdEVYdENyZWF0aW9uIFRpbWUAMjAyMjowOToyMSAxOTozMTowMHSqjwkAAAQmSURBVEhLvZZJKL5fFMePecw8hGTKlGTOkI1CiqwMmUrJxkIoG2tFWRiSoVggyRSKIhYWRIQkJSyQyDyT8fzuOe/18vK+v59X//6fenrufO49z/ee8+igAP5nfmX0+voa9PX1uayjowPvS+jq6oKxsTGX/4ZWRq+ursDKygq8vLzY0NPTE9zd3YG1tTUbp/7w8HAYHR0FPT09Oes7uvL9I8bGxvgdHx8PcXFxUFFRAevr61ymtqioKBgfH4fT01MepwmtjGZnZ0NjYyMYGRnB0dERtLa2goGBAbS3t/Pbw8MDlpaWwNHRUc5Qj1bunZ2dhfv7ezA3N4etrS2oqanh04eGhsLw8DC7nNxNbk9MTNT8fcnoT8jIyKDNqTwRERH4+vr6rZ2emJgYPDg4kLNV+ZHR2NhYFO7D5+dn2fJvyHBnZ6esqaLi3srKSnZPVVUV13NycmBhYQG2t7fh/PwcdnZ2oKenh92rDnKrm5sbFBYWgpOTE9TX17Pry8rKoK+v78PdbFowMTGhdM3k5CRmZmaihYUFig3g5eUlj6murkYzMzO0t7dX+1haWqL4lvjy8oIODg44NTWlXDMgIIDXIJRGyRXp6eno7e2NQ0ND7FIhf9mrPTY2NriysoLOzs4oTo6urq6yB1F5ZegyixOB2CXk5ubCzMwMPD4+yl7toWslxMRqPz4+VkYw4qMkICN05zY2NuDh4QFSU1Nlj/YMDg7C/Pw8+Pr6wtzcHJffUQkOJITg4GAICgqC6Oho2fo7KDqRiOgROoC3tzfZI5Buxu7ubkxKSkJbW1sUKuOPLxQne79DYmloaEDhRqVY6MnLy8PNzU0U8RiFylF8NkxJSUF3d3c589M3FWWWNAXvpqYmCAkJARcXF9mrytnZGYjAAMXFxXy9lpeX+Tr19vbC7e0t+Pj4cPCnOCxUDHZ2dupPOjAwgCYmJrxbuj7ijrLyVldX5QgFQhjo6emJfn5+skVx3YQWZA1RhEteZ3p6GkVW4hN/Hq80StGmpKQES0tLub67u4tCxTw5OTmZ24i6ujoUaUzWFNCVSEtLkzUF5HpDQ0MUCQCLiorw8PBQ9nwyqgmhYt6pyKF4c3PDm2hubpa9CmizBQUFsqbg4uKC5y0uLsqWD/6Z2ug7C2MQFhYGQmTcFhgYyO93hJdgbW0N2traOPMIg5zsKaFT2PzKj/MpiYSCB0EX/zMJCQkcBEiAXV1dXCbEoVhY31Ac+OfQlI6ODln7O0LFKPKsrH2gtdGsrCyMjIyUNc2IKMQbpHz7Fa2NkgppsfLyctnynZOTEx5TW1srW1TR2igh4igvKn7GOA2+s7+/jy0tLdyXn5/PUUsdvzJK7O3toYhabEBEHA4kpqamXO/v75ej1POrn+2vjIyM8H+vyMXg7+8vWzXznxjVDoA/xPe+Dpf4qdkAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/servicetruck-pin.6ebf3046.svg\";","module.exports = __webpack_public_path__ + \"static/media/bar_widget.26f750fa.jpg\";","module.exports = __webpack_public_path__ + \"static/media/boolean_widget.d15326d4.jpg\";","module.exports = __webpack_public_path__ + \"static/media/cluster_widget.a3b96b51.jpg\";","module.exports = __webpack_public_path__ + \"static/media/command_widget.a9c35cf1.jpg\";","module.exports = __webpack_public_path__ + \"static/media/gauge_widget.b4164c27.jpg\";","module.exports = __webpack_public_path__ + \"static/media/gps_event_widget.620c5cf0.jpg\";","module.exports = __webpack_public_path__ + \"static/media/information_widget.eaf24ccc.jpg\";","module.exports = __webpack_public_path__ + \"static/media/line_widget.af93e4e1.jpg\";","module.exports = __webpack_public_path__ + \"static/media/location_widget.c55283f8.jpg\";","module.exports = __webpack_public_path__ + \"static/media/text_widget.7704d274.jpg\";","module.exports = __webpack_public_path__ + \"static/media/tracker_widget.f035f305.jpg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABZCAYAAABLwrgcAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAARdEVYdEF1dGhvcgByYWphc2VraGFyPMSgIwAAACB0RVh0Q3JlYXRpb25UaW1lADIwMjE6MDk6MjEgMTY6MjM6NDWgyvhkAAAAIXRFWHRDcmVhdGlvbiBUaW1lADIwMjE6MDk6MjEgMTY6MjM6NDUoRZuiAAAimklEQVR4XuWdWY8k2XXfT2y51L53dXf1Nj0bZ7jaFCVR9KInGTAgvfjFBvzsL2FLJA0YIGB/GD/4xQukB8MGbHMRJY5EygJHgEhimsMedldXZWWs/v3PjcjMqq7qqszqwhiaM3PqRtyIuMv/nnuWGzejo//5H/5lkzSlJc2JpeXI4vrIkjq3qCnM6tosjk1UW0iThjxrSM2quLY8TqyO/NL8FDX8r/LEi1BsTUS7mkUbQM20YVGKm8SSYmCJ9S2KMmuq1KIa5jyNly3642/9PrdUljZjy2xMds7NY0u9wzUPAV4LrEhHAiQiV80qAT+Aqyt6Zr40tpJ0cappaaCr1Xc2DeNy9ftPpY2OE7DocZxaUzPYdR/Qe5YmQ4v++x/9kyZGcnuA2osBtwHcCEmOKoAFvLppG6CCXNg4AtymCTkTqZmpdI408iHS+SJEZyihO35VPRelQTDUBh3Ml5ZM33FauoAZItrUGWmG9GaWxEsWff/f/h74l5ZJcl16g+RKMlV5WVf8VUPUkVB03EquVEPEaOmqj2LEM3OmQS1ch6QaSK5Y30spVJPGnM+b5mlho34OyJQDoAK3cbXQg1EVP/rW79K2yrIanQu4CamD21Sq1upEMApYGgOpH8qnCu6la9cG1wtciCaTRnTF+l5KoauCeTYtk8KK3jGSi3oBVJOKcumVmkCCP/g3v81tgIvEptYCjDET4KLGwWXyYjjUFJoESWoDKlHbw4hSGiqdJ52lmOI0RedNRVet72xKCaGAC6b9ZWkTY/QTJBe1Kp3rgCK1DUg2NdL74z/8LXQu4EolRADs4OY8G8CtKKtCp0x1WyCBq87puvAVyI1b/6uns3RVMM+moqvWdzYNIIk6sZkvleeUaYbrf3RuHGcWR30Hty4B+sd/+Jtu0DKk1d0xwDVY0qzGR6lcrQAuk4FCVSwjT46aVsbIeNvJRShI0IKEBIo6iOYmB7k9XoBkc/oV2ABuA7gR4FosfduzquL8A8CVs5UCbhbhgs2oBQ1uhcsglVDJn5whGSJNr6krthhJdy1K03oDyIuQZsDiz8veZFZXCBooIolgAsBwLcP2Z38UdG4PVdBz/1aeQkGloUKpBEmspDeQehTkWCTQrzH4Xtp1aXHJle5tjxcl4oCSUdZc1nEdB4BLdHD0g2/+DuCW7t8Go9ZJbpBMOenyFCTBgTRaoVFSDdzE+eJ0nc652rwmhfoXa4Tqr9ENBYJYc1InEkKkFoBL0Im+D7i4w9bDmAncXi19i+S6ZNauqKfgBhg1lQS+dE6CKyZSI1XZPOlkOnJyFQP0Uhqe5jzm/PL6zqbXUScitSPGHy0cJ1RDjBQn4AW4OXjFks5Qk1jHAdRpxSFPEApwASpwPYCgQA+FxVybO6VMQaTzuC1rrlTPqgzOr1TfmXRC6v8CLNWZ1bUNyhrDNuWsLhBSCai7XIrvBSIPtfIQGt4QBktuxQJXKqDLA2DO2wuMVjieJ3VbppGC64R2LJCqrMvqeVVaY4c0tWvO503xu1QQzQjsBc5Q9P1vf5VZorUFWEZt4i10IxvcMHeSORb+6lN3vVQDuRwKVt586XUWbrxeb5foavXNppq1LkqarQJnzlQ49PAKGqS10ICjFgqCriqNbNwKYADLawmkNrtQtDy9RqEiFQ65wRPuzmGFab5UrlzjXInJV3mz7PkzrCXC2WXCmtAzcNmW+XLq1znuygxzERJQKkN/dH3OVP3wNqLzZfhDQCX7FFLUBhX4chmTXMdyipVOWgKHMeBUo63C/Da/TH8d/EW4I3VcBSugiJGEBFaqqSbDJRJQItWXUHFahft4mucrBEKzDV+dmdCxlk1DGM+z/nwoL8JIJ1q5os8pfXWmQ/OmvraCjys1ibB66vqcqEIpEAk4MVd9JDv9ETo1jaBCOsGc47bf3uFFWACrrI5Ur7wPLQah1k5RGIwO4KCe1Dl8IHBTp8IzOvZO69jvDhSeDDR9vk3bexdJRSpDalJp56Yq7ZD71CgArU6+3BRvJNxR6EToSNeJIOXE8Uiyp+2ynxZRfI0Vs6uuBhbEKqTkDF1PepN0KbgNLs9NMvC0DMD8nXALqt+jBXumSeDuWcJzprykT9NbjCXhucBSc2F1KsEHnXlOYX2DPha4pJrC0zJfL3/Kkhsk1nWtJPeM9CovAMolhE4pOMMOkasACeNUlVAWALvUMmBuO3yoQrlSQcHHVfwU2Au4IboU3IhI46ZYfrKDi3TNqoAgtUx8wAjhd2AdB6tM6lY5SLsQdz3YPu/UDRS+qOoKKQPS1u2wC+z2/Cb4UnBvlqjeraJ31XNEyhJO0pc1IJUNXnjLBeCKtQoi2WsUBEUF90qH6lhTnoAU18y9kFcS2ntS1/w8a4w7OmWg2/RTpJdVghpeIWmVANQKk95Jx0MbOy+3ad/GxPEKYhqArOASkOsYoAF5Anbrip2SaupskKwu7nzd5PICvf6S56QqryyOQ5RVE6dHWuIkyhmDjSQ0GmxYnizBazbcuW+9rQPrbR/Yyt03Lc+WbURHcnRCrddWcIXkVlo2Bewexbpeda8guEZy7j2I0M2Uf5P0qYObZX3ADc1w+89hgcE6QY8eEa0clngCa/u2+/B9e/D+b9vjr3zDHnzx67b9+Iu2fPDYjpLUDrH6h1VhucQzQyJjeQAFoIZFf61Xy3Vz8hmi1wPyJqQTXj8E3Sz51MHtdvRUSBgBpUd/BVN2xNw6wtCV2Yqt7T+22+981ZL3ftOiL3zDks9/3frvftW23vyy9XbvWTlctyPURx5nVmU93FsMoMLTGn82ylE70s4hahJJhiXBMo4izeJFeNYH72g2L/lX//jgm2GiSMPhNzrLXelGulP6uqsjRUQhnSiYhYiyKaKm00WZByHKEoxVbMcEAkW2apt33rb9N79ovYN3zLbumPXX4SWzpXWmPWqD9hZlacfHWlWNrU+ev0WpAqDuw3FFUuqS6qnUQuil39P1dU5yDNr+u2fTsgRE6acuudKz8lvlKknXqmG5AOj1LV3dsI27b9jS3bfM1gE2WjPElIdWAXjXbO8t23nra7Z6+wvWLN9hQFZsVMirGFCCorVgsvSW1jeyONAuEhi+gMu1ZOMSuhTc8/y318VaU5W+TVJ8XiRWc6ogYpL56a+u29atu0juQyT2rllvg8YsW9VbtxOMW2UAPADgrTdt+dbnbLj1GJWwZcc5nkUhqQRcVIU8YWfELKJ8+boNqbyFzge+Kf7UJVedFcBiGbScKR4B9Mb2nt1//K719wAWFVDXmY2jJSuTVdQFOhb3bGzLqJEdW91523bufsGWVg8YHDwLjKDWF2Jt0kBMxa76kNxudU2GMyiMm6Nrg+u6ecZZV+QUuM2AdM+UdS6Sf0sna3QtiqBsco5rl9omW7Lh9i0bPnjTbOeAeb1sh0Vt40L2ACFWnaiSogCyZN3izXu2sY/62LiDahlaTghcNYrk5BFktCVYEkV2DrMGtHPRhPwN0bXAdYnodBkA+3qvIGRKqPkCWBY7Y/oN0hiDKTSx4CQJHU7QsVk8pqRjrpRWcM3Svu3dfWS33vy84X9Zle7Y06pn/bV1G/YwuidPrD/6lfWeP7M+FnAE1La2jV5+aLcePbaNvX2LewBM5fKTR0j4cdW3EY5wGfXRtf5yytK6sj69d2nmfBGeFaDz6LWoBYElU+8JFUqOp8ZCLhGWHD9Um6kTdQgVIEM2HpNHE2R8KhtYk67Z0todW995aJEMWBqmf85AMCqWNS+wdh+bjT+yXv7Mt2AlWYpPzGAmfVva2kVF7FuDNzGiPWUE8InK7aNvOSZY8RUNgPVZRHqT9FrAvWgEJdEIJzMY/7XyEGGiX5VX5HLlN60q4HLbsv4D29p731Zuv2+EYDzY53psPaZv1jyzk6cf2uhv/8zGv/jATg4/xHP4BNmsvewI37a/e8d2CSz6G7esiNG9uFsRgMqYiX0HPTNEzfU2uTjcHF0Kbrc2eR5rQoVjJGcm39XEzDqpjl194BrpZZ7fg+pI0wFAr9gJFv6kJrzdeGSb+wC7iYeQbnBfD/AS6wFK9fyJffTXf2offPdP7C+/98f20d/8OQD/gqtFqCfJGJAt699+aFsHb1m2tmtHpdYmQttiZo80r0ut2uddD4N8U/xaJPciUgykRW13S5BWqQhJmThJEhsOlggACBjGeAqogJW9x5bsv40ftseALFuULrs6SfKRRYdP7fBn/9d+/hffg39gT//2r+zkkydoixMvq9G0R7XYxm3befh5W7v9lhU8f4LjXFYIgnQ9gUrEQHm71MDW+N4UXVryrN92HstXPS+/40kZ8i0ZzQqpkb7VviqFqcf5CQFDz5bwDlb28Qw2ABZf1gBGfoEMYt83Cea2XOU2KI6tV2CmCvQtbOTp5WClbUTIuQ22Lb2DYbv3jvWJ6HKkv5I90CA7h5lDA2D0/Zn2vk5+DcNGw2nnRXo3aSVDtsOlRKDCBSpihCQdNydI7JrtPT6w4d622ZAIbNBHkgGFsjMsoFSKlYUtIXVbvcx2kfjVdAk9jKErNcURdNysHG/ACJlt9RaBxSPbefAO5QwRAIIJGbOZDgtgjwxfM83i8BrA7eh0UZ37GMk9gErOtVmNcAx3CCDIeDHG/UoTgNhFT2LAcLcw/64/te8qRyW4fsyR0KNnVh09R0XkGLjGXanq5ASUJInYfv1kC4+hwjuwZMWStT1b23/kqqHCb9Y1Dao4kKT5Aom4JnXFvkZwOzotDeoANswlNsElsoQQACkrATDqIYGogvW7D/BpbwMuIe7SimlD9Yn2WmnXINLqi97l2HoZTluGailw0HqRLQ2lZwl0KStF50otjCoARFrT9Vu2tvfAHrzzFeut3bLDXIOJapL/weC6amjtwSwpv2NXX9egGwA3kEbPl/YAShZbuyRrpmeN7znWK2/5oINVpPaxpZuAO0QlpCu0SBIG8IAgSlP0qFoJyON6jMSPbFwdI9WH8JHfUyDhhQyl5qTqknHrUxYew6033kP33kWC1yxHqmv5vVyXgVXZDvIFdBb4q1I3a18LuCrMA4nzqI3aFHpWSMwJwjBCGDVVBxsHBGF/37Jd3K/hPQrZ5IEB8pcBbdCPXizRnfVxtQYMDrO+6unNA4X0KCzD08AbKEt5ATIkegCSeljdsvjOG9bfPrB6uOsLPvoZo+506dSypNzDGWntjFHH89IsDpeCO1vxeTxtXPBrmceTa1pJ0J4BTVftWS2Q2COm56hkei+t4zU9sN7d9/BrHwESKoGOo3C9gTHlCNpCa5DoS0m5DdesQCIrrecOmPpD0p5+Ghp8WS2saRwQYqa0CsE44nkMdh/Y8DZ1LO1gQDPawTBwOeJGtfsi6spdlF+D5M7opZkFHC9aIajABljtuB4zbSW1DcGDQtVtoimsDkBJYon9BaQMGJ12Z5/7a6ZwFa3YOFqzw2rFfj3u2yfjzF6UffKQTgZOg6j5gW3USoN7Fwgz7UHaeyu2cfC27T/+Eurnjh1XMqYoHULHPqOx2MS/Gl0K7uwUOcthGoqRYMRteh5Y66UyZrLQ8jW1mBJlfVveBFgtJe5gxLKhFaiMMSMNJNwM+trdjn/rm0WkTiKCgWbdRoTK42jXctvhfNNOCiSXAZHhUWCQuB9LkahpBRb6AQjWzNeD1/F9B1u33TU7zttAhiZ6Oy8gSd9sf+bl1yC5khQaKUk5l5haVCNJEg9W1m3v9kFYp11Z9e2jJ4SwVZJbnBYUhnvlv8sIOlTFyo3Klu/Z9p0v2aO3v2EP3/oHtnvryzZcuo+uBUBIawfyhfnj0h/jmuk9mQyk4f+mqzs8/4Zt3jqgnsxyXLoKj2R2o4j47NS+Dl0LXHkEWnQW69hBJt91po5hyZR+ETRi+o5x/OOVPRvsvGG2fp8ZvQHgWrzRW1oBwsMqwH1RoBU4OZLI2RKu1X2m9vtf+Uf23pe+YXcfvmfDzX1K7Vmf6Y+HRkO4WawZQDnaUNJgIItygNu3hRp6x24/eBc1vEfAge6VR9L6var/NEMeEahR4W2xOJxr2EMfXyFVfufCJBVZYq1H6Fr9okXuzYAOZQQIWVlZD+kZLA3tBJCO8G+j7Xu28dZv2Ppbv2O2/WUatm999G9WHltajYOUYtSKZkDnh1YX6FE4GUm3SCL5H0nMNnHbltCu2rp/Ulk2ptvoH60bmMoBYM0S3ZuX+MDJDsbwId7DY1vefdtW775tDSriufxdghrFOdLxTZFTTsVgRQQqWpqkQRjAmhC6USgO++sjJKkTnldgez1wRf47NC1AqzHSkfQqUc9kjDBmBcd6m1sTsmbo2sGu1g/uGA5u8G218qWlQYWyNJ6u4RcToVGuNnRkuF2mBfXRU3vx5Kf25MmH9vTnf2XFkx+T9xHXAJT6XajkKqTo7qSmjIpBIo98348nU5esMlkIjff1Xm7PjlE3WvdV5Kj2S0/LxIUNfq0NcfAkpx1rjK8G27XAVcVhC6d2edMsj3GpXKxDBGuMBEs1DFfXbOfWPn0C1JXlKRimt7kYpnpIp/oYMsqiw3rNH0Wa5odmhz+zZz/9P/bBn/5X+4sf/mf70ff/k/3kR//F8o9+BGboWQ0A2GlzYwWwuWaS3mxo9w14FNSl3WTaMGLb27ZxH9ds746d9Ib2Ap02anATmVl6CyJJLumAIsPE2+eKjZTnnSG9dSFXqlB8EV0K7lkFf5qZHrQ+A2Df8g/AroDlHnFN/uSoqLApy7a+s49BOcAdwu3CTGuPbI7Vls6rteAiaQ1VAipGxj2H1sAVv7anH/+NffSzH9svf/ET+C/tkyc/saL4mLvDTpsSSWc46LR6S9v4T96HypTq1K4GXyYfrli6e8dWCI3Tzds2wtU7BtwT2lwCbKX9Zzyk/sVxq2okJfKH3ZfH0+CaFi19368L0iwmU74U3FeRGy4KTxEZLWr7hjoVKSNBeCt7rx+9DtcwJnceMh31JpdggE4eER2NpOe43SWAXKk4weFvaL1wOlSP4BM6cUwfj2n0iOMTVM4Ivxj9Shma/vIT2lVah1fmR+/s1CJNkhjQtO3FImYJ0doKgcX23XdRTzs2TpZ8d8+YAdZLzTBICIUPsnqh9TlA9haK+atKLqFLwZ11U85j103CgWZotMIPsSUBgBsTyi5t0JED25SeW9ujp3o9zvTD37QeBoIWdAIfWC86A4d3RPyP4Vlew5Xav29bt+7hHj+ydUJaXA+6isRLXzODfCbRDnkXWp3ocdaBq+gtoT3WUG+8ivfx0PYffMFW9+5btLzuQjCmMVr/oGPel5qB870ODLLK6dw2+e+6R+lZPGb50u1Maq4kS/CFVKQRbYnMBC+Bstyt0pUmZYqlPZ9yQ4HxxvvWv4eULN0CtGWkbDV0ghar40005lz7aiW3AKvpSIGpDBXlRAQaK6tbtry8aRvbd3DD3rX9+5+zldufs2hwj+eHqFP0NG3QdyD8q0mAldCjiBGTJ6wZFvsoMlpKuT9jcG30zMbHh3Z8/IKxbKyvBjEj/C01AwxMAoE6JDTheEIcx/RfWcJG0tz9Lk+sAbkWSbXrp0rdVPbPtgBuhaMuI7G0dcuW1jBifXRthXTkGsKgX123+SAKVFcInOlIK2l6lYj7U0kOMYAb92zz7vu2fu9LtvXoaza89/cwjEhduoyVp2qk28GbsHoJt3EFhaoy8gBUgYe2Rg22bR2XrLeygiHTUqg8H1CRHSDqC29M1D5/sOVAU0F7mbpr1wOXipMeuqrOcTf1IR2AgUeMvHYjpMNl272D4djap6YhriqaOVsK0qrrNEJ7FRp1ghYJWFlhTWr5u/qpt97iaguTAI43D2zt4PMWbTzCwTjw7UsvCrwDwNNmPA1W6BmsY0hOgFcIy3PwkdDCDwGNFon6O7u2uoqLhkAIzNK9G6SfGLrXx9BOaApsoLPnL9O1wFXxJSGkJFbLs5rp+k2ufhsbEVykWrnKuIAVdssl/zEnGuPBFM7EdCYpUQEAJP84TGuep6MCXepBOsffNFCBdLlmRI7+LJBWbBDGSgvr+ALu81KHFtelB3zTMyRQqV7NcB2hcK5H5kD6leGULpXxpEfdq3/Vq6VMKcxAXapypS7a424UZ4jinK4FrkhWVc5BLDGkY9hu5+AGlXZ89AK9hsUn7pd71aMTksllXBxiMKKhBPnMSFNboufLTM1liloGnCXu1WcKkuiEhsJKo2PKOZlwEhPdJSMEUm+BmS/O+Mdy4Qg+xuUnSPQRqvbEivqQmfIrq8cfw78iuvvE7OjX1oyPGVh0rAaWun3RhxpLbQOgFr29mIIcwBP7OLZ5HSmvo2vtz9W4MsxuzHRW0UC9ESiROEHJjIWZehgkn2Lc65Kj7+jkBAeEvaadOL4bBwaACJUS4WZFlY4ZFL1tKGHcMKuPqPeIlhw7yIlxzHlav+AZlaX7NJCUj7umZ9K+JJEYEaOZxAyCqeznFp08JTj5hX3y0x/Yi48+tPHzXzFrxtLyBEQIDP6sfI1ua1b4DI06ypmDikrUTHRfkuq41LHUj9Loe9/8LVxofMImD18LoQJ9TEj+nT+FXpKL5D9V4oFATB8vkEFgrsmxruuSWS9ppW/kFXgFx1jxlZ2Htvvgc7hibxB9ak1ghVqlAJmG0iUyMELczTmH0hlieecqTaLUkV9r00lf1UYxx+0j4SIMIBW6uHOrfGOI2jp+YUfPP7Hx05/bL//6h1YfPmEcDpk9lQ3ghL74T6+kjtwWzLZBUHNdKkuntF/SLYzkKYhzuqf0UnDRhheC60eysOockiJTkCpkxMXRt/W0MP30mNAXi5wONt2D6PWHrtMUffUJN2t5A4y+N44SgqUNDZf+1av5bvqpyql08IeOalCDFFEA3Q5fENEsC+2Ne/I2dKvWwAokkxEoRjYSuM+kHg59T4Q+WNVj0PRWWZulBaw8EHluvnTZkq8ZC1ylahABlNTGzYBLpvzRiGdRCjSIxve0jQhwUQljNGk8WPOdL7LqKd6F+4/U0cOzrylcgHZTybUcYGvxRNKTcsEXhDT9AE2w+2KRd1h6Urto1B4Bq5gs6EspOZWnzyUmKbm0K8arybSJhLrjHB2cH2Mg8dNpR58O+QK9JLztW0OZ/vsKyhP5IAJqWGuWGhMwVwJXr+4AlqnTgavPrEhPqnD/pkArRYGCdNEWy7IMCSs8HC0oR+9btBFDb3lL/dAZnXuCn1SiCnp9eQ6okBIDRAGSYu2XlW4TsKIGVASspLFbMRPA6oxA1ZCHbUgBMN9oRy+8s3Q07E/glLMcO9BD7ypCqwuMYYFeZXD7ajwqJ/xAhX4xzbV1KtLSpdrCubZBxVrMOQOu1II+dKccreq9Qi18LYALsC65Gl2NrD8MteD69Cf1qaBsnlHnFK56N6QHPY+/bcdcugAGCLyzUwr3uR3WwoiedeA8Gwr1CFAfX69TZcGqubuPB4JEn0+yCZWkkcLE/vkY8sJnZBRZJZYzgJqVAk40FZ7Qj1DnlEK/1TalWhFUezTYaBtuFai+CkcKuL9BUKLviqEDO7UgaVCv1GlcpA7c2Yo6cGvcpW4r/PwkSZDOVI9m0D/VofZ4kjd7jWcksZ7XtaFNvU3yYJi+HEsaHWTQ03G4h2CllBpRGfMTxbXgaiDwjphu2qNRoIb0cy+FxhOaSAR0WtICKe9svkJO/2H0IuxTWdNKiy+kHbtDFNijBGfudQbICQOMvAmJm6czLAD9mHowTLo3qBTmKZ0QS/1wQwvO/Cwswu+Lw0BKyIKKC2n03W+1kouu1QeK+7VeDuK4S3J5SMq6UwlqSEeaRurTRAouIPckXklam2gPz6Fp+dO6X01nJFhER6ftmMlXmaitq5d9mnxMKU4gn6dz49mO6aZXQdGN2ISYqv5NA33j4ALWlzsuYn8/Jal9BdeyCM5B2l5mrUfICexY52KuSeG4YNDoVtolLFPu3LbQ73m5k96OJnltSo2BToEG6SGxSw7TK+iswGHlqE29cSrm/FTvpjQlz0tlUDTltTfsNGsKB9Zqv1b+5W++xNTg7NfPZ8mpzPVFPNuvxTj0Z7ZPXeo69xT6Z84vI+mXoGMWSbuRDgMBXi1z3LXjlD7V+Szr2ux1MR2dYZdgCuq4AyLo76DyunbMy6HNHLQcZso0VRMXJgHkIKB45JLNnfJ8oCBfTsqbyQ/SQZYYIKdMhCSj4dcvZiprywoABAZc77qOr0uU0zqz7nW49xLS2MNLKvGG+K1CfKZxl5CAehVrIf1Cdjeu9XM9VVQoYOVja+2h49lrSrvjWT5DAhXWxpLAYboGMFrWsf52E2BOlis2KWe2zDbVX6fJzS3puDufzZ8U3J6rYwIoSPH8KRr1HPbJTL0td+fOmoizHNrStXfCF+XT8dlr6st1SOXob/Bp4Zk07kBVVgfabN65+bBInQ1Sp4z5Uz2vYMTDycnxOYxhmnJoR8hvjwGslZmZPF3X80EzTsuaYc7VlK6f8/KUVEioRwM+Sb2fkBo0m4r8WGuWcLcLRf6ijmfZ76Gx86Z626DFibi6iGmgM215iZEMyvF0ch+svFmeXANMv065ziFf7e/6NG8q9sUVolul+jpJ2KccUtlXkHbgp9zmiQRwN0pBIsJ5d68+7ZfRwUVY32T0dVOV17Gm7VV4EuWFdkxZ0thKpFjSOWEA6Vj3+LGkONw7b6pn9amXjiNYq2Vd6hjqRlEHqD/YctwaNroT0pnzGKt73f9UhsrS6peOtYQS0u68TQk49PH1l1Jdpz3+3NlU5Z5KFfwisZ6qvzoO10/18aopAOmf2VGEq1XBiDSKp6nr3MlItMcTDljPjNTMfcqHw16x63FYi70gRTq1DyHsLKRTGgQ/B1xPp+07nXY69YIUPk+Y5uHwMGpBkuugtlLbptEPvv31Rh8j7jUjpEHvkLTsqPXK8KyPM64Ms9ipTdBZoWnd+aIkr+EUAeiUziu9va773JjSMYBalMK6Sahp3jQYRoEbAqKXlhz/97/7XcZfL2WeA+4RaWEpilpf9JwuPPNw+zE0L5SSoqZHLWgthlA7ZG6ETgF9AZ0dnAXoqmCeTWVv+qBZF3oHg2uZIIRJZCWYaP9G9D++9Q+bDOB6yXPLoiNL/O0rOkm/SUKOfVeM/FLtkZWoq2BN1VobJtR5BQMaQUmBRvOzk0p1rcRDk9OjNQ79azDacanv9OQSxP/1rwE3yW2Q6kXdCPfkxF2UtNGP7bSe2kluADcUKkutf1QNndkudksHyX/+TKX0/DgXmCAgvwtwC/zEcVXaCQBHP/z273HbMdZTH4Y48rcRAlCSqW/PFqiU2hEdM2LB2fdv1FZDpoXWfiTNN6QW/j8n2aNkeSPElIBbp4RDoD6qc2wU0P/5d/6gqYpnVucfWxod2hAA9VuGpsysKtGt2kIkneo7EXE7hLOrhSHFS2vLoCjW/+yRL1siYCUz2f9pMwAWuHoPrjei0Xf//T9rqvwQpfyEKf4ibCFCwrUjUeBm/SUkVusA+RRcCouRXFnaCnXxksX/jJBg0n43RWwOrIwZkEvvxhlu5H/7zr9oInRtL36GnkU91MceNUktAK2NC4AF1Fq/T0BJS8/q1UiE5Gpa5OkYy/jZlNyMkLeXv0B+8aS0GQZvIUfXjuWeoX+j//idf9osDWpbGZy4WoiLFzhpRBzWtyTRS0JEX5KLhCoNktsLkgv8pcBtJfoiq/p3NU0x5oOc+ED91/4Hwr5xVfsWWv/E1od/8s+blRWCyPqXlh8/QSXoH5xrrKmY+ngLvoIvcLV70I2ZJDfDZZPOpRJ8ZO0Kv0pj/q6lMuyZ4gG8K31W6wRnQDt0joqR7R/cs/8HmvEiewzpC+EAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/settings.56bd52b7.png\";"],"sourceRoot":""}