{"version":3,"sources":["../node_modules/@infragistics/igniteui-dockmanager/dist/esm lazy /^/.*/.entry/.js$/ include: /.entry/.js$/ exclude: /.system/.entry/.js$/ groupOptions: {} namespace object","app/app.constants.js","features/projects/tool/tool.constants.js","infrastructure/config/index.js","utils/app.util.js","features/projects/tasks/tasks.constants.js","features/projects/activities/activities.constants.js","utils/format.util.js","features/projects/activities/activities.mappers.js","features/projects/tasks/tasks.mappers.js","features/operations/operations.mappers.js","features/projects/dashboard/dashboard.constants.js","features/projects/tasks/task/simulation/simulation.constants.js","features/equipment/equipment.helpers.js","features/equipment/equipment.constants.js","features/projects/tool/tool.mappers.js","features/projects/tasks/task/toolstring/toolstring.mappers.js","utils/fluids/constants.utils.js","features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.constants.js","features/projects/tasks/task/simulation/simulation.mappers.js","mappers.js","services/auth.service.js","infrastructure/agent.js","services/tool.service.js","features/projects/tool/tool.actions.js","app/sagas/helperSagas.js","features/projects/tool/tool.sagas.js","features/projects/team/team.selectors.js","app/app.selectors.js","app/routePaths.js","services/app.service.js","utils/route.util.js","infrastructure/history.js","infrastructure/appInsights.js","app/app.actions.js","services/task.service.js","features/projects/projects.mappers.js","services/project.service.js","utils/activity.util.js","services/activities.service.js","app/hooks/useViewMode.js","features/projects/activities/activities.actions.js","utils/fluids/actions.base.js","features/projects/task.actions.fluids.js","features/projects/tasks/task.sagas.js","features/projects/activities/sagas/common.sagas.js","features/projects/projects.selectors.js","features/projects/activities/sagas/create.activity.saga.js","features/projects/wellbore/projectWellbore.selectors.js","features/projects/activities/activities.selectors.js","features/projects/activities/sagas/sort.activities.saga.js","features/projects/activities/sagas/delete.activity.saga.js","features/projects/activities/sagas/goback.activity.saga.js","features/projects/activities/sagas/utils.js","features/projects/activities/sagas/update.activity.form.saga.js","features/projects/activities/sagas/complete.task.saga.js","services/reports.service.js","features/projects/activities/activity.sagas.js","features/projects/dashboard/dashboard.actions.js","services/dashboard.service.js","services/projectDashboard.service.js","features/projects/dashboard/dashboard.sagas.js","features/wells/sections/wellboreSection.constants.js","features/wells/sections/wellboreSection.actions.js","features/wells/sections/wellboreSection.mappers.js","services/wellboreSection.service.js","features/wells/sections/wellboreSection.sagas.js","services/risk.service.js","features/projects/tasks/task/details/taskDetails.constants.js","services/wellbore.service.js","services/wellboreDetail.service.js","features/wells/wellbore.utils.js","features/wells/wellbore.selectors.js","features/wells/wells.constants.js","features/wells/wellbore.actions.js","features/projects/projects.constants.js","features/projects/team/team.mappers.js","services/team.service.js","features/projects/team/team.constants.js","authorization/authorization.constants.js","services/authorization.service.js","authorization/authorization.mappers.js","authorization/authorization.actions.js","features/projects/team/team.actions.js","features/projects/projects.actions.js","services/simulation.service.js","features/projects/tasks/task/simulation/simulation.actions.js","services/toolstring.service.js","features/projects/tasks/task/toolstring/toolstring.constants.js","features/projects/tasks/task/toolstring/toolstring.actions.js","features/projects/tasks/tasks.actions.js","features/projects/tasks/tasks.selectors.js","features/projects/tasks/task/details/taskDetails.actions.js","features/projects/details/details.constants.js","features/projects/details/details.actions.js","features/projects/risks.sagas.js","features/equipment/equipment.service.js","features/equipment/equipment.actions.js","features/projects/tasks/task/toolstring/toolstring.sagas.js","features/projects/tasks/task/simulation/simulation.sagas.js","features/projects/wellbore/details/projectWellboreDetails.constants.js","features/projects/wellbore/details/projectWellboreDetails.actions.js","services/projectWellboreDetail.service.js","services/projectWellboreSection.service.js","services/projectFluid.service.js","features/projects/wellbore/details/projectWellboreDetails.sagas.js","features/projects/tasks/task/simulation/parameters/simulationParameter.constants.js","features/projects/tasks/task/simulation/parameters/simulationParameter.actions.js","features/projects/tasks/task/simulation/parameters/simulationParameter.sagas.js","features/projects/project.actions.fluids.js","features/projects/project.sagas.js","features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.actions.js","features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.sagas.js","services/wellboreFluid.service.js","features/wells/wellboreFluid.actions.js","features/wells/wellbore.sagas.js","features/changelog/changelog-saga.js","features/projects/mobilisation/projectMobilisation.constants.js","features/projects/mobilisation/projectMobilisation.service.js","features/projects/mobilisation/projectMobilisation.actions.js","features/projects/mobilisation/projectMobilisation.sagas.js","features/wells/wells.reducer.js","features/wells/events/wellEvents.constants.js","features/wells/events/wellEvents.reducer.js","features/wells/projects/wellProjects.constants.js","features/wells/projects/wellProjects.reducer.js","features/wells/well.reducer.js","features/fields/fields.constants.js","features/wells/field.reducer.js","features/projects/tool/tool.reducer.js","features/wells/schematics/helpers/constants.js","features/wells/schematics/helpers/utils.js","features/wells/wellbore.reducer.js","features/projects/project.entity.reducer.js","features/wells/wellboreFiles.mappers.js","features/wells/wellboreFiles.constants.js","features/wells/wellboreFiles.reducer.js","features/operations/operations.constants.js","features/operations/cheetahJob.reducer.js","features/facilities/facilities.constants.js","features/facilities/facilities.reducer.js","features/facilities/projects/facilitiesProjects.constants.js","features/facilities/projects/facilitiesProjects.reducer.js","features/facilities/documents/facilityDocuments.mappers.js","features/facilities/documents/facilityDocuments.constants.js","features/facilities/documents/facilityDocuments.reducer.js","features/facilities/facility.reducer.js","features/equipment/details/equipmentDetails.constants.js","features/equipment/equipment.reducer.js","features/projects/dashboard/dashboard.mapper.js","features/projects/dashboard/dashboard.reducer.js","features/data-exchange/winch/smlocation.constants.js","features/data-exchange/winch/smlocation.mappers.js","features/data-exchange/winch/smlocation.reducer.js","features/wells/wellboreTrajectory.reducer.js","features/projects/activities/activity.entity.reducer.js","features/wells/sections/wellboreSection.reducer.js","features/wells/elements/wellboreElement.constants.js","features/wells/elements/wellboreElement.mappers.js","features/wells/elements/wellboreElement.reducer.js","features/projects/tasks/task/simulation/simulation.reducer.js","features/projects/tasks/task/activities/taskActivities.constants.js","features/projects/tasks/task/toolstring/toolstring.reducer.js","features/projects/dashboard/projectDashboard.reducer.js","features/projects/wellbore/details/wellboreDetail.reducer.js","features/projects/dashboard/projectDashboardCurve.reducer.js","features/projects/tasks/task/simulation/simulationResult.reducer.js","features/projects/tasks/task/simulation/fluids/simulationFluid.reducer.js","features/projects/wellbore/details/projectWellboreDetails.mappers.js","features/projects/wellbore/details/projectWellboreDetails.reducer.js","features/projects/tasks/task/simulation/parameters/simulationParameter.reducer.js","features/wellControlDrillActivity/wellControl.mapper.js","features/wellControlDrillActivity/wellControl.constants.js","features/wellControlDrillActivity/wellControl.reducer.js","features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.reducer.js","features/projects/projectGantt.entity.reducer.js","features/projects/mobilisation/projectMobilisation.mappers.js","features/projects/mobilisation/projectMobilisation.reducer.js","features/fields/fieldDocuments.mappers.js","features/fields/fieldDocuments.reducer.js","features/settings/integrityManagement/helpers/integrityManagement.constants.js","features/settings/integrityManagement/helpers/integrityManagement.mappers.js","features/settings/integrityManagement/helpers/integrityManagement.reducer.js","app/reducers/entityReducer.js","app/reducers/router.reducer.js","app/reducers/common.reducer.js","features/projects/npt/npt.mappers.js","features/projects/npt/npt.constants.js","features/projects/npt/npt.reducer.js","features/projects/team/team.reducer.js","features/projects/tasks/tasks.reducer.js","features/projects/tasks/task/dataAcquisition/dataAcquisition.constants.js","features/projects/tasks/task/dataAcquisition/dataAcquisition.mappers.js","features/projects/tasks/task/dataAcquisition/dataAcquisition.reducer.js","features/projects/tasks/task/dataAcquisition/components/Fluids/taskFluids.reducer.js","features/projects/tasks/task/task.reducer.js","features/projects/tasks/plan.reducer.js","features/projects/projects.reducer.js","features/projects/progress.reducer.js","features/projects/events/events.reducer.js","features/projects/report/report.constants.js","features/projects/report/report.reducer.js","features/projects/details/details.reducer.js","features/projects/lessons/lessons.mappers.js","features/projects/lessons/lessons.constants.js","features/projects/lessons/lessons.reducer.js","features/projects/incidents/incidents.mappers.js","features/projects/incidents/incidents.constants.js","features/projects/incidents/incidents.reducer.js","features/projects/assets/assetTest.constants.js","features/projects/assets/assetTest.mappers.js","features/projects/assets/assetTest.reducer.js","features/projects/documents/documents.mappers.js","features/projects/documents/documents.constants.js","features/projects/documents/documents.reducer.js","features/projects/activities/activities.reducer.js","features/projects/wellbore/projectWellbore.constants.js","features/projects/wellbore/projectWellbore.reducer.js","features/projects/project.reducer.js","authorization/authorization.reducer.js","features/operations/operations.reducer.js","app/reducers/rootReducer.js","infrastructure/store.js","app/sagas/rootSaga.js","layout/themes.js","app/components/Counter.js","app/components/LoadingDimmer.js","assets/login.jpg","assets/login_pattern.svg","infrastructure/uaParser.js","features/login/login.constants.js","features/login/components/NotSupported.js","features/login/login.actions.js","app/components/NavigationLink.js","features/login/LoginContainer.js","features/login/LogoutContainer.js","app/hooks/useCurrentUser.js","utils/authorization.util.js","app/hooks/authorization/usePermissions.js","app/hooks/authorization/useSystemPermissions.js","app/components/ValidRoutesContainer.js","app/components/SystemRoutesContainer.js","assets/not_found.jpg","app/components/NoMatchingRoute.js","authorization/authorization.selectors.js","app/components/ProjectRoutesContainer.js","app/components/RoutesContainer.js","app/components/NavigationAppBar.js","app/hooks/useHeader.js","layout/googleMap.themes.js","app/components/GoogleMap.js","app/hooks/usePagedSearch.js","utils/table.util.js","app/components/form/formik/AutoSaveFormik.js","app/components/form/TextFieldV2.js","app/components/form/TextFieldOutlined.js","app/components/form/formik/TextFieldFormik.js","app/components/form/formik/SelectTextFieldFormik.js","features/wells/components/WellboresFilter.js","features/wells/components/WellboreTableRow.js","features/wells/components/WellboresTable.js","features/wells/components/AperioWellboresTable.js","features/wells/WellboresContainer.js","app/components/BasePageDense.js","features/projects/components/ProjectFilter.js","features/projects/components/ArchiveProjectFilter.js","app/components/withTooltip.js","app/components/Icons/DashboardIcon.js","app/components/ProjectTaskServiceChips.js","features/projects/components/ProjectTableRowDetail.js","features/projects/components/WellMapLocations/ProjectMapMarker.js","features/projects/dashboard/components/DashboardImage.js","features/projects/dashboard/dashboard.selectors.js","features/projects/dashboard/hooks/useProjectDashboards.js","features/projects/dashboard/components/ProjectDashboardsList.js","utils/validation.util.js","services/operation.service.js","features/operations/operations.actions.js","features/operations/cheetahJob.selectors.js","features/data-exchange/hooks/useCheetahJobs.js","features/projects/dashboard/hooks/useDashboards.js","features/projects/dashboard/hooks/useProjectDashboard.js","features/data-exchange/components/StatusIndicator.js","features/data-exchange/components/CheetahJobStatusIndicator.js","app/components/form/formik/TableRowTextFieldFormik.js","app/components/form/formik/helpers/tablerow.textfield.styles.js","features/projects/dashboard/components/StatusIndicatorWithText.js","features/projects/dashboard/components/ProjectDashboardCurveColorField.js","features/projects/dashboard/components/ProjectDashboardCurvesTable.js","features/projects/dashboard/hooks/useProjectDashboardCheetahJobCurves.js","features/projects/dashboard/components/ProjectDashboardCheetahJobCurvesTableContainer.js","features/projects/dashboard/hooks/useProjectDashboardSimulation.js","features/projects/dashboard/components/ProjectDashboardSimulationSelectField.js","features/projects/dashboard/components/ProjectDashboardSimulationCurvesTableContainer.js","features/projects/dashboard/components/ProjectDashboardsModal.js","features/projects/dashboard/components/ProjectDashboardsDrawer.js","features/projects/components/ProjectTableRow.js","features/mobile/projects/ProjectsTableRowMobileView.js","features/projects/components/ProjectsTable.js","features/projects/components/ProjectsByStatus.js","features/projects/components/WellMapLocations/ProjectMapLocations.js","layout/highcharts.theme.js","features/projects/dashboard/components/dashboards/winch/dashboard.highcharts.theme.js","features/projects/dashboard/components/dashboards/winch/winch.highcharts.theme.js","features/projects/projectsGanttChart/ProjectsGanttChart.js","features/projects/projectsGanttChart/ProjectsGanttChartContainer.js","features/projects/ProjectsContainer.js","features/projects/dashboard/DashboardContainer.js","app/components/ProjectHelmet.js","features/projects/hooks/useProject.js","features/projects/hooks/useCurrentProject.js","assets/collaborate_logo.svg","app/components/ApplicationHeader/Logo.js","app/components/ApplicationHeader/LogoAndAppTitle.js","features/projects/components/ProjectStatusText.js","features/projects/components/ProjectLinearProgress.js","features/projects/dashboard/components/FullScreenButton.js","app/components/ApplicationHeader/ApplicationHeaderBase.js","app/components/ApplicationHeader/ApplicationHeaderTitle.js","features/projects/dashboard/components/DashboardHeader.js","features/projects/dashboard/components/dashboards/configurableDashboard/layouts.js","features/projects/dashboard/components/DynamicDockManager/DynamicDockManagerSlot.js","features/projects/dashboard/components/DynamicDockManager/DynamicDockManager.js","features/projects/dashboard/components/DynamicDockManager/DockManagerIFrame.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/IFrameDashboardController.js","utils/dashboard.util.js","features/projects/dashboard/components/charts/DashboardLineChart.js","features/projects/dashboard/hooks/useStream.js","features/projects/dashboard/hooks/useHubConnection.js","features/projects/dashboard/hooks/useQueryParams.js","features/projects/dashboard/hooks/useProjectDashboardHubConnection.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/GenericDashboardController.js","features/projects/dashboard/components/dashboards/logging/helpers/logging.highcharts.theme.js","features/projects/dashboard/components/dashboards/logging/helpers/constants.js","features/projects/dashboard/components/dashboards/logging/helpers/common.js","features/projects/dashboard/components/dashboards/logging/common/LoggingDashboard/helpers/utils.js","features/projects/dashboard/components/dashboards/logging/common/LoggingDashboard/index.js","features/projects/dashboard/components/dashboards/logging/components/CaliperDashboard/index.js","features/projects/hooks/useProjectWellbore.js","features/wells/hooks/useProjectWellboreTrajectory.js","features/projects/dashboard/components/dashboards/logging/components/CorrelationDashboard/index.js","features/projects/dashboard/components/dashboards/logging/components/LoggingNavigatorChart/index.js","features/projects/dashboard/components/dashboards/logging/LoggingDashboardContainer.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/CaliperDashboardController.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/CorrelationDashboardController.js","features/projects/dashboard/hooks/useMetalMillingHubConnection.js","features/projects/dashboard/components/dashboards/metalMilling/TelemetryGauge.js","features/projects/dashboard/components/dashboards/metalMilling/MetalMillingROP.js","features/projects/dashboard/components/dashboards/metalMilling/DrillModel/DrillModel.js","features/projects/dashboard/components/dashboards/metalMilling/DrillModelContainer.js","features/projects/dashboard/components/dashboards/metalMilling/constants.js","features/projects/dashboard/components/dashboards/metalMilling/MetalMillingChart.js","features/projects/dashboard/components/dashboards/metalMilling/MetalMillingChartsContainer.js","features/projects/dashboard/components/dashboards/metalMilling/MetalMillingDashboardContainer.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/MetalMillingDashboardController.js","features/projects/dashboard/components/charts/DashboardGaugeChart.js","features/projects/dashboard/components/charts/DashboardGaugeChartsContainer.js","app/threeJs/ThreeJsManager.js","app/threeJs/ThreeJsManagerProvider.js","features/projects/wellbore/projectWellbore.actions.js","app/components/WellboreTrajectoryDetailed3DView/Utils.js","app/components/WellboreContextualization/RenderNippleText.js","app/components/WellboreContextualization/RenderNipples.js","app/components/WellGraphAndGuages/WellGraphAndGuagesTrajectoryScene.js","app/components/WellGraphAndGuages/RenderCableAndBHAScene.js","app/threeJs/ThreeJsUtils.js","app/components/WellboreTrajectory/WellboreTrajectoryScene.js","app/components/WellboreTrajectory/WellboreTrajectoryLegends.js","app/components/WellboreTrajectory/WellboreTrajectory.js","features/projects/hooks/useLatestProjectWellboreDetails.js","app/components/WellboreTrajectory/ProjectWellboreTrajectoryContainer.js","features/projects/dashboard/components/dashboards/DashboardWellboreTrajectoryContainer.js","assets/in_progress_icon.svg","assets/TaskCompletedIcon.svg","assets/task_planned.svg","features/projects/components/WorkItemStatus.js","features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusTable.js","features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusContainer.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WinchCombinedDashboardController.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WinchLineAndGaugeDashboardController.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WinchWellboreAndGaugeDashboardController.js","features/projects/tasks/task/toolstring/toolstring.selectors.js","features/projects/wellbore/sections/projectWellboreSection.constants.js","features/projects/wellbore/sections/projectWellboreSection.actions.js","app/components/WellboreTrajectoryDetailed3DView/Toolstring.js","app/components/WellboreTrajectoryDetailed3DView/CSGMesh.js","app/components/WellboreTrajectoryDetailed3DView/Nipple.js","app/components/WellboreTrajectoryDetailed3DView/Loader.js","app/components/WellboreTrajectoryDetailed3DView/Pipe.js","app/components/WellboreTrajectoryDetailed3DView/BHA.js","app/components/WellboreTrajectoryDetailed3DView/WellboreTrajectoryDetailed3DView.js","app/components/Mobile/MobileDrawerBase.js","app/components/Mobile/MobileNavigationHelpTooltip.js","app/components/WellboreContextualization/NavigationHelpTooltip.js","app/components/WellboreTrajectoryDetailed3DView/Environment.js","app/components/WellboreTrajectoryDetailed3DView/WellboreTrajectoryDetailed3DContainer.js","app/components/WellboreTrajectoryDetailed3DView/WellboreTrajectoryDataFetchContainer.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/BHAGraphAndGuagesController.js","app/components/WellGraphAndGuages/WellGraphAndGuagesTrajectory.js","app/components/WellGraphAndGuages/ProjectWellGraphTrajectoryContainer.js","app/components/WellGraphAndGuages/WellGraphAndGuagesDataContainer.js","features/projects/dashboard/components/dashboards/configurableDashboard/ProjectDashboardDockManager.js","features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WellGraphAndGuagesController.js","features/projects/dashboard/ProjectDashboardContainer.js","features/projects/tasks/task/simulation/simulation.selectors.js","features/projects/tasks/task/simulation/simulation.utils.js","features/projects/dashboard/components/dashboards/SimulationDashboardContainer.js","features/settings/userAccess/UserRoleSelector.js","features/settings/userAccess/UserAccessContainer.js","features/settings/SettingsOverviewContainer.js","features/settings/accessRoles/AccessRolesContainer.js","app/components/form/TextField.js","app/components/form/TextAreaField.js","app/components/ReadOnlyField.js","app/components/form/redux-form/ReadOnlyFieldReduxForm.js","features/settings/accessRoles/RoleForm.js","features/settings/accessRoles/RoleAccessSummary.js","features/settings/accessRoles/projectRoles/ProjectRoleOverview.js","features/settings/accessRoles/projectRoles/ProjectRoleContainer.js","features/settings/accessRoles/NoRoleSelectedPage.js","features/settings/accessRoles/projectRoles/CreateProjectRoleModal.js","features/settings/accessRoles/projectRoles/ProjectRolesContainer.js","features/settings/accessRoles/projectRoles/ProjectRoleBreadcrumb.js","features/settings/accessRoles/PermissionGroup.js","features/settings/accessRoles/projectRoles/ProjectRoleAccessRights.js","features/settings/accessRoles/systemRoles/SystemRoleUsers.js","features/settings/accessRoles/systemRoles/SystemRoleOverview.js","features/settings/accessRoles/systemRoles/SystemRoleContainer.js","features/settings/accessRoles/systemRoles/SystemRoleBreadcrumb.js","features/settings/accessRoles/systemRoles/CreateSystemRoleModal.js","features/settings/accessRoles/systemRoles/SystemRolesContainer.js","features/settings/accessRoles/systemRoles/SystemRoleAccessRights.js","app/components/DepartmentSelectField.js","app/components/LoadingButton.js","app/components/HasPermission.js","app/hooks/authorization/useProjectPermissions.js","app/components/HasProjectPermission.js","app/components/withNavigation.js","features/projects/tasks/components/TaskDetails.js","features/projects/tasks/components/TaskTypeSelect.js","app/components/form/redux-form/QuantityTextFieldReduxForm.js","features/projects/components/RunNumber.js","features/projects/tasks/task/details/components/TaskMultipleContingenciesSelect.js","features/projects/tasks/hooks/useTaskTypes.js","app/components/form/formik/EditorFormik.js","features/projects/components/CreateRiskSectionRow.js","app/components/form/formik/EditableRichTextTableRowFormik.js","features/projects/components/RiskTableCellDense.js","features/projects/components/RiskSectionsTable.js","features/projects/tasks/hooks/useHandleToolbarHeight.js","features/projects/tasks/components/EditTaskForm.js","features/projects/tasks/task/task.constants.js","features/projects/tasks/task/details/TaskDetailsContainer.js","features/projects/tasks/task/activities/taskActivities.actions.js","features/projects/activities/hooks/useTaskActivities.js","app/components/EditorStateViewer.js","features/projects/tasks/task/activities/ActivityCommentModal.js","features/projects/tasks/task/toolstring/toolstring.util.js","features/projects/tasks/task/activities/TaskActivitiesTable.js","app/components/form/TimeSpanField.js","app/components/form/EditorField.js","features/projects/activities/components/CreateActivityModalContainer.js","app/components/Modal/Transition.js","app/components/Modal/ModalAppBar.js","app/components/BackButton.js","app/components/Modal/ModalAppBarFullscreen.js","app/components/Modal/ModalContainer.js","app/components/form/DateTimePickerField.js","app/components/form/AdjustTimeField.js","app/components/form/AdjustDurationField.js","features/wellControlDrillActivity/constants.js","app/components/form/formik/SwitchFormik.js","app/components/form/formik/DateTimePickerFormik.js","features/wellControlDrillActivity/wellControl.service.js","app/components/form/formik/SearchTextFieldFormik.js","features/wellControlDrillActivity/SituationsModal.js","features/wellControlDrillActivity/wellControl.selectors.js","features/wellControlDrillActivity/SituationsModalContainer.js","features/wellControlDrillActivity/wellControl.actions.js","features/wellControlDrillActivity/AddParticipantsModal.js","features/wellControlDrillActivity/AddParticipantsModalContainer.js","features/wellControlDrillActivity/WellControlDrillActivityContainer.js","features/projects/activities/components/editActivity/EditActivityForm.js","features/projects/activities/components/editActivity/EditActivityModalActions.js","features/projects/activities/components/editActivity/EditActivityModalContainer.js","features/projects/activities/activities.validation.js","features/projects/activities/hooks/useRealTimeNotifications.js","features/projects/activities/components/editActivity/EditActivityModalContainerWithNotification.js","features/projects/tasks/task/activities/SetAndRetrieveItem/SetAndRetrieveItemModalHeader.js","features/projects/tasks/task/activities/SetAndRetrieveItem/SetAndRetrieveItemModalFooter.js","features/projects/tasks/task/activities/SetAndRetrieveItem/SetAndRetrieveItemModalContainer.js","features/projects/tasks/task/activities/activityUtils.js","features/projects/tasks/task/activities/TaskActivitiesContainer.js","features/projects/tasks/task/simulation/components/CreateSimulationForm.js","features/projects/tasks/task/simulation/components/CreateSimulationModal.js","features/projects/tasks/task/simulation/components/NoSimulationSelectedPage.js","app/components/CardNavigationItem/CardNavigationItemData.js","app/components/CardNavigationItem/CardNavigationItemHeader.js","app/components/CardNavigationItem/CardNavigationItemActions.js","app/components/CardNavigationItem/CardNavigationItem.js","app/components/form/RadioGroupField.js","features/projects/execution/components/PlannedIndicator.jsx","features/projects/tasks/task/simulation/components/SimulationCardNavigationItem.js","features/projects/tasks/task/simulation/TaskSimulationsContainer.js","features/projects/tasks/task/toolstring/components/NoToolstringSelectedPage.js","features/projects/tasks/task/toolstring/components/create/CreateToolstringForm.js","app/components/Table/TableCellDense.js","app/components/TableHeaderTitleCell.js","app/components/Table/TableHeaderCellDense.js","app/components/TableRowExpandable.js","features/projects/tasks/task/toolstring/components/ToolstringTemplateToolsTable.js","features/projects/tasks/task/toolstring/components/ToolstringTemplateTableRow.js","features/projects/tasks/task/toolstring/components/ToolstringTemplatesTable.js","features/projects/tasks/task/toolstring/components/create/CreateToolstringModal.js","features/projects/tasks/task/toolstring/components/ToolstringCardNavigationItem.js","features/projects/tasks/task/toolstring/TaskToolstringsContainer.js","app/components/EditableTitle.js","features/projects/tasks/task/simulation/components/SimulationHeader.js","features/projects/tool/tool.selector.js","features/projects/tool/components/CablePickerModalTable.js","features/projects/tool/components/CablePickerModalHeader.js","features/projects/tool/components/CablePickerModal.js","features/projects/tool/components/CablePickerModalContainer.js","features/projects/tasks/task/simulation/components/SimulationLinearProgress.js","features/projects/tasks/task/simulation/components/TaskSimulationDetails.js","app/components/TextFieldCustomSelect.js","features/projects/tool/components/CableDetails.js","features/projects/tasks/task/simulation/components/TaskSimulationCableSelect.js","features/projects/tasks/task/simulation/components/SimulationResultsChart.js","app/components/QuantityTableHeaderTitleCell.js","features/projects/tasks/task/simulation/components/SimulationResultsTableCell.js","features/projects/tasks/task/simulation/components/SimulationResultsTableHeaderCell.js","features/projects/tasks/task/simulation/components/SimulationResultsTableHeader.js","features/projects/tasks/task/simulation/components/SimulationResultsTable.js","features/projects/tasks/task/simulation/components/SimulationResultsContainer.js","features/projects/tasks/task/simulation/components/TaskSimulationToolstringSelect.js","features/projects/tasks/task/simulation/components/SimulationExportModalChartSelect.js","features/projects/tasks/task/simulation/components/SimulationExportModal.js","features/projects/tasks/task/simulation/components/SimulationExportModalContainer.js","utils/conversion.util.js","app/components/MetricImperial.js","features/projects/tool/components/ToolDetails.js","features/projects/tool/components/ToolImageContainer.js","features/projects/tasks/task/toolstring/components/ToolstringPreviewEmpty.js","features/projects/tasks/task/toolstring/components/BreakpointThumbIcon.js","features/projects/tasks/task/toolstring/components/ToolstringPreviewBreakpoint.js","features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider.js","features/projects/tasks/task/toolstring/components/ToolstringPreviewImages.js","features/projects/tasks/task/toolstring/components/ToolstringPreviewDetails.js","features/projects/tasks/task/toolstring/components/ToolstringPreviewContainer.js","features/projects/tasks/task/simulation/components/TaskSimulationToolstringPreview.js","features/projects/tasks/task/simulation/components/TaskSimulationToolstringContainer.js","features/projects/tasks/task/simulation/components/TaskSimulationContainer.js","features/projects/tasks/task/toolstring/components/TaskToolstringHeader.js","features/projects/tasks/task/toolstring/components/TaskToolstringTotals.js","features/projects/tasks/task/toolstring/components/ToolstringToolsTableRow.js","features/projects/tasks/task/toolstring/components/ToolstringToolsTable.js","features/projects/tasks/task/toolstring/components/ToolstringPreviewSections.js","features/equipment/toolAssemblies/components/ToolAssemblyCreatorToolstringPreviewSection.js","features/projects/tasks/task/toolstring/components/TaskToolstringPreview.js","features/projects/tasks/task/toolstring/components/TaskToolstringComments.js","features/projects/tasks/task/toolstring/components/TaskToolstringDetailsHeader.js","features/projects/tasks/task/toolstring/common/styles.js","features/projects/tasks/task/toolstring/TaskToolstringExportModal.js","features/projects/tasks/task/toolstring/TaskToolstringExportModalContainer.js","features/projects/tasks/task/toolstring/components/TaskToolstringContainer.js","app/components/ToolImageTableCell.js","features/projects/tool/components/ToolPickerModalTable.js","features/projects/tool/components/ToolPickerModalHeader.js","app/components/form/formik/MultiSelectTextFieldFormik.js","features/projects/tool/components/ToolPickerModalFilters.js","features/projects/tool/components/ToolPickerModal.js","features/projects/tool/components/ToolPickerModalContainer.js","features/projects/hooks/useFacilityProjectDecks.js","features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorAppBar.js","app/components/form/formik/EditableTableRowFormik.js","app/components/form/AutocompleteTextField.js","app/components/form/formik/TableRowAutocompleteTextFieldFormik/components/AutocompleteTextFieldAdapter.js","app/components/form/formik/TableRowAutocompleteTextFieldFormik/index.js","app/components/form/formik/DatePickerFormik.js","app/components/form/formik/TimeSpanFormik.js","assets/Red.svg","assets/Green.svg","assets/Orange.svg","features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm.js","features/equipment/assets/components/BopTestFormComponent.js","features/equipment/assets/components/BopTestCustomComponent.js","features/equipment/assets/components/equipmentTest/CableTorsionTestFormComponent.js","features/equipment/assets/components/equipmentTest/CableWrapStrandFormComponent.js","features/equipment/assets/components/equipmentTest/CableTortureStrandFormComponent.js","features/equipment/assets/components/equipmentTest/CableContinuityFormComponent.js","features/equipment/assets/components/equipmentTest/CableInsulationFormComponent.js","features/equipment/assets/components/equipmentTest/Sil2FormComponent.js","features/equipment/assets/components/equipmentTest/CableWrapBraidedMonoTestFormComponent.js","app/components/form/formik/QuantityTextFieldFormik.js","features/equipment/assets/components/equipmentTest/CableBreakTestFormComponent.js","features/equipment/assets/components/TestForm.js","features/equipment/assets/components/equipmentMaintenance/utils/constants.js","features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryYupValidator.js","features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryInitialFormValues.js","features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryFormValues.js","features/equipment/equipment.selectors.js","features/equipment/assets/components/equipmentMaintenance/CableCutMaintenanceFormComponent.js","features/equipment/assets/components/equipmentMaintenance/CableServiceMaintenanceFormComponent.js","features/equipment/assets/components/equipmentMaintenance/AutoCompleteDrumItemNumberAdapter.js","features/equipment/assets/components/equipmentMaintenance/AutoCompleteDrumSerialNumberAdapter.js","app/components/form/formik/RadioGroupFieldFormik.jsx","features/equipment/assets/components/equipmentMaintenance/CableSpoolingMaintenanceFormComponent.js","features/equipment/assets/components/MaintenanceForm.js","features/equipment/assets/components/CreateAssetHistoryModalContainer.js","features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorToolsTable.js","features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorDetailsHeader.js","features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorContent.js","features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditor.js","features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorContainer.js","features/wells/WellboreContainer.js","app/components/EventList.js","app/components/NewBasePage.js","features/wells/events/WellEventsContainer.js","features/wells/events/wellEvents.actions.js","features/wells/hooks/useWellbore.js","features/projects/components/WellboreBreadcrumb.js","features/wells/overview/wellOverview.constants.js","app/components/WellboreTrajectory/WellboreTrajectoryViewToggle.js","features/wells/integrity/IntegrityRiskMatrixValueComponent.js","features/wells/integrity/IntegrityMatrixDetailsComponent.js","features/wells/integrity/IntegrityMatrixComplianceComponent.js","features/wells/integrity/IntegrityRiskMatrix.js","features/settings/integrityManagement/helpers/integrityManagement.selectors.js","features/settings/integrityManagement/helpers/integrityManagement.service.js","features/settings/integrityManagement/helpers/integrityManagement.actions.js","features/wells/overview/components/WellIntegrityRiskTrendChart.js","features/settings/integrityManagement/helpers/integrityManagement.collections.js","features/wells/overview/components/WellIntegrityGraphs.js","app/components/HasSystemPermission.js","features/wells/projects/wellProjects.actions.js","features/wells/projects/wellProjects.selectors.js","features/projects/components/WellDashboardProjectTableRow.js","features/projects/components/WellDashboardProjectsTable.js","features/projects/components/WellDashboardProjectByStatus.js","features/projects/project.validation.js","services/objective.service.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalAppBarTextField.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalAppBar.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalActions.js","features/wells/hooks/useWellboreTrajectory.js","app/components/WellboreTrajectory/WellboreTrajectoryContainer.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalMap.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalListItem.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalListGroup.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalContentItem.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalContent.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalForm.js","features/projects/components/CreateProjectModalContainer/CreateProjectModalContainer.js","features/wells/overview/components/CreateProjectFromWellboreModalContainer.js","features/wells/projects/WellDashboardProjectHistory.js","app/components/WellboreTrajectory/WellboreTrajectoryDetails.js","app/components/WellboreTrajectory/WellboreTrajectoryTableView.js","features/wells/overview/components/WellboreTrajectoryPreviewModal.js","features/wells/overview/components/WellboreTrajectoryPreviewModalContainer.js","features/wells/sections/wellboreSection.selectors.js","app/components/WellboreContextualization/DrawCylinder.js","app/components/WellboreContextualization/YAxis.js","app/components/WellboreContextualization/TextSprite.js","app/components/WellboreContextualization/YAxisLabels.js","app/components/WellboreContextualization/Grid.js","app/components/WellboreContextualization/ThreeFiberSceneWrapper.js","app/components/WellboreContextualization/RenderLayer.js","app/components/WellboreContextualization/DrawNipples.js","app/components/WellboreContextualization/WellboreContextTrajectory.js","app/components/WellboreContextualization/WellboreContext3DContainer.js","app/components/WellboreContextualization/WellboreContextTrajectoryContainer.js","app/components/WellboreContextualization/WellboreContextTrajectory3DView.js","features/wells/overview/WellOverviewContainer.js","features/wells/overview/wellOverview.actions.js","services/wellboreFile.service.js","features/wells/wellboreFiles.actions.js","services/projectFile.service.js","features/projects/documents/documents.actions.js","app/hooks/useIsInternalCategoryToDisplay/constants.js","app/hooks/useIsInternalCategoryToDisplay/index.js","app/components/UploadDocumentModal.js","features/wells/components/WellboreFilesTable.js","features/wells/wellboreFiles.selectors.js","features/projects/documents/newDocumentsContainer/components/DocumentsCategoryFilter.js","features/wells/components/WellboreFilesContainer.js","app/components/form/FormSectionHeader.js","app/components/form/FormSection.js","app/components/WellboreDetailsForm/HostileFluidsFields.js","app/components/WellboreDetailsForm/HostileFluidsFormSection.js","app/components/WellboreDetailsForm/WellPropertiesFormSection.js","app/components/WellboreDetailsForm/WellInformationFormSection.js","app/components/FluidsFormSection/FluidTableRow.js","utils/fluids/mappers.utils.js","app/components/FluidsFormSection/FluidsTable.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/GasFormSection/index.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/PowerLawLiquidFormSection.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/NewtonianLiquidFormSection.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/BinghamPlasticLiquidFormSection.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/HerschelBulkleyLiquidFormSection.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/index.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/MultiphaseFormSection/BlackOilMultiphaseFormSection/MultiphaseLiquidFormSection.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/MultiphaseFormSection/BlackOilMultiphaseFormSection/index.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/MultiphaseFormSection/index.js","app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/index.js","app/components/FluidsFormSection/FluidForm/FluidFluidIdentification.js","app/components/FluidsFormSection/FluidForm/index.js","app/components/FluidsFormSection/FluidEditor/EditFluidForm.js","app/components/FluidsFormSection/FluidEditor/CreateFluidForm/index.js","app/components/FluidsFormSection/FluidEditor/FluidEditorHeader.js","app/components/FluidsFormSection/FluidEditor/index.js","app/components/FluidsFormSection/hooks/useIncludeProjectIdToArguments.js","app/components/FluidsFormSection/index.js","app/components/WellboreDetailsForm/WellboreDetailsForm.js","features/wells/details/WellboreDetailsContainer.js","features/wells/sections/components/CreateWellboreSectionRow.js","features/wells/sections/components/CreateWellboreSectionNippleRow.js","features/wells/sections/components/WellboreSectionsTable.js","features/wells/sections/WellboreSectionsContainer.js","features/wells/elements/components/WellboreElementsTable.js","features/wells/elements/wellboreElement.selector.js","features/wells/elements/WellboreElementsContainer.js","features/wells/elements/wellboreElement.actions.js","features/projects/tasks/task/simulation/fluids/components/SimulationFluidsTable.js","features/projects/tasks/task/simulation/fluids/components/SimulationFluidEditor.js","features/projects/tasks/task/simulation/fluids/components/SimulationFluidTableRow.js","features/projects/tasks/task/simulation/fluids/TaskSimulationFluidsContainer.js","features/projects/tasks/task/simulation/components/TaskSimulationCommentContainer.js","features/projects/tasks/task/simulation/components/TaskSimulationOptionsContainer.js","features/projects/tasks/task/simulation/parameters/components/CreateSimulationParameterRow.js","features/projects/tasks/task/simulation/parameters/components/SimulationParametersTable.js","features/projects/tasks/task/simulation/parameters/simulationParameter.selectors.js","features/projects/tasks/task/simulation/parameters/TaskSimulationParametersContainer.js","features/projects/tasks/task/simulation/components/SimulationTemperatureGradient.js","features/projects/tasks/task/simulation/components/TaskSimulationTemperatureContainer.js","features/projects/tasks/task/simulation/components/SimulationWellboreSectionsTable.js","features/projects/hooks/useDefaultProjectWellboreSection.js","features/projects/tasks/task/simulation/components/TaskSimulationWellboreSectionsContainer.js","features/projects/tasks/task/simulation/dynamicToolParameters/components/SimulationDynamicToolParameterFluidSelectionTable.jsx","app/components/form/formik/TableRowRadioGroupFieldFormik.jsx","features/projects/tasks/task/simulation/dynamicToolParameters/components/SimulationDynamicToolParameterJarActivationTable.jsx","features/projects/tasks/task/simulation/dynamicToolParameters/TaskSimulationDynamicToolParametersContainer.jsx","features/projects/tasks/task/simulation/dynamicToolParameters/hooks/useInitializeTaskSimulationDynamicToolParametersContainer.js","app/components/ServiceSelectField.js","features/projects/tasks/components/createTask/CreateTaskForm.js","app/components/PaperListItem.js","features/projects/tasks/components/createTask/TemplateTableRow.js","features/projects/tasks/components/createTask/TemplateTasksTable.js","features/projects/tasks/components/createTask/CreateTaskModalHeader.js","features/projects/tasks/components/createTask/SelectedTemplateTasksTable.js","features/projects/tasks/components/createTask/CreateTaskModalContainer.js","features/projects/tasks/task/activities/TaskActivitiesTableSimple.js","features/projects/tasks/components/TaskTableRowDetailsToolstring.js","features/projects/tasks/components/TaskTableRowDetails.js","features/projects/tasks/components/TaskTableRow.js","features/projects/tasks/components/TaskTable.js","features/projects/tasks/components/TaskChart.js","features/projects/tasks/TasksChartContainer.js","features/projects/tasks/components/TaskListRuntimeHeader.js","features/projects/tasks/TaskTableChart.js","features/projects/tasks/TasksContainer.js","features/projects/tasks/task/TaskRoutesContainer.js","features/projects/tasks/task/TaskContainer.js","features/projects/tasks/task/task.actions.js","services/events.service.js","features/projects/events/events.actions.js","features/projects/events/events.selectors.js","features/projects/events/EventsContainer.js","features/projects/components/TaskBreadcrumb.js","features/projects/components/ProjectBreadcrumb.js","services/facilityFile.service.js","features/facilities/documents/facilityDocuments.actions.js","features/facilities/documents/components/FacilityDocumentsTable.js","features/facilities/documents/facilityDocuments.selectors.js","features/facilities/documents/FacilityDocumentsContainer.js","features/projects/wellbore/details/projectWellboreDetails.selectors.js","features/projects/components/ProjectUser.js","features/projects/wellbore/details/components/ProjectWellboreDetailChangelogItem.js","features/projects/wellbore/details/components/ProjectWellboreDetailChangelog.js","features/projects/wellbore/details/components/ProjectWellboreDetailChangelogModal.js","features/projects/wellbore/details/ProjectWellboreDetailHeader.js","features/projects/wellbore/ProjectWellboreHeader.js","features/projects/wellbore/details/ProjectWellboreDetailStatusHeaderActions.js","features/projects/wellbore/details/ProjectWellboreDetailStatusHeader.js","features/projects/wellbore/ProjectWellboreContainer.js","features/projects/wellbore/survey/ProjectWellboreTrajectory3DView.js","features/projects/wellbore/survey/ProjectWellboreOverview.js","features/projects/wellbore/details/ProjectWellboreDetailFormContainer.js","features/projects/wellbore/details/ProjectWellboreDetailsContainer.js","features/projects/wellbore/sections/ProjectWellboreSectionsContainer.js","app/components/withProjectPermission.js","features/projects/execution/components/SimulationMenuItem.jsx","features/projects/npt/npt.actions.js","features/projects/npt/components/CreateNPTModal.js","features/projects/activities/components/TaskSelectItem.js","features/projects/execution/components/TasksMenu.jsx","features/projects/execution/hooks/useInitializeExecutionRootContainer.js","features/projects/execution/components/CreateUpdatedPlannedButton.jsx","features/projects/activities/components/StartOperation.js","features/projects/hooks/useTaskFailReasons.js","features/projects/activities/components/FailureReasonField.js","features/projects/activities/components/EndOperationModalContainer.js","features/projects/activities/components/EndOperation.js","app/hooks/useDataState.js","app/components/DropdownMenu.js","features/projects/activities/components/DropDownButton.js","features/projects/activities/components/FailureReasonFieldFormik.js","features/projects/activities/components/CompleteTaskModalContainer.js","features/projects/activities/components/CompleteTask.js","features/projects/execution/components/TaskExecution.jsx","features/projects/execution/ExecutionRootContainer.jsx","features/projects/execution/ExecutionIndexContainer.jsx","features/projects/execution/hooks/useInitializeExecutionSimulationContainer.js","features/projects/execution/tabs/simulation/ExecutionSimulationContainer.jsx","features/projects/execution/tabs/simulation/ExecutionSimulationIndexContainer.jsx","features/projects/tasks/task/surfaceEquipment/components/cables/AddedCablesInExecuteTable.js","features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddedSurfaceEquipmentInExecuteTable.js","features/projects/execution/tabs/surfaceequipment/ExecutionSurfaceEquipmentContainer.jsx","features/projects/activities/components/ActivityList/helpers/styles.js","features/projects/tasks/task/activities/ActivityListItem/helpers/validation.js","features/projects/components/WorkItemSortHandle.js","app/components/withDataState.js","features/projects/activities/components/ActivityDetails/components/ButtonStop.js","features/projects/activities/components/ActivityDetails/index.js","features/projects/tasks/task/activities/ActivityListItem/helpers/styles.js","features/projects/tasks/task/activities/ActivityListItem/helpers/utils.js","features/projects/tasks/task/activities/ActivityListItem/helpers/constants.js","features/projects/tasks/task/activities/ActivityListItem/components/ActivityChildComponent.js","features/projects/tasks/task/activities/ActivityListItem/components/formFieldEndTime.js","features/projects/activities/components/ActivityDetails/ActivityDetailsBottomBar.js","features/projects/tasks/task/activities/ActivityListItem/index.js","features/projects/activities/components/ActivityList/index.js","features/projects/activities/components/ActivityList/helpers/utils.js","features/projects/activities/components/ActivityListHeader.js","features/projects/execution/tabs/activities/ExecutionActivitiesContainer.jsx","features/projects/tasks/task/toolstring/GotoBhaEditModal.js","features/projects/tasks/task/toolstring/GotoBhaEditModalContainer.js","features/projects/execution/tabs/toolstring/ExecutionToolStringContainer.jsx","features/operations/OperationTableRow.js","features/operations/OperationsTableView.js","features/operations/components/OperationCardQuantity.js","features/operations/OperationCard.js","features/operations/OperationCardItem.js","features/operations/OperationsCardsView.js","features/operations/OperationsViews.js","features/operations/components/OperationFilter.js","features/operations/operations.selectors.js","features/operations/components/OperationFilterContainer.js","features/projects/dashboard/hooks/useLiveOperationsConnection.js","features/operations/OperationsContainer.js","features/operations/OperationsOverviewContainer.js","features/data-exchange/DataExchangeBasePage.js","app/components/ApplicationHeader/DataExchangeIcon.js","features/data-exchange/DataExchangeContainer.js","features/data-exchange/components/ProjectSelectModalTable.js","features/data-exchange/components/CheetahJobProjectSelectModal.js","features/data-exchange/components/CheetahJobProjectSelectField.js","features/data-exchange/components/CheetahJobsTable.js","features/data-exchange/components/CheetahJobFilter.js","features/data-exchange/components/CheetahJobFilterContainer.js","features/data-exchange/winch/ArchivedWinchContainer.js","features/data-exchange/winch/AvailableWinchContainer.js","features/data-exchange/live-projects/LiveProjectContainer.js","features/data-exchange/warrior/ArchivedWarriorContainer.js","features/data-exchange/warrior/AvailableWarriorContainer.js","services/smLocation.service.js","features/data-exchange/winch/smlocation.actions.js","features/data-exchange/winch/smlocation.selectors.js","features/data-exchange/hooks/useSMLocations.js","features/data-exchange/winch/CreateSMLocationForm.js","features/data-exchange/winch/CreateSMLocationModalContainer.js","features/data-exchange/components/SMLocationStatusIndicator.js","features/data-exchange/components/SMLocationConfigsTable.js","features/data-exchange/winch/ConfigurationWinchContainer.js","features/data-exchange/cheetah/ArchivedCheetahContainer.js","features/data-exchange/cheetah/AvailableCheetahContainer.js","features/data-exchange/hooks/useCheetahJobCurves.js","features/data-exchange/live-projects/components/CheetahJobCurvesTable.js","features/data-exchange/live-projects/CheetahJobCurvesContainer.js","features/data-exchange/live-projects/components/LiveProjectCheetahJobsTable.js","features/data-exchange/live-projects/LiveProjectOverviewContainer.js","features/data-exchange/hooks/useOperations.js","features/data-exchange/live-projects/components/LiveProjectsCheetahJobsTable.js","features/data-exchange/live-projects/components/LiveProjectsTableRow.js","features/data-exchange/live-projects/components/LiveProjectsTable.js","features/data-exchange/live-projects/components/LiveProjectsFilter.js","features/data-exchange/live-projects/components/LiveProjectsFilterContainer.js","features/data-exchange/live-projects/LiveProjectsPaginated/components/LiveProjectsContainer/index.js","features/data-exchange/live-projects/LiveProjectsPaginated/helpers/utils.reducer.js","features/data-exchange/live-projects/LiveProjectsPaginated/helpers/constants.js","features/data-exchange/live-projects/LiveProjectsPaginated/index.js","features/facilities/facilities.selectors.js","services/facility.service.js","features/facilities/facilities.actions.js","features/facilities/facility.mappers.js","features/facilities/components/FacilitiesFilter.js","features/facilities/components/FacilitiesTable.js","features/facilities/FacilitiesContainer.js","features/facilities/projects/facilitiesProjects.actions.js","features/facilities/projects/facilitiesProjects.selectors.js","features/facilities/projects/FacilitiesProjects.js","features/wells/FacilityContainer.js","features/facilities/overview/components/FacilityLazyLoadImage.js","features/facilities/overview/components/FacilityMapLocation.js","features/facilities/overview/components/GoogleMap.js","features/facilities/overview/FacilityOverview.js","features/facilities/details/component/FacilityDetailsTable.js","features/facilities/details/FacilityDetailsContainer.js","features/equipment/cables/components/CablesTable.js","features/equipment/cables/components/CablesFilter.js","features/equipment/cables/CablesContainer.js","app/components/form/TextAreaFieldV2.js","app/components/form/formik/TextAreaFieldFormik.js","features/equipment/m3Components/M3ModalForm/components/AutocompleteTextFieldAdapter.js","app/components/form/formik/YesNoSwitchFormik.js","features/equipment/m3Components/M3ModalForm/index.js","features/equipment/components/AddToolModalHeader.js","features/equipment/m3Components/M3Modal.js","features/equipment/m3Components/M3ModalContainer.js","features/equipment/mwlTools/components/MwlToolsFilter.js","features/equipment/mwlTools/components/MwlToolsTable.js","features/equipment/mwlTools/MwlToolsContainer.js","features/equipment/ewlTools/components/EwlToolsFilter.js","features/equipment/ewlTools/components/EwlToolsTable.js","features/equipment/ewlTools/EwlToolsContainer.js","features/equipment/toolAssemblies/components/ToolAssemblyCreatorTable.js","features/equipment/toolAssemblies/components/ToolAssemlyInformationContainer.js","features/equipment/toolAssemblies/components/ToolAssemblyCreator.js","features/equipment/toolAssemblies/components/ToolAssembliesModalHeader.js","features/equipment/toolAssemblies/components/ToolAssembliesModalFooter.js","features/equipment/toolAssemblies/components/ToolAssembliesModal.js","features/equipment/toolAssemblies/components/ToolAssembliesModalContainer.js","features/equipment/toolAssemblies/components/ToolAssembliesFilter.js","features/equipment/toolAssemblies/components/ToolAssembliesTable.js","features/equipment/toolAssemblies/EditToolAssembliesModalContainer.js","features/equipment/toolAssemblies/ToolAssembliesContainer.js","features/equipment/components/AddToolForm.js","features/equipment/components/AddToolModal.js","features/equipment/components/AddToolModalContainer.js","features/equipment/thirdPartyTools/components/ThirdPartyToolsFilter.js","features/equipment/thirdPartyTools/components/ThirdPartyToolsTable.js","features/equipment/thirdPartyTools/ThirdPartyToolsContainer.js","features/equipment/bhaTemplates/components/BhaTemplatesTable.js","features/equipment/bhaTemplates/components/BhaTemplatesFilter.js","features/equipment/bhaTemplates/editBhaTemplates/EditTemplateContent.js","features/equipment/bhaTemplates/editBhaTemplates/EditTemplateContainer.js","features/equipment/bhaTemplates/addBhaTemplates/BhaTemplatesCreatorTable.js","features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesInformationContainer.js","features/equipment/bhaTemplates/addBhaTemplates/BhaTemplatesCreator.js","features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModalHeader.js","features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModalFooter.js","features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModal.js","features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModalContainer.js","features/equipment/bhaTemplates/BhaTemplatesContainer.js","features/equipment/surfaceEquipment/components/SurfaceEquipmentFilter.js","features/equipment/surfaceEquipment/components/SurfaceEquipmentTable.js","features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentForm.js","features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentModalHeader.js","features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentModal.js","features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentModalContainer.js","features/equipment/surfaceEquipment/SurfaceEquipmentsContainer.js","features/equipment/equipmentTemplates/components/EquipmentTemplatesTable.js","features/equipment/equipmentTemplates/components/EquipmentTemplatesFilter.js","features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesInformationContainer.js","features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModalTable.js","features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModal.js","features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModalContainer.js","features/equipment/equipmentTemplates/addEquipmentTemplates/EquipmentTemplatesCreatorTable.js","features/equipment/equipmentTemplates/addEquipmentTemplates/EquipmentTemplatesCreator.js","features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModalHeader.js","features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModalFooter.js","features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModal.js","features/equipment/equipmentTemplates/editEquipmentTemplates/EditEquipmentTemplatesModalContainer.js","features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModalContainer.js","features/equipment/equipmentTemplates/EquipmentTemplatesContainer.js","features/equipment/EquipmentContainer.js","features/equipment/EquipmentRoutingContainer.js","features/equipment/details/equipmentDetails.actions.js","features/equipment/assets/components/EquipmentAssetsTable.js","features/projects/tool/components/Tool3DObject.js","features/equipment/components/Tool3DObjectModalHeader.js","features/projects/tool/components/Tool3DObjectModalContent.js","features/projects/tool/components/Tool3DObjectModalView.js","features/projects/tool/components/Tool3DObjectContainer.js","features/equipment/components/EquipmentDetailsSubHeader.js","features/equipment/assets/EquipmentAssetsContainer.js","features/equipment/editToolImage/EditToolImageModalHeader.js","features/equipment/editToolImage/ToolImageContainerWithLining.js","features/equipment/editToolImage/EditToolImageModal.js","features/equipment/editToolImage/editToolImage.helpers.js","features/equipment/details/EquipmentDetailsContainer.js","features/equipment/projectHistory/ToolProjectHistoryContainer.js","features/equipment/details/SurfaceEquipmentDetails.js","features/projects/team/components/ProjectMemberAccessCell.js","features/projects/team/components/ProjectFieldCrewTable.js","features/projects/team/components/CreateProjectMembersModal.js","features/projects/team/components/CreateProjectFieldCrewModalContainer.js","features/projects/team/components/FieldCrew.js","features/projects/team/components/TeamProjectRoleAccessCell.js","features/projects/team/components/ProjectMembersTable.js","features/projects/team/components/CreateProjectMembersModalContainer.js","features/projects/team/components/OnshoreTeam.js","features/projects/team/TeamContainer.js","app/components/ProjectTaskServicesField.js","features/projects/details/components/ProjectNumberField.js","features/projects/details/components/ProjectNumberAndSource.js","features/projects/details/components/ProjectDepartmentsField.js","features/projects/details/components/MeasurementPreferencesForm.js","features/projects/details/components/ProjectUnitsModalContainer.js","features/projects/details/components/ProjectDetailsForm.js","features/projects/details/projectRisk/RiskMatrixComponent.js","features/projects/details/ProjectDetailsContainer.js","features/projects/documents/documents.selectors.js","features/projects/documents/newDocumentsContainer/components/DocumentsTableHeaderCell.js","features/projects/documents/newDocumentsContainer/components/DocumentsTable.js","features/projects/documents/newDocumentsContainer/DocumentsContainerNew.js","features/projects/documents/newDocumentsContainer/components/ProceduresTable.js","features/projects/documents/newDocumentsContainer/components/ProceduresAndChecklistsFilter.js","features/projects/documents/newDocumentsContainer/newDocuments.helpers.js","features/projects/documents/checklistsFilter.selectors.js","features/projects/documents/newDocumentsContainer/ProceduresAndChecklistsContainer.js","features/projects/details/projectRisk/ProjectRiskTableRowDetails.js","features/projects/details/projectRisk/RiskTableRowExpandable.js","features/projects/details/projectRisk/ProjectRiskRow.js","features/projects/details/projectRisk/ProjectRiskByTaskTable.js","features/projects/details/projectRisk/ProjectRiskContainer.js","features/projects/details/components/ArchiveAlert.js","features/projects/hooks/useLatestProjectWellboreDetailsWithId.js","features/projects/wellbore/ProjectWellboreNewContainer.js","features/projects/details/components/ProjectDetailsDescriptionContainer.js","features/projects/tasks/task/activities/TaskActivityDrawerHeader.js","features/projects/tasks/task/activities/TaskActivityDrawerContent.js","features/projects/tasks/task/activities/TaskActivityDrawer.js","features/projects/tasks/task/activities/TaskActivitiesTableWithDrawer.js","features/projects/report/ReportTableRow.js","features/projects/report/components/DurationComparison.js","features/projects/report/ReportTable.js","features/projects/report/components/ReportContainerHeader/components/DownloadReportButton.js","features/projects/report/components/ReportContainerHeader/index.js","features/projects/report/report.actions.js","features/projects/npt/npt.selectors.js","features/projects/report/ReportContainer.js","features/projects/npt/components/NPTTableRow.js","features/projects/npt/components/NPTTable.js","features/projects/npt/components/EditNPTModalContainer.js","features/projects/npt/NPTReportContainer.js","services/lessons.service.js","features/projects/lessons/LessonTableRow.js","features/projects/lessons/LessonsTable.js","features/projects/lessons/lessons.selectors.js","features/projects/lessons/components/EditLessonModalContainer.js","features/projects/lessons/lessons.actions.js","features/projects/lessons/components/CreateLessonModalContainer.js","features/projects/lessons/LessonsContainer.js","services/incidents.service.js","features/projects/incidents/IncidentsTableRow.js","features/projects/incidents/IncidentsTable.js","features/projects/incidents/incidents.selectors.js","features/projects/incidents/components/EditIncidentModalContainer.js","features/projects/incidents/incidents.actions.js","features/projects/incidents/components/CreateIncidentModalContainer.js","features/projects/incidents/IncidentsContainer.js","services/assetTest.service.js","features/projects/assets/assetTest.actions.js","features/projects/assets/assetTest.selectors.js","features/equipment/assets/components/drawer/AssetHistoryDrawerHeader.js","features/equipment/assets/components/AssetHistoryTableRowDetails.js","features/equipment/assets/components/drawer/drawer-events/TestDetailComponent.js","features/equipment/assets/components/drawer/drawer-events/BopTestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/Sil2TestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/TaskDetailDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/MaintenanceDetailComponent.js","features/equipment/assets/components/drawer/drawer-events/CableTorsionDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableWrapTestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableTotrtureTestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableContinuityTestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableInsulationTestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableWrapBraidedMonoTestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableBreakTestDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableCutMaintenanceDrawerComponent.js","features/equipment/assets/components/drawer/drawer-events/CableServiceMaintenanceDrawerComponent.js","features/equipment/assets/components/drawer/utils/constants.js","features/equipment/assets/components/drawer/drawer-events/CableSpoolingMaintenanceDrawerComponent.js","features/equipment/assets/components/drawer/AssetHistoryDrawerContent.js","features/equipment/assets/components/drawer/AssetHistoryDrawer.js","features/equipment/assets/components/AssetHistoryTable.js","features/projects/assets/AssetTestContainer.js","features/projects/components/ProjectReportLessonContainer.js","features/projects/tasks/task/surfaceEquipment/components/cables/AddedCablesTable.js","features/projects/tasks/task/surfaceEquipment/components/cables/AddCablesModalTable.js","features/projects/tasks/task/surfaceEquipment/components/cables/AddCablesModal.js","features/projects/tasks/task/surfaceEquipment/components/cables/AddCablesModalContainer.js","features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddedSurfaceEquipmentInPlanningTable.js","features/projects/tasks/task/surfaceEquipment/TaskSurfaceEquipmentContainer.js","features/testing/wellLogBasic/helpers/SimpleDataSource.js","features/testing/wellLogBasic/WellLogAndSchematicComponent.js","features/testing/TestingContainer.js","features/equipment/assets/components/drawer/cable-drawer/CableTestDetailsDrawerHeader.js","features/equipment/assets/components/drawer/cable-drawer/CableTestDetailsDrawerContent.js","features/equipment/assets/components/drawer/cable-drawer/CableTestDetailsDrawer.js","features/equipment/assets/AssetHistoryContainer.js","features/equipment/details/CableDetails.js","features/projects/tasks/task/dataAcquisition/hooks/useScrollable.js","features/projects/tasks/task/dataAcquisition/components/WellTabContainer.js","features/projects/tasks/task/dataAcquisition/components/ToolsTabContainer.js","features/projects/tasks/task/dataAcquisition/components/CableTabContainer/Components/CommentsRichText.js","features/projects/tasks/task/dataAcquisition/components/CableTabContainer/index.js","features/projects/tasks/task/dataAcquisition/dataAcquisition.actions.js","features/projects/tasks/task/dataAcquisition/dataAcquisition.selectors.js","features/projects/tasks/task/dataAcquisition/dataAcquisition.validators.js","features/projects/tasks/task/dataAcquisition/components/Explosives.js","features/projects/tasks/task/dataAcquisition/components/ConsumablesTabContainer.js","features/projects/tasks/task/dataAcquisition/helpers/utils.js","features/projects/tasks/task/dataAcquisition/DataAcquisitionContainer.js","features/projects/tasks/task/dataAcquisition/DataAcquisitionDataFetchWrapper.js","features/projects/mobilisation/projectMobilisation.selectors.js","features/projects/mobilisation/MobilisationTasksMenuItem.js","features/projects/mobilisation/MobilisationTasksMenu.js","features/projects/mobilisation/StringTestEventContainer.js","features/projects/mobilisation/StringTestEventModalContainer.js","features/projects/mobilisation/MobilisationContainer.js","services/field.service.js","features/fields/field.action.js","features/fields/field.selectors.js","features/fields/overview/FieldInfoContent.js","features/fields/overview/WellDetailsTable.js","features/fields/overview/FieldOverviewContainer.js","features/fields/FieldRoutingContainer.js","features/fields/fieldDocuments.actions.js","features/fields/documents/FieldDocumentsTable.js","features/fields/documents/FieldDocumentsContainer.js","features/settings/integrityManagement/IntegrityManagementContainer.js","features/wells/integrity/history/RiskScoreCard.js","features/wells/integrity/history/RiskMatrixHistoryDrawerContent.js","features/wells/integrity/history/RiskMatrixHistoryDrawerHeader.js","features/wells/integrity/history/RiskMatrixHistoryDrawer.js","features/wells/integrity/WellboreIntegrityContainer.js","features/settings/integrityManagement/integrities/AddIntegrityHeader.js","features/settings/integrityManagement/integrities/IntegritiesTableWeight.js","features/settings/integrityManagement/integrities/IntegrityWeightContainer.js","features/settings/integrityManagement/integrities/IntegritiesTableLocation.js","features/settings/integrityManagement/integrities/IntegrityLocationContainer.js","features/settings/integrityManagement/integrities/MultiStepForm.js","features/settings/integrityManagement/rules/BooleanRuleDataFormComponent.js","features/settings/integrityManagement/rules/NumericRuleDataFormComponent.js","features/settings/integrityManagement/rules/GeographyRuleDataFormComponent.js","features/settings/integrityManagement/rules/TimeRuleDataFormComponent.js","features/settings/integrityManagement/rules/PicklistOptionsFormComponent.js","features/settings/integrityManagement/rules/SelectPicklistOptionComponent.js","features/settings/integrityManagement/rules/DefaultRuleValueWrapper.js","features/settings/integrityManagement/integrities/IntegrityRuleInformationContainer.js","features/settings/integrityManagement/integrities/IntegrityCategoryInformationContainer.js","features/settings/integrityManagement/helpers/integrityManagement.validations.js","features/settings/integrityManagement/integrities/AddIntegrityContent.js","features/settings/integrityManagement/integrities/AddIntegrityContainer.js","features/settings/integrityManagement/integrities/IntegrityActions.js","features/settings/integrityManagement/integrities/IntegritiesTable.js","features/settings/integrityManagement/integrities/RiskPrincipleContainer.js","features/wells/components/BooleanRuleDataFormComponent.js","features/wells/components/GeographyRuleDataFormComponent.js","features/wells/components/NumericRuleDataFormComponent.js","features/wells/components/SelectPicklistOptionComponent.js","features/wells/components/TimeRuleDataFormComponent.js","features/wells/integrity/WellTableValueComponent.js","features/wells/integrity/WellIntegrityTable.js","features/wells/integrity/WellLikelihoodOfFailureContainer.js","features/wells/integrity/WellConsequenceContainer.js","features/wells/integrity/attachments/IntegrityAttachmentsTable.js","features/wells/integrity/attachments/upload/UploadIntegrityAttachmentDrawerHeader.js","app/components/form/DatePickerField.js","features/wells/integrity/attachments/upload/UploadIntegrityAttachmentDrawerContent.js","features/wells/integrity/attachments/upload/UploadIntegrityAttachmentDrawer.js","features/wells/integrity/attachments/IntegrityAttachmentPreview.js","features/wells/integrity/attachments/filter/IntegrityFilterAttachmentDrawerHeader.js","features/wells/integrity/attachments/filter/IntegrityFilterAttachmentDrawerContent.js","features/wells/integrity/attachments/filter/IntegrityFilterAttachmentDrawer.js","features/wells/integrity/IntegrityAttachmentsContainer.js","features/testing/TestingContainerWellLogAndCompositeSchematic.js","features/testing/TestingContainer3DComponent.js","features/testing/wellLogBasic/SchematicDrawerHeader.js","features/testing/wellLogBasic/SchematicDrawer.js","features/testing/wellLogBasic/WellBoreSchematicLatest.js","features/wells/schematics/components/SchematicTable.js","features/wells/schematics/components/SchematicDrawerHeader.js","features/wells/schematics/components/SchematicDrawer.js","features/wells/schematics/components/DropdownOption.js","features/wells/schematics/components/SchematicFormFeilds.js","features/wells/schematics/components/SchematicForm.js","features/wells/schematics/components/SchematicModal.js","features/wells/schematics/components/SchematicCommentForm.js","features/wells/schematics/components/SchematicVersionForm.js","features/wells/schematics/components/WellBoreSchematic.js","features/wells/schematics/index.js","features/wells/integrity/integrityDetails/IntegrityDetailsContainer.js","features/wells/integrity/integrityDetails/history/IntegrityDetailsHistoryTable.js","features/wells/integrity/integrityDetails/history/IntegrityDetailsHistoryContainer.js","features/wells/corrosion/components/AddLogFilesDrawerTemplateSection.js","features/wells/corrosion/components/AddLogFilesDrawerUploadSection.js","features/wells/corrosion/components/AddLogFileDrawer.js","features/wells/corrosion/CorrosionContainer.js","features/wells/corrosion/components/LogFilesTable.js","features/wells/corrosion/LogFilesContainer.js","features/wells/corrosion/helpers/corrosionlogs.constants.js","features/wells/corrosion/components/CompareLogsFilters.js","features/wells/corrosion/CompareLogsContainer.js","features/wells/corrosion/CompareLogsBarChartContainer.js","features/wells/corrosion/components/ComparisonFileTableComponent.js","features/wells/corrosion/components/ComparisionFileDetailComponent.js","features/wells/corrosion/CompareLogsTableContainer.js","app/routes.js","features/projects/components/ProjectSteps.js","features/projects/components/ProjectContainer.js","app/components/ApplicationHeader/MenuIcon.js","app/components/UserPreferencesModalContainer.js","app/components/ApplicationHeader/UserMenuContainer.js","features/wells/WellboreHeader.js","app/hooks/useProjectHeader.js","utils/tasks.util.js","features/projects/tasks/task/TaskHeader.js","app/components/ApplicationHeader/ApplicationHeaderBackButton.js","features/operations/OperationsHeader.js","features/projects/components/ProjectHeader.js","features/facilities/components/FacilityHeader.js","features/equipment/details/EquipmentDetailsHeader.js","app/components/ApplicationHeader/HomeApplicationHeader.js","app/components/ApplicationHeader/DefaultApplicationHeader.js","app/components/ApplicationHeader/ApplicationHeaderContainer.js","features/changelog/index.js","app/components/ApplicationHeader/Mobile/MobileApplicationHeaderBase.js","app/components/Mobile/MobileProjectsListContainer.js","app/components/Mobile/MobileProjectListDrawer.js","app/components/ApplicationHeader/Mobile/MobileUserMenuDrawer.js","app/components/ApplicationHeader/Mobile/MobileUserMenuContainer.js","app/components/ApplicationHeader/Mobile/MobileProjectHeader.js","app/components/ApplicationHeader/Mobile/MobileProjectsListHeader.js","app/components/ApplicationHeader/Mobile/MobilePrivacyPolicyHeader.js","app/components/ApplicationHeader/Mobile/DefaultMobileAppHeader.js","app/components/ApplicationHeader/Mobile/MobileApplicationHeader.js","features/mobile/projects/project/ProjectStatusOverviewContainer.js","app/components/Mobile/MobileProjectOverviewContainer.js","features/mobile/projects/project/ProjectStatusHeader.js","features/mobile/projects/project/ProjectStatusOperationValues.js","features/mobile/projects/project/ProjectStatusDurationValues.js","features/mobile/projects/project/ProjectStatusContainer.js","features/mobile/projects/execute/ExecuteTasksList.js","app/components/Mobile/MobileProjectExecuteContainer.js","app/components/Mobile/MobileBackButton.js","features/mobile/projects/execute/taskActivities/ExecutionDetailsHeader.js","features/mobile/projects/execute/taskActivities/MobileExecutionActivities.js","features/mobile/projects/execute/taskToolstring/ToolstringSerialNumberStatus.js","features/mobile/projects/execute/taskToolstring/MobileToolstringDrawerContent.js","features/mobile/projects/execute/taskToolstring/MobileToolstringListContiner.js","features/mobile/projects/execute/taskToolstring/MobileToolstringPreview.js","features/mobile/projects/execute/taskToolstring/MobileToolImageDrawer.js","features/mobile/projects/execute/taskToolstring/MobileToolstringActionsContainer.js","app/components/Mobile/Dialog/MobileDialogBase.js","features/projects/assets/AssetTestTable.js","features/mobile/projects/execute/taskToolstring/MobileStringVerificationDrawerContainer.js","features/mobile/projects/execute/taskToolstring/MobileStringVerificationList.js","features/mobile/projects/execute/taskToolstring/MobileExecutionBHATabContainer.js","features/mobile/projects/execute/taskActivities/MobileExecutionDetails.js","app/components/Mobile/MobileTaskDetailsContainer.js","app/mobileRoutes.js","app/components/Mobile/MobileNavigationAppBar.js","features/privacypolicy/PrivacyPolicy.js","app/AppContainer.js","app/components/BreadcrumbHeader.js","app/components/ApplicationHeader/ApplicationSidebarTopContent.js","app/components/ApplicationHeader/ApplicationSidebar.js","app/ApplicationSidebarContainer.js","app/AppContainerV2.js","app/components/AppFailure.js","app/components/ApplicationHeader/ApplicationEnvironmentTopbar.js","app/ApplicationRoot.js","utils/highcharts.util.js","infrastructure/LocationProvider.js","index.js"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","EMPTY_STRING","EMPTY_MAP","Map","EMPTY_LIST","List","EMPTY_SET","Set","MAX_UPLOAD_FILE_SIZE","EMPTY_QUANTITY","unit","value","hasValue","EMPTY_QUANTITY_WITH_UNIT","ENVIRONMENTS","ENVIRONMENTS_NAMES","APP_ACTIONS","LOGIN","LOGOUT","SET_THEME","APP_LOAD","ASYNC_END","MODAL_NEXT","REDIRECT_TO","ASYNC_START","TOGGLE_MODAL","EVENTS_LOADED","MODAL_PREVIOUS","CLEAR_REDIRECT","CREATE_PROJECT","PROJECT_LOADED","GET_CURRENT_USER","INITIATE_FETCH_CHANGE_LOG","INITIATE_FETCH_PRIVACY_POLICY","STORE_CHANGE_LOG","NEW_APP_VERSION_NOTIFICATION","SHOW_CHANGE_LOG_SEPARATE_TAB","GET_MAIN_VENDOR_USERS","GET_SYSTEM_ROLES","GET_ALL_SERVICES","TOGGLE_USER_MENU","ADD_NOTIFICATION","SET_HEADER_VALUES","EVENTS_PAGE_LOADED","GET_ALL_DEPARTMENTS","PROJECT_SET_SUBPAGE","EVENTS_MARK_AS_SEEN","REMOVE_NOTIFICATION","SET_APPLICATION_FAILURE","PROJECT_MARK_AS_SEEN","EVENTS_PAGE_UNLOADED","DELETE_PROJECT_MEMBER","UPDATE_PROJECT_MEMBER","SELECT_PROJECT_MEMBER","DESELECT_PROJECT_MEMBER","PROJECT_MEMBER_PAGE_LOADED","PROJECT_TEAM_PAGE_UNLOADED","CONFIRMATION_DIALOG_CONFIRM","CONFIRMATION_DIALOG_PENDING","PROJECT_DETAILS_PAGE_LOADED","TOGGLE_PROJECT_MEMBER_DIALOG","PROJECT_DETAILS_PAGE_UNLOADED","CLEAR_SELECTED_PROJECT_MEMBERS","UPDATE_USER_MEASUREMENT_PREFERENCES","GET_ALL_FILE_CATEGORIES","GET_USER_PREFERENCES","GET_APPLICATION_FEATURES","GET_ALL_ORGANIZATIONS","SET_CURRENT_CLIENT_ORGANIZATION","SAVE_REDIRECT_PATH","UPLOAD_DOCUMENT_FORM","MEASUREMENT_PREFERENCES_FORM","ID","USER_PREFERENCES_FORM","MODAL","KEYS","TAB","ENTER","SHIFT","ESCAPE","BACKSPACE","SPACE","ARROW_RIGHT","ARROW_LEFT","ARROW_DOWN","ARROW_UP","IN_DEV","HTTP_STATUS","PROJECT_STATUS","PLAN","EXECUTE","REPORT","ProjectWellboreDetailStatus","WORK_ITEM_STATUS","NOT_SET","PLANNED","STARTED","PAUSED","COMPLETED","SKIPPED","FAILED","Format","date","date_dayfirst","time","time_long","datetime_local","input","duration","duration_display","duration_short","human","DIRECTION","SLIDE_DIRECTIONS","NOTIFICATION_VARIANTS","SUCCESS","ERROR","INFO","METERS_PER_FEET","TIME_UNITS","UNITS","METER","FEET","POUND","POUND_WEIGHT","KILO_POUND","POUND_FORCE","NEWTON","KILO_POUND_FORCE","KILO_GRAM_FORCE","KILO","BARG","PSIG","M_MIN","M_S","FT_MIN","DEG","CELCIUS","FAHRENHEIT","INCHES","MILLIMETER","M_3_MIN","GAL_MIN","FT_S","M_3","GALLON_US","M_3_DAY","FT_3_DAY","BARRELS_DAY","KILOGRAM_CUBIC_METER","STANDARD_CUBIC_METER_PER_DAY","THOUSAND_STANDARD_CUBIC_FEET_PER_DAY","OIL_BARRELS_PER_DAY","KILOGRAM_KILOMETER","LBS_1000FEET","POUND_PER_US_GALLON","METER_PER_KILOMETER_PER_5000NEWTON","FEET_PER_1000FEET_PER_1000LBS","CONVERT_ALIASES","CUSTOM_UNIT_SYSTEM","USE_PROJECT_DEFAULT_UNIT_SYSTEM","CONVERT_MEASURES","LENGTH","PRESSURE","SPEED","TEMPERATURE","MASS","VOLUME_FLOW_RATE","VOLUME","DEPTH","FORCE","BIG_FORCE","TOOL_DIAMETER","TUBULAR_DIAMETER","GAS_FLOW_RATE","LIQUID_RATE","GAS_DENSITY","LIQUID_DENSITY","WEIGHT_IN_AIR","STRETCH_COEFFICIENT","CONVERT_MEASURES_NAMES","CONVERT_SYSTEMS","METRIC","IMPERIAL","UNITS_BY_CATEGORY","CUSTOM_UNITS","measure","system","THEMES","BEARER_TOKEN_COOKIE_ID","NORWAY_MAP_CENTER_COORDS","EUROPE_MAP_CENTER_COORDS","PUBLIC_ASSETS_URL","process","APP_NAME","APP_VERSION","APP_VERSION_STORAGE_KEY","OrganizationType","ProjectPermission","SystemPermission","ProjectRoles","FormikFormStatus","UnitSystem","CheetahJobStatus","SmLocationStatus","PagedQueryParams","FacilityType","FIXED","MOBILE","M3SearchType","RiskConsequenceEnum","Major","name","Serious","Moderate","Minor","Negligible","RiskProbabilityEnum","VeryLikely","Likely","Possible","Unlikely","VeryUnlikely","RiskStateEnum","Open","Mitigated","Accepted","RiskMatrix","FrictionReducerTypeEnum","RiskLevels","Red","Yellow","Green","RiskPriorityMatrix","WellControlDrillResult","EMPTY_QUANTITY_LENGTH","ACTIVITY_WAIT_CODES","TOOL_ACTIONS","UPDATE_TOOLS_FROM_M3_ITEMS","UPLOAD_TOOL_IMAGE","UPDATE_TOOL_IMAGE","DELETE_TOOL_IMAGE","ASSOCIATE_IMAGE_TO_TOOL","DISASSOCIATE_IMAGE_FROM_TOOL","REQUEST_TOOL_IMAGES","RECEIVE_TOOL_IMAGES","REQUEST_TOOLS_SEARCH","RECEIVE_TOOLS_SEARCH","REQUEST_TOOL_GROUPS","RECEIVE_TOOL_GROUPS","REQUEST_TOOL_SUPPLIERS","RECEIVE_TOOL_SUPPLIERS","REQUEST_TOOL_GROUPS_BY_CATEGORY","TOOL_PICKER_MODAL_ON_LOAD","REQUEST_TOOL_CONNECTORS","RECEIVE_TOOL_CONNECTORS","REQUEST_TOOL_TOP_CONNECTORS","RECEIVE_TOOL_TOP_CONNECTORS","REQUEST_TOOL_BOTTOM_CONNECTORS","RECEIVE_TOOL_BOTTOM_CONNECTORS","REQUEST_REFRESH_ALL_TOOLS_WITH_M3","REQUEST_CABLES","REQUEST_CABLES_BY_PROJECT","RECEIVE_CABLES","RECEIVE_TOOL_PROJECT_HISTORY","IMPORT_TOOLS_FROM_FILE","IMPORT_TOOLS_MODAL_ID","CableType","ExifOrientation","ToolCategoryType","ToolType","TOOL","ASSEMBLY","ATTACHMENT","ASSEMBLY_TOOL","ThirdPartyLabel","MissingSerialNoModal","defaultClientConfig","environmentName","Environments","clientConfig","window","apiRoot","REACT_APP_API_ROOT","invokeIfFunction","fn","_len","arguments","length","args","Array","_key","isFunction","getInitials","names","undefined","split","_","first","last","reduce","r","upperCase","charAt","getAvatar","avatar","concat","scrollSmoothlyIntoViewIfNeeded","node","scrollIntoView","behavior","scrollMode","durationFromStartAndEndTime","startTime","endTime","moment","isMoment","diff","renderContent","Component","props","_jsx","saveFile","blob","filename","FileSaver","saveAs","getWorkItemStatusDisplayName","status","toCookieValueFromUserId","userId","deleteMsalFromLocalStorage","cookies","erase","localStorage","filter","key","startsWith","forEach","removeItem","createSelector","createSelectorCreator","defaultMemoize","isEqual","makeActionCreator","action","_len2","argNames","_key2","payload","payloadFn","_len3","_key3","dispatch","payloadResult","sum","_curr","index","convertToSet","items","isSet","isArray","of","getQuantityUnitFromItems","PropTypes","shape","number","string","isRequired","bool","quantitySelector","size","quantity","toSeq","isValidJSON","str","JSON","parse","getRichEditorText","text","showText","textObject","blocks","block","join","RichText","item","get","EditorState","createWithContent","convertFromRaw","createEmpty","validateTimeString","timeString","Number","isNaN","sortRisks","risks","toJS","fromJS","risksArray","sort","a","b","riskA","consequence","probability","riskB","priorityA","priorityB","formatDateTimeFromSeconds","dateStr","timeInSeconds","dateMoment","utc","startOf","add","format","parseDateStringToMoment","extractTimeFromDate","extractTimeIn24HourFormatUTC","editorStateToString","editorState","rawContentState","convertToRaw","getCurrentContent","stringify","stringToEditorState","contentState","EditorContentToStringWithTry","editorContent","console","error","formatDurationInSeconds","durationInSeconds","hours","Math","floor","minutes","formattedHours","toString","padStart","formattedMinutes","acquireToken","msalInstance","saveIncomingPathCb","request","scopes","config","scope","acquireTokenSilent","catch","isMobile","acquireTokenRedirect","acquireTokenPopup","acquireTokenThroughLogin","TASKS_CREATE_TASK_MODE","NEW","FROM_TEMPLATE","TaskType","SUB_SURFACE","SURFACE","TASK_VIEWS","LIST","CHART","MOBILE_TASK_VIEWS","ACTIVITIES","BHA","TASKS_CREATE_TASK_MODAL_ID","TASK_ACTIONS","EDIT_TASK","COPY_TASK","SORT_TASKS","CREATE_TASK","UPDATE_TASK","DELETE_TASK","RECEIVE_TASK","GET_ALL_TASKS","GET_ALL_ACTIVITIES","UPDATE_TASK_DETAILS","CONFIRM_DELETE_TASK","UPDATE_TASK_SERVICES","EDIT_TASK_MODAL_LOADED","ADD_TASKS_FROM_TEMPLATE","PROJECT_UPDATE_PROGRESS","EDIT_TASK_MODAL_UNLOADED","CREATE_TASK_MODAL_LOADED","PROJECT_TASKS_PAGE_LOADED","PROJECT_TASKS_PAGE_UNLOADED","INITIATE_GET_TASK_FLUIDS","GET_TASK_FLUIDS","INITIATE_DELETE_TASK_FLUID","DELETE_TASK_FLUID","INITIATE_UPDATE_TASK_FLUID","UPDATE_TASK_FLUID","INITIATE_CREATE_TASK_FLUID","CREATE_TASK_FLUID","TASK_STATE","TASKS","TASKS_TEMPLATE","TEMPLATE","TEMPLATE_DATA","ACTIVE","ACTIVE_DATA","ACTIVE_DIRECTION","DATA","CREATE_TASK_MODE","ACTIVE_TASKS","FILES","CABLES","SURFACE_EQUIPMENT","TASK_RISK","TASK_FORMS","NEW_TASK","TASK_TYPE","FORM_ID","TASK_TITLE","TASK_DESCRIPTION","TASK_DEPARTMENTS","TASK_SERVICES","TASK_TARGET_DEPTH","TASK_OBJECTIVE","TASK_PLANNED_DURATION","HOURS","MINUTES","TASK_CUSTOM_TITLE","TASK_CONTINGENCY_FOR_TASK","TASK_CONTINGENCIES","TASK_COMMENTS","TASK_FILES","TASK_SURFACE_EQUIPMENT_ACTIONS","SAVE_CABLE","DELETE_CABLE","CABLES_LOADED","PAGE_LOADED","SAVE_CABLE_SERIAL_NUMBER","SURFACE_EQUIPMENT_LOADED","SAVE_SURFACE_EQUIPMENT_TEMPLATE","SAVE_SURFACE_EQUIPMENT","SAVE_SURFACE_SERIAL_NUMBER","UPDATE_TASK_SURFACE_EQUIPMENT_SERIALS_FROM_TO","UPDATE_TASK_CABLE_SERIALS_FROM_TO","ACTIVITIES_ACTIONS","EDIT_TIMER","CREATE_TIMER","END_OPERATION","INITATE_COMPLETE_TASK","COMPLETE_TASK","INITIATE_PAUSE_ACTIVITY","PAUSE_ACTIVITY","INITIATE_SORT_ACTIVITIES","INITIATE_SORT_ACTIVITIES_NO_NOTIFICATION","BACKEND_SORT_ACTIVITIES","BACKEND_SORT_ACTIVITIES_NO_NOTIFICATION","SORT_ACTIVITIES","UPDATE_ACTIVITY","INITIATE_UPDATE_ACTIVITY","INITIATE_UPDATE_ACTIVITY_CONFIRMATION","INITIATE_UPDATE_ACTIVITY_TIMES","INITIATE_UPDATE_ACTIVITY_FORM_WITH_NOTIFICATION","INITIATE_UPDATE_ACTIVITY_FORM_WITHOUT_NOTIFICATION","START_OPERATION","START_OPERATION_INITIATE","CONFIRM_ACTIVITY_GO_BACK","CONFIRMED_ACTIVITY_GO_BACK","ACTIVITY_GO_BACK","INITIATE_COMPLETE_ACTIVITY","COMPLETE_ACTIVITY","GET_PROJECT_STATUS","QUICK_ADD_ACTIVITY","STOP_PROJECT_TIMER","GET_PROJECT_TIMERS","START_PROJECT_TIMER","CANCEL_PROJECT_TIMER","ADD_ACTIVITY_DEFAULT","ACTIVITY_LIST_LOADED","ACTIVITY_LIST_UNLOADED","COMPLETE_TASK_DEFAULT","COMPLETE_TASK_WITH_CONTINGENCY","ACTIVITIES_SELECT_TASK","GET_ALL_ACTIVITY_TYPES","ACTIVITIES_INITIALIZED","CONFIRM_DELETE_ACTIVITY","DELETE_ACTIVITY_SUCCESS_DIALOG","INITIATE_CONFIRM_DELETE_ACTIVITY_WITH_NOTIFICATION","INITIATE_CONFIRM_DELETE_ACTIVITY_WITHOUT_NOTIFICATION","COMPLETE_AND_REPEAT_TASK","GET_PROJECT_TIMERS_ACTIVE","GET_PROJECT_TIMERS_STOPPED","GET_WAITING_ACTIVITY_TYPES","COMPLETE_ACTIVITY_ABORT_TASK","INITIATE_CREATE_ACTIVITY_WITH_NOTIFICATION","INITIATE_CREATE_ACTIVITY_WITHOUT_NOTIFICATION","PROJECT_ACTIVITIES_ADD_ACTIVITY","COMPLETE_TASK_AND_END_OPERATION","ACTIVITIES_UNINITIALIZED","GET_POINT_IN_TIME_ACTIVITY_TYPES","CREATE_NEW_POINT_IN_TIME_ACTIVITY","INITIATE_CREATE_NEW_POINT_IN_TIME_ACTIVITY","PROJECT_ACTIVITIES_DELETE_ACTIVITY","PROJECT_ACTIVITIES_DUPLICATE_ACTIVITY","GET_PROJECT_ACTIVITIES","GET_TASK_ACTIVITIES","GET_ALL_PROJECT_ACTIVITIES","SEND_GO_BACK_ACTIVITY_NOTIFICATION","SEND_COMPLETED_ACTIVITY_NOTIFICATION","SEND_ACTIVITY_ADDED_NOTIFICATION","SEND_ACTIVITY_UPDATED_NOTIFICATION","SEND_ACTIVITY_DELETED_NOTIFICATION","SEND_ACTIVITY_PAUSED_NOTIFICATION","SENT_SUBACTIVITY_ADDED_NOTIFICATION","SEND_ACTIVITY_SEQUENCE_UPDATED_NOTIFICATION","ESTABLISHING_REAL_TIME_CONNECTION_FAILED","REFRESH_PROJECT_STATUS","UPDATE_ACTIVITY_SET_OR_RETRIEVE_ITEMS","DELETE_ACTIVITY_SET_OR_RETRIEVE_ITEMS","DOWNLOAD_ACTIVITY_PDF","GET_PROJECT_STATUS_MOBILE","EDIT_ACTIVITY_MODAL_ID","CREATE_ACTIVITY_MODAL_ID","COMPLETE_TASK_MODAL_ID","END_OPERATION_MODAL_ID","CREATE_ACTIVITY_MODE","NORMAL","QUICK","CREATE_ACTIVITY_FORM","EDIT_ACTIVITY_FORM","ACTIVITY_ID","TYPE_NAME","CODE","TITLE","DESCRIPTION","COMMENTS","PREVIOUS_ACTIVITY_START_TIME","START_TIME","END_TIME","EDITED_DURATION","STATUS","IS_POINT_IN_TIME","WELL_CONTROL_DRILL_TYPE_ID","ESTIMATED_TIME","PARALLEL_ACTIVITY","COMPLETE_TASK_FORM","END_OPERATION_FORM","STATE","COMPLETE_TASK_MODE","DEFAULT","REPEAT","CONTINUE_WITH_CONTINGENCY","ACTIVITY_BUTTONS","WAIT","STOP","EVENT","ADD_NEW","UNDO","TimerType","TRAC","TASK_URLS","TaskFailReason","formatDate","formatDuration","isDuration","trim","formatDurationDiff","durationA","durationB","every","clone","subtract","abs","formatUnit","formatFractionString","numerator","denominator","remainder","wholeNumber","formatValue","accuracy","float","parseFloat","multiplier","roundedValue","round","EPSILON","formatSource","source","children","formatEstimatedDate","estimatedStart","estimatedStartArray","isList","estimated","curr","converted","parseInt","push","parseEstimatedDate","year","month","day","formatFraction","originalValue","sign","maxError","n","lower_n","lower_d","upper_n","upper_d","middle_n","middle_d","formatQuantity","emptyValue","timerTypeToDisplayName","timerType","NPT","formatEstimatedTime","estimatedTime","parsedHours","days","remainingHours","convertDurationToHoursMinutes","durationString","parts","includes","totalHours","activityFromDTO","_ref2","title","previousActivityStartTime","nextActivityStartTime","waitCodesDuration","nextStandardActivityStartTime","activityId","activityTypeId","parallelActivity","description","comments","activity","type","initialActivity","sequence","depth","timerFromDto","_ref6","endTask","startTask","endActivity","startActivity","projectTimerId","timer","typeId","tasksMappers","Task","from","initial","activitiesMappers","Activity","to","_ref","expectedTimeMet","failiureBarrier","failureActivateBarrier","failureActivateSecondBarrier","wellControlDrillSituations","participants","plannedStartTime","wellControlDrillResult","resumeActivityId","parentActivityId","isObject","toISOString","currentClientDate","Date","ActivityType","_ref3","displayText","isWait","CompleteTask","completeTaskToDto","_ref4","continueWithContingencyTaskId","taskId","failureReason","currentTaskId","failReason","CompleteActivity","completeActivityToDto","currentActivityId","CreateActivity","createActivityToDto","EndOperation","_ref5","Timer","_ref7","comment","projectId","Timers","timers","mapped","groupBy","UpdateActivitySetOrRetrieveItems","_ref8","toolId","toolStatus","setOrRetrieveToolstringItemId","setOrRetrieveToolstringItemStatus","secondsToHoursAndMinutes","seconds","asHours","toTaskFileFromDTO","fileId","fullName","initialTask","departments","services","targetDepth","planned","actual","progress","runNumber","objective","taskRisk","files","durationPlanned","percentComplete","taskType","contingencyForTaskId","contingencyForTaskRunNumber","activities","task","mappers","Service","Department","toolstring","toolString","asSeconds","File","Template","initialTemplateTask","serviceId","templateTaskId","templateActivities","TaskCable","TaskSurfaceEquipment","individualSerialNumber","surfaceEquipment","serialNo","TaskRisk","riskId","mitigation","state","risk","cheetahJobFromDto","cheetahJob","operationsMappers","Operation","cheetahJobs","project","operation","Project","CheetahJob","CheetahJobSource","maxTimeSpan","DASHBOARDS_ACTIONS","RECEIVE_DASHBOARDS","REQUEST_DASHBOARDS","TOGGLE_PROJECT_DASHBOARD","UPDATE_PROJECT_DASHBOARD","TOGGLE_PROJECT_DASHBOARDS","RECEIVE_PROJECT_DASHBOARD","REQUEST_PROJECT_DASHBOARD","RECEIVE_PROJECT_DASHBOARDS","REQUEST_PROJECT_DASHBOARDS","RECEIVE_PROJECT_DASHBOARD_CURVES","DashboardName","ProjectDashboardFormFields","ACTIONS","DELETE_SIMULATION","DELETE_SIMULATION_RESULTS","DELETE_SIMULATION_FLUIDS","REQUEST_SIMULATION","RECEIVE_SIMULATION","REQUEST_RUN_SIMULATION","SUBMIT_CREATE_SIMULATION","LOAD_SIMULATION","REQUEST_UPDATE_SIMULATION","REQUEST_DELETE_SIMULATION","REQUEST_SIMULATION_RESULTS","RECEIVE_SIMULATION_RESULTS","LOAD_SIMULATIONS","DELETE_SIMULATION_FLUID","RECEIVE_SIMULATION_FLUID","RECEIVE_SIMULATION_FLUIDS","REQUEST_SIMULATION_FLUIDS","REQUEST_UPDATE_SIMULATION_FLUID","REQUEST_DELETE_SIMULATION_FLUID","REQUEST_CREATE_SIMULATION_FLUID","REQUEST_SIMULATION_WELLBORE_SECTIONS","REQUEST_UPDATE_SIMULATION_WELLBORE_SECTION","REQUEST_SIMULATIONS_FOR_TASK","RECEIVE_SIMULATIONS_FOR_TASK","REQUEST_DUPLICATE_SIMULATION","REQUEST_CREATE_UPDATE_PLANNED_SIMULATION","REQUEST_TOGGLE_SIMULATION_FAVORITE","REQUEST_TOGGLE_SIMULATION_PLANNED","DOWNLOAD_SIMULATION_PDF_REPORT","SimulationFormFields","CREATE_SIMULATION_MODAL","SIMULATION_EXPORT_MODAL_ID","SimulationDirection","RUN_IN_HOLE","PULL_OUT_OF_HOLE","SimulationResultSeries","SimulationState","NOT_COMPLETED","OUTDATED","UPDATED_PLANNED","FlowPath","FLOW_UP","FLOW_DOWN","SimulationChartsKeys","SimulationChartsType","createAlternativeActiveSeries","simulationResultSeries","SimulationCharts","compressionDepth","series","direction","activeSeries","existingThirdPartyToolToToolMapper","tool","existingTool","replaceThirdParty","propName","yield","yieldValue","bottomConnectorId","bottomConnector","topConnectorId","topConnector","toolImageId","customUnits","customUnitsMetric","customUnitsImperial","getUnitForProperty","property","uomPreference","selectedCustomUnitsOfMeasure","UNIT_OF_MEASURE","EDITABLE_TOOL_PROPERTIES","OUTER_DIAMETER","INNER_DIAMETER","WEIGHT","FISHNECK","SWL","YIELD","MAXIMUM_OD","MINIMUM_OD","MAXIMUM_STANDOFF_FORCE","MINIMUM_STANDOFF_FORCE","JAR_ACTIVATION_LIMIT_LOW","JAR_ACTIVATION_LIMIT_HIGH","ADDITIONAL_NORMAL_FORCE","AXIAL_FRICTION_REDUCED_TO","WEIGHT_ABOVE_JARRING_POINT_FACTOR","PROJECT_DEFAULT","CUSTOM","toolDiameter","mass","bigForce","force","unitPlaceholder","fallback","_isNil","isEmpty","getIn","toolAssetHistoryEventToString","event","TOOL_ASSET_EVENTS_ENUM","COMPLAINTS","MAINTENANCE","RUN","TASK","TEST","BOP_TEST","CABLE_TORSION_TEST","CABLE_WRAP_TEST","CABLE_TORTURE_TEST","CABLE_CONTINUITY_TEST","CABLE_INSULATION_TEST","SIL2_TEST","CABLE_WRAP_BRAIDED_MONO_TEST","STRING_TEST","CABLE_BREAK_TEST","CABLE_CUT_MAINTENANCE","CABLE_SERVICE_MAINTENANCE","CABLE_SPOOLING_MAINTENANCE","EQUIPMENT_ACTIVE_TAB","PROJECT_DETAILS_ACTIVE_TAB","PROJECT_WELLBORE_ACTIVE_TAB","EQUIPMENT_ACTIONS","CREATE_TOOL","CREATE_SURFACE_EQUIPMENT","UPDATE_TOOL","CREATE_SURFACE_UPDATE_TOOL","UPLOAD_IMAGE","DELETE_IMAGE","DELETE_SURFACE_EQUIPMENT_IMAGE","SEARCH_TOOLS","TOOLS_LOADED","SEARCH_EQUIPMENT","SEARCH_CABLES","CABLES_LOADED_BY_PROJECTID","PAGE_UNLOADED","M3_ITEM_SEARCH","M3_FIND_ITEMS_BY_SERIAL_NUMBER","SUPPLIERS_LOADED","TOOL_ASSEMBLIES_LOADED","TOOL_GROUPS_LOADED","SAVE_TOOL_ASSEMBLY","BHA_TEMPLATES_LOADED","RECEIVE_CREATED_TOOL","TOOL_CONNECTORS_LOADED","RECEIVE_SURFACE_EQUIPMENT_GROUPS","SURFACE_EQUIPMENT_UPLOAD_IMAGE","SURFACE_EQUIPMENT_LOAD","TOOL_ADDED_TO_TOOL_ASSEMBLY","SAVE_BHA_TEMPLATE","LOAD_ASSET_HISTORY","UPLOAD_3D_OBJECT","DELETE_3D_OBJECT","GET_TOOL_ASSEMBLY","LOAD_CABLE","REQUEST_BHA_TEMPLATE_FOR_EDITING","RECEIVE_BHA_TEMPLATE_FOR_EDITING","REQUEST_BHA_TEMPLATE_SECTIONS_FOR_EDITING","RECEIVE_BHA_TEMPLATE_SECTIONS_FOR_EDITING","UNLOAD_BHA_TEMPLATE_FOR_EDITING","CREATE_TEMPLATE_TOOL","DELETE_TEMPLATE_TOOL","REQUEST_UPDATE_TEMPLATE_FOR_EDITING","REQUEST_DUPLICATE_TEMPLATE_ITEM","REQUEST_SORT_TEMPLATE_TOOLS","REQUEST_SORT_TEMPLATE_ASSEMBLY_TOOLS","CREATE_ASSET_HISTORY","EDIT_TOOL_IMAGE","RECEIVE_EQUIPMENT_ASSETS","VALIDATE_TOOLSTRING_SERIAL_NUMBERS","DELETE_TEMPLATE_TOOLASSEMBLY_TOOL","RECEIVE_STRING_VERIFICATIONS_FOR_TOOLSTRING","SURFACE_EQUIPMENT_BY_CATEGORIES","RECEIVE_CABLE_TEST_DETAILS","EXPORT_CABLE_HISTORY","EQUIPMENT_TEMPLATES_LOADED","SAVE_EQUIPMENT_TEMPLATE","UPDATE_EQUIPMENT_TEMPLATE","GET_EQUIPMENT_TEMPLATE","CREATE_EQUIPMENT_TEMPLATE_EQUIPMENT","DELETE_EQUIPMENT_TEMPLATE_EQUIPMENT","EQIPMENT_CATEGORY_IDS","EQUIPMENT_CATEGORY_ENUM","EQUIPMENT_CATEGORY_FROMDTO","PROJECT_LESSON_REPORT_ACTIVE_TAB","TEST_ASSET_RESULT","ASSET_HISTORY_TEST_TYPE","ASSET_HISTORY_EVENT_TYPES_ITEM","TEST_RESULT_TO_TOOLTIP_TITLE","TASK_STATUS_TO_TOOLTIP_TITLE","ASSET_HISTORY_EVENT_TYPES","BOP_LEAK_TYPE","isFail","BOP_RAM","ASSET_HISTORY_EQUIPMENT_TYPE","ASSET_HISTORY_TEST_TYPES","showByDefault","equipmentType","ASSET_HISTORY_RESULTS","EquipmentType","getEventKeyByValue","ASSET_HISTORY_TEST_TYPES_DICT","acc","ASSET_HISTORY_MAINTENANCE_TYPE","ASSET_HISTORY_MAINTENANCE_TYPES","dropdownListItemFromDto","dropdownListItem","toolCategoryStringToId","toolCategory","toolFromDto","maximumPullForce","swl","toolAssemblyTools","maxPullForce","safeWorkingLoad","toolCategoryId","toolsFromDto","tools","OrderedMap","cableTypeToString","cableType","cableFromDto","cableId","stretchCoefficient","manufacturerPartNo","cable","partNo","stretch","typeName","toolStringDto","toolStringId","toolStringItems","imageUrl","totalLength","totalWeight","maxOD","template","toolStringItemDto","weight","outerDiameter","verifiedData","verifyToolstringData","dataVerified","verifyEquipmentTemplateData","templateEquipments","templateEquipment","equipment","templateEquipmentItemDto","_equipment$equipmentG","equipmentTemplateEquipmentId","equipmentId","dataVerifiedHasValue","surfaceEquipmentItemDto","group","equipmentGroup","length_mm","width","width_mm","weight_kg","height","height_mm","_ref9","attachedTools","toolstringItemId","verifyToolStringItemData","set","verifyAssemblyData","_ref10","equipmentGroupId","m3ItemNumber","equipmentImage","externalId","equipmentGroupDto","equipmentImageDto","_ref11","equipmentImageUrl","_ref12","equipmentImageId","extension","originalFileName","blobStoreUri","created","modified","toolAssemblyFromDto","_ref13","toolAssembly","toolMappers","Tool","ToolImage","toolImage","ToolSearchFilter","list","listItem","ToolSearch","ToolImport","importedTools","importErrors","errors","Cable","bhaTemplate","BhaTemplatesSearch","templates","CableSearch","cables","SurfaceEquipment","ToolAssemblies","EquipmentTemplate","equipmentTemplateId","toolstringItemFromDto","rest","toolAssemblyTool","toolAssemblyToolFromDto","toolAssemblyToolId","referenceNumber","toolToUpdateDto","toolstringItem","topToolConnectorId","bottomToolConnectorId","toolstringMappers","Toolstring","observations","toolMapper","toolsByToolstringToolId","initialToolstring","ToolstringItem","toCreate","toolItem","itemId","toUpdate","toDuplicate","ToolAssemblyTool","ToolstringSections","sections","ToolstringTool","thirdPartyDataVerification","toolsList","ToolstringAttachment","toolstringAttachmentToCreateDto","owner","externalToolId","externalToolAssemblyId","getToolsByToolstringToolId","data","toolstringId","findPlannedToolstring","entries","isPlanned","FluidType","LIQUID","GAS","MULTIPHASE","FluidFormFields","RheologyModel","NEWTONIAN","BINGHAM_PLASTIC","POWER_LAW","HERSCHEL_BULKLEY","MultiphaseType","BLACK_OIL","GasType","NITROGEN","AIR","NATURAL_GAS","REQUEST_SIMULATION_TOOL_PARAMETERS","REQUEST_UPDATE_SIMULATION_TOOL_PARAMETER","RECEIVE_SIMULATION_TOOL_PARAMETER","RECEIVE_SIMULATION_TOOL_PARAMETERS","DynamicToolParameter","FluidSelectionType","WELLBORE_FLUID","fluidSelectionTypeToString","fluidSelectionType","simulationMappers","Simulation","simulation","toolstringMapper","SimulationFluid","newtonianViscosity","fluidType","rheologyModel","simulationFluid","SimulationResult","tractorForceRunInHole","surfaceTensionRunInHole","minCableTensionRunInHole","cableHeadTensionRunInHole","surfaceTensionPullOutOfHole","cableHeadTensionPullOutOfHole","maxPickupWeightPullOutOfHole","workingLimitPullOutOfHole","compressionLimitRunInHole","maxSetDownRunInHole","weakPointLowSFPullOutOfHole","weakPointLowPullOutOfHole","weakPointHighPullOutOfHole","timestampPullOutOfHole","timestampRunInHole","surfaceWeightJarFiringLowPullOutOfHole","surfaceWeightJarFiringHighPullOutOfHole","cableHeadTensionJarFiringLowPullOutOfHole","cableHeadTensionJarFiringHighPullOutOfHole","stretchRunInHole","stretchPullOutOfHole","simulationResultSetId","simulationResult","runInHole","tractorForce","surfaceTension","minCableTension","cableHeadTension","compressionLimit","maxSetDown","timestamp","pullOutOfHole","workingLimit","maxPickupWeight","weakPointLowSF","weakPointLow","weakPointHigh","surfaceWeightJarFiringLow","surfaceWeightJarFiringHigh","cableHeadTensionJarFiringLow","cableHeadTensionJarFiringHigh","SimulationParameter","simulationParameter","SimulationDynamicToolParameter","simulationDynamicToolParameter","toLowerCase","word","toUpperCase","slice","cheetahJobSourceToString","cheetahJobSource","facilityTypeToString","facilityType","toPermissionIdFromDto","permissionId","toRoleIdFromDto","roleId","DepartmentMapper","departmentId","ServiceMapper","service","measurementPreferenceFromDto","measurementPreference","measurementPreferencesToDto","pressure","volume","volumeFlowRate","speed","temperature","tubularDiameter","gasFlowRate","liquidRate","gasDensity","liquidDensity","weightInAir","measurementPreferenceToDto","toMeasurementPreferencesFromDto","measurementSystem","mapFunctionProjectFluids","projectFluidId","fluidId","mapFunctionWellboreFluids","wellboreFluidId","mapFunctionTaskFluids","dataAcquisitionFluidId","baseFluidsFromDtoFn","fluidsDto","mapToCorrectShapeFn","initialUser","account","initials","mail","mobilePhone","organization","role","permissions","roles","trajectoryPointFromDto","_ref29","ew","md","ns","vd","trajectoryPoint","measuredDepth","verticalDepth","northSouth","eastWest","WellboreDetailMapper","_ref31","hostileFluids","additionalParameters","wellboreDetail","UserMapper","_ref14","jobTitle","projectPermissions","user","isMainVendor","organizationType","toProjectMember","_ref15","projectMemberId","Document","Meta","initialMetaFromFilename","_ref25","category","User","Wellbore","waterdepth","tvd","well","trajectory","field","elevation","location","entered","completed","limit","northEast","wellboreName","wellboreId","kellyBushingElevation","completedDate","enteredDate","fieldName","wellboreDetailId","trajectoryUpdated","wellbore","initialProject","facility","start","end","lastSeen","units","projectMembers","teamUrl","projectRisk","estimatedEnd","plannedEndDate","plannedStartDate","taskServices","owners","wellboreLocation","WellboreFluids","ProjectFluids","initialFluids","TaskFluids","Event","author","_ref16","eventId","userFullName","userAvatar","Progress","total","tasks","previous","current","taskNumber","activityNumber","next","_ref17","canGoBack","currentTaskPercentComplete","previousActivity","currentTaskNumber","taskCount","currentActivityNumber","activityCount","currentTask","currentActivity","nextActivity","nextTask","simulationsRunCount","activeTask","currentTaskProgress","isNil","activitiesMapper","tasksMapper","Organization","_ref18","organizationId","displayName","Field","_ref19","fieldId","projects","wells","Facility","_ref20","Operator","_ref21","facilityId","operator","WinchMonitor","winchmonitor","tension","UserRole","userRoleToDto","Sequence","_ref22","oldSequenceNumber","newSequenceNumber","sequenceToDto","_ref23","WellboreDetail","MeasurementPreference","MeasurementPreferences","FileCategory","_ref24","UserPreference","_ref26","receiveDailyDigestEmail","userPreferenceId","_ref27","_ref28","Trajectory","_ref30","trajectoryPoints","maximumNorthEast","maximumDogLeg","maximumDogLegDepth","maximumInclination","maximumInclinationDepth","imported","TrajectoryPoint","equipmentAsset","_ref36","m3ToolAssets","decodedSerialNumber","escapedSerialNumber","serialNumber","warehouse","installation","itemNumber","lastTransaction","customerAddress","Objective","_ref33","ProjectDashboard","_ref35","projectDashboard","CheetahJobCurve","_ref34","cheetahJobCurve","PageParams","_ref32","pageParams","redirectUrl","AuthSingleton","instance","async","init","createAuthService","msalCb","response","setActiveAccount","createService","getMsalInstance","initialize","authSingleton","Agent","httpAgent","throttledRefreshToken","delete","altusAgent","url","query","post","body","put","file","fields","image","toolService","getTool","getCables","filters","createTool","updateTool","searchTools","importTools","meta","getToolImages","deleteToolImage","imageId","uploadToolImage","getAllToolGroups","getToolSuppliers","getToolConnectors","getToolTopConnectors","associateImageToTool","getToolGroupsByCategory","categoryId","getToolBottomConnectors","refreshToolsWithM3Items","disassociateImageFromTool","refreshAllToolsWithM3Items","getAllToolStrings","searchBhas","getToolProjectHistoryByToolId","getAllSurfaceEquipment","saveToolAssembly","saveBhaFromClient","bhaTemplateFromClient","getTool3DObjects","uploadTool3DObject","associate3DObjectToTool","tool3DObjectId","disassociate3DObjectFromTool","deleteTool3DObject","getToolAssembly","updateToolAssembly","getCable","getCablesByProject","getTemplate","templateId","getTemplateSections","createTemplateItem","deleteTemplateItem","updateTemplate","duplicateTemplateItem","updateTemplateItemSequence","indices","updateTemplateAssemblyToolSequence","sequences","editToolImage","values","deleteTemplateToolAssemblyTool","searchCables","receiveToolImages","toolImages","receiveToolsSearch","receiveToolGroups","toolGroups","requestToolConnectors","receiveToolConnectors","toolConnectors","receiveToolTopConnectors","toolTopConnectors","receiveToolBottomConnectors","toolBottomConnectors","receiveToolSuppliers","toolSuppliers","receiveCables","callAsync","saga","params","asyncStart","call","asyncEnd","_error$response","_error$response2","_error$response2$body","_action$notification","_action$notification$","_action$notification$2","asyncEndError","addNotification","message","notification","variant","hasErrors","_action$notification2","_action$notification3","_action$notification4","requestToolImagesAsync","requestToolsSearchAsync","toolsSearchResult","requestCablesAsync","requestCablesByProjectAsync","requestToolGroupsAsync","requestToolGroupsByCategoryAsync","requestToolTopConnectorsAsync","requestToolBottomConnectorsAsync","requestToolSuppliersAsync","requestToolConnectorsAsync","toolPickerModalOnLoadAsync","all","requestRefreshAllToolsWithM3Async","root","takeLatest","getAllAvailableUsersFromState","availableUsers","getProjectMembersKeyedByUserIdFromState","toOrderedMap","mapKeys","projectMember","getFieldCrewKeyedByUserIdFromState","member","toList","getFieldCrewFromState","getAllAvailableFieldCrewUsersFromState","getProjectQualificationsFromState","qualifications","getProjectCrewsFromState","crews","getTeamProjectRolesFromState","teamProjectRoles","isClientOrganization","getCurrentUserFromState","currentUser","getCurrentUserUnitsPreferenceFromState","preferUnits","getCurrentUserPreferenceFromState","preferences","getAllUsers","users","getAllUsersFromState","getUsersByUserIdFromState","getModalFromState","modal","getModalDirectionFromState","getActiveModalIndexByModalId","modalId","activeIndex","isModalOpen","open","getAvailableServicesFromState","getAvailableDepartmentsFromState","getAllOrganizationsFromState","organizations","getClientOrganizationsFromState","getActionDataStateFromState","getActionDataStateSelector","dataState","getSummarizedDataStateFromState","getActionsDataStatesSelector","getSummarizedDataState","getAvailableFileCategoriesFromState","fileCategories","getCurrentProjectMemberFromState","projectMembersByUserId","getRouterFromState","router","getCurrentSubPage","getRouterParamsFromState","queryString","ignoreQueryPrefix","getPreviousLocationFromState","getCurrentLocationFromState","getCurrentThemeFromState","theme","getApplicationLoadedFromState","appLoaded","getFormValuesFromState","formId","formValues","getFormValueFromState","formValue","getFormFromState","form","getApplicationHeaderFromState","applicationHeader","getCurrentClientOrganizationIdFromState","featureFlags","featureFlagStatusSelector","featureFlag","featureFlagStatus","currentClientId","getCurrentClientOrganizationIdFromStateForAssembly","clientOrganizations","find","getCurrentClientSelectedUom","getChangeLog","chLog","getPrivacyPolicy","privacyPolicy","projectsBase","pages","team","plan","lessons","details","report","documents","execute","events","login","dashboard","info","wellCondition","routePaths","createProject","logout","changelog","mobilize","projectWellbore","match","execution","tabs","options","parameters","toolParameters","fluids","dataAcquisition","create","edit","history","elements","alert","compare","schematic","integrity","attachments","corrosion","logfiles","comparelogs","barchart","tabulardata","assetHistory","projectHistory","facilities","overview","document","operations","dashboards","settings","new","newRule","newCategory","dataExchange","winch","archived","configuration","cheetah","warrior","liveProjects","masterData","appService","allMembers","markAsSeen","updateUser","getTaskTypes","getMainVendorUsers","allWellbores","getFacilities","getFields","getAllServices","getProjectById","getCurrentUser","getUserPreferences","getAllDepartments","wellboresByFieldId","facilitiesByFieldId","updateUserPreference","userPreferences","getAllProjectStatuses","getUserMeasurementPreference","updateUserMeasurementPreference","measurementPreferences","getAllFileCategories","getAppFeatures","getAllOrganizations","getOrganizationsByField","getTaskFailReasons","getUsersByOrganizationType","toLogin","toLogout","toPrivacyPolicy","toRoot","toProjectTasks","subPage","toTaskToolstring","toTaskToolstringEdit","toExecutionSection","section","toExecutionSimulation","simulationId","tab","toExecutionSimulationFluid","simulationFluidId","toProjectDetails","generatePath","toProjectDashboardV2","projectDashboardId","toFacility","toWellbore","path","toField","toTool","toCable","toEquipmentAssetHistory","toSurfaceEquipment","toTaskSimulation","toTaskSimulationFluid","toProjectRole","projectRoleId","toSystemRole","systemRoleId","toLiveProject","toCheetahJobCurves","cheetahJobId","toMobileProjectStatus","toIntegrityAttachment","integrityId","createBrowserHistory","basename","appInsights","reactPlugin","ReactPlugin","appInsightsInstrumentationKey","ApplicationInsights","instrumentationKey","extensions","extensionConfig","identifier","setSubPage","page","toggleModal","extra","onLoad","getState","_getCurrentUserFromSt","_getCurrentUserFromSt2","skipTracking","hasWellAccessOnly","redirect","loginUrl","replace","storeChangeLog","newAppVersionNotificationAction","loadOrganizations","autoLogin","getCurrentThemeOrDefault","defaultTheme","setTheme","previousLocation","currentLocation","some","permission","setHeaderValues","setFile","initializeUserPreferences","initializeForm","tempUnits","tempPreferences","general","fetchedUnits","setCurrentTheme","expires","taskService","getAllTaskTemplates","updateTaskSequence","itemSequence","getTaskById","updateTask","createTask","deleteTask","getAllTasks","copyTask","addTaskTemplates","taskIds","getAllTasksWithProjects","getWellDetailForProjectAndTask","updateWellDetailForProjectAndTask","updateTaskServices","serviceIds","saveCableToTask","taskCable","deleteCableFromTask","CableId","getCablesForTask","getSurfaceEquipmentForTask","saveSurfaceToolToTask","taskTool","saveSurfaceTemplateToolToTask","taskTemplate","deleteSurfaceFromTask","surfaceId","saveCableSerialNumberToTask","cableSerialNumberDto","saveSurfaceEquipmentSerialNumber","surfaceEquipmentSerialNumberDto","getGreaseTypes","getGlycolTypes","getDebrisTypes","getInjectionMediums","getProductionMediums","getFrictionReducerTypes","getDataAcquisitionForTask","updateDataAcquisitionForTask","dataAcquisitionId","getDefaultTaskFluid","getTaskFluids","deleteTaskFluid","updateTaskFluid","fluidObj","addTaskFluid","getExplosives","updateExplosives","updateSerialNumbersFromTask","fromTaskId","toTaskId","toToolStringId","updateTaskSEFromToTask","updateTaskCableSerialFromToTask","projectStatusToString","ProjectStatus","toFacilityFromDto","toDepartmentFromDto","toDropDownForOperations","toProjectStatusFromDto","projectService","deleteProject","updateProject","externalName","displayReferenceNumber","background","internalInformation","projectToDTO","searchProjects","getProjectStatus","getProjectStatusLite","getWellboreByProject","updateProjectExternalId","updateMeasurementPreference","getWellboreTrajectoryByProject","getWellboreTrajectoryByProjectByTime","syncProjectWellboreTrajectoryWithLatest","getCurrentProjectMember","getFacilityDecksByProjectId","archiveProject","isArchive","getAllProjectsGantt","getAllProjectNonProductiveTimes","createProjectNonProductiveTime","projectNonProductiveTime","updateProjectNonProductiveTime","projectNonProductiveTimeId","deleteProjectNonProductiveTime","getTotalElapsedTime","isImmutable","ProjectExecutionHub","activitiesService","goBack","activityById","rid","aid","completeTask","endOperation","allActivitiesForTask","pauseActivity","updateActivity","createActivity","deleteActivity","startOperation","completeActivity","sendProjectChangedNotification","connection","invoke","createProjectTimer","updateProjectTimer","getAllProjectTimers","getAllActivityTypes","completeAndRepeatTask","updateActivitySequence","allActivitiesForProject","completeActivityAbortTask","getAllWaitingActivityTypes","completeTaskAndEndOperation","createNewPointInTimeActivity","getAllPointInTimeActivityTypes","updateActivitySetOrRetrieveItems","updateData","deleteActivitySetOrRetrieveItems","useViewMode","getProjectTimers","onUnload","activityListOnLoad","getTaskActivities","activityListOnUnload","selectActivity","confirmDeleteActivityWithBase","actionType","isSubActivity","confirmDeleteActivityWithNotification","confirmDeleteActivityWithoutNotification","deleteActivityBase","confirmDeleteActionFn","confirmationDialog","deleteActivityWithNotification","deleteActivityNoNotification","sortActivitiesBase","oldIndex","newIndex","sortActivitiesWithNotification","sortActivities","toggleCreateActivityModal","mode","createActivityBase","createActivityWithNotification","duplicateActivityWithNotification","allTaskActivities","setProjectStatus","setProjectStatusAsPlainAction","projectsService","refreshProjectStatus","silent","previousCurrentTaskId","getAllProjectActivities","getTaskActivitiesDispatchOnly","requestDeleteFluidGeneric","fluidOriginAsObj","confirmButtonText","success","requestGetTaskFluids","storeTaskFluids","requestDeleteTaskFluid","deletedTaskFluid","requestUpdateTaskFluid","setSubmitting","setStatus","updatedTaskFluid","requestCreateTaskFluid","createTaskFluid","UPDATE_TASKS_TRIGGER_ACTIONS","getAllTasksAsync","getAllTaskFluids","allFluids","updateCableSerialNumber","dto","takeEvery","getAllActivitiesForTask","allActivities","dispatchGetProjectStatus","notificationResponse","Identity","getAllTask","getWellboreSectionSelector","getProjectSelector","getProjectsFromState","getFacilitiesFromState","getDepartmentsFromState","getProjectStatusesFromState","statuses","getGanttProjectsFromState","getCurrentProject","getCurrentProjectIdFromState","createProjectWellboreSectionsSelector","wellboreSections","getProjectFluidsSelector","getProjectRiskSectionSelector","getTaskRiskSectionByProjectSelector","callCreateActivityService","sendNotificationFn","select","duplicateActivity","createActivityWithoutNotification","toggleActivityCreatedDialog","rootCreateActivity","getCurrentProjectWellboreFromState","getCurrentProjectWellboreTrajectoryFromState","projectWellboreTrajectory","getActivitiesFromState","getAllActivitiesFromState","createTaskActivitiesSelector","activitiesByTaskId","getActivityTypes","activityTypes","getWaitingActivityTypes","waitingActivityTypes","getPointInTimeActivityTypes","pointIntimeActivities","getExecuteStatusFromState","getTimersByTypeId","timerTypeId","getAutosaveDataStateFromState","getTotalElapsedTimeFromDurations","autosave","getCurrentTaskFromState","activeTimerType","getTargetDepthFromState","_currentTask$get$valu","initiateSortActivities","initiateSortActivitiesBase","initiateSortActivitiesNoNotification","activitiesSelector","sortedActivty","valueSeq","affectedActivty","sortedItemId","affectedItemId","sortActivitiesNoNotification","notificationFn","updatedSequences","rootSortActivities","initiateDeleteActivityBase","initiateDeleteActivityWithNotification","initiateDeleteActivityWithoutNotification","confirmDeleteActivity","rootDeleteActivitySaga","confirmGoBack","fetchAllActivitiesForTask","_newCurrentTask$taskI","newCurrentTask","String","rootGoBack","addErrorMessageDuration","updateActivityFormBase","actionExtended","reset","resetForm","callback","exc","updateActivityFormWithNotification","updateActivityFormWithoutNotification","emitUpdateActivity","rootUpdateActivityFormSaga","completeTaskDefault","objectivesMet","completeTaskRepeat","completeTaskWithContingency","completeTaskPostOp","previousTask","completeTaskMode","reportsService","getSimulationReportAvailableCharts","downloadProjectToolstringReport","collapseAssemblies","downloadProjectSimulationReport","chartsToInclude","chartTypes","downloadEndOfJobReport","projectExternalId","downloadActivityReport","UPDATE_ACTIVITIES_TRIGGER_ACTIONS","getTaskActivitiesAsync","startOperationAsync","nextProjectStatus","handleEstablishingConnectionError","delay","reload","notificationPayload","updatedActivity","getActivityPdf","updateActivityTimes","formikPrimitives","fork","receiveDashboards","requestProjectDashboard","receiveProjectDashboards","projectDashboards","receiveProjectDashboardCurves","projectDashboardCurves","receiveProjectDashboard","updateProjectDashboard","dashboardService","getDashboards","projectDashboardService","getProjectDashboard","getProjectDashboards","toggleProjectDashboard","dashboardId","toggleProjectDashboards","getProjectDashboardCurves","getProjectDashboardSimulations","getProjectDashboardCurvesBySource","getProjectDashboardCheetahJobCurves","requestDashboardsAsync","requestProjectDashboardAsync","requestProjectDashboardsAsync","toggleProjectDashboardAsync","toggleProjectDashboardsAsync","updateProjectDashboardAsync","REQUEST_CREATE_WELLBORE_SECTION","REQUEST_UPDATE_WELLBORE_SECTION","REQUEST_DELETE_WELLBORE_SECTION","REQUEST_WELLBORE_SECTIONS","REQUEST_CREATE_WELLBORE_SECTION_NIPPLE","REQUEST_UPDATE_WELLBORE_SECTION_NIPPLE","REQUEST_DELETE_WELLBORE_SECTION_NIPPLE","DELETE_WELLBORE_SECTION","RECEIVE_WELLBORE_SECTION","RECEIVE_WELLBORE_SECTIONS","DELETE_WELLBORE_SECTION_NIPPLE","RECEIVE_WELLBORE_SECTION_NIPPLES","UPDATE_WELLBORE_SECTION_SIMULATION","WellboreSectionType","TUBING","CASING","LINER","OPEN_HOLE","DRILLPIPE","RISER","MINUSKEY","requestWellboreSectionsForWellbore","deleteWellboreSection","wellboreSectionId","receiveWellboreSection","wellboreSection","receiveWellboreSections","receiveWellboreSectionNipples","wellboreSectionNipples","deleteWellboreSectionNipple","wellboreSectionNippleId","wellboreSectionTypeToString","wellboreSectionType","wellboreSectionFromDto","wellboreSectionNipplesFromDto","wellboreSectionNipple","wellboreSectionNippleFromDto","isNipple","wellboreSectionsMappers","WellboreSection","top","bottom","innerDiameter","frictionFactorIn","frictionFactorOut","WellboreSectionNipple","WellboreSectionNipples","wellboreSectionService","getWellboreSection","updateWellboreSection","wellboreSectionMappers","createWellboreSection","getDefaultWellboreSection","createWellboreSectionNipple","updateWellboreSectionNipple","getWellboreSectionsForWellbore","requestWellboreSectionsForWellboreAsync","requestCreateWellboreSectionAsync","requestUpdateWellboreSectionAsync","requestDeleteWellboreSectionAsync","requestCreateWellboreSectionNippleAsync","requestUpdateWellboreSectionNippleAsync","requestDeleteWellboreSectionNippleAsync","riskService","getTaskRiskSection","updateTaskRiskSection","createTaskRiskSection","deleteTaskRiskSection","taskRiskId","getDefaultTaskRiskSection","getTaskRiskSectionsForTaskRisk","getProjectRiskSection","updateProjectRiskSection","createProjectRiskSection","deleteProjectRiskSection","projectRiskId","getDefaultProjectRiskSection","getProjectRiskSectionsForProjectRisk","getTaskRiskSectionsByProject","TASK_INFO_ACTIONS","RISK_TABLE_ACTIONS","REQUEST_TASK_RISK_SECTIONS","REQUEST_CREATE_TASK_RISK_SECTION","REQUEST_UPDATE_TASK_RISK_SECTION","DELETE_TASK_RISK_SECTION","REQUEST_DELETE_TASK_RISK_SECTION","RECEIVE_TASK_RISK_SECTION","RECEIVE_TASK_RISK_SECTIONS","REQUEST_TASK_RISK_BY_PROJECT","REQUEST_PROJECT_RISK_SECTIONS","REQUEST_CREATE_PROJECT_RISK_SECTION","REQUEST_UPDATE_PROJECT_RISK_SECTION","DELETE_PROJECT_RISK_SECTION","REQUEST_DELETE_PROJECT_RISK_SECTION","RECEIVE_PROJECT_RISK_SECTION","RECEIVE_PROJECT_RISK_SECTIONS","RECEIVE_TASK_RISK_BY_PROJECT","wellboreService","getWellbore","wellId","getSchematicData","createNewSchematicVersion","searchWellbores","getWellboreEvents","getWellboreStatuses","getWellboreTrajectory","uploadWellboreTrajectory","getWellcomTrajectorySurvey","downloadTrajectorySurveyTxt","downloadTrajectorySurveyCsv","getWellboreTrajectoryPreview","downloadTrajectoryTemplateTxt","downloadTrajectoryTemplateCsv","getWellboreRevisionWithElements","getWellboreRevisionWithElementsFromWellcom","searchAperioWellbores","loadAllElementsList","wellboreDetailsService","addHostileFluids","hostileFluidsToAdd","removeHostileFluids","hostileFluidsToRemove","createWellboreDetail","updateWellboreDetail","getAvailableHostileFluids","addWellboreDetailServices","wellboreDetailServiceTypes","deleteWellboreDetailService","wellboreDetailServiceId","getAvailableAdditionalParameters","getAvailableWellboreDetailServices","splitParts","part","getWellboresPageResultsFromState","wellbores","getWellboresPageParamsFromState","getWellboreTrajectoriesFromState","getWellboreDetailsFromState","wellboreDetails","getWellboreFluidsSelector","getFieldsFromState","getAllElementsList","elementsData","selectSchematicData","wellboreIntData","getWellboresGroupedByWellNameFromState","fieldCompare","localeCompare","naturalSort","aParts","bParts","aPart","shift","bPart","x","entrySeq","wellName","wellboresByWellName","isWell","getWellboresGroupedByFieldFromState","_fields$getIn","wellboresByField","isField","getAvailableWellStatuses","wellStatuses","getWellEventsFromState","wellEvents","getWellboreTrajectoryFromState","trajectories","getWellboreByIdFromState","WELLS_ACTIONS","GET_FIELDS","GET_WELLBORE","LOAD_ALL_ELEMENTS_LIST","WELLBORE_INT_FETCH_STARTED","WELLBORE_INT_FETCH_SUCCEEDED","WELLBORE_INT_FETCH_FAILED","SCHEMATIC_CREATE_STARTED","SCHEMATIC_CREATE_SUCCEEDED","SCHEMATIC_CREATE_FAILED","SCHEMATIC_COMPONENT_UPDATE_STARTED","SCHEMATIC_COMPONENT_UPDATE_SUCCEEDED","SCHEMATIC_COMPONENT_UPDATE_FAILED","SCHEMATIC_COMPONENT_DELETE_STARTED","SCHEMATIC_COMPONENT_DELETE_SUCCEEDED","SCHEMATIC_COMPONENT_DELETE_FAILED","SCHEMATIC_VERSION_CREATE","RECEIVE_FIELDS","WELLS_PAGE_LOADED","UPDATE_WELL_FILTER","RECEIVE_WELLBORE_DETAIL","UPDATE_WELLBORE","RECEIVE_WELLBORE","RECEIVE_WELLBORES_PAGE","CLEAR_WELLBORES","WELLBORE_CONTAINER_LOADED","WELLBORE_CONTAINER_UNLOADED","RECEIVE_WELLBORE_TRAJECTORY","REQUEST_WELLBORE_TRAJECTORY","UPDATE_WELLBORE_DETAIL","CREATE_WELLBORE_DETAIL","ADD_HOSTILE_FLUIDS","REMOVE_HOSTILE_FLUIDS","ADD_WELLBORE_DETAIL_SERVICES","DELETE_WELLBORE_DETAIL_SERVICE","INITIATE_GET_WELLBORE_FLUIDS","GET_WELLBORE_FLUIDS","INITIATE_DELETE_WELLBORE_FLUID","DELETE_WELLBORE_FLUID","INITIATE_UPDATE_WELLBORE_FLUID","UPDATE_WELLBORE_FLUID","INITIATE_CREATE_WELLBORE_FLUID","CREATE_WELLBORE_FLUID","WellStatus","UNKNOWN","CLOSED","DRILLING","JUNKED","ONLINE_OPERATIONAL","P_AND_A","PLUGGED","PREDRILLED","SUSPENDED","WILL_NEVER_BE_DRILLED","receiveWellbore","receiveWellboreDetail","WELLBORE_ACTIONS","fetchSchematicData","receiveFields","receiveWellboreTrajectory","receiveWellboresPage","clearWellbores","receiveAndSetWellboreDetailId","currentWellbore","updateWellbore","wellboreDetailService","CREATE_PROJECT_MODAL_ID","PROJECTS_ACTIONS","RECEIVE_PROJECT","RECEIVE_PROJECTS","UPDATE_PROJECT","SEARCH_PROJECTS","GET_PROJECT_BY_ID","GET_ACTIVITY_TYPES","PROJECTS_PAGE_LOADED","GET_PROJECT_RESOURCES","PROJECTS_PAGE_UNLOADED","RESET_PROJECT_RESOURCES","GET_PROJECT_STATUS_SILENT","PROJECT_PAGES_UNLOADED","CLEAR_PROJECTS","GET_CURRENT_PROJECT_MEMBER","INITIATE_GET_PROJECT_FLUIDS","GET_PROJECT_FLUIDS","INITIATE_UPDATE_PROJECT_FLUID","UPDATE_PROJECT_FLUID","INITIATE_CREATE_PROJECT_FLUID","CREATE_PROJECT_FLUID","INITIATE_DELETE_PROJECT_FLUID","DELETE_PROJECT_FLUID","ARCHIVE_PROJECT","GANTT_PROJECTS","RECEIVE_GANTT_PROJECTS","CreateProjectFormFields","FIELD_ID","FIELD_NAME","WELLBORE_ID","WELLBORE_NAME","FACILITY_ID","FACILITY_NAME","ORGANIZATION_ID","ORGANIZATION_NAME","OBJECTIVE_ID","OBJECTIVE_NAME","PROJECT_VIEWS","toProjectMemberFromDTO","organizationName","teamProjectRoleId","memberId","initialProjectMember","toProjectFieldCrewFromDTO","projectMemberFieldCrewId","crewId","qualificationId","shiftTypeId","safetyDelegate","initialProjectFieldCrew","teamMappers","ProjectMember","fromByUserId","usersById","ProjectFieldCrew","fieldCrews","projectFieldCrew","ProjectMemberRole","toProjectMemberRoleDTO","ProjectFieldCrewRole","toProjectFieldCrewRoleDTO","teamService","getProjectMember","addProjectMembers","userIds","addProjectFieldCrews","allAvailableUsers","allAvailableFieldCrewUsers","deleteProjectMember","deleteProjectFieldCrew","assignProjectMemberToRole","teamMapper","assignProjectMemberTeamRole","projectTeamRole","getCrews","getQualifications","getFieldCrew","updateProjectFieldCrew","fieldCrew","getTeamProjectRoles","assignProjectFieldCrewToRole","ADD_TEAM_MEMBERS_MODAL_ID","TEAM_ACTIONS","TEAM_ACTIVE_TAB","ROLE_ACCESS_TYPES","PermissionType","SYSTEM","PROJECT","AUTHORIZATION_ACTIONS","SYSTEM_ROLE_FORM","NAME","CREATE_SYSTEM_ROLE_FORM","PROJECT_ROLE_FORM","CREATE_PROJECT_ROLE_FORM","CREATE_SYSTEM_ROLE_MODAL_ID","CREATE_PROJECT_ROLE_MODAL_ID","projectExecutePermissions","projectReportPermissions","projectWellPermissions","projectDetailsPermissions","projectPlanPermissions","projectTeamPermissions","projectDocumentPermissions","projectLessonPermissions","allProjectPermissions","systemEquipmentPermissions","systemServicesPermissions","systemWellPermissions","systemDataExchangePermissions","systemSimulationsPermissions","systemAperioPermissions","integrityRulesManagement","systemDashboardConfigurationPermissions","schematicsEditorPermissions","systemPermissionGroups","showSubPermissions","rootPermissionType","rootPermissionId","hidden","projectPermissionGroups","permissionGroups","aperioUserAllowedRoutepaths","authorizationService","getSystemRoles","getSystemRole","deleteSystemRole","getUsersAssignedToSystemRole","createSystemRole","systemRole","updateSystemRole","removeSystemRoleFromUser","addSystemRoleToUser","getProjectRoles","getProjectRole","deleteProjectRole","createProjectRole","projectRole","updateProjectRole","getProjectRolePermissions","assignPermissionsToProjectRole","rolePermissions","unassignPermissionsFromProjectRole","permissionIds","getSystemRolePermissions","assignSystemPermissionsToSystemRole","unassignSystemPermissionsFromSystemRole","getSystemRoleProjectPermissions","assignProjectPermissionsToSystemRole","unassignProjectPermissionsFromSystemRole","getSystemPermissions","getProjectPermissions","authorizationMappers","SystemRole","accessType","isProtected","ProjectRole","RolePermission","rolePermission","Permission","systemRoleAccessRightsOnLoad","projectRoleAccessRightsOnLoad","getAllAvailableUsers","getAllAvailableFieldCrewUsers","onLoadProjectFieldCrew","getFieldCrews","getAllProjectMembers","receiveProjectMembers","getAllTeamProjectRoles","receiveProjectTeamRoles","receiveProjectFieldCrews","addUsersToProject","selectedUsers","toArray","userMsgPart","projectTeamRoles","projectMemId","vals","updateFilter","ganttView","receiveProjects","receiveProject","reject","receiveProjectMember","getProjectResources","updatedProject","receiveGanttProjects","simulationService","runSimulation","getSimulation","createSimulation","deleteSimulation","updateSimulation","getSimulationFluids","duplicateSimulation","createUpdatedPlannedSimulation","getSimulationResults","createSimulationFluid","updateSimulationFluid","deleteSimulationFluid","getSimulationsForTask","states","deleteSimulationFluids","getSimulationParameters","deleteSimulationResults","toggleSimulationPlanned","toggleSimulationFavorite","updateSimulationParameter","simulationParameterId","createSimulationParameter","deleteSimulationParameter","getDefaultSimulationFluid","getSimulationResultsByTime","getDefaultSimulationParameter","updateSimulationWellboreSection","getWellboreSectionsForSimulation","getSimulationDynamicToolParameters","updateSimulationDynamicToolParameter","simulationDynamicToolParameterId","requestDuplicateSimulation","requestUpdateSimulation","resetResults","requestDeleteSimulation","loadSimulations","loadSimulation","receiveSimulation","receiveSimulationsForTask","simulations","receiveSimulationResults","simulationResults","requestToggleSimulationFavorite","receiveSimulationFluids","simulationFluids","toolstringService","getAllToolstringTemplates","getToolStringsForTask","createToolString","getToolString","isMobilise","stringTestId","updateToolString","toggleToolstringFavorite","deleteToolString","duplicateToolstring","getToolstringSections","createToolstringItem","updateToolstringItem","updatePlannedToolstringItem","deleteToolstringItem","duplicateToolstringItem","updateToolstringItemSequence","toggleToolstringItemBreakpoint","updateToolstringAssemblyToolSequence","createToolstringAssemblyTool","updateToolstringAssemblyTool","toolAssemblyId","deleteToolstringAssemblyTool","createToolstringFromTemplate","toolstringTemplateId","getPlannedToolstring","updateToolstringNotPlannedAssemblyTool","createToolAttachment","ownerId","deleteToolstringAttachment","toolStringAttachmentId","updateToolStringAttachmentSequence","updateToolStringToolStatus","createToolstringTemplateAttachment","deleteToolstringTemplateAttachment","updateToolStringTemplateAttachmentSequence","getToolstringTemplateById","TOOLSTRING_ACTIONS","GET_TASK_BY_ID","GET_CABLES","GET_BHA_TEMPLATES","REQUEST_ATTACH_TOOL","REQUEST_DELETE_TOOLSTRING_ATTACHMENT","REQUEST_SORT_TOOLSTRING_ATTACHMENTS","REQUEST_ATTACH_TOOL_TO_TEMPLATE","REQUEST_DELETE_TOOLSTRING_TEMPLATE_ATTACHMENT","REQUEST_SORT_TOOLSTRING_TEMPLATE_ATTACHMENTS","REQUEST_REDIRECT_TO_BHA_EDIT","REQUEST_CREATE_TOOLSTRING_TOOL","REQUEST_UPDATE_TOOLSTRING_ITEM","REQUEST_UPDATE_PLANNED_TOOLSTRING_ITEM","REQUEST_UPDATE_NOT_PLANNED_TOOLSTRING_ITEM","REQUEST_DUPLICATE_TOOLSTRING_ITEM","REQUEST_TOGGLE_TOOLSTRING_ITEM_BREAKPOINT","UDPATE_TOOLSTRING_TOOL_STATUS","REQUEST_UPDATE_SERIAL_NUMBERS_FROM_TASK","GET_TOOLSTRINGS_FOR_TASK","GET_TOOLSTRING_FOR_TASK","CREATE_TOOLSTRING_FOR_TASK","CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK","SUBMIT_CREATE_TOOLSTRING_FOR_TASK","SUBMIT_CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK","DELETE_TOOLSTRING_FOR_TASK","UPDATE_TOOLSTRING_FOR_TASK","REQUEST_TASK_TOOLSTRINGS_PAGE_ON_LOAD","REQUEST_UPDATE_TOOLSTRING_FOR_TASK","REQUEST_GET_TOOLSTRINGS_FOR_TASK","REQUEST_GET_TOOLSTRING_FOR_TASK","REQUEST_CREATE_TOOLSTRING_FOR_TASK","REQUEST_CREATE_TOOLSTRING_FOR_TASK_FROM_TEMPLATE","REQUEST_DUPLICATE_TOOLSTRING_FOR_TASK_AND_REDIRECT","REQUEST_DELETE_TOOLSTRING_FOR_TASK_AND_REDIRECT","REQUEST_TOGGLE_TOOLSTRING_FAVORITE","RECEIVE_TASK_TOOLSTRING","RECEIVE_TASK_TOOLSTRINGS","REQUEST_DELETE_TOOLSTRING_ITEM","REQUEST_SORT_TOOLSTRING_TOOLS","RECEIVE_TOOLSTRING_TOOLS_UPDATED_SEQUENCES","RECEIVE_TOOLSTRING_ITEM","RECEIVE_TOOLSTRING_ASSEMBLY_TOOL","REQUEST_SORT_TOOLSTRING_ASSEMBLY_TOOLS","REQUEST_TOOLSTRING_SECTIONS","RECEIVE_TOOLSTRING_SECTIONS","REQUEST_CREATE_TOOLSTRING_ASSEMBLY_TOOL","REQUEST_DELETE_TOOLSTRING_ASSEMBLY_TOOL","DOWNLOAD_TOOLSTRING_PDF_REPORT","REQUEST_TOOLSTRING_TEMPLATES","RECEIVE_TOOLSTRING_TEMPLATES","RECEIVE_TOOLSTRING_TEMPLATE_BY_ID","ADD_ASSETS_TO_TOOLSTRING","CREATE_TOOLSTRING_MODAL_ID","TOOLSTRING_FORMS","TOOLSTRING_NAME","TOOLSTRING_CABLE_GROUP","TOOLSTRING_CABLE_TOOL","TOOLSTRING_COMMENT","TOOLSTRING_OPTION_ACTIONS","TOOL_STATUS","receiveTask","getToolstring","getToolstringsForTask","redirectToTaskToolstringEdit","receiveTaskToolstrings","toolstrings","receiveTaskToolstring","requestGetTaskToolstring","requestTaskToolstringSections","receiveTaskToolstringSections","requestToogleToolstringFavorite","requestDuplicateToolstringAndRedirect","requestDeleteToolstringAndRedirect","activeToolstringId","requestUpdateToolstring","requestUpdateNotPlannedToolstringItem","m3Number","requestSortToolstringTools","sortedTool","affectedTool","receiveToolstringToolsUpdatedSequences","updatedToolstringToolSequences","receiveToolstringItem","receiveToolstringAssemblyTool","toolstringAssemblyTool","receiveToolstringTemplates","tasksContainerOnUnload","confirmDeleteTask","newTask","hasToolStrings","onLoadTaskSurfaceEquipment","getTaskCables","getTaskSurfaceEquipment","saveSurfaceToTask","surfaceTool","copySerialsForSEFromAnotherTask","copySerialsForCableFromAnotherTask","finally","getAllTasksFromState","getTotalPlannedDuration","getTotalElapsedDuration","getTaskTemplates","taskTemplates","getTaskSurfaceEquipmentFromState","taskActivities","surfaces","allTasks","getTaskRiskSectionSelector","getTaskFluidsSelector","RiskSectionId","receiveTaskRiskSections","DETAILS_ACTIONS","EDIT_PROJECT_UNITS_MODAL_ID","EDIT_PROJECT_FORM","submitUpdateProject","debounce","_ignore1","initialNoServices","_ignore2","valuesNoServices","receiveProjectRiskSections","receiveTaskRiskByProject","requestTaskRiskSectionsForRiskAsync","requestCreateTaskRiskSectionAsync","riskSection","requestUpdateTaskRiskSectionAsync","requestDeleteTaskRiskSectionAsync","requestProjectRiskSectionsForRiskAsync","requestTaskRiskSectionsByProjectAsync","requestCreateProjectRiskSectionAsync","requestUpdateProjectRiskSectionAsync","requestDeleteProjectRiskSectionAsync","equipmentService","uploadSurfaceEquipmentImage","deleteSurfaceEquipmentImage","createSurfaceEquipment","getAllSurfaceEquipmentGroups","searchM3Items","search","findM3ItemsBySerialNumber","getAssetHistoryByExternalToolId","asset","getSurfaceEquipmentById","searchSurfaceEquipmentByGroup","groupId","createTestAssetHistory","createMaintenanceAssetHistory","getEquipmentAssets","createBopTestAssetHistory","createStringTestAssetHistory","validateToolStringSerialNumbers","createcableTorsionTestAssetHistory","createcableWrapTestAssetHistory","createcableTortureTestAssetHistory","createcableContinuityTestAssetHistory","createcableInsulationTestAssetHistory","createSil2TestAssetHistory","___","validateSurfaceEquipmentSerialNumbers","getStringVerificationsForToolstring","getEquipmentByCategories","createCableWrapBraidedMonoTestAssetHistory","createCableBreakTestAssetHistory","createCableCutMaintenanceAssetHistory","getCableTestDetails","assetInfo","createCableServiceMaintenanceAssetHistory","createCableSpoolingMaintenanceAssetHistory","drumItemNumber","drumSerialNumber","storageType","exportCableHistory","createstringtesttoolstringitem","getstringtesttoolstringitemsForToolstring","getstringtesttoolstringitemsForStringTestId","updateStringTestDraft","updateDraftReport","searchSurfaceEquipment","validatestringtesttoolstringitemSerial","stringtesttoolstringitemIds","createEquipmentTemplate","equipmentTemplate","updateEquipmentTemplate","getEquipmentTemplate","searchEquiomentTemplates","onLoadGeneric","getAllToolStringsFunc","getToolGroups","getTools","onLoadWithoutToolstrings","onLoadFunc","getToolAssemblies","searchEquipmentTemplates","onLoadAddToolsModal","textSearch","searchType","activeModal","onLoadSurfaceEquipment","onLoadSurfaceEquipmentsGroupsModal","createAssetHistory","getAssetAfterRefresh","typeOfEvent","testType","closeModal","assetHistoryService","successMessage","getEquipmentAssetHistory","_error$response$body","getBhaTemplateForEditing","receiveBhaTemplateForEditing","receiveBhaTemplateSectionsForEditing","loadEquipmentAssets","validateToolStringSerialNumbersForMobile","requestToolstringsForTaskAsync","requestToolstringForTaskAsync","requestToolstringSectionsAsync","requestTaskToolstringsPageOnLoadAsync","requestToggleToolstringFavoriteAsync","requestDuplicateToolstringAndRedirectAsync","duplicatedToolstring","requestDeleteToolstringAndRedirectAsync","toolstringIdToDelete","firstToolstring","requestCreateToolstringFromTemplateForTaskAsync","createdToolstring","submitCreateToolstringFromTemplateForTaskAsync","requestCreateToolstringForTaskAsync","submitCreateToolstringForTaskAsync","requestUpdateToolstringForTaskAsync","updatedToolstring","requestUpdateTemplateAsync","requestGetTemplateForEditingAsync","requestCreateToolstringToolAsync","createdToolstringTool","requestCreateTemplateToolstringToolAsync","requestUpdateToolstringItemAsync","requestUpdatePlannedToolstringItemAsync","requestUpdateNotPlannedToolstringItemAsync","requestUpdateSerialNumbersFromTaskAsync","updateToolstring","requestDuplicateToolstringItemAsync","duplicatedToolstringTool","requestDuplicateTemplateItemAsync","requestToggleToolstringItemBreakpointAsync","updatedToolstringItem","requestDeleteToolstringToolAsync","requestDeleteTemplateToolAsync","requestDeleteTemplateToolAssemblyToolAsync","requestGetTemplateSectionsForEditingAsync","requestDeleteToolstringAssemblyToolAsync","requestSortToolstringToolsAsync","sortedToolSequence","affectedToolSequence","sortedToolstringToolId","requestSortToolstringAttachmentsAsync","sortedAttachment","affectedAttachment","requestSortTemplateToolsAsync","requestSortToolstringAssemblyToolsAsync","sortedToolstringAssemblyTool","affectedToolstringAssemblyTool","sortedToolAssemblyToolId","requestSortTemplateAssemblyToolsAsync","requestCreateToolstringAssemblyToolAsync","requestToolstringTemplatesAsync","requestCreateToolAttachment","requestDeleteToolstringAttachmentAsync","requestCreateToolstringTemplateAttachment","requestDeleteToolstringTemplateAttachmentAsync","requestSortToolstringTemplateAttachmentsAsync","requestUpdateToolStringToolStatus","requestRedirectToBhaEdit","currentSimulation","requestSimulationAsync","requestToggleSimulationFavoriteAsync","requestToggleSimulationPlannedAsync","submitCreateSimulationAndRedirectAsync","createdSimulation","requestUpdateSimulationAsync","updatedSimulation","requestDuplicateSimulationAndRedirectAsync","requestCreateUpdatedPlannedSimulationAndRedirectAsync","requestDeleteSimulationAndRedirectAsync","requestSimulationsForTaskAsync","requestRunSimulationAsync","requestSimulationResultsAsync","loadSimulationsAsync","loadSimulationAsync","requestWellboreSectionsForSimulationAsync","simulationWellboreSections","requestUpdateWellboreSectionForSimulationAsync","updatedWellboreSection","requestSimulationFluidsAsync","requestCreateSimulationFluidAndRedirectAsync","onRedirect","requestUpdateSimulationFluidAsync","requestDeleteSimulationFluidAsync","PROJECT_WELLBORE_DETAIL_CHANGELOG_MODAL_ID","WELLBORE_DETAIL_FORM","CLEAR_PROJECT_WELLBORE_DETAILS","CREATE_PROJECT_WELLBORE_DETAIL_DRAFT","CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT","CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT_AND_SYNC","REQUEST_PROJECT_WELLBORE_DETAIL_DRAFT_APPROVAL","APPROVE_PROJECT_WELLBORE_DETAIL_DRAFT","CANCEL_PROJECT_WELLBORE_DETAIL_DRAFT","EDIT_PROJECT_WELLBORE_DETAIL_DRAFT","SUBMIT_PROJECT_WELLBORE_DETAIL_FORM","GET_PROJECT_WELLBORE_DETAIL_CHANGE_LOG","DELETE_PROJECT_WELLBORE_DETAIL","REQUEST_PROJECT_WELLBORE_DETAIL","RECEIVE_PROJECT_WELLBORE_DETAIL","REQUEST_PROJECT_WELLBORE_DETAILS","RECEIVE_PROJECT_WELLBORE_DETAILS","REQUEST_ADD_HOSTILE_FLUIDS_TO_PROJECT_WELLBORE_DETAIL","REQUEST_REMOVE_HOSTILE_FLUIDS_FROM_PROJECT_WELLBORE_DETAIL","REQUEST_ADD_PROJECT_WELLBORE_DETAIL_SERVICES","REQUEST_REMOVE_PROJECT_WELLBORE_DETAIL_SERVICE","REQUEST_LATEST_PROJECT_WELLBORE_DETAIL","LOAD_PROJECT_WELLBORE_DETAIL_PAGE","LOAD_PROJECT_WELLBORE_DETAILS_PAGE","SYNC_PROJECT_WELLBORE_DETAILS_WITH_LATEST","SET_ACTIVE_WELLBOREDETAILSID","requestProjectWellboreDetail","projectWellboreDetailId","receiveProjectWellboreDetail","projectWellboreDetail","setActiveWellboredetailId","deleteProjectWellboreDetail","requestProjectWellboreDetails","receiveProjectWellboreDetails","projectWellboreDetails","projectWellboreDetailService","createDraft","approveDraft","requestApproval","getProjectWellboreDetail","getProjectWellboreDetails","getLatestProjectWellboreDetail","cancelProjectWellboreDetailDraft","addProjectWellboreDetailServices","getProjectWellboreDetailChangelog","deleteProjectWellboreDetailService","syncProjectWellboreDetailsWithLatest","addHostileFluidsToProjectWellboreDetails","removeHostileFluidsFromProjectWellboreDetails","projectWellboreSectionService","getProjectWellboreSection","getProjectWellboreSections","updateProjectWellboreSection","createProjectWellboreSection","deleteProjectWellboreSection","getDefaultProjectWellboreSection","createProjectWellboreSectionNipple","updateProjectWellboreSectionNipple","deleteProjectWellboreSectionNipple","syncAndCreateDraftProjectWellboreSectionsWithLatest","syncProjectWellboreSectionsWithLatest","projectFluidService","getAllFluids","projectWellboreId","getDefaultProjectFluid","deleteFluid","updateFluid","addFluid","duplicateFluids","currentProjectWellboreId","newProjectWellboreId","requestCreateProjectWellboreDetailDraftAsync","currentProjectWellboreDetailId","projectWellboreDetailDraft","projectWellboreDetailsService","requestCreateProjectWellboreDetailDraftAndSyncAsync","requestCancelProjectWellboreDetailDraftAsync","cancelProjectWellboreDetailDraftAndRedirectAsync","lastProjectWellboreDetail","requestLatestProjectWellDetailAsync","createAndRedirectToProjectWellboreDetailAsync","createAndRedirectToProjectWellboreDetailAndSyncAsync","requestApproveProjectWellboreDetailDraftAsync","requestProjectWellboreDetailDraftApprovalAsync","requestProjectWellDetailsAsync","requestAddHostileFluidsToProjectWellboreDetailAsync","requestRemoveHostileFluidsFromProjectWellboreDetailAsync","requestAddProjectWellboreDetailServicesAsync","requestDeleteProjectWellboreDetailServiceAsync","requestProjectWellDetailAsync","requestProjectWellboreDetailChangelogAsync","loadProjectWellboreDetailsPageAsync","requestUpdateWellboreDetailAsync","submitWellboreDetailFormAsync","syncProjectWellboreDetailsWithLatestAsync","REQUEST_SIMULATION_PARAMETERS","REQUEST_CREATE_SIMULATION_PARAMETER","REQUEST_DELETE_SIMULATION_PARAMETER","REQUEST_UPDATE_SIMULATION_PARAMETER","DELETE_SIMULATION_PARAMETER","RECEIVE_SIMULATION_PARAMETER","RECEIVE_SIMULATION_PARAMETERS","LOAD_SIMULATION_PARAMETERS_PAGE","receiveSimulationParameters","simulationParameters","requestSimulationParametersAsync","requestCreateSimulationParameterAsync","requestUpdateSimulationParameterAsync","requestDeleteSimulationParameterAsync","loadSimulationParametersPageAsync","requestGetProjectFluids","getProjectFluids","requestUpdateFluid","requestDeleteFluid","requestCreateFluid","createFluid","getAllProjectFluids","updateProjectFluid","deleteProjectFluid","addProjectFluid","requestSimulationDynamicToolParameters","requestUpdateSimulationDynamicToolParameter","refreshParameters","receiveSimulationDynamicToolParameter","receiveSimulationDynamicToolParameters","simulationDynamicToolParameters","requestSimulationDynamicToolParametersAsync","requestUpdateSimulationDynamicToolParameterAsync","wellboreFluidService","getDefaultFluid","requestGetWellboreFluids","getWellboreFluids","requestUpdateWellboreFluid","requestCreateWellboreFluid","requestDeleteWellboreFluid","getAllWellboreFluids","deleteWellboreFluid","updateWellboreFluid","createWellboreFluid","logFetchChange","markdown","newAppVersionNotification","setItem","storeNewAppVersion","rootCh","REQUEST_PROJECT_MOBILISATION_TASKS","RECEIVE_PROJECT_MOBILISATION_TASKS","RECEIVE_PROJECT_MOBILISATION_TOOLSTRINGS","REQUEST_PROJECT_MOBILISATION_TOOLSTRING","RECEIVE_PROJECT_MOBILISATION_TOOLSTRING","CREATE_STRING_TEST_REPORT","REQUEST_STRING_TEST_REPORTS_FOR_TASK","RECEIVE_STRING_TEST_REPORTS_FOR_TASK","REQUEST_STRING_TEST_REPORT_EVENT","RECEIVE_STRING_TEST_REPORT_EVENT","REQUEST_CREATE_SECONDARY_TEST_REPORT","REQUEST_FINISH_STRING_TEST_REPORT","REQUEST_UPDATE_STRING_TEST_TOOL_STRING_ITEM","REQUEST_GET_STRING_TEST_TOOL_STRING_ITEMS","RECEIVE_STRING_TEST_TOOL_STRING_ITEMS","REQUEST_GET_STRING_TEST_TOOL_STRING_ITEMS_FOR_STRING_TEST","RECEIVE_STRING_TEST_TOOL_STRING_ITEMS_FOR_STRING_TEST","VALIDATE_STRING_TEST_TOOL_STRING_ITEMS_SERIALS","STRING_TEST_REPORT_EVENT","STRING_TEST_REPORT_EVENT_TYPE_ENUM","STRING_TEST_REPORT_EVENT_TYPES_LIST","projectMobilisationService","createStringTestReport","stringTestReport","finishStringTestReport","stringTestReportId","getProjectMobilisationTasks","getStringTestReportsForTask","getStringTestReportEventById","createSecondaryStringTestReport","getProjectMobilisationToolstrings","getProjectMobilisationToolstringForTask","receiveProjectMobilisationTasks","projectMobilisationTasks","requestStringReportsForTask","receiveStringTestReportsForTask","stringTestReports","receiveStringTestReportEvent","stringTestReportEvent","requestUpdatestringtesttoolstringitem","receivestringtesttoolstringitems","stringtesttoolstringitems","requestMobilisationTasks","stringTest","requestStringTestReportsForTask","requestStringTestReportEventById","stringTestReportEventId","updatestringtesttoolstringitem","assetDto","validatestringtesttoolstringitemsSerials","initialState","wellboresReducer","setIn","wellStatus","WELL_EVENTS_PAGE_LOADED","wellEventsReducer","WELL_PROJECT_HISTORY_PAGE_LOADED","wellProjectsReducer","wellReducer","combineReducers","wellsReducer","FIELDS_ACTIONS","FIELD_STATUS","PRODUCING","PRODUCTION_UNLIKELY","PRODUCTION_LIKELY","PRODUCTION_APPROVED","PRODUCTION_IN_CLARIFICATION_PHASE","PRODUCTION_NOT_EVALUATED","PRODUCTION_DECIDED","INCLUDED_IN_OTHER_DISCOVERY","SHUT_DOWN","getStatusById","_Object$values$find","result","IMPORT_SOURCE","MANUAL","NPD","OGA","MARINE_TRAFFIC_POSITION","MARINE_TRAFFIC_IMAGE","ENS","EXCEL","API","getImportSourceById","fieldReducer","immutablePayload","toolProjectHistory","toolImports","toolReducer","formID","SCHEMATIC_FORM_VALUES","SCHEMATIC_COMMENT_FORM_VALUES","SCHEMATIC_VERSION_FORM_VALUES","leftRectangle","rightRectangle","highlightComponentNode","componentNode","wellBoreNode","highlightLayer","bounds","getBounds","diameters","geometry","getData","propertyName","getGeometryProperty","getSceneTransform","transform","inverseTransform","setBounds","setVisible","leftBounds","Rect","getLeft","getTop","getHeight","rightBounds","getRight","compareNumbers","compareDates","validFrom","newSchematicVersionComponentsMapper","lengthUnit","widthUnit","diameter","depthFrom","depthTo","outer","inner","getFormSchema","object","required","nullable","test","this","parent","currentPage","pageSize","pageResults","isFetching","wellboreReducer","results","versionsAndComponentsSorted","version","components","schematicData","previousComponentsData","sortedComponentsData","newSchematicData","newComponentsData","_component","componentData","componentIndex","component","projectReducer","initialDocument","toFileFromDTO","createdByUserId","categoryName","wellboreFileMappers","WellboreFile","initialCategory","WELLBORE_FILE_ACTIONS","wellboreFileReducer","wellboreFileMapper","wellboreFileId","wellboreFile","OPERATIONS_ACTIONS","OPERATIONS_VIEWS","cheetahJobReducer","FACILITIES_ACTIONS","FacilityStatus","Unknown","Abandoned","Decommissioned","Fabrication","Future","InService","Installation","LaidUp","Removed","facilityById","operators","facilitiesReducer","FACILITIES_PROJECTS_ACTIONS","facilitiesProjectsReducer","facilityFileId","editDocumentUrl","documentMappers","FACILITY_DOCUMENTS_ACTIONS","facilityDocumentsReducer","documentMapper","facilityReducer","facilityProjects","facilityDocuments","EQUIPMENT_DETAILS_ACTIONS","SURFACE_EQUIPMENT_DETAILS_ACTIONS","EQUIPMENT_DETAILS_ACTIVE_TABS","createdTool","bhaTemplates","toolAssemblies","surfaceEquipments","surfaceEquipmentCategories","bhaTemplateToEdit","bhaTemplateSectionsToEdit","assets","cableTestDetails","equipmentTemplates","equipmentReducer","toolstringTest","dashboardMappers","Dashboard","Curve","curve","dashboardReducer","CREATE_SMLOCATION_MODAL","SMLOCATION_CONFIG_ACTIONS","SMLocationCreateFormFields","smlocationMappers","SMLocation","smLocation","smLocationReducer","smLocationId","wellboreTrajectoryReducer","activityReducer","subtype","update","arrayMove","wellboreSectionReducer","deleteIn","wellboreElementsFromDto","wellboreElements","wellboreElement","wellboreElementId","wellboreElementFromDto","wellboreElementMappers","WellboreRevision","WellboreElement","WellboreElements","wellboreElementReducer","simulationReducer","TASK_ACTIVITIES_ACTIONS","toolstringsByTaskId","toolstringSectionsByToolstringId","toolstringById","plannedToolstringToolsWithStatus","toolstringReducer","_toolStringTools","simplePayload","simpleToolstring","updateIn","toolIndex","findIndex","filteredTools","toolstringsByTaskIdToJS","serialNumberMap","updatedToolsByToolstringToolId","projectDashboardReducer","wellboreDetailReducer","projectDashboardCurveReducer","simulationResultReducer","updatedState","asMutable","resultSet","_isEmpty","_resultSet$direction","measuredDepthKey","mappedResult","existingResults","asImmutable","simulationFluidReducer","ProjectWellboreDetailMapper","approvedBy","approvalDate","revisionDate","WellborePurpose","WellboreContent","HostileFluids","wellborePurposeToString","wellborePurpose","wellboreContentToString","wellboreContent","projectWellboreDetailsMappers","ProjectWellboreDetail","activeDetailsId","projectWellboreDetailReducer","simulationParameterReducer","situationFromDto","wellControlDrillCategoryId","situation","wellControlMappers","situations","WELL_CONTROL_ACTIONS","categories","wellControlReducer","simulationDynamicToolParameterReducer","parameter","projectGanttReducer","gantt","ProjectMobilisationMappers","projectMobilisationTasksMapper","stringTestAssetsGroupMapper","grouped","stringTestKey","stringTestReportsForTask","mobilisationToolstringForTask","projectMobilisationReducer","stringtesttoolstringitem","fieldFileId","editUrl","fieldDocumentsReducer","INTEGRITY_MANAGEMENT_ACTIONS","RISK_PRINCIPLE_TYPES","LIKELIHOOD_OF_FAILURE","WELL_CONSEQUENCE","INTEGRITY_TYPE_ENUM","INTEGRITY_TYPE_SELECTOR","RULE_TYPES_ENUM","RULE_BOOL","RULE_DOUBLE","RULE_GEOGRAPHY","RULE_TIME","RULE_PICKLIST","BOOLEAN_DATA_VALUES_ENUM","NO","label","YES","INTEGRITY_MANAGEMENT_RULE_TYPES","getRuleTypeString","ruleType","_INTEGRITY_MANAGEMENT","rule","IntegrityForm","WellIntegrityRiskMatrix","INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM","INTEGRITY_ATTACHMENT_FILES_TABS","UPLOAD_ATTACHMENT_FORM","ATTACHMENTS_DATE_FORMAT","TRAIL_SOURCE_ENUM","filesToIntegrityAttachmentDTO","attachment","externalFileId","reportedDate","fileName","fileType","fileLink","editDocumenturl","fileSource","integrityManagementMappers","integrities","integrityWellDataCreateDTO","integrityDetailType","integrityAttachmentsToDTO","externalWellboreId","mapAttachment","rawData","rules","integrityAttachments","availableFiles","riskScoreTrend","selectedRule","integrityManagementReducer","_action$payload","_action$payload2","_action$payload3","scores","riskTrendScores","_action$payload4","entityReducers","fieldDocuments","smlocation","wellControl","wellboreTrajectory","projectDashboardCurve","ganttProjects","projectMobilisation","integrityManagement","entityReducer","globalLocation","ignorePreviousPages","LOCATION_CHANGE","applicationFailureReason","pendingAction","confirmation","availableDepartments","availableOrganizations","availableServices","availableFileCategories","subTitle","uncheckedEvents","currentClientOrganizationId","commonReducer","merge","userPreference","department","logoNavigation","t","isString","st","ln","currentOrganizationId","nptMappers","npt","createdByUserAvatar","createdByUserFullName","local","NPT_ACTIONS","NPT_FORM","nptReducer","npts","filterNot","members","allAvailableFieldUsers","teamReducer","currentMembers","tasksReducer","TASKS_ACTIONS","updatedTask","ACTIVE_HAS_PROGRESSED","currentTasks","DATA_ACQUISITION_ACTIONS","WELL_TAB_FIELDS","CABLE_TAB_FIELDS","FLOWTUBE","MAX_TENSION","WEAK_POINT_BUILD","DISTANCE_WINCH_TO_FIRST_SHAVE","LOWER_WINCH_TO_FIRST_SHAVE","LOWER_TOUPPER_SHEAVE_WHEEL","TOOLS_TAB_FIELDS","TIME_LOGGED","DISTANCE_LOGGED","DEPTH_OF_CUT","METERS_TRACTORED","TIME_TRACTORED","JARING_TIME","JARING_STROKES","DEBRIS_VOLUME_COLLECTED","NOGO_SIZE","DISTANCE_MILLED","TIME_MILLED","MILLING_SPEED","ROTATION_SPEED","DEBRIS_TYPE","CONSUMABLES_TAB_FIELDS","EXPLOSIVES_FIELDS","dataAcquisitionMappers","DataAcquisition","restDataAcquisition","explosives","greaseTypes","glycolTypes","debrisTypes","injectionMediums","productionMediums","frictionReducerTypes","dataAcquisitionReducer","dataAcquisitionMapper","taskFluidsReducer","taskReducer","projectsReducer","_fields","executeIntialState","executeReducer","currentProjectId","eventsReducer","REPORT_ACTIONS","dataInitialState","projectDetailsReducer","lessonMappers","Lesson","lesson","recommended","actions","lessonId","recommendedActions","LESSONS_ACTIONS","CREATE_LESSON_FORM","EDIT_LESSON_FORM","lessonsReducer","lessonsMapper","incidentMappers","Incident","incident","caseNumber","incidentId","INCIDENTS_ACTIONS","EDIT_INCIDENT","CREATE_INCIDENT","CREATE_INCIDENT_FORM","EDIT_INCIDENT_FORM","SYNERGY_CASE_URL","incidentsReducer","IncidentsMapper","incidents","PROJECT_ASSET_TEST_ACTIONS","assetTestMappers","ASSETTEST","assetTest","assetTestReducer","initialChecklist","link","listKeywords","documentLink","procedureType","procedureDepartments","toChecklistFromDto","keywordsArray","keyword","createdByUser","Checklist","DOCUMENTS_ACTIONS","CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE","CHECKLISTS_AND_PROCEDURES_SOURCE","INTERNAL_CATEGORIES","checklistsAndProcedures","documentsReducer","newDocument","newDocumentsMap","NotRequestedDataState","LoadingDataState","PROJECT_WELLBORE_ACTIONS","projectWellboreReducer","projectReducers","activitiesReducer","detailsReducer","assetTests","reportReducer","planReducer","progressReducer","systemRoles","projectRoles","userRoles","systemPermissions","projectRolePermissions","systemRolePermissions","systemRoleProjectPermissions","authorizationReducer","operationsReducer","appReducers","formReducer","dataStateReducer","modalReducer","common","routerReducer","confirmationReducer","notificationReducer","authorization","entity","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","sagaMiddleware","createSagaMiddleware","onError","log","notificationMiddleware","createNotificationMiddleware","onUnauthorized","store","defaultMiddlewares","confirmationMiddleware","thunkMiddleware","routerMiddleware","promiseMiddleware","createStore","rootReducer","applyMiddleware","run","toolSaga","taskSaga","activitySaga","dashboardSaga","toolstringSaga","simulationSaga","wellboreSectionsSaga","simulationParametersSaga","simulationDynamicToolParametersSaga","projectWellboreDetailsSaga","projectSaga","riskSaga","wellboreSagas","changeLogSaga","projectMobilisationSaga","defaultThemeType","DARK","primary","newPrimaryLight","blue","rowColor","grey","rowHover","rowSelected","warningPrimary","disabledGrey","selection","green","warning","yellow","red","unknown","createTheme","palette","defaultDwiThemeOptions","altus","header","highlight","marker","decision","question","statusColor","amber","TableRow","hoverColor","SortableListRow","stripedColor","selectedColor","SortableListHeader","columnBackground","border","SortableListActionsHeader","SortableListRowColumn","textColor","ApplicationSidebar","ApplicationSidebarMenuItem","hover","active","secondary","contrastText","iconColor","ModalContainer","content","padding","AutocompleteTextField","InputLabelColor","RichtextEditor","main","white","disabled","Switch","ContextualizedWell","tooltip","orange","dhsv","maximumWorkingDepth","graph","water","soil","pipe","nipple","axisHelper","base","blueGrey","bha","metal","light","SmLocation","statusIndicator","ping","noPing","ToolstringPreview","lengthSection","SimulationDashboard","yAxis","SurfaceWeightRIH","lightBlue","SurfaceWeightPOOH","SWSafeOperatingLoad","CompressionLimit","WeakPoint","purple","MaxSetDown","indigo","MaxPickupForcePOOH","MinTractorPull","CableHeadTensionRIH","CableHeadTensionPOOH","JarActivation","StretchRIH","StretchPOOH","plotBands","RIH","POOH","checked","Dashboards","metalMilling","icon","ropMetric","Mobilisation","tasksMenu","selected","GanttChart","lightGreen","A400","lime","environment","teal","hoverOpacity","dark","newLight","darkGrey","mainLight","lighter","cssGray","table","row","overrides","MultiSelectModal","rootContent","color","TableHeaderRow","borderBottom","marginBottom","spacing","TableHeaderCell","sortedColumn","TableCell","maxHeight","minHeight","defaultThemeOptions","rootBackground","backgroundColor","rootStriped","rootSelected","rootBorder","borderWidth","TableFilter","tableRowRoot","paper","BasePage","overflow","NavigationTile","tileRoot","tileTitle","tileIcon","BasePageTitle","titleIcon","PaperListItem","expansionPanelDetailsRoot","MuiAppBar","boxShadow","colorDefault","MuiTypography","colorSecondary","MuiList","paddingTop","paddingBottom","outline","MuiDialog","default","MuiInputAdornment","fontSize","typography","caption","MuiTimelineItem","missingOppositeContent","flex","MuiLink","display","alignItems","underlineAlways","textUnderlineOffset","MuiToggleButton","MuiInputLabel","MuiInputBase","borderBottomColor","textOverflow","MuiTabs","indicator","MuiTab","textTransform","borderTopLeftRadius","borderTopRightRadius","Tab","MuiLinearProgress","colorPrimary","disabledBackground","barColorPrimary","underline","MuiCheckbox","displayChips","mobile","Background","Drawer","puller","NavBar","Dialog","buttons","close","Icons","operationStatus","deepPurple","darkThemeOptions","backdrop","listitem","navigation","panel","planning","lightThemeOptions","headerTransparent","LIGHT","A700","mergedDefaultOptions","mergeDeep","mergedDarkThemeOptions","mergedLightThemeOptions","darkTheme","lightTheme","themes","Counter","PureComponent","constructor","elapsedTime","incrementIntervalId","setIncrementIntervalId","_isMounted","setState","clearCurrentInterval","clearInterval","startIncrementTimer","precision","setInterval","asMilliseconds","componentDidMount","isTimerActive","initialDuration","calculateDurationFromStartAndEndtime","calculateDurationFromStartAndEndtimeFn","componentDidUpdate","prevProps","componentWillUnmount","render","renderValue","defaultProps","CounterFactory","calcActivityDurationFn","ActivityDuration","LoadingDimmer","classes","displaySpinner","className","dimmer","_jsxs","dimmerContent","CircularProgress","Typography","repeat","withStyles","button","position","left","right","zIndex","justifyContent","alpha","black","flexDirection","uaParser","UAParser","START_LOGIN","DOWNLOAD_LINKS","notSupportedMessage","marginTop","downloadLink","textDecoration","Grid","Warning","href","loginPopup","prompt","resp","previousAppVersion","getItem","throttledRefreshTokenFn","cancel","NavigationLink","target","Link","displayIcon","Box","Launch","marginLeft","Login","dispatchOnLoad","dispatchOnUnload","browser","getBrowser","loading","isLoading","_Fragment","logo","src","alt","container","xs","align","firstRow","NotSupported","sm","lg","xl","Fab","onClick","dispatchLogin","dispatchAutologin","loginButton","BrowserView","lastRow","stopPropagation","connect","loginRedirect","onLoadApp","toJSComponent","textShadow","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","opacity","stripes","pattern","pointerEvents","Logout","super","dispatchLogOut","logOut","useCurrentUser","useSelector","hasAllPermissions","currentPermissions","permissionsSet","isSuperset","hasOneOrMorePermissions","intersect","getRequiredProjectPermissions","usePermissions","userPermissions","hasPermission","useMemo","useSystemPermissions","ValidRoutesContainer","routes","MissingRouteComponent","filterRoutesWithPermissions","useCallback","castArray","handleValidRoute","route","subRoutes","filterRoute","validRoutes","isValidRoute","isEnabledForEnvironment","environments","isRouteEnabledForEnvironment","RouteContainer","SystemRoutesContainer","hasRoutePermission","NoMatchingRoute","basePageChildren","notfound","getSystemRolesFromState","getSystemRolesListFromState","getUserRolesFromState","getSystemRoleFromState","getSystemRoleSelector","getProjectRoleFromState","getProjectRoleSelector","getProjectRolesFromState","getProjectRolesListFromState","getProjectRolePermissionsFromState","getProjectRolePermissionsSelector","getSystemRolePermissionsFromState","getSystemRolePermissionsSelector","getSystemRoleProjectPermissionsFromState","getSystemRoleProjectPermissionsSelector","getProjectPermissionsFromState","getSystemPermissionsFromState","getCurrentUserProjectPermissionsFromState","currentProjectMember","union","getSystemAndProjectPermissionsFromState","getSystemAndProjectRolePermissionsFromState","ProjectRoutesContainer","userProjectPermissions","hasRequiredProjectPermissions","RoutesContainer","renderRouteContainer","renderRoutes","NavigationAppBarBase","isRouteHidden","routeIfNotHidden","subSurfaceRoute","renderTabs","routesToDisplay","NavTabsContainer","centered","TabComponent","AppBar","NavigationAppBar","NavigationAppBarForTaskRoutes","isTaskTypeSurface","isSubSurfaceRoute","useHeader","useDispatch","dispatchSetHeaderValues","setHeaderTitle","setHeaderSubTitle","setHeaderLogoNavigation","useEffect","featureType","elementType","stylers","visibility","googleMapsThemes","saturation","lightness","withTheme","center","allowZoom","GoogleMapReact","clusterRadius","defaultCenter","bootstrapURLKeys","zoom","draggableCursor","styles","GoogleMapTheme","disableDefaultUI","gestureHandling","scrollwheel","panControl","mapTypeControl","usePagedSearch","onSubmit","initialFilters","preloadedState","setCurrentFilters","useState","isSkipNextSubmit","setIsSkipNextSubmit","previousFilters","usePrevious","onPageChange","pageIndex","currentFilters","onFiltersChange","updatedFilters","getAllRowsExpanded","getSubRows","itemIndex","subRows","currentIndex","expandedSubRows","shouldSubmitDefault","isValid","dirty","AutoSaveFormik","timeout","shouldSubmit","formikContext","useFormikContext","formikContextRef","useRef","submitForm","debouncedSubmit","shouldSubmitForm","propTypes","func","memo","TextFieldV2","margin","fullwidth","MuiTextField","fullWidth","useStyles","makeStyles","textfieldRoot","TextFieldOutlined","defaultFormat","TextFieldFormik","outlinedTextField","destroyOnUnmount","minValue","useRoundedValue","onChange","onBlur","getFieldMeta","setFieldValue","handleValueChange","inputValue","touched","formattedValue","helperText","TextField","_Number","toFixed","roundToThreeDecimals","SelectTextFieldFormik","getItemName","getItemValue","emptyText","displayEmpty","otherOption","dialogFormName","iconsMapping","setOpen","showMoreDetails","handleOpen","handleClose","onClose","DialogTitle","DialogContent","DialogContentText","autoFocus","ErrorMessage","msg","style","DialogActions","Button","SelectProps","MenuItem","marginRight","Tooltip","IconButton","edge","alignSelf","CommentIcon","Filters","filterSpacing","paddingLeft","initialValues","Formik","enableReinitialize","Form","placeholder","wellRoot","fieldRoot","surveyUploadedDescription","wellHeader","columns","Header","TableRowActionsCell","minItems","Cell","accessor","wellOrField","_row$original","_row$original2","original","noWrap","canExpand","getToggleRowExpandedProps","isExpanded","ExpandLess","ExpandMore","Table","useExpanded","usePagination","subrowOffset","manualPagination","useGlobalFilter","paginateExpandedRows","TableRowComponent","WellboreTableRow","noItemsMessage","_value$score","score","getReLogDate","getDate","getMonth","getFullYear","getWellboreSubRows","defaultFormValues","availableWellStatuses","dispatchUpdateFilter","wellboresPage","dispatchUpdateWellAperioFilter","breadcrumb","initialTableState","_pageParams$get","expanded","initialFilterValues","initialPagedSearchFilters","GoogleMap","paddingRight","WellboresFilter","AperioWellboresTable","pageCount","WellboresTable","basePageClasses","defaultFilters","leftIcon","viewToggle","selectedView","onViewChange","getArchiveProjects","displayFilter","_filters$includes","displayFields","displayTextSearch","displayFacilities","displayStatuses","displayOrganizations","displayDepartments","showArchiveProjectClick","mr","ArchiveIcon","cursor","ToggleButtonGroup","exclusive","ToggleButton","ViewAgendaIcon","BarChartIcon","wrap","formik","inputProps","maxLength","InputProps","endAdornment","InputAdornment","Close","ARCHIVE_FILTERS","filterProjectOptions","filterContainer","gap","goBackToProjects","updateProjectFilter","anchorEl","setAnchorEl","setSelected","Plan","Report","onArchiveTextSearchSubmit","filterValues","getLocations","initialArchiveFilterValues","justify","ChevronLeftIcon","currentTarget","FilterListIcon","Menu","keepMounted","Boolean","FormGroup","option","FormControlLabel","control","Checkbox","newSelected","withTooltip","WrappedComponent","TooltipProps","MuiTooltip","MuiFab","Image","MuiGrid","MuiButton","Avatar","MuiAvatar","MuiIconButton","svg","flexShrink","userSelect","fill","transition","d","chip","Chip","h4","zoomedIcon","isHovered","LocationOn","renderImage","getDashboardsFromState","useProjectDashboards","dispatchRequestProjectDashboard","dispatchRequestProjectDashboards","requestProjectDashboards","dispatchToggleProjectDashboard","dispatchToggleProjectDashboards","dispatchUpdateProjectDashboard","projectDashboardsSelector","createProjectDashboardsSelector","toggleProjectDashboardDataState","toggleProjectDashboardsDataState","updateProjectDashboardDataState","cardMedia","card","lighten","menuItemRoot","isSuccess","disableGutters","Card","CardActionArea","DashboardImage","CardMedia","CardContent","LoadingOverlay","isQuantity","requiredQuantity","isInvalid","isNumber","validateIPAddress","isIPv4","operationService","searchOperations","searchOperationsLiveProject","updateCheetahJob","searchCheetahJobs","updateProjectStatus","getOperationsFilter","getOperationsFilterLiveProject","getCheetahJobCurves","getCheetahJobsFilter","searchOnlineOperations","searchOnlineOperationsLite","getLiveOperationFields","getCheetahJobsByProject","getLiveOperationFacilities","getCheetahJobsProjectFilter","getAvailableProjectsForCheetahJobs","receiveOperations","receiveCheetahJobs","receiveOperationsLiveProjects","receiveCheetahJob","receiveOperation","getCheetahJobsFromState","useCheetahJobs","dispatchSearchCheetahJobs","dispatchUpdateCheetahJob","selector","_cheetahJob$get","_filter$key","createFilteredCheetahJobsSelector","useDashboards","dispatchRequestDashboards","requestDashboards","useProjectDashboard","projectDashboardSelector","createProjectDashboardSelector","projectDashboardCurvesSelector","createProjectDashboardCurvesSelector","curves","Status","StatusIndicator","FiberManualRecord","titleAccess","CheetahJobStatusIndicator","statusOverride","body2","TextFieldComponent","keepChangeAfterOnBlur","StatusIndicatorWithText","availableColors","colors","ProjectDashboardCurveColorField","isValidColor","validate","TableRowTextFieldFormik","getInitialSelectedProjectDashboardCurveRowIds","isSelected","tableRowRootDisabled","disabledOpacity","disabledFields","maxSelectedItems","toggleRowSelected","selectedRowIds","selectedRows","disableRipple","FormFields","allowedRange","renderTableRowComponent","classNames","stickyHeader","useProjectDashboardCheetahJobCurves","projectDashboardCheetahJobCurves","useRequest","ProjectDashboardCheetahJobCurvesTableContainer","setDataState","ProjectDashboardCurvesTable","isEditable","useProjectDashboardSimulation","getProjectDashboardSimulationCurves","projectDashboardSimulationCurves","getProjectDashboardSimulationCurvesDataState","getProjectDashboardSimulationsDataState","ProjectDashboardSimulationSelectField","_values$FormFields$SI","disabledFormFields","ProjectDashboardSimulationCurvesTableContainer","selectedSimulationId","Fade","in","NoSelectedProjectDashboard","dense","ListItem","ListItemText","SelectCheetahJobFormSection","ValidCheetahJobSources","sourceOnChange","ProjectDashboardFormContainer","setSelectedCurveRowIds","setSelectedSimulationCurveRowIds","isUrlConfigurable","selectedSource","selectedCheetahJobId","cheetahJobDataState","includeProject","selectedCheetahJob","summarizedDataState","isConfigurable","onRowSelected","FormikFormContainerTitle","SelectedProjectDashboardContainer","selectedProjectDashboardCurveRowIds","selectedProjectDashboardSimulationCurveRowIds","_projectDashboard$For","_projectDashboard$For2","simulationCurves","selectedCurves","selectedSimulationCurves","validateOnMount","handleSubmit","ModalActions","LoadingButton","ProjectDashboardsMenu","selectedProjectDashboard","setSelectedProjectDashboardId","clearSelectedProjectDashboardId","isAllSelected","ListItemSecondaryAction","Fragment","listItemRoot","listItemSelected","divider","dashboardImageListItem","dashboardImageContainer","dashboardImageRoot","dialogContentRoot","dialogPaperScrollPaper","borderLeft","objectFit","dashboardsListContainer","isOpen","initialProjectDashboardId","selectedProjectDashboardId","requestDashboardsDataState","maxWidth","paperScrollPaper","ModalHeader","Divider","orientation","flexItem","drawerPaper","minWidth","configurationLink","toggleDrawer","facilityName","useToggle","anchor","CloseIcon","paragraph","ProjectDashboardsList","Settings","ProjectDashboardsModalContainer","tableRowRootBackground","metaRow","linearProgres","projectDetails","displayLocationMarker","zoomInAndOutByProjectId","isArchiveProject","setArchiveProjects","initialOwner","isExecuteOrReport","tableRowClasses","ProjectMapMarker","zeroMinWidth","ProjectTableRowDetail","ProjectTaskServiceChips","ProjectDashboardsDrawer","DashboardIcon","UnarchiveIcon","UserAvatar","LinearProgress","toggleProjectsList","mobileAppTitle","displayLocationMarkers","isMobileAppView","ProjectsTableRowMobileView","ProjectTableRow","ProjectsByStatus","projectsByStatus","sortBy","keySeq","ProjectsTable","ProjectMapLocations","_location$get","_location$get2","nortSouth","lng","lat","highchartsTheme","chart","plotBorderColor","fontFamily","noData","subtitle","xAxis","animation","plotOptions","dataLabels","lineColor","boxplot","fillColor","candlestick","errorbar","legend","itemStyle","itemHoverStyle","itemHiddenStyle","credits","enabled","labels","drilldown","activeAxisLabelStyle","activeDataLabelStyle","buttonOptions","symbolStroke","exporting","scrollbar","barBackgroundColor","barBorderColor","barBorderRadius","buttonArrowColor","buttonBackgroundColor","buttonBorderWidth","trackBackgroundColor","trackBorderColor","trackBorderWidth","fontColor","defaultFontSize","subtitle1","subFontSize","subtitle2","capFontSize","dashboardHighchartsTheme","boost","seriesThreshold","fontWeight","verticalAlign","borderRadius","layout","symbolHeight","symbolWidth","symbolRadius","useHTML","labelFormatter","y","line","gauge","valueDecimals","borderColor","shared","positioner","headerFormat","pointFormatter","pointFormat","crosshair","winchHighchartsTheme","panning","spacingRight","panKey","zoomType","pinchType","resetZoomButton","alignTicks","isMobileOnly","spacingBottom","navigator","fillOpacity","dataGrouping","smoothed","lineWidth","handles","allowOverlap","shadow","formatter","yValue","formatted","Highcharts","numberFormat","dial","radius","baseWidth","baseLength","rearLength","showInNavigator","boostThreshold","turboThreshold","requireSorting","symbol","allowPointSelect","enabledThreshold","hide","visible","show","useUTC","rangeSelector","floating","inputEnabled","buttonPosition","labelStyle","reversed","minRange","tickWidth","ProjectsGanttChart","chartComponent","useHistory","baseDate","useTheme","oneWeekBefore","toDate","getTime","fiveWeeksAfter","endOf","formatDateTime","_chartComponent$curre","_chart$xAxis$","setExtremes","createSeries","i","remove","fieldParent","seriesData","_moment","_moment2","projectNumber","dataArray","splice","serie","addSeries","redraw","reflow","chartOptions","count","liveRedraw","pointPlacement","pointPadding","accessibility","showEmpty","tickColor","keyboardNavigation","seriesNavigation","point","click","HighchartsReact","ref","constructorType","highcharts","ProjectsGanttChartContainer","ReceivedDataState","projectsGroupedByField","startYear","startMonth","startDay","endYear","endMonth","endDay","allStatuses","dispatchArchiveProject","dispatchLoadGanttProject","createProjectBtn","_location$state","useLocation","setIsArchiveProject","pathname","currentFilter","setCurrentFilter","currentFields","currentProjects","currentFacilities","currentStatuses","currentGantProjects","currentDepartments","setFields","setProjects","setFacilities","setDepartments","setStatuses","URLSearchParams","setSelectedView","toggleViewChange","_event","Execute","selectedStatus","renderProjectsTable","ArchiveProjectFilter","preventDefault","ProjectFilter","DashboardContainer","dispatchDashboardOnUnload","ProjectHelmet","Helmet","titleTemplate","useProject","projectSelector","_projects$get","createProjectSelector","useCurrentProject","useParams","rootUrl","logoRoot","LogoAndAppTitleCore","renderLogo","Logo","ProjectStatusText","ProjectLinearProgress","projectStatus","FullScreenButton","isFullscreen","toggleFullscreen","useFullscreen","FullScreenIcon","FullscreenExit","Fullscreen","headerBaseRoot","HeaderBase","isDesktop","DashboardHeader","ApplicationHeaderBase","MobileView","renderWithFragment","LogoAndAppTitle","ApplicationHeaderTitle","isMobileSafari","DefaultLayout","rootPane","IgcDockManagerPaneType","splitPane","IgcSplitPaneOrientation","vertical","panes","contentPane","contentId","DashboardLayout","horizontal","DynamicDockManagerSlot","useResizeDetector","displayContent","slot","defineCustomElements","renderSlots","slots","React","DockManagerIFrame","setDocument","_ref$current$contentD","contentDocument","contentWindow","seamless","frameBorder","createPortal","IFrameDashboardController","updateSeriesData","chartRef","readings","reading","containerProps","validSetExtremesTriggers","DashboardLineChart","onSetExtremes","registerDataPointsHandler","onReceiveInitialData","_start$current","_end$current","s","_first","_last","setData","onReceiveData","addPoint","resize","gridLineColor","softMin","softMax","tickInterval","gridLineWidth","opposite","_event$min","_event$max","trigger","eventMin","min","dataMin","eventMax","max","dataMax","fromTimestamp","toTimestamp","afterSetExtremes","_event$min2","_event$max2","axis","allowChartUpdate","Highstock","useStream","connectionState","createStream","onStartStreaming","onStopStreaming","stream","setStream","startStreaming","currentStream","complete","stopStreaming","HubConnectionState","Connected","Reconnecting","Disconnecting","Disconnected","useHubConnection","setConnectionState","Connecting","HubConnectionBuilder","withUrl","accessTokenFactory","silentRequest","accessToken","withAutomaticReconnect","configureLogging","LogLevel","build","isMounted","handleConnectionStateUpdate","onreconnecting","onreconnected","onclose","FailedDataState","stop","useQueryParams","searchParams","k","v","projectDashboardHubUrl","dashboardHubsBaseUrl","ProjectDashboardHub","useProjectDashboardHubConnection","useContext","ProjectDashboardContext","onReceiveInitialDataPoints","onReceiveDataPoint","on","subscribe","setExtremesThrottled","throttle","GenericDashboardController","firstColumnWidth","secondColumnWidth","secondColumnLeft","getDefaultYAxisOptions","startOnTick","endOnTick","autoRotationLimit","rotation","maxPadding","minPadding","offset","tickPositioner","minValues","maxValues","ceil","loggingDashboardHighchartsTheme","load","renderer","currentMin","currentMax","delta","attr","inverted","allButtonsEnabled","outside","crosshairs","plotTop","depthUnitFromSeries","points","userOptions","depthUnit","Units","uniqueTimestamps","uniq","commonTimestamp","formattedTimestamp","SensorOffset","convertCurvesToOffsetConfiguration","_Array$from","findExtreme","offsetConfiguration","minMaxFn","allOffsets","getAllOffsetsAsArray","createNewEventWithOffset","newEvent","findMaximumOffset","findMinimumOffset","calcDepthIncludingOffset","sensor","offsetCfg","introduceOffsetOnX","originalSensor","cloneDeep","LoggingDashboard","readingsWithOffset","sorted","_timestamp","_value","curveOptions","CaliperDashboard","linkedTo","useProjectWellbore","getProjectWellbore","useProjectWellboreTrajectory","getProjectWellboreTrajectory","generateYAxisId","CorrelationDashboard","CCLCurve","allCurves","_CCLCurve$get","_CCLCurve$get2","CCLmin","CCLmax","gridLineDashStyle","thickness","tickPositions","LoggingNavigatorChart","lang","ordinal","tickLength","maxNumberOfCurvesByComponent","DashboardComponent","depthCurves","take","fromTimestampRef","toTimestampRef","fromDepthRef","toDepthRef","depthData","setDepthData","onSetTimeExtremes","toDepth","fromDepth","onSetDepthExtremes","_wellboreTrajectory$g","CaliperDashboardController","LoggingDashboardContainer","CorrelationDashboardController","metalMillingHubUrl","MetalMillingHub","useMetalMillingHubConnection","HighchartsMore","TelemetryGauge","pane","startAngle","endAngle","minorTickInterval","minorTickWidth","minorTickLength","minorTickPosition","minorTickColor","tickPixelInterval","tickPosition","step","inactive","pivot","matchingSeries","setTitle","qTelemetryRotation","ropContainer_wrap","ropTitle","rop","modelUrl","DrillModel","modelRef","rpm","setRpm","obj","setObj","mat","THREE","metalness","roughness","useFrame","_data$bitRpm","bitRpm","ObjToPrimitive","OBJLoader","traverse","child","Mesh","material","DrillModelContainer","Canvas","orthographic","camera","Suspense","intensity","ARM","DDRRPM","TORQUE","WHEEL","WOP","WOPRPM","TORQUE_GRADIENT","linearGradient","x1","x2","y1","y2","stops","WOB_GRADIENT","BITRPM_GRADIENT","TRACWHEEL_GRADIENT","TRACARM_GRADIENT","DDRRPM_GRADIENT","HighchartsBullet","font","chartGradient","dataToSet","targetOptions","symbolPadding","squareSymbol","initialData","arm","wob","wheel","torque","ddrRpm","graphsContainer","MetalMillingChart","h2","MetalMillingROP","borderTop","ArrowRightIcon","MetalMillingChartsContainer","MetalMillingDashboardController","MetalMillingDashboardContainer","DashboardGaugeChart","onReceiveDataPoints","takeLast","takeFirst","outerRadius","tickmarkPlacement","gridZIndex","showFirstLabel","filterSimulationCurves","gaugeContainer","ThreeJsManager","canvasNode","antialias","canvas","setClearColor","scenesInfo","disposeScene","sceneKey","_scene$geometry","_scene$geometry2","_scene$geometry2$map","_scene$geometry3","_scene$geometry3$text","sceneInfo","scene","dispose","texture","renderScene","domElement","domElementLeft","domElementRight","domElementTop","domElementBottom","domElementWidth","domElementHeight","getBoundingClientRect","canvasWidth","canvasHeight","aspect","updateProjectionMatrix","positiveYUpBottom","setScissor","setViewport","frameId","clientWidth","clientHeight","needResize","setSize","resizeRendererToDisplaySize","setScissorTest","clear","requestAnimationFrame","cancelAnimationFrame","forceContextLoss","addScene","updateScene","sceneUpdater","ThreeJsContext","createContext","useThreeJsManager","ThreeJsManagerProvider","manager","setManager","canvasRef","Provider","projectWellboreOnLoad","receiveProjectWellbore","receiveProjectWellboreTrajectory","askProjectWellboreUpdateConfirmation","onConfirm","onCancel","between","val","distanceFromCenter","convertMetric","createTextSprite","createElement","context","getContext","textMetrics","measureText","clearRect","fillStyle","fillText","minFilter","magFilter","needsUpdate","sprite","transparent","depthTest","depthWrite","alphaTest","scale","computeBoundingBox","up","getGeometry","arcShape","moveTo","absarc","PI","holePath","holes","bevelEnabled","bevelSegments","steps","bevelSize","bevelThickness","checkIntersection","sprite1","sprite2","updateMatrixWorld","box1","setFromObject","box2","intersectsBox","createNewNipple","side","upVector","startVector","endVector","TrajectoryCylinderPrefix","cylinderList","nippleList","existingSprites","loaderRGBE","RGBELoader","setDataType","envMap","encoding","wrapS","wrapT","loader","metalAOMap","metalDispMap","metalNormalMap","metalMap","metalRoughnessMap","metalMetalnessMap","Materials","currentDepth","aoMap","displacementMap","normalMap","roughnessMap","metalnessMap","envMapIntensity","grid","darkgrey","setupCamera","maxNorthEast","maxTVD","disableOrbitControls","z","orbitControls","OrbitControls","maxDistance","enablePan","screenSpacePanning","enableKeys","createYAxis","ThreeJsUtils","createCylinder","v1","v2","createYAxisLabels","yTicks","getTicks","tick","yAxisLabel","createCardinalPointsLabels","gridLength","middle","northLabel","southLabel","westLabel","eastLabel","createTrajectoryCylinder","previousPoint","currentPoint","thetaStart","cylinder","createSemiCylinder","measuredDepthStart","measuredDepthEnd","maybeCreateMarker","depthsOfInterest","depthOfInterest","depthOfInterestCylinder","WellGraphAndGuagesTrajectoryScene","hideAxisLabels","hideGrid","displayCardinalPoints","cylinderArray","pmremGenerator","compileEquirectangularShader","envMapPMREM","fromEquirectangular","createPMREM","gridTickInterval","createGrid","nippleValue","nip","spriteText","getObjectByName","newNipple","translateY","rotateX","existingSprite","BHATool","ToolStringGroupName","createCable","BHA_LENGTH","DefaultCylinderRadius","DefaultFontSize","DefaultTickInterval","objectUp","reusableVector","reusableMatrix","orientationMultiplier","d3Scale","domain","ticks","axisColor","MuiColors","gridColor","xTicks","numTicks","subVectors","lookAt","multiply","mesh","applyMatrix4","createNipple","toolObjects","defaultToolObjects","posX","tool3DObjectUrl","toolObj","isMesh","boundingBox","getCenter","sub","rotateZ","WellboreTrajectoryScene","trajectoryCylinder","legendIcon","legends","Icon","Stop","takeRight","ArrowDropUp","ArrowDropDown","getLegendIcon","hideLegends","setDomElement","threeJsManager","rootRef","dhsvDepth","trajectoryScene","WellboreTrajectoryLegends","useLatestProjectWellboreDetail","latestWellboreDetails","wellDetailsDataState","trajectoryDataState","WellboreTrajectory","setCurrentDepth","latestDepthData","_depth","ProjectWellboreTrajectoryContainer","workItemCompleted","workItemFailed","circularProgress","isWaiting","isPointInTime","InProgressIcon","Pause","Info","TaskCompletedIcon","TaskPlannedIcon","Check","ProjectExecutionStatusTable","totalActivities","WorkItemStatus","initialSequence","initialIndex","prevIndex","WorkItemStatusIcon","disableSortBy","ProjectExecutionStatusContainer","tasksProgress","totalTasks","gutterBottom","WinchCombinedDashboardController","depthCurve","DashboardWellboreTrajectoryContainer","DashboardGaugeChartsContainer","WinchLineAndGaugeDashboardController","WinchWellboreAndGaugeDashboardController","getToolstringTemplatesFromState","getTaskToolstringsFromState","getToolstringSelector","createGetToolstringSelector","getToolstringFromState","getTaskFromState","getTaskByIdFromState","_task$get","getToolstringToolsFromState","getToolstringItemsByIdFromState","getToolstringSectionsSelector","getToolstringSectionsFromState","toolstringSections","toolstringItemsById","getToolstringsByTaskFromState","getTaskCablesFromState","getPlannedToolstringToolsWithStatusFromState","requestProjectWellboreSections","Cylinder","CSG","polygons","csg","p","toPolygons","Node","clipTo","invert","allPolygons","fromPolygons","inverse","flip","_class","fromGeometry","geom","objectIndex","polys","posattr","attributes","normalattr","normal","uvattr","uv","colorattr","array","itemSize","triCount","pli","l","vertices","j","vi","vp","vt","nx","ny","nz","Vertex","Polygon","ttvv0","tmpm3","fromMesh","getNormalMatrix","matrix","pos","copy","applyMatrix3","nbuf3","ct","Float32Array","write","nbuf2","toGeometry","g2","ps","uvs","normals","grps","pvs","pvlen","setAttribute","gbase","gi","addGroup","setIndex","toMesh","toMatrix","toMaterial","inv","computeBoundingSphere","m","decompose","quaternion","setFromQuaternion","castShadow","receiveShadow","Vector","negate","times","dividedBy","lerp","tv0","sqrt","normalize","cross","ax","ay","az","bx","by","bz","dot","_class2","tv1","interpolate","other","Plane","w","splitPolygon","polygon","coplanarFront","coplanarBack","front","back","polygonType","types","plane","f","ti","tj","vj","_class3","fromPoints","c","reverse","temp","clipPolygons","bsp","fromJSON","json","Nipple","innerRadius","cylinderRef","innerShape","outerGeometry","innerGeometry","bspA","bspB","bspResult","Loader","Html","position1","getPointAt","_obj","WellboreTrajectoryDetailed3DView","cDepth","wellboreRef","groupRef","pipeGroupRef","pipes","nipples","useThree","setRadius","pipeSections","setPipeSections","previousDepth","inclination","setInclination","positionX","Pipe","distance","degToRad","StyledBox","styled","Puller","MobileDrawerBase","toggleOpen","disableSwipeToOpen","ModalProps","PaperProps","square","sx","MobileNavigationHelpTooltip","drawerContent","drawerTitle","help","drawerNavType","navType","HtmlTooltip","placement","tooltipIcon","MobileTooltipIcon","pxToRem","viewMode","drawerOpen","setDrawerOpen","HelpIcon","Environment","setEnvMap","gl","hideHelp","materialMap","_domElement","setHelp","prepareHelpData","NavigationHelpTooltip","perspective","near","far","enableZoom","enableRotate","minZoom","mouseButtons","LEFT","PAN","enableDamping","keyPanSpeed","dampingFactor","WellboreTrajectoryDataFetchContainer","taskIdFromQuery","setToolsByToolstringToolId","setBHALength","setToolStringId","setMaxOD","setTaskId","unplannedToolString","setUnPlannedToolString","projectWellboreSectionsSelector","ts","WellboreTrajectoryDetailed3DContainer","BHAGraphAndGuagesController","zoomEnabled","setZoomEnabled","setCamera","controls","setControls","setScene","cameraPosition","setCameraPosition","toolStringGroup","renderCable","ZoomOut","ZoomIn","ProjectWellGraphTrajectoryContainer","WellGraphAndGuagesTrajectory","WellGraphAndGuagesDataContainer","_project$get","_DashboardLayout$name","_DashboardComponent$n","DynamicDockManager","ProjectDashboardContainer","projectDashboardDataState","previousProjectDashboard","isError","NoContentBasePage","BasePageDense","ProjectDashboardDockManager","getSimulationResultSelector","getSimulationFluidSelector","getSimulationFromState","getSimulationsForTaskFromState","getSelectedCablesForTaskFromState","hasPlannedSimulationForTaskSelection","createSimulationResultsByDirectionSelector","simulationResultEntity","_simulationResultEnti","_result$get","createSimulationResultsByDepthAndDirectionSelector","getSimulationCompressionDepth","_simulationResults$fi","_simulationResults$fi2","createSimulationCompressionDepthByDirectionSelector","getSimulationChartSeries","operationLoadPercent","simulationResultDirection","suffix","createAlternativeSeriesId","getConcatenatedNameResult","custom","toggleCompressionEvents","dashStyle","labelName","_series$target","_series$target$chart","_series$target$chart$","compressionSeries","_series$target2","_series$target2$chart","_series$target2$chart2","chartContainerProps","_useSelector","_useSelector2","_useSelector3","_useSelector4","isDirectionHighlighted","toggleDirectionHighlight","isMultisetSimulation","setIsMultisetSimulation","simulationResultSelector","simulationResultsRihSelector","simulationResultsPoohSelector","simulationResultsRihSimulationDirection","simulationResultsPoohSimulationDirection","wellboreTrajectorySelector","simulationResultsRIH","simulationResultsPOOH","simulationResultsRIHSimulationRIH","simulationResultsPOOHSimulationRIH","simulationResultsRIHSimulationPOOH","simulationResultsPOOHSimulationPOOH","wellboreTrajectoryPointsRIH","toMap","wellboreTrajectoryPointsPOOH","forceUnit","dateTimeLabelFormats","allowDecimals","requestSimulation","timestamps","startTimeRIH","endTimeRIH","TimeUnits","startTimePOOH","endTimePOOH","requestTimestampsByUser","UserRoleSelector","addRoleToUser","missingRoleIds","toOrderedSet","DropdownMenu","Trigger","Add","UserAccessContainer","getSortProperty","dispatchRemoveRoleFromUser","rolesColumn","chipRoot","onDelete","getValue","dispatchAddSystemRoleToUser","renderIcon","getKey","dispatchUserAccessOnLoad","SortableList","displaySearchField","defaultSortColumn","SettingsOverviewContainer","parentBreadcrumb","OverviewContainer","parentRoutes","AccessRolesContainer","indexRoute","Redirect","exact","BasePageHeader","onChangeInput","onFocus","onFocusInput","invalidInput","invalid","IconComponent","TextAreaField","inputRef","spellCheck","minRows","maxRows","maxLengthWarning","textareaRef","cursorPosition","setCursorPosition","defaultValue","selectionStart","selectionEnd","getHelperText","FormControl","formControlFullWidth","InputLabel","TextareaAutosize","currentCursorPosition","rootNoLabel","FormHelperText","whiteSpace","fontWeightMedium","TextComponent","ReadOnlyFieldReduxForm","ReadOnlyField","RoleNameField","RoleForm","submit","RoleAccessSummary","isPermissionGroupVisible","permissionGroup","getGroupPermissionsSummary","groupPermissions","has","renderPermissionGroup","groupIndex","renderVisiblePermissionGroups","permissionGroupRoot","visiblePermissionGroups","hasAnyPermission","Paper","permissionGroupsContainer","ProjectRoleOverview","previousProjectRole","initialized","currentProjectRole","dispatchInitializeProjectRoleForm","reduxForm","projectRoleFormOnChange","ProjectRoleContainer","dispatchGetProjectRole","dispatchDeleteProjectRole","displayDeleteBtn","DetailsHeader","NoRoleSelectedPage","SearchIcon","CreateProjectRoleModal","valid","pristine","submitting","withModal","ProjectRolesContainer","onAdd","dispatchToggleModal","renderMenuItem","matchPath","projectRoleUrl","MenuNavigationItem","dispatchGetProjectRoles","dispatchCreateProjectRoleOnSubmit","MenuHeader","menuContainer","withToggleModal","ProjectRoleBreadcrumb","PermissionGroup","handleToggle","onAddPermissions","onRemovePermissions","handleToggleAll","groupName","permissionsById","groupDescription","showSubpermissions","listItemBold","subgroups","primaryTypographyProps","secondaryTypographyProps","ProjectRoleAccessRights","addPermissions","dispatchAssignProjectPermissionsToProjectRole","removePermissions","dispatchUnassignProjectPermissionsFromProjectRole","rootPermission","subPermissionGroup","subGroupIndex","SystemRoleUsers","dispatchGetUsersAssignedToSystemRole","getUsersAssignedToSystemRoleSelector","getUsersAssignedToSystemRoleFromState","SystemRoleOverview","previousSystemRole","currentSystemRole","dispatchInitializeSystemRoleForm","systemAndProjectPermissions","systemAndProjectRolePermissions","systemRoleFormOnChange","SystemRoleContainer","dispatchGetSystemRole","dispatchDeleteSystemRole","SystemRoleBreadcrumb","CreateSystemRoleModal","SystemRolesContainer","systemRoleUrl","dispatchGetSystemRoles","dispatchCreateSystemRoleOnSubmit","SystemRoleAccessRights","addSystemPermissions","dispatchAssignSystemPermissionsToSystemRole","removeSystemPermissions","dispatchUnassignSystemPermissionsFromSystemRole","addProjectPermissions","dispatchAssignProjectPermissionsToSystemRole","removeProjectPermissions","dispatchUnassignProjectPermissionsFromSystemRole","getSubmitLabel","selectedItems","getDepartmentName","useModal","departmentsRef","initialSelectedItems","toSet","selectedDepartments","multiple","onOpen","getName","loadingText","btnRef","buttonRef","HasPermission","instanceOf","oneOfType","arrayOf","useProjectPermissions","requiredPermissions","HasProjectPermission","withNavigation","linkClassName","linkComponent","passThroughProps","MuiPaper","MuiStepButton","TaskDetails","TaskIdProps","TaskRunProps","displayProject","TaskFieldProps","TaskStatusProps","ReadOnlyFieldProps","displayCopyTaskBtn","displayNavigationBtn","displayDeleteTaskBtn","copyTaskDisabled","displayBtn","FileCopy","Delete","NavigationButton","TaskTypeSelect","taskTypes","taskTypesById","QuantityTextFieldReduxForm","restInput","quantityJS","quantityOnChange","ReduxFormTextField","RunNumber","lineHeight","borderStyle","textAlign","selectMenu","flexWrap","checkboxHidden","valueJS","filteredTasks","element","useTaskTypes","editorClassFocus","editorClass","EditorFormik","toolbarHeight","showbarByDefault","editorXS","generalMarginTop","editorMarginTop","labelMarginLeft","isRisk","isFocused","setIsFocused","setShow","editorClassName","Editor","readOnly","onEditorStateChange","handleBlur","toolbarClassName","toolbarStyle","wrapperStyle","handleFocus","toolbar","inline","inDropdown","handlePastedText","_html","currentContent","getSelection","newContent","Modifier","replaceText","saveButton","cancelButton","cell","noPadding","toggleCreateMode","createRiskSection","defaultRiskSection","consequences","probabilities","descriptionEditorState","mitigationEditorState","RiskSectionFormFields","RISK","MITIGATION","CONSEQUENCE","PROBABILITY","setToolbarHeight","setColor","probabilityId","setProbability","consequenceId","setConsequence","handleResize","querySelector","offsetHeight","addEventListener","removeEventListener","renderCell","column","cellClasses","handleChange","isSubmitting","toolbarOnFocus","as","Select","Cancel","tableCellRoot","customStyle","cellRoot","columnPadding","RATING","updateRiskSection","deleteRiskSection","riskSections","convertedRiskSections","setConvertedRiskSections","isCreateMode","currentRiskSections","setCurrentRiskSections","convertedSections","forceUpdate","foundRisk","oldDescription","newMitigation","currentRow","_RiskMatrix$consequen","updatedRiskSection","_RiskMatrix$value$pro","_RiskMatrix$consequen2","_RiskMatrix$consequen3","DeleteIcon","EditableRichTextTableRowFormik","_riskSection","AddIcon","displayNoItemsMessage","TableCellComponent","RiskTableCellDense","CreateRiskSectionRow","useHandleToolbarHeight","progressBarLess","progressBarDisabled","progressBarMore","taskRiskboreSections","defaultTaskRiskSection","currentId","rawObjectiveJson","setRawObjectiveJson","rawDescriptionJson","setRawDescriptionJson","rawCommentsJson","setRawCommentsJson","changeFlag","setChangeFlag","objectiveEditorState","setObjectiveEditorState","setDescriptionEditorState","commentsEditorState","setCommentsEditorState","updateContent","setContent","setEditorState","setContentState","updateValues","rawJson","setRawJson","changeValue","rawValue","JSONValue","oldTextValue","newTextValue","changeObjective","newValue","change","changeDescription","changeComments","initialFormValues","getRawJson","callUpdateTask","objectiveValue","descriptionValue","commentsValue","taskTypesDataState","disableCopyTask","TaskMultipleContingenciesSelect","FieldFormik","RiskSectionsTable","DepartmentSelectField","TASK_MODALS","DATA_AQUISITION_ACTIVE_TAB","mapDispatchToProps","taskDetailsOnLoad","dispatchUpdateTask","updateTaskDetails","syncErrors","removeContingencies","contingency","addContingencies","addContingenciesOk","sequencingOk","lastSequence","savedContigencies","contingencyTaskId","remContigency","newContigency","contingencyCount","dispatchCopyTask","copyAndRedirectToTask","dispatchUpdateTaskServices","dispatchDeleteTask","deleteTaskAndRedirectToTasks","dispatchInitializeEditTaskForm","initializeEditTaskForm","taskContingencies","dispatchRequestCreateTaskRiskSection","requestCreateRiskSection","dispatchRequestUpdateTaskRiskSection","requestUpdateRiskSection","dispatchRequestDeleteTaskRiskSection","requestDeleteRiskSection","dispatchRequestTaskRiskSectionsForTaskRisk","updateTaskDebounced","taskRiskSectionsSelector","EditTaskForm","receivePlannedToolstring","receiveNoPlannedToolstring","useTaskActivities","allActivitiesSelector","createTaskAllActivitiesSelector","EditorStateViewer","html","stateToHTML","dangerouslySetInnerHTML","__html","ActivityCommentModal","ChatBubble","formatToolstringTotalLength","isMap","formatToolstringTotalWeight","formatToolstringToolStatusString","SortableTableRow","sortableElement","onSortEnd","onRowClick","displayComments","hiddenColumns","WorkItemStatusType","DragHandle","itemStatus","SortableTable","useDragHandle","onItemSorted","formatTime","substring","TimeSpanReduxForm","setFormattedValue","setTimeout","setSelectionRange","EditorReduxForm","editorStyle","getActivityTypeOptionLabel","activityType","formValueSelector","selectedActivityType","showWaitingActivities","renderActivityTypeInput","startAdornment","currentActivityTypes","getActivityTypesFromState","isQuickMode","disableCloseOnSelect","AutocompleteField","noOptionsText","renderInput","getOptionLabel","TimeSpanField","resolveSlideDirection","fullScreen","relative","previousNext","buttonLabel","onNext","noOfItems","nextLabel","onPrevious","NextBtnProps","previousLabel","dispatchOnNext","PreviousBtnProps","dispatchOnPrevious","onRightLeftKeyDown","nextPreviousDirection","Slider","Slide","displayNextBtn","displayPrevBtn","focusOnNext","focusOnPrev","onKeyDown","ChevronRightIcon","onCancelClick","hideCloseButton","Toolbar","BackButton","backButton","ChevronLeft","backButtonIcon","appBar","rightToolbarItem","displayBackBtn","fullScreenSubTitle","fullScreenHideSubTitle","routeParams","matchesActiveIndexRouteParam","allItems","matchesModalIdRouteParams","bind","DialogProps","Actions","onEnter","onSaveClick","CustomAppBar","BackdropProps","dialogClasses","saveButtonTitle","TriggerComponent","onClickDialogActions","fullscreenHideCancelBtn","ActionsProps","CustomAppBarProps","childrenProps","FullscreenCancelBtnProps","TransitionProps","onExit","modalOpen","cloneElement","TransitionComponent","Transition","MuiThemeProvider","ModalAppBarFullscreen","ModalAppBar","actionsFullscreen","mapStateToProps","initialProps","goNext","goPrevious","DateTimePickerField","DateTimePickerProps","inputVariant","KeyboardDateTimePicker","autoOk","ampm","FormHelperTextProps","AdjustTimeField","startTimeName","endTimeName","AdjustDurationField","endTimeProps","durationProps","startTimeProps","alignContent","disableFuture","PARTICIPANTSMODAL","SITUATIONSMODAL","SwitchFormik","customTextField","onChangeHandler","wellControlService","updateActivityWcd","getWellControlDrillCategoriesAndSituations","SearchTextFieldFormik","addBtn","test2","accordionDetails","accordionHeader","situationsItem","situationsText","onSearch","selectedSituationItems","setSelectedSituationItems","formValuesContext","onKeyUp","_event$target","_event$target$value","Accordion","AccordionSummary","expandIcon","ExpandMoreIcon","AccordionDetails","selectedSituations","onAddHandler","getWellControlCategoriesFromState","txtSearch","SituationsModal","desc","dialogActionsRoot","clearSelection","useMultiselect","selectedValues","setSelectedValues","checkIfSelected","el","toggleSelection","valueLocal","found","indexOf","CheckBox","CheckBoxOutlineBlank","onExited","AddParticipantsModalContainer","AddParticipantsModal","dispatchFieldCrewOnLoad","contentContainer","footer","_activityForm$comment","_activityForm$comment2","activityForm","activityCommentsEditorState","activityStartTime","activityEndTime","handleClick","_values$comments","evaluationStringified","updatedValues","isOpenParticipants","toggleModalParticipants","isOpenSituations","toggleModalSituations","PeopleIcon","DateTimePickerFormik","SituationsModalContainer","formSelector","ExecutionFields","Fields","FormContent","disableEditing","EditActivityForm","WellControlDrillActivityContainer","editDataState","deleteDataState","downloadDataState","autosaveDataState","dispatchDeleteActivity","dispatchDownloadActivityReport","anyLoadingDataState","isAutosaving","EditActivityModalContainer","_this","passResetIntoHandleSubmit","updateActivityDataState","dispatchOnEnterEditActivityModal","EditActivityModalActions","hideable","endTimeValue","FORM_FIELDS","startTimeValue","previousActivityStartTimeValue","isAfter","isBefore","useRealTimeNotifications","dispatchGoBack","dispatchCompleteActivity","dispatchCreateActivity","dispatchDuplicateActivity","dispatchUpdateActivity","dispatchUpdateActivityTimes","dispatchPauseActivity","dispatchCreateNewPointInTimeActivity","EditActivityModalContainerWithNotification","handleSubmitWithNotification","updateActivityFormOnSubmitWithNotification","newProps","saveValuePairs","rows","setRows","onCloseModal","mappedData","SelectingMenu","deleteValuePairs","isAddButtonDisabled","getAvailableOptions","selectedKey","selectedIds","getAvailableOptionsTools","handleActivityChange","updatedRows","handleToolChange","selectedTool","handleDeleteRow","handleAddRow","SetAndRetrieveItemModalHeader","SetAndRetrieveItemModalFooter","checkIfNotASubActivity","dispatchSortActivities","dispatchSelectActivity","dispatchRefreshProjectStatus","dispatchToggleCreateActivityModal","dispatchLoadAndFilterPlannedToolstring","loadAndFilterPlannedToolstring","createActivityBtn","filteredTaskActivities","argProjectId","argTaskId","setRetrieveItemModal","toggleSetRetrieveItemModal","TaskActivitiesTable","CreateActivityModalContainer","SetAndRetrieveItemModalContainer","CreateSimulationForm","dispatchCreateSimulation","submitCreateSimulation","initialName","NoSimulationSelectedPage","CardNavigationItemData","CardNavigationItemHeader","renderHeaderAction","CardActions","isMatch","useRouteMatch","NavLink","raised","CardNavigationItemActions","RadioGroupField","formControl","FormLabel","RadioGroup","frozen","Radio","formControlLabelRoot","flexGrow","flexBasis","checkedRadio","PlannedIndicator","onToggle","isDisabled","fontVariant","SimulationCardNavigationItem","onDuplicate","toggleFavorite","FavoriteButton","isFavorite","DuplicateIcon","CardNavigationItem","TaskSimulationsContainer","dispatchRequestDeleteSimulation","currentSimulationId","dispatchRequestDuplicateSimulation","dispatchRequestToggleSimulationFavorite","menuItems","onToggleFavorite","onDeleteSimulation","onDuplicateSimulation","CreateSimulationModal","NoToolstringSelectedPage","CreateToolstringForm","FORM","TableHeaderTitleCell","tableRowExpanded","detailsRoot","detailsRootLightBackground","collapseRoot","rootExpanded","renderDetails","defaultIsExpanded","hasLightBackground","toggleExpanded","Collapse","scrollable","overflowY","fontSizeTitle","titleContainer","titleBox","_template$getIn","_template$getIn2","_template$getIn3","_template$getIn4","setTemplate","templateID","toolstringTemplate","TableCellDense","TableHeaderCellComponent","TableHeaderCellDense","ToolstringTemplateTableRow","isRowExpanded","ToolstringTemplateToolsTable","toolstringItems","TableRowExpandable","ToolstringTemplatesTable","onCreate","BHA_OPTIONS","bhaValidationSchema","yup","CreateToolstringModal","onSubmitNew","dispatchCreateToolstringForTask","onSubmitFromTemplate","dispatchCreateToolstringFromTemplateForTask","dispatchGetTemplates","Tabs","indicatorColor","validationSchema","submitCreateToolstringForTask","submitCreateToolstringFromTemplateForTask","plannedIcon","onEdit","fromNow","CheckCircleIcon","EditIcon","TaskToolstringsContainer","dispatchGetToolstringTemplates","dispatchToggleToolstringFavorite","dispatchDeleteToolstringAndRedirect","dispatchRedirectToTaskToolstringEdit","dispatchDuplicateToolstringAndRedirect","currentPathMatch","selectedToolstringId","ToolstringCardNavigationItem","requestTaskToolstringsPageOnLoad","requestToolstringTemplates","h5","notchedOutline","onNameChange","togglePlanned","isEnableSimulationRunButton","canResimulate","runSimulationDataState","hasExistingPlanned","taskStatus","EditableTitle","disabledTooltip","startIcon","requestRunSimulation","getToolsSearchResultFromState","getCablesFromState","getToolGroupsFromState","getToolConnectorsFromState","getToolTopConnectorsFromState","getToolSuppliersFromState","getToolBottomConnectorsFromState","getToolProjectHistoryFromState","onSelectCable","sortType","weightKey","CablePickerModalHeader","CablePickerModalTable","CablePickerModalContainer","loadingDataState","CablePickerModal","requestCablesByProject","inputHover","handleOnClick","ArrowDropDownIcon","CableDetails","cableTooltip","selectedCable","interactive","TextFieldCustomSelect","SimulationResultsChart","simulationResultsRih","simulationResultsPooh","tabKey","setChartOptions","simulationChartSeries","simulationChartSeriesRih","simulationChartSeriesPooh","compression","getSimulationCompressionDepthSeries","dir","showInLegend","_SimulationCharts$fin","u","xLabel","plotLines","h","pointer","chartPosition","getPosition","oneToOne","QuantityTableHeaderTitleCell","headersContainer","headerRow","headerGroups","headerGroup","headers","getHeaderGroupProps","SimulationResultsTableHeaderCell","SimulationResultsTableCell","TableHeaderComponent","SimulationResultsTableHeader","noResultsMessage","hint","chartFullscreen","chartRegular","fullScreenRef","activeTab","setActiveTab","activeTableTab","setActiveTableTab","simulationResultsByDepth","simulationResultsByDepthRih","simulationResultsByDepthPooh","workingLimitSafetyFactor","disableUnderline","simulationDashboardRoutes","SimulationResultsTable","activeTableTabHandler","onToolstringChange","_toolstrings$find","isPageLoaded","SimulationExportModalChartSelect","isChartSelected","availableCharts","onToggleChartSelect","unCheckItems","check","chartType","ListItemIcon","onExport","setCollapseAssemblies","availableChartsSorted","A","B","selectedCharts","toggleSelect","unitSystem","ExportPdfIcon","dispatchDownloadSimulationPdfReport","downloadSimulationPdfReport","charts","getAvailableCharts","onExportSimulation","exportSelection","SimulationExportModal","CUSTOM_UNIT_CONVERSION","meters","feet","getSystemByMeasure","getUnitAlias","convertUnit","param","convertFrom","toSystem","findKey","aliases","convert","describe","convertTo","convertedValue","conversionUnit","conversionFunc","getConversion","defaultConversion","conversions","MetricImperial","formatFn","userMeasurementSystem","projectMeasurementSystem","userMeasurementPreferences","projectMeasurementPreferences","result_value","result_unit","convertedUnit","ToolDetails","toolGroupName","onHighlight","onHighlightAssembly","onHoverScale","onHoverDarken","toolName","ImageProps","highlighted","toolImageUrl","assembly","defaultImage","setImage","setDefaultImage","isSubscribed","loadImage","crossOrigin","toBlob","URL","createObjectURL","ToolstringPreviewEmpty","WarningIcon","BreakpointThumbIcon","darkText","rootPrimary","thumbText","thumbTextDark","shadows","breakpointAnchor","breakpoint","toggleable","hasBreakpoint","onToggleBreakpoint","checkedIcon","ToolstringItemHighlightContext","useHighlightedToolstringItem","highlightedItemId","setHighlightedItemId","isItemHighlighted","ToolstringItemHighlightProvider","highlightedItemState","hideToolDetails","hideBreakpoints","toggleableBreakpoints","toolstringTool","showBreakpoint","onMouseEnter","onMouseLeave","ToolImageContainer","ToolstringPreviewBreakpoint","ToolstringDataValue","ToolstringPreviewDetails","dataValues","dataValue","_createElement","ToolstringPreviewContainer","prop","paddingTopPreview","editIconAnchor","editIcon","warningIcon","canEdit","isDataVerified","toolstringTools","ToolstringPreviewImages","dispatchGetToolstring","toolstringContainer","toolDataIsVerified","setToolDataIsVerified","checkToolDataVerification","allToolsVerified","TaskSimulationToolstringPreview","_initialState","dispatchUpdateSimulation","dispatchDeleteSimulation","dispatchDuplicateSimulation","dispatchToggleSimulationPlanned","requestToggleSimulationPlanned","isCurrentlyPlanned","newState","actionWithoutConfirmation","dispatchToggleSimulationFavorite","isCablePickerModalOpen","toggleCablePickerModal","CABLE_MODAL","isSimulationExportModalOpen","toggleSimulationExportModal","SIMULATION_MODAL","onTogglePlanned","onUpdateSimulation","onCableChange","headerActions","SimulationHeader","SimulationProjectInformation","SimulationResultsContainer","TaskSimulationCableSelect","TaskSimulationToolstringSelect","TaskSimulationToolstringContainer","SimulationExportModalContainer","RunSimulationProgressBar","TaskToolstringHeader","LockOpenIcon","_toolstring$getIn$toF","_toolstring$getIn","_toolstring$getIn$toF2","_toolstring$getIn2","maxAvailableHeight","totals","weightUnit","diameterUnit","_row$original$get","hasAttachments","less","more","HideAttachments","ShowAttachments","hasNullDataVerified","ToolstringToolsTableRow","TaskToolstringTotals","sectionContainer","borderRight","sectionLengthText","showBreakPoint","toolstringSection","sectionIndex","_toolstringSection$ge","isLastSection","itemsInSection","lastSectionItem","flatItems","assemblyTools","assemblyItem","maxBy","sumRatios","itemsWithInitialRatios","ratio","itemsWithRatioFlat","adjustedRatio","updatedItemsInSection","topLevelItem","topLevelItemId","updatedTopLevelItem","flatItem","updatedAssemblyTools","assemblyItemId","updatedAssemblyItem","isLastToolInSection","toolstringLength","_toolstringItem$exter","externalToolImage","dispatchToggleToolstringItemBreakpoint","requestToggleToolstringItemBreakpoint","editable","toolAssemblyCreator","placeHolderAlignBha","ToolAssemblyCreatorToolstringPreviewSection","ToolstringPreviewSections","onUpdateToolstring","toolstringJS","multiline","dispatchUpdateToolString","cableName","InfoIcon","Styles","dispatchDownloadToolstringPdfReport","downloadToolstringPdfReport","onExportToolstring","TaskToolstringExportModal","NoToolsMessage","dispatchUpdateToolstring","dispatchToolstringSections","toolstringPreview","isToolstringExportModalOpen","toggleToolstringExportModal","latestWellboreDetail","PictureAsPdf","isEmptyToolstring","TaskToolstringPreview","TaskToolstringDetailsHeader","ToolstringToolsTable","TaskToolstringComments","TaskToolstringExportModalContainer","defaultInitialState","_row$get","_row$original$toolAss","getHiddenColumns","activeCategory","rowActionCell","paddingRght","toolContainer","onAddTool","thirdPary","ToolImageTableCell","ToolPickerModalHeader","onRefreshTools","RefreshIcon","defaultValidate","defaultGetSubmitLabel","MultiSelectTextFieldFormik","itemsById","_item$get","validateSerialSearch","ToolPickerModalFilters","suppliers","activeFilters","topConnectors","toolCategories","bottomConnectors","onChangeCategory","enabledToolCategoryTypes","ToolPickerModalTable","dispatchOnSearch","toolPickerModalOnLoad","dispatchOnRefreshTools","requestRefreshToolsWithM3","dispatchOnChangeCategory","onToggleModal","setFilters","setActiveCategory","enabledToolCategories","handleSearch","getByStatus","ToolPickerModal","UseFacilityProjectDecks","getFacilityProjectDecks","toolstringName","EditableTableRowFormik","autoCompleteValue","setAutocompleteValue","formFieldName","setInitialFieldValue","valueSelectorFromAutocomplete","fetchAutocompleteDataAction","clearInputValue","setOptions","setInputValue","autoCompleteLengthError","setAutoCompleteLengthError","newOptions","Autocomplete","disableClearable","filterOptions","InputLabelProps","ClearIcon","onInputChange","newInputValue","newFormFieldValue","AutocompleteTextFieldAdapter","setM3ItemNumber","isThirdPartyTool","setThirdPartyTool","setInputFieldValue","_form$values","_form$values4","_form$values6","_form$values2","_form$values3","_form$values7","_form$values5","selectedValue","findM3ItemsBySerialNumberAndStatus","m3itemNumber","TableRowAutocompleteTextFieldFormik","minDate","KeyboardDatePicker","TimeSpanFormik","secondsToTime","timeToSeconds","AssetHistoryForm","MODE","TYPE_OF_EVENT","TYPE_OF_TEST","RESULT","DATE","TIME","TYPE","CABLE_CUT","CABLE_SIGNAL","CABLE_RESISTANCE","WRAP_TEST","STORAGE_TYPE","BOP_LEAK_TYPE_DESCRIPTION","BOP_LEAK_TYPE_DESCRIPTION_VALIDATION","CABLE_TORSION_WRAP","CABLE_WRAP_TEST_STRAND","CABLE_WRAP_TEST_STRAND_PASS_X","CABLE_WRAP_TEST_STRAND_OUT_Y","CABLE_TORTURE_TEST_OUTER_ARMOUR_DUCTILITY_SCORE","CABLE_TORTURE_TEST_INNER_ARMOUR_DUCTILITY_SCORE","CABLE_CONTINUITY_TEST_RESISTANCE","CABLE_INSULATION_TEST_RESISTANCE","ASSET_SIL2_TEST_BOP","ASSET_SIL2_TEST_BCS","ASSET_SIL2_TEST_CABIN","CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_PASS_X","CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_OUT_OF_Y","CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_PASS_X","CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_OUT_OF_Y","CABLE_BREAK_TEST_FORCE","CABLE_CUT_MAINTENANCE_DISTANCE","CABLE_SERVICE_MAINTENANCE_CABLE_LENGTH","CABLE_SERVICE_MAINTENANCE_MAX_OD","CABLE_SPOOLING_DRUM_ITEM_NUMBER","CABLE_SPOOLING_DRUM_SERIAL_NUMBER","BopTestFormComponent","_BOP_LEAK_TYPE$find","getId","isOtherSelected","bopLeakTypeDescription","BopTestCustomComponent","CableTorsionTestFormComponent","CableWrapStrandFormComponent","CableTortureStrandFormComponent","CableContinuityFormComponent","CableInsulationFormComponent","Sil2FormComponent","sil2TestBopItems","sil2TestBcsItems","sil2TestCabinItems","CableWrapBraidedMonoTestFormComponent","QuantityTextFieldFormik","fieldValue","createDefaultQuantity","checkForRoundedValue","CableBreakTestFormComponent","TestForm","testTypesItems","defaultTestTypeValue","unitsOfMeasurePreference","resultIcons","Pass","GreenIcon","OrangeIcon","Fail","RedIcon","strandInnerSections","setInnerStrandSections","cableWrapStrands","setCableWrapStrands","strandOuterSections","setOuterStrandSections","combinedSections","selectedTestType","SelectedComponent","AssetTestType","CustomComponent","maxIconWidth","inputname","CableSpoolingStorageTypeEnum","addToStorageReel","addToSpecificDrum","AssetHistoryYupValidator","when","is","otherwise","notRequired","typeOfTest","bopLeakType","integer","AssetHistoryInitialFormValues","defaultEventValue","AssetHistoryFormValues","assetId","assetSil2Bop","assetSil2Bcs","assetSil2Cabin","splitedFormValues","startDate","externalTaskId","cableCut","cableSignal","cableResistance","torqueInnerStrand","torqueOuterStrand","wrapTest","bopRam","cableTorsionWrap","strandsPassed","item1","strandsPassedPassX","item2","strandsPassedOutY","outerArmourDuctilityScore","innerArmourDuctilityScore","resistance","cableInsulationResistance","cableWrapBraidedMonoTestInnerStrand","cableWrapBraidedMonoTestInnerStrandPassX","cableWrapBraidedMonoTestInnerStrandOutY","cableWrapBraidedMonoTestOuterStrand","cableWrapBraidedMonoTestOuterStrandPassX","cableWrapBraidedMonoTestOuterStrandOutY","cableBreakTestForceNumber","distanceQuantity","cableLengthQuantity","maxODQuantity","getToolsFromState","getToolAssembliesFromState","getToolFromState","getBhaTemplatesFromState","getEquipmentTemplatesFromState","getUnitsOfMeasurePreference","getSurfaceEquipmentFromState","getSurfaceEquipmentCategoriesFromState","getSurfaceEquipmentByIdFromState","getSurfaceEquipmentGroupsFromState","getAssetHistoryFromState","getCableFromState","getCableTestDetailsFromState","getTemplateForEditFromState","getTemplateSectionsForEditFromState","templateSections","getTemplateToolstringToolsFromState","getEquipmentAssetsFromState","CableCutMaintenanceFormComponent","CableServiceMaintenanceFormComponent","AutoCompleteDrumItemNumberAdapter","autoCompleteItemNumber","setAutoCompleteItemNumber","AutoCompleteDrumSerialNumberAdapter","RadioGroupFieldFormik","updatedOptions","CableSpoolingMaintenanceFormComponent","storageTypeValue","typeOfEventValue","isAddToSpecificDrum","isEventOfMaintenanceType","MaintenanceForm","maintenanceTypeItems","defaultMaintenanceTypeValue","selectedMaintenanceType","AssetMaintenanceType","CABLE_SERVICE","CABLE_SPOOLING","GENERIC","CABLE","TEST_STRING","triggerIconRoot","gridBackground","gridBackgroundMobile","statusHeader","containedButton","containedButtonGrey","assetHistoryEventTypes","modalTitle","measurePreferences","getUnitForCustomUnit","projectCustomPreferences","convertEditorContentToJson","AssetFormContent","showTestFields","showMaintenanceFields","formFields","DatePickerFormik","TooltipAvatar","immutable","_tools","SortableFormikRow","getConnectorName","onDuplicateItem","onAddToolAttachments","onSortToolstringTool","updateItemProperties","onDeleteToolstringTool","onAddToolAssemblyTools","onDeleteToolAssemblyTool","onDeleteToolstringAttachment","showCustomActions","widthSerialColumn","templateEditor","hideDragHandle","disabledSerialNumbers","disableToolStatus","setSerialNumber","setToolId","openModal","ToolStatusMenu","setValue","showOptions","complaintMenuItem","OpenInNewIcon","MoreVert","PlaylistAddIcon","_row$original$get2","hideAssemblySerialNumber","hasAttachedTools","connectorId","supplier","isToolstringAssemblyTool","isToolstringAssembly","isToolstringAttachment","AttachIcon","filteredActions","visibleColumns","autoResetExpanded","CreateAssetHistoryModalContainer","TaskToolstringEditorContentHeader","onAddTools","TaskToolstringEditorContent","showHeader","TaskToolstringEditorToolsTable","breakpoints","TaskToolstringEditorAppBar","BlockIcon","toolstringItemCategories","toolstringAssemblyToolCategories","dispatchGetToolConnectors","dispatchSortToolstringTools","dispatchUpdateToolstringItem","requestUpdateToolstringItem","dispatchDeleteToolstringTool","requestDeleteToolstringTool","dispatchCreateToolstringTool","requestCreateToolstringTool","sequenceNumber","dispatchRedirectToTaskToolstring","redirectToTaskToolstring","dispatchDuplicateToolstringItem","requestDuplicateToolstringItem","dispatchSortToolstringAssemblyTools","requestSortToolstringAssemblyTools","dispatchCreateToolstringAssemblyTool","requestCreateToolstringAssemblyTool","dispatchDeleteToolstringAssemblyTool","requestDeleteToolstringAssemblyTool","dispatchCreateToolstringAttachment","dispatchDeleteToolstringAttachment","requestDeleteToolstringAttachment","dispatchSortToolstringAttachments","requestSortToolstringAttachments","projectWellboreDetailsDataState","facilityDeckValue","setFacilityDeckValue","_latestWellboreDetail","maximumRigupHeight","selectedToolstringAssembly","setSelectedToolstringAssembly","selectedToolAttachmentOwner","setSelectedToolAttachmentOwner","toolstringItemModalOpen","toggleToolstringItemModal","toolstringAssemblyToolModalOpen","toggleToolAssemblyToolModal","toolstringAttachToolModalOpen","toggleToolstringAttachToolModalOpen","onAddToolstringAssemblyTools","toolstringAssembly","onAddToolstringItem","onAddToolstringAssemblyTool","onExitAddTool","onDeleteToolstringItem","onSortToolstringItem","_nodes$oldIndex","_nodes$oldIndex$node","collection","nodes","getAttribute","toolType","sortedToolstringItem","affectedToolstringItem","sortedToolStringAttachment","affectedToolStringAttachment","TaskToolstringEditor","toolStringAttachment","ToolPickerModalContainer","wellboreContainerOnLoad","Route","eventItem","centerRow","eventlist","eventText","emptyIcon","noEvents","kind","EventIcon","disableTypography","ListItemAvatar","dispatchSetSubPage","newTitle","newSubTitle","RootProps","subRootRef","LeftContent","RootContent","RightContent","SubRootProps","MainRootProps","RootContentProps","LeftRootProps","sticky","leftContentSticky","RightRootProps","rightContentSticky","LeftContentProps","RightContentProps","subRoot","leftRoot","gridItem","stickyGridItem","mainRoot","rightRoot","scrollIndividually","WellEventsContainer","EventList","useWellbore","wellboreSelector","wellboreDetailSelector","getWellboreDetailByIdFromState","_wellbore$get","WELL_OVERVIEW_ACTIONS","TrajectoryViewType","WellboreTrajectoryViewToggle","viewType","setViewType","ThreeDRotation","ViewColumn","IntegrityRiskMatrixValueComponent","VerticalProgressContainer","Marker","IntegrityMatrixDetailsComponent","markerPosition","HorizontalProgressContainer","IntegrityMatrixComplianceComponent","myToolbar","tableSpacing","columnWidth","roundedCell","coloredCell","centeredContent","writingMode","borderNone","headerRowSpacing","borderSpacing","riskMatrixContainer","riskMatrixDetails","riskMatrixDetailsContents","riskMatrixDetailsContainer","riskScore","riskScoreBox","filteredIntegrities","finalScore","getBackgroundColor","setMatrix","integrityScore","setIntegrityScore","complainaceScore","setComplainceScore","complaince","setCompliance","ruleGrid","riskPrincipleScore","numberOfComplaince","numberOfDocumentsAvailable","complaincePercentage","noOfAttachments","initialGrid","minThreshold","riskPrincipleThreshold","maxThreshold","weightCategories","complainceList","processCategories","processDetails","subCategory","detailsArray","parentWeight","_rule$value","mappedScore","mapScoreThreshold","minScore","maxScore","normalized","rowIndex","colIndex","validRow","numRows","validCol","numCols","ReversedRiskMatrix","TableBody","cellIndex","rowSpan","colSpan","getIntersectionNumber","getIntegrityManagementIntegritiesFromState","getIntegrityManagementIntegritiesFromStateByRiskPrinciple","riskPrincipleType","integrityType","getIntegrityManagementWellIntegrityAttachmentsFromState","getIntegrityManagementAvailableFilesState","getIntegrityManagementWellRiskScoresTrendState","getIntegrityManagementWellIntegrityHistoryFromState","getSelectedIntegrityRule","integrityManagementService","getIntegrityManagementIntegrities","getIntegrityManagementIntegrity","deleteIntegrityManagementIntegrity","addNewIntegrityManagementIntegrity","updateIntegrityManagementIntegrity","getIntegrityManagementIntegritiesForWell","addNewIntegrityWellData","getIntegrityManagementWellIntegrityAttachments","getIntegrityManagementAvailableFiles","uploadAndUpdateIntegrityManagementWellAttachments","modifyIntegrityManagementWellAttachments","getIntegrityManagementRiskScoreTrendForWell","previewIntegrityManagementProjectAttachments","previewIntegrityManagementWellboreAttachments","getIntegrityManagementWellIntegrityHistory","getRuleById","ruleId","loadIntegrityManagementIntegrities","loadIntegrityManagementIntegritiesForWell","loadIntegrityManagementWellIntegrityAttachments","loadIntegrityManagementAvailableFiles","loadIntegrityManagementRiskTrendScoresForWell","previewIntegrityManagementProjectDocument","previewIntegrityManagementWellboreDocument","dispatchLoadIntegrityRiskScoreTrendForWell","chartData","setChartData","newRiskTrendScores","totalScoreDate","totalScoreCalculation","valueOf","labelColor","purpleColor","plotBorderWidth","removeEmptyIdItems","filteredData","removeItemsByIntegrityId","idToRemove","updateTitleForNullId","updateRecursive","calculateFinalScore","_integrity$riskPrinci","currentScore","filteredIntegritiesLikelihood","filteredIntegritiesConsequence","dispatchLoadIntegrityManagementForWell","INTEGRITY_GRAPHS_TABS","setFinalScore","setExternalWellboreId","handleTabs","WellIntegrityRiskTrendChart","IntegrityRiskMatrix","HasSystemPermission","getWellProjectsFromState","WellDashboardProjectTableRow","WellDashboardProjectByStatus","WellDashboardProjectsTable","validateCreateProjectForm","objectiveService","getObjectives","CreateProjectModalAppBarTextField","isActive","clearFields","setCurrentIndex","selectedItemId","focus","Search","appBarRoot","inputContainer","focusVisible","useWellboreTrajectory","_trajectory$get","CreateProjectModalMap","chipContainer","chipDisabled","visibleItem","getItemLabel","getItemId","itemDisabledTitle","itemLabel","onSelectItem","chipLabel","itemGroup","isItemDisabled","CreateProjectModalListItem","GROUPS","defaultGroupBy","activeItem","itemSearch","setSearch","matchingItems","clearSearch","useTextSearch","dataItems","customGroupBy","groupedDataItems","groupedItems","groupedFacilityItems","CreateProjectModalListGroup","modalContent","wellboreTrajectoryRoot","scrollTo","scrollTop","wellboreTrajectoryClasses","WellboreTrajectoryContainer","CreateProjectModalContentItem","getItemIdDefault","getItemLabelDefault","CreateProjectModalForm","setWellbores","objectives","setObjectives","setOrganizations","initialFieldId","initialWellboreId","initialFacilityId","initialOrganizationId","selectedFieldId","selectedWellboreId","selectedOrganizationId","getOrganizationsBySelectedField","getOrganizations","getOrganizationsDataState","useRequestWithDataState","getWellbores","getWellboresDataState","getFieldsDataState","getObjectivesWithDataState","getObjectivesDataState","getFacilitiesByFieldId","getFacilitiesByFieldIdDataState","clearFormFields","initialValue","setNextActiveIndex","onSelectOrganization","onSelectField","onFocusOrganization","onFocusField","getFieldsByOrganization","getWellboresByField","getFacilitiesByField","isOrganizationVisible","organizationItem","isVisible","fieldDisabled","fieldItem","wellboreItem","facilityItem","objectiveItem","_item$isVisible","_item$getItemId","_item$getItemLabel","selectedWellbore","CreateProjectModalAppBar","CreateProjectModalContent","CreateProjectModalActions","defaultInitialValues","dispatchSubmitCreateProjectForm","submitCreateProjectForm","createdProject","getInitialItem","CreateProjectFromWellboreModalContainer","initialFacility","initialOrganization","CreateProjectModalContainer","labelCell","WellboreTrajectoryDetails","WellboreTrajectoryTableView","tableContainer","overflowX","trajectoryPreview","onUnitSystemChange","trajectoryFile","getTrajectoryPreview","setModalOpen","setUnitSystem","handleOnClose","handleGetTrajectoryPreview","handleOnTrajectoryUpload","WellboreTrajectoryPreviewModal","createWellboreSectionsForWellboreSelector","DrawCylinder","isHalf","_cylinderRef$current","_cylinderRef$current2","YAxis","TextSprite","attach","YAxisLabels","ThreeFiberSceneWrapper","maxNE","fov","makeDefault","RenderLayer","layerRef","DrawNipples","nippleRef","nippleTextRef","WellboreContextTrajectory","trajectoryRef","groundLayerRef","depthMarkerRef","setMaxTVD","setMaxNE","setDhsvDepth","setMaximumWorkingDepth","waterDepth","setWaterDepth","materials","setMaterials","refFlag","setRefFlag","soilAOMap","soilDispMap","soilNormalMap","soilMap","soilRoughnessMap","waterAOMap","waterDispMap","waterNormalMap","waterColorMap","waterRoughnessMap","startVectorGround","endVectorGround","WellboreContext3DContainer","WellboreContextTrajectoryContainer","trajectorySelector","dispatchUploadWellboreTrajectory","fileUnitSystem","dispatchGetWellboreTrajectoryPreview","dispatchDownloadTrajectoryTemplateCsv","dispatchDownloadTrajectoryTemplateTxt","dispatchGetTrajectoryFromWellcomApi","dispatchDownloadTrajectorySurveyCsv","dispatchDownloadTrajectorySurveyTxt","actionsButton","createProjectButton","graphs","dragOver","stickySection","topContainer","trajectoryArea3d","trajectoryFileToUpload","setTrajectoryFileToUpload","onDrop","isDragActive","getRootProps","getInputProps","openTrajectoryFilePicker","useDropzone","noClick","noKeyboard","isActionsPopupOpen","setActionsPopupOpen","_trajectory$get2","UploadIcon","DownloadIcon","dynamicStyles","LoadingOverlayProps","WellboreContextTrajectory3DView","WellIntegrityGraphs","WellDashboardProjectHistory","SpeedDial","SpeedDialIcon","MenuIcon","openIcon","ariaLabel","reason","SpeedDialAction","tooltipOpen","tooltipTitle","FabProps","WellboreTrajectoryPreviewModalContainer","wellboreFileService","downloadWellboreFile","uploadWellboreFile","deleteWellboreFile","getAllWellboreFiles","updateWellboreFile","downloadFile","receiveWellboreFiles","wellboreFiles","receiveWellboreFile","projectFileService","uploadFile","deleteFile","getAllDocuments","updateFile","getAllChecklistsAndProcedures","receiveChecklistsAndProcedures","projectFiles","receiveProjectFiles","receiveProjectFile","projectFile","ALTUS_ORGANIZATION_CODE","createCheckToShowCategoryFn","userOrganization","isCategoryInternal","isUserInAltusOrganization","useIsInternalCategoryToShow","hydrateUserOrganization","userOrganizationId","uploadFiles","dialogContentText","rejectedFiles","enableFileCategories","isShowCategory","initialError","errorMessage","formatFileSize","nowrap","cat","documentCategoriesById","downloadProjectFile","Footer","SaveIcon","getWellboreFilesFromState","categoryCount","internalCategory","documentCategories","isAltus","clearFilters","setFilter","setFilterApplied","checkIfCategoryIsInternal","_checkIfCategoryIsInt","docPerCat","_action$get","numOfFilesInCategory","updatedFilter","toggleCategoryFilter","dispatchDropFiles","dispatchDeleteFile","dispatchUpdateFile","wellborefile","dispatchUploadFiles","uploadDocumentFormValues","dispatchDownloadFile","dispatchDownloadProjectFile","documentList","filterApplied","filteredDocuments","documentCategory","fileRejections","maxSize","DocumentsCategoryFilter","checkIfUserOrgIsAltus","currentOrg","org","WellboreFilesTable","UploadDocumentModal","renderActions","FormSectionHeader","addedHostileFluids","availableHostileFluids","hostileFluidId","hostileFluidName","hostileFluid","hostileFluidsDataState","FormSection","HostileFluidsFields","WellPropertiesSection","WellInformationSection","FluidTableRow","fluidTypeToString","rheologyModelToString","multiphaseTypeToString","multiphaseType","gasTypeToString","gasType","FluidsTable","defaultFluid","fluid","AddCircleOutlineIcon","GasFormSection","PowerLawLiquidFormSection","NewtonianLiquidFormSection","BinghamPlasticLiquidFormSection","HerschelBulkleyLiquidFormSection","LiquidFormSection","formSections","MultiphaseLiquidFormSection","BlackOilMultiphaseFormSection","MultiphaseFormSection","FluidSurfaceProperties","FluidFluidIdentification","FluidForm","selectedFluidType","selectedRheologyModel","selectedMultiphaseType","selectedGasType","EditFluidForm","isCreateModeRef","CreateFluidForm","FluidEditorHeader","FluidEditor","useIncludeProjectIdToArguments","FluidsFormSection","parentFluidObjectId","dataStateActions","requestFluidsAction","requestDeleteFluidAction","requestCreateFluidAction","requestUpdateFluidAction","getFluidsSelector","sectionTitle","setFluidId","defaultProjectFluid","rowFluidId","selectedFluid","updatedObj","newFluid","FluidsFormSectionWellbore","FluidsFormSectionProject","requestGetProjectFluidsExt","getDefaultProjectFluidExt","requestDeleteFluidExt","requestCreateFluidExt","requestUpdateFluidExt","FluidsFormSectionDataAcquistion","requestGetTaskFluidsFn","getDefaultFluidFn","requestDeleteTaskFluidFn","requestUpdateTaskFluidFn","requestCreateTaskFluidFn","WellboreDetailsFormBase","WellInformationFormSection","WellPropertiesFormSection","HostileFluidsFormSection","ProjectWellboreDetailsAndFluids","WellboreDetailsAndFluids","dispatchUpdateWellboreDetail","updatedWellboreDetail","defaultWellboreSection","topValue","getTopValue","pop","_Array$from$pop","initialTopValue","validateTopValues","validateRequired","validateTopBottomValues","_topValue","bottomValue","currentTopValue","FRICTION_FACTOR_IN","FRICTION_FACTOR_OUT","TOP","fadeIn","onKeyPress","BOTTOM","WellboreSectionFormFields","WellboreSectionsTable","currentWellboreSections","setCurrentWellboreSections","wellboreSectionIdForCreate","setWellboreSectionIdForCreate","projectWellboreStatus","isApproved","indexes","disableCell","_wellboreSection","CreateWellboreSectionRow","CreateWellboreSectionNippleRow","dispatchRequestCreateWellboreSection","requestCreateWellboreSection","dispatchRequestUpdateWellboreSection","requestUpdateWellboreSection","dispatchRequestDeleteWellboreSection","requestDeleteWellboreSection","dispatchRequestCreateWellboreSectionNipple","requestCreateWellboreSectionNipple","dispatchRequestUpdateWellboreSectionNipple","requestUpdateWellboreSectionNipple","dispatchRequestDeleteWellboreSectionNipple","requestDeleteWellboreSectionNipple","dispatchRequestWellboreSectionsForWellbore","wellboreSectionsSelector","WellboreElementsTable","getWellboreRevisionSelector","dispatchRequestWellboreRevisionForWellbore","requestWellboreRevisionForWellbore","dispatchRequestWellboreRevisionFromWellcom","requestWellboreRevisionFromWellcom","getWellboreRevisionFromWellcom","wellboreRevisionSelector","getWellboreRevisionForWellboreSelector","wellboreRevision","SimulationFluidsTable","inPlanning","defaultSimulationFluid","SimulationFluidEditor","SimulationFluidTableRow","navigateToFluid","TaskSimulationFluidsContainer","selectedSimulationFluidId","createSimulationFluidsSelector","requestSimulationFluids","selectedSimulationFluid","requestDeleteSimulationFluid","requestUpdateSimulationFluid","requestCreateSimulationFluid","textAreaField","createStyles","gridStyle","simulationSelectorStyle","iconStyle","TaskSimulationOptionsContainer","compressionDepthRih","compressionDepthPooh","rihValue","poohValue","requiredBetween","lastSimulationParameter","endDepth","startDepth","gasRate","cableSpeed","axialForceOnEnd","wellheadPressure","defaultSimulationParameter","_parameter","_row","_previousParameter$or","previousParameter","CreateSimulationParameterRow","getSimulationParametersSelector","groupBySimulationId","groupBySimulationDirection","createSimulationParametersSelector","RIHParametersSelector","POOHParametersSelector","simulationParametersRIH","simulationParametersPOOH","loadSimulationParametersPage","dispatchRequestDeleteSimulationParameter","requestDeleteSimulationParameter","dispatchRequestCreateSimulationParameter","requestCreateSimulationParameter","dispatchRequestUpdateSimulationParameter","requestUpdateSimulationParameter","flowPath","SimulationParametersTable","TemperatureGradientField","SimulationTemperatureGradient","temperatureGradient","degreesUnit","bottomTemperature","surfaceTemperature","SimulationWellboreSectionsTable","isSimulationPlanned","useDefaultProjectWellboreSection","defaultProjectWellboreWellboreSection","WELL_ACTIONS","dispatchRequestWellboreSectionsForSimulation","requestWellboreSectionsForSimulation","dispatchUpdateRequestWellboreSectionForSimulation","updateWellboreSectionForSimulation","simulationWellboreSectionSelector","createSimulationWellboreSectionsSelector","SimulationDynamicToolParameterFluidSelectionTable","updateDynamicSimulationParameter","TableRowRadioGroupFieldFormik","SimulationDynamicToolParameterJarActivationTable","TaskSimulationDynamicToolParametersContainer","useInitializeTaskSimulationDynamicToolParametersContainer","selectedToolString","getServiceName","selectedServices","CreateTaskForm","ServiceSelectField","expandBtnActive","isHeader","Details","expandable","isToggled","hideActions","hideExpandIcon","isStickyHeader","PaperComponent","ExpandButtonProps","paperExpanded","paperExpandable","onMouseOver","expandIconHidden","expansionPanelExpanded","expansionPanelRoot","AccordionActions","expansionPanelActionsRoot","StyledPaperListItem","SortableElement","TemplateTableRow","templateTasks","selectTemplateTask","displayExpandColumn","CreateTaskModalHeader","SelectedTemplateTasksTable","deselectTemplateTask","selectedTemplateTasks","ViewList","dispatchCreateTask","createTaskModalContainerOnLoad","dispatchAddTasksFromTemplate","addTasksFromTemplate","templateTask","selectedMode","displayMenu","FromTemplateTableRowComponent","defaultMode","createMode","setCreateMode","setSelectedTemplateTasks","currentSelectedItems","creatingFromTemplate","TemplateTasksTable","cleanListAndClose","_row$original$subActi","subActivities","TaskActivitiesTableSimple","TaskTableRowDetailsToolstring","_toolstring$get","expansionPanelDetailsSection","toolstringLinkContainer","_value$unit","noToolstring","CustomReadOnlyField","setToolstringId","hasReadActivityCommentsPermission","TaskTableRow","onExpand","TaskTableRowDetails","SortableTaskTableRow","taskTitleLink","sortTasks","TaskChart","showActivities","showDefaultButtons","showNavigatorChart","chartBackgroundColor","seriesToAdd","taskStart","taskEnd","taskToAdd","showCheckbox","tasksAndActivities","dependency","findLast","insert","newSeries","existingSeries","dispatchGetActivities","flatten","createProjectAllActivitiesSelector","totalPlannedDuration","showToggleButtonOption","dispatchSortTasks","sortedTask","affectedTask","dispatchGetServices","dispatchGetDepartments","totalElapsedDuration","defaultView","lastNonContingencyEndTime","TaskListRuntimeHeader","TaskTable","TasksChartContainer","dispatchGetTasks","TaskTableChart","CreateTaskModalContainer","TaskRoutesContainer","filteredTaskRoutes","redirectTo","taskContainerOnLoad","requested","eventsService","allEvents","allEventsUnreadCount","markEventsAsSeen","getEvents","getEventsFromState","Events","dispatchGetEvents","pollId","dispatchEventsSeen","ProjectBreadcrumb","_useProject","hasUploadDocumentPermission","getFacilityDocumentsFromState","facilityFileService","noDrag","FacilityDocumentsTable","getProjectWellboreDetailFromState","getProjectWellboreDetailIdFromState","firstDetail","getActiveProjectWellboreDetailIdFromState","getProjectWellboreDetailsForProjectFromState","getWellboreDetailFromProjectWellboreDetailFromState","contained","TimelineItem","TimelineSeparator","TimelineDot","TimelineConnector","TimelineContent","ProjectUser","ProjectWellboreDetailChangelog","creationDate","Timeline","ProjectWellboreDetailChangelogItem","CreateIcon","projectWellboreDetailsState","clearDataState","useReducerWithDataState","projectWellboreDetailsReducer","onEntered","ProjectWellboreDetailStatusName","currentProjectWellboreDetail","dispatchGetProjectWellboreDetailChangelog","dispatchCreateAndRedirectProjectWellboreDetailDraft","createAndRedirectProjectWellboreDetailDraft","handleActiveWellboreId","selectedItem","displayCreateDraftBtn","listItemTextRoot","HistoryIcon","SaveAltIcon","ProjectWellboreDetailChangelogModal","ProjectWellboreDetailHeader","cancelButtonText","canCancel","onCancelDraft","onApproveDraft","onRequestDraftApproval","cancelDraftBtn","disableElevation","approveButton","requestApprovalButton","approvalButtons","projectWellboreStatusToString","dispatchCancelProjectWellboreDetailDraft","dispatchApproveProjectWellboreDetailDraft","approveProjectWellboreDetailDraft","dispatchRequestProjectWellboreDetailDraftApproval","requestProjectWellboreDetailDraftApproval","latestProjectWellboreDetail","setLatestProjectWellboreDetail","_currentProjectWellbo","Alert","ProjectWellboreDetailStatusHeaderActions","dispatchRequestProjectWellboreDetail","dispatchRequestProjectWellboreDetails","_match$params","ProjectWellboreDetailStatusHeader","ProjectWellboreHeader","ProjectWellboreTrajectory3DView","trajectoryTableInitialState","dispatchSyncProjectWellboreTrajectoryWithLatest","dispatchRequestProjectWellboreSections","fab","setWellboreId","renderTableHeaderComponent","TableHeader","Refresh","dispatchSubmitProjectWellboreDetailForm","submitProjectWellboreDetailForm","dispatchSyncProjectWellboreDetailsWithLatest","requestSyncProjectWellboreDetailsWithLatest","requestProjectWellboreDetailDataState","projectWellboreDetailStatus","ProjectWellboreDetailsContainer","activeWellboreDetailId","dispatchLoadProjectWellboreDetailsPage","wellboreDetailsId","ProjectWellboreDetailFormContainer","dispatchCreateProjectWellboreSection","requestCreateProjectWellboreSection","dispatchUpdateProjectWellboreSection","requestUpdateProjectWellboreSection","dispatchDeleteProjectWellboreSection","requestDeleteProjectWellboreSection","dispatchCreateProjectWellboreSectionNipple","requestCreateProjectWellboreSectionNipple","dispatchUpdateProjectWellboreSectionNipple","requestUpdateProjectWellboreSectionNipple","dispatchDeleteProjectWellboreSectionNipple","requestDeleteProjectWellboreSectionNipple","dispatchSyncAndCreateProjectWellboreSectionWithLatest","createAndRedirectProjectWellboreDetailDraftAndSync","dispatchSyncProjectWellboreSectionWithLatest","syncProjectWellboreSectionWithLatest","setWellboreDetailId","_activeWellboreDetail","withProjectPermission","SimulationMenuItem","_simulation$getIn","_simulation$getIn2","simulationActions","getAllProjectNonProductives","endTimeAfterStartTime","allValues","_allValues$get","isSameOrBefore","dispatchOnSave","setAvailableDepartments","dep","createNPT","isSameOrAfter","TaskSelectItem","createRef","wasSelected","taskButton","buttonIcon","wordBreak","TasksMenu","onSelect","_execute$getIn","rel","endIcon","CreateNPTModal","getPageTitle","completedActivities","CreateUpdatedPlannedButton","createUpdatedLoadingState","requestCreateUpdatePlannedSimulation","dispatchStartOperation","startOperationInitiate","positiveButton","tertiary","PlayCircleFilled","useTaskFailReasons","subHeader","disabledChip","taskFailReasons","reasonId","clickable","isProjectSuccessful","dispatchEndOperation","nextActionsHeader","dialogActions","projectSuccessful","projectNotSuccessful","rightIcon","completeBtn","completeBtnSubText","FailureReasonField","dispatchToggleEndOperationModal","Replay","EndOperationModalContainer","useDataState","toggleMenu","Children","DropDownButton","defaultOption","renderFn","MainButtonProps","HelperButtonProps","mainButton","helperButton","borderBottomRightRadius","borderBottomLeftRadius","CompleteTaskModalContainerActions","completeTaskDataState","completeEndTaskDataState","completeRepeatTaskDataState","completeTaskWithContingencyDataState","contingencyTasks","nonContingencyTasks","lastNonContingencyTask","indexOflastNonContingencyTask","nextNonContingencyTask","SkipNext","LastPage","customTitle","CompleteTaskForm","ExecutionRootContainerContext","tasksWithoutContingencies","currentTaskindex","dispatchCompleteTask","commentsDisabled","dialogContent","objectivesNotMet","FailureReasonFieldFormik","dispatchToggleCompleteTaskModal","toggleCompleteTaskModal","onGoBack","setObjectivesMet","isObjectivesMet","DoneAll","CompleteTaskModalContainer","TaskExecution","_useTaskActivities","displayStartOperationBtn","displayCompleteTaskBtn","displayEndOperationBtn","StartOperation","tabsContainer","leftMenu","menuList","raiseConnectionError","useInitializeExecutionRootContainer","_tasks$find","_getSimulationsForTas","_t$get","activitiesActions","MenuList","ExecutionIndexContainer","loadingState","received","toolStringContainer","toolStrings","runSimulationState","useInitializeExecutionSimulationContainer","enableSimulationButton","setEnableSimulationButton","onToolStringChange","ExecutionSimulationIndexContainer","SIMULATION_ACTIONS","TableCellWithFallback","AddedCablesInExecuteTable","cablesWithSerialNo","setCableId","iconPadding","selectedSurfaceEquipment","onSubmitSurfaceEquipment","setSelectedSurfaceEquipment","setSurfaceId","surface","EXECUTION_SE_FILTERS","surfaceEquipmentFromState","surfaceEquipmentCategoriesFromState","emptyEquipment","equipmentContainer","priorTasks","setPriorTasks","allProjectTasks","taskIdNumber","matchedTask","validateSil2SurfaceEquipmentSerialNumbers","_error$response3","_error$response3$body","selectedCables","onSubmitCable","taskSurfaceId","onSubmitForm","AUTOFILL_SERIALS_SELECT_FIELD","AddedSurfaceEquipmentInExecuteTable","isValidDate","startTimeValidation","typeError","hasWaitCodes","previousActivityAdjustedStartTime","nextActivityAdjustedStartTime","previousWaitingActivityStartTime","previousWaitingActivityEndTime","baseValidation","isDateInRange","endDate","momentValue","momentStartDate","momentEndDate","isBetween","endTimeValidationSpecific","isNextPausedWaitingActivity","nextNonPausedActivityStartTime","validationSchemaForCompletedItem","validationSchemaForCurrentItem","customEndDateValidation","SortableHandle","dragHandle","dragHandleDisabled","withDataState","renderWhileLoading","LoadingDimmerProps","innerRef","ButtonStop","ActivityDetails","setToggledActivityButton","toggledActivityButton","_previous$activity$na","_previous$activity","abortTaskDataState","activityTypesWaiting","pauseActivityDataState","activityTypesPointInTime","completeActivityDataState","createPointInTimeActivityDataState","completingActivity","cantUndo","rootContainer","notSelected","_activityType$value","loadingProgress","loadingContainer","startActivityButton","iconButtonRoot","textAreaRoot","datePickerContainer","textFieldHighlight","statusIconContainer","childrenContainer","childDescription","addStyles","NEXT_ACTIVITY_START_TIME","HAS_WAIT_CODES","ActivityChildComponent","onChildDescriptionChanged","isLastSubActivity","rawActivityDescriptionJson","setRawActivityDescriptionJson","activityDescriptionEditorState","setActivityDescriptionEditorState","_child$content","rawEditorState","hasChanged","newRawActivityDescriptionJson","FormFieldEndTime","validateSync","_nextTask$type","_nextActivity$type","PlayArrow","Done","ActivityListItemFactory","_allActivities$get$ge","_allActivities$get","_allActivities$get2","canEditComments","childrenActivities","displayDescription","isCurrentActivity","onActivityChanged","setExpanded","rawParallelActivityJson","setRawParallelActivityJson","rawActivityCommentsJson","setRawActivityCommentsJson","parallelActivityEditorState","setParallelActivityEditorState","setActivityCommentsEditorState","isInPlanning","previousDateTime","_allActivities$get$ge2","_allActivities$get3","_allActivities$get4","previousEndDate","_activity$content","parallel","prevStart","nextStart","restActivity","previousEndTime","newRawParallelActivityJson","newRawActivityCommentsJson","onDuplicateActivity","lastChildActivitySequence","formikCallbacks","updated","isDepthChanged","newDepth","oldDepth","oldDepthWithoutRoundedValue","_activity$depth","WorkItemSortHandle","Edit","ExpandLessIcon","ActivityDetailsBottomBar","UnSortableActivityListItemCompleted","UnSortableActivityListItemCurrent","SortableListItem","ActivityList","parentActivities","activitiesList","parentActivity","SortableActivityListItem","providedIndex","SortableContainer","empty","ActivityListHeader","CreateActivityContainer","selectedTask","dispatchSort","registerObsCardBtn","activitiesLoading","lockAxis","lockToContainerEdges","redirectToBhaEditAndCloseModal","dispatchRedirectToBhaEditAction","redirectToBhaEditAction","GotoBhaEditModal","dispatchUpdatestringtesttoolstringitem","dispatchUpdateSerialNumbersFromTask","requestUpdateSerialNumbersFromTask","fromToolstringName","projectTasks","_toolstring","externalHiddenColumns","setSelectedToolstringId","hideExecutionOptions","selectedStringTestReport","hideSerialNo","currentToolStringId","_currentTask$get","_notPlannedToolString","notPlannedToolString","ToolstringModal","isRouteBhaEditModalOpen","toggleIsRouteBhaEditModalOpen","showEditor","setShowEditor","selectLabel","setSelectLabel","getStringReportToolstring","validateToolstringSerialNumbers","mt","ml","fromTask","PlaylistPlayIcon","hideBreakPoints","GotoBhaModalModalContainer","cells","OperationsTableView","isDrawerOpened","currentProject","setCurrentProject","onProjectSelected","OperationTableRow","OperationCardQuantity","cardContent","cardHeaderContent","textDecorationThickness","grayLink","readOnlyFieldText","_currentTask$title","_currentActivity$name","scrollContainerRef","projectTitle","currentTension","currentSpeed","subheader","hasLiveData","CardHeader","titleTypographyProps","NoLiveDataIcon","subheaderTypographyProps","LazyLoad","once","scroll","scrollContainer","toggle","toProjectDashboard","OperationCard","OperationsCardsView","OperationCardItem","OperationsViews","CloudOff","getFieldId","getFieldName","getFacilityId","getFacilityName","getDepartmentId","OperationFilter","ViewComfyIcon","getOperationsPageParamsFromState","getOperationsFromState","OperationFilterContainer","liveOperationsHubUrl","LiveOperationsHub","useLiveOperationsConnection","operationsFilters","onReceiveOperations","setStreamSubscription","startStreamSubscription","currentSubscription","stopStreamSubscription","dispatchReceiveOperations","dispatchSearchOperations","androidContent","isStandalone","isInstallPromptSupported","promptInstall","usePWA","onFiltersSubmit","IOSView","PwaInstallPopupIOS","appName","appIcon","AndroidView","dashboardFilter","OperationCarouselItem","firstContainer","rotateContainer","setCurrentProjectId","onIndexChange","onlineCheetahJobs","DeviceOrientation","lockOrientation","Orientation","alwaysRender","Carousel","swipe","autoPlay","navButtonsAlwaysInvisible","Item","DataExchangeBasePage","DataExchangeIcon","SvgIcon","viewBox","xmlSpace","xmlns","DataExchangeContainer","ProjectSelectModalTable","ProjectFilters","onClearProject","onSelectProject","projectStatuses","setProjectStatuses","getAvailableProjects","dispatchClearProjects","clearProjects","dispatchGetAvailableProjects","CheetahJobProjectSelectField","CheetahJobProjectSelectModal","CompletableJobSources","CheetahJobsTable","CheetahJobFilterContainer","CheetahJobFilter","isCompleted","ArchivedWinchContainer","AvailableWinchContainer","LiveProjectContainer","ArchivedWarriorContainer","AvailableWarriorContainer","smLocationService","getAllSMLocations","createSMLocation","updateSMLocation","deleteSMLocation","getAllSMlocations","smLocations","receiveSMLocations","getSMLocationsFromState","useSMLocations","dispatchGetSMLocations","dispatchCreateSMLocation","dispatchUpdateSMLocation","dispatchDeleteSMLocation","getSMLocations","CreateSMLocationForm","initValues","SMLocationStatusIndicator","SMLocationConfigsTable","ConfigurationWinchContainer","toggleAddSMLocationModal","CreateSMLocationModalContainer","ArchivedCheetahContainer","AvailableCheetahContainer","useCheetahJobCurves","cheetahJobCurves","CheetahJobCurvesTable","CheetahJobCurvesContainer","setCheetahJobId","cheetahJobsDataState","initialCheetahJob","cheetahJobCurvesDataState","LiveProjectCheetahJobsTable","LiveProjectOverviewContainer","useOperations","initialFilter","dispatchUpdateProjectStatus","createOperationsSelector","tableHeaderRowRoot","renderTableHeaderRowComponent","TableHeaderRowComponent","LiveProjectsCheetahJobsTable","projectIdLink","LiveProjectsTableRow","LiveProjectsFilterContainer","LiveProjectsFilter","LiveProjectsTable","actionTypes","reducer","filterPlanAndExecute","LiveProjectsPaginatedContainerHoc","localState","localDispatch","useReducer","paginationState","LiveProjectsContainer","mapStateToPropsWrap","mapDispatchToPropsWrap","mapProps","comp","ArchivedLiveProjectsPaginatedContainer","AvailableLiveProjectsPaginatedContainer","getFacilityOperatorsFromState","getFacilitiesPageParamsFromState","getFacilitiesPageResultsFromState","getFacilityByIdFromState","getFacilityByDeckFromState","facilitiesService","getOperators","getFacilityById","searchFacilities","getFacilityImage","getFacilityLocation","getFacilityDecks","facilityService","updateFacilitiesFilter","receiveFacilitiesPage","facilityStatusToString","facilityTypes","FacilitiesTable","rowCount","tableSize","setTableSize","setInitialState","newFilters","setNewFilters","componentRef","handleScroll","componentElement","scrollHeight","newTableSize","FacilitiesFilter","getFacilityProjectsFromState","FacilityContainer","img","imgSrc","setImgSrc","setLoading","setError","urlImage","GoogleMapFacilityOverview","setLocation","setLat","setLng","locationNorthSouth","locationEastWest","FacilityMapLocation","bargeContainer","positionContainer","bargeImageContainer","bargeInfo","headerText","bargeInfoRow","googleMapsContainer","positionInfo","infoContainer","textLine","infoTextContainer","LazyLoadImage","rowCell","decks","deckName","_row$maximumRigupHeig","facilityContainer","facilityItemContainer","facilityDeck","FacilityDetailsTable","CablesFilter","CablesTable","TextAreaFieldV2","TextAreaFieldFormik","m3ItemName","M3_ITEM","YesNoSwitchFormik","SUPPLIER","SUPPLIER_PART_NUMBER","GROUP","TOP_CONNECTOR","BOTTOM_CONNECTOR","SAFE_WORKING_LOAD","FILE","TOOL_IMAGE_ID","IS_KNUCKLE_JOINT","IS_VERIFIED","TOOL_3D_OBJECT_ID","FILE_3D","MAX_3D_OBJECT_FILE_SIZE","formLegend","submitBtn","errorText","removeUpload","removeUploadContainer","_tool$get","_tool$getIn","_tool$getIn2","_tool$getIn3","_tool$getIn4","_tool$getIn5","_tool$getIn6","_tool$getIn7","_tool$get2","_tool$get3","_tool$getIn8","_tool$getIn9","_tool$getIn10","_tool$getIn11","_tool$getIn12","_tool$getIn13","_tool$getIn14","_tool$getIn15","_tool$getIn16","_tool$get4","saveTool","initialPlaceholders","initialEditFormValues","placeholders","setPlaceholders","resetPlaceholder","prevPlaceholders","schema","additionalNormalForce","jarActivationLimitHigh","jarActivationLimitLow","weightAboveJarringPointFactor","minimumStandoffForce","maximumStandoffForce","minimumOD","maximumOD","axialFrictionReducedTo","m3Item","supplierPartNumber","fishneck","toolImageFile","fileRef","tool3DObjectFile","file3DRef","set3DFormValue","disableValidation","setDisableValidation","setTouched","AddToolModalHeader","validForm","requiredFields","M3ModalForm","toolGroupId","fishNeck","isKnuckleJoint","isVerified","newTool","existingToolToToolMapper","replaceM3","M3Modal","toggleAddToolModal","editBtn","addToolModal","MwlToolsFilter","MwlToolsTable","M3ModalContainer","EwlToolsFilter","EwlToolsTable","wrapper","toolAssemblyInfo","toolAssemblyName","setToolAssemblyInfo","setToolAssemblyName","toggleToolAssemblyItemModal","information","selectedTools","createToolstringSections","ToolAssemblyCreatorTable","ToolAssemlyInformationContainer","onSaveToolAssembly","checkSaveDisabled","onUpdateAssemblyName","ToolAssembliesModalHeader","ToolAssemblyCreator","ToolAssembliesModalFooter","setSelectedTools","toolAssemblyItemModalOpen","newTools","arrayMoveImmutable","lastToolIndex","lastIndexOf","toolAssemblyToSave","toolAssemblyToolsIds","ToolAssembliesModal","handleToggleModal","prevArray","toggleAddToolAssemblyModal","isBhaAddModal","isModalForAdding","onEditTool","setTooldId","setIsLoading","externalTool","onAddToolEditToolAssemblies","addToolAssemblyModal","editToolAssemblyModal","toggleEditToolAssemblyModal","ToolAssembliesFilter","ToolAssembliesTable","ToolAssembliesModalContainer","EditToolAssembliesModalContainer","AddToolForm","AddToolModal","ThirdPartyToolsTable","ThirdPartyToolsFilter","AddToolModalContainer","_row$original$toolStr","mainDiv","onEditTemplate","_item$verifiedData","bhaLength","updatedToolStringItems","assemblyLength","totalLengthOfTools","toolPercentOfAssembly","forwardRef","toggleAddBhaTemplateModal","formikRef","useImperativeHandle","_formikRef$current","onSortToolAttachments","onDeleteToolAttachments","sortTemplateAssemblyTools","deleteTemplateTool","toolstringAttachmentCategories","EditTemplateContainer","templateToEdit","templateSectionsToEdit","TOOL_MODAL","EditTemplateContent","requestDeleteToolstringTemplateAttachment","onSortTemplateAttachments","ownerToolstringItemId","addTemplateTool","setBhaTemplateInfo","toggleAddToolAssemblyToBhaModal","BhaTemplatesCreatorTable","AddBhaTemplatesInformationContainer","bhaTemplateInfo","onSaveBhaTemplate","AddBhaTemplatesModalHeader","BhaTemplatesCreator","AddBhaTemplatesModalFooter","TOOL_TYPES","sortedTools","bhaToSave","bhaTemplateToSave","AddBhaTemplatesModal","addBhaTemplateModal","editBhaTemplateModal","toggleEditBhaTemplateModal","formRef","templateIdForEdit","setTemplateIdForEdit","BhaTemplatesFilter","BhaTemplatesTable","AddBhaTemplatesModalContainer","onCloseEditTemplate","_formRef$current","measureUnit","isNull","getToolGroupSubRows","AddSurfaceEquipmentModalHeader","AddSurfaceEquipmentForm","AddSurfaceEquipmentModal","toggleAddSurfaceEquipmentlModal","AddSurfaceEquipmentModalContainer","SurfaceEquipmentFilter","SurfaceEquipmentTable","_row$original$templat","addMode","onSaveSurfaceEquipmentTemplate","eq","se","EquipmentTemplatesFilter","displayAddButton","toggleAddEquipmentTemplateModal","equipmentTemplateInfo","setEquipmentTemplateInfo","toggleAddEquipmentToEquipmentTemplateModal","AddSurfaceEquipmentInPlanningModalTable","onRemoveSurface","onSaveSurfaceEquipment","SURFACE_EQUIPMENT_OPTIONS","AddSurfaceEquipmentInPlanningModal","onSubmitItem","onSubmitTemplate","showTemplateSelection","initialTemplateFilterValues","EquipmentTemplatesTable","dispatchOnSearchTemplates","handleItemSearch","handleTemplateSearch","onSortItem","onDeleteItem","EquipmentTemplatesCreatorTable","AddEquipmentTemplatesInformationContainer","onSaveEquipmentTemplate","isEditMode","AddEquipmentTemplatesModalHeader","EquipmentTemplatesCreator","AddEquipmentTemplatesModalFooter","isOpenAddSurfaceEquipment","toggleModalAddSurfaceEquipment","onAddItem","onUpdateEquipmentTemplate","equipmentToSave","templateEquipmentIds","equipmentTemplateToSave","AddEquipmentTemplatesModal","AddSurfaceEquipmentInPlanningModalContainer","addEquipmentTemplateModal","editEquipmentTemplateModal","toggleEditTemplateTemplateModal","templateForEdit","setTemplateForEdit","AddEquipmentTemplatesModalContainer","EditEquipmentTemplatesModalContainer","handleModalToggle","activeTabHandler","CablesContainer","EwlToolsContainer","MwlToolsContainer","BhaTemplatesContainer","ToolAssembliesContainer","ThirdPartyToolsContainer","SurfaceEquipmentsContainer","EquipmentTemplatesContainer","tabPanel","EquipmentRoutingContainer","statusRankings","Preliminary","Serviceable","Spare","statusIcons","Unserviceable","Scrapped","Renamed","aStatus","bStatus","aRank","bRank","EquipmentAssetsTable","StatusIcon","toLocaleString","hour","minute","hour12","Tool3DObject","handleToggleViewTool3DModel","toolLength","objectLoaded","setObjectLoaded","handleOnPointerOver","handleOnPointerOut","onPointerOver","onPointerOut","Tool3DObjectModalHeader","ToolObject","objectRef","DefaultToolObject","Tool3DObjectModalContent","Tool3DObjectContainer","viewTool3DModel","toggleViewTool3DModel","Tool3DObjectModalView","topText","toolObject","toolObjectEditable","_equipment$get","EquipmentDetailsSubHeader","EditToolImageModalHeader","imageContainer","ogTool","scaleFactor","containerStyle","handleSetValuesFromEdit","imageContainerRef","displayedImageSize","setDisplayedImageSize","resizeObserver","ResizeObserver","entry","observe","disconnect","imageDimensions","setImageDimensions","containerRef","setContainerSize","measureContainer","scaledHorizontalLineStyle","isToolODExceeding","limitedODValue","scaledTopHorizontalLineStyle","scaledBottomHorizontalLineStyle","scaledInBetweenVerticalLineStyle","isToolLengthExceeding","scaledVerticalLineStartStyle","scaledVerticalLineEndStyle","calculateScaledImageWidthForDisplay","imageContainerStyle","calculateScaledImageHeightForDisplay","boxSizing","transformOrigin","secondLabelStyle","scaledWidth","scaledHeight","prevToolLengthRatio","newToolLengthRatio","calculateNewToolLengthRatio","actualLength","ratioAndScalingRatioHeight","SCALES","HORIZONTAL_SCALE","prevToolWidthRatio","newToolWidthRatio","calculateNewToolWidthRatio","VERTICAL_SCALE","naturalWidth","naturalHeight","contentRoot","toolImageWrapper","toolImageContainer","saveBtn","cancelBtn","setScaleFactor","scaleAttempted","setScaleAttempred","handleScale","widthFactor","heightFactor","prevScale","convertedTool","setConvertedTool","toolWithConvertedUnits","convertToPreferredUnits","valuesFromEdit","setValuesFromEdit","horizontalScale","verticalScale","handleEdit","topArrows","Badge","badgeContent","anchorOrigin","ArrowBackIcon","ArrowForwardIcon","ToolImageContainerWithLining","prev","bottomContainer","dispay","bottomText","bottomTextLine","_tool$get5","_tool$get6","_tool$get7","_tool$get8","_tool$get9","_tool$get10","_tool$get11","_tool$get12","_tool$get13","_tool$get14","_tool$get15","_tool$get16","_tool$get17","_tool$get18","headerSubtitleHandler","editM3Tool","toggleEditM3Tool","edit3rdPartyTool","toggleEdit3rdPartyTool","toggleEditToolImage","displayDataText","displayDateText","EditToolImageModal","EquipmentAssetsContainer","onUnloadSurfaceEquipment","_Object$keys","_equipmentImage","_Object$keys2","_equipmentImage2","_Object$keys3","_equipmentImage3","_equipmentGroup$get","_equipmentGroup","_tool$original","_tool$original2","inputRoot","hasOtherOwners","initialRoleId","initialRole","projectMemberIsOwner","shiftTypes","projectOwnersByUserId","projectHasOtherOwners","isCurrentDateInRange","CircleIcon","maxDate","ProjectMemberAccessCell","dateTo","dateFrom","now","dialogActionsHeader","dispatchAddUsersToProject","addFieldCrewToProject","selectedFieldCrews","addSelectedUsersToProject","CreateProjectMembersModal","fieldCrewByUserId","disptachUpdateProjectFieldCrew","dispatchDeleteProjectFieldCrew","memberName","dispatchAssignProjectMemberToRole","dispatchUpdateProjectFieldCrew","assignRole","ProjectFieldCrewTable","CreateProjectFieldCrewModalContainer","assignTeamProjectRoleChange","ProjectMembersTable","TeamProjectRoleAccessCell","dispatchDeleteProjectMember","dispatchAssignTeamProjectRoleChange","teamProjectRole","CreateProjectMembersModalContainer","isAddMode","setAddMode","changeAddMode","isAdd","box","OnshoreTeam","FieldCrew","ProjectTaskServicesField","serviceTemplateTasks","ProjectNumberField","ProjectNumberAndSource","labelPlacement","chipRootDisabled","projectDepartments","projectHasDepartment","MeasurementPreferencesForm","namePrefix","descriptions","selectedSystem","bottomContainerDisabled","capitalize","UnitsModalContainer","createMomentFromDateArray","dateArray","adjustedDateArray","momentDate","departmentContainer","updateExternalIdDataState","selectMeasurementPreference","initializeMeasurementPreferences","hasCreateTaskPermission","rawBackgroundJson","setRawBackgroundJson","rawInternalInformationJson","setRawInternalInformationJson","backgroundEditorState","setBackgroundEditorState","internalInformationEditorState","setInternalInformationEditorState","estimatedStartState","setEstimatedStartState","estimatedEndState","setEstimatedEndState","updateDateContent","changeBackground","newBackground","changeInternalInformation","changeEstimatedStartDate","updateDateValues","stateValue","momentStateValue","isSame","formattedNewValue","newRawObjectiveJson","newRawBackgroundJson","newRawInternalInformationJson","selectFieldContainer","ProjectDepartmentsField","ProjectUnitsModalContainer","borderCollapse","circle","allRisks","TableHead","consequenceValue","probabilityValue","dispatchUpdateProject","dispatchOnUnLoad","dispatchInitializeMeasurementPreferences","dispatchDeleteProject","dispatchUpdateMeasurementPreference","updateProjectMeasurementPreference","valuesJS","dispatchUpdateProjectExternalId","deleteProjectBtn","ProjectDetailsForm","TableContainer","RiskMatrixComponent","showContigency","Unarchive","getProjectDocumentsFromState","columnTitle","DocumentsTable","emptpyFiltering","currentDocs","documentFiltering","aaccessor","DocumentsTableHeaderCell","setFilteredDocuments","searchTerm","setSearchTerm","emtpyFiltering","setEmtpyFiltering","applyFilters","filterIds","filtered","filteredBySearchTerm","_document$get","_document$get$toLower","procedures","procedure","_props$row$subRows","companyFilters","serviceFilters","departmentFilters","setCompanyId","procedureTypes","setProcedureTypes","setAllCompanyFilter","setAllDepartmentsFilter","setAllServicesFilter","setServices","companyFilterHandler","servicesFilterHandler","departmentFilterHandler","mapChecklistsAndProcedures","proceduresAndChecklist","checklists","qhse","getFilteredChecklists","companyId","doc","dept","nameMatch","keywordMatch","filteredChecklists","filterFn","departmentFiltersMap","ProceduresAndChecklistsFilter","ProceduresTable","riskProbabilities","riskConsequences","riskState","ProjectRiskRow","ProjectRiskTableRowDetails","RiskTableRowExpandable","dispatchRequestCreateProjectRiskSection","requestCreateProjectSection","dispatchRequestUpdateProjectRiskSection","requestUpdateProjectSection","dispatchRequestDeleteProjectRiskSection","requestDeleteProjectSection","dispatchRequestProjectRiskSectionsForTaskRisk","dispatchRequestTaskRiskSectionsByProject","projectRiskSectionsSelector","taskRiskSections","projectRiskSections","ProjectRiskByTaskTable","boldText","ArchiveAlert","useLatestProjectWellboreDetailsWithId","activeWellboreDetailIdFromState","latestWellboreDetailId","ProjectWellboreOverview","ProjectWellboreSectionsContainer","currnetUserId","curentProjectUserid","currentProjectMemberRoles","isThirdParty","userCanAccessProcedures","ProjectWellboreNewContainer","ProjectDetailsContainer","projecDetails","TeamContainer","DocumentsContainerNew","ProjectRiskContainer","ProceduresAndChecklistsContainer","TaskActivityDrawerHeader","activityField","subActivityBox","subActivityField","disabledText","subActivity","drawerHeader","TaskActivityDrawerContent","TaskActivitiesTableWithDrawer","setActivity","_activity$get","TaskActivityDrawer","ReportTableRow","isDoRender","arrangeActivities","parentActivityIndex","act","sortedData","progressBar","durations","diffDuration","maxDuration","calculateProgressBarWidth","maxDurationSec","durationSec","timeDifference","spentDuration","estimatedDuration","taskID","setTaskID","estDuration","spentTime","DurationComparison","DownloadReportButton","dispatchDownloadEndOfJobReport","totalNpt","timersByType","totalTimeWait","getProjectNonProductiveTimeFromState","createProjectActivitiesSelector","nptTimers","nptTimeMs","ReportContainerHeader","ReportTable","listStyle","NPTTable","editNpt","deleteNpt","NPTTableRow","formData","onEditProjectNonProductiveTimeModalLoaded","handleSave","dispatchSelectNpt","dispatchDeleteNpt","onProjectNonProductiveReportUnload","EditNPTModalContainer","lessonsService","allLessons","lessonById","updateLesson","createLesson","deleteLesson","LessonTableRow","editLesson","LessonsTable","calendar","getLessonsFromState","ownProps","onEditLessonModalLoaded","dispatchSelectLesson","dispatchDeleteLesson","CreateLessonModal","EditLessonModal","IncidentsService","allIncidents","IncidentById","IncidentId","updateIncident","createIncident","deleteIncident","IncidentTableRow","IncidentsTable","editIncident","getIncidentsFromState","incidentsService","EDIT_INCIDENTS","onEditIncidentModalLoaded","incidentsMapper","dispatchSelectIncident","dispatchDeleteIncident","CreateIncidentModal","EditIncidentModal","GetAssetHistoryByProjectId","getAssetTestFromState","AssetHistoryDrawerHeader","testResultIcons","richText","TestHeaderRow","MaintenanceAndComplaintHeader","MaintenanceAndComplaintBody","TestBodyRow","testResult","handleResultIcon","TaskHeaderRow","TaskBodyRow","cableComments","expansionPanelDetailsRow","headerRenderHandler","bodyRenderHandler","TestDetailComponent","keyEvent","getTooltipTitle","currentEvent","marginLabel","getRamNameById","ram","getLeakTypeNameById","paperMargin","marginStrand","currentComment","bcs","cabin","TaskDetailDrawerComponent","MaintenanceDetailComponent","CableTorsionDrawerComponent","innerStrand","outerStrand","CableBreakTestDrawerComponent","CableCutMaintenanceDrawerComponent","CableServiceMaintenanceDrawerComponent","lengthQuantity","ODQuantity","drumTypeWhenNoCableSpoolingStorage","CableSpoolingMaintenanceDrawerComponent","drumName","setDrumName","m3","bottomLabel","currentDescription","renderedComponent","BopTestDrawerComponent","CableWrapTestDrawerComponent","CableTortureTestDrawerComponent","CableContinuityTestDrawerComponent","CableInsulationTestDrawerComponent","Sil2TestDrawerComponent","CableWrapBraidedMonoTestDrawerComponent","renderedAssetComponent","renderedTaskComponent","AssetHistoryDrawerContent","getTaskStatusTitle","searchedAssets","setAssetHistory","_item$get2","_item$get3","_item$get4","assetsList","AssetHistoryDrawer","onAssetTestUnload","AssetHistoryTable","ReportContainer","LessonsContainer","IncidentsContainer","NPTReportContainer","AssetTestContainer","AddedCablesTable","onRemoveCable","setSelectedCables","removeCable","externalGuid","newNumbers","AddCablesModalTable","onAddCable","AddCablesModal","AddedSurfaceEquipmentInPlanningTable","onDuplicateToolItem","sortTools","removeTool","isOpenAddCable","toggleModalAddCable","onSaveCable","taskSurfaceTool","saveSurfaceTemplateToTask","TaskCableId","TaskId","deleteSurfaceEquipmentFromTask","cableIndex","cableX","lastCableIndex","newCables","AddCablesModalContainer","BindingFunction","dataTable","accept","LogCurve","DataSource","getCurveSource","useSimpleDataSource","dataSource","setDataSource","loadDataSource","ds","jsonData","depths","columnsData","curveData","paddedData","_curveData$i","DataTable","cols","colsdata","curveNames","getColumnByName","LogCurveDataSource","datatable","widget","binding","getDataBinding","depthColumn","getLength","minDepth","maxDepth","setDepthLimits","createSimpleDataSource","BigData","plotRef","wellLogWidgetRef","registry","ComponentNodeFactoryRegistry","wellLogWidget","WellLogWidget","indextype","indexunit","addTrack","TrackType","IndexTrack","setWidth","logTrack1","LinearTrack","curveName","LogData","setLineStyle","setName","addChild","duplicateTrack","duplicateCurve","setDepthScale","fitToHeight","wellBoreData","WellBoreData","WellBoreNode","maxOuterDiameter","labelsGroup","Group","labelData","midDepth","Text","valign","lastLabelY","labelInfo","labelHeight","setAnchorX","setAnchorY","xComponent","arrow","Arrow","Point","symbolstart","symbolend","linestyle","KnownColors","Black","schematicTrack","toolTipRegistry","ToolTipRegistry","register","getClassName","LogCurveTooltip","ComponentNode","ComponentNodeTooltip","tooltipTool","getToolByName","setRegistry","setEnabled","plot","Plot","canvaselement","setLayout","CssLayout","setLayoutStyle","zoomIn","zoomOut","zoomToFit","App","BigDataAndSchematic","CableDetailsTestDrawerHeader","marginIcon","marginButton","_cableDetail$name","_cableDetail$manufact","_cableDetail$manufact2","_cableTestDetails$get","_cableTestDetails$get2","cableDetail","nominalDiameter","manufacturer","strength","GetAppIcon","formatQuantityWithUnit","CableTestDetailsHeader","CableTestDetailsContent","onLoadAssetHistory","dispatchOnLoadEquipments","headerItems","pageContainer","_assetHistory$get","_assetHistory$get$fir","_assetHistory$get2","_assetHistory$get3","setSearchedAssets","serial","setSerial","cableTestDetailsIsOpen","setCableTestDetailsToggle","filterTypes","ASSET_HISTORY_TYPE","equipmentTypes","formatAndValidateDate","formattedDate","nextMaintenance","lastMaintenance","getTypographyStyles","maintenanceDate","isDefaultDate","searchByDate","_asset$key2","assetDate","keywordDate","deepSearch","matchingAssets","_eventDescription$toL","eventDescription","_asset$doneBy","_asset$doneBy$fullNam","_asset$doneBy$fullNam2","_asset$key","_asset$key$toLowerCas","doneBy","searchByDates","searchArray","_asset$test","_resultDescription$to","resultDescription","complaint","maintenance","CableTestDetailsDrawer","onExportCableHistory","onUnloadCable","useAutoScroll","vh","setVh","innerHeight","flowPaths","WellTabContainer","fieldMarginClass","ToolsTabContainer","CommentsRichText","CableTabContainer","getDataAcquisition","getDataAcquisitionFromState","getDebrisTypesFromState","getGreaseTypesFromState","getGlycolTypesFromState","getFrictionReducerTypesFromState","getInjectionMediumsFromState","getProductionMediumsFromState","getExplosivesFromState","valueErrorMessage","timeErrorMessage","Yup","explosivesValidationSchema","isInteger","Explosives","submitExplosivesData","frictionReducerType","richEditorStateToString","removeCableCommentsFromDataAcquisitionStructure","dataAcquisitionStructure","restCurrent","fieldMargin","changeDataAcquisition","rawCableCommentsJson","setRawCableCommentsJson","cableCommentsEditorState","setCableCommentsEditorState","rawToolsDescriptionJson","setRawToolsDescriptionJson","toolsDescriptionEditorState","setToolsDescriptionEditorState","_dataAcquisition$get","newRawCableCommentsJson","newRawToolsDescriptionJson","__","restOfDataAcquisitionObject","debouncedUpdate","submitDataAcquisition","currentCableCommentAsString","initialCableCommentAsString","isToolsDescriptionChanged","isEqualRestOfDataAcquisitionStructure","currentDataAcquisition","initialDataAcquisition","restInitial","ConsumablesTabContainer","updateDataAcquisition","requestObj","DataAcquisitionMappers","loadDataAcquisition","unloadDataAcquisition","removeDataAcquisitionForTask","getActivityTaskByTaskId","DataAcquisitionContainer","getProjectMobilisationTasksFromState","getStringTestReportsForTaskFromState","reports","getstringtesttoolstringitemsFromState","taskButtonSelected","MobilisationTasksMenuItem","handleTaskSelection","MobilisationTasksMenu","getStatusString","eventType","getStatusIcon","StringTestEventContainer","dateString","stringTestValidationSchema","StringTestEventModalContainer","stringTestReportEventTypes","secondaryStringTestReports","eventTypeEnum","timeCreated","isMobilize","requestFinishStringTestReport","dispatchRequestToolConnectors","selectedTaskExternalId","setSelectedTaskExternalId","setSelectedTask","serialNumbersDone","setSerialNumbersDone","setSelectedStringTestReport","ADD_ASSET_HISTORY_BHA","ROUTE_BHA_EDITOR","isLastInList","allStringTestReports","selectedStringTestReportItem","equalValue","requestProjectMobilisationTasks","createDraftStringTestReport","stringtesttoolstringitemsIds","isInvalidSerial","subTool","attachedTool","checkSerialNumbers","eventModal","toggleEventModal","toolstringid","fieldService","getField","getFieldWithOrganizations","getFieldDocumentsFromState","fieldInfo","_field$get","externalSourceId","setExternalSourceId","externalSourceShortName","setExternalSourceShortName","wellInfo","onUnloadPage","projectsContainer","getFieldWithOrganizationsFromState","FieldInfoContent","WellDetailsTable","FieldRoutingContainer","fieldFiles","fieldFile","dispatchDownloadWellboreFile","FieldDocumentsTable","IntegrityManagementContainer","isAddNewRoute","bottomLine","borderBottomWidth","borderBottomStyle","RiskMatrixHistoryDrawerContent","Container","RiskScoreCard","RiskMatrixHistoryDrawerHeader","buttonContainer","historyButton","showHistoryDrawer","toggleHistoryDrawer","hideTabs","RiskMatrixHistoryDrawer","AddIntegrityHeader","totalWeightSchema","setIntegrities","validateTotalWeight","validationError","updateWeightValueOnBlur","newWeight","updatedIntegrities","localWeight","setLocalWeight","IntegrityWeightContainer","IntegritiesTableWeight","subRow","parentId","setParentId","IntegrityFormFields","buildExpandedState","parentIndex","IntegrityLocationContainer","IntegritiesTableLocation","MultiStepForm","validationSchemas","renderStepContent","setIntegrityType","isEdit","isParentIdSet","activeStep","setActiveStep","isLastStep","handleBack","prevStep","handleNext","Stepper","stepper","Step","StepLabel","bottomButtonContainer","BooleanRuleDataFormComponent","NumericRuleDataFormComponent","GeographyRuleDataFormComponent","TimeRuleDataFormComponent","addButton","pickListContainer","FieldArray","_option","CancelIcon","SelectPicklistOptionComponent","picklist","integrityDetailId","DefaultRuleValueWrapper","isFromWell","selectedRuleType","defaultValueCheck","PicklistOptionsFormComponent","IntegrityRuleInformationContainer","integrityManagementRuleTypes","onTitleChange","pb","IntegrityCategoryInformationContainer","IntegrityRulesYupValidator","defaultValueChecked","positive","IntegrityCategoriesYupValidator","dispatchLoadIntegrityManagementIntegrities","editIntegrity","setNewCategory","parentCategoriesAndDetials","setParentCategoriesAndDetails","setValidationSchemas","setSubmitForm","formInitialValues","setFormInitialValues","setParentIdAndFilterParentCategories","newParentId","initialIntegrity","newIntegrities","recursiveCheck","hasEmptyIdItem","newIntegrityObj","addItemToCategory","targetId","newItem","recursiveAdd","adjustedCategoriesAndDetails","getCombinedTopLevelEntries","targetItem","findTarget","combinedEntries","detail","filteredIntegritiesWithoutEditIntegrity","handleTitleChange","integrityCopy","updatedParentCategoriesAndDetails","_isNil2","mapInitialDataToFormValues","prevFormState","relatedIntegrities","createOrUpdate","AddIntegrityContainer","mb","AddIntegrityContent","picklistSubRow","deleteIntegrity","integrityRuleType","dispatchDeleteIntegrityManagementIntegrity","withRouter","_location$pathname","IntegrityActions","IntegritiesTable","updateValue","isFirstRender","previousValue","debouncedUpdateValue","newValues","fieldStyle","long","dateTimePicker","viewContainer","viewTextContainer","editIconContainer","formContainer","fieldContainer","actionButtonsContainer","_integrity$value3","currentlyEditingId","setCurrentlyEditingId","isEditing","xsValue","getXsValue","addNewIntegrityManagementWellData","FormSchema","RuleFormFields","PICK_LIST","displayValue","displayValueByType","_integrity$value","_integrity$value2","selectedId","selectedDetail","manualSave","CheckIcon","backButtonGrid","breadcrumbItem","pageHistory","setPageHistory","breadCrumps","setBreadCrumps","nextPage","prevPageHistory","prevBreadCrumpsHistory","getTableRows","integritiesList","currentIntegrity","_currentIntegrity","_currentIntegrity2","integritiesListCategories","WellTableValueComponent","_integrity$noOfAttach","DescriptionIcon","ChevronRight","NavigationIconButton","ArrowBack","Breadcrumbs","breadcrumbs","crumb","goTo","WellIntegrityTable","handlePreviewAttachment","PreviewIcon","UploadIntegrityAttachmentDrawerHeader","DatePickerField","DatePickerProps","hideFormatHelperText","documentPreview","dropzone","dragActive","saveIcon","previewIcon","handleUpdateAttachments","setIsSubmitting","newWellboreFiles","setNewWellboreFiles","newProjectFiles","setNewProjectFiles","uploadedFiles","setUploadedFiles","previewFile","filePath","expand","setExpand","acceptedFiles","prevFiles","uuidv4","reportingDate","editRowId","setEditRowId","editingValues","setEditingValues","handleEditChange","setEditingErrors","editingErrors","fileSchema","handlePreviewChange","_item$extension","previewUrl","_item$extension2","CloudUploadIcon","newDate","abortEarly","err","newErrors","handleSaveRow","handleStartEdit","handleRemoveFile","bgcolor","labelId","secondaryAction","disablePadding","isChecked","tabIndex","handleWellboreFilesCheckboxToggle","VisibilityIcon","unmountOnExit","pl","handleProjectFilesCheckboxToggle","submitUpdatedAttachments","projectAttachments","flatMap","wellboreAttachments","UploadIntegrityAttachmentDrawerContent","closeIcon","selectedAttachment","resetPreviewState","IntegrityFilterAttachmentDrawerHeader","indeterminate","DEFAULT_ATTACHMENT_FILTERS","fileTypes","handleToggleFileType","years","handleExpandYear","months","yearData","allMonthsSelected","updatedMonths","handleToggleYear","handleToggleMonth","cancelFilters","submitAttachmentsFilters","IntegrityFilterAttachmentDrawerContent","dispatchLoadWellIntegrityAttachments","dispatchLoadWellIntegrityAvailableFiles","dispatchUpdateWellIntegrityAttachments","updateIntegrityManagementWellAttachments","dispatchUploadAndUpdateWellIntegrityAttachments","fileContents","attachmentsForBackend","preview","successIcon","statusText","transparentButton","actionButton","isFilterOpen","toggleFilterDrawer","setSelectedAttachment","setWellboreFiles","setProjectFiles","availableFilesForPreviewRef","attachmentsExternalIds","wellboreList","projectList","filteredAttachments","setFilteredAttachments","updateFilteredAttachments","newFilteredAttachments","_years$year","isFileTypeSelected","isMonthSelected","initializeFilters","projectfile","_file$extension","_file$extension2","DoneIcon","PlusIcon","FilterList","IntegrityAttachmentsTable","IntegrityAttachmentsPreview","UploadIntegrityAttachmentDrawer","newAttachments","newFiles","IntegrityFilterAttachmentDrawer","TestingContainerWellLogAndCompositeSchematic","schematicWidgetRef","TRANSFORMER","PiecewiseTransformer","trackwidthstrategy","ProportionalWidthStrategy","maxwidth","minwidth","widthscale","schematicWidget","CompositeSchematicsWidget","resizable","deviation","transformer","trackwidth","synchronizeZoom","scaleModel","fitToBounds","COLOR_PROVIDER","DefaultColorProvider","generateOrderedWellData","stepSize","smudgedValue","random","wellData1","wellData2","wellData3","WellScene","wellData","Vector3","modelStart","modelEnd","getRoot","trajectoryTube","TrajectoryTube","colorProvider","segments","Well3DVisualization","SchematicDrawerHeader","closeDrawer","wellBoreNodeLatestData","wellborenode","viewmode","ViewMode","Compressed","east","west","south","southwest","northwest","fieldWrapper","textArea","setIsOpen","wellBoreNodeRef","higlightRef","geometryBounds","getGeometryBounds","getBottom","horizontalscrollable","verticalscrollable","nodefilter","LogAbstractVisual","cursortracking","AnnotationTrack","createWellLogWidget","automodellimitsmode","setProperties","Layer","highlightLineStyle","LineStyle","highlightFillStyle","FillStyle","Rectangle","fillstyle","getTrackContainer","addLayer","selectionOff","setNodeFilter","SelectionEvents","onPick","evt","sender","eventArgs","SchematicDrawer","componentName","SchematicTable","schematicComponent","svgImage","startCase","textfieldLabel","textarea","svgImageGrid","allElements","DropdownOption","SchematicFormFeilds","buttonsWrapper","textEditorWrapper","getEditorContent","ContentState","createFromText","plainText","setPlainText","formatEditorValue","placeCursorAtEnd","lastBlock","getBlockMap","newSelection","anchorKey","anchorOffset","focusKey","focusOffset","hasFocus","forceSelection","handleEditorChange","newEditorState","newPlainText","getPlainText","prevState","handleEditorFocus","onEditorFocus","versionsList","selectedSchematicVersion","emptyStateWrapper","emptyStateColor","tableWrapper","versionFormWrapper","aligntems","versionCommentFormWrapper","editButton","handleSelectChange","handleVersionFormSubmit","handleDelete","isDrawerOpen","setIsDrawerOpen","setIsModalOpen","setRowIndex","editMode","setEditMode","hasData","initialFormValueMapper","shouldShowButtons","submitCallback","deleteCallback","Regular","_evt","_sender","SchematicVersionForm","getComponents","SchematicCommentForm","SchematicForm","formState","SchematicModal","onCancelConfirm","onDeleteConfirm","intData","dispatchFetchSchematicData","dispatchLoadAllElements","dispatchCreateSchematicComponent","createSchematicComponent","dispatchUpdateSchematicComponent","updateSchematicComponent","dispatchDeleteSchematicComponent","deleteSchematicComponent","componentId","dispatchCreateNewSchematicVersion","_data$","setSelectedSchematicVersion","hasIds","selectUoMPreference","UoM","selectedSchematicVersionIndex","schematicVersionComponentsData","componentsData","versionComment","WellBoreSchematic","dispatchGetRuleDetails","showTabs","toRiskManagement","IntegrityDetailsHistoryTable","NoteAddIcon","LoopIcon","currentValue","trail","oldValue","_history$user","dateChanged","dispatchLoadWellIntegrityHistory","loadIntegrityManagementWellIntegrityHistory","historyTable","textStyle","uploadContainer","uploadText","mainContainer","drawerFooter","drawerButton","AddLogFilesDrawerTemplateSection","AddLogFilesDrawerUploadSection","navContainer","hideAddButton","showAddLogFile","toggleAddLogFile","AddLogFileDrawer","LogFilesTable","logFiles","serviceprovider","logdate","LogFilesContainer","COMPARE_CORROSION_LOGS_FILTERS","JOINTS","LOGS","CLASS","COMPARE_CORROSION_LOGS_FILTERS_LABELS","CompareLogsFilters","cardContainer","graphContainer","joint","class","loss","ComparisionFileTableComponent","logs","startlogdepth","maxpenetration","maxmlposition","totalmetalloss","detailCard","logsContainer","ComparisionFileDetailComponent","dataExchangeRoutes","AvailableCheetahJobsContainer","ArchivedCheetahJobsContainer","settingsRoutes","breadcrumbDisabled","VerifiedUser","Integrity","RiskPrincipleContainer","SimulationDashboardContainer","dashboardRoutes","projectDetailsRoutes","ProjectDetailsDescriptionContainer","taskRoutes","TaskDetailsContainer","TaskSurfaceEquipmentContainer","TaskToolstringContainer","TaskToolstringEditorContainer","TaskSimulationContainer","TaskSimulationWellboreSectionsContainer","TaskSimulationParametersContainer","TaskSimulationTemperatureContainer","TaskSimulationCommentContainer","TaskActivitiesContainer","wellsRoutes","WellboreBreadcrumb","WellboreContainer","WellOverviewContainer","WellboreDetailsContainer","WellboreSectionsContainer","WellboreElementsContainer","SchematicContainer","WellboreIntegrityContainer","WellLikelihoodOfFailureContainer","WellConsequenceContainer","IntegrityDetailsContainer","IntegrityAttachmentsContainer","IntegrityDetailsHistoryContainer","CorrosionContainer","CompareLogsContainer","CompareLogsTableContainer","CompareLogsBarChartContainer","WellboreFilesContainer","operationsRoutes","OperationsContainer","OperationsOverviewContainer","equipmentRoutes","EquipmentContainer","AssetHistoryContainer","EquipmentDetailsContainer","ToolProjectHistoryContainer","cableEquipmentRoutes","surfaceEquipmentRoutes","SurfaceEquipmentDetails","facilitiesRoutes","FacilitiesContainer","FacilityOverview","FacilityDetailsContainer","FacilityDocumentsContainer","FacilitiesProjects","fieldRoutes","FieldOverviewContainer","FieldDocumentsContainer","projectSubRoutes","ExecutionRootContainer","ExecutionActivitiesContainer","ExecutionSurfaceEquipmentContainer","ExecutionToolStringContainer","ExecutionSimulationContainer","DataAcquisitionDataFetchWrapper","TasksContainer","TaskBreadcrumb","TaskContainer","MobilisationContainer","ProjectReportLessonContainer","EventsContainer","projectRoutes","testingRoute","TestingContainer","sandbox","WellBoreSchematicLatest","ProjectSteps","renderStepper","nonLinear","alternativeLabel","stepperRoot","connector","StepConnector","stepConnectorLine","stepConnectorAlternativeLabel","matchesPath","stepDisabled","stepLabelLabel","stepLabelAlternativeLabel","StepIconComponent","stepButton","optional","FormatListBulleted","CategoryIcon","PieChart","stepperRoutes","projectPagesOnUnload","dispatchProjectSeen","dispatchGetProjectResources","dispatchResetProjectResources","resetProjectResources","renderProjectRoutes","topMenuIcon","topMenuButton","previousPage","defaultPreviousPage","USER_PREFERENCES","UserPreferencesModalContainer","dispatchSetTheme","labelPlacementStart","switchBase","defer","NavigationMenuItem","dispatchChangeUser","changeUser","dispatchInitializeUserPreferences","hideUsername","triggerIcon","AccountCircle","DescriptionOutlined","ExitToApp","_wellbore$get2","FlashOn","UserMenuContainer","useProjectHeader","getTaskPageTitle","NavigationFab","taskSubPage","getPreviousNextTask","currentTaskIndex","arrowBackIcon","OperationsHeader","ApplicationHeaderBackButton","teamImage","teamButton","routeSubPage","EquipmentDetailsHeader","clientLogo","handleOnClientFilterChange","clientOrganization","DefaultApplicationHeader","ApplicationHeaderContainer","TaskHeader","ProjectHeader","WellboreHeader","FacilityHeader","HomeApplicationHeader","dispatchFetchChangeLog","fetchChangeLog","ReactMarkdown","basePageDrawer","isDrawer","_currentFilter","MobileProjectListDrawer","projectsListOpen","MobileProjectsListContainer","nameContainer","userDetails","navMenuItem","toggleMenuDrawer","setToggleMenuDrawer","MobileUserMenuDrawer","avatarUser","avatarClasses","MobileProjectHeader","setProjectsListOpen","MobileApplicationHeaderBase","MobileUserMenuContainer","MobileProjectsListHeader","MobilePrivacyPolicyHeader","DefaultMobileAppHeader","MobileApplicationHeader","durationContainer","durationItem","statusButton","ProjectStatusOverviewContainer","operationContainer","operationValues","Speed","Depth","Tension","timeDifferenceMore","timeDifferenceLess","taskStartTime","spntDuration","estDurationMs","spntDurationMs","compareDurations","dispatchOnProjectLoad","setOperation","projectOp","ProjectStatusHeader","ProjectStatusOperationValues","ProjectStatusDurationValues","fontMedium","fontSmaller","rowSize","taskContent","_projectStatus$get","displayHeaders","dispatchOnLoadStatus","onStatusLoad","ExecuteTasksList","MobileBackButton","SerialNumberRegisteredIcon","NoSerialNumberIcon","drawerToolDetails","addComplaint","addComplaintUrl","isStringVerified","getToolTypeIcon","GroupWorkIcon","LinkIcon","darkBackground","subRowSize","registerText","currentTool","setCurrentTool","getSerialNoString","itemNo","_assets$find","assetSerialNo","ToolstringSerialNumberStatus","createRow","isSubRow","MobileToolstringDrawerContent","assemblyHeader","assemblyName","verticalLine","smallFont","_toolstringItem$get","_toolstringItem$get2","MobileToolstringPreview","outlinedButton","toolImageDrawerIsOpen","toggleToolImageDrawer","ImageFilled","MobileToolImageDrawer","closeButton","MuiDialogTitle","MuiDialogContent","DialogButton","MobileDialogBase","buttonText","buttonAction","displayCloseIcon","dividers","userInitials","nameParts","resultContainer","resultRow","resultContent","fontLarge","stringVerification","DateIcon","pt","MobileToolstringListContiner","setAvatar","stringVerificationResults","toggleDrawerOpen","selectedResult","setSelectedResult","MobileStringVerificationDrawerContainer","dispatchGetStringVerificationsForToolstring","setStringVerificationResults","toggleAssetHistoryModal","transformData","verificationResult","sequenceCounter","hasOwnProperty","stringTestResult","MobileStringVerificationList","pr","MobileToolstringActionsContainer","TabPanel","MobileExecutionActivities","MobileExecutionBHATabContainer","ExecutionDetailsHeader","MobileExecutionDetails","BallotIcon","ProjectStatusContainer","planRoutes","ListIcon","MobileProjectOverviewContainer","executionRoutes","PlayCircleFilledIcon","MobileTaskDetailsContainer","MobileProjectExecuteContainer","mobileRoutes","NavTab","routeMatch","partialMatch","routePattern","pathSegments","matchSegments","usePartialMatch","MobileNavigationAppBar","visibleRoutes","dispatchFetchPrivacyPolicy","fetchPrivacyPolicy","setMarkdown","mobileRoute","PrivacyPolicy","LoginContainer","LogoutContainer","ChangeLog","WellboresContainer","ProjectsContainer","ProjectContainer","rootRoutes","breadcrumbText","useBreadcrumbs","disableDefaults","excludePaths","BreadcrumbHeaderBase","ApplicationSidebarTopContent","sidebarTopContainer","employeeName","employeeOrganizationName","userMenuIcon","renderHeader","renderTopContent","renderBottomContent","renderApplicationSidebar","ApplicationSidebarCore","renderBreadcrumbs","BreadcrumbHeader","applicationBaseContentScrollContainer","baseContentClasses","ApplicationBaseContent","AppContainerV2","ApplicationSidebarContainer","disableEscapeKeyDown","disableBackdropClick","Home","renderErrorContent","AppFailure","dispatchSaveRedirectPath","currentPath","dispatchAutoLogin","dispatchSetApplicationFailure","componentStack","trackException","exception","severityLevel","SeverityLevel","properties","dispatchNewAppVersionNotification","saveIncomingPath","isOriginRootPath","ex","errorCode","IsPopupAllowed","authenticate","ApplicationBase","ErrorBoundary","ApplicationEnvironmentTopbar","AppContainer","ConfirmationDialog","NotificationContainer","initializeHighcharts","HighchartsExporting","HighchartsSolidGauge","HighchartsNoDataToDisplay","HighchartsBoost","LocationProvider","setGlobalLocation","loadAppInsights","momentDurationFormat","serviceWorker","ReactDOM","MuiPickersUtilsProvider","utils","MomentUtils","ConnectedRouter","ApplicationRoot","getElementById"],"mappings":"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ACA,qBACA,qBACA,QACA,sBACA,qBACA,YACA,WACA,UACA,iBACA,eACA,aACA,qBACA,4BACA,yBACA,oBACA,kBACA,kBACA,YACA,gBACA,aACA,iBACA,mBACA,wBACA,wBACA,qBACA,0BACA,cACA,WACA,mBACA,MACA,WACA,iBACA,iBACA,eACA,QACA,cACA,UACA,YACA,YACA,SACA,cACA,cACA,YACA,cACA,cACA,SACA,gBACA,mBACA,sBACA,oBACA,mBACA,cACA,OACA,kBACA,eACA,WACA,cACA,oBACA,iBACA,0BACA,cACA,OACA,YACA,SACA,gBACA,aACA,WACA,YACA,sBACA,oBACA,sBACA,cACA,WACA,kBACA,gBACA,uBACA,iBACA,aACA,wBACA,sBACA,aACA,mBACA,iBACA,gBACA,sBACA,aACA,WACA,aACA,iCACA,+BACA,0BACA,kBACA,aACA,aACA,YACA,OACA,oBACA,gBACA,gBACA,cACA,eACA,cACA,aACA,SACA,eACA,aACA,QACA,WACA,mBACA,iBACA,SACA,wBACA,qBACA,qBACA,qBACA,qBACA,+BACA,uBACA,uBACA,uBACA,kBACA,kBACA,kBACA,gCACA,+BACA,yBACA,yBACA,0BACA,4BACA,+BACA,2BACA,mBACA,yBACA,uBACA,sBACA,yBACA,kCACA,sBACA,uCACA,iCACA,gBACA,wBACA,sBACA,mCACA,uBACA,qBACA,gCA8BIu3F,IAAyBA,CAC7BC,EACAC,EACAC,KAEA,QAAsB17F,IAAlBw7F,EACF,OAEF,IAAIG,EAASH,EAAcI,YAC3B,MAAMC,GApCqBC,EAqCzBN,EAAcO,UAAoB,SArCCC,EAsCnC,WArCEr8F,MAAMuE,QAAQ43F,KAChBA,EAAWA,EAAS,IAEfA,EAASE,IAJUC,IAACH,EAAUE,EAyCrC,QAA2Bh8F,IAAvB67F,EAAiB,MACnBF,EAASF,EAAaS,oBAAoBC,UAAUR,GACpDA,EAASD,EAAeQ,oBAAoBE,iBAAiBT,GAC7DN,IAAcgB,UAAUV,GACxBN,IAAciB,YAAW,OACpB,CACL,MAAM9nE,GAASqnE,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","file":"static/js/main.07734cec.chunk.js","sourcesContent":["var map = {\n\t\"./igc-button-component_20.entry.js\": [\n\t\t1098,\n\t\t0\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 1616;\nmodule.exports = webpackAsyncContext;","import { Map, List, Set } from 'immutable';\r\n\r\nexport const EMPTY_STRING = '';\r\nexport const EMPTY_MAP = Map();\r\nexport const EMPTY_LIST = List();\r\nexport const EMPTY_SET = Set();\r\n\r\nexport const MAX_UPLOAD_FILE_SIZE = 100_000_000; // 100MB\r\n\r\nexport const EMPTY_QUANTITY = {\r\n unit: EMPTY_STRING,\r\n value: null,\r\n hasValue: false,\r\n};\r\n\r\nexport const EMPTY_QUANTITY_WITH_UNIT = (unit) => ({\r\n unit: unit,\r\n value: null,\r\n hasValue: false,\r\n});\r\n\r\nexport const ENVIRONMENTS = {\r\n LOCAL: 'Local',\r\n DEV: 'ALTUSDEV',\r\n TST: 'ALTUSTST',\r\n PRD: 'ALTUSPRD',\r\n DEM: 'ALTUSDEM',\r\n TRAINING: 'ALTUSTRAINING',\r\n};\r\n\r\nexport const ENVIRONMENTS_NAMES = {\r\n [ENVIRONMENTS.LOCAL]: 'Local',\r\n [ENVIRONMENTS.DEV]: 'Dev',\r\n [ENVIRONMENTS.TST]: 'Test',\r\n [ENVIRONMENTS.DEM]: 'Demo',\r\n [ENVIRONMENTS.TRAINING]: 'Training',\r\n};\r\n\r\nexport const APP_ACTIONS = {\r\n LOGIN: 'LOGIN',\r\n LOGOUT: 'LOGOUT',\r\n SET_THEME: 'SET_THEME',\r\n APP_LOAD: 'APP_LOAD',\r\n ASYNC_END: 'ASYNC_END',\r\n MODAL_NEXT: 'MODAL_NEXT',\r\n REDIRECT_TO: 'REDIRECT_TO',\r\n ASYNC_START: 'ASYNC_START',\r\n TOGGLE_MODAL: 'TOGGLE_MODAL',\r\n EVENTS_LOADED: 'EVENTS_LOADED',\r\n MODAL_PREVIOUS: 'MODAL_PREVIOUS',\r\n CLEAR_REDIRECT: 'CLEAR_REDIRECT',\r\n CREATE_PROJECT: 'CREATE_PROJECT',\r\n PROJECT_LOADED: 'PROJECT_LOADED',\r\n GET_CURRENT_USER: 'GET_CURRENT_USER',\r\n INITIATE_FETCH_CHANGE_LOG: 'INITIATE_FETCH_CHANGE_LOG',\r\n INITIATE_FETCH_PRIVACY_POLICY: 'INITIATE_FETCH_PRIVACY_POLICY',\r\n STORE_CHANGE_LOG: 'STORE_CHANGE_LOG',\r\n NEW_APP_VERSION_NOTIFICATION: 'NEW_APP_VERSION_NOTIFICATION',\r\n SHOW_CHANGE_LOG_SEPARATE_TAB: 'SHOW_CHANGE_LOG_SEPARATE_TAB',\r\n GET_MAIN_VENDOR_USERS: 'GET_MAIN_VENDOR_USERS',\r\n GET_SYSTEM_ROLES: 'GET_SYSTEM_ROLES',\r\n GET_ALL_SERVICES: 'GET_ALL_SERVICES',\r\n TOGGLE_USER_MENU: 'TOGGLE_USER_MENU',\r\n ADD_NOTIFICATION: 'ADD_NOTIFICATION',\r\n SET_HEADER_VALUES: 'SET_HEADER_VALUES',\r\n EVENTS_PAGE_LOADED: 'EVENTS_PAGE_LOADED',\r\n GET_ALL_DEPARTMENTS: 'GET_ALL_DEPARTMENTS',\r\n PROJECT_SET_SUBPAGE: 'PROJECT_SET_SUBPAGE',\r\n EVENTS_MARK_AS_SEEN: 'EVENTS_MARK_AS_SEEN',\r\n REMOVE_NOTIFICATION: 'REMOVE_NOTIFICATION',\r\n SET_APPLICATION_FAILURE: 'SET_APPLICATION_FAILURE',\r\n PROJECT_MARK_AS_SEEN: 'PROJECT_MARK_AS_SEEN',\r\n EVENTS_PAGE_UNLOADED: 'EVENTS_PAGE_UNLOADED',\r\n DELETE_PROJECT_MEMBER: 'DELETE_PROJECT_MEMBER',\r\n UPDATE_PROJECT_MEMBER: 'UPDATE_PROJECT_MEMBER',\r\n SELECT_PROJECT_MEMBER: 'SELECT_PROJECT_MEMBER',\r\n DESELECT_PROJECT_MEMBER: 'DESELECT_PROJECT_MEMBER',\r\n PROJECT_MEMBER_PAGE_LOADED: 'PROJECT_MEMBER_PAGE_LOADED',\r\n PROJECT_TEAM_PAGE_UNLOADED: 'PROJECT_TEAM_PAGE_UNLOADED',\r\n CONFIRMATION_DIALOG_CONFIRM: 'CONFIRMATION_DIALOG_CONFIRM',\r\n CONFIRMATION_DIALOG_PENDING: 'CONFIRMATION_DIALOG_PENDING',\r\n PROJECT_DETAILS_PAGE_LOADED: 'PROJECT_DETAILS_PAGE_LOADED',\r\n TOGGLE_PROJECT_MEMBER_DIALOG: 'TOGGLE_PROJECT_MEMBER_DIALOG',\r\n PROJECT_DETAILS_PAGE_UNLOADED: 'PROJECT_DETAILS_PAGE_UNLOADED',\r\n CLEAR_SELECTED_PROJECT_MEMBERS: 'CLEAR_SELECTED_PROJECT_MEMBERS',\r\n UPDATE_USER_MEASUREMENT_PREFERENCES: 'UPDATE_USER_MEASUREMENT_PREFERENCES',\r\n GET_ALL_FILE_CATEGORIES: 'GET_ALL_FILE_CATEGORIES',\r\n GET_USER_PREFERENCES: 'GET_USER_PREFERENCES',\r\n GET_APPLICATION_FEATURES: 'GET_APPLICATION_FEATURES',\r\n GET_ALL_ORGANIZATIONS: 'GET_ALL_ORGANIZATIONS',\r\n SET_CURRENT_CLIENT_ORGANIZATION: 'SET_CURRENT_CLIENT_ORGANIZATION',\r\n SAVE_REDIRECT_PATH: 'SAVE_REDIRECT_PATH',\r\n};\r\n\r\nexport const UPLOAD_DOCUMENT_FORM = {\r\n ID: 'uploadDocument',\r\n META: 'meta',\r\n FILE: 'file',\r\n FILES: 'files',\r\n META_NAME: 'meta.name',\r\n META_CATEGORY: 'meta.category',\r\n META_EXTENSION: 'meta.extension',\r\n};\r\n\r\nexport const MEASUREMENT_PREFERENCES_FORM = {\r\n ID: 'measurementPreferences',\r\n};\r\n\r\nexport const USER_PREFERENCES_FORM = {\r\n ID: 'userPreferences',\r\n RECEIVE_DAILY_EMAIL: 'general.receiveDailyDigestEmail',\r\n THEME: 'general.theme',\r\n SYSTEM: 'units.system',\r\n};\r\n\r\nexport const MODAL = {\r\n UPLOAD_FILE: 'UPLOAD_FILE_MODAL_ID',\r\n CONFIRMATION_DIALOG: 'CONFIRMATION_DIALOG_MODAL_ID',\r\n APPLICATION_FAILURE: 'APPLICATION_FAILURE_MODAL_ID',\r\n EDIT_USER_PREFERENCES: 'preferences',\r\n};\r\n\r\nexport const KEYS = {\r\n TAB: 'Tab',\r\n ENTER: 'Enter',\r\n SHIFT: 'Shift',\r\n ESCAPE: 'Escape',\r\n BACKSPACE: 'Backspace',\r\n SPACE: ' ',\r\n ARROW_RIGHT: 'ArrowRight',\r\n ARROW_LEFT: 'ArrowLeft',\r\n ARROW_DOWN: 'ArrowDown',\r\n ARROW_UP: 'ArrowUp',\r\n};\r\n\r\nexport const IN_DEV = process.env.NODE_ENV === 'development' ? true : false;\r\n\r\nexport const HTTP_STATUS = {\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n CONFLICT: 409,\r\n};\r\n\r\nexport const HTTP_REASON = {\r\n SITE_ACCESS_DENIED: 8,\r\n};\r\n\r\n// PROJECTS\r\nexport const PROJECT_STATUS = {\r\n PLAN: 1,\r\n EXECUTE: 2,\r\n REPORT: 3,\r\n};\r\n\r\nexport const ProjectWellboreDetailStatus = {\r\n DRAFT: 0,\r\n REQUIRES_APPROVAL: 1,\r\n APPROVED: 2,\r\n};\r\n\r\n// WORK ITEM STATUS (TASK / ACTIVITIES)\r\nexport const WORK_ITEM_STATUS = {\r\n NOT_SET: 0,\r\n PLANNED: 0x0001,\r\n STARTED: 0x0010,\r\n PAUSED: 0x0011,\r\n COMPLETED: 0x0020,\r\n SKIPPED: 0x0021,\r\n FAILED: 0x0022,\r\n};\r\n\r\n// MISC\r\nexport const Format = {\r\n date: 'YYYY/MM/DD',\r\n date_dayfirst: 'DD/MM/YYYY',\r\n time: 'YYYY/MM/DD HH:mm',\r\n time_long: 'YYYY/MM/DD HH:mm:ss',\r\n datetime_local: 'YYYY-MM-DDTHH:mm',\r\n input: 'YYYY-MM-DD',\r\n duration: 'HH:mm:ss',\r\n duration_display: 'HH[h] mm[m]',\r\n duration_short: 'HH:mm',\r\n human: {\r\n date: 'dddd[,] Do [of] MMMM',\r\n },\r\n};\r\n\r\nexport const DIRECTION = {\r\n STATIONARY: 'STATIONARY',\r\n UP: 'UP',\r\n DOWN: 'DOWN',\r\n};\r\n\r\nexport const SLIDE_DIRECTIONS = {\r\n NEXT: 'NEXT',\r\n PREVIOUS: 'PREVIOUS',\r\n};\r\n\r\nexport const NOTIFICATION_VARIANTS = {\r\n SUCCESS: 'success',\r\n ERROR: 'error',\r\n INFO: 'info',\r\n};\r\n\r\nexport const METERS_PER_FEET = 1 / (1 / 0.0254 / 12);\r\n\r\nexport const TIME_UNITS = {\r\n YEAR: 'years',\r\n MONTH: 'months',\r\n WEEK: 'weeks',\r\n DAY: 'days',\r\n HOUR: 'hours',\r\n MINUTE: 'minutes',\r\n SECOND: 'seconds',\r\n MILLISECONDS: 'milliseconds',\r\n};\r\n\r\nexport const UNITS = {\r\n METER: 'm',\r\n FEET: 'ft',\r\n POUND: 'lb',\r\n POUND_WEIGHT: 'lbs',\r\n KILO_POUND: 'klbs',\r\n POUND_FORCE: 'lbf',\r\n NEWTON: 'N',\r\n KILO_POUND_FORCE: 'kipf',\r\n KILO_GRAM_FORCE: 'kgf',\r\n KILO: 'kg',\r\n BARG: 'bar',\r\n PSIG: 'psi',\r\n M_MIN: 'm/min',\r\n M_S: 'm/s',\r\n FT_MIN: 'ft/min',\r\n DEG: 'deg',\r\n CELCIUS: 'C',\r\n FAHRENHEIT: 'F',\r\n INCHES: 'in',\r\n MILLIMETER: 'mm',\r\n M_3_MIN: 'm3/min',\r\n GAL_MIN: 'gal/min',\r\n FT_S: 'ft/s',\r\n M_3: 'm³',\r\n GALLON_US: 'gal (U.S.)',\r\n M_3_DAY: 'm³/d',\r\n FT_3_DAY: 'ft³/d',\r\n BARRELS_DAY: 'bpd',\r\n KILOGRAM_CUBIC_METER: 'kg/m³',\r\n STANDARD_CUBIC_METER_PER_DAY: 'Sm³/d',\r\n THOUSAND_STANDARD_CUBIC_FEET_PER_DAY: 'kft³/d',\r\n OIL_BARRELS_PER_DAY: 'bbl/d',\r\n KILOGRAM_KILOMETER: 'kg/km',\r\n LBS_1000FEET: 'lbs/1000 ft',\r\n POUND_PER_US_GALLON: 'ppg (U.S.)',\r\n METER_PER_KILOMETER_PER_5000NEWTON: 'm/km/5KN',\r\n FEET_PER_1000FEET_PER_1000LBS: 'ft/Kft/Klbf',\r\n};\r\n\r\nexport const CONVERT_ALIASES = {\r\n [UNITS.POUND]: ['lbs', 'Lbs'],\r\n [UNITS.POUND_FORCE]: ['lbf', 'Lbf'],\r\n [UNITS.BARG]: ['barg'],\r\n [UNITS.CELCIUS]: ['°C'],\r\n [UNITS.FAHRENHEIT]: ['°F'],\r\n [UNITS.GAL_MIN]: ['Gal/min'],\r\n [UNITS.PSIG]: ['psig'],\r\n [UNITS.M_3_MIN]: ['m³/min'],\r\n};\r\n\r\nexport const CUSTOM_UNIT_SYSTEM = 'Custom';\r\nexport const USE_PROJECT_DEFAULT_UNIT_SYSTEM = 'Project Default';\r\n\r\nexport const CONVERT_MEASURES = {\r\n LENGTH: 'length',\r\n PRESSURE: 'pressure',\r\n SPEED: 'speed',\r\n TEMPERATURE: 'temperature',\r\n MASS: 'mass',\r\n VOLUME_FLOW_RATE: 'volumeFlowRate',\r\n VOLUME: 'volume',\r\n DEPTH: 'depth',\r\n FORCE: 'force',\r\n BIG_FORCE: 'bigForce',\r\n TOOL_DIAMETER: 'toolDiameter',\r\n TUBULAR_DIAMETER: 'tubularDiameter',\r\n GAS_FLOW_RATE: 'gasFlowRate',\r\n LIQUID_RATE: 'liquidRate',\r\n GAS_DENSITY: 'gasDensity',\r\n LIQUID_DENSITY: 'liquidDensity',\r\n WEIGHT_IN_AIR: 'weightInAir',\r\n STRETCH_COEFFICIENT: 'stretchCoefficient',\r\n};\r\n\r\nexport const CONVERT_MEASURES_NAMES = {\r\n [CONVERT_MEASURES.LENGTH]: 'Length',\r\n [CONVERT_MEASURES.PRESSURE]: 'Pressure',\r\n [CONVERT_MEASURES.SPEED]: 'Speed',\r\n [CONVERT_MEASURES.TEMPERATURE]: 'Temperature',\r\n [CONVERT_MEASURES.MASS]: 'Mass',\r\n [CONVERT_MEASURES.VOLUME]: 'Volume',\r\n [CONVERT_MEASURES.VOLUME_FLOW_RATE]: 'Volume flow rate',\r\n [CONVERT_MEASURES.DEPTH]: 'Depth',\r\n [CONVERT_MEASURES.FORCE]: 'Force',\r\n [CONVERT_MEASURES.BIG_FORCE]: 'Big Force',\r\n [CONVERT_MEASURES.TOOL_DIAMETER]: 'Tool Diameter',\r\n [CONVERT_MEASURES.TUBULAR_DIAMETER]: 'Tubular Diameter',\r\n [CONVERT_MEASURES.GAS_FLOW_RATE]: 'Gas Flow Rate',\r\n [CONVERT_MEASURES.LIQUID_RATE]: 'Liquid Rate',\r\n [CONVERT_MEASURES.GAS_DENSITY]: 'Gas Density',\r\n [CONVERT_MEASURES.LIQUID_DENSITY]: 'Liquid Density',\r\n [CONVERT_MEASURES.WEIGHT_IN_AIR]: 'Weight in Air',\r\n [CONVERT_MEASURES.STRETCH_COEFFICIENT]: 'Stretch Coefficient',\r\n};\r\n\r\nexport const CONVERT_SYSTEMS = {\r\n METRIC: 'metric',\r\n IMPERIAL: 'imperial',\r\n};\r\n\r\nexport const UNITS_BY_CATEGORY = {\r\n [CONVERT_MEASURES.LENGTH]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.METER,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.FEET,\r\n },\r\n [CONVERT_MEASURES.PRESSURE]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.BARG,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.PSIG,\r\n },\r\n [CONVERT_MEASURES.SPEED]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.M_S,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.FT_S,\r\n },\r\n [CONVERT_MEASURES.TEMPERATURE]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.CELCIUS,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.FAHRENHEIT,\r\n },\r\n [CONVERT_MEASURES.MASS]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.KILO,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.POUND,\r\n },\r\n [CONVERT_MEASURES.VOLUME]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.M_3,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.GALLON_US,\r\n },\r\n [CONVERT_MEASURES.VOLUME_FLOW_RATE]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.M_3_MIN,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.GAL_MIN,\r\n },\r\n [CONVERT_MEASURES.DEPTH]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.METER,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.FEET,\r\n },\r\n [CONVERT_MEASURES.FORCE]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.NEWTON,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.POUND_FORCE,\r\n },\r\n [CONVERT_MEASURES.BIG_FORCE]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.KILO_GRAM_FORCE,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.KILO_POUND_FORCE,\r\n },\r\n [CONVERT_MEASURES.TOOL_DIAMETER]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.MILLIMETER,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.INCHES,\r\n },\r\n [CONVERT_MEASURES.TUBULAR_DIAMETER]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.MILLIMETER,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.INCHES,\r\n },\r\n [CONVERT_MEASURES.GAS_FLOW_RATE]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.STANDARD_CUBIC_METER_PER_DAY,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.THOUSAND_STANDARD_CUBIC_FEET_PER_DAY,\r\n },\r\n [CONVERT_MEASURES.LIQUID_RATE]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.M_3_DAY,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.OIL_BARRELS_PER_DAY,\r\n },\r\n [CONVERT_MEASURES.GAS_DENSITY]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.KILOGRAM_CUBIC_METER,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.POUND_PER_US_GALLON,\r\n },\r\n [CONVERT_MEASURES.LIQUID_DENSITY]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.KILOGRAM_CUBIC_METER,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.POUND_PER_US_GALLON,\r\n },\r\n [CONVERT_MEASURES.WEIGHT_IN_AIR]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.KILOGRAM_KILOMETER,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.LBS_1000FEET,\r\n },\r\n [CONVERT_MEASURES.STRETCH_COEFFICIENT]: {\r\n [CONVERT_SYSTEMS.METRIC]: UNITS.METER_PER_KILOMETER_PER_5000NEWTON,\r\n [CONVERT_SYSTEMS.IMPERIAL]: UNITS.FEET_PER_1000FEET_PER_1000LBS,\r\n },\r\n};\r\n\r\nexport const LIMIT = {\r\n GRAPH_TIME_SPAN: 7200,\r\n UNIT: {\r\n [UNITS.CELCIUS]: 300,\r\n bar: 600,\r\n [UNITS.BARG]: 600,\r\n bara: 600,\r\n //TODO: Find max tension dynamically?\r\n [UNITS.KILO]: 1800,\r\n [UNITS.POUND_FORCE]: 4000,\r\n //TODO: Find max speed dynamically?\r\n [UNITS.M_S]: 4,\r\n [UNITS.M_MIN]: 250, // corresponds to 15 km/h\r\n },\r\n};\r\n\r\nexport const CUSTOM_UNITS = {\r\n [UNITS.M_MIN]: {\r\n measure: CONVERT_MEASURES.SPEED,\r\n system: CONVERT_SYSTEMS.METRIC,\r\n },\r\n [UNITS.FT_MIN]: {\r\n measure: CONVERT_MEASURES.SPEED,\r\n system: CONVERT_SYSTEMS.IMPERIAL,\r\n },\r\n};\r\n\r\nexport const THEMES = {\r\n DARK: 'dark',\r\n LIGHT: 'light',\r\n};\r\n\r\nexport const THEME_COOKIE_ID = 'digitalIntervention_theme';\r\nexport const BEARER_TOKEN_COOKIE_ID = 'digitalIntervention_bearer';\r\n\r\nexport const MSAL_PREFIX = 'msal.';\r\n\r\nexport const NORWAY_MAP_CENTER_COORDS = [60.472, 8.4689];\r\nexport const EUROPE_MAP_CENTER_COORDS = [59.526, 25.2551];\r\n\r\nexport const PUBLIC_ASSETS_URL = process.env.REACT_APP_PUBLIC_ASSETS_URL;\r\n\r\nexport const APP_NAME = process.env.REACT_APP_APP_TITLE;\r\nexport const APP_VERSION = process.env.REACT_APP_APP_VERSION;\r\nexport const APP_VERSION_STORAGE_KEY = 'CURRENT_APP_VERSION';\r\n// export const APP_SHORTNAME = 'DWI';\r\nexport const APP_SHORTNAME = 'CHOREOGRAF Collaborate';\r\nexport const LIVE_OPERATIONS_APP_NAME = 'Collaborate LiveOps';\r\n\r\nexport const OrganizationType = {\r\n MAIN_VENDOR: 0,\r\n THIRD_PARTY: 1,\r\n CUSTOMER: 2,\r\n BAKER_HUGHES: 3,\r\n};\r\n\r\nexport const ProjectPermission = {\r\n FULL_ACCESS: 100000,\r\n EDIT_PROJECT_DETAILS: 10000,\r\n INITIATE_DELETE_PROJECT: 10001,\r\n EDIT_WELL_DETAILS: 10100,\r\n APPROVE_WELL_DETAILS: 10101,\r\n EXPORT_WELL_DETAILS: 10102,\r\n MANAGE_TEAM_MEMBERS_ACCESS: 10200,\r\n DELETE_TEAM_MEMBERS: 10201,\r\n ADD_TEAM_MEMBERS: 10202,\r\n UPLOAD_DOCUMENTS: 10300,\r\n DOWNLOAD_DOCUMENTS: 10301,\r\n DELETE_ALL_DOCUMENTS: 10302,\r\n CREATE_TASKS: 10400,\r\n DELETE_TASKS: 10401,\r\n EDIT_TASKS: 10402,\r\n EDIT_TASK_DETAILS: 10500,\r\n EDIT_TASK_WELL_DETAILS: 10600,\r\n EDIT_TOOLSTRING: 10700,\r\n CREATE_TOOLSTRING: 10701,\r\n DELETE_TOOLSTRING: 10702,\r\n CREATE_SIMULATION: 10800,\r\n EDIT_SIMULATION: 10801,\r\n DELETE_SIMULATION: 10802,\r\n EDIT_ACTIVITIES: 10900,\r\n CREATE_ACTIVITY: 10901,\r\n DELETE_ACTIVITY: 10902,\r\n READ_ACTIVITY_COMMENTS: 10903,\r\n CREATE_LESSONS: 11100,\r\n EDIT_LESSONS: 11101,\r\n DELETE_LESSONS: 11102,\r\n READ_ACTIVITY_COMMENTS_REPORT: 11200,\r\n EXECUTE: 12000,\r\n READ_ACTIVITY_COMMENTS_EXECUTE: 12100,\r\n CREATE_INCIDENTS: 12200,\r\n EDIT_INCIDENTS: 12201,\r\n DELETE_INCIDENTS: 12202,\r\n};\r\n\r\nexport const SystemPermission = {\r\n CREATE_PROJECTS: 1000,\r\n DELETE_PROJECTS: 1001,\r\n MANAGE_SYSTEM_ROLES: 1100,\r\n MANAGE_PROJECT_ROLES: 1200,\r\n MANAGE_USER_ACCESS: 1300,\r\n MANAGE_EQUIPMENT: 1400,\r\n MANAGE_SERVICES: 1500,\r\n MANAGE_WELLS: 1600,\r\n MANAGE_SIMULATIONS: 1700,\r\n DATA_EXCHANGE: 1800,\r\n EQUIPMENT_TAB_VIEW: 1802,\r\n ITEM_TAB_EDIT: 1804,\r\n THIRD_PARTY_TAB_EDIT: 1805,\r\n ITEM_VERIFICATION: 1810,\r\n WELL_ACCESS_ONLY: 1900,\r\n DASHBOARD_CONFIGURATION_ACCESS: 2000,\r\n INTEGRITY_RULES_MANAGEMENT: 2100,\r\n SCHEMATICS_EDITOR: 2200,\r\n};\r\n\r\nexport const ProjectRoles = {\r\n OWNER: 200,\r\n PLANNER: 201,\r\n PLANNING_AND_SUPPORT: 202,\r\n CREW: 203,\r\n VIEWER: 204,\r\n CLIENT_OWNER: 205,\r\n THIRD_PARTY: 206,\r\n VIEWER_AND_COMMUNICATIONS: 207,\r\n};\r\n\r\nexport const FormikFormStatus = {\r\n SUCCESS: 0,\r\n ERROR: 1,\r\n};\r\n\r\nexport const UnitSystem = {\r\n METRIC: 0,\r\n IMPERIAL: 1,\r\n};\r\n\r\nexport const CheetahJobStatus = {\r\n OTHER: 0,\r\n STREAMING: 1,\r\n STOPPED: 2,\r\n};\r\n\r\nexport const SmLocationStatus = {\r\n UNKNOWN: 0,\r\n PING: 1,\r\n NO_PING: 2,\r\n};\r\n\r\nexport const PagedQueryParams = {\r\n PAGE: 'pageParams.page',\r\n PAGE_SIZE: 'pageParams.pageSize',\r\n};\r\n\r\nexport const FacilityType = {\r\n FIXED: 0,\r\n MOBILE: 1,\r\n};\r\n\r\nexport const M3SearchType = {\r\n ITEMS: 1,\r\n SERIALNUMBERS: 2,\r\n};\r\n\r\nexport const RiskConsequenceEnum = {\r\n Major: { id: 1, name: '1 - Major' },\r\n Serious: { id: 2, name: '2 - Serious' },\r\n Moderate: { id: 3, name: '3 - Moderate' },\r\n Minor: { id: 4, name: '4 - Minor' },\r\n Negligible: { id: 5, name: '5 - Negligible' },\r\n};\r\n\r\nexport const RiskProbabilityEnum = {\r\n VeryLikely: { id: 1, name: 'A - Very Likely' },\r\n Likely: { id: 2, name: 'B - Likely' },\r\n Possible: { id: 3, name: 'C - Possible' },\r\n Unlikely: { id: 4, name: 'D - Unlikely' },\r\n VeryUnlikely: { id: 5, name: 'E - Very Unlikely' },\r\n};\r\n\r\nexport const RiskStateEnum = {\r\n Open: { id: 1, name: 'Open' },\r\n Mitigated: { id: 2, name: 'Mitigated' },\r\n Accepted: { id: 3, name: 'Accepted' },\r\n};\r\n\r\nexport const RiskMatrix = [\r\n [\r\n 'N/A',\r\n 'A-Very Likely',\r\n 'B-Likely',\r\n 'C-Possible',\r\n 'D-Unlikely',\r\n 'E-Very Unlikely',\r\n ],\r\n ['1-Major', 'Red', 'Red', 'Red', 'Red', 'Yellow'],\r\n ['2-Serious', 'Red', 'Red', 'Red', 'Yellow', 'Yellow'],\r\n ['3-Moderate', 'Red', 'Yellow', 'Yellow', 'Yellow', 'Green'],\r\n ['4-Minor', 'Yellow', 'Yellow', 'Green', 'Green', 'Green'],\r\n ['5-Negligible', 'Yellow', 'Green', 'Green', 'Green', 'Green'],\r\n];\r\n\r\nexport const FrictionReducerTypeEnum = {\r\n StarLube: 1,\r\n StarGilde: 2,\r\n RamexRX72: 3,\r\n BaraLubeW511: 4,\r\n KLAROTMLUBENS: 5,\r\n Other: 6,\r\n};\r\n\r\nexport const RiskLevels = {\r\n Red: 3,\r\n Yellow: 2,\r\n Green: 1,\r\n 'N/A': 0,\r\n};\r\n\r\nexport const RiskPriorityMatrix = [\r\n [null, null, null, null, null, null],\r\n [null, 1, 2, 3, 4, 9],\r\n [null, 5, 6, 7, 10, 11],\r\n [null, 8, 12, 13, 14, 18],\r\n [null, 15, 16, 19, 20, 21],\r\n [null, 17, 22, 23, 24, 25],\r\n];\r\n\r\nexport const WellControlDrillResult = List([\r\n { id: '1', name: 'Above Average' },\r\n { id: '2', name: 'Average' },\r\n { id: '3', name: 'Below Average' },\r\n]);\r\n\r\nexport const EMPTY_QUANTITY_LENGTH = {\r\n unit: UNITS.METER,\r\n value: null,\r\n hasValue: false,\r\n};\r\n\r\nexport const ERROR_CODE_WINDOW_POP_UP_DISABLED = 'popup_window_error';\r\n\r\n// For activities with some of Wait types, should prevent duplicating\r\nexport const ACTIVITY_WAIT_CODES = ['WCUS', 'WOC', 'WOW', 'W3RD'];\r\n","export const TOOL_ACTIONS = {\r\n // M3\r\n UPDATE_TOOLS_FROM_M3_ITEMS: 'UPDATE_TOOLS_FROM_M3_ITEMS',\r\n\r\n // Tool Images\r\n UPLOAD_TOOL_IMAGE: 'UPLOAD_TOOL_IMAGE',\r\n UPDATE_TOOL_IMAGE: 'UPDATE_TOOL_IMAGE',\r\n DELETE_TOOL_IMAGE: 'DELETE_TOOL_IMAGE',\r\n ASSOCIATE_IMAGE_TO_TOOL: 'ASSOCIATE_IMAGE_TO_TOOL',\r\n DISASSOCIATE_IMAGE_FROM_TOOL: 'DISASSOCIATE_IMAGE_FROM_TOOL',\r\n\r\n // Saga\r\n REQUEST_TOOL_IMAGES: 'REQUEST_TOOL_IMAGES',\r\n RECEIVE_TOOL_IMAGES: 'RECEIVE_TOOL_IMAGES',\r\n REQUEST_TOOLS_SEARCH: 'REQUEST_TOOLS_SEARCH',\r\n RECEIVE_TOOLS_SEARCH: 'RECEIVE_TOOLS_SEARCH',\r\n REQUEST_TOOL_GROUPS: 'REQUEST_TOOL_GROUPS',\r\n RECEIVE_TOOL_GROUPS: 'RECEIVE_TOOL_GROUPS',\r\n REQUEST_TOOL_SUPPLIERS: 'REQUEST_TOOL_SUPPLIERS',\r\n RECEIVE_TOOL_SUPPLIERS: 'RECEIVE_TOOL_SUPPLIERS',\r\n REQUEST_TOOL_GROUPS_BY_CATEGORY: 'REQUEST_TOOL_GROUPS_BY_CATEGORY',\r\n TOOL_PICKER_MODAL_ON_LOAD: 'TOOL_PICKER_MODAL_ON_LOAD',\r\n REQUEST_TOOL_CONNECTORS: 'REQUEST_TOOL_CONNECTORS',\r\n RECEIVE_TOOL_CONNECTORS: 'RECEIVE_TOOL_CONNECTORS',\r\n REQUEST_TOOL_TOP_CONNECTORS: 'REQUEST_TOOL_TOP_CONNECTORS',\r\n RECEIVE_TOOL_TOP_CONNECTORS: 'RECEIVE_TOOL_TOP_CONNECTORS',\r\n REQUEST_TOOL_BOTTOM_CONNECTORS: 'REQUEST_TOOL_BOTTOM_CONNECTORS',\r\n RECEIVE_TOOL_BOTTOM_CONNECTORS: 'RECEIVE_TOOL_BOTTOM_CONNECTORS',\r\n REQUEST_REFRESH_ALL_TOOLS_WITH_M3: 'REQUEST_REFRESH_ALL_TOOLS_WITH_M3',\r\n REQUEST_CABLES: 'REQUEST_CABLES',\r\n REQUEST_CABLES_BY_PROJECT: 'REQUEST_CABLES_BY_PROJECT',\r\n RECEIVE_CABLES: 'RECEIVE_CABLES',\r\n RECEIVE_TOOL_PROJECT_HISTORY: 'RECEIVE_TOOL_PROJECT_HISTORY',\r\n\r\n // IMPORT\r\n IMPORT_TOOLS_FROM_FILE: 'IMPORT_TOOLS_FROM_FILE',\r\n IMPORT_TOOLS_MODAL_ID: 'IMPORT_TOOLS_MODAL_ID',\r\n};\r\n\r\nexport const MODAL = {\r\n ATTACH_TOOL_PICKER_MODAL_ID: 'ATTACH_TOOL_PICKER_MODAL_ID',\r\n TOOL_PICKER_MODAL_ID: 'TOOL_PICKER_MODAL_ID',\r\n CABLE_PICKER_MODAL_ID: 'CABLE_PICKER_MODAL_ID',\r\n TOOL_ASSEMBLY_TOOL_PICKER_MODAL_ID: 'TOOL_ASSEMBLY_TOOL_PICKER_MODAL_ID',\r\n};\r\n\r\nexport const CableType = {\r\n MONO: 1,\r\n SWAB: 2,\r\n SLICKLINE: 3,\r\n MULTICONDUCTOR: 4,\r\n COAX: 5,\r\n ELINE: 6,\r\n};\r\n\r\nexport const ExifOrientation = {\r\n DEGREES_0: 1, // the correct orientation, no adjustment is required\r\n DEGREES_90_MIRRORED: 6, // image is on its side - clockwise\r\n DEGREES_90: 8, // image is on its side - counterclockwise\r\n};\r\n\r\n// maps to ToolGroupCategory in backend\r\nexport const ToolCategoryType = {\r\n MWL: 1,\r\n ThirdParty: 2,\r\n EWL: 3,\r\n Assemblies: 4,\r\n};\r\n\r\nexport const ToolType = {\r\n TOOL: 0,\r\n ASSEMBLY: 1,\r\n ATTACHMENT: 2,\r\n ASSEMBLY_TOOL: 10,\r\n};\r\n\r\nexport const ThirdPartyLabel = '3rd party';\r\n\r\nexport const MissingSerialNoModal = {\r\n TITLE: 'Missing serial numbers',\r\n CONTENT:\r\n 'All tools needs to have serial numbers in order to verify the tool string.',\r\n BUTTON: 'Close',\r\n};\r\n","import { ENVIRONMENTS as Environments } from 'app/app.constants';\r\n\r\nconst defaultClientConfig = {\r\n environmentName: Environments.LOCAL,\r\n};\r\n\r\nconst clientConfig = window.clientConfig || defaultClientConfig;\r\n\r\n// If the API root isn't present in the ClientConfig, add it based on the env variable.\r\nif (!clientConfig.apiRoot) {\r\n clientConfig.apiRoot = process.env.REACT_APP_API_ROOT;\r\n}\r\n\r\nexport default clientConfig;\r\n","import _ from 'lodash';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport FileSaver from 'file-saver';\r\nimport { fromJS, isSet, Set } from 'immutable';\r\nimport isArray from 'lodash/isArray';\r\nimport isEqual from 'lodash/isEqual';\r\nimport cookies from 'browser-cookies';\r\nimport isFunction from 'lodash/isFunction';\r\nimport { isMobile } from 'react-device-detect';\r\n\r\nimport scrollIntoView from 'scroll-into-view-if-needed';\r\nimport { createSelectorCreator, defaultMemoize } from 'reselect';\r\n\r\nimport {\r\n BEARER_TOKEN_COOKIE_ID,\r\n MSAL_PREFIX,\r\n RiskLevels,\r\n RiskMatrix,\r\n RiskPriorityMatrix,\r\n THEME_COOKIE_ID,\r\n WORK_ITEM_STATUS,\r\n} from 'app/app.constants';\r\nimport { convertFromRaw, convertToRaw, EditorState } from 'draft-js';\r\nimport config from 'infrastructure/config';\r\n\r\nexport const isPromise = (argument) =>\r\n !_.isNil(argument) && _.isFunction(argument.then);\r\n\r\nexport const invokeIfFunction = (fn, ...args) => isFunction(fn) && fn(...args);\r\n\r\nexport const getInitials = (fullName = '') => {\r\n const names = fullName.split(' ');\r\n\r\n return names.length > 1\r\n ? [_.first(names) || '', _.last(names) || ''].reduce(\r\n (r, name) => r + _.upperCase(name.charAt(0)),\r\n '',\r\n )\r\n : _.upperCase(_.first(names).charAt(0));\r\n};\r\n\r\nexport const getAvatar = (avatar) => {\r\n return avatar ? `data:image/png;base64,${avatar}` : null;\r\n};\r\n\r\nexport const scrollSmoothlyIntoViewIfNeeded = (node) =>\r\n node &&\r\n scrollIntoView(node, {\r\n behavior: 'smooth',\r\n scrollMode: 'if-needed',\r\n });\r\n\r\nexport const scrollToTopSmoothly = (node) => {\r\n if (node) {\r\n if (node.scrollTo) {\r\n node.scrollTo({\r\n top: 0,\r\n behavior: 'smooth',\r\n });\r\n } else {\r\n node.scrollTop = 0;\r\n }\r\n }\r\n};\r\n\r\nexport const durationFromStartAndEndTime = (startTime, endTime = moment()) =>\r\n moment.isMoment(startTime) && moment.isMoment(endTime)\r\n ? moment.duration(endTime.diff(startTime))\r\n : null;\r\n\r\nexport const calcActivityDuration =\r\n (waitCodesDuration) =>\r\n (startTime, endTime = moment()) => {\r\n let result = durationFromStartAndEndTime(startTime, endTime);\r\n\r\n // Reduce activity duration for duration of wait codes (if any)\r\n return waitCodesDuration && result\r\n ? result.clone().subtract(waitCodesDuration)\r\n : result;\r\n };\r\n\r\nexport const renderContent = (Component, props) =>\r\n isFunction(Component) ? : Component;\r\n\r\nexport const saveFile = (blob, filename) => FileSaver.saveAs(blob, filename);\r\n\r\nexport const getWorkItemStatusDisplayName = (status) => {\r\n switch (status) {\r\n case WORK_ITEM_STATUS.STARTED:\r\n return 'In Progress';\r\n case WORK_ITEM_STATUS.PAUSED:\r\n return 'Paused';\r\n case WORK_ITEM_STATUS.COMPLETED:\r\n return 'Completed';\r\n case WORK_ITEM_STATUS.SKIPPED:\r\n return 'Skipped';\r\n case WORK_ITEM_STATUS.FAILED:\r\n return 'Failed';\r\n case WORK_ITEM_STATUS.NOT_SET:\r\n return 'N/A';\r\n case WORK_ITEM_STATUS.PLANNED:\r\n return 'Planned';\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\nconst toCookieValueFromUserId = (userId) => `${userId}-${THEME_COOKIE_ID}`;\r\n\r\nexport const getCurrentThemeOrDefault = (userId, defaultTheme) => {\r\n if (userId) {\r\n return cookies.get(toCookieValueFromUserId(userId)) || defaultTheme;\r\n }\r\n\r\n return defaultTheme;\r\n};\r\n\r\nexport const setCurrentTheme = (userId, theme) => {\r\n if (userId && theme) {\r\n cookies.set(toCookieValueFromUserId(userId), theme, {\r\n expires: 365,\r\n });\r\n }\r\n};\r\n\r\nexport const getBearerToken = () => cookies.get(BEARER_TOKEN_COOKIE_ID);\r\n\r\nexport const eraseBearerToken = () => cookies.erase(BEARER_TOKEN_COOKIE_ID);\r\n\r\nexport const deleteMsalFromLocalStorage = () => {\r\n eraseBearerToken();\r\n\r\n Object.keys(localStorage)\r\n .filter((key) => key.startsWith(MSAL_PREFIX))\r\n .forEach((key) => localStorage.removeItem(key));\r\n};\r\n\r\nexport const createSelector = createSelectorCreator(defaultMemoize, isEqual);\r\n\r\nexport const makeActionCreator = (action, ...argNames) => {\r\n const { payload: payloadFn } = action;\r\n\r\n return (...args) =>\r\n (dispatch) => {\r\n const payloadResult = payloadFn(...args);\r\n\r\n const payload = isFunction(payloadResult)\r\n ? dispatch(payloadResult)\r\n : payloadResult;\r\n\r\n const updatedAction = argNames.reduce(\r\n (sum, _curr, index) => ({\r\n ...sum,\r\n [argNames[index]]: args[index],\r\n }),\r\n {\r\n ...action,\r\n payload,\r\n },\r\n );\r\n\r\n dispatch(updatedAction);\r\n\r\n return payload;\r\n };\r\n};\r\n\r\nexport const convertToSet = (items) => {\r\n if (isSet(items)) return items;\r\n\r\n return isArray(items) ? Set(items) : Set.of(items);\r\n};\r\n\r\nexport const registerServiceWorker = () => {\r\n if (isMobile && 'serviceWorker' in navigator) {\r\n window.addEventListener('load', function () {\r\n navigator.serviceWorker\r\n .register('/serviceWorker.js', {\r\n scope: '/',\r\n })\r\n .then(() => console.log('service worker registered'))\r\n .catch((err) =>\r\n console.log('service worker not registered! error: ', err),\r\n );\r\n });\r\n }\r\n};\r\n\r\nexport const QuantityShape = PropTypes.shape({\r\n value: PropTypes.number,\r\n unit: PropTypes.string.isRequired,\r\n hasValue: PropTypes.bool.isRequired,\r\n});\r\n\r\nexport const getQuantityUnitFromItems = (items, quantitySelector) => {\r\n if (!items) return null;\r\n if (!items.size) return null;\r\n\r\n // convert to Seq for lazy evaluation\r\n var quantity = items.toSeq().map(quantitySelector).first();\r\n\r\n if (!quantity) return null;\r\n\r\n return quantity.unit;\r\n};\r\n\r\nexport const isValidJSON = (str) => {\r\n try {\r\n JSON.parse(str);\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nexport const getRichEditorText = (text, showText = false) => {\r\n if (!text) {\r\n return null;\r\n }\r\n\r\n if (!isValidJSON(text)) {\r\n return showText ? text : null;\r\n }\r\n\r\n const textObject = JSON.parse(text);\r\n return textObject.blocks && Array.isArray(textObject.blocks)\r\n ? textObject.blocks.map((block) => block.text).join(' ')\r\n : null;\r\n};\r\n\r\nexport const RichText = (item, key) =>\r\n item?.get(key)\r\n ? EditorState.createWithContent(convertFromRaw(JSON.parse(item?.get(key))))\r\n : EditorState.createEmpty();\r\n\r\nexport const validateTimeString = (timeString, notRequired = false) => {\r\n if (notRequired && (timeString === 0 || timeString === '0')) return true;\r\n if (\r\n timeString === 0 ||\r\n timeString === undefined ||\r\n Number.isNaN(timeString) ||\r\n timeString === '0' ||\r\n timeString === 'NaN'\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nexport const sortRisks = (risks) => {\r\n if (!risks || typeof risks.toJS !== 'function') {\r\n return fromJS([]);\r\n }\r\n const risksArray = risks.toJS();\r\n risksArray.sort((a, b) => {\r\n const riskA = RiskMatrix[a.consequence][a.probability];\r\n const riskB = RiskMatrix[b.consequence][b.probability];\r\n\r\n const priorityA = RiskPriorityMatrix[a.consequence][a.probability];\r\n const priorityB = RiskPriorityMatrix[b.consequence][b.probability];\r\n\r\n if (riskA === riskB) {\r\n return priorityA - priorityB;\r\n }\r\n\r\n return RiskLevels[riskB] - RiskLevels[riskA];\r\n });\r\n return fromJS(risksArray);\r\n};\r\n\r\nexport const formatDateTimeFromSeconds = (dateStr, timeInSeconds) => {\r\n const dateMoment = moment.utc(dateStr);\r\n dateMoment.startOf('day').add(timeInSeconds, 'seconds');\r\n return dateMoment.format('YYYY-MM-DDTHH:mm:ssZ');\r\n};\r\n\r\nconst parseDateStringToMoment = (dateStr) => moment(dateStr);\r\n\r\nexport const extractTimeFromDate = (dateStr) => {\r\n const dateMoment = parseDateStringToMoment(dateStr);\r\n return dateMoment.format('hh:mm');\r\n};\r\n\r\nexport const extractTimeIn24HourFormat = (dateStr) => { \r\n const dateMoment = parseDateStringToMoment(dateStr);\r\n return dateMoment.format('HH:mm');\r\n};\r\n\r\nexport const extractTimeIn24HourFormatUTC = (dateStr) => {\r\n const dateMoment = parseDateStringToMoment(dateStr).utc();\r\n return dateMoment.format('HH:mm');\r\n};\r\n\r\nexport const editorStateToString = (editorState) => {\r\n const rawContentState = convertToRaw(editorState.getCurrentContent());\r\n return JSON.stringify(rawContentState);\r\n};\r\n\r\nexport const stringToEditorState = (str) => {\r\n const rawContentState = JSON.parse(str);\r\n const contentState = convertFromRaw(rawContentState);\r\n return EditorState.createWithContent(contentState);\r\n};\r\n\r\nexport const EditorContentToStringWithTry = (editorContent) => {\r\n try {\r\n if (!editorContent) {\r\n console.error(\r\n 'Error converting content state to raw JSON',\r\n editorContent,\r\n );\r\n return null;\r\n }\r\n\r\n const rawContent = editorStateToString(editorContent);\r\n return rawContent;\r\n } catch (error) {\r\n console.error('Error converting content state to raw JSON:', error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const getBrowserName = () => {\r\n const userAgent = navigator.userAgent;\r\n let browserName;\r\n\r\n if (userAgent.match(/edg/i)) {\r\n browserName = 'Edge';\r\n } else if (userAgent.match(/chrome|chromium|crios/i)) {\r\n browserName = 'Chrome';\r\n } else if (userAgent.match(/firefox|fxios/i)) {\r\n browserName = 'Firefox';\r\n } else if (\r\n userAgent.match(/safari/i) &&\r\n !userAgent.match(/chrome|chromium|crios/i)\r\n ) {\r\n browserName = 'Safari';\r\n } else if (userAgent.match(/opr\\//i)) {\r\n browserName = 'Opera';\r\n } else if (userAgent.match(/msie|trident/i)) {\r\n browserName = 'Internet Explorer';\r\n } else {\r\n browserName = 'Unknown';\r\n }\r\n\r\n return browserName;\r\n};\r\n\r\nexport const formatDurationInSeconds = (durationInSeconds) => {\r\n const duration = durationInSeconds ?? 0;\r\n const hours = Math.floor(duration / 3600);\r\n const minutes = Math.floor((duration % 3600) / 60);\r\n\r\n const formattedHours = hours.toString().padStart(2, '0');\r\n const formattedMinutes = minutes.toString().padStart(2, '0');\r\n\r\n return `${formattedHours}h ${formattedMinutes}m`;\r\n};\r\n\r\nfunction acquireTokenThroughLogin(msalInstance, request) {\r\n return isMobile\r\n ? msalInstance.acquireTokenRedirect(request)\r\n : msalInstance.acquireTokenPopup(request);\r\n}\r\n\r\nexport function acquireToken(msalInstance, saveIncomingPathCb) {\r\n const request = {\r\n scopes: [config.scope],\r\n };\r\n\r\n return msalInstance.acquireTokenSilent(request).catch(() => {\r\n saveIncomingPathCb();\r\n return acquireTokenThroughLogin(msalInstance, request);\r\n });\r\n}\r\n","export const TASKS_CREATE_TASK_MODE = {\r\n NEW: 0,\r\n FROM_TEMPLATE: 1,\r\n};\r\n\r\nexport const TaskType = {\r\n SUB_SURFACE: 0,\r\n SURFACE: 1,\r\n};\r\n\r\nexport const TASK_VIEWS = {\r\n LIST: 'LIST',\r\n CHART: 'CHART',\r\n};\r\n\r\nexport const MOBILE_TASK_VIEWS = {\r\n ACTIVITIES: 0,\r\n BHA: 1,\r\n};\r\n\r\nexport const CONTINGENCY_RUN_NUMBER = 'C';\r\n\r\nexport const TASKS_CREATE_TASK_MODAL_ID = 'createTask';\r\n\r\nexport const TASKS_EDIT_TASK_MODAL_ID = 'TASKS_EDIT_TASK_MODAL_ID';\r\n\r\n// Action types\r\nexport const TASK_ACTIONS = {\r\n EDIT_TASK: 'EDIT_TASK',\r\n COPY_TASK: 'COPY_TASK',\r\n SORT_TASKS: 'SORT_TASKS',\r\n CREATE_TASK: 'CREATE_TASK',\r\n UPDATE_TASK: 'UPDATE_TASK',\r\n DELETE_TASK: 'DELETE_TASK',\r\n RECEIVE_TASK: 'RECEIVE_TASK',\r\n GET_ALL_TASKS: 'GET_ALL_TASKS',\r\n GET_ALL_ACTIVITIES: 'GET_ALL_ACTIVITIES',\r\n UPDATE_TASK_DETAILS: 'UPDATE_TASK_DETAILS',\r\n CONFIRM_DELETE_TASK: 'CONFIRM_DELETE_TASK',\r\n UPDATE_TASK_SERVICES: 'UPDATE_TASK_SERVICES',\r\n EDIT_TASK_MODAL_LOADED: 'EDIT_TASK_MODAL_LOADED',\r\n ADD_TASKS_FROM_TEMPLATE: 'ADD_TASKS_FROM_TEMPLATE',\r\n PROJECT_UPDATE_PROGRESS: 'PROJECT_UPDATE_PROGRESS',\r\n EDIT_TASK_MODAL_UNLOADED: 'EDIT_TASK_MODAL_UNLOADED',\r\n CREATE_TASK_MODAL_LOADED: 'CREATE_TASK_MODAL_LOADED',\r\n PROJECT_TASKS_PAGE_LOADED: 'PROJECT_TASKS_PAGE_LOADED',\r\n PROJECT_TASKS_PAGE_UNLOADED: 'PROJECT_TASKS_PAGE_UNLOADED',\r\n\r\n // FLUID ACTIONS\r\n INITIATE_GET_TASK_FLUIDS: 'INITIATE_GET_TASK_FLUIDS',\r\n GET_TASK_FLUIDS: 'GET_TASK_FLUIDS',\r\n INITIATE_DELETE_TASK_FLUID: 'INITIATE_DELETE_TASK_FLUID',\r\n DELETE_TASK_FLUID: 'DELETE_TASK_FLUID',\r\n INITIATE_UPDATE_TASK_FLUID: 'INITIATE_UPDATE_TASK_FLUID',\r\n UPDATE_TASK_FLUID: 'UPDATE_TASK_FLUID',\r\n INITIATE_CREATE_TASK_FLUID: 'INITIATE_CREATE_TASK_FLUID',\r\n CREATE_TASK_FLUID: 'CREATE_TASK_FLUID',\r\n};\r\n\r\nexport const TASK_STATE = {\r\n TASKS: 'tasks',\r\n TASKS_TEMPLATE: 'template',\r\n TEMPLATE: 'template',\r\n TEMPLATE_DATA: 'data',\r\n ACTIVE: 'active',\r\n ACTIVE_DATA: 'data',\r\n ACTIVE_DIRECTION: 'direction',\r\n DATA: 'data',\r\n CREATE_TASK_MODE: 'createTaskMode',\r\n ACTIVE_TASKS: 'activeTasks',\r\n FILES: 'files',\r\n CABLES: 'cables',\r\n SURFACE_EQUIPMENT: 'surfaceEquipment',\r\n TASK_RISK: 'taskRisk',\r\n};\r\n\r\nexport const TASK_FORMS = {\r\n NEW_TASK: {\r\n TASK_TYPE: 'type',\r\n FORM_ID: 'newTask',\r\n TASK_TITLE: 'title',\r\n TASK_DESCRIPTION: 'description',\r\n TASK_DEPARTMENTS: 'departments',\r\n TASK_SERVICES: 'services',\r\n TASK_TARGET_DEPTH: 'targetDepth',\r\n TASK_OBJECTIVE: 'objective',\r\n TASK_PLANNED_DURATION: {\r\n HOURS: 'durationPlanned.hours',\r\n MINUTES: 'durationPlanned.minutes',\r\n },\r\n },\r\n EDIT_TASK: {\r\n FORM_ID: 'editTask',\r\n TASK_CUSTOM_TITLE: 'customTitle',\r\n TASK_TYPE: 'type',\r\n TASK_CONTINGENCY_FOR_TASK: 'contingencyForTaskId',\r\n TASK_CONTINGENCIES: 'taskContingencies',\r\n TASK_DESCRIPTION: 'description',\r\n TASK_COMMENTS: 'comments',\r\n TASK_DEPARTMENTS: 'departments',\r\n TASK_SERVICES: 'services',\r\n TASK_TARGET_DEPTH: 'targetDepth',\r\n TASK_FILES: 'addedFiles',\r\n TASK_OBJECTIVE: 'objective',\r\n TASK_PLANNED_DURATION: {\r\n HOURS: 'durationPlanned.hours',\r\n MINUTES: 'durationPlanned.minutes',\r\n },\r\n },\r\n};\r\n\r\nexport const TASK_SURFACE_EQUIPMENT_ACTIONS = {\r\n SAVE_CABLE: 'SAVE_CABLE',\r\n DELETE_CABLE: 'DELETE_CABLE',\r\n CABLES_LOADED: 'CABLES_LOADED_TASK_PLANNING',\r\n PAGE_LOADED: 'PAGE_LOADED_TASK_SURFACE_EQUIPMENT',\r\n SAVE_CABLE_SERIAL_NUMBER: 'SAVE_CABLE_SERIAL_NUMBER',\r\n SURFACE_EQUIPMENT_LOADED: 'SURFACE_EQUIPMENT_LOADED_TASK',\r\n SAVE_SURFACE_EQUIPMENT_TEMPLATE: 'SAVE_SURFACE_EQUIPMENT_TEMPLATE',\r\n SAVE_SURFACE_EQUIPMENT: 'SAVE_SURFACE_EQUIPMENT_TASK_SURFACE_EQUIPMENT',\r\n SAVE_SURFACE_SERIAL_NUMBER: 'SAVE_SURFACE_SERIAL_NUMBER',\r\n UPDATE_TASK_SURFACE_EQUIPMENT_SERIALS_FROM_TO:\r\n 'UPDATE_TASK_SURFACE_EQUIPMENT_SERIALS_FROM_TO',\r\n UPDATE_TASK_CABLE_SERIALS_FROM_TO: ' UPDATE_TASK_CABLE_SERIALS_FROM_TO',\r\n};\r\n","export const ACTIVITIES_ACTIONS = {\r\n EDIT_TIMER: 'EDIT_TIMER',\r\n CREATE_TIMER: 'CREATE_TIMER',\r\n END_OPERATION: 'END_OPERATION',\r\n INITATE_COMPLETE_TASK: 'INITATE_COMPLETE_TASK',\r\n COMPLETE_TASK: 'COMPLETE_TASK',\r\n GET_ALL_TASKS: 'GET_ALL_TASKS',\r\n INITIATE_PAUSE_ACTIVITY: 'INITIATE_PAUSE_ACTIVITY',\r\n PAUSE_ACTIVITY: 'PAUSE_ACTIVITY',\r\n INITIATE_SORT_ACTIVITIES: 'INITIATE_SORT_ACTIVITIES',\r\n INITIATE_SORT_ACTIVITIES_NO_NOTIFICATION:\r\n 'INITIATE_SORT_ACTIVITIES_NO_NOTIFICATION',\r\n BACKEND_SORT_ACTIVITIES: 'BACKEND_SORT_ACTIVITIES',\r\n BACKEND_SORT_ACTIVITIES_NO_NOTIFICATION:\r\n 'BACKEND_SORT_ACTIVITIES_NO_NOTIFICATION',\r\n SORT_ACTIVITIES: 'SORT_ACTIVITIES',\r\n UPDATE_ACTIVITY: 'UPDATE_ACTIVITY',\r\n INITIATE_UPDATE_ACTIVITY: 'INITIATE_UPDATE_ACTIVITY',\r\n INITIATE_UPDATE_ACTIVITY_CONFIRMATION:\r\n 'INITIATE_UPDATE_ACTIVITY_CONFIRMATION',\r\n INITIATE_UPDATE_ACTIVITY_TIMES: 'INITIATE_UPDATE_ACTIVITY_TIMES',\r\n INITIATE_UPDATE_ACTIVITY_FORM_WITH_NOTIFICATION:\r\n 'INITIATE_UPDATE_ACTIVITY_FORM_WITH_NOTIFICATION',\r\n INITIATE_UPDATE_ACTIVITY_FORM_WITHOUT_NOTIFICATION:\r\n 'INITIATE_UPDATE_ACTIVITY_FORM_WITHOUT_NOTIFICATION',\r\n START_OPERATION: 'START_OPERATION',\r\n START_OPERATION_INITIATE: 'START_OPERATION_INITIATE',\r\n CONFIRM_ACTIVITY_GO_BACK: 'CONFIRM_ACTIVITY_GO_BACK',\r\n CONFIRMED_ACTIVITY_GO_BACK: 'CONFIRMED_ACTIVITY_GO_BACK',\r\n ACTIVITY_GO_BACK: 'ACTIVITY_GO_BACK',\r\n INITIATE_COMPLETE_ACTIVITY: 'INITIATE_COMPLETE_ACTIVITY',\r\n COMPLETE_ACTIVITY: 'COMPLETE_ACTIVITY',\r\n GET_PROJECT_STATUS: 'GET_PROJECT_STATUS',\r\n QUICK_ADD_ACTIVITY: 'QUICK_ADD_ACTIVITY',\r\n STOP_PROJECT_TIMER: 'STOP_PROJECT_TIMER',\r\n GET_PROJECT_TIMERS: 'GET_PROJECT_TIMERS',\r\n START_PROJECT_TIMER: 'START_PROJECT_TIMER',\r\n CANCEL_PROJECT_TIMER: 'CANCEL_PROJECT_TIMER',\r\n ADD_ACTIVITY_DEFAULT: 'ADD_ACTIVITY_DEFAULT',\r\n ACTIVITY_LIST_LOADED: 'ACTIVITY_LIST_LOADED',\r\n ACTIVITY_LIST_UNLOADED: 'ACTIVITY_LIST_UNLOADED',\r\n COMPLETE_TASK_DEFAULT: 'COMPLETE_TASK_DEFAULT',\r\n COMPLETE_TASK_WITH_CONTINGENCY: 'COMPLETE_TASK_WITH_CONTINGENCY',\r\n ACTIVITIES_SELECT_TASK: 'ACTIVITIES_SELECT_TASK',\r\n GET_ALL_ACTIVITY_TYPES: 'GET_ALL_ACTIVITY_TYPES',\r\n ACTIVITIES_INITIALIZED: 'ACTIVITIES_INITIALIZED',\r\n CONFIRM_DELETE_ACTIVITY: 'CONFIRM_DELETE_ACTIVITY',\r\n DELETE_ACTIVITY_SUCCESS_DIALOG: 'DELETE_ACTIVITY_SUCCESS_DIALOG',\r\n INITIATE_CONFIRM_DELETE_ACTIVITY_WITH_NOTIFICATION:\r\n 'INITIATE_CONFIRM_DELETE_ACTIVITY_WITH_NOTIFICATION',\r\n INITIATE_CONFIRM_DELETE_ACTIVITY_WITHOUT_NOTIFICATION:\r\n 'INITIATE_CONFIRM_DELETE_ACTIVITY_WITHOUT_NOTIFICATION',\r\n COMPLETE_AND_REPEAT_TASK: 'COMPLETE_AND_REPEAT_TASK',\r\n GET_PROJECT_TIMERS_ACTIVE: 'GET_PROJECT_TIMERS_ACTIVE',\r\n GET_PROJECT_TIMERS_STOPPED: 'GET_PROJECT_TIMERS_STOPPED',\r\n GET_WAITING_ACTIVITY_TYPES: 'GET_WAITING_ACTIVITY_TYPES',\r\n COMPLETE_ACTIVITY_ABORT_TASK: 'COMPLETE_ACTIVITY_ABORT_TASK',\r\n INITIATE_CREATE_ACTIVITY_WITH_NOTIFICATION:\r\n 'INITIATE_CREATE_ACTIVITY_WITH_NOTIFICATION',\r\n INITIATE_CREATE_ACTIVITY_WITHOUT_NOTIFICATION:\r\n 'INITIATE_CREATE_ACTIVITY_WITHOUT_NOTIFICATION',\r\n PROJECT_ACTIVITIES_ADD_ACTIVITY: 'PROJECT_ACTIVITIES_ADD_ACTIVITY',\r\n COMPLETE_TASK_AND_END_OPERATION: 'COMPLETE_TASK_AND_END_OPERATION',\r\n ACTIVITIES_UNINITIALIZED: 'ACTIVITIES_UNINITIALIZED',\r\n GET_POINT_IN_TIME_ACTIVITY_TYPES: 'GET_POINT_IN_TIME_ACTIVITY_TYPES',\r\n CREATE_NEW_POINT_IN_TIME_ACTIVITY: 'CREATE_NEW_POINT_IN_TIME_ACTIVITY',\r\n INITIATE_CREATE_NEW_POINT_IN_TIME_ACTIVITY:\r\n 'INITIATE_CREATE_NEW_POINT_IN_TIME_ACTIVITY',\r\n PROJECT_ACTIVITIES_DELETE_ACTIVITY: 'PROJECT_ACTIVITIES_DELETE_ACTIVITY',\r\n PROJECT_ACTIVITIES_DUPLICATE_ACTIVITY:\r\n 'PROJECT_ACTIVITIES_DUPLICATE_ACTIVITY',\r\n GET_PROJECT_ACTIVITIES: 'GET_PROJECT_ACTIVITIES',\r\n GET_TASK_ACTIVITIES: 'GET_TASK_ACTIVITIES',\r\n GET_ALL_PROJECT_ACTIVITIES: 'GET_ALL_PROJECT_ACTIVITIES',\r\n SEND_GO_BACK_ACTIVITY_NOTIFICATION: 'SEND_GO_BACK_ACTIVITY_NOTIFICATION',\r\n SEND_COMPLETED_ACTIVITY_NOTIFICATION: 'SEND_COMPLETED_ACTIVITY_NOTIFICATION',\r\n SEND_ACTIVITY_ADDED_NOTIFICATION: 'SEND_ACTIVITY_ADDED_NOTIFICATION',\r\n SEND_ACTIVITY_UPDATED_NOTIFICATION: 'SEND_ACTIVITY_UPDATED_NOTIFICATION',\r\n SEND_ACTIVITY_DELETED_NOTIFICATION: 'SEND_ACTIVITY_DELETED_NOTIFICATION',\r\n SEND_ACTIVITY_PAUSED_NOTIFICATION: 'SEND_ACTIVITY_PAUSED_NOTIFICATION',\r\n SENT_SUBACTIVITY_ADDED_NOTIFICATION: 'SENT_SUBACTIVITY_ADDED_NOTIFICATION',\r\n SEND_ACTIVITY_SEQUENCE_UPDATED_NOTIFICATION:\r\n 'SEND_ACTIVITY_SEQUENCE_UPDATED_NOTIFICATION',\r\n ESTABLISHING_REAL_TIME_CONNECTION_FAILED:\r\n 'ESTABLISHING_REAL_TIME_CONNECTION_FAILED',\r\n REFRESH_PROJECT_STATUS: 'REFRESH_PROJECT_STATUS',\r\n UPDATE_ACTIVITY_SET_OR_RETRIEVE_ITEMS:\r\n 'UPDATE_ACTIVITY_SET_OR_RETRIEVE_ITEMS',\r\n DELETE_ACTIVITY_SET_OR_RETRIEVE_ITEMS:\r\n 'DELETE_ACTIVITY_SET_OR_RETRIEVE_ITEMS',\r\n DOWNLOAD_ACTIVITY_PDF: 'DOWNLOAD_ACTIVITY_PDF',\r\n GET_PROJECT_STATUS_MOBILE: 'GET_PROJECT_STATUS_MOBILE',\r\n};\r\n\r\nexport const EDIT_ACTIVITY_MODAL_ID = 'editActivity';\r\nexport const CREATE_ACTIVITY_MODAL_ID = 'ADD_ACTIVITY_MODAL_ID';\r\nexport const COMPLETE_TASK_MODAL_ID = 'COMPLETE_TASK_MODAL_ID';\r\nexport const END_OPERATION_MODAL_ID = 'END_OPERATION_MODAL_ID';\r\n// export const TIMER_LIST_MODAL_ID = 'TIMER_LIST_MODAL_ID';\r\nexport const EDIT_TIMER_ENTRY_MODAL_ID = 'EDIT_TIMER_ENTRY_MODAL_ID';\r\nexport const CREATE_TIMER_ENTRY_MODAL_ID = 'CREATE_TIMER_ENTRY_MODAL_ID';\r\n\r\nexport const CREATE_ACTIVITY_MODE = {\r\n NORMAL: 1,\r\n QUICK: 2,\r\n};\r\n\r\nexport const CREATE_ACTIVITY_FORM = {\r\n ID: 'createActivity',\r\n TYPE: 'type',\r\n TITLE: 'title',\r\n DEPTH: 'depth',\r\n DESCRIPTION: 'description',\r\n MODE: 'mode',\r\n SEQUENCE: 'sequence',\r\n ESTIMATED_TIME: 'estimatedTime',\r\n PARALLEL_ACTIVITY: 'parallelActivity',\r\n};\r\n\r\nexport const EDIT_ACTIVITY_FORM = {\r\n ID: 'editActivity',\r\n ACTIVITY_ID: 'id',\r\n TYPE_NAME: 'type.name',\r\n CODE: 'code',\r\n TITLE: 'title',\r\n DEPTH: 'depth',\r\n DESCRIPTION: 'description',\r\n COMMENTS: 'comments',\r\n PREVIOUS_ACTIVITY_START_TIME: 'previousActivityStartTime',\r\n START_TIME: 'startTime',\r\n END_TIME: 'endTime',\r\n EDITED_DURATION: 'editedDuration',\r\n STATUS: 'status',\r\n IS_POINT_IN_TIME: 'isPointInTime',\r\n WELL_CONTROL_DRILL_TYPE_ID: 'WCD',\r\n ESTIMATED_TIME: 'estimatedTime',\r\n PARALLEL_ACTIVITY: 'parallelActivity',\r\n};\r\n\r\nexport const COMPLETE_TASK_FORM = {\r\n ID: 'completeTask',\r\n COMMENTS: 'comments',\r\n FAILURE_REASON: 'failureReason',\r\n OBJECTIVES_MET: 'objectivesMet',\r\n TASK_ID: 'taskId',\r\n};\r\n\r\nexport const END_OPERATION_FORM = {\r\n ID: 'endOperation',\r\n COMMENTS: 'comments',\r\n FAILURE_REASON: 'failureReason',\r\n IS_SUCCESSFUL: 'isProjectSuccessful',\r\n};\r\n\r\nexport const EDIT_TIMER_FORM = {\r\n ID: 'editTimer',\r\n START_TIME: 'startTime',\r\n END_TIME: 'endTime',\r\n EDITED_DURATION: 'editedDuration',\r\n COMMENT: 'comment',\r\n};\r\n\r\nexport const CREATE_TIMER_FORM = {\r\n ID: 'createTimer',\r\n START_TIME: 'startTime',\r\n END_TIME: 'endTime',\r\n DURATION: 'duration',\r\n COMMENT: 'comment',\r\n TIMER_TYPE: 'typeId',\r\n};\r\n\r\nexport const STATE = {\r\n ROOT: 'activities',\r\n DATA: 'data',\r\n EXECUTE: 'execute',\r\n DATA_TASKS: 'tasks',\r\n DATA_ACTIVITIES: 'activities',\r\n TIMERS: 'timersByTimerTypeId',\r\n DATA_SELECTED_TASK_ID: 'selectedTaskId',\r\n DATA_ACTIVITY_TYPES: 'activityTypes',\r\n DATA_ACTIVITY_TYPES_WAITING: 'activityTypesWaiting',\r\n DATA_ACTIVITY_TYPES_POINT_IN_TIME: 'activityTypesPointInTime',\r\n IS_TIMER_ACTIVE: 'isTimerActive',\r\n};\r\n\r\nexport const COMPLETE_TASK_MODE = {\r\n DEFAULT: 1,\r\n REPEAT: 2,\r\n END_OPERATION: 3,\r\n CONTINUE_WITH_CONTINGENCY: 4,\r\n};\r\n\r\nexport const OBJECTIVES_NOT_MET_REASONS = [\r\n { id: 0, text: 'Misrun (NPT)' },\r\n { id: 1, text: 'Well Conditions' },\r\n { id: 2, text: 'Rig Conditions' },\r\n { id: 3, text: '3rd Party' },\r\n];\r\n\r\nexport const ACTIVITY_BUTTONS = {\r\n WAIT: 1,\r\n STOP: 2,\r\n EVENT: 3,\r\n ADD_NEW: 4,\r\n UNDO: 5,\r\n};\r\n\r\nexport const TimerType = {\r\n TRAC: 2,\r\n};\r\n\r\nexport const TASK_URLS = {\r\n REGISTER_OBS_CARD_URL: 'http://obscard.altus.no/',\r\n ADD_COMPLAINT_URL: 'https://itemsearch.qdom.global/',\r\n REGISTER_INCIDENT_SYNERGY:\r\n ' https://altus.synergilife.dnv.com/select/casetype',\r\n};\r\n\r\nexport const TaskFailReason = {\r\n NONE: 0,\r\n MISRUN: 1,\r\n WELL_CONDITIONS: 2,\r\n RIG_CONDITIONS: 3,\r\n THIRD_PARTY: 4,\r\n};\r\n\r\nexport const TRAC_SUBACTIVITY_CODE = 'TRAC';\r\n","import moment from 'moment';\r\nimport isNaN from 'lodash/isNaN';\r\n\r\nimport { Format } from 'app/app.constants';\r\nimport { List } from 'immutable';\r\n\r\nexport const formatDate = (date, format = Format.time) => {\r\n if (!moment.isMoment(date)) return null;\r\n\r\n return date.format(format);\r\n};\r\n\r\nexport const formatDuration = (duration, format = Format.duration_display) =>\r\n moment.isDuration(duration) ? duration.format(format, { trim: false }) : '';\r\n\r\nexport const formatDurationDiff = (durationA, durationB) =>\r\n [durationA, durationB].every((duration) => moment.isDuration(duration))\r\n ? formatDuration(\r\n moment.duration(durationB.clone().subtract(durationA).abs()),\r\n )\r\n : '';\r\n\r\nexport const formatStartToEndTime = (startTime, endTime) =>\r\n !startTime && !endTime\r\n ? 'Not started yet'\r\n : `${formatDate(startTime)}${endTime ? ` - ${formatDate(endTime)}` : ''}`;\r\n\r\nconst formatUnit = (unit) => {\r\n switch (unit) {\r\n case '':\r\n case '\"':\r\n return unit;\r\n default:\r\n return ` ${unit}`;\r\n }\r\n};\r\n\r\nexport const formatFractionString = (value, unit, numerator, denominator) => {\r\n const remainder = Math.floor(numerator % denominator);\r\n const wholeNumber = Math.floor((numerator - remainder) / denominator);\r\n numerator = remainder;\r\n return `${wholeNumber}-${remainder}/${denominator}${formatUnit(\r\n unit,\r\n )} (${formatValue(value, unit)})`;\r\n};\r\n\r\nexport const formatValue = (value, unit = '', accuracy = 0.001) => {\r\n const float = parseFloat(value, 10);\r\n if (isNaN(float)) {\r\n return '';\r\n }\r\n\r\n const multiplier = 1 / accuracy;\r\n const roundedValue =\r\n Math.round(float * multiplier + Number.EPSILON) / multiplier;\r\n return `${roundedValue}${formatUnit(unit)}`;\r\n};\r\n\r\nconst parseEstimatedDate = (estimated = '--') =>\r\n (estimated.length ? estimated : '--').split('-').reduce((sum, curr) => {\r\n var converted = parseInt(curr, 10);\r\n return sum.push(isNaN(converted) ? '' : converted);\r\n }, List());\r\n\r\nexport const formatSource = (source) => (source ? source : N/A);\r\n\r\nexport const formatEstimatedDate = (estimatedStart) => {\r\n const estimatedStartArray =\r\n Array.isArray(estimatedStart) || List.isList(estimatedStart)\r\n ? estimatedStart\r\n : parseEstimatedDate(estimatedStart);\r\n\r\n const [year, month, day] = estimatedStartArray;\r\n\r\n if (year && !month && !day) {\r\n return `${year}`;\r\n } else if (year && month && !day) {\r\n return `${year}-${moment(month, 'MM').format('MM')}`;\r\n } else if (year && month && day) {\r\n return moment({ year, month: month - 1, day }).format(Format.date);\r\n } else {\r\n return N/A;\r\n }\r\n};\r\n\r\nexport const formatFraction = (value, unit = '', accuracy = 0.001) => {\r\n const originalValue = value;\r\n const sign = Math.sign(value);\r\n value = Math.abs(value);\r\n\r\n // Accuracy is the maximum relative error; convert to absolute maxError\r\n const maxError = sign === 0 ? accuracy : value * accuracy;\r\n\r\n const n = Math.floor(value);\r\n value -= n;\r\n\r\n if (value < maxError) {\r\n return formatFractionString(originalValue, unit, sign * n, 1);\r\n }\r\n if (1 - maxError < value) {\r\n return formatFractionString(originalValue, unit, sign * (n + 1), 1);\r\n }\r\n\r\n // The lower fraction is 0/1\r\n let lower_n = 0;\r\n let lower_d = 1;\r\n // The upper fraction is 1/1\r\n let upper_n = 1;\r\n let upper_d = 1;\r\n\r\n while (true) {\r\n // The middle fraction is (lower_n + upper_n) / (lower_d + upper_d)\r\n const middle_n = lower_n + upper_n;\r\n const middle_d = lower_d + upper_d;\r\n\r\n if (middle_d * (value + maxError) < middle_n) {\r\n // real + error < middle : middle is our new upper\r\n upper_n = middle_n;\r\n upper_d = middle_d;\r\n } else if (middle_n < (value - maxError) * middle_d) {\r\n // middle < real - error : middle is our new lower\r\n lower_n = middle_n;\r\n lower_d = middle_d;\r\n } else {\r\n // Middle is our best fraction\r\n return formatFractionString(\r\n originalValue,\r\n unit,\r\n (n * middle_d + middle_n) * sign,\r\n middle_d,\r\n );\r\n }\r\n }\r\n};\r\n\r\nexport const formatQuantity = (quantity, emptyValue = 'N/A') => {\r\n if (!quantity) return null;\r\n\r\n const { hasValue, roundedValue, unit } = quantity;\r\n\r\n if (!hasValue) return emptyValue;\r\n\r\n return `${roundedValue} ${unit}`;\r\n};\r\n","import moment from 'moment';\r\nimport groupBy from 'lodash/groupBy';\r\nimport isObject from 'lodash/isObject';\r\nimport { Map, fromJS } from 'immutable';\r\nimport { convertToRaw, convertFromRaw, EditorState } from 'draft-js';\r\n\r\nimport { UNITS, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport tasksMappers from 'features/projects/tasks/tasks.mappers';\r\nimport { TimerType } from 'features/projects/activities/activities.constants';\r\nimport { formatValue } from 'utils/format.util';\r\n\r\nexport const timerTypeToDisplayName = (timerType) =>\r\n ({\r\n [TimerType.NPT]: 'Non-productive time',\r\n [TimerType.TRAC]: 'Tractor',\r\n }[timerType]);\r\n\r\nconst editorStateToString = (editorState) => {\r\n const rawContentState = convertToRaw(editorState.getCurrentContent());\r\n return JSON.stringify(rawContentState);\r\n};\r\n\r\nconst stringToEditorState = (str) => {\r\n const rawContentState = JSON.parse(str);\r\n const contentState = convertFromRaw(rawContentState);\r\n return EditorState.createWithContent(contentState);\r\n};\r\n\r\nconst formatEstimatedTime = (estimatedTime) => {\r\n if (estimatedTime) {\r\n const [hours, minutes] = estimatedTime.split(':');\r\n const parsedHours = parseInt(hours, 10);\r\n\r\n if (parsedHours >= 24) {\r\n const days = Math.floor(parsedHours / 24);\r\n const remainingHours = parsedHours % 24;\r\n\r\n return `${days}.${remainingHours\r\n .toString()\r\n .padStart(2, '0')}:${minutes}:00`;\r\n } else {\r\n return `0.${hours.padStart(2, '0')}:${minutes}:00`;\r\n }\r\n }\r\n\r\n return estimatedTime;\r\n};\r\n\r\nconst convertDurationToHoursMinutes = (durationString) => {\r\n const parts = durationString.split(':');\r\n var days = 0;\r\n var hours = 0;\r\n var minutes = parseInt(parts[1]) || 0;\r\n\r\n if (parts[0].includes('.')) {\r\n // has days\r\n days = parseInt(parts[0].split('.')[0]) || 0;\r\n hours = parseInt(parts[0].split('.')[1]) || 0;\r\n } else {\r\n // no days\r\n hours = parseInt(parts[0] || 0);\r\n }\r\n minutes = parseInt(parts[1]) || 0;\r\n\r\n let totalHours = days * 24 + hours;\r\n totalHours = totalHours < 10 ? `0${totalHours}` : totalHours;\r\n const hoursMinutesString = `${totalHours}:${minutes\r\n .toString()\r\n .padStart(2, '0')}`;\r\n return hoursMinutesString;\r\n};\r\n\r\nconst activityToDTO = ({\r\n type,\r\n depth,\r\n title,\r\n comments,\r\n sequence,\r\n description,\r\n endTime,\r\n startTime,\r\n estimatedTime,\r\n parallelActivity,\r\n status = WORK_ITEM_STATUS.PLANNED,\r\n expectedTimeMet,\r\n failiureBarrier,\r\n failureActivateBarrier,\r\n failureActivateSecondBarrier,\r\n wellControlDrillSituations,\r\n participants,\r\n plannedStartTime,\r\n wellControlDrillResult,\r\n resumeActivityId,\r\n parentActivityId,\r\n}) => {\r\n const { name, id } = type;\r\n depth = isObject(depth)\r\n ? depth\r\n : {\r\n value: formatValue(depth),\r\n unit: UNITS.METER,\r\n };\r\n return {\r\n name: name,\r\n depth: depth,\r\n title: title,\r\n status: status,\r\n activityTypeId: id,\r\n sequence: sequence,\r\n comments: comments ? editorStateToString(comments) : null,\r\n description: description ? editorStateToString(description) : null,\r\n estimatedTime: formatEstimatedTime(estimatedTime),\r\n parallelActivity: parallelActivity\r\n ? editorStateToString(parallelActivity)\r\n : null,\r\n endTime: endTime ? moment(endTime).toISOString() : endTime,\r\n startTime: startTime ? moment(startTime).toISOString() : startTime,\r\n currentClientDate: new Date().toISOString(),\r\n expectedTimeMet: expectedTimeMet,\r\n failiureBarrier: failiureBarrier,\r\n failureActivateBarrier: failureActivateBarrier,\r\n failureActivateSecondBarrier: failureActivateSecondBarrier,\r\n wellControlDrillSituations: wellControlDrillSituations,\r\n participants: participants,\r\n plannedStartTime: plannedStartTime,\r\n wellControlDrillResult: wellControlDrillResult,\r\n parentActivityId: parentActivityId,\r\n resumeActivityId: resumeActivityId,\r\n };\r\n};\r\n\r\nconst activityFromDTO = ({\r\n name,\r\n title,\r\n endTime,\r\n startTime,\r\n previousActivityStartTime,\r\n nextActivityStartTime,\r\n waitCodesDuration,\r\n nextStandardActivityStartTime,\r\n activityId,\r\n activityTypeId,\r\n estimatedTime,\r\n parallelActivity,\r\n description,\r\n comments,\r\n ...activity\r\n}) => {\r\n estimatedTime = estimatedTime\r\n ? convertDurationToHoursMinutes(estimatedTime)\r\n : estimatedTime;\r\n parallelActivity = parallelActivity\r\n ? stringToEditorState(parallelActivity)\r\n : undefined;\r\n description = description ? stringToEditorState(description) : undefined;\r\n comments = comments ? stringToEditorState(comments) : undefined;\r\n\r\n return Map({\r\n id: activityId,\r\n name: title || name,\r\n type: Map({\r\n id: activityTypeId,\r\n name: name,\r\n }),\r\n startTime: startTime ? moment(startTime) : undefined,\r\n endTime: endTime ? moment(endTime) : undefined,\r\n previousActivityStartTime: previousActivityStartTime\r\n ? moment(previousActivityStartTime)\r\n : undefined,\r\n nextActivityStartTime: nextActivityStartTime\r\n ? moment(nextActivityStartTime)\r\n : undefined,\r\n nextStandardActivityStartTime: nextStandardActivityStartTime\r\n ? moment(nextStandardActivityStartTime)\r\n : undefined,\r\n waitCodesDuration: waitCodesDuration\r\n ? convertDurationToHoursMinutes(waitCodesDuration)\r\n : undefined,\r\n title: title,\r\n estimatedTime: estimatedTime,\r\n parallelActivity: parallelActivity,\r\n description: description,\r\n comments: comments,\r\n ...activity,\r\n });\r\n};\r\n\r\nconst activityTypeFromDTO = ({\r\n code,\r\n name,\r\n displayText,\r\n description,\r\n activityTypeId,\r\n isWait,\r\n}) => {\r\n return Map({\r\n name: displayText,\r\n id: activityTypeId,\r\n description,\r\n isWait: isWait,\r\n value: Map({\r\n code: code,\r\n name: name,\r\n id: activityTypeId,\r\n }),\r\n });\r\n};\r\n\r\nconst initialActivity = () => {\r\n return Map({\r\n id: null,\r\n sequence: null,\r\n depth: null,\r\n code: null,\r\n name: null,\r\n description: null,\r\n startTime: null,\r\n endTime: null,\r\n status: WORK_ITEM_STATUS.PLANNED,\r\n type: Map(),\r\n });\r\n};\r\n\r\nconst completeTaskToDto = (\r\n { taskId, comments, failureReason },\r\n status,\r\n continueWithContingencyTaskId,\r\n) => ({\r\n currentTaskId: taskId,\r\n comments: comments ? editorStateToString(comments) : null,\r\n failReason: failureReason,\r\n status: status,\r\n continueWithContingencyTaskId: continueWithContingencyTaskId,\r\n});\r\n\r\nconst completeActivityToDto = (taskId, activityId) => ({\r\n currentTaskId: taskId,\r\n currentActivityId: activityId,\r\n});\r\n\r\nconst createActivityToDto = (taskId, activityId, activityTypeId) => ({\r\n currentTaskId: taskId,\r\n currentActivityId: activityId,\r\n activityTypeId: activityTypeId,\r\n});\r\n\r\nconst endOperationToDto = ({ comments, failureReason }) => ({\r\n comments: comments ? editorStateToString(comments) : null,\r\n failReason: failureReason,\r\n});\r\n\r\nconst timerFromDto = ({\r\n endTime,\r\n endTask,\r\n startTime,\r\n startTask,\r\n timerType,\r\n endActivity,\r\n startActivity,\r\n projectTimerId,\r\n ...timer\r\n}) =>\r\n Map({\r\n id: projectTimerId,\r\n typeId: timerType,\r\n endTime: endTime ? moment(endTime) : undefined,\r\n startTime: startTime ? moment(startTime) : undefined,\r\n startTask: startTask\r\n ? tasksMappers.Task.from(startTask)\r\n : tasksMappers.Task.initial(),\r\n endTask: endTask\r\n ? tasksMappers.Task.from(endTask)\r\n : tasksMappers.Task.initial(),\r\n startActivity: startActivity\r\n ? activityFromDTO(startActivity)\r\n : initialActivity(),\r\n endActivity: endActivity ? activityFromDTO(endActivity) : initialActivity(),\r\n ...timer,\r\n });\r\n\r\nconst timerToDto = ({\r\n id,\r\n typeId,\r\n comment,\r\n endTime,\r\n projectId,\r\n startTime,\r\n}) => ({\r\n comment: comment,\r\n timerType: typeId,\r\n projectTimerId: id,\r\n projectId: projectId,\r\n endTime: endTime ? moment(endTime).toISOString() : endTime,\r\n startTime: startTime ? moment(startTime).toISOString() : startTime,\r\n});\r\n\r\nconst timersByTypeIdFromDto = (timers) => {\r\n const mapped = timers.map(timerFromDto);\r\n\r\n return fromJS(groupBy(mapped, (timer) => timer.get('typeId')));\r\n};\r\n\r\nconst updateActivitySetOrRetrieveItemsToDto = ({\r\n activityId,\r\n toolId,\r\n toolStatus,\r\n}) => {\r\n return {\r\n setOrRetrieveToolstringItemId: toolId,\r\n activityId: activityId,\r\n setOrRetrieveToolstringItemStatus: toolStatus,\r\n };\r\n};\r\n\r\nconst activitiesMappers = {\r\n Activity: {\r\n initial: initialActivity,\r\n from: activityFromDTO,\r\n to: activityToDTO,\r\n },\r\n ActivityType: {\r\n from: activityTypeFromDTO,\r\n },\r\n CompleteTask: {\r\n to: completeTaskToDto,\r\n },\r\n CompleteActivity: {\r\n to: completeActivityToDto,\r\n },\r\n CreateActivity: {\r\n to: createActivityToDto,\r\n },\r\n EndOperation: {\r\n to: endOperationToDto,\r\n },\r\n Timer: {\r\n from: timerFromDto,\r\n to: timerToDto,\r\n },\r\n Timers: {\r\n from: timersByTypeIdFromDto,\r\n },\r\n UpdateActivitySetOrRetrieveItems: {\r\n to: updateActivitySetOrRetrieveItemsToDto,\r\n },\r\n};\r\n\r\nexport default activitiesMappers;\r\n","import moment from 'moment';\r\nimport { List, Map } from 'immutable';\r\n\r\nimport {\r\n TaskType,\r\n CONTINGENCY_RUN_NUMBER,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP, EMPTY_LIST, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport activitiesMappers from 'features/projects/activities/activities.mappers';\r\nimport {\r\n editorStateToString,\r\n formatDurationInSeconds,\r\n isValidJSON,\r\n} from 'utils/app.util';\r\n\r\nexport const secondsToHoursAndMinutes = (seconds) => {\r\n const duration = moment.duration({ seconds });\r\n\r\n return {\r\n hours: Math.floor(duration.asHours()),\r\n minutes: duration.minutes(),\r\n };\r\n};\r\n\r\nexport const initialTask = () => {\r\n return Map({\r\n id: null,\r\n title: null,\r\n description: null,\r\n comments: null,\r\n departments: EMPTY_LIST,\r\n services: EMPTY_LIST,\r\n targetDepth: {\r\n value: null,\r\n unit: 'm',\r\n },\r\n duration: {\r\n planned: EMPTY_MAP,\r\n actual: null,\r\n },\r\n status: WORK_ITEM_STATUS.PLANNED,\r\n progress: 0,\r\n sequence: null,\r\n runNumber: null,\r\n objective: null,\r\n type: TaskType.SUB_SURFACE,\r\n taskRisk: [],\r\n });\r\n};\r\n\r\nexport const toTaskFromDTO = ({\r\n taskId,\r\n departments,\r\n files,\r\n durationPlanned,\r\n status,\r\n percentComplete = 0,\r\n services,\r\n startTime,\r\n endTime,\r\n taskType,\r\n runNumber,\r\n contingencyForTaskId,\r\n contingencyForTaskRunNumber,\r\n activities,\r\n sequence,\r\n objective,\r\n ...task\r\n}) => {\r\n return Map({\r\n id: taskId,\r\n taskId,\r\n status,\r\n activities: activities\r\n ? List(activities).map(activitiesMappers.Activity.from)\r\n : undefined,\r\n contingencyForTaskId,\r\n services: List(services).map(mappers.Service.from),\r\n departments: List(departments).map(mappers.Department.from),\r\n estimated: formatDurationInSeconds(durationPlanned),\r\n durationPlanned: durationPlanned\r\n ? secondsToHoursAndMinutes(durationPlanned)\r\n : 0,\r\n progress: percentComplete,\r\n files: files ? List(files).map(toTaskFileFromDTO) : List(),\r\n type: taskType,\r\n startTime: startTime ? moment(startTime) : undefined,\r\n endTime: endTime ? moment(endTime) : undefined,\r\n sequence: sequence,\r\n runNumber: contingencyForTaskId ? CONTINGENCY_RUN_NUMBER : sequence,\r\n objective: objective,\r\n ...task,\r\n });\r\n};\r\n\r\nexport const toTaskDTO = ({\r\n contingencyForTaskId,\r\n durationPlanned,\r\n departments,\r\n toolstring,\r\n runNumber,\r\n type,\r\n objective,\r\n description,\r\n comments,\r\n activities,\r\n ...task\r\n}) => {\r\n return {\r\n departments: departments.map(mappers.Department.to),\r\n toolString: toolstring,\r\n durationPlanned: moment.duration(durationPlanned).asSeconds(),\r\n status: WORK_ITEM_STATUS.PLANNED,\r\n taskType: type,\r\n contingencyForTaskId: contingencyForTaskId,\r\n runNumber: null,\r\n objective: objective\r\n ? isValidJSON(objective)\r\n ? objective\r\n : editorStateToString(objective)\r\n : null,\r\n description: description\r\n ? isValidJSON(description)\r\n ? description\r\n : editorStateToString(description)\r\n : null,\r\n comments: comments\r\n ? isValidJSON(comments)\r\n ? comments\r\n : editorStateToString(comments)\r\n : null,\r\n activities: activities\r\n ? activities.map(activitiesMappers.Activity.to)\r\n : null,\r\n ...task,\r\n };\r\n};\r\n\r\nexport const initialTemplateTask = () => {\r\n return Map({\r\n id: null,\r\n title: null,\r\n description: null,\r\n });\r\n};\r\n\r\nexport const toTemplateTaskFromDTO = ({\r\n title,\r\n serviceId,\r\n description,\r\n templateTaskId,\r\n templateActivities,\r\n}) => {\r\n return Map({\r\n id: templateTaskId,\r\n title: title,\r\n description: description,\r\n serviceId: serviceId,\r\n activities: List(templateActivities).map(activitiesMappers.Activity.from),\r\n });\r\n};\r\n\r\nexport const toTaskCableFromDTO = (...taskCable) => Map(...taskCable);\r\n\r\nexport const toSurfaceEquipmentFromDTO = ({\r\n individualSerialNumber,\r\n ...surfaceEquipment\r\n}) => {\r\n return Map({\r\n serialNo: individualSerialNumber,\r\n ...surfaceEquipment,\r\n });\r\n};\r\n\r\nexport const toTaskFileFromDTO = ({ fileId, fullName, taskId }) => {\r\n return Map({\r\n id: fileId,\r\n name: fullName,\r\n taskId: taskId,\r\n });\r\n};\r\n\r\nexport const toTaskFileDto = ({ id, name, taskId }) => {\r\n return Map({\r\n fileId: id,\r\n fullName: name,\r\n taskId: taskId,\r\n });\r\n};\r\n\r\nexport const taskRiskFromDto = ({\r\n riskId,\r\n description,\r\n risk,\r\n mitigation,\r\n consequence,\r\n probability,\r\n state,\r\n}) => ({\r\n riskId,\r\n description: description ?? risk,\r\n risk: description ?? risk,\r\n mitigation,\r\n consequence: consequence,\r\n probability: probability,\r\n state: state,\r\n});\r\n\r\nexport const taskRiskToDto = ({\r\n riskId,\r\n description,\r\n mitigation,\r\n consequence,\r\n probability,\r\n state,\r\n}) => ({\r\n riskId,\r\n risk: description,\r\n mitigation: mitigation,\r\n consequence: consequence,\r\n probability: probability,\r\n state: state,\r\n});\r\n\r\nconst tasksMappers = {\r\n Task: {\r\n initial: initialTask,\r\n from: toTaskFromDTO,\r\n to: toTaskDTO,\r\n File: {\r\n from: toTaskFileFromDTO,\r\n to: toTaskFileDto,\r\n },\r\n Template: {\r\n initial: initialTemplateTask,\r\n from: toTemplateTaskFromDTO,\r\n },\r\n TaskCable: {\r\n from: toTaskCableFromDTO,\r\n },\r\n TaskSurfaceEquipment: {\r\n from: toSurfaceEquipmentFromDTO,\r\n },\r\n TaskRisk: {\r\n to: taskRiskToDto,\r\n from: taskRiskFromDto,\r\n },\r\n },\r\n};\r\n\r\nexport default tasksMappers;\r\n","import { Map, List } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\n\r\nconst operationFromDto = ({ cheetahJobs = [], project, ...operation }) =>\r\n Map({\r\n project: mappers.Project.from(project),\r\n cheetahJobs: List(cheetahJobs.map(cheetahJobFromDto)),\r\n ...operation,\r\n });\r\n\r\nconst cheetahJobFromDto = ({ ...cheetahJob }) =>\r\n Map({\r\n ...cheetahJob,\r\n });\r\n\r\nconst operationsMappers = {\r\n Operation: {\r\n from: operationFromDto,\r\n },\r\n CheetahJob: {\r\n from: cheetahJobFromDto,\r\n },\r\n};\r\n\r\nexport default operationsMappers;\r\n","export const CheetahJobSource = {\r\n OTHER: 0,\r\n CHEETAH: 1,\r\n WARRIOR: 2,\r\n SM_LOCATION: 3,\r\n LWI: 4,\r\n SIMULATION: 5,\r\n WITSML: 6,\r\n};\r\n\r\nexport const WarriorDashboardType = {\r\n CALIPER: 'caliper',\r\n CORRELATION: 'correlation',\r\n WINCH: 'winch',\r\n CALIPER_NEW: 'calipernew',\r\n CORRELATION_NEW: 'correlationnew',\r\n};\r\n\r\nexport const maxTimeSpan = 172800000;\r\n\r\nexport const DASHBOARDS_ACTIONS = {\r\n RECEIVE_DASHBOARDS: 'RECEIVE_DASHBOARDS',\r\n REQUEST_DASHBOARDS: 'REQUEST_DASHBOARDS',\r\n TOGGLE_PROJECT_DASHBOARD: 'TOGGLE_PROJECT_DASHBOARD',\r\n UPDATE_PROJECT_DASHBOARD: 'UPDATE_PROJECT_DASHBOARD',\r\n TOGGLE_PROJECT_DASHBOARDS: 'TOGGLE_PROJECT_DASHBOARDS',\r\n RECEIVE_PROJECT_DASHBOARD: 'RECEIVE_PROJECT_DASHBOARD',\r\n REQUEST_PROJECT_DASHBOARD: 'REQUEST_PROJECT_DASHBOARD',\r\n RECEIVE_PROJECT_DASHBOARDS: 'RECEIVE_PROJECT_DASHBOARDS',\r\n REQUEST_PROJECT_DASHBOARDS: 'REQUEST_PROJECT_DASHBOARDS',\r\n RECEIVE_PROJECT_DASHBOARD_CURVES: 'RECEIVE_PROJECT_DASHBOARD_CURVES',\r\n};\r\n\r\nexport const DashboardName = {\r\n IFRAME: 'IFrameDashboard',\r\n CALIPER: 'Caliper',\r\n CORRELATION: 'Correlation',\r\n PRIME_STROKER: 'PrimeStroker',\r\n BEAGLE_STROKER: 'BeagleStroker',\r\n WINCH_SURVEY_GAUGES: 'WinchSurveyGauges',\r\n WINCH_GRAPH_GAUGES: 'WinchGraphGauges',\r\n BHA_GRAPH_GAUGES: 'BhaGraphAndGauge',\r\n WELL_GRAPH_GAUGES: 'WellGraphAndGauges',\r\n WINCH_COMBINED: 'WinchCombined',\r\n METAL_MILLING: 'MetalMilling',\r\n};\r\n\r\nexport const ProjectDashboardFormFields = {\r\n URL: 'url',\r\n UNIT: 'unit',\r\n COLOR: 'color',\r\n SOURCE: 'source',\r\n OFFSET: 'offset',\r\n MIN_VALUE: 'minValue',\r\n MAX_VALUE: 'maxValue',\r\n DASHBOARD_ID: 'dashboardId',\r\n SIMULATION_ID: 'simulationId',\r\n CHEETAH_JOB_ID: 'cheetahJobId',\r\n PROJECT_DASHBOARD_ID: 'projectDashboardId',\r\n PROJECT_DASHBOARD_CURVES: 'projectDashboardCurves',\r\n PROJECT_DASHBOARD_SIMULATION_CURVES: 'projectDashboardSimulationCurves',\r\n};\r\n","export const ACTIONS = {\r\n DELETE_SIMULATION: 'DELETE_SIMULATION',\r\n DELETE_SIMULATION_RESULTS: 'DELETE_SIMULATION_RESULTS',\r\n DELETE_SIMULATION_FLUIDS: 'DELETE_SIMULATION_FLUIDS',\r\n REQUEST_SIMULATION: 'REQUEST_SIMULATION',\r\n RECEIVE_SIMULATION: 'RECEIVE_SIMULATION',\r\n REQUEST_RUN_SIMULATION: 'REQUEST_RUN_SIMULATION',\r\n SUBMIT_CREATE_SIMULATION: 'SUBMIT_CREATE_SIMULATION',\r\n LOAD_SIMULATION: 'LOAD_SIMULATION',\r\n REQUEST_UPDATE_SIMULATION: 'REQUEST_UPDATE_SIMULATION',\r\n REQUEST_DELETE_SIMULATION: 'REQUEST_DELETE_SIMULATION',\r\n REQUEST_SIMULATION_RESULTS: 'REQUEST_SIMULATION_RESULTS',\r\n RECEIVE_SIMULATION_RESULTS: 'RECEIVE_SIMULATION_RESULTS',\r\n LOAD_SIMULATIONS: 'LOAD_SIMULATIONS',\r\n\r\n DELETE_SIMULATION_FLUID: 'DELETE_SIMULATION_FLUID',\r\n RECEIVE_SIMULATION_FLUID: 'RECEIVE_SIMULATION_FLUID',\r\n RECEIVE_SIMULATION_FLUIDS: 'RECEIVE_SIMULATION_FLUIDS',\r\n REQUEST_SIMULATION_FLUIDS: 'REQUEST_SIMULATION_FLUIDS',\r\n REQUEST_UPDATE_SIMULATION_FLUID: 'REQUEST_UPDATE_SIMULATION_FLUID',\r\n REQUEST_DELETE_SIMULATION_FLUID: 'REQUEST_DELETE_SIMULATION_FLUID',\r\n REQUEST_CREATE_SIMULATION_FLUID: 'REQUEST_CREATE_SIMULATION_FLUID',\r\n\r\n REQUEST_SIMULATION_WELLBORE_SECTIONS: 'REQUEST_SIMULATION_WELLBORE_SECTIONS',\r\n REQUEST_UPDATE_SIMULATION_WELLBORE_SECTION:\r\n 'REQUEST_UPDATE_SIMULATION_WELLBORE_SECTION',\r\n\r\n REQUEST_SIMULATIONS_FOR_TASK: 'REQUEST_SIMULATIONS_FOR_TASK',\r\n RECEIVE_SIMULATIONS_FOR_TASK: 'RECEIVE_SIMULATIONS_FOR_TASK',\r\n REQUEST_DUPLICATE_SIMULATION: 'REQUEST_DUPLICATE_SIMULATION',\r\n REQUEST_CREATE_UPDATE_PLANNED_SIMULATION:\r\n 'REQUEST_CREATE_UPDATED_PLANNED_SIMULATION',\r\n REQUEST_TOGGLE_SIMULATION_FAVORITE: 'REQUEST_TOGGLE_SIMULATION_FAVORITE',\r\n REQUEST_TOGGLE_SIMULATION_PLANNED: 'REQUEST_TOGGLE_SIMULATION_PLANNED',\r\n\r\n DOWNLOAD_SIMULATION_PDF_REPORT: 'DOWNLOAD_SIMULATION_PDF_REPORT',\r\n};\r\n\r\nexport const SimulationFormFields = {\r\n NAME: 'name',\r\n SAFE_OPERATING_LOAD_SAFETY_FACTOR: 'workingLimitSafetyFactor', // TODO: Rename value when fixed in backend\r\n WEAKPOINT: 'weakpointLow', // TODO: Rename value when fixed in backend\r\n WEAKPOINT_SAFETY_FACTOR: 'weakpointSafetyFactor',\r\n CALCULATE_FROM_DEPTH: 'calculateFromDepth',\r\n CALCULATE_TO_DEPTH: 'calculateToDepth',\r\n COMMENT: 'comment',\r\n FLOW_PATH: 'flowPath',\r\n STUFFING_BOX_FRICTION: 'stuffingBoxFriction',\r\n ECCENTRICITY: 'eccentricity',\r\n};\r\n\r\nexport const MODAL = {\r\n CREATE_SIMULATION_MODAL: 'CREATE_SIMULATION_MODAL',\r\n SIMULATION_EXPORT_MODAL_ID: 'SIMULATION_EXPORT_MODAL_ID',\r\n};\r\n\r\nexport const SimulationDirection = {\r\n RUN_IN_HOLE: 0,\r\n PULL_OUT_OF_HOLE: 1,\r\n};\r\n\r\nexport const SimulationResultSeries = {\r\n SURFACE_WEIGHT_RIH: 0,\r\n SURFACE_WEIGHT_POOH: 1,\r\n SURFACE_WEIGHT_SAFE_OPERATING_LOAD: 2,\r\n COMPRESSION_LIMIT: 3,\r\n WEAK_POINT_SAFETY_FACTOR: 4,\r\n WEAK_POINT: 5,\r\n MAX_SET_DOWN: 7,\r\n CABLE_HEAD_TENSION_RIH: 8,\r\n CABLE_HEAD_TENSION_POOH: 9,\r\n MAX_PICKUP_FORCE_POOH: 10,\r\n MIN_TRACTOR_PULL: 11,\r\n SW_JAR_ACTIVATION: 13,\r\n CHT_JAR_ACTIVATION: 15,\r\n STRETCH_RIH: 17,\r\n STRETCH_POOH: 18,\r\n COMPRESSION_DEPTH: 100,\r\n};\r\n\r\nexport const SimulationState = {\r\n NOT_COMPLETED: 0,\r\n COMPLETED: 1,\r\n OUTDATED: 2,\r\n ERROR: 3,\r\n PLANNED: 4,\r\n UPDATED_PLANNED: 5,\r\n};\r\n\r\nexport const FlowPath = {\r\n FLOW_UP: 0,\r\n FLOW_DOWN: 1,\r\n};\r\n\r\nexport const SimulationChartsKeys = {\r\n OVERVIEW: 'OVERVIEW',\r\n SURFACE_WEIGHT_WL: 'SURFACE_WEIGHT_WL',\r\n SURFACE_WEIGHT_TL: 'SURFACE_WEIGHT_TL',\r\n WEAK_POINT: 'WEAK_POINT',\r\n MAX_PICKUP_FORCE_POOH: 'MAX_PICKUP_FORCE_POOH',\r\n MAX_SET_DOWN_FORCE: 'MAX_SET_DOWN_FORCE',\r\n MIN_TRACTOR_PULL: 'MIN_TRACTOR_PULL',\r\n CABLE_HEAD_TENSION_WL: 'CABLE_HEAD_TENSION_WL',\r\n CABLE_HEAD_TENSION_TL: 'CABLE_HEAD_TENSION_TL',\r\n STRETCH: 'STRETCH',\r\n};\r\n\r\n// Options 1 and 2 are removed as per the ticket 8480\r\nexport const SimulationChartsType = {\r\n OVERVIEW: 0,\r\n MAX_SET_DOWN_FORCE: 3,\r\n MAX_PICKUP_FORCE_POOH: 4,\r\n MIN_TRACTOR_PULL: 5,\r\n STRETCH: 6,\r\n WEAK_POINT: 7,\r\n SURFACE_WEIGHT_WL: 8,\r\n SURFACE_WEIGHT_TL: 9,\r\n CABLE_HEAD_TENSION_WL: 10,\r\n CABLE_HEAD_TENSION_TL: 11,\r\n};\r\n\r\n// this is temporary function since we are showing all the data from all data sets (before we only had one)\r\n// createAlternativeSeriesId on simulation.utils.js\r\nconst createAlternativeActiveSeries = (\r\n simulationResultSeries,\r\n simulationResultDirection = SimulationDirection.PULL_OUT_OF_HOLE,\r\n) => simulationResultSeries + 50 + simulationResultDirection;\r\n\r\n// We now have the chart and series configuration both in the frontend and the backend.\r\n// Later we should look into putting it in one common place.\r\nexport const SimulationCharts = [\r\n {\r\n key: SimulationChartsKeys.SURFACE_WEIGHT_WL,\r\n title: 'Surface Weight WL',\r\n unit: ['runInHole', 'surfaceTension'],\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n SimulationResultSeries.COMPRESSION_LIMIT,\r\n SimulationResultSeries.SW_JAR_ACTIVATION,\r\n // for second simulation set\r\n createAlternativeActiveSeries(SimulationResultSeries.SURFACE_WEIGHT_RIH),\r\n createAlternativeActiveSeries(SimulationResultSeries.SURFACE_WEIGHT_POOH),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n ),\r\n createAlternativeActiveSeries(SimulationResultSeries.COMPRESSION_LIMIT),\r\n createAlternativeActiveSeries(SimulationResultSeries.SW_JAR_ACTIVATION),\r\n ],\r\n },\r\n {\r\n key: SimulationChartsKeys.SURFACE_WEIGHT_TL,\r\n title: 'Surface Weight TL',\r\n unit: ['runInHole', 'surfaceTension'],\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n SimulationResultSeries.COMPRESSION_LIMIT,\r\n // for second simulation set\r\n createAlternativeActiveSeries(SimulationResultSeries.SURFACE_WEIGHT_RIH),\r\n createAlternativeActiveSeries(SimulationResultSeries.SURFACE_WEIGHT_POOH),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n ),\r\n createAlternativeActiveSeries(SimulationResultSeries.COMPRESSION_LIMIT),\r\n ],\r\n },\r\n {\r\n key: SimulationChartsKeys.WEAK_POINT,\r\n title: 'Weak Point',\r\n unit: ['runInHole', 'surfaceTension'],\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.WEAK_POINT,\r\n SimulationResultSeries.WEAK_POINT_SAFETY_FACTOR,\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n SimulationResultSeries.SW_JAR_ACTIVATION,\r\n // for second simulation set\r\n createAlternativeActiveSeries(SimulationResultSeries.WEAK_POINT),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.WEAK_POINT_SAFETY_FACTOR,\r\n ),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n ),\r\n createAlternativeActiveSeries(SimulationResultSeries.SW_JAR_ACTIVATION),\r\n ],\r\n },\r\n {\r\n title: 'Stretch',\r\n key: SimulationChartsKeys.STRETCH,\r\n unit: ['runInHole', 'stretch'],\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.STRETCH_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'stretch',\r\n },\r\n {\r\n series: SimulationResultSeries.STRETCH_POOH,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n value: 'stretch',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.STRETCH_RIH,\r\n SimulationResultSeries.STRETCH_POOH,\r\n // for second simulation set\r\n createAlternativeActiveSeries(SimulationResultSeries.STRETCH_RIH),\r\n createAlternativeActiveSeries(SimulationResultSeries.STRETCH_POOH),\r\n ],\r\n },\r\n {\r\n title: 'Set Down Force',\r\n key: SimulationChartsKeys.MAX_SET_DOWN_FORCE,\r\n unit: ['runInHole', 'maxSetDown'],\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.MAX_SET_DOWN,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'maxSetDown',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.MAX_SET_DOWN,\r\n // for second simulation set\r\n createAlternativeActiveSeries(SimulationResultSeries.MAX_SET_DOWN),\r\n ],\r\n },\r\n {\r\n title: 'Pick-up Force',\r\n key: SimulationChartsKeys.MAX_PICKUP_FORCE_POOH,\r\n unit: ['pullOutOfHole', 'maxPickupWeight'],\r\n activeSeries: [\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n // for second simulation set\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n ),\r\n ],\r\n },\r\n {\r\n title: 'Cablehead Tension WL',\r\n key: SimulationChartsKeys.CABLE_HEAD_TENSION_WL,\r\n unit: ['runInHole', 'cableHeadTension'],\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'cableHeadTension',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n SimulationResultSeries.CABLE_HEAD_TENSION_POOH,\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n SimulationResultSeries.CHT_JAR_ACTIVATION,\r\n // for second simulation set\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n ),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_POOH,\r\n ),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n ),\r\n createAlternativeActiveSeries(SimulationResultSeries.CHT_JAR_ACTIVATION),\r\n ],\r\n },\r\n {\r\n title: 'Cablehead Tension TL',\r\n key: SimulationChartsKeys.CABLE_HEAD_TENSION_TL,\r\n unit: ['runInHole', 'cableHeadTension'],\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'cableHeadTension',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n SimulationResultSeries.CABLE_HEAD_TENSION_POOH,\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n // for second simulation set\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n ),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_POOH,\r\n ),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n ),\r\n ],\r\n },\r\n {\r\n title: 'Tractor Pull',\r\n key: SimulationChartsKeys.MIN_TRACTOR_PULL,\r\n unit: ['runInHole', 'tractorForce'],\r\n activeSeries: [SimulationResultSeries.MIN_TRACTOR_PULL],\r\n },\r\n {\r\n title: 'All',\r\n key: SimulationChartsKeys.OVERVIEW,\r\n unit: null,\r\n compressionDepth: [\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n {\r\n series: SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n value: 'surfaceTension',\r\n },\r\n {\r\n series: SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'cableHeadTension',\r\n },\r\n {\r\n series: SimulationResultSeries.STRETCH_RIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'stretch',\r\n },\r\n {\r\n series: SimulationResultSeries.STRETCH_POOH,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n value: 'stretch',\r\n },\r\n {\r\n series: SimulationResultSeries.MAX_SET_DOWN,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n value: 'maxSetDown',\r\n },\r\n ],\r\n activeSeries: [\r\n SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n SimulationResultSeries.COMPRESSION_LIMIT,\r\n SimulationResultSeries.WEAK_POINT_SAFETY_FACTOR,\r\n SimulationResultSeries.WEAK_POINT,\r\n SimulationResultSeries.MAX_SET_DOWN,\r\n SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n SimulationResultSeries.CABLE_HEAD_TENSION_POOH,\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n SimulationResultSeries.MIN_TRACTOR_PULL,\r\n SimulationResultSeries.SW_JAR_ACTIVATION,\r\n SimulationResultSeries.CHT_JAR_ACTIVATION,\r\n SimulationResultSeries.STRETCH_RIH,\r\n SimulationResultSeries.STRETCH_POOH,\r\n // for second simulation set\r\n createAlternativeActiveSeries(SimulationResultSeries.SURFACE_WEIGHT_RIH),\r\n createAlternativeActiveSeries(SimulationResultSeries.SURFACE_WEIGHT_POOH),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n ),\r\n createAlternativeActiveSeries(SimulationResultSeries.COMPRESSION_LIMIT),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.WEAK_POINT_SAFETY_FACTOR,\r\n ),\r\n createAlternativeActiveSeries(SimulationResultSeries.WEAK_POINT),\r\n createAlternativeActiveSeries(SimulationResultSeries.MAX_SET_DOWN),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n ),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_POOH,\r\n ),\r\n createAlternativeActiveSeries(\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n ),\r\n createAlternativeActiveSeries(SimulationResultSeries.MIN_TRACTOR_PULL),\r\n createAlternativeActiveSeries(SimulationResultSeries.SW_JAR_ACTIVATION),\r\n createAlternativeActiveSeries(SimulationResultSeries.CHT_JAR_ACTIVATION),\r\n createAlternativeActiveSeries(SimulationResultSeries.STRETCH_RIH),\r\n createAlternativeActiveSeries(SimulationResultSeries.STRETCH_POOH),\r\n ],\r\n },\r\n];\r\n","import _isNil from 'lodash/isNil';\r\nimport {\r\n UNIT_OF_MEASURE,\r\n EDITABLE_TOOL_PROPERTIES,\r\n TOOL_ASSET_EVENTS_ENUM,\r\n} from 'features/equipment/equipment.constants';\r\nimport { CONVERT_MEASURES, UNITS, CUSTOM_UNIT_SYSTEM } from 'app/app.constants';\r\n\r\nconst replaceM3 = (tool, existingTool) => {\r\n if (tool.referenceNumber === null)\r\n tool.referenceNumber = existingTool.referenceNumber;\r\n for (var propName in tool) {\r\n if (tool[propName] === '') tool[propName] = existingTool[propName];\r\n if (tool[propName] === null || !tool[propName]) {\r\n tool[propName] = existingTool[propName];\r\n }\r\n if (tool[propName]) {\r\n if (tool[propName].value !== undefined && tool[propName].value === '') {\r\n tool[propName] = existingTool[propName];\r\n }\r\n }\r\n }\r\n if (tool.toolImageId === 0) tool.toolImageId = null;\r\n if (tool.tool3DObjectId === 0) tool.tool3DObjectId = null;\r\n if (tool.yield === undefined) tool.yield = existingTool.yieldValue;\r\n if (tool.bottomConnectorId === null || tool.bottomConnectorId === undefined)\r\n tool.bottomConnectorId = existingTool.bottomConnector;\r\n if (tool.topConnectorId === null || tool.topConnectorId === undefined)\r\n tool.topConnectorId = existingTool.topConnector;\r\n return tool;\r\n};\r\n\r\nconst replaceThirdParty = (tool, existingTool) => {\r\n for (var propName in tool) {\r\n if (tool[propName] === '') tool[propName] = existingTool[propName];\r\n if (tool[propName] === null || !tool[propName]) {\r\n tool[propName] = existingTool[propName];\r\n }\r\n if (tool[propName]) {\r\n if (tool[propName].value !== undefined && tool[propName].value === '') {\r\n tool[propName] = existingTool[propName];\r\n }\r\n }\r\n }\r\n if (tool.yield === undefined) tool.yield = existingTool.yieldValue;\r\n if (tool.bottomConnectorId === null || tool.bottomConnectorId === undefined)\r\n tool.bottomConnectorId = existingTool.bottomConnector;\r\n if (tool.topConnectorId === null || tool.topConnectorId === undefined)\r\n tool.topConnectorId = existingTool.topConnector;\r\n if (tool.toolImageId === 0) tool.toolImageId = null;\r\n\r\n return tool;\r\n};\r\n\r\nexport const existingToolToToolMapper = (tool, existingTool) => {\r\n return replaceM3(tool, existingTool);\r\n};\r\n\r\nexport const existingThirdPartyToolToToolMapper = (tool, existingTool) => {\r\n return replaceThirdParty(tool, existingTool);\r\n};\r\n\r\nconst customUnits = {\r\n length: 'length',\r\n depth: 'depth',\r\n mass: 'mass',\r\n toolDiameter: 'toolDiameter',\r\n force: 'force',\r\n bigForce: 'bigForce',\r\n};\r\n\r\nconst customUnitsMetric = (unit) => {\r\n switch (unit) {\r\n case customUnits.toolDiameter:\r\n return 'mm';\r\n case customUnits.length:\r\n return 'm';\r\n case customUnits.depth:\r\n return 'm';\r\n case customUnits.mass:\r\n return 'kg';\r\n case customUnits.force:\r\n return 'N';\r\n case customUnits.bigForce:\r\n return 'kgf';\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst customUnitsImperial = (unit) => {\r\n switch (unit) {\r\n case customUnits.toolDiameter:\r\n return 'in';\r\n case customUnits.length:\r\n return 'ft';\r\n case customUnits.depth:\r\n return 'ft';\r\n case customUnits.mass:\r\n return 'lbs';\r\n case customUnits.force:\r\n return 'lbf';\r\n case customUnits.bigForce:\r\n return 'kipf';\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const getUnitForProperty = (\r\n property,\r\n uomPreference,\r\n selectedCustomUnitsOfMeasure,\r\n) => {\r\n if (uomPreference === UNIT_OF_MEASURE.IMPERIAL) {\r\n switch (property) {\r\n case EDITABLE_TOOL_PROPERTIES.OUTER_DIAMETER:\r\n return 'in';\r\n case EDITABLE_TOOL_PROPERTIES.INNER_DIAMETER:\r\n return 'in';\r\n case EDITABLE_TOOL_PROPERTIES.LENGTH:\r\n return 'ft';\r\n case EDITABLE_TOOL_PROPERTIES.DEPTH:\r\n return 'ft';\r\n case EDITABLE_TOOL_PROPERTIES.WEIGHT:\r\n return 'lbs';\r\n case EDITABLE_TOOL_PROPERTIES.FISHNECK:\r\n return 'in';\r\n case EDITABLE_TOOL_PROPERTIES.SWL:\r\n return 'lbf';\r\n case EDITABLE_TOOL_PROPERTIES.YIELD:\r\n return 'kipf';\r\n case EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD:\r\n return 'in';\r\n case EDITABLE_TOOL_PROPERTIES.MINIMUM_OD:\r\n return 'in';\r\n case EDITABLE_TOOL_PROPERTIES.MAXIMUM_STANDOFF_FORCE:\r\n return 'lbf';\r\n case EDITABLE_TOOL_PROPERTIES.MINIMUM_STANDOFF_FORCE:\r\n return 'lbf';\r\n case EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_LOW:\r\n return 'lbf';\r\n case EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_HIGH:\r\n return 'lbf';\r\n case EDITABLE_TOOL_PROPERTIES.ADDITIONAL_NORMAL_FORCE:\r\n return 'lbf';\r\n case EDITABLE_TOOL_PROPERTIES.AXIAL_FRICTION_REDUCED_TO:\r\n return '';\r\n case EDITABLE_TOOL_PROPERTIES.WEIGHT_ABOVE_JARRING_POINT_FACTOR:\r\n return '';\r\n default:\r\n return null;\r\n }\r\n }\r\n if (\r\n uomPreference === UNIT_OF_MEASURE.METRIC ||\r\n uomPreference === UNIT_OF_MEASURE.PROJECT_DEFAULT\r\n ) {\r\n switch (property) {\r\n case EDITABLE_TOOL_PROPERTIES.OUTER_DIAMETER:\r\n return 'mm';\r\n case EDITABLE_TOOL_PROPERTIES.INNER_DIAMETER:\r\n return 'mm';\r\n case EDITABLE_TOOL_PROPERTIES.LENGTH:\r\n return 'm';\r\n case EDITABLE_TOOL_PROPERTIES.WEIGHT:\r\n return 'kg';\r\n case EDITABLE_TOOL_PROPERTIES.DEPTH:\r\n return 'm';\r\n case EDITABLE_TOOL_PROPERTIES.FISHNECK:\r\n return 'mm';\r\n case EDITABLE_TOOL_PROPERTIES.SWL:\r\n return 'kgf';\r\n case EDITABLE_TOOL_PROPERTIES.YIELD:\r\n return 'kgf';\r\n case EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD:\r\n return 'mm';\r\n case EDITABLE_TOOL_PROPERTIES.MINIMUM_OD:\r\n return 'mm';\r\n case EDITABLE_TOOL_PROPERTIES.MAXIMUM_STANDOFF_FORCE:\r\n return 'N';\r\n case EDITABLE_TOOL_PROPERTIES.MINIMUM_STANDOFF_FORCE:\r\n return 'N';\r\n case EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_LOW:\r\n return 'N';\r\n case EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_HIGH:\r\n return 'N';\r\n case EDITABLE_TOOL_PROPERTIES.ADDITIONAL_NORMAL_FORCE:\r\n return 'N';\r\n case EDITABLE_TOOL_PROPERTIES.AXIAL_FRICTION_REDUCED_TO:\r\n return '';\r\n case EDITABLE_TOOL_PROPERTIES.WEIGHT_ABOVE_JARRING_POINT_FACTOR:\r\n return '';\r\n default:\r\n return null;\r\n }\r\n }\r\n if (uomPreference === UNIT_OF_MEASURE.CUSTOM) {\r\n switch (property) {\r\n case EDITABLE_TOOL_PROPERTIES.OUTER_DIAMETER:\r\n return selectedCustomUnitsOfMeasure?.toolDiameter ===\r\n UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.toolDiameter)\r\n : customUnitsMetric(customUnits.toolDiameter);\r\n case EDITABLE_TOOL_PROPERTIES.INNER_DIAMETER:\r\n return selectedCustomUnitsOfMeasure?.toolDiameter ===\r\n UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.toolDiameter)\r\n : customUnitsMetric(customUnits.toolDiameter);\r\n case EDITABLE_TOOL_PROPERTIES.LENGTH:\r\n return selectedCustomUnitsOfMeasure?.length === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.length)\r\n : customUnitsMetric(customUnits.length);\r\n case EDITABLE_TOOL_PROPERTIES.DEPTH:\r\n return selectedCustomUnitsOfMeasure?.depth === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.depth)\r\n : customUnitsMetric(customUnits.depth);\r\n case EDITABLE_TOOL_PROPERTIES.WEIGHT:\r\n return selectedCustomUnitsOfMeasure?.mass === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.mass)\r\n : customUnitsMetric(customUnits.mass);\r\n case EDITABLE_TOOL_PROPERTIES.FISHNECK:\r\n return selectedCustomUnitsOfMeasure?.toolDiameter ===\r\n UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.toolDiameter)\r\n : customUnitsMetric(customUnits.toolDiameter);\r\n case EDITABLE_TOOL_PROPERTIES.SWL:\r\n return selectedCustomUnitsOfMeasure?.bigForce ===\r\n UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.bigForce)\r\n : customUnitsMetric(customUnits.bigForce);\r\n case EDITABLE_TOOL_PROPERTIES.YIELD:\r\n return selectedCustomUnitsOfMeasure?.bigForce ===\r\n UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.bigForce)\r\n : customUnitsMetric(customUnits.bigForce);\r\n case EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD:\r\n return selectedCustomUnitsOfMeasure?.toolDiameter ===\r\n UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.toolDiameter)\r\n : customUnitsMetric(customUnits.toolDiameter);\r\n case EDITABLE_TOOL_PROPERTIES.MINIMUM_OD:\r\n return selectedCustomUnitsOfMeasure?.toolDiameter ===\r\n UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.toolDiameter)\r\n : customUnitsMetric(customUnits.toolDiameter);\r\n case EDITABLE_TOOL_PROPERTIES.MAXIMUM_STANDOFF_FORCE:\r\n return selectedCustomUnitsOfMeasure?.force === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.force)\r\n : customUnitsMetric(customUnits.force);\r\n case EDITABLE_TOOL_PROPERTIES.MINIMUM_STANDOFF_FORCE:\r\n return selectedCustomUnitsOfMeasure?.force === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.force)\r\n : customUnitsMetric(customUnits.force);\r\n case EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_LOW:\r\n return selectedCustomUnitsOfMeasure?.force === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.force)\r\n : customUnitsMetric(customUnits.force);\r\n case EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_HIGH:\r\n return selectedCustomUnitsOfMeasure?.force === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.force)\r\n : customUnitsMetric(customUnits.force);\r\n case EDITABLE_TOOL_PROPERTIES.ADDITIONAL_NORMAL_FORCE:\r\n return selectedCustomUnitsOfMeasure?.force === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(customUnits.force)\r\n : customUnitsMetric(customUnits.force);\r\n case EDITABLE_TOOL_PROPERTIES.AXIAL_FRICTION_REDUCED_TO:\r\n case EDITABLE_TOOL_PROPERTIES.WEIGHT_ABOVE_JARRING_POINT_FACTOR:\r\n return ''; // TODO: Update if/when Ratio is added as a selectable custom unit of measurement\r\n default:\r\n return null;\r\n }\r\n }\r\n};\r\n\r\nexport const unitPlaceholder = (tool, key, fallback = '') => {\r\n return _isNil(tool) || tool?.isEmpty()\r\n ? fallback\r\n : `${tool.getIn([key, 'value'], fallback)} ${tool.getIn(\r\n [key, 'unit'],\r\n '',\r\n )}`;\r\n};\r\n\r\nexport const toolAssetHistoryEventToString = (event) => {\r\n switch (event) {\r\n case TOOL_ASSET_EVENTS_ENUM.COMPLAINTS:\r\n return 'Complaint';\r\n case TOOL_ASSET_EVENTS_ENUM.MAINTENANCE:\r\n return 'Maintenance';\r\n case TOOL_ASSET_EVENTS_ENUM.RUN:\r\n return 'Run';\r\n case TOOL_ASSET_EVENTS_ENUM.TASK:\r\n return 'Task';\r\n case TOOL_ASSET_EVENTS_ENUM.TEST:\r\n return 'Test';\r\n case TOOL_ASSET_EVENTS_ENUM.BOP_TEST:\r\n return 'BOP Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORSION_TEST:\r\n return 'Cable Torsion Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_WRAP_TEST:\r\n return 'Cable Wrap Test Slickline Cable';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORTURE_TEST:\r\n return 'Cable Torture Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CONTINUITY_TEST:\r\n return 'Cable Continuity Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_INSULATION_TEST:\r\n return 'Cable Insulation Test';\r\n case TOOL_ASSET_EVENTS_ENUM.SIL2_TEST:\r\n return 'Sil2 Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_WRAP_BRAIDED_MONO_TEST:\r\n return 'Cable Wrap Test Braided/Mono Cable';\r\n case TOOL_ASSET_EVENTS_ENUM.STRING_TEST:\r\n return 'String Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_BREAK_TEST:\r\n return 'Cable Break Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CUT_MAINTENANCE:\r\n return 'Cable Cut Maintenance';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SERVICE_MAINTENANCE:\r\n return 'Cable Service Maintenance';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SPOOLING_MAINTENANCE:\r\n return 'Cable Spooling Maintenance';\r\n default:\r\n return 'Invalid event';\r\n }\r\n};\r\n\r\nexport const getUnitForCustomUnit = (\r\n unit,\r\n uomPreference,\r\n selectedCustomUnitsOfMeasure,\r\n projectCustomPreferences,\r\n) => {\r\n if (uomPreference === UNIT_OF_MEASURE.PROJECT_DEFAULT) {\r\n if (projectCustomPreferences?.get('unit') === CUSTOM_UNIT_SYSTEM) {\r\n const currentForceUnit = projectCustomPreferences?.getIn([\r\n 'units',\r\n 'force',\r\n ]);\r\n return currentForceUnit === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(unit)\r\n : customUnitsMetric(unit);\r\n } else {\r\n return projectCustomPreferences?.get('unit') === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(unit)\r\n : customUnitsMetric(unit);\r\n }\r\n }\r\n\r\n if (uomPreference === UNIT_OF_MEASURE.IMPERIAL) {\r\n switch (unit) {\r\n case CONVERT_MEASURES.FORCE:\r\n return UNITS.POUND_FORCE;\r\n default:\r\n return null;\r\n }\r\n }\r\n if (uomPreference === UNIT_OF_MEASURE.METRIC) {\r\n switch (unit) {\r\n case CONVERT_MEASURES.FORCE:\r\n return UNITS.NEWTON;\r\n default:\r\n return null;\r\n }\r\n }\r\n if (uomPreference === UNIT_OF_MEASURE.CUSTOM) {\r\n switch (unit) {\r\n case CONVERT_MEASURES.FORCE:\r\n return selectedCustomUnitsOfMeasure?.force === UNIT_OF_MEASURE.IMPERIAL\r\n ? customUnitsImperial(unit)\r\n : customUnitsMetric(unit);\r\n default:\r\n return null;\r\n }\r\n }\r\n};\r\n","import { List } from 'immutable';\r\n\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { toolAssetHistoryEventToString } from 'features/equipment/equipment.helpers';\r\n\r\nexport const EQUIPMENT_ACTIVE_TAB = {\r\n CABLES: 'CABLES',\r\n MWL_TOOLS: 'MWL_TOOLS',\r\n EWL_TOOLS: 'EWL_TOOLS',\r\n BHA_TEMPLATES: 'BHA_TEMPLATES',\r\n TOOL_ASSEMBLIES: 'TOOL_ASSEMBLIES',\r\n THIRD_PARTY_TOOLS: 'THIRD_PARTY_TOOLS',\r\n SURFACE_EQUIPMENT: 'SURFACE_EQUIPMENT',\r\n EQUIPMENT_TEMPLATES: 'EQUIPMENT_TEMPLATES',\r\n};\r\n\r\nexport const PROJECT_DETAILS_ACTIVE_TAB = {\r\n PROJECT_DETAILS: 'PROJECT_DETAILS',\r\n TEAM: 'TEAM',\r\n DOCUMENTS: 'DOCUMENTS',\r\n RISKS: 'RISKS',\r\n PROCEDURES_CHECKLISTS: 'PROCEDURES_CHECKLISTS',\r\n WELL: 'WELL',\r\n};\r\n\r\nexport const PROJECT_WELLBORE_ACTIVE_TAB = {\r\n OVERVIEW: 'OVERVIEW',\r\n DETAILS: 'DETAILS',\r\n SECTIONS: 'SECTIONS',\r\n};\r\n\r\nexport const EQUIPMENT_ACTIONS = {\r\n PAGE_LOADED: 'PAGE_LOADED',\r\n CREATE_TOOL: 'CREATE_TOOL',\r\n CREATE_SURFACE_EQUIPMENT: 'CREATE_SURFACE_EQUIPMENT',\r\n UPDATE_TOOL: 'UPDATE_TOOL',\r\n CREATE_SURFACE_UPDATE_TOOL: 'CREATE_SURFACE_UPDATE_TOOL',\r\n UPLOAD_IMAGE: 'UPLOAD_IMAGE',\r\n DELETE_IMAGE: 'DELETE_IMAGE',\r\n DELETE_SURFACE_EQUIPMENT_IMAGE: 'DELETE_SURFACE_EQUIPMENT_IMAGE',\r\n SEARCH_TOOLS: 'SEARCH_TOOLS',\r\n TOOLS_LOADED: 'TOOLS_LOADED',\r\n SEARCH_EQUIPMENT: 'SEARCH_EQUIPMENT',\r\n SEARCH_CABLES: 'SEARCH_CABLES',\r\n CABLES_LOADED: 'CABLES_LOADED',\r\n CABLES_LOADED_BY_PROJECTID: 'CABLES_LOADED_BY_PROJECTID',\r\n PAGE_UNLOADED: 'PAGE_UNLOADED',\r\n M3_ITEM_SEARCH: 'M3_ITEM_SEARCH',\r\n M3_FIND_ITEMS_BY_SERIAL_NUMBER: 'M3_FIND_ITEMS_BY_SERIAL_NUMBER',\r\n SUPPLIERS_LOADED: 'SUPPLIERS_LOADED',\r\n TOOL_ASSEMBLIES_LOADED: 'TOOL_ASSEMBLIES_LOADED',\r\n TOOL_GROUPS_LOADED: 'TOOL_GROUPS_LOADED',\r\n SAVE_TOOL_ASSEMBLY: 'SAVE_TOOL_ASSEMBLY',\r\n BHA_TEMPLATES_LOADED: 'BHA_TEMPLATES_LOADED',\r\n RECEIVE_CREATED_TOOL: 'RECEIVE_CREATED_TOOL',\r\n TOOL_CONNECTORS_LOADED: 'TOOL_CONNECTORS_LOADED',\r\n SURFACE_EQUIPMENT_LOADED: 'SURFACE_EQUIPMENT_LOADED',\r\n RECEIVE_SURFACE_EQUIPMENT_GROUPS: 'RECEIVE_SURFACE_EQUIPMENT_GROUPS',\r\n SURFACE_EQUIPMENT_UPLOAD_IMAGE: 'SURFACE_EQUIPMENT_UPLOAD_IMAGE',\r\n SURFACE_EQUIPMENT_LOAD: 'SURFACE_EQUIPMENT_LOAD',\r\n TOOL_ADDED_TO_TOOL_ASSEMBLY: 'TOOL_ADDED_TO_TOOL_ASSEMBLY',\r\n SAVE_BHA_TEMPLATE: 'SAVE_BHA_TEMPLATE',\r\n LOAD_ASSET_HISTORY: 'LOAD_ASSET_HISTORY',\r\n UPLOAD_3D_OBJECT: 'UPLOAD_3D_OBJECT',\r\n DELETE_3D_OBJECT: 'DELETE_3D_OBJECT',\r\n GET_TOOL_ASSEMBLY: 'GET_TOOL_ASSEMBLY',\r\n LOAD_CABLE: 'LOAD_CABLE',\r\n REQUEST_BHA_TEMPLATE_FOR_EDITING: 'REQUEST_BHA_TEMPLATE_FOR_EDITING',\r\n RECEIVE_BHA_TEMPLATE_FOR_EDITING: 'RECEIVE_BHA_TEMPLATE_FOR_EDITING',\r\n REQUEST_BHA_TEMPLATE_SECTIONS_FOR_EDITING:\r\n 'REQUEST_BHA_TEMPLATE_SECTIONS_FOR_EDITING',\r\n RECEIVE_BHA_TEMPLATE_SECTIONS_FOR_EDITING:\r\n 'REQUEST_BHA_TEMPLATE_SECTIONS_FOR_EDITING',\r\n UNLOAD_BHA_TEMPLATE_FOR_EDITING: 'UNLOAD_BHA_TEMPLATE_FOR_EDITING',\r\n CREATE_TEMPLATE_TOOL: 'CREATE_TEMPLATE_TOOL',\r\n DELETE_TEMPLATE_TOOL: 'DELETE_TEMPLATE_TOOL',\r\n REQUEST_UPDATE_TEMPLATE_FOR_EDITING: 'REQUEST_UPDATE_TEMPLATE_FOR_EDITING',\r\n REQUEST_DUPLICATE_TEMPLATE_ITEM: 'REQUEST_DUPLICATE_TEMPLATE_ITEM',\r\n REQUEST_SORT_TEMPLATE_TOOLS: 'REQUEST_SORT_TEMPLATE_TOOLS',\r\n REQUEST_SORT_TEMPLATE_ASSEMBLY_TOOLS: 'REQUEST_SORT_TEMPLATE_ASSEMBLY_TOOLS',\r\n CREATE_ASSET_HISTORY: 'CREATE_ASSET_HISTORY',\r\n EDIT_TOOL_IMAGE: 'EDIT_TOOL_IMAGE',\r\n RECEIVE_EQUIPMENT_ASSETS: 'RECEIVE_EQUIPMENT_ASSETS',\r\n VALIDATE_TOOLSTRING_SERIAL_NUMBERS: 'VALIDATE_TOOLSTRING_SERIAL_NUMBERS',\r\n DELETE_TEMPLATE_TOOLASSEMBLY_TOOL: 'DELETE_TEMPLATE_TOOLASSEMBLY_TOOL',\r\n RECEIVE_STRING_VERIFICATIONS_FOR_TOOLSTRING:\r\n 'RECEIVE_STRING_VERIFICATIONS_FOR_TOOLSTRING',\r\n SURFACE_EQUIPMENT_BY_CATEGORIES: 'SURFACE_EQUIPMENT_BY_CATEGORIES',\r\n RECEIVE_CABLE_TEST_DETAILS: 'RECEIVE_CABLE_TEST_DETAILS',\r\n EXPORT_CABLE_HISTORY: 'EXPORT_CABLE_HISTORY',\r\n // EQUIPMENT TEMPLATES\r\n EQUIPMENT_TEMPLATES_LOADED: 'EQUIPMENT_TEMPLATES_LOADED',\r\n SAVE_EQUIPMENT_TEMPLATE: 'SAVE_EQUIPMENT_TEMPLATE',\r\n UPDATE_EQUIPMENT_TEMPLATE: 'UPDATE_EQUIPMENT_TEMPLATE',\r\n GET_EQUIPMENT_TEMPLATE: 'GET_EQUIPMENT_TEMPLATE',\r\n CREATE_EQUIPMENT_TEMPLATE_EQUIPMENT: 'CREATE_EQUIPMENT_TEMPLATE_EQUIPMENT',\r\n DELETE_EQUIPMENT_TEMPLATE_EQUIPMENT: 'DELETE_EQUIPMENT_TEMPLATE_EQUIPMENT',\r\n};\r\n\r\nexport const EQIPMENT_CATEGORY_IDS = {\r\n MWL_TOOLS: 1,\r\n THIRD_PARTY_TOOLS: 2,\r\n EWL_TOOLS: 3,\r\n TOOL_ASSEMBLIES: 4,\r\n};\r\n\r\nexport const EQUIPMENT_CATEGORY_ENUM = {\r\n Undefined: 0,\r\n BCS: 1,\r\n Cabin: 2,\r\n BOP: 3,\r\n};\r\n\r\nexport const EQUIPMENT_CATEGORY_FROMDTO = {\r\n MechanicalWirelineEquipment: 'MechanicalWirelineEquipment',\r\n ThirdPartyDownholeEquipment: 'ThirdPartyDownholeEquipment',\r\n ElectricalWirelineEquipment: 'ElectricalWirelineEquipment',\r\n};\r\n\r\nexport const MODAL = {\r\n M3_TOOL: 'M3_TOOL',\r\n ADD_TOOL: 'ADD_TOOL',\r\n ADD_SURFACE_EQUIPMENT: 'ADD_SURFACE_EQUIPMENT',\r\n EDIT_M3_TOOL: 'EDIT_M3_TOOL',\r\n ADD_BHA_TEMPLATE: 'ADD_BHA_TEMPLATE',\r\n EDIT_BHA_TEMPLATE: 'EDIT_BHA_TEMPLATE',\r\n ADD_TOOL_ASSEMBLY_TO_BHA: 'ADD_TOOL_ASSEMBLY_TO_BHA',\r\n ADD_TOOL_ASSEMBLY: 'ADD_TOOL_ASSEMBLY',\r\n EDIT_3RDPARTY_TOOL: 'EDIT_3RDPARTY_TOOL',\r\n ADD_TOOL_TO_TOOL_ASSEMBLY: 'ADD_TOOL_TO_TOOL_ASSEMBLY',\r\n EDIT_TOOL_ASSEMBLY: 'EDIT_TOOL_ASSEMBLY',\r\n EDIT_BHA_ADD_TOOL_MODAL: 'EDIT_BHA_ADD_TOOL_MODAL',\r\n ADD_ASSET_HISTORY_TEST: 'ADD_ASSET_HISTORY_TEST',\r\n ADD_ASSET_HISTORY_SURFACE: 'ADD_ASSET_HISTORY_SURFACE',\r\n ADD_ASSET_HISTORY_BHA: 'ADD_ASSET_HISTORY_BHA',\r\n EDIT_TOOL_IMAGE: 'EDIT_TOOL_IMAGE',\r\n MISSING_SERIAL_NUMBER: 'MISSING_SERIAL_NUMBER',\r\n ADD_ASSET_HISTORY_SURFACE_SIL2: 'ADD_ASSET_HISTORY_SURFACE_SIL2',\r\n ROUTE_BHA_EDITOR: 'ROUTE_BHA_EDITOR',\r\n // Equipment template\r\n ADD_EQUIPMENT_TEMPLATE: 'ADD_EQUIPMENT_TEMPLATE',\r\n EDIT_EQUIPMENT_TEMPLATE: 'EDIT_EQUIPMENT_TEMPLATE',\r\n ADD_EQUIPMENT_TO_TEMPLATE: 'ADD_EQUIPMENT_TO_TEMPLATE',\r\n};\r\n\r\nexport const MAX_UPLOAD_FILE_SIZE_TOOL_IMG = 512_000; // 512kb\r\n\r\nexport const UNIT_OF_MEASURE = {\r\n METRIC: 'metric',\r\n IMPERIAL: 'imperial',\r\n CUSTOM: 'Custom',\r\n PROJECT_DEFAULT: 'Project Default',\r\n};\r\n\r\nexport const EDITABLE_TOOL_PROPERTIES = {\r\n OUTER_DIAMETER: 'OUTER_DIAMETER',\r\n INNER_DIAMETER: 'INNER_DIAMETER',\r\n LENGTH: 'LENGTH',\r\n DEPTH: 'DEPTH',\r\n WEIGHT: 'WEIGHT',\r\n FISHNECK: 'FISHNECK',\r\n SWL: 'SWL',\r\n YIELD: 'YIELD',\r\n MAXIMUM_OD: 'MAXIMUM_OD',\r\n MINIMUM_OD: 'MINIMUM_OD',\r\n MAXIMUM_STANDOFF_FORCE: 'MAXIMUM_STANDOFF_FORCE',\r\n MINIMUM_STANDOFF_FORCE: 'MINIMUM_STANDOFF_FORCE',\r\n JAR_ACTIVATION_LIMIT_LOW: 'JAR_ACTIVATION_LIMIT_LOW',\r\n JAR_ACTIVATION_LIMIT_HIGH: 'JAR_ACTIVATION_LIMIT_HIGH',\r\n ADDITIONAL_NORMAL_FORCE: 'ADDITIONAL_NORMAL_FORCE',\r\n AXIAL_FRICTION_REDUCED_TO: 'AXIAL_FRICTION_REDUCED_TO',\r\n WEIGHT_ABOVE_JARRING_POINT_FACTOR: 'WEIGHT_ABOVE_JARRING_POINT_FACTOR',\r\n};\r\n\r\nexport const PROJECT_LESSON_REPORT_ACTIVE_TAB = {\r\n PROJECT_REPORT: 'PROJECT_REPORT',\r\n PROJECT_LESSONS: 'PROJECT_LESSONS',\r\n PROJECT_INCIDENTS: 'PROJECT_INCIDENTS',\r\n PROJECT_NON_PRODUCTIVE_TIME: 'PROJECT_NON_PRODUCTIVE_TIME',\r\n PROJECT_ASSET_TESTS: 'PROJECT_ASSET_TESTS',\r\n};\r\n\r\nexport const TOOL_ASSETS_STATUS = {\r\n TEMPLATE: 'Template',\r\n PRELIMINARY: 'Preliminary',\r\n CONFIG_STRUCT: 'Config Struct',\r\n SERVICEABLE: 'Serviceable',\r\n SVCEABLE_RESTR: 'Svceable Restr',\r\n STAND_BY: 'Standy By',\r\n SPARE: 'Spare',\r\n UNSERVICEABLE: 'Unserviceable',\r\n INCIDENT: 'Incident',\r\n SCRAP_PROPOSAL: 'Scrap Proposal',\r\n SCRAPPED: 'Scrapped',\r\n RENAMED: 'Renamed',\r\n};\r\n\r\nexport const TOOL_ASSET_EVENTS_ENUM = {\r\n RUN: 1,\r\n TASK: 2,\r\n MAINTENANCE: 3,\r\n COMPLAINTS: 4,\r\n TEST: 5,\r\n BOP_TEST: 7,\r\n STRING_TEST: 8,\r\n CABLE_TORSION_TEST: 9,\r\n CABLE_WRAP_TEST: 10,\r\n CABLE_TORTURE_TEST: 11,\r\n CABLE_CONTINUITY_TEST: 12,\r\n CABLE_INSULATION_TEST: 13,\r\n SIL2_TEST: 14,\r\n CABLE_WRAP_BRAIDED_MONO_TEST: 15,\r\n CABLE_BREAK_TEST: 16,\r\n CABLE_CUT_MAINTENANCE: 17,\r\n CABLE_SERVICE_MAINTENANCE: 18,\r\n CABLE_SPOOLING_MAINTENANCE: 19,\r\n};\r\n\r\nexport const TEST_ASSET_RESULT = {\r\n PASS: 1,\r\n WARNING: 2,\r\n FAIL: 3,\r\n};\r\n\r\nexport const ASSET_HISTORY_TEST_TYPE = {\r\n GENERIC: 1,\r\n CABLE: 2,\r\n BOP_TEST: 3,\r\n STRING_TEST: 4,\r\n CABLE_TORSION_TEST: 5,\r\n CABLE_WRAP_TEST: 6,\r\n CABLE_TORTURE_TEST: 7,\r\n CABLE_CONTINUITY_TEST: 8,\r\n CABLE_INSULATION_TEST: 9,\r\n SIL2_TEST: 10,\r\n CABLE_WRAP_BRAIDED_MONO_TEST: 11,\r\n CABLE_BREAK_TEST: 12,\r\n};\r\n\r\nexport const ASSET_HISTORY_EVENT_TYPES_ITEM = {\r\n TEST: 1,\r\n MAINTENANCE: 2,\r\n};\r\n\r\nexport const TEST_RESULT_TO_TOOLTIP_TITLE = {\r\n [TEST_ASSET_RESULT.PASS]: 'Passed',\r\n [TEST_ASSET_RESULT.FAIL]: 'Failed',\r\n [TEST_ASSET_RESULT.WARNING]: 'Warning',\r\n};\r\n\r\nexport const TASK_STATUS_TO_TOOLTIP_TITLE = {\r\n [WORK_ITEM_STATUS.STARTED]: 'Started',\r\n [WORK_ITEM_STATUS.PAUSED]: 'Paused',\r\n [WORK_ITEM_STATUS.COMPLETED]: 'Objective Met',\r\n [WORK_ITEM_STATUS.SKIPPED]: 'Skipped',\r\n [WORK_ITEM_STATUS.FAILED]: 'Objective Not Met',\r\n [WORK_ITEM_STATUS.NOT_SET]: 'Not Set',\r\n [WORK_ITEM_STATUS.PLANNED]: 'Planned',\r\n};\r\n\r\nexport const ASSET_HISTORY_EVENT_TYPES = List([\r\n { id: '1', name: 'Test' },\r\n { id: '2', name: 'Maintenance' },\r\n]);\r\n\r\nexport const BOP_TEST_TYPES = List([\r\n { id: '1', name: 'Pre Job Test' },\r\n { id: '2', name: '14 days test' },\r\n { id: '3', name: 'Yearly test' },\r\n { id: '4', name: 'Body test' },\r\n]);\r\n\r\nexport const SIL_VERIFICATION = List([\r\n { id: '1', name: 'Closed on first attempt', isFail: false },\r\n { id: '2', name: 'Failed to close on first attempt', isFail: false },\r\n { id: '3', name: 'Failed during test', isFail: true },\r\n { id: '4', name: 'Failed during Operation', isFail: true },\r\n { id: '5', name: 'N/A' },\r\n]);\r\n\r\nexport const BOP_LEAK_TYPE = List([\r\n { id: '1', name: 'Outer Seal' },\r\n { id: '2', name: 'Inner Seal' },\r\n { id: '3', name: 'Hydraulics' },\r\n { id: '4', name: 'Equalising' },\r\n { id: '5', name: 'Pin/Box' },\r\n { id: '6', name: 'Other' },\r\n]);\r\n\r\nexport const BOP_RAM = List([\r\n { id: '1', name: 'Upper Ram' },\r\n { id: '2', name: 'Middle Ram' },\r\n { id: '3', name: 'Lower Ram' },\r\n { id: '4', name: 'Shear Ram' },\r\n { id: '5', name: 'Pipe Ram' },\r\n { id: '6', name: 'Slip Ram' },\r\n]);\r\n\r\nexport const ASSET_HISTORY_EQUIPMENT_TYPE = {\r\n TOOL: 0,\r\n CABLE: 1,\r\n SURFACE: 2,\r\n BHA: 3,\r\n ALL: 4,\r\n STRING_TEST: 5,\r\n SURFACE_EQUIPMENT: 6,\r\n};\r\n\r\nexport const ASSET_HISTORY_TEST_TYPES = List([\r\n {\r\n id: '1',\r\n name: 'Generic',\r\n showByDefault: true,\r\n description: 'Generic',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.ALL,\r\n },\r\n {\r\n id: '3',\r\n name: 'BOP Test',\r\n showByDefault: true,\r\n description: 'BOP',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.SURFACE,\r\n },\r\n {\r\n id: '4',\r\n name: 'String Test',\r\n showByDefault: false,\r\n description: 'String',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.STRING_TEST,\r\n },\r\n {\r\n id: '5',\r\n name: 'Cable Torsion Test',\r\n showByDefault: true,\r\n description: 'Cable Torsion',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '6',\r\n name: 'Cable Wrap Test Slickline Cable',\r\n showByDefault: true,\r\n description: 'Cable Wrap Test Slickline Cable',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '7',\r\n name: 'Cable Torture Test',\r\n showByDefault: true,\r\n description: 'Cable Torture',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '8',\r\n name: 'Cable Continuity Test',\r\n showByDefault: true,\r\n description: 'Cable Continuity',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '9',\r\n name: 'Cable Insulation Test',\r\n showByDefault: true,\r\n description: 'Cable Insulation',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '10',\r\n name: 'Sil2 Test',\r\n showByDefault: false,\r\n description: 'Sil2 Test',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.SURFACE_EQUIPMENT,\r\n },\r\n {\r\n id: '11',\r\n name: 'Cable Wrap Test Braided/Mono Cable',\r\n showByDefault: false,\r\n description: 'Cable Wrap Test Braided/Mono Cable',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '12',\r\n name: 'Cable Break Test',\r\n showByDefault: false,\r\n description: 'Cable Break Test',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n]);\r\n\r\nexport const ASSET_HISTORY_RESULTS = List([\r\n { id: '1', name: 'Pass' },\r\n { id: '2', name: 'Warning' },\r\n { id: '3', name: 'Fail' },\r\n]);\r\n\r\nexport const eventHistoryList = Object.keys(TOOL_ASSET_EVENTS_ENUM).map(\r\n (key) => {\r\n return {\r\n id: TOOL_ASSET_EVENTS_ENUM[key],\r\n description: toolAssetHistoryEventToString(TOOL_ASSET_EVENTS_ENUM[key]),\r\n };\r\n },\r\n);\r\n\r\nexport const EquipmentType = {\r\n TOOL: 0,\r\n CABLE: 1,\r\n SURFACE: 2,\r\n BHA: 3,\r\n SURFACE_EQUIPMENT: 3,\r\n};\r\n\r\nexport const getEventKeyByValue = (value) => {\r\n switch (value) {\r\n case TOOL_ASSET_EVENTS_ENUM.RUN:\r\n return 'run';\r\n case TOOL_ASSET_EVENTS_ENUM.TASK:\r\n return 'task';\r\n case TOOL_ASSET_EVENTS_ENUM.MAINTENANCE:\r\n return 'maintenance';\r\n case TOOL_ASSET_EVENTS_ENUM.COMPLAINTS:\r\n return 'complaints';\r\n case TOOL_ASSET_EVENTS_ENUM.TEST:\r\n return 'test';\r\n case TOOL_ASSET_EVENTS_ENUM.BOP_TEST:\r\n return 'bopTest';\r\n case TOOL_ASSET_EVENTS_ENUM.STRING_TEST:\r\n return 'stringTest';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORSION_TEST:\r\n return 'cableTorsionTest';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_WRAP_TEST:\r\n return 'cableWrapTest';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORTURE_TEST:\r\n return 'cableTortureTest';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CONTINUITY_TEST:\r\n return 'cableContinuityTest';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_INSULATION_TEST:\r\n return 'cableInsulationTest';\r\n case TOOL_ASSET_EVENTS_ENUM.SIL2_TEST:\r\n return 'sil2Test';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_WRAP_BRAIDED_MONO_TEST:\r\n return 'cableWrapBraidedMonoTest';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_BREAK_TEST:\r\n return 'cableBreakTest';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CUT_MAINTENANCE:\r\n return 'cableCutMaintenance';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SERVICE_MAINTENANCE:\r\n return 'cableServiceMaintenance';\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SPOOLING_MAINTENANCE:\r\n return 'cableSpoolingMaintenance';\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const ASSET_HISTORY_TEST_TYPES_DICT = ASSET_HISTORY_TEST_TYPES.reduce(\r\n (acc, item) => {\r\n acc[item.id] = item.description;\r\n return acc;\r\n },\r\n {},\r\n);\r\n\r\nexport const getAssetTestNameById = (id) => {\r\n return ASSET_HISTORY_TEST_TYPES_DICT[id] || 'Unknown';\r\n};\r\n\r\nexport const ASSET_HISTORY_MAINTENANCE_TYPE = {\r\n GENERIC: 1,\r\n CABLE_CUT: 2,\r\n CABLE_SERVICE: 3,\r\n CABLE_SPOOLING: 4,\r\n};\r\n\r\nexport const ASSET_HISTORY_MAINTENANCE_TYPES = List([\r\n {\r\n id: '1',\r\n name: 'Generic',\r\n showByDefault: true,\r\n description: 'Generic',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.ALL,\r\n },\r\n {\r\n id: '2',\r\n name: 'Cable Cut',\r\n showByDefault: true,\r\n description: 'Cable Cut Maintenance',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '3',\r\n name: 'Cable Service',\r\n showByDefault: true,\r\n description: 'Cable Service Maintenance',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n {\r\n id: '4',\r\n name: 'Cable Spooling',\r\n showByDefault: true,\r\n description: 'Cable Spooling Maintenance',\r\n equipmentType: ASSET_HISTORY_EQUIPMENT_TYPE.CABLE,\r\n },\r\n]);\r\n\r\nexport const ASSET_HISTORY_MAINTENANCE_TYPES_DICT =\r\n ASSET_HISTORY_MAINTENANCE_TYPES.reduce((acc, item) => {\r\n acc[item.id] = item.description;\r\n return acc;\r\n }, {});\r\n\r\nexport const getAssetMaintenanceNameById = (id) => {\r\n return ASSET_HISTORY_MAINTENANCE_TYPES_DICT[id] || 'Unknown';\r\n};\r\n","import moment from 'moment';\r\nimport { Map, OrderedMap, List } from 'immutable';\r\n\r\nimport { CableType } from 'features/projects/tool/tool.constants';\r\nimport {\r\n EQIPMENT_CATEGORY_IDS,\r\n EQUIPMENT_CATEGORY_FROMDTO,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\n\r\nconst dropdownListItemFromDto = ({ ...dropdownListItem }) =>\r\n Map({\r\n ...dropdownListItem,\r\n });\r\n\r\nconst toolCategoryStringToId = (toolCategory) =>\r\n ({\r\n [EQUIPMENT_CATEGORY_FROMDTO.MechanicalWirelineEquipment]:\r\n EQIPMENT_CATEGORY_IDS.MWL_TOOLS,\r\n [EQUIPMENT_CATEGORY_FROMDTO.ElectricalWirelineEquipment]:\r\n EQIPMENT_CATEGORY_IDS.EWL_TOOLS,\r\n [EQUIPMENT_CATEGORY_FROMDTO.ThirdPartyDownholeEquipment]:\r\n EQIPMENT_CATEGORY_IDS.THIRD_PARTY_TOOLS,\r\n }[toolCategory]);\r\n\r\nexport const toolFromDto = ({\r\n toolId,\r\n maximumPullForce,\r\n swl,\r\n toolAssemblyTools,\r\n toolCategory,\r\n ...tool\r\n}) =>\r\n Map({\r\n id: toolId,\r\n maxPullForce: maximumPullForce,\r\n safeWorkingLoad: swl,\r\n toolAssemblyTools: List(toolAssemblyTools).map(toolFromDto),\r\n toolCategoryId: toolCategoryStringToId(toolCategory),\r\n ...tool,\r\n });\r\n\r\nexport const toolsFromDto = (tools) =>\r\n OrderedMap(tools.map((tool) => [tool.toolId.toString(), toolFromDto(tool)]));\r\n\r\nexport const toolImageFromDto = ({\r\n toolImageId,\r\n created,\r\n modified,\r\n originalFileName,\r\n blobStoreUri,\r\n ...toolImage\r\n}) =>\r\n Map({\r\n id: toolImageId,\r\n created: created ? moment(created) : undefined,\r\n modified: modified ? moment(modified) : undefined,\r\n fullName: originalFileName,\r\n imageUrl: blobStoreUri,\r\n ...toolImage,\r\n });\r\n\r\nexport const toolImportFromDto = ({ importedTools, importErrors }) =>\r\n Map({\r\n tools: toolsFromDto(importedTools),\r\n errors: List(importErrors),\r\n });\r\n\r\nexport const toolFilterValuesFromDto = (list) =>\r\n OrderedMap(\r\n list?.map((listItem) => [listItem.id, dropdownListItemFromDto(listItem)]),\r\n );\r\n\r\nexport const cableTypeToString = (cableType) =>\r\n ({\r\n [CableType.MONO]: 'Mono',\r\n [CableType.SWAB]: 'Swab',\r\n [CableType.SLICKLINE]: 'Slickline',\r\n [CableType.MULTICONDUCTOR]: 'Multi-Conductor',\r\n [CableType.COAX]: 'Coax',\r\n [CableType.ELINE]: 'E-line',\r\n }[cableType]);\r\n\r\nexport const cableFromDto = ({\r\n type,\r\n cableId,\r\n stretchCoefficient,\r\n manufacturerPartNo,\r\n ...cable\r\n}) =>\r\n Map({\r\n type,\r\n id: cableId,\r\n partNo: manufacturerPartNo,\r\n stretch: stretchCoefficient,\r\n typeName: cableTypeToString(type),\r\n ...cable,\r\n });\r\n\r\nexport const toolStringDto = ({\r\n name,\r\n toolStringId,\r\n toolStringItems,\r\n imageUrl,\r\n totalLength,\r\n totalWeight,\r\n maxOD,\r\n ...template\r\n}) => {\r\n const tool = Map({\r\n name,\r\n id: toolStringId,\r\n toolStringItems: List(toolStringItems).map(toolStringItemDto),\r\n imageUrl: imageUrl,\r\n length: totalLength,\r\n weight: totalWeight,\r\n outerDiameter: maxOD,\r\n verifiedData: verifyToolstringData(toolStringItems),\r\n ...template,\r\n });\r\n\r\n return tool;\r\n};\r\n\r\nconst verifyToolstringData = (toolStringItems) => {\r\n let dataVerified = true;\r\n\r\n for (const tool of toolStringItems) {\r\n if (tool.verifiedData === false) {\r\n dataVerified = false;\r\n break;\r\n }\r\n }\r\n\r\n return dataVerified;\r\n};\r\n\r\nexport const equipmentTemplateFromDto = ({\r\n name,\r\n description,\r\n equipmentTemplateId,\r\n templateEquipments,\r\n ...template\r\n}) => {\r\n const equipmentTemplate = Map({\r\n name,\r\n description,\r\n id: equipmentTemplateId,\r\n templateEquipments: List(templateEquipments).map(templateEquipmentItemDto),\r\n verifiedData: verifyEquipmentTemplateData(templateEquipments),\r\n ...template,\r\n });\r\n\r\n return equipmentTemplate;\r\n};\r\n\r\nconst verifyEquipmentTemplateData = (templateEquipments) => {\r\n let dataVerified = true;\r\n\r\n for (const templateEquipment of templateEquipments) {\r\n if (templateEquipment.equipment.verifiedData === false) {\r\n dataVerified = false;\r\n break;\r\n }\r\n }\r\n\r\n return dataVerified;\r\n};\r\n\r\nexport const templateEquipmentItemDto = ({\r\n equipmentTemplateEquipmentId,\r\n equipmentId,\r\n sequence,\r\n equipment,\r\n ...template\r\n}) => {\r\n const dataVerifiedHasValue = equipment?.dataVerified ? true : false;\r\n const templateEquipmentItem = Map({\r\n id: equipmentTemplateEquipmentId,\r\n equipmentId,\r\n name: equipment.name,\r\n description: equipment.description,\r\n surfaceEquipment: surfaceEquipmentItemDto(equipment),\r\n imageUrl: equipment.imageUrl,\r\n group: equipment.equipmentGroup?.name,\r\n verifiedData: dataVerifiedHasValue,\r\n length: equipment?.length_mm, //TODO change to length once we have units of measures mapping\r\n width: equipment?.width_mm, //TODO change to length once we have units of measures mapping\r\n weight: equipment?.weight_kg, //TODO change to length once we have units of measures mapping\r\n height: equipment?.height_mm, //TODO change to length once we have units of measures mapping\r\n ...template,\r\n });\r\n\r\n return templateEquipmentItem;\r\n};\r\n\r\nexport const toolStringItemDto = ({\r\n name,\r\n toolId,\r\n toolStringItems,\r\n imageUrl,\r\n length,\r\n width,\r\n toolAssemblyTools,\r\n dataVerified,\r\n attachedTools,\r\n toolstringItemId,\r\n ...template\r\n}) => {\r\n const dataVerifiedHasValue = dataVerified ? true : false;\r\n const tool = Map({\r\n name,\r\n id: toolId,\r\n toolStringItems: List(toolStringItems).map(toolStringItemDto),\r\n imageUrl: imageUrl,\r\n dataVerified,\r\n length: length,\r\n width: width,\r\n verifiedData: toolAssemblyTools\r\n ? verifyToolStringItemData(toolAssemblyTools)\r\n : dataVerifiedHasValue,\r\n toolAssemblyTools,\r\n toolstringItemId,\r\n attachedTools: attachedTools\r\n ? List(attachedTools).map((a) =>\r\n toolStringItemDto(a)\r\n .set('accumulatedLength', undefined)\r\n .set('attachmentOwnerId', toolstringItemId),\r\n )\r\n : undefined,\r\n ...template,\r\n });\r\n\r\n return tool;\r\n};\r\n\r\nconst verifyToolStringItemData = (toolAssemblyTools) => {\r\n if (toolAssemblyTools && toolAssemblyTools.length > 0) {\r\n return verifyAssemblyData(toolAssemblyTools);\r\n }\r\n};\r\n\r\nexport const cablesFromSearchResult = (cables) =>\r\n Map(cables.map((cable) => [cable.cableId.toString(), cableFromDto(cable)]));\r\n\r\nexport const bhaTemplatesFromSearchResult = (templates) =>\r\n Map(\r\n templates.map((template) => [\r\n template.toolStringId.toString(),\r\n toolStringDto(template),\r\n ]),\r\n );\r\n\r\nexport const surfaceEquipmentItemDto = ({\r\n equipmentId,\r\n equipmentGroupId,\r\n equipmentGroup,\r\n m3ItemNumber,\r\n name,\r\n description,\r\n length_mm,\r\n width_mm,\r\n height_mm,\r\n weight_kg,\r\n equipmentImage,\r\n externalId,\r\n ...equipment\r\n}) =>\r\n Map({\r\n equipmentId: equipmentId,\r\n equipmentGroupId: equipmentGroupId,\r\n equipmentGroup: equipmentGroup ? equipmentGroupDto(equipmentGroup) : {},\r\n m3ItemNumber: m3ItemNumber,\r\n name: name,\r\n description: description,\r\n length: length_mm,\r\n width: width_mm,\r\n height: height_mm,\r\n weight: weight_kg,\r\n equipmentImage: equipmentImage ? equipmentImageDto(equipmentImage) : {},\r\n externalId: externalId,\r\n ...equipment,\r\n });\r\n\r\nexport const equipmentGroupDto = ({\r\n equipmentGroupId,\r\n name,\r\n equipmentImage,\r\n equipmentImageUrl,\r\n externalId,\r\n}) =>\r\n Map({\r\n equipmentGroupId: equipmentGroupId,\r\n name: name,\r\n equipmentImage: equipmentImage ? equipmentImageDto(equipmentImage) : {},\r\n equipmentImageUrl: equipmentImageUrl,\r\n externalId: externalId,\r\n });\r\n\r\nexport const equipmentImageDto = ({\r\n equipmentImageId,\r\n externalId,\r\n name,\r\n extension,\r\n originalFileName,\r\n blobStoreUri,\r\n created,\r\n modified,\r\n}) =>\r\n Map({\r\n equipmentImageId: equipmentImageId,\r\n externalId: externalId,\r\n name: name,\r\n extension: extension,\r\n originalFileName: originalFileName,\r\n imageUrl: blobStoreUri,\r\n created: created,\r\n modified: modified,\r\n });\r\n\r\nexport const toolAssembliesFromDto = (tools) =>\r\n OrderedMap(\r\n tools.map((tool) => [tool.toolId.toString(), toolAssemblyFromDto(tool)]),\r\n );\r\n\r\nconst toolAssemblyFromDto = ({\r\n toolAssemblyTools,\r\n toolId,\r\n maximumPullForce,\r\n swl,\r\n toolCategory,\r\n ...toolAssembly\r\n}) =>\r\n Map({\r\n verifiedData: verifyAssemblyData(toolAssemblyTools),\r\n id: toolId,\r\n maxPullForce: maximumPullForce,\r\n safeWorkingLoad: swl,\r\n toolAssemblyTools: List(toolAssemblyTools).map(toolFromDto),\r\n toolCategoryId: toolCategoryStringToId(toolCategory),\r\n ...toolAssembly,\r\n });\r\n\r\nconst verifyAssemblyData = (toolAssemblyTools) => {\r\n let dataVerified = true;\r\n\r\n for (const tool of toolAssemblyTools) {\r\n if (tool.m3ItemNumber !== ThirdPartyLabel && tool.dataVerified === null) {\r\n dataVerified = false;\r\n break;\r\n }\r\n }\r\n return dataVerified;\r\n};\r\n\r\nconst toolMappers = {\r\n Tool: {\r\n from: toolFromDto,\r\n },\r\n ToolImage: {\r\n from: toolImageFromDto,\r\n },\r\n ToolSearchFilter: {\r\n from: toolFilterValuesFromDto,\r\n },\r\n ToolSearch: {\r\n from: toolsFromDto,\r\n },\r\n ToolImport: {\r\n from: toolImportFromDto,\r\n },\r\n Cable: {\r\n from: cableFromDto,\r\n },\r\n bhaTemplate: {\r\n from: toolStringDto,\r\n },\r\n BhaTemplatesSearch: {\r\n from: bhaTemplatesFromSearchResult,\r\n },\r\n CableSearch: {\r\n from: cablesFromSearchResult,\r\n },\r\n SurfaceEquipment: {\r\n from: surfaceEquipmentItemDto,\r\n },\r\n ToolAssemblies: {\r\n from: toolAssembliesFromDto,\r\n },\r\n EquipmentTemplate: {\r\n from: equipmentTemplateFromDto,\r\n },\r\n};\r\n\r\nexport default toolMappers;\r\n","import moment from 'moment';\r\nimport { Map, OrderedMap, List } from 'immutable';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport toolMapper from 'features/projects/tool/tool.mappers';\r\nimport { ToolType } from 'features/projects/tool/tool.constants';\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\n\r\nconst initialToolstring = () =>\r\n Map({\r\n toolsByToolstringToolId: EMPTY_MAP,\r\n });\r\n\r\nexport const toolstringItemFromDto = ({\r\n individualSerialNumber,\r\n toolAssemblyTools = [],\r\n attachedTools = [],\r\n maximumPullForce,\r\n swl,\r\n toolstringItemId,\r\n ...rest\r\n}) =>\r\n Map({\r\n serialNo: individualSerialNumber,\r\n maxPullForce: maximumPullForce,\r\n safeWorkingLoad: swl,\r\n toolstringItemId,\r\n ...rest,\r\n toolAssemblyTools: List(toolAssemblyTools).map((toolAssemblyTool) =>\r\n toolAssemblyToolFromDto({ ...toolAssemblyTool, toolstringItemId }),\r\n ),\r\n attachedTools: List(attachedTools).map((a) =>\r\n toolstringItemFromDto(a)\r\n .set('accumulatedLength', undefined)\r\n .set('attachmentOwnerId', toolstringItemId),\r\n ),\r\n });\r\n\r\nexport const toolstringSectionsFromDto = (sections) =>\r\n List(\r\n sections.map(({ length, items }) =>\r\n Map({\r\n length,\r\n items: List(items.map((item) => item.toolstringItemId)),\r\n }),\r\n ),\r\n );\r\n\r\nexport const toolAssemblyToolFromDto = ({\r\n toolAssemblyToolId,\r\n maximumPullForce,\r\n swl,\r\n referenceNumber,\r\n individualSerialNumber,\r\n attachedTools = [],\r\n ...toolAssemblyTool\r\n}) =>\r\n Map({\r\n id: toolAssemblyToolId,\r\n type: ToolType.ASSEMBLY_TOOL,\r\n safeWorkingLoad: swl,\r\n maxPullForce: maximumPullForce,\r\n toolAssemblyToolId,\r\n serialNo: individualSerialNumber,\r\n attachedTools: List(attachedTools).map((a) =>\r\n toolstringItemFromDto(a)\r\n .set('accumulatedLength', undefined)\r\n .set('attachmentOwnerId', toolAssemblyToolId),\r\n ),\r\n ...toolAssemblyTool,\r\n });\r\n\r\nexport const toolstringItemToCreateDto = (toolItem) => ({\r\n itemId: toolItem.get('id'),\r\n type: toolItem.get('type'),\r\n});\r\n\r\nexport const toolstringItemDuplicateToCreateDto = (toolItem) => {\r\n const type = toolItem.get('type');\r\n return {\r\n type: type,\r\n itemId:\r\n type === ToolType.ASSEMBLY_TOOL\r\n ? toolItem.get('id')\r\n : toolItem.get('toolstringItemId'),\r\n };\r\n};\r\n\r\nexport const toolstringItemToUpdateDto = (toolstringItem) => {\r\n if (toolstringItem.type === ToolType.ASSEMBLY) {\r\n return {\r\n name: toolstringItem.name,\r\n };\r\n } else {\r\n return toolToUpdateDto(toolstringItem);\r\n }\r\n};\r\n\r\nexport const toolstringAttachmentToCreateDto = (owner, tool) => ({\r\n owner:\r\n owner.get('type') === ToolType.ASSEMBLY_TOOL\r\n ? ToolType.ASSEMBLY\r\n : owner.get('type'),\r\n externalToolId:\r\n tool.get('type') === ToolType.TOOL ? tool.get('id') : undefined,\r\n externalToolAssemblyId:\r\n tool.get('type') === ToolType.ASSEMBLY ? tool.get('id') : undefined,\r\n});\r\n\r\nexport const toolAssemblyToolToUpdateDto = (toolstringItem) => {\r\n return toolToUpdateDto(toolstringItem);\r\n};\r\n\r\nconst toolToUpdateDto = (toolstringItem) => ({\r\n name: toolstringItem.name,\r\n individualSerialNumber: toolstringItem.serialNo,\r\n topToolConnectorId: toolstringItem.topToolConnectorId,\r\n bottomToolConnectorId: toolstringItem.bottomToolConnectorId,\r\n});\r\n\r\nexport const toolAssemblyToolToCreateDto = (tool) => ({\r\n toolId: tool.get('id'),\r\n});\r\n\r\nexport const toolstringFromDto = ({\r\n cable,\r\n cableId,\r\n created,\r\n modified,\r\n toolStringId,\r\n toolStringItems = [],\r\n ...toolstring\r\n}) => {\r\n const items = toolStringItems\r\n ? List(toolStringItems).map(toolstringItemFromDto)\r\n : EMPTY_LIST;\r\n\r\n return Map({\r\n id: toolStringId,\r\n cableId,\r\n cableType: cable?.type,\r\n cable: cable ? toolMapper.Cable.from(cable) : undefined,\r\n created: created ? moment(created) : undefined,\r\n modified: modified ? moment(modified) : undefined,\r\n toolsByToolstringToolId: OrderedMap(\r\n items.map((toolstringItem) => [\r\n toolstringItem.get('toolstringItemId').toString(),\r\n toolstringItem,\r\n ]),\r\n ),\r\n ...toolstring,\r\n });\r\n};\r\n\r\nexport const toolstringToDto = ({ name, comment, cableId, observations }) => ({\r\n name,\r\n comment,\r\n cableId,\r\n observations,\r\n});\r\n\r\nconst toolStringToolDataVerifiedThirdParty = (toolsList) => {\r\n return toolsList.map((tool) => {\r\n if (tool.get('m3ItemNumber') === ThirdPartyLabel) {\r\n return tool.set('dataVerified', new Date());\r\n }\r\n return tool;\r\n });\r\n};\r\n\r\nfunction getToolsByToolstringToolId(data, taskId, toolstringId) {\r\n if (data[taskId] && data[taskId][toolstringId]) {\r\n return data[taskId][toolstringId].toolsByToolstringToolId;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction findPlannedToolstring(data, taskId) {\r\n if (data[taskId]) {\r\n for (const [toolstringId, toolstring] of Object.entries(data[taskId])) {\r\n if (toolstring.isPlanned) {\r\n return { [toolstringId]: toolstring };\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nconst toolstringMappers = {\r\n Toolstring: {\r\n to: toolstringToDto,\r\n from: toolstringFromDto,\r\n initial: initialToolstring,\r\n },\r\n ToolstringItem: {\r\n from: toolstringItemFromDto,\r\n toCreate: toolstringItemToCreateDto,\r\n toUpdate: toolstringItemToUpdateDto,\r\n toDuplicate: toolstringItemDuplicateToCreateDto,\r\n },\r\n ToolAssemblyTool: {\r\n from: toolAssemblyToolFromDto,\r\n toUpdate: toolAssemblyToolToUpdateDto,\r\n toCreate: toolAssemblyToolToCreateDto,\r\n },\r\n ToolstringSections: {\r\n from: toolstringSectionsFromDto,\r\n },\r\n ToolstringTool: {\r\n thirdPartyDataVerification: toolStringToolDataVerifiedThirdParty,\r\n },\r\n ToolstringAttachment: {\r\n toCreate: toolstringAttachmentToCreateDto,\r\n },\r\n getToolsByToolstringToolId,\r\n findPlannedToolstring,\r\n};\r\n\r\nexport default toolstringMappers;\r\n","export const FluidType = {\r\n LIQUID: 0,\r\n GAS: 1,\r\n MULTIPHASE: 3,\r\n};\r\nexport const FluidFormFields = {\r\n NAME: 'name',\r\n DEPTH: 'endDepth',\r\n GAS_TYPE: 'gasType',\r\n FLUID_TYPE: 'fluidType',\r\n GAS_DENSITY: 'gasDensity',\r\n YIELD_POINT: 'yieldPoint',\r\n OIL_GRAVITY: 'oilGravity',\r\n YIELD_STRESS: 'yieldStress',\r\n WATER_DENSITY: 'waterDensity',\r\n WATER_FRACTION: 'waterFraction',\r\n RHEOLOGY_MODEL: 'rheologyModel',\r\n LIQUID_DENSITY: 'liquidDensity',\r\n LIQUID_CONTENT: 'liquidContent',\r\n MULTIPHASE_TYPE: 'multiphaseType',\r\n GAS_LIQUID_RATIO: 'gasLiquidRatio',\r\n PLASTIC_VISCOSITY: 'plasticViscosity',\r\n CONSISTENCY_INDEX: 'consistencyIndex',\r\n MULTIPHASE_GAS_TYPE: 'multiphaseGasType',\r\n NEWTONIAN_VISCOSITY: 'newtonianViscosity',\r\n FLOW_BEHAVIOUR_INDEX: 'flowBehaviourIndex',\r\n MULTIPHASE_GAS_DENSITY: 'multiphaseGasDensity',\r\n};\r\nexport const RheologyModel = {\r\n NEWTONIAN: 0,\r\n BINGHAM_PLASTIC: 1,\r\n POWER_LAW: 2,\r\n HERSCHEL_BULKLEY: 3,\r\n};\r\nexport const MultiphaseType = {\r\n BLACK_OIL: 0,\r\n};\r\nexport const GasType = {\r\n NITROGEN: 0,\r\n AIR: 1,\r\n NATURAL_GAS: 2,\r\n};\r\n","export const ACTIONS = {\r\n REQUEST_SIMULATION_TOOL_PARAMETERS: 'REQUEST_SIMULATION_TOOL_PARAMETERS',\r\n REQUEST_UPDATE_SIMULATION_TOOL_PARAMETER:\r\n 'REQUEST_UPDATE_SIMULATION_TOOL_PARAMETER',\r\n\r\n RECEIVE_SIMULATION_TOOL_PARAMETER: 'RECEIVE_SIMULATION_TOOL_PARAMETER',\r\n RECEIVE_SIMULATION_TOOL_PARAMETERS: 'RECEIVE_SIMULATION_TOOL_PARAMETERS',\r\n};\r\n\r\nexport const DynamicToolParameter = {\r\n JAR_ACTIVATION: 1,\r\n FLUID_SELECTION: 2,\r\n};\r\nexport const FluidSelectionType = {\r\n AIR: 0,\r\n WELLBORE_FLUID: 1,\r\n};\r\n","import { Map } from 'immutable';\r\n\r\nimport { FlowPath } from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nimport toolMapper from 'features/projects/tool/tool.mappers';\r\nimport toolstringMapper from 'features/projects/tasks/task/toolstring/toolstring.mappers';\r\nimport { FluidType, RheologyModel } from 'utils/fluids/constants.utils';\r\nimport { FluidSelectionType } from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.constants';\r\nimport { editorStateToString, stringToEditorState } from 'utils/app.util';\r\n\r\nexport const flowPathToString = (flowPath) =>\r\n ({\r\n [FlowPath.FLOW_UP]: 'Flow up',\r\n [FlowPath.FLOW_DOWN]: 'Flow down',\r\n }[flowPath]);\r\n\r\nexport const fluidTypeToString = (fluidType) =>\r\n ({\r\n [FluidType.GAS]: 'Gas',\r\n [FluidType.LIQUID]: 'Liquid',\r\n [FluidType.MULTIPHASE]: 'Multiphase',\r\n }[fluidType]);\r\n\r\nexport const rheologyModelToString = (rheologyModel) =>\r\n ({\r\n [RheologyModel.NEWTONIAN]: 'Newtonian',\r\n [RheologyModel.POWER_LAW]: 'Power law',\r\n [RheologyModel.BINGHAM_PLASTIC]: 'Bingham Plastic',\r\n [RheologyModel.HERSCHEL_BULKLEY]: 'Herschel–Bulkley',\r\n }[rheologyModel]);\r\n\r\nexport const fluidSelectionTypeToString = (fluidSelectionType) =>\r\n ({\r\n [FluidSelectionType.AIR]: 'Air',\r\n [FluidSelectionType.WELLBORE_FLUID]: 'Wellbore Fluid',\r\n }[fluidSelectionType]);\r\n\r\nconst SimulationMapper = {\r\n from: ({ cable, toolstring, toolStringId, comment, ...simulation }) =>\r\n Map({\r\n toolStringId, // TODO: Having both to not break anything. Remove later.\r\n toolstringId: toolStringId,\r\n cable: cable ? toolMapper.Cable.from(cable) : undefined,\r\n toolstring: toolstring\r\n ? toolstringMapper.Toolstring.from(toolstring)\r\n : undefined,\r\n comment: comment ? stringToEditorState(comment) : undefined,\r\n ...simulation,\r\n }),\r\n to: ({ toolstringId, comment, ...simulation }) => ({\r\n ...simulation,\r\n toolStringId: toolstringId,\r\n comment: comment ? editorStateToString(comment) : null,\r\n }),\r\n};\r\n\r\nconst SimulationResultMapper = {\r\n from: ({\r\n tractorForceRunInHole,\r\n surfaceTensionRunInHole,\r\n minCableTensionRunInHole,\r\n cableHeadTensionRunInHole,\r\n surfaceTensionPullOutOfHole,\r\n cableHeadTensionPullOutOfHole,\r\n maxPickupWeightPullOutOfHole,\r\n workingLimitPullOutOfHole,\r\n compressionLimitRunInHole,\r\n maxSetDownRunInHole,\r\n weakPointLowSFPullOutOfHole,\r\n weakPointLowPullOutOfHole,\r\n weakPointHighPullOutOfHole,\r\n timestampPullOutOfHole,\r\n timestampRunInHole,\r\n surfaceWeightJarFiringLowPullOutOfHole,\r\n surfaceWeightJarFiringHighPullOutOfHole,\r\n cableHeadTensionJarFiringLowPullOutOfHole,\r\n cableHeadTensionJarFiringHighPullOutOfHole,\r\n stretchRunInHole,\r\n stretchPullOutOfHole,\r\n direction,\r\n simulationResultSetId,\r\n ...simulationResult\r\n }) =>\r\n Map({\r\n runInHole: Map({\r\n tractorForce: tractorForceRunInHole,\r\n surfaceTension: surfaceTensionRunInHole,\r\n minCableTension: minCableTensionRunInHole,\r\n cableHeadTension: cableHeadTensionRunInHole,\r\n compressionLimit: compressionLimitRunInHole,\r\n maxSetDown: maxSetDownRunInHole,\r\n stretch: stretchRunInHole,\r\n timestamp: timestampRunInHole,\r\n }),\r\n pullOutOfHole: Map({\r\n workingLimit: workingLimitPullOutOfHole,\r\n surfaceTension: surfaceTensionPullOutOfHole,\r\n maxPickupWeight: maxPickupWeightPullOutOfHole,\r\n cableHeadTension: cableHeadTensionPullOutOfHole,\r\n weakPointLowSF: weakPointLowSFPullOutOfHole,\r\n weakPointLow: weakPointLowPullOutOfHole,\r\n weakPointHigh: weakPointHighPullOutOfHole,\r\n surfaceWeightJarFiringLow: surfaceWeightJarFiringLowPullOutOfHole,\r\n surfaceWeightJarFiringHigh: surfaceWeightJarFiringHighPullOutOfHole,\r\n cableHeadTensionJarFiringLow: cableHeadTensionJarFiringLowPullOutOfHole,\r\n cableHeadTensionJarFiringHigh:\r\n cableHeadTensionJarFiringHighPullOutOfHole,\r\n stretch: stretchPullOutOfHole,\r\n timestamp: timestampPullOutOfHole,\r\n }),\r\n ...simulationResult,\r\n }),\r\n};\r\n\r\nconst SimulationParameterMapper = {\r\n from: (simulationParameter) =>\r\n Map({\r\n ...simulationParameter,\r\n }),\r\n to: (simulationParameter) => ({\r\n ...simulationParameter,\r\n }),\r\n};\r\n\r\nconst SimulationFluidMapper = {\r\n initial: () =>\r\n Map({\r\n newtonianViscosity: 1,\r\n fluidType: FluidType.LIQUID,\r\n rheologyModel: RheologyModel.NEWTONIAN,\r\n }),\r\n from: ({ ...simulationFluid }) =>\r\n Map({\r\n ...simulationFluid,\r\n }),\r\n to: (simulationFluid) => ({\r\n ...simulationFluid,\r\n }),\r\n};\r\n\r\nconst SimulationDynamicToolParameterMapper = {\r\n from: (simulationDynamicToolParameter) =>\r\n Map({\r\n ...simulationDynamicToolParameter,\r\n }),\r\n to: (simulationDynamicToolParameter) => ({\r\n ...simulationDynamicToolParameter,\r\n }),\r\n};\r\n\r\nconst simulationMappers = {\r\n Simulation: SimulationMapper,\r\n SimulationFluid: SimulationFluidMapper,\r\n SimulationResult: SimulationResultMapper,\r\n SimulationParameter: SimulationParameterMapper,\r\n SimulationDynamicToolParameter: SimulationDynamicToolParameterMapper,\r\n};\r\n\r\nexport default simulationMappers;\r\n","import moment from 'moment';\r\nimport last from 'lodash/last';\r\nimport isNil from 'lodash/isNil';\r\nimport isNaN from 'lodash/isNaN';\r\nimport initial from 'lodash/initial';\r\nimport { Map, List, fromJS, Set, OrderedMap } from 'immutable';\r\n\r\nimport {\r\n DIRECTION,\r\n EMPTY_SET,\r\n EMPTY_MAP,\r\n EMPTY_LIST,\r\n FacilityType,\r\n EMPTY_STRING,\r\n PROJECT_STATUS,\r\n CONVERT_SYSTEMS,\r\n CONVERT_MEASURES,\r\n OrganizationType,\r\n CUSTOM_UNIT_SYSTEM,\r\n USE_PROJECT_DEFAULT_UNIT_SYSTEM,\r\n} from 'app/app.constants';\r\n\r\nimport { getInitials, getAvatar } from 'utils/app.util';\r\nimport tasksMapper from 'features/projects/tasks/tasks.mappers';\r\nimport operationsMappers from 'features/operations/operations.mappers';\r\nimport activitiesMapper from 'features/projects/activities/activities.mappers';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\n\r\nconst toLowerCase = (name = EMPTY_STRING) =>\r\n // Can't use _.startCase because it removes norwegian special characters ('Å' => 'A')\r\n name\r\n .toLowerCase()\r\n .split(' ')\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(' ');\r\n\r\nexport const cheetahJobSourceToString = (cheetahJobSource) =>\r\n ({\r\n [CheetahJobSource.LWI]: 'LWI',\r\n [CheetahJobSource.OTHER]: 'Other',\r\n [CheetahJobSource.CHEETAH]: 'Cheetah',\r\n [CheetahJobSource.WARRIOR]: 'Warrior',\r\n [CheetahJobSource.SM_LOCATION]: 'Winch',\r\n [CheetahJobSource.SIMULATION]: 'Simulation',\r\n [CheetahJobSource.WITSML]: 'Witsml',\r\n }[cheetahJobSource]);\r\n\r\nexport const facilityTypeToString = (facilityType) =>\r\n ({\r\n [FacilityType.FIXED]: 'Fixed',\r\n [FacilityType.MOBILE]: 'Mobile',\r\n }[facilityType]);\r\n\r\nexport const toPermissionIdFromDto = ({ permissionId }) => permissionId;\r\n\r\nexport const toRoleIdFromDto = ({ roleId }) => roleId;\r\n\r\nexport const toServiceIdFromDto = ({ serviceId }) => serviceId;\r\n\r\nexport const winchSpeedToDirection = (speed) =>\r\n speed === 0\r\n ? DIRECTION.STATIONARY\r\n : speed > 0\r\n ? DIRECTION.DOWN\r\n : DIRECTION.UP;\r\n\r\n// Winch/Smartmonitor data\r\nconst winchmonitor = () => {\r\n return {\r\n md: 0,\r\n tension: 0,\r\n speed: 0,\r\n timestamp: null,\r\n direction: DIRECTION.STATIONARY,\r\n };\r\n};\r\n\r\n// Wellbore data\r\nconst wellbore = () => {\r\n return {\r\n id: null,\r\n name: '',\r\n status: null,\r\n waterdepth: null,\r\n tvd: null,\r\n md: null,\r\n well: { name: null },\r\n trajectory: [],\r\n field: { id: null, name: null },\r\n elevation: null,\r\n location: null,\r\n entered: null,\r\n completed: null,\r\n created: null,\r\n modified: null,\r\n limit: {\r\n northEast: null,\r\n tvd: null,\r\n },\r\n };\r\n};\r\n\r\nconst wellboreFromDTO = ({\r\n wellboreName,\r\n wellboreId,\r\n verticalDepth,\r\n measuredDepth,\r\n kellyBushingElevation,\r\n completedDate,\r\n enteredDate,\r\n fieldName,\r\n wellboreDetailId,\r\n wellboreDetail,\r\n trajectoryUpdated,\r\n ...wellbore\r\n}) => {\r\n return Map({\r\n id: wellboreId,\r\n name: wellboreName,\r\n tvd: verticalDepth,\r\n md: measuredDepth,\r\n elevation: kellyBushingElevation,\r\n entered: enteredDate,\r\n completed: completedDate,\r\n wellboreId,\r\n wellboreDetailId,\r\n // if the wellboreDetailId is set, we expect wellboreDetail to be found in the wellboreDetail.reducer\r\n wellboreDetail:\r\n !wellboreDetailId && wellboreDetail\r\n ? WellboreDetailMapper.from(wellboreDetail)\r\n : undefined,\r\n fieldName: fieldName,\r\n trajectoryUpdated: trajectoryUpdated\r\n ? moment(trajectoryUpdated)\r\n : undefined,\r\n ...wellbore,\r\n });\r\n};\r\n\r\n// Project data\r\nconst initialProject = () => {\r\n return {\r\n id: null,\r\n wellbore: wellbore(),\r\n referenceNumber: null,\r\n name: '',\r\n description: '',\r\n departments: [],\r\n status: PROJECT_STATUS.PLAN,\r\n field: { id: null, name: '' },\r\n facility: { id: null, name: '' },\r\n planned: { start: null, end: null },\r\n actual: { start: null, end: null },\r\n progress: 0,\r\n created: null,\r\n modified: null,\r\n lastSeen: null,\r\n estimated: {\r\n start: ['', '', ''],\r\n end: ['', '', ''],\r\n },\r\n units: {},\r\n projectMembers: [],\r\n organization: { id: null, name: '' },\r\n services: EMPTY_SET,\r\n teamUrl: null,\r\n projectRisk: [],\r\n taskRisk: [],\r\n };\r\n};\r\n\r\nconst DepartmentMapper = {\r\n from: ({ departmentId, name }) =>\r\n Map({\r\n id: departmentId,\r\n name: name,\r\n }),\r\n to: ({ id: departmentId, name }) => ({\r\n departmentId,\r\n name,\r\n }),\r\n};\r\n\r\nconst ServiceMapper = {\r\n from: ({ serviceId, ...service }) =>\r\n Map({\r\n serviceId,\r\n id: serviceId,\r\n ...service,\r\n }),\r\n};\r\n\r\nexport const measurementPreferenceFromDto = (measurementPreference) =>\r\n ({\r\n 0: CONVERT_SYSTEMS.METRIC,\r\n 1: CONVERT_SYSTEMS.METRIC,\r\n 2: CONVERT_SYSTEMS.IMPERIAL,\r\n 64: CUSTOM_UNIT_SYSTEM,\r\n 65: USE_PROJECT_DEFAULT_UNIT_SYSTEM,\r\n }[measurementPreference]);\r\n\r\nexport const measurementPreferencesToDto = ({\r\n [CONVERT_MEASURES.LENGTH]: length,\r\n [CONVERT_MEASURES.MASS]: mass,\r\n [CONVERT_MEASURES.PRESSURE]: pressure,\r\n [CONVERT_MEASURES.VOLUME]: volume,\r\n [CONVERT_MEASURES.VOLUME_FLOW_RATE]: volumeFlowRate,\r\n [CONVERT_MEASURES.SPEED]: speed,\r\n [CONVERT_MEASURES.TEMPERATURE]: temperature,\r\n [CONVERT_MEASURES.DEPTH]: depth,\r\n [CONVERT_MEASURES.FORCE]: force,\r\n [CONVERT_MEASURES.BIG_FORCE]: bigForce,\r\n [CONVERT_MEASURES.TOOL_DIAMETER]: toolDiameter,\r\n [CONVERT_MEASURES.TUBULAR_DIAMETER]: tubularDiameter,\r\n [CONVERT_MEASURES.GAS_FLOW_RATE]: gasFlowRate,\r\n [CONVERT_MEASURES.LIQUID_RATE]: liquidRate,\r\n [CONVERT_MEASURES.GAS_DENSITY]: gasDensity,\r\n [CONVERT_MEASURES.LIQUID_DENSITY]: liquidDensity,\r\n [CONVERT_MEASURES.WEIGHT_IN_AIR]: weightInAir,\r\n [CONVERT_MEASURES.STRETCH_COEFFICIENT]: stretchCoefficient,\r\n}) => ({\r\n length: measurementPreferenceToDto(length),\r\n mass: measurementPreferenceToDto(mass),\r\n volume: measurementPreferenceToDto(volume),\r\n volumeFlowRate: measurementPreferenceToDto(volumeFlowRate),\r\n temperature: measurementPreferenceToDto(temperature),\r\n pressure: measurementPreferenceToDto(pressure),\r\n speed: measurementPreferenceToDto(speed),\r\n depth: measurementPreferenceToDto(depth),\r\n force: measurementPreferenceToDto(force),\r\n bigForce: measurementPreferenceToDto(bigForce),\r\n toolDiameter: measurementPreferenceToDto(toolDiameter),\r\n tubularDiameter: measurementPreferenceToDto(tubularDiameter),\r\n gasFlowRate: measurementPreferenceToDto(gasFlowRate),\r\n liquidRate: measurementPreferenceToDto(liquidRate),\r\n gasDensity: measurementPreferenceToDto(gasDensity),\r\n liquidDensity: measurementPreferenceToDto(liquidDensity),\r\n weightInAir: measurementPreferenceToDto(weightInAir),\r\n stretchCoefficient: measurementPreferenceToDto(stretchCoefficient),\r\n});\r\n\r\nexport const toMeasurementPreferencesFromDto = (measurementPreference) => {\r\n const {\r\n mass,\r\n speed,\r\n depth,\r\n force,\r\n length,\r\n volume,\r\n pressure,\r\n bigForce,\r\n temperature,\r\n toolDiameter,\r\n volumeFlowRate,\r\n tubularDiameter,\r\n gasFlowRate,\r\n liquidRate,\r\n gasDensity,\r\n liquidDensity,\r\n weightInAir,\r\n stretchCoefficient,\r\n } = measurementPreference;\r\n\r\n return {\r\n [CONVERT_MEASURES.LENGTH]: measurementPreferenceFromDto(length),\r\n [CONVERT_MEASURES.MASS]: measurementPreferenceFromDto(mass),\r\n [CONVERT_MEASURES.PRESSURE]: measurementPreferenceFromDto(pressure),\r\n [CONVERT_MEASURES.VOLUME]: measurementPreferenceFromDto(volume),\r\n [CONVERT_MEASURES.VOLUME_FLOW_RATE]:\r\n measurementPreferenceFromDto(volumeFlowRate),\r\n [CONVERT_MEASURES.SPEED]: measurementPreferenceFromDto(speed),\r\n [CONVERT_MEASURES.TEMPERATURE]: measurementPreferenceFromDto(temperature),\r\n [CONVERT_MEASURES.DEPTH]: measurementPreferenceFromDto(depth),\r\n [CONVERT_MEASURES.FORCE]: measurementPreferenceFromDto(force),\r\n [CONVERT_MEASURES.BIG_FORCE]: measurementPreferenceFromDto(bigForce),\r\n [CONVERT_MEASURES.TOOL_DIAMETER]:\r\n measurementPreferenceFromDto(toolDiameter),\r\n [CONVERT_MEASURES.TUBULAR_DIAMETER]:\r\n measurementPreferenceFromDto(tubularDiameter),\r\n [CONVERT_MEASURES.GAS_FLOW_RATE]: measurementPreferenceFromDto(gasFlowRate),\r\n [CONVERT_MEASURES.LIQUID_RATE]: measurementPreferenceFromDto(liquidRate),\r\n [CONVERT_MEASURES.GAS_DENSITY]: measurementPreferenceFromDto(gasDensity),\r\n [CONVERT_MEASURES.LIQUID_DENSITY]:\r\n measurementPreferenceFromDto(liquidDensity),\r\n [CONVERT_MEASURES.WEIGHT_IN_AIR]: measurementPreferenceFromDto(weightInAir),\r\n [CONVERT_MEASURES.STRETCH_COEFFICIENT]:\r\n measurementPreferenceFromDto(stretchCoefficient),\r\n };\r\n};\r\n\r\nexport const measurementPreferenceToDto = (measurementSystem) =>\r\n ({\r\n [CONVERT_SYSTEMS.METRIC]: 0,\r\n [CONVERT_SYSTEMS.METRIC]: 1,\r\n [CONVERT_SYSTEMS.IMPERIAL]: 2,\r\n [CUSTOM_UNIT_SYSTEM]: 64,\r\n [USE_PROJECT_DEFAULT_UNIT_SYSTEM]: 65,\r\n }[measurementSystem]);\r\n\r\nconst initialFluids = () => fromJS({});\r\nconst mapFunctionProjectFluids = ({ projectFluidId, ...rest }) => ({\r\n ...{ fluidId: projectFluidId },\r\n ...rest,\r\n});\r\nconst mapFunctionWellboreFluids = ({ wellboreFluidId, ...rest }) => ({\r\n ...{ fluidId: wellboreFluidId },\r\n ...rest,\r\n});\r\nconst mapFunctionTaskFluids = ({ dataAcquisitionFluidId, ...rest }) => ({\r\n ...{ fluidId: dataAcquisitionFluidId },\r\n ...rest,\r\n});\r\nconst baseFluidsFromDtoFn = (fluidsDto, mapToCorrectShapeFn) => {\r\n const fluidsInCorrectShape = fluidsDto.map(mapToCorrectShapeFn);\r\n return fluidsInCorrectShape.reduce((acc, curr) => {\r\n return acc.set(`${curr.fluidId}`, fromJS(curr));\r\n }, Map({}));\r\n};\r\n\r\nconst projectFluidsFromDTO = (fluidsDto) =>\r\n baseFluidsFromDtoFn(fluidsDto, mapFunctionProjectFluids);\r\nconst wellboreFluidsFromDTO = (fluidsDto) =>\r\n baseFluidsFromDtoFn(fluidsDto, mapFunctionWellboreFluids);\r\nconst taskFluidsFromDTO = (fluidsDto) =>\r\n baseFluidsFromDtoFn(fluidsDto, mapFunctionTaskFluids);\r\n\r\nconst projectFromDTO = ({\r\n created,\r\n departments,\r\n endTime,\r\n estimatedEnd,\r\n estimatedStart,\r\n lastSeen,\r\n modified,\r\n percentComplete,\r\n plannedEndDate,\r\n plannedStartDate,\r\n projectId,\r\n taskServices,\r\n startTime,\r\n duration,\r\n measurementPreference,\r\n measurementSystem = CONVERT_SYSTEMS.METRIC.id,\r\n owners,\r\n wellboreLocation,\r\n ...project\r\n}) => {\r\n const parseEstimatedDate = (estimated = '--') =>\r\n (estimated.length ? estimated : '--').split('-').reduce((sum, curr) => {\r\n var converted = parseInt(curr, 10);\r\n return sum.push(isNaN(converted) ? '' : converted);\r\n }, List());\r\n\r\n return fromJS({\r\n id: projectId,\r\n startTime: startTime ? moment(startTime) : null,\r\n endTime: endTime ? moment(endTime) : null,\r\n departments: List(departments).map(DepartmentMapper.from),\r\n estimatedStart: parseEstimatedDate(estimatedStart),\r\n estimatedEnd: parseEstimatedDate(estimatedEnd),\r\n duration: duration ? moment.duration(duration) : undefined,\r\n planned: {\r\n start: plannedStartDate,\r\n end: plannedEndDate,\r\n },\r\n created: created ? moment(created) : undefined,\r\n modified: modified ? moment(modified) : undefined,\r\n lastSeen: lastSeen ? moment(lastSeen) : undefined,\r\n progress: percentComplete,\r\n unit: measurementPreferenceFromDto(measurementSystem),\r\n units: measurementPreference\r\n ? toMeasurementPreferencesFromDto(measurementPreference)\r\n : Map(),\r\n location: wellboreLocation,\r\n owners: List(owners).map(UserMapper.from),\r\n taskServices: fromJS(taskServices),\r\n projectId,\r\n ...project,\r\n });\r\n};\r\n\r\n// User\r\nconst initialUser = Map({\r\n id: null,\r\n account: null,\r\n name: null,\r\n initials: null,\r\n avatar: null,\r\n title: null,\r\n mail: null,\r\n mobilePhone: null,\r\n organization: {\r\n name: null,\r\n },\r\n role: {\r\n roleId: null,\r\n },\r\n permissions: EMPTY_SET,\r\n roles: EMPTY_SET,\r\n});\r\n\r\nconst userToDto = ({ id, unit }) => ({\r\n userId: id,\r\n measurementSystem: measurementPreferenceToDto(unit),\r\n});\r\n\r\nconst userFromDTO = ({\r\n roles,\r\n userId,\r\n avatar,\r\n jobTitle,\r\n fullName,\r\n permissions,\r\n measurementSystem,\r\n projectPermissions,\r\n ...user\r\n}) => {\r\n return Map({\r\n userId,\r\n id: userId,\r\n name: fullName,\r\n title: jobTitle,\r\n avatar: getAvatar(avatar),\r\n unit: measurementPreferenceFromDto(measurementSystem),\r\n projectPermissions: Set(projectPermissions).map(toPermissionIdFromDto),\r\n isMainVendor: user.organizationType === OrganizationType.MAIN_VENDOR,\r\n roles: roles ? Set(roles).map(toRoleIdFromDto) : initialUser.get('roles'),\r\n permissions: permissions\r\n ? Set(permissions).map(toPermissionIdFromDto)\r\n : initialUser.get('permissions'),\r\n ...user,\r\n });\r\n};\r\n\r\nconst toProjectMember = ({ id }) => {\r\n return Map({\r\n projectMemberId: 0,\r\n userId: id,\r\n });\r\n};\r\n\r\n// UserRole\r\nconst userRoleToDto = (roleId, userId) => {\r\n return {\r\n roleId,\r\n userId,\r\n };\r\n};\r\n\r\n// Event\r\nconst event = () => {\r\n return Map({\r\n id: null,\r\n text: '',\r\n author: { id: null },\r\n modified: null,\r\n created: null,\r\n });\r\n};\r\n\r\nconst eventFromDTO = ({\r\n eventId,\r\n text,\r\n userId,\r\n userFullName,\r\n userAvatar,\r\n modified,\r\n created,\r\n}) => {\r\n return Map({\r\n type: eventId,\r\n id: eventId,\r\n text: text,\r\n author: {\r\n id: userId,\r\n name: userFullName,\r\n initials: getInitials(userFullName),\r\n avatar: getAvatar(userAvatar),\r\n },\r\n modified: moment(modified),\r\n created: moment(created),\r\n });\r\n};\r\n\r\n// Progress\r\nconst progress = () => {\r\n return fromJS({\r\n id: null,\r\n progress: 0,\r\n total: {\r\n tasks: 0,\r\n activities: 0,\r\n },\r\n previous: {},\r\n current: {\r\n taskNumber: 0,\r\n activityNumber: null,\r\n },\r\n next: {},\r\n });\r\n};\r\n\r\nconst progressFromDTO = ({\r\n canGoBack,\r\n currentTaskPercentComplete,\r\n previousActivity,\r\n projectId,\r\n percentComplete,\r\n currentTaskNumber,\r\n taskCount,\r\n currentActivityNumber,\r\n activityCount,\r\n currentTask,\r\n currentActivity,\r\n nextActivity,\r\n nextTask,\r\n status,\r\n simulationsRunCount,\r\n activeTask,\r\n ...rest\r\n}) => {\r\n return fromJS({\r\n id: projectId, // TODO Remove\r\n projectId: projectId,\r\n status: status,\r\n simulationsRunCount,\r\n progress: percentComplete,\r\n currentTaskProgress: currentTaskPercentComplete,\r\n total: {\r\n tasks: taskCount,\r\n activities: activityCount,\r\n },\r\n previous: {\r\n canGoBack,\r\n activity: isNil(previousActivity)\r\n ? undefined\r\n : activitiesMapper.Activity.from(previousActivity),\r\n },\r\n current: {\r\n taskNumber: currentTaskNumber,\r\n task: isNil(currentTask) ? undefined : tasksMapper.Task.from(currentTask),\r\n activityNumber: currentActivityNumber,\r\n activity: isNil(currentActivity)\r\n ? undefined\r\n : activitiesMapper.Activity.from(currentActivity),\r\n },\r\n next: {\r\n activity: isNil(nextActivity)\r\n ? undefined\r\n : activitiesMapper.Activity.from(nextActivity),\r\n task: isNil(nextTask) ? undefined : tasksMapper.Task.from(nextTask),\r\n },\r\n activeTask: isNil(activeTask)\r\n ? undefined\r\n : tasksMapper.Task.from(activeTask),\r\n ...rest,\r\n });\r\n};\r\n\r\nconst organization = () =>\r\n Map({\r\n id: null,\r\n name: '',\r\n type: null,\r\n });\r\n\r\nconst organizationFromDTO = ({\r\n organizationId,\r\n displayName,\r\n ...organization\r\n}) =>\r\n Map({\r\n id: organizationId,\r\n name: displayName,\r\n ...organization,\r\n });\r\n\r\nconst FieldMapper = {\r\n from: ({ fieldId, name, projects, wells, ...rest }) =>\r\n Map({\r\n fieldId,\r\n id: fieldId, // to avoid too many breaking changes\r\n // Can't use _.startCase because it removes norwegian special characters ('Å' => 'A')\r\n name: toLowerCase(name),\r\n projects: List(projects).map(mappers.Project.from),\r\n wells: List(wells).map(mappers.Wellbore.from),\r\n ...rest,\r\n }),\r\n};\r\n\r\nconst facilityFromDTO = ({ id, name, ...facility }) => {\r\n return Map({\r\n id: id,\r\n name: name,\r\n value: id,\r\n ...facility,\r\n });\r\n};\r\n\r\nconst operatorFromDTO = ({ facilityId, name, ...operator }) => {\r\n return Map({\r\n id: facilityId,\r\n name: name,\r\n ...operator,\r\n });\r\n};\r\n\r\n// Sequence\r\n\r\nconst sequence = ({ itemId, oldSequenceNumber, newSequenceNumber }) => {\r\n return {\r\n itemId: itemId,\r\n oldSequenceNumber: oldSequenceNumber,\r\n newSequenceNumber: newSequenceNumber,\r\n };\r\n};\r\n\r\nconst sequenceToDto = (itemId, { oldSequenceNumber, newSequenceNumber }) => {\r\n return {\r\n itemId: itemId,\r\n oldSequenceNumber: oldSequenceNumber,\r\n newSequenceNumber: newSequenceNumber,\r\n };\r\n};\r\n\r\nconst fileCategoryFromDTO = ({ id, name }) => {\r\n return Map({\r\n id: id,\r\n name: name,\r\n value: id,\r\n });\r\n};\r\n\r\nconst initialMetaFromFilename = ({ name }, category) => {\r\n const parts = name.split('.');\r\n\r\n return Map({\r\n name: initial(parts).join('.'),\r\n category: category,\r\n extension: `.${last(parts)}`,\r\n });\r\n};\r\n\r\nconst userPreferenceFromDto = ({\r\n receiveDailyDigestEmail,\r\n userPreferenceId,\r\n}) => ({\r\n id: userPreferenceId,\r\n receiveDailyDigestEmail: receiveDailyDigestEmail,\r\n});\r\n\r\nconst userPreferenceToDto = ({ receiveDailyDigestEmail, id }) => ({\r\n userPreferenceId: id,\r\n receiveDailyDigestEmail: receiveDailyDigestEmail,\r\n});\r\n\r\nconst taskTypeFromDto = ({ id, name }) =>\r\n Map({\r\n id: id,\r\n name: name,\r\n value: id,\r\n });\r\n\r\nconst trajectoryPointFromDto = ({ ew, md, ns, vd, ...trajectoryPoint }) =>\r\n Map({\r\n ...trajectoryPoint,\r\n measuredDepth: md,\r\n verticalDepth: vd,\r\n northSouth: ns,\r\n eastWest: ew,\r\n });\r\n\r\nconst trajectoryFromDto = ({\r\n trajectoryPoints,\r\n verticalDepth,\r\n measuredDepth,\r\n maximumNorthEast,\r\n maximumDogLeg,\r\n maximumDogLegDepth,\r\n maximumInclination,\r\n maximumInclinationDepth,\r\n imported,\r\n ...trajectory\r\n}) =>\r\n Map({\r\n trajectoryPoints: trajectoryPoints\r\n ? List(trajectoryPoints.map(trajectoryPointFromDto))\r\n : EMPTY_LIST,\r\n verticalDepth,\r\n measuredDepth,\r\n maximumNorthEast,\r\n maximumDogLeg,\r\n maximumDogLegDepth,\r\n maximumInclination,\r\n maximumInclinationDepth,\r\n imported: imported ? moment(imported) : undefined,\r\n ...trajectory,\r\n });\r\n\r\nconst WellboreDetailMapper = {\r\n from: ({\r\n services,\r\n hostileFluids,\r\n additionalParameters,\r\n ...wellboreDetail\r\n }) =>\r\n Map({\r\n services: services ? List(services).map(Map) : EMPTY_LIST,\r\n hostileFluids: hostileFluids ? Map(hostileFluids) : EMPTY_MAP,\r\n additionalParameters: additionalParameters\r\n ? OrderedMap(additionalParameters)\r\n : EMPTY_MAP,\r\n ...wellboreDetail,\r\n }),\r\n};\r\n\r\nconst PageParamsMapper = {\r\n from: ({ ...pageParams }) => Map({ ...pageParams }),\r\n};\r\n\r\nconst ObjectiveMapper = {\r\n from: ({ ...objective }) =>\r\n Map({\r\n ...objective,\r\n }),\r\n};\r\n\r\nconst UserMapper = {\r\n initial: initialUser,\r\n from: userFromDTO,\r\n to: userToDto,\r\n toProjectMember,\r\n};\r\n\r\nconst CheetahJobCurveMapper = {\r\n from: ({ ...cheetahJobCurve }) =>\r\n Map({\r\n ...cheetahJobCurve,\r\n }),\r\n};\r\n\r\nconst ProjectDashboardMapper = {\r\n from: ({ ...projectDashboard }) =>\r\n Map({\r\n ...projectDashboard,\r\n }),\r\n};\r\n\r\nconst equipmentAssetFromDTO = ({\r\n equipmentId,\r\n name,\r\n description,\r\n m3ItemNumber,\r\n m3ToolAssets,\r\n}) => {\r\n return Map({\r\n equipmentId,\r\n name,\r\n m3ItemNumber,\r\n description,\r\n m3ToolAssets: List(m3ToolAssets).map((item) =>\r\n Map({\r\n decodedSerialNumber: item.escapedSerialNumber,\r\n serialNumber: item.serialNumber,\r\n status: item.status,\r\n location: item.location,\r\n warehouse: item.warehouse,\r\n installation: item.installation,\r\n itemNumber: item.itemNumber,\r\n lastTransaction: item.lastTransaction\r\n ? moment(item.lastTransaction)\r\n : undefined,\r\n customerAddress: item.customerAddress\r\n ? Map({ name: item.customerAddress.name })\r\n : {},\r\n }),\r\n ),\r\n });\r\n};\r\n\r\nconst mappers = {\r\n Document: {\r\n Meta: {\r\n initial: initialMetaFromFilename,\r\n },\r\n },\r\n User: UserMapper,\r\n Wellbore: {\r\n initial: () => Map(wellbore()),\r\n from: wellboreFromDTO,\r\n },\r\n Project: {\r\n initial: initialProject,\r\n from: projectFromDTO,\r\n },\r\n WellboreFluids: {\r\n from: wellboreFluidsFromDTO,\r\n },\r\n ProjectFluids: {\r\n initial: initialFluids,\r\n from: projectFluidsFromDTO,\r\n },\r\n TaskFluids: {\r\n from: taskFluidsFromDTO,\r\n },\r\n Event: {\r\n initial: event,\r\n from: eventFromDTO,\r\n },\r\n Progress: {\r\n initial: progress,\r\n from: progressFromDTO,\r\n },\r\n Organization: {\r\n initial: organization,\r\n from: organizationFromDTO,\r\n },\r\n Field: FieldMapper,\r\n Facility: {\r\n from: facilityFromDTO,\r\n },\r\n Operator: {\r\n from: operatorFromDTO,\r\n },\r\n WinchMonitor: {\r\n initial: winchmonitor,\r\n },\r\n UserRole: {\r\n to: userRoleToDto,\r\n },\r\n Sequence: {\r\n from: sequence,\r\n to: sequenceToDto,\r\n },\r\n Department: DepartmentMapper,\r\n Service: ServiceMapper,\r\n WellboreDetail: WellboreDetailMapper,\r\n MeasurementPreference: {\r\n from: measurementPreferenceFromDto,\r\n },\r\n MeasurementPreferences: {\r\n from: toMeasurementPreferencesFromDto,\r\n },\r\n FileCategory: {\r\n from: fileCategoryFromDTO,\r\n },\r\n UserPreference: {\r\n from: userPreferenceFromDto,\r\n to: userPreferenceToDto,\r\n },\r\n TaskType: {\r\n from: taskTypeFromDto,\r\n },\r\n Trajectory: {\r\n from: trajectoryFromDto,\r\n },\r\n TrajectoryPoint: {\r\n from: trajectoryPointFromDto,\r\n },\r\n equipmentAsset: {\r\n from: equipmentAssetFromDTO,\r\n },\r\n Objective: ObjectiveMapper,\r\n ProjectDashboard: ProjectDashboardMapper,\r\n CheetahJobCurve: CheetahJobCurveMapper,\r\n PageParams: PageParamsMapper,\r\n ...operationsMappers,\r\n ...simulationMappers,\r\n};\r\n\r\nexport default mappers;\r\n","import { isMobile } from 'react-device-detect';\r\n\r\nimport createAuthService from 'altus-auth';\r\n\r\nimport config from 'infrastructure/config';\r\n\r\nconfig.redirectUrl = isMobile\r\n ? `${config.redirectUrl}/operations`\r\n : `${config.redirectUrl}/static/blank.html`;\r\n\r\nconst AuthSingleton = (() => {\r\n // Instance stores a reference to the Singleton\r\n let instance;\r\n\r\n const createService = async () => {\r\n return await createAuthService(config, (msalCb, response) => {\r\n if (response) {\r\n msalCb.setActiveAccount(response.account);\r\n }\r\n });\r\n };\r\n\r\n async function init() {\r\n return await createService();\r\n }\r\n\r\n return {\r\n // Get the Singleton instance if one exists\r\n // or create one if it doesn't\r\n getMsalInstance: async () => {\r\n if (!instance) {\r\n instance = await init();\r\n }\r\n\r\n return instance;\r\n },\r\n };\r\n})();\r\n\r\nexport default AuthSingleton;\r\n","import Agent from 'altus-agent';\r\n\r\nimport config from 'infrastructure/config';\r\nimport authSingleton from 'services/auth.service';\r\n\r\nconst initialize = async () => {\r\n const msalInstance = await authSingleton.getMsalInstance();\r\n return new Agent(config, msalInstance);\r\n};\r\n\r\nconst httpAgent = {\r\n throttledRefreshToken: async () => {\r\n const altusAgent = await initialize();\r\n return altusAgent.throttledRefreshToken;\r\n },\r\n delete: async (url) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.delete(url);\r\n },\r\n get: async (url, query) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.get(url, query);\r\n },\r\n post: async (url, body) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.post(url, body);\r\n },\r\n put: async (url, body) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.put(url, body);\r\n },\r\n file: {\r\n post: async (url, file, fields) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.file.post(url, file, fields);\r\n },\r\n get: async (url, query) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.file.get(url, query);\r\n },\r\n },\r\n files: {\r\n post: async (url, files, fields) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.files.post(url, files, fields);\r\n },\r\n },\r\n image: {\r\n get: async (url) => {\r\n const altusAgent = await initialize();\r\n return await altusAgent.image.get(url);\r\n },\r\n },\r\n};\r\n\r\nexport default httpAgent;\r\n","import mappers from 'mappers';\r\nimport Agent from 'infrastructure/agent';\r\nimport toolstringMappers from 'features/projects/tasks/task/toolstring/toolstring.mappers';\r\nimport toolstringMapper from 'features/projects/tasks/task/toolstring/toolstring.mappers';\r\n\r\n// M3\r\nconst refreshToolsWithM3Items = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/toolstrings/refreshM3Data`);\r\n\r\nconst refreshAllToolsWithM3Items = () => Agent.get('/tool/refresh');\r\n\r\n// Tool images\r\nconst getToolImages = () => Agent.get('/tool/images');\r\n\r\nconst uploadToolImage = (file, meta = {}) =>\r\n Agent.file.post('/tool/image/upload', file, meta);\r\n\r\nconst associateImageToTool = (toolId, imageId) =>\r\n Agent.post(`/tool/${toolId}/image/${imageId}`);\r\n\r\nconst disassociateImageFromTool = (toolId, imageId) =>\r\n Agent.delete(`/tool/${toolId}/image/${imageId}`);\r\n\r\nconst deleteToolImage = (imageId) => Agent.delete(`/tool/image/${imageId}`);\r\n\r\n// Tool import\r\nconst importTools = (file, meta = {}) =>\r\n Agent.file.post('/tool/import', file, meta);\r\n\r\n// Search\r\nconst searchTools = (filters) => {\r\n if (filters?.projectId) {\r\n return Agent.post(`/tool/search/${filters.projectId}`, filters);\r\n }\r\n return Agent.post('/tool/search', filters);\r\n};\r\n\r\nconst searchBhas = (filters) => Agent.post('/template/search', filters);\r\n\r\nconst saveBhaFromClient = (bhaTemplateFromClient) =>\r\n Agent.post('/template/savebhatemplate', bhaTemplateFromClient);\r\n\r\nconst createTool = (tool) => Agent.post('/tool/create', tool);\r\n\r\nconst getAllToolGroups = () =>\r\n Agent.get('/search/filter/valueset/toolgroup/all');\r\n\r\nconst getToolSuppliers = () =>\r\n Agent.get('/search/filter/valueset/toolsuppliers');\r\n\r\nconst getToolGroupsByCategory = (categoryId) =>\r\n Agent.get(`/search/filter/valueset/toolgroup/category/${categoryId}`);\r\n\r\nconst getToolConnectors = () =>\r\n Agent.get('/search/filter/valueset/toolconnectors');\r\n\r\nconst getToolTopConnectors = () =>\r\n Agent.get('/search/filter/valueset/tooltopconnector');\r\n\r\nconst getToolBottomConnectors = () =>\r\n Agent.get('/search/filter/valueset/toolbottomconnector');\r\n\r\nconst getCables = (filters) =>\r\n Agent.get('/search/filter/valueset/cable', filters);\r\n\r\nconst getCable = (cableId) => Agent.get(`/cable/${cableId}`);\r\n\r\nconst getCablesByProject = (projectId) =>\r\n Agent.get(`/search/filter/valueset/cable/${projectId}`);\r\n\r\n// Search\r\nconst searchCables = (filters) => Agent.post('/cable/search', filters);\r\n\r\nconst getTool = (toolId) => Agent.get(`/tool/gettool/${toolId}`);\r\n\r\nconst getAllToolStrings = () => Agent.get('/template/toolstrings');\r\n\r\nconst updateTool = (tool) => Agent.put('/tool/update', tool);\r\n\r\nconst getToolProjectHistoryByToolId = (toolId) =>\r\n Agent.get(`/tool/projecthistory/${toolId}`);\r\n\r\nconst getAllSurfaceEquipment = () => Agent.get('/tool/surfaceequipment');\r\n\r\nconst saveToolAssembly = (toolAssembly) =>\r\n Agent.post('/tool/savetoolassembly', toolAssembly);\r\n\r\nconst getToolAssembly = (toolId) =>\r\n Agent.get(`/tool/gettoolassembly/${toolId}`);\r\n\r\nconst updateToolAssembly = (toolAssembly) =>\r\n Agent.post('/tool/updatetoolassembly', toolAssembly);\r\n\r\nconst getTool3DObjects = () => Agent.get('/tool/tool3dobjects');\r\n\r\nconst uploadTool3DObject = (file, meta = {}) =>\r\n Agent.file.post('/tool/tool3dobject/upload', file, meta);\r\n\r\nconst associate3DObjectToTool = (toolId, tool3DObjectId) =>\r\n Agent.put(`/tool/${toolId}/tool3dobject/${tool3DObjectId}`);\r\n\r\nconst disassociate3DObjectFromTool = (toolId, tool3DObjectId) =>\r\n Agent.delete(`/tool/${toolId}/tool3dobject/${tool3DObjectId}`);\r\n\r\nconst deleteTool3DObject = (tool3DObjectId) =>\r\n Agent.delete(`/tool/tool3dobject/${tool3DObjectId}`);\r\n\r\nconst getTemplate = (templateId) =>\r\n Agent.get(`/template/toolstring/${templateId}`);\r\n\r\nconst getTemplateSections = (templateId) =>\r\n Agent.get(`/template/${templateId}/sections`);\r\n\r\nconst createTemplateItem = (templateId, tool) => {\r\n Agent.post(\r\n `/template/${templateId}/items`,\r\n toolstringMappers.ToolstringItem.toCreate(tool),\r\n );\r\n};\r\n\r\nconst deleteTemplateItem = (toolStringId, toolId) =>\r\n Agent.delete(`/template/toolstring/${toolStringId}/items/${toolId}`);\r\n\r\nconst deleteTemplateToolAssemblyTool = (toolStringId, toolAssemblyToolId) =>\r\n Agent.delete(\r\n `/template/toolstring/${toolStringId}/toolstringassembly/${toolAssemblyToolId}`,\r\n );\r\n\r\nconst updateTemplate = (toolStringId, toolstring) =>\r\n Agent.put(\r\n `/template/toolstring/${toolStringId}/update`,\r\n toolstringMapper.Toolstring.to(toolstring),\r\n );\r\n\r\nconst duplicateTemplateItem = (toolStringId, tool) =>\r\n Agent.post(\r\n `/template/toolstring/${toolStringId}/items/copy`,\r\n toolstringMapper.ToolstringItem.toDuplicate(tool),\r\n );\r\n\r\nconst updateTemplateItemSequence = (toolStringId, toolstringItemId, indices) =>\r\n Agent.post(\r\n `/template/toolstring/${toolStringId}/items/${toolstringItemId}/sequence`,\r\n mappers.Sequence.to(toolstringItemId, indices),\r\n );\r\n\r\nconst updateTemplateAssemblyToolSequence = (\r\n toolstringId,\r\n toolAssemblyToolId,\r\n sequences,\r\n) =>\r\n Agent.post(\r\n `/template/toolstring/${toolstringId}/assembly/tool/${toolAssemblyToolId}/sequence`,\r\n mappers.Sequence.to(toolAssemblyToolId, sequences),\r\n );\r\n\r\nconst editToolImage = (values, imageId) =>\r\n Agent.post(`/tool/image/${imageId}/scale/`, values);\r\n\r\nconst toolService = {\r\n getTool,\r\n getCables,\r\n createTool,\r\n updateTool,\r\n searchTools,\r\n importTools,\r\n getToolImages,\r\n deleteToolImage,\r\n uploadToolImage,\r\n getAllToolGroups,\r\n getToolSuppliers,\r\n getToolConnectors,\r\n getToolTopConnectors,\r\n associateImageToTool,\r\n getToolGroupsByCategory,\r\n getToolBottomConnectors,\r\n refreshToolsWithM3Items,\r\n disassociateImageFromTool,\r\n refreshAllToolsWithM3Items,\r\n getAllToolStrings,\r\n searchBhas,\r\n getToolProjectHistoryByToolId,\r\n getAllSurfaceEquipment,\r\n saveToolAssembly,\r\n saveBhaFromClient,\r\n getTool3DObjects,\r\n uploadTool3DObject,\r\n associate3DObjectToTool,\r\n disassociate3DObjectFromTool,\r\n deleteTool3DObject,\r\n getToolAssembly,\r\n updateToolAssembly,\r\n getCable,\r\n getCablesByProject,\r\n getTemplate,\r\n getTemplateSections,\r\n createTemplateItem,\r\n deleteTemplateItem,\r\n updateTemplate,\r\n duplicateTemplateItem,\r\n updateTemplateItemSequence,\r\n updateTemplateAssemblyToolSequence,\r\n editToolImage,\r\n deleteTemplateToolAssemblyTool,\r\n searchCables,\r\n};\r\n\r\nexport default toolService;\r\n","import { APP_ACTIONS, NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { TOOL_ACTIONS } from 'features/projects/tool/tool.constants';\r\nimport toolService from 'services/tool.service';\r\n\r\nexport const refreshToolsUsingM3Items = (projectId, taskId) => (dispatch) => {\r\n const payload = () => toolService.refreshToolsWithM3Items(projectId, taskId);\r\n\r\n dispatch({\r\n payload,\r\n type: TOOL_ACTIONS.UPDATE_TOOLS_FROM_M3_ITEMS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Refreshing...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Tools on project updated with data from M3',\r\n },\r\n });\r\n};\r\n\r\nexport const uploadToolImage = () => (dispatch) => (files) => {\r\n return toolService\r\n .uploadToolImage(files[0])\r\n .then((payload) => {\r\n dispatch({\r\n type: TOOL_ACTIONS.UPLOAD_TOOL_IMAGE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Uploading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The image was successfully uploaded',\r\n },\r\n payload,\r\n });\r\n dispatch(requestToolImages());\r\n return payload;\r\n })\r\n .catch(() =>\r\n dispatch({\r\n hideable: true,\r\n type: APP_ACTIONS.ADD_NOTIFICATION,\r\n notification: {\r\n message:\r\n 'Failed to upload image. Make sure the image format (PNG) is valid.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n },\r\n }),\r\n );\r\n};\r\n\r\nexport const deleteToolImage = (toolImageId) => (dispatch) => {\r\n dispatch({\r\n toolImageId,\r\n type: TOOL_ACTIONS.DELETE_TOOL_IMAGE,\r\n confirmationDialog: {\r\n description: 'Are you sure you want to delete this image?',\r\n title: 'Delete tool image',\r\n confirmButtonText: 'Delete',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting image...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Image successfully deleted!',\r\n },\r\n payload: () => {\r\n return toolService.deleteToolImage(toolImageId).then(() => {\r\n dispatch(requestToolImages());\r\n });\r\n },\r\n });\r\n};\r\n\r\nexport const importToolsFromFile = () => (dispatch) => (files) => {\r\n return toolService\r\n .importTools(files[0])\r\n .then((payload) => {\r\n dispatch({\r\n type: TOOL_ACTIONS.IMPORT_TOOLS_FROM_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Uploading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The file was successfully uploaded',\r\n },\r\n payload,\r\n });\r\n return payload;\r\n })\r\n .catch(() =>\r\n dispatch({\r\n hideable: true,\r\n type: APP_ACTIONS.ADD_NOTIFICATION,\r\n notification: {\r\n message:\r\n 'Failed to upload file. Make sure the file format (xlsx or xls) and data is valid.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n },\r\n }),\r\n );\r\n};\r\n\r\nexport const requestToolImages = () => ({\r\n type: TOOL_ACTIONS.REQUEST_TOOL_IMAGES,\r\n});\r\n\r\nexport const receiveToolImages = (toolImages) => ({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_IMAGES,\r\n payload: toolImages,\r\n});\r\n\r\nexport const requestToolsSearch = (filters) => ({\r\n filters,\r\n type: TOOL_ACTIONS.REQUEST_TOOLS_SEARCH,\r\n});\r\n\r\nexport const receiveToolsSearch = (tools) => ({\r\n type: TOOL_ACTIONS.RECEIVE_TOOLS_SEARCH,\r\n payload: tools,\r\n});\r\n\r\nexport const requestToolGroupsByCategory = (categoryId) => ({\r\n categoryId,\r\n type: TOOL_ACTIONS.REQUEST_TOOL_GROUPS_BY_CATEGORY,\r\n});\r\n\r\nexport const requestToolGroups = () => ({\r\n type: TOOL_ACTIONS.REQUEST_TOOL_GROUPS,\r\n});\r\n\r\nexport const receiveToolGroups = (toolGroups) => ({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_GROUPS,\r\n payload: toolGroups,\r\n});\r\n\r\nexport const requestToolConnectors = () => ({\r\n type: TOOL_ACTIONS.REQUEST_TOOL_CONNECTORS,\r\n});\r\n\r\nexport const receiveToolConnectors = (toolConnectors) => ({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_CONNECTORS,\r\n payload: toolConnectors,\r\n});\r\n\r\nexport const requestToolTopConnectors = () => ({\r\n type: TOOL_ACTIONS.REQUEST_TOOL_TOP_CONNECTORS,\r\n});\r\n\r\nexport const receiveToolTopConnectors = (toolTopConnectors) => ({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_TOP_CONNECTORS,\r\n payload: toolTopConnectors,\r\n});\r\n\r\nexport const requestToolBottomConnectors = () => ({\r\n type: TOOL_ACTIONS.REQUEST_TOOL_BOTTOM_CONNECTORS,\r\n});\r\n\r\nexport const receiveToolBottomConnectors = (toolBottomConnectors) => ({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_BOTTOM_CONNECTORS,\r\n payload: toolBottomConnectors,\r\n});\r\n\r\nexport const requestToolSuppliers = () => ({\r\n type: TOOL_ACTIONS.REQUEST_TOOL_SUPPLIERS,\r\n});\r\n\r\nexport const receiveToolSuppliers = (toolSuppliers) => ({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_SUPPLIERS,\r\n payload: toolSuppliers,\r\n});\r\n\r\nexport const toolPickerModalOnLoad = () => ({\r\n type: TOOL_ACTIONS.TOOL_PICKER_MODAL_ON_LOAD,\r\n});\r\n\r\nexport const requestRefreshToolsWithM3 = () => ({\r\n type: TOOL_ACTIONS.REQUEST_REFRESH_ALL_TOOLS_WITH_M3,\r\n confirmationDialog: {\r\n title: 'Refresh Tools with M3',\r\n confirmButtonText: 'Refresh',\r\n description:\r\n 'Are you sure you want to Refresh all tools with M3? This operation might take some time.',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Refreshing tools with M3...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tools successfully refreshed.',\r\n },\r\n});\r\n\r\nexport const requestCables = () => ({\r\n type: TOOL_ACTIONS.REQUEST_CABLES,\r\n});\r\n\r\nexport const requestCablesByProject = (projectId) => ({\r\n type: TOOL_ACTIONS.REQUEST_CABLES_BY_PROJECT,\r\n payload: projectId,\r\n});\r\n\r\nexport const receiveCables = (cables) => ({\r\n type: TOOL_ACTIONS.RECEIVE_CABLES,\r\n payload: cables,\r\n});\r\n\r\nexport const loadToolProjectHistory = (toolId) => (dispatch) => {\r\n dispatch({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_PROJECT_HISTORY,\r\n payload: () =>\r\n Promise.all([toolService.getToolProjectHistoryByToolId(toolId)]),\r\n });\r\n};\r\n","import { put, call } from 'redux-saga/effects';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { asyncStart, asyncEnd, asyncEndError } from 'altus-datastate';\r\n\r\nimport { IN_DEV } from 'app/app.constants';\r\n\r\n/**\r\n * Calls the saga taking care of dispatching the corresponding ASYNC_START\r\n * and ASYNC_END actions used by the altus-datastate library.\r\n *\r\n * Equivalent work is done by the promiseMiddleware in altus-redux-middlewares\r\n * when using redux-thunk.\r\n *\r\n * @param {Generator} saga The saga to execute\r\n * @param {Array} args Arguments to be passed to the saga (with the resolved action as last argument)\r\n */\r\nexport function* callAsync(saga, ...args) {\r\n const action = args[args.length - 1];\r\n const { type, ...params } = action;\r\n\r\n try {\r\n yield put(asyncStart(type, params));\r\n\r\n yield call(saga, ...args);\r\n\r\n yield put(asyncEnd(type, params));\r\n } catch (error) {\r\n yield put(asyncEndError(type, params));\r\n\r\n if (error?.response && error?.response?.status === 403) {\r\n return yield put(\r\n addNotification({\r\n message: 'User does not have permission to do this.',\r\n duration: action?.notification?.config?.error?.duration,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }\r\n\r\n if (error?.response?.body?.hasErrors) {\r\n var message = error.response.body.errors[0];\r\n\r\n yield put(\r\n addNotification({\r\n message: message,\r\n duration: action?.notification?.config?.error?.duration,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }\r\n\r\n if (IN_DEV) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n","import { put, all, call, takeLatest } from 'redux-saga/effects';\r\n\r\nimport {\r\n receiveToolGroups,\r\n receiveToolImages,\r\n receiveToolsSearch,\r\n receiveCables,\r\n receiveToolSuppliers,\r\n receiveToolConnectors,\r\n receiveToolTopConnectors,\r\n receiveToolBottomConnectors,\r\n} from 'features/projects/tool/tool.actions';\r\n\r\nimport toolService from 'services/tool.service';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { TOOL_ACTIONS } from 'features/projects/tool/tool.constants';\r\n\r\nexport function* requestToolImagesAsync() {\r\n const toolImages = yield call(toolService.getToolImages);\r\n\r\n yield put(receiveToolImages(toolImages));\r\n\r\n return toolImages;\r\n}\r\n\r\nexport function* requestToolsSearchAsync(action = {}) {\r\n const { filters } = action;\r\n\r\n const toolsSearchResult = yield call(toolService.searchTools, filters);\r\n\r\n yield put(receiveToolsSearch(toolsSearchResult));\r\n\r\n return toolsSearchResult;\r\n}\r\n\r\nexport function* requestCablesAsync() {\r\n const cables = yield call(toolService.getCables);\r\n\r\n yield put(receiveCables(cables));\r\n\r\n return cables;\r\n}\r\n\r\nexport function* requestCablesByProjectAsync({ payload: projectId }) {\r\n let cables;\r\n\r\n if (!projectId) {\r\n cables = yield call(toolService.getCables);\r\n } else {\r\n cables = yield call(toolService.getCablesByProject, projectId);\r\n }\r\n\r\n yield put(receiveCables(cables));\r\n return cables;\r\n}\r\n\r\nexport function* requestToolGroupsAsync() {\r\n const toolGroups = yield call(toolService.getAllToolGroups);\r\n\r\n yield put(receiveToolGroups(toolGroups));\r\n\r\n return toolGroups;\r\n}\r\n\r\nexport function* requestToolGroupsByCategoryAsync(action = { categoryId: 1 }) {\r\n const categoryId = action.categoryId;\r\n\r\n const toolGroups = yield call(\r\n toolService.getToolGroupsByCategory,\r\n categoryId,\r\n );\r\n\r\n yield put(receiveToolGroups(toolGroups));\r\n\r\n return toolGroups;\r\n}\r\n\r\nexport function* requestToolTopConnectorsAsync() {\r\n const toolTopConnectors = yield call(toolService.getToolTopConnectors);\r\n\r\n yield put(receiveToolTopConnectors(toolTopConnectors));\r\n\r\n return toolTopConnectors;\r\n}\r\n\r\nexport function* requestToolBottomConnectorsAsync() {\r\n const toolBottomConnectors = yield call(toolService.getToolBottomConnectors);\r\n\r\n yield put(receiveToolBottomConnectors(toolBottomConnectors));\r\n\r\n return toolBottomConnectors;\r\n}\r\n\r\nexport function* requestToolSuppliersAsync() {\r\n const toolSuppliers = yield call(toolService.getToolSuppliers);\r\n\r\n yield put(receiveToolSuppliers(toolSuppliers));\r\n\r\n return toolSuppliers;\r\n}\r\n\r\nexport function* requestToolConnectorsAsync() {\r\n const toolConnectors = yield call(toolService.getToolConnectors);\r\n\r\n yield put(receiveToolConnectors(toolConnectors));\r\n\r\n return toolConnectors;\r\n}\r\n\r\nexport function* toolPickerModalOnLoadAsync() {\r\n const result = yield all([\r\n call(requestToolGroupsByCategoryAsync),\r\n call(requestToolTopConnectorsAsync),\r\n call(requestToolBottomConnectorsAsync),\r\n call(requestToolSuppliersAsync),\r\n ]);\r\n\r\n return result;\r\n}\r\n\r\nexport function* requestRefreshAllToolsWithM3Async() {\r\n const refreshResult = yield call(toolService.refreshAllToolsWithM3Items);\r\n const refreshedTools = yield call(requestToolsSearchAsync);\r\n\r\n return [refreshResult, refreshedTools];\r\n}\r\n\r\nexport default function* root() {\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOL_IMAGES,\r\n callAsync,\r\n requestToolImagesAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOLS_SEARCH,\r\n callAsync,\r\n requestToolsSearchAsync,\r\n );\r\n\r\n yield takeLatest(TOOL_ACTIONS.REQUEST_CABLES, callAsync, requestCablesAsync);\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_CABLES_BY_PROJECT,\r\n callAsync,\r\n requestCablesByProjectAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOL_GROUPS,\r\n callAsync,\r\n requestToolGroupsAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOL_GROUPS_BY_CATEGORY,\r\n callAsync,\r\n requestToolGroupsByCategoryAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOL_CONNECTORS,\r\n callAsync,\r\n requestToolConnectorsAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOL_TOP_CONNECTORS,\r\n callAsync,\r\n requestToolTopConnectorsAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOL_BOTTOM_CONNECTORS,\r\n callAsync,\r\n requestToolBottomConnectorsAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.TOOL_PICKER_MODAL_ON_LOAD,\r\n callAsync,\r\n toolPickerModalOnLoadAsync,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_REFRESH_ALL_TOOLS_WITH_M3,\r\n callAsync,\r\n requestRefreshAllToolsWithM3Async,\r\n );\r\n\r\n yield takeLatest(\r\n TOOL_ACTIONS.REQUEST_TOOL_SUPPLIERS,\r\n callAsync,\r\n requestToolSuppliersAsync,\r\n );\r\n}\r\n","import { fromJS } from 'immutable';\r\nimport { createSelector } from 'utils/app.util';\r\n\r\nexport const getAllAvailableUsersFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'allAvailableUsers']),\r\n (availableUsers) => availableUsers,\r\n);\r\n\r\nexport const getProjectMembersKeyedByUserIdFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'members']),\r\n (projectMembers) => {\r\n return projectMembers\r\n .toOrderedMap()\r\n .mapKeys((_, projectMember) => projectMember.get('userId').toString());\r\n },\r\n);\r\n\r\nexport const getProjectMembersFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'members']),\r\n (projectMembers) =>\r\n projectMembers\r\n .map((member) => {\r\n return fromJS(member.get('user'));\r\n })\r\n .toList(),\r\n);\r\n\r\nexport const getFieldCrewKeyedByUserIdFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'fieldCrews']),\r\n (projectMembers) => {\r\n return projectMembers\r\n .toOrderedMap()\r\n .mapKeys((_, projectMember) => projectMember.get('userId').toString());\r\n },\r\n);\r\n\r\nexport const getFieldCrewFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'fieldCrews']),\r\n (projectMembers) =>\r\n projectMembers\r\n .map((member) => {\r\n return fromJS(member.get('user'));\r\n })\r\n .toList(),\r\n);\r\n\r\nexport const getAllAvailableFieldCrewUsersFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'allAvailableFieldUsers']),\r\n (availableUsers) => availableUsers,\r\n);\r\n\r\nexport const getProjectQualificationsFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'qualifications']),\r\n (qualifications) => qualifications,\r\n);\r\n\r\nexport const getProjectCrewsFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'crews']),\r\n (crews) => crews,\r\n);\r\n\r\nexport const getTeamProjectRolesFromState = createSelector(\r\n (state) => state.getIn(['projects', 'team', 'teamProjectRoles']),\r\n (teamProjectRoles) => teamProjectRoles,\r\n);\r\n","import queryString from 'qs';\r\n\r\nimport {\r\n getSummarizedDataState,\r\n getActionDataStateSelector,\r\n getActionsDataStatesSelector,\r\n} from 'altus-datastate';\r\n\r\nimport { createSelector } from 'utils/app.util';\r\nimport { OrganizationType } from 'app/app.constants';\r\nimport { getProjectMembersKeyedByUserIdFromState } from 'features/projects/team/team.selectors';\r\n\r\nexport const isClientOrganization = (organization) =>\r\n organization.get('type') !== OrganizationType.MAIN_VENDOR;\r\n\r\nexport const getCurrentUserFromState = createSelector(\r\n (state) => state.getIn(['common', 'currentUser']),\r\n (currentUser) => currentUser,\r\n);\r\n\r\nexport const getCurrentUserUnitsPreferenceFromState = createSelector(\r\n (state) => state.getIn(['common', 'currentUser', 'units']),\r\n (preferUnits) => preferUnits,\r\n);\r\n\r\nexport const getCurrentUserPreferenceFromState = createSelector(\r\n (state) => state.getIn(['common', 'currentUser', 'preferences']),\r\n (preferences) => preferences,\r\n);\r\n\r\nconst getAllUsers = createSelector(\r\n (state) => state.getIn(['common', 'users']),\r\n (users) => users,\r\n);\r\n\r\nexport const getAllUsersFromState = createSelector(getAllUsers, (users) =>\r\n users.toList(),\r\n);\r\n\r\nexport const getUsersByUserIdFromState = createSelector(\r\n getAllUsers,\r\n (users) => users,\r\n);\r\n\r\nexport const getModalFromState = createSelector(\r\n (state) => state.get('modal'),\r\n (modal) => modal,\r\n);\r\n\r\nexport const getModalDirectionFromState = createSelector(\r\n getModalFromState,\r\n (modal) => modal.get('direction'),\r\n);\r\n\r\nexport const getActiveModalIndexByModalId = createSelector(\r\n (state, modalId) =>\r\n state.getIn(['modal', 'openModals', modalId, 'activeIndex']),\r\n (activeIndex) => activeIndex,\r\n);\r\n\r\nexport const isModalOpen = createSelector(\r\n (state, modalId) => !!state.getIn(['modal', 'openModals', modalId]),\r\n (open) => open,\r\n);\r\n\r\nexport const getAvailableServicesFromState = createSelector(\r\n (state) => state.getIn(['common', 'availableServices']),\r\n (services) => services,\r\n);\r\n\r\nexport const getAvailableDepartmentsFromState = createSelector(\r\n (state) => state.getIn(['common', 'availableDepartments']),\r\n (departments) => departments,\r\n);\r\n\r\nexport const getAllOrganizationsFromState = createSelector(\r\n (state) => state.getIn(['common', 'availableOrganizations']),\r\n (organizations) => organizations,\r\n);\r\n\r\nexport const getClientOrganizationsFromState = createSelector(\r\n getAllOrganizationsFromState,\r\n (organizations) => organizations.filter(isClientOrganization),\r\n);\r\n\r\nexport const getActionDataStateFromState = createSelector(\r\n getActionDataStateSelector,\r\n (dataState) => dataState,\r\n);\r\n\r\nexport const getSummarizedDataStateFromState = createSelector(\r\n getActionsDataStatesSelector,\r\n getSummarizedDataState,\r\n);\r\n\r\nexport const getAvailableFileCategoriesFromState = createSelector(\r\n (state) => state.getIn(['common', 'availableFileCategories']),\r\n (fileCategories) => fileCategories,\r\n);\r\n\r\nexport const getCurrentProjectMemberFromState = createSelector(\r\n getCurrentUserFromState,\r\n getProjectMembersKeyedByUserIdFromState,\r\n (currentUser, projectMembersByUserId) =>\r\n currentUser.get('id')\r\n ? projectMembersByUserId.get(currentUser.get('id').toString())\r\n : undefined,\r\n);\r\n\r\nexport const getRouterFromState = createSelector(\r\n (state) => state.get('router'),\r\n (router) => router,\r\n);\r\n\r\nexport const getCurrentSubPage = createSelector(getRouterFromState, (router) =>\r\n router.get('subPage'),\r\n);\r\n\r\nexport const getRouterParamsFromState = createSelector(\r\n getRouterFromState,\r\n (router) =>\r\n queryString.parse(router.getIn(['location', 'search']), {\r\n ignoreQueryPrefix: true,\r\n }),\r\n);\r\n\r\nexport const getPreviousLocationFromState = createSelector(\r\n getRouterFromState,\r\n (router) => router.get('previous'),\r\n);\r\n\r\nexport const getCurrentLocationFromState = createSelector(\r\n getRouterFromState,\r\n (router) => router.getIn(['location', 'pathname']),\r\n);\r\n\r\nexport const getCurrentThemeFromState = createSelector(\r\n (state) => state.getIn(['common', 'theme']),\r\n (theme) => theme,\r\n);\r\n\r\nexport const getApplicationLoadedFromState = createSelector(\r\n (state) => state.getIn(['common', 'appLoaded']),\r\n (appLoaded) => appLoaded,\r\n);\r\n\r\nexport const getFormValuesFromState = createSelector(\r\n (state, formId) => state.getIn(['form', formId, 'values']),\r\n (formValues) => formValues,\r\n);\r\n\r\nexport const getFormValueFromState = createSelector(\r\n (state, formId, fieldId) => state.getIn(['form', formId, 'values', fieldId]),\r\n (formValue) => formValue,\r\n);\r\n\r\nexport const getFormFromState = createSelector(\r\n (state, formId) => state.getIn(['form', formId]),\r\n (form) => form,\r\n);\r\n\r\nexport const getNotificationFromState = createSelector(\r\n (state) => state.getIn(['common', 'notification']),\r\n (notification) => notification,\r\n);\r\n\r\nexport const getApplicationHeaderFromState = createSelector(\r\n (state) => state.getIn(['common', 'applicationHeader']),\r\n (applicationHeader) => applicationHeader,\r\n);\r\n\r\nconst featureFlagsSelector = (state) => state.getIn(['common', 'featureFlags']);\r\n\r\nconst featureFlagStatusSelector = (state, featureFlag) =>\r\n state.getIn(['common', 'featureFlags', featureFlag], true);\r\n\r\nexport const getFeatureFlagsFromState = createSelector(\r\n featureFlagsSelector,\r\n (featureFlags) => featureFlags,\r\n);\r\n\r\nexport const getFeatureFlagStatusFromState = createSelector(\r\n featureFlagStatusSelector,\r\n (featureFlagStatus) => featureFlagStatus,\r\n);\r\n\r\nexport const getCurrentClientOrganizationIdFromState = createSelector(\r\n (state) => state.getIn(['common', 'currentClientOrganizationId']),\r\n (currentClientId) => currentClientId,\r\n);\r\n\r\nexport const getCurrentClientOrganizationFromState = createSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n getClientOrganizationsFromState,\r\n (currentClientId, clientOrganizations) =>\r\n clientOrganizations.find(\r\n (organization) =>\r\n organization.get('id').toString() === currentClientId.toString(),\r\n ),\r\n);\r\n\r\nexport const getCurrentClientOrganizationIdFromStateForAssembly =\r\n createSelector(\r\n (state) => state.getIn(['common', 'currentUser', 'organizationId']),\r\n (currentClientId) => currentClientId,\r\n );\r\n\r\nexport const getCurrentClientSelectedUom = createSelector(\r\n (state) => state.getIn(['common', 'currentUser', 'units']),\r\n (currentClientId) => currentClientId,\r\n);\r\n\r\nexport const getChangeLog = createSelector(\r\n (state) => state.getIn(['common', 'changeLog']),\r\n (chLog) => chLog,\r\n);\r\n\r\nexport const getPrivacyPolicy = createSelector(\r\n (state) => state.getIn(['common', 'privacyPolicy']),\r\n (privacyPolicy) => privacyPolicy,\r\n);\r\n","export const projectsBase = 'projects';\r\n\r\nexport const TOOLSTRING_PAGES = {\r\n EDIT: 'edit',\r\n OVERVIEW: 'overview',\r\n CREATE: 'create',\r\n};\r\n\r\n/**\r\n * @deprecated This constants didn't prove to be that useful, so are moving away from using them\r\n */\r\nexport const pages = {\r\n // projects\r\n projects: projectsBase,\r\n team: 'team',\r\n plan: 'plan',\r\n lessons: 'lessons',\r\n details: 'details',\r\n report: 'report',\r\n documents: 'documents',\r\n execute: 'execute',\r\n events: 'events',\r\n login: 'login',\r\n wellbore: 'well',\r\n sections: 'sections',\r\n dashboard: 'dashboard',\r\n task: {\r\n index: '',\r\n info: 'info',\r\n toolstring: 'bha',\r\n comments: 'comments',\r\n activities: 'activities',\r\n risk: 'risk',\r\n simulation: 'simulation',\r\n wellCondition: 'well',\r\n surfaceEquipment: 'surfaceequipment',\r\n },\r\n // wells\r\n wells: {\r\n events: 'events',\r\n },\r\n};\r\n\r\nconst routePaths = {\r\n root: '/',\r\n projects: `/${projectsBase}`,\r\n createProject: `/${projectsBase}/create`,\r\n login: '/login',\r\n logout: '/logout',\r\n changelog: '/changelog',\r\n privacyPolicy: '/privacy',\r\n project: `/${projectsBase}/:projectId`,\r\n dashboard: {\r\n root: '/v2/projects/:projectId/dashboard',\r\n index: '/v2/projects/:projectId/dashboard/:projectDashboardId',\r\n simulation:\r\n '/v2/projects/:projectId/dashboard/plan/:taskId/simulation/:simulationId',\r\n },\r\n details: `/${projectsBase}/:projectId`,\r\n team: `/${projectsBase}/:projectId/${pages.team}`,\r\n mobilize: `/${projectsBase}/:projectId/mobilize`,\r\n projectWellbore: {\r\n index: '/projects/:projectId/well',\r\n sections: '/projects/:projectId/well/sections',\r\n details: {\r\n match: '/projects/:projectId/well/details/:projectWellboreDetailId?',\r\n index: '/projects/:projectId/well/details/:projectWellboreDetailId',\r\n },\r\n },\r\n documents: `/${projectsBase}/:projectId/${pages.documents}`,\r\n execute: {\r\n match: `/${projectsBase}/:projectId/${pages.execute}/:taskId?`,\r\n index: `/${projectsBase}/:projectId/${pages.execute}/:taskId`,\r\n },\r\n execution: {\r\n match: `/${projectsBase}/:projectId/execution/:taskId?/:section?`,\r\n index: `/${projectsBase}/:projectId/execution`,\r\n tabs: {\r\n activities: `/${projectsBase}/:projectId/execution/:taskId/activities`,\r\n toolstring: `/${projectsBase}/:projectId/execution/:taskId/toolstring`,\r\n simulation: {\r\n match: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId?/:simulationSection?`,\r\n index: `/${projectsBase}/:projectId/execution/:taskId/simulation`,\r\n tabs: {\r\n options: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/options`,\r\n parameters: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/parameters`,\r\n temperature: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/temperature`,\r\n sections: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/sections`,\r\n comment: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/comment`,\r\n toolParameters: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/tool-parameters`,\r\n fluids: {\r\n root: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/fluids`,\r\n match: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/fluids/:simulationFluidId?`,\r\n index: `/${projectsBase}/:projectId/execution/:taskId/simulation/:simulationId/fluids/:simulationFluidId`,\r\n },\r\n },\r\n },\r\n surfaceEquipment: `/${projectsBase}/:projectId/execution/:taskId/surface-equipment`,\r\n dataAcquisition: `/${projectsBase}/:projectId/execution/:taskId/dataacquisition`,\r\n },\r\n },\r\n plan: {\r\n index: `/${projectsBase}/:projectId/${pages.plan}`,\r\n create: `/${projectsBase}/:projectId/${pages.plan}/create`,\r\n task: {\r\n index: `/${projectsBase}/:projectId/${pages.plan}/:taskId`,\r\n match: `/${projectsBase}/:projectId/${pages.plan}/:taskId/:page?`,\r\n wellCondition: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.wellCondition}`,\r\n comments: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.comments}`,\r\n activities: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.activities}`,\r\n surfaceEquipment: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.surfaceEquipment}`,\r\n toolstring: {\r\n match: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.toolstring}`,\r\n index: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.toolstring}/:toolstringId`,\r\n edit: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.toolstring}/:toolstringId/edit`,\r\n },\r\n simulation: {\r\n match: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId?`,\r\n index: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId`,\r\n parameters: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/parameters`,\r\n temperature: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/temperature`,\r\n sections: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/sections`,\r\n comment: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/comment`,\r\n toolParameters: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/tool-parameters`,\r\n fluids: {\r\n root: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/fluids`,\r\n match: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/fluids/:simulationFluidId?`,\r\n index: `/${projectsBase}/:projectId/${pages.plan}/:taskId/${pages.task.simulation}/:simulationId/fluids/:simulationFluidId`,\r\n },\r\n },\r\n },\r\n },\r\n report: `/${projectsBase}/:projectId/${pages.report}/:taskId?`,\r\n lessons: `/${projectsBase}/:projectId/${pages.lessons}`,\r\n events: `/${projectsBase}/:projectId/${pages.events}`,\r\n wells: {\r\n root: '/wells',\r\n index: '/field/:fieldId/wells/:wellboreId',\r\n details: '/field/:fieldId/wells/:wellboreId/details',\r\n history: '/field/:fieldId/wells/:wellboreId/history',\r\n events: '/field/:fieldId/wells/:wellboreId/events',\r\n sections: '/field/:fieldId/wells/:wellboreId/sections',\r\n elements: '/field/:fieldId/wells/:wellboreId/elements',\r\n alert: '/field/:fieldId/wells/:wellboreId/alert',\r\n compare: '/field/:fieldId/wells/:wellboreId/compare',\r\n schematic: '/field/:fieldId/wells/:wellboreId/schematic',\r\n integrity: {\r\n root: '/field/:fieldId/wells/:wellboreId/integrity',\r\n consequence: '/field/:fieldId/wells/:wellboreId/integrity/consequence',\r\n details: {\r\n root: '/field/:fieldId/wells/:wellboreId/integrity/:integrityId/',\r\n attachments:\r\n '/field/:fieldId/wells/:wellboreId/integrity/:integrityId/attachments',\r\n history:\r\n '/field/:fieldId/wells/:wellboreId/integrity/:integrityId/history',\r\n },\r\n },\r\n files: '/field/:fieldId/wells/:wellboreId/files',\r\n corrosion: {\r\n root: '/field/:fieldId/wells/:wellboreId/corrosion/',\r\n logfiles: '/field/:fieldId/wells/:wellboreId/corrosion/logfiles',\r\n comparelogs: {\r\n root: '/field/:fieldId/wells/:wellboreId/corrosion/comparelogs',\r\n barchart:\r\n '/field/:fieldId/wells/:wellboreId/corrosion/comparelogs/tabulardata/barchart',\r\n tabulardata:\r\n '/field/:fieldId/wells/:wellboreId/corrosion/comparelogs/tabulardata',\r\n },\r\n },\r\n },\r\n equipment: {\r\n root: '/equipment',\r\n index: '/equipment/:equipmentId/category/:toolCategory',\r\n assetHistory: '/equipment/:equipmentId/assethistory/:serialNumber',\r\n projectHistory: '/equipment/:equipmentId/projecthistory/:toolCategory',\r\n },\r\n cable: {\r\n root: '/cable',\r\n index: '/cable/:equipmentId',\r\n assetHistory: '/cable/:equipmentId/assethistory/:serialNumber',\r\n },\r\n surfaceEquipment: {\r\n root: '/surface',\r\n index: '/surface/:equipmentId',\r\n assetHistory: '/surface/:equipmentId/assethistory/:serialNumber',\r\n },\r\n facilities: {\r\n root: '/facilities',\r\n index: '/facilities/:facilityId',\r\n documents: '/facilities/:facilityId/documents',\r\n projectHistory: '/facilities/:facilityId/history',\r\n overview: '/facilities/:facilityId/overview',\r\n details: '/facilities/:facilityId/details',\r\n },\r\n field: {\r\n root: '/field',\r\n index: '/field/:fieldId',\r\n overview: '/field/:fieldId/overview',\r\n document: '/field/:fieldId/document',\r\n },\r\n operations: {\r\n root: '/operations',\r\n dashboards: '/operations/dashboards',\r\n },\r\n settings: {\r\n root: '/v2/settings',\r\n integrity: {\r\n root: '/v2/settings/integrity',\r\n consequence: '/v2/settings/integrity/consequence',\r\n new: '/v2/settings/integrity/addoredit',\r\n newRule: '/v2/settings/integrity/newrule',\r\n newCategory: '/v2/settings/integrity/newcategory',\r\n },\r\n },\r\n dataExchange: {\r\n root: '/v2/data-exchange',\r\n winch: {\r\n root: '/v2/data-exchange/winch',\r\n archived: '/v2/data-exchange/winch/archived',\r\n configuration: '/v2/data-exchange/winch/configuration',\r\n },\r\n cheetah: {\r\n root: '/v2/data-exchange/cheetah',\r\n archived: '/v2/data-exchange/cheetah/archived',\r\n },\r\n warrior: {\r\n root: '/v2/data-exchange/warrior',\r\n archived: '/v2/data-exchange/warrior/archived',\r\n },\r\n liveProjects: {\r\n root: '/v2/data-exchange/live-projects',\r\n archived: '/v2/data-exchange/live-projects/archived',\r\n project: {\r\n root: '/v2/data-exchange/live-projects/project/:projectId',\r\n winch: {\r\n root: '/v2/data-exchange/live-projects/project/:projectId/winch',\r\n match:\r\n '/v2/data-exchange/live-projects/project/:projectId/winch/:cheetahJobId?',\r\n index:\r\n '/v2/data-exchange/live-projects/project/:projectId/winch/:cheetahJobId',\r\n },\r\n cheetah: {\r\n root: '/v2/data-exchange/live-projects/project/:projectId/cheetah',\r\n match:\r\n '/v2/data-exchange/live-projects/project/:projectId/cheetah/:cheetahJobId?',\r\n index:\r\n '/v2/data-exchange/live-projects/project/:projectId/cheetah/:cheetahJobId',\r\n },\r\n warrior: {\r\n root: '/v2/data-exchange/live-projects/project/:projectId/warrior',\r\n match:\r\n '/v2/data-exchange/live-projects/project/:projectId/warrior/:cheetahJobId?',\r\n index:\r\n '/v2/data-exchange/live-projects/project/:projectId/warrior/:cheetahJobId',\r\n },\r\n masterData: '/v2/data-exchange/live-projects/project/:projectId/master',\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport default routePaths;\r\n","import Agent from 'infrastructure/agent';\r\nimport mappers, { measurementPreferencesToDto } from 'mappers';\r\nimport { OrganizationType } from 'app/app.constants';\r\n\r\nexport const getCurrentUser = () => Agent.get('/user/current');\r\n\r\nexport const getMainVendorUsers = () =>\r\n Agent.get('/user/byorganizationtype', {\r\n organizationType: OrganizationType.MAIN_VENDOR,\r\n });\r\n\r\nexport const getUsersByOrganizationType = (organizationType) =>\r\n Agent.get('/user/byorganizationtype', {\r\n organizationType: organizationType,\r\n });\r\n\r\nexport const getUserMeasurementPreference = () =>\r\n Agent.get('/user/current/preference/measurement');\r\n\r\nexport const updateUserMeasurementPreference = (measurementPreferences) =>\r\n Agent.put(\r\n '/user/current/preference/measurement',\r\n measurementPreferencesToDto(measurementPreferences),\r\n );\r\n\r\nexport const updateUser = (user) =>\r\n Agent.put('/user/current', mappers.User.to(user));\r\n\r\nexport const allMembers = (projectId) =>\r\n Agent.get(`/project/${projectId}/members`);\r\n\r\nexport const getProjectById = (projectId) => Agent.get(`/project/${projectId}`);\r\n\r\nexport const markAsSeen = (projectId) =>\r\n Agent.post(`/project/${projectId}/seen`);\r\n\r\nexport const getFields = (filters) => Agent.get('/field', filters);\r\n\r\nexport const getFacilities = (filters) =>\r\n Agent.get('/search/filter/valueset/facility', filters);\r\n\r\nexport const allWellbores = (filter) => Agent.get('/search/wellbore', filter);\r\n\r\nexport const facilitiesByFieldId = () => Agent.get('/field/simple/facility');\r\n\r\nexport const wellboresByFieldId = (fieldId) =>\r\n Agent.get(`/field/simple/${fieldId}/wellbore`);\r\n\r\nexport const getAllDepartments = () => Agent.get('/template/departments');\r\n\r\nexport const getAllServices = () => Agent.get('/template/services');\r\n\r\nexport const getAllProjectStatuses = () =>\r\n Agent.get('/search/filter/valueset/projectstatus');\r\n\r\nexport const getAllFileCategories = () =>\r\n Agent.get('/search/filter/valueset/filecategory');\r\n\r\nexport const updateUserPreference = (userPreferences) =>\r\n Agent.put(\r\n '/user/current/preference/user',\r\n mappers.UserPreference.to(userPreferences),\r\n );\r\n\r\nexport const getUserPreferences = () => Agent.get('/user/current/preference');\r\n\r\nexport const getTaskTypes = () =>\r\n Agent.get('/search/filter/valueset/tasktypes');\r\n\r\nconst getTaskFailReasons = () =>\r\n Agent.get('/search/filter/valueset/taskfailreason');\r\n\r\nconst getAppFeatures = () => Agent.get('/features');\r\n\r\nconst getAllOrganizations = () => Agent.get('/organization');\r\n\r\nconst getOrganizationsByField = (fieldId) =>\r\n Agent.get(`/organization/byfield/${fieldId}`);\r\n\r\nconst getChangeLog = () => Agent.get('/features/changelog');\r\n\r\nconst getPrivacyPolicy = () => Agent.get('/privacypolicy');\r\n\r\nconst appService = {\r\n allMembers,\r\n markAsSeen,\r\n updateUser,\r\n getTaskTypes,\r\n getMainVendorUsers,\r\n allWellbores,\r\n getFacilities,\r\n getFields,\r\n getAllServices,\r\n getProjectById,\r\n getCurrentUser,\r\n getUserPreferences,\r\n getAllDepartments,\r\n wellboresByFieldId,\r\n facilitiesByFieldId,\r\n updateUserPreference,\r\n getAllProjectStatuses,\r\n getUserMeasurementPreference,\r\n updateUserMeasurementPreference,\r\n getAllFileCategories,\r\n getAppFeatures,\r\n getAllOrganizations,\r\n getOrganizationsByField,\r\n getTaskFailReasons,\r\n getChangeLog,\r\n getPrivacyPolicy,\r\n getUsersByOrganizationType,\r\n};\r\n\r\nexport default appService;\r\n","import { generatePath } from 'react-router-dom';\r\n\r\nimport config from 'infrastructure/config/index';\r\nimport routePaths, { pages, projectsBase } from 'app/routePaths';\r\nimport { ENVIRONMENTS as Environments } from 'app/app.constants';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport { EDIT_ACTIVITY_MODAL_ID } from 'features/projects/activities/activities.constants';\r\nimport { EquipmentType } from '../features/equipment/equipment.constants';\r\n\r\nexport const toLogin = () => routePaths.login;\r\nexport const toLogout = () => routePaths.logout;\r\nexport const toChangeLog = () => routePaths.changelog;\r\nexport const toPrivacyPolicy = () => routePaths.privacyPolicy;\r\n\r\nexport const toRoot = () => routePaths.root;\r\n\r\nexport const toProjectTasks = (projectId, taskId, subPage) => {\r\n return taskId\r\n ? subPage\r\n ? `/${projectsBase}/${projectId}/${pages.plan}/${taskId}/${subPage}`\r\n : `/${projectsBase}/${projectId}/${pages.plan}/${taskId}`\r\n : `/${projectsBase}/${projectId}/${pages.plan}`;\r\n};\r\n\r\nexport const toTaskToolstring = (projectId, taskId, toolstringId) =>\r\n toolstringId\r\n ? `/${projectsBase}/${projectId}/${pages.plan}/${taskId}/${pages.task.toolstring}/${toolstringId}`\r\n : `/${projectsBase}/${projectId}/${pages.plan}/${taskId}/${pages.task.toolstring}`;\r\n\r\nexport const toTaskToolstringEdit = (projectId, taskId, toolstringId) =>\r\n `/${projectsBase}/${projectId}/${pages.plan}/${taskId}/${pages.task.toolstring}/${toolstringId}/edit`;\r\n\r\nexport const toProject = (projectId, path = routePaths.project) =>\r\n generatePath(path, { projectId });\r\n\r\nexport const toExecutionSection = (projectId, taskId, section = 'activities') =>\r\n taskId\r\n ? `/${projectsBase}/${projectId}/execution/${taskId}/${section}`\r\n : `/${projectsBase}/${projectId}/execution`;\r\n\r\nexport const toExecutionSimulation = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n tab = 'options',\r\n) =>\r\n simulationId\r\n ? `/${projectsBase}/${projectId}/execution/${taskId}/simulation/${simulationId}/${tab}`\r\n : `/${projectsBase}/${projectId}/execution/${taskId}/simulation`;\r\n\r\nexport const toExecutionSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n) =>\r\n simulationFluidId\r\n ? `/${projectsBase}/${projectId}/execution/${taskId}/simulation/${simulationId}/fluids/${simulationFluidId}`\r\n : `/${projectsBase}/${projectId}/execution/${taskId}/simulation/${simulationId}/fluids`;\r\n\r\nexport const toLessonsLearned = (projectId) =>\r\n `/${projectsBase}/${projectId}/${pages.lessons}`;\r\n\r\nexport const toProjectReport = (projectId, taskId) =>\r\n taskId\r\n ? `/${projectsBase}/${projectId}/${pages.report}/${taskId}`\r\n : `/${projectsBase}/${projectId}/${pages.report}`;\r\n\r\nexport const toProjectDetails = (projectId) =>\r\n generatePath(routePaths.details, { projectId });\r\n\r\nexport const toProjectDocuments = (projectId) =>\r\n generatePath(routePaths.documents, { projectId });\r\n\r\nexport const toProjectWellboreSections = (projectId) =>\r\n generatePath(routePaths.projectWellbore.sections, { projectId });\r\n\r\nexport const toProjectEvents = (projectId) =>\r\n `/${projectsBase}/${projectId}/${pages.events}`;\r\n\r\nexport const toProjectDashboard = (path, projectId) =>\r\n generatePath(path, { projectId });\r\n\r\nexport const toProjectDashboardV2 = (projectId, projectDashboardId, taskId) =>\r\n `${generatePath(routePaths.dashboard.index, {\r\n projectId,\r\n projectDashboardId,\r\n })}${taskId ? `?taskId=${taskId}` : ''}`;\r\n\r\nexport const toFacility = (facilityId) =>\r\n facilityId && generatePath(routePaths.facilities.index, { facilityId });\r\n\r\nexport const toWellbore = (\r\n fieldId,\r\n wellboreId,\r\n path = routePaths.wells.index,\r\n) => fieldId && wellboreId && generatePath(path, { fieldId, wellboreId });\r\n\r\nexport const toField = (fieldId, path = routePaths.field.index) =>\r\n fieldId && generatePath(path, { fieldId });\r\n\r\nexport const toTool = (\r\n equipmentId,\r\n toolCategory,\r\n path = routePaths.equipment.index,\r\n) =>\r\n equipmentId &&\r\n toolCategory &&\r\n generatePath(path, { equipmentId, toolCategory });\r\n\r\nexport const toCable = (equipmentId, path = routePaths.cable.index) =>\r\n equipmentId && generatePath(path, { equipmentId });\r\n\r\nexport const toEquipmentAssetHistory = (\r\n equipmentId,\r\n equipmentType,\r\n serialNumber,\r\n) => {\r\n const path =\r\n equipmentType === EquipmentType.SURFACE\r\n ? routePaths.surfaceEquipment.assetHistory\r\n : equipmentType === EquipmentType.CABLE\r\n ? routePaths.cable.assetHistory\r\n : routePaths.equipment.assetHistory;\r\n\r\n return (\r\n equipmentId &&\r\n serialNumber &&\r\n generatePath(path, { equipmentId, serialNumber })\r\n );\r\n};\r\n\r\nexport const toSurfaceEquipment = (\r\n equipmentId,\r\n path = routePaths.surfaceEquipment.index,\r\n) => {\r\n return equipmentId && generatePath(path, { equipmentId });\r\n};\r\n\r\nexport const toWellboreSections = (\r\n fieldId,\r\n wellboreId,\r\n path = routePaths.wells.sections,\r\n) => fieldId && wellboreId && generatePath(path, { fieldId, wellboreId });\r\n\r\nexport const toTaskWellCondition = (projectId, taskId) =>\r\n `/${projectsBase}/${projectId}/${pages.plan}/${taskId}/${pages.task.wellCondition}`;\r\n\r\nexport const toTaskActivities = (projectId, taskId) =>\r\n `/${projectsBase}/${projectId}/${pages.plan}/${taskId}/${pages.task.activities}`;\r\n\r\nexport const toTaskRisk = (projectId, taskId) =>\r\n `/${projectsBase}/${projectId}/${pages.plan}/${taskId}/${pages.task.risk}`;\r\n\r\nexport const toTaskSimulation = (\r\n projectId,\r\n taskId,\r\n simulationId = null,\r\n path = routePaths.plan.task.simulation.match,\r\n) =>\r\n taskId &&\r\n projectId &&\r\n generatePath(path, { projectId, taskId, simulationId });\r\n\r\nexport const toTaskSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n path = routePaths.plan.task.simulation.fluids.index,\r\n) => generatePath(path, { projectId, taskId, simulationId, simulationFluidId });\r\n\r\nexport const toEditActivity = (projectId, taskId, index) =>\r\n `/${projectsBase}/${projectId}/${pages.execute}/${taskId}?${EDIT_ACTIVITY_MODAL_ID}&index=${index}`;\r\n\r\nexport const toProjectRole = (projectRoleId) =>\r\n generatePath('/v2/settings/access-roles/project/:projectRoleId?', {\r\n projectRoleId,\r\n });\r\n\r\nexport const toSystemRole = (systemRoleId) =>\r\n generatePath('/v2/settings/access-roles/system/:systemRoleId?', {\r\n systemRoleId,\r\n });\r\n\r\nexport const toProjectWellboreDetail = (projectId, projectWellboreDetailId) =>\r\n generatePath(routePaths.projectWellbore.details.match, {\r\n projectId,\r\n projectWellboreDetailId,\r\n });\r\n\r\nexport const isRouteEnabledForEnvironment = (route) => {\r\n if (config.environmentName === Environments.LOCAL) return true;\r\n\r\n if (!route.environments) return true;\r\n\r\n return route.environments.includes(config.environmentName);\r\n};\r\n\r\nexport const toOperations = () => routePaths.operations.root;\r\n\r\nexport const toLiveProject = (projectId) =>\r\n generatePath(routePaths.dataExchange.liveProjects.project.root, {\r\n projectId,\r\n });\r\n\r\nexport const toCheetahJobCurves = (projectId, cheetahJobId, source, path) => {\r\n const { cheetah, warrior, winch } =\r\n routePaths.dataExchange.liveProjects.project;\r\n\r\n switch (source) {\r\n case CheetahJobSource.CHEETAH:\r\n path = cheetah.index;\r\n break;\r\n case CheetahJobSource.WARRIOR:\r\n path = warrior.index;\r\n break;\r\n case CheetahJobSource.SM_LOCATION:\r\n path = winch.index;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return generatePath(path, {\r\n projectId,\r\n cheetahJobId,\r\n });\r\n};\r\n\r\nexport const toMobileProjectStatus = (projectId) =>\r\n `/${projectsBase}/${projectId}/status`;\r\n\r\n// '/field/:fieldId/wells/:wellboreId/integrity/:integrityId/attachments'\r\nexport const toIntegrityAttachment = (fieldId, wellboreId, integrityId) =>\r\n generatePath(routePaths.wells.integrity.details.attachments, {\r\n fieldId,\r\n wellboreId,\r\n integrityId,\r\n });\r\n\r\nexport const toRiskManagement = (fieldId, wellboreId) =>\r\n generatePath(routePaths.wells.integrity.root, {\r\n fieldId,\r\n wellboreId,\r\n });\r\n","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory({\r\n basename: process.env.PUBLIC_URL,\r\n});\r\n","import { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\n\r\nimport config from 'infrastructure/config';\r\nimport history from 'infrastructure/history';\r\n\r\nlet appInsights = null;\r\ntry {\r\n var reactPlugin = new ReactPlugin();\r\n if (config.appInsightsInstrumentationKey) {\r\n appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: config.appInsightsInstrumentationKey,\r\n extensions: [reactPlugin],\r\n extensionConfig: {\r\n [reactPlugin.identifier]: {\r\n history: history,\r\n },\r\n },\r\n },\r\n });\r\n }\r\n} catch (e) {\r\n console.error(e);\r\n}\r\n\r\nexport default appInsights;\r\n","import { initialize } from 'redux-form/immutable';\r\nimport { replace } from 'connected-react-router/immutable';\r\nimport { SeverityLevel } from '@microsoft/applicationinsights-web';\r\n\r\nimport {\r\n APP_ACTIONS,\r\n MEASUREMENT_PREFERENCES_FORM,\r\n MODAL,\r\n NOTIFICATION_VARIANTS,\r\n SystemPermission,\r\n UPLOAD_DOCUMENT_FORM,\r\n USER_PREFERENCES_FORM,\r\n} from 'app/app.constants';\r\n\r\nimport {\r\n getCurrentLocationFromState,\r\n getCurrentThemeFromState,\r\n getCurrentUserFromState,\r\n getCurrentUserPreferenceFromState,\r\n getCurrentUserUnitsPreferenceFromState,\r\n getPreviousLocationFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n deleteMsalFromLocalStorage,\r\n getCurrentThemeOrDefault,\r\n makeActionCreator,\r\n setCurrentTheme,\r\n} from 'utils/app.util';\r\n\r\nimport mappers from 'mappers';\r\nimport routePaths from 'app/routePaths';\r\nimport config from 'infrastructure/config';\r\nimport service from 'services/app.service';\r\nimport appService from 'services/app.service';\r\nimport authSingleton from 'services/auth.service';\r\nimport { toLogin, toRoot } from 'utils/route.util';\r\nimport appInsights from 'infrastructure/appInsights';\r\n\r\nexport const setSubPage = (page) => (dispatch) =>\r\n dispatch({ type: APP_ACTIONS.PROJECT_SET_SUBPAGE, page });\r\n\r\nexport const toggleModal =\r\n ({ modalId, force = false, activeIndex, payload, ...extra }) =>\r\n (dispatch) => {\r\n dispatch({\r\n type: APP_ACTIONS.TOGGLE_MODAL,\r\n modalId,\r\n force,\r\n payload,\r\n activeIndex,\r\n ...extra,\r\n });\r\n return payload;\r\n };\r\n\r\nexport const setGlobalLocation = (path) => ({\r\n type: 'SET_GLOBAL_LOCATION',\r\n payload: path,\r\n});\r\n\r\nexport const saveRedirectPath = (currentPath) => (dispatch) => {\r\n const action = {\r\n type: 'SAVE_REDIRECT_PATH',\r\n payload: currentPath,\r\n };\r\n dispatch(action);\r\n};\r\n\r\nexport const onLoad = () => (dispatch, getState) => {\r\n dispatch({ type: APP_ACTIONS.APP_LOAD, skipTracking: true });\r\n\r\n const hasWellAccessOnly = getCurrentUserFromState(getState())\r\n ?.get('permissions')\r\n .includes(SystemPermission.WELL_ACCESS_ONLY);\r\n\r\n const redirect = getCurrentUserFromState(getState())?.get('id')\r\n ? hasWellAccessOnly\r\n ? routePaths.wells.root\r\n : routePaths.root\r\n : config.loginUrl;\r\n if (redirect) {\r\n dispatch(replace(redirect));\r\n }\r\n};\r\n\r\nexport const getCurrentUser = () => (dispatch) => {\r\n const payload = service.getCurrentUser();\r\n\r\n dispatch({\r\n type: APP_ACTIONS.GET_CURRENT_USER,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const fetchPrivacyPolicy = () => (dispatch) => {\r\n const payload = service.getPrivacyPolicy();\r\n\r\n dispatch({\r\n type: APP_ACTIONS.INITIATE_FETCH_PRIVACY_POLICY,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const fetchChangeLog = () => (dispatch) => {\r\n dispatch({\r\n type: APP_ACTIONS.INITIATE_FETCH_CHANGE_LOG,\r\n });\r\n};\r\n\r\nexport const storeChangeLog = (text) => ({\r\n type: APP_ACTIONS.STORE_CHANGE_LOG,\r\n payload: text,\r\n});\r\n\r\nexport const newAppVersionNotificationAction = {\r\n type: APP_ACTIONS.NEW_APP_VERSION_NOTIFICATION,\r\n};\r\nexport const newAppVersionNotification = () => (dispatch) => {\r\n dispatch(newAppVersionNotificationAction);\r\n};\r\n\r\nexport const getMainVendorUsers = () => (dispatch) => {\r\n const payload = service.getMainVendorUsers();\r\n\r\n dispatch({\r\n type: APP_ACTIONS.GET_MAIN_VENDOR_USERS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getUsersByOrganizationType = (organizationType) => (dispatch) => {\r\n const payload = service.getUsersByOrganizationType(organizationType);\r\n\r\n dispatch({\r\n type: APP_ACTIONS.GET_MAIN_VENDOR_USERS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onUnauthorized = () => (dispatch) =>\r\n dispatch(replace(routePaths.login));\r\n\r\nexport const loadOrganizations = makeActionCreator({\r\n type: APP_ACTIONS.GET_ALL_ORGANIZATIONS,\r\n payload: service.getAllOrganizations,\r\n});\r\n\r\nexport const autoLogin = () => (dispatch, getState) => {\r\n const payload = Promise.all([\r\n dispatch(getCurrentUser()),\r\n dispatch(getUserPreferences()),\r\n ])\r\n .then((user) => {\r\n dispatch(\r\n setTheme(\r\n getCurrentThemeOrDefault(\r\n user.userId,\r\n getState().getIn(['common', 'theme']),\r\n ),\r\n ),\r\n );\r\n })\r\n .then(() =>\r\n Promise.all([\r\n dispatch(getCurrentUser()),\r\n dispatch(getUserPreferences()),\r\n dispatch(loadOrganizations()),\r\n ]),\r\n )\r\n .then((params) => {\r\n const previousLocation = getPreviousLocationFromState(getState());\r\n const currentLocation = getCurrentLocationFromState(getState());\r\n\r\n const [{ permissions }] = params;\r\n const hasWellAccessOnly = permissions.some((permission) =>\r\n Object.values(permission).includes(SystemPermission.WELL_ACCESS_ONLY),\r\n );\r\n\r\n if (currentLocation === routePaths.login) {\r\n if (hasWellAccessOnly) {\r\n dispatch(replace(routePaths.wells.root));\r\n } else if (previousLocation) {\r\n dispatch(replace(previousLocation));\r\n } else {\r\n dispatch(replace(toRoot()));\r\n }\r\n } else if (hasWellAccessOnly) {\r\n previousLocation.toJS();\r\n if (previousLocation) {\r\n dispatch(replace(previousLocation));\r\n } else {\r\n dispatch(replace(routePaths.wells.root));\r\n }\r\n }\r\n })\r\n .catch(() => {\r\n dispatch(replace(toLogin()));\r\n });\r\n\r\n dispatch({\r\n type: APP_ACTIONS.LOGIN,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const logOut = () => (dispatch) => {\r\n const payload = authSingleton\r\n .getMsalInstance()\r\n .then((msalInstance) => msalInstance.logout())\r\n .then(() => deleteMsalFromLocalStorage());\r\n\r\n dispatch({ type: APP_ACTIONS.LOGOUT });\r\n\r\n return payload;\r\n};\r\n\r\nexport const setApplicationFailure =\r\n (error, componentStack = '') =>\r\n (dispatch) => {\r\n appInsights?.trackException({\r\n error: error,\r\n exception: error,\r\n severityLevel: SeverityLevel.Error,\r\n properties: componentStack,\r\n });\r\n\r\n dispatch({\r\n payload: error,\r\n type: APP_ACTIONS.SET_APPLICATION_FAILURE,\r\n });\r\n };\r\n\r\nexport const markProjectAsSeen = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: APP_ACTIONS.PROJECT_MARK_AS_SEEN,\r\n payload: () => service.markAsSeen(projectId),\r\n });\r\n\r\nexport const removeNotification = () => (dispatch) => {\r\n dispatch({ type: APP_ACTIONS.REMOVE_NOTIFICATION });\r\n};\r\n\r\nexport const getAllServices = () => (dispatch) => {\r\n const payload = service.getAllServices();\r\n\r\n dispatch({\r\n type: APP_ACTIONS.GET_ALL_SERVICES,\r\n payload,\r\n });\r\n return payload;\r\n};\r\n\r\nexport const getAllDepartments = () => (dispatch) => {\r\n const payload = service.getAllDepartments();\r\n\r\n dispatch({\r\n type: APP_ACTIONS.GET_ALL_DEPARTMENTS,\r\n payload,\r\n });\r\n return payload;\r\n};\r\n\r\nexport const getAllFileCategories = () => (dispatch) => {\r\n const payload = service.getAllFileCategories();\r\n dispatch({\r\n type: APP_ACTIONS.GET_ALL_FILE_CATEGORIES,\r\n payload,\r\n });\r\n return payload;\r\n};\r\n\r\nexport const setHeaderValues = (values) => (dispatch) =>\r\n dispatch({ type: APP_ACTIONS.SET_HEADER_VALUES, ...values });\r\n\r\nexport const setFile =\r\n (\r\n files,\r\n category = 8, // default category is Other - enum 8\r\n ) =>\r\n (dispatch) => {\r\n if (files) {\r\n dispatch(\r\n initialize(UPLOAD_DOCUMENT_FORM.ID, {\r\n [UPLOAD_DOCUMENT_FORM.FILES]: files.map((file) => ({\r\n [UPLOAD_DOCUMENT_FORM.FILE]: file,\r\n [UPLOAD_DOCUMENT_FORM.META]: mappers.Document.Meta.initial(\r\n file,\r\n category,\r\n ),\r\n })),\r\n }),\r\n );\r\n }\r\n dispatch(toggleModal({ modalId: MODAL.UPLOAD_FILE }));\r\n };\r\n\r\nexport const initializeMeasurementPreferences =\r\n (system, preferences) => (dispatch) =>\r\n dispatch(\r\n initialize(\r\n MEASUREMENT_PREFERENCES_FORM.ID,\r\n preferences.set('system', system),\r\n ),\r\n );\r\n\r\nexport const initializeUserPreferences =\r\n (system, units, preferences) => (dispatch, getState) => {\r\n const initializeForm = () => {\r\n const state = getState();\r\n const theme = getCurrentThemeFromState(state);\r\n\r\n const user = getCurrentUserFromState(state);\r\n\r\n const tempUnits = units ?? getCurrentUserUnitsPreferenceFromState(state);\r\n\r\n const tempPreferences =\r\n preferences ?? getCurrentUserPreferenceFromState(state);\r\n\r\n if (!user || !tempUnits || !tempPreferences) return;\r\n\r\n return dispatch(\r\n initialize(USER_PREFERENCES_FORM.ID, {\r\n units: { system, ...tempUnits },\r\n general: { ...(tempPreferences || {}), theme },\r\n }),\r\n );\r\n };\r\n\r\n if (!units || !preferences) {\r\n return Promise.all([\r\n dispatch(getUserPreferences()),\r\n dispatch(getCurrentUser()),\r\n ]).then(() => {\r\n const state = getState();\r\n const user = getCurrentUserFromState(state);\r\n const fetchedUnits = getCurrentUserUnitsPreferenceFromState(state);\r\n\r\n if (!user || !fetchedUnits) return;\r\n\r\n return initializeForm();\r\n });\r\n }\r\n\r\n return initializeForm();\r\n };\r\n\r\nexport const updateUserPreferences =\r\n (userPreferences) => (dispatch, getState) => {\r\n const { units, general } = userPreferences.toJS();\r\n const { system } = units;\r\n\r\n const currentUser = getCurrentUserFromState(getState()).toJS();\r\n\r\n const payload = Promise.all([\r\n service.updateUserMeasurementPreference(units),\r\n service.updateUser({\r\n ...currentUser,\r\n unit: system,\r\n }),\r\n service.updateUserPreference(general),\r\n ]).then((response) => {\r\n dispatch(\r\n toggleModal({\r\n modalId: MODAL.EDIT_USER_PREFERENCES,\r\n payload: response,\r\n }),\r\n );\r\n\r\n window.location.reload();\r\n\r\n return response;\r\n });\r\n\r\n dispatch({\r\n type: APP_ACTIONS.UPDATE_USER_MEASUREMENT_PREFERENCES,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Preferences successfully updated',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const getUserPreferences = () => (dispatch) => {\r\n const payload = service.getUserPreferences();\r\n\r\n dispatch({\r\n type: APP_ACTIONS.GET_USER_PREFERENCES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const setTheme = (theme) => (dispatch, getState) => {\r\n const currentUser = getCurrentUserFromState(getState());\r\n\r\n setCurrentTheme(currentUser.get('id'), theme);\r\n dispatch({\r\n theme,\r\n type: APP_ACTIONS.SET_THEME,\r\n });\r\n};\r\n\r\nexport const getAppFeatures = makeActionCreator({\r\n type: APP_ACTIONS.GET_APPLICATION_FEATURES,\r\n payload: appService.getAppFeatures,\r\n});\r\n\r\nexport const setCurrentClientOrganization = (currentOrganizationId) => ({\r\n type: APP_ACTIONS.SET_CURRENT_CLIENT_ORGANIZATION,\r\n currentOrganizationId,\r\n});\r\n","import Agent from 'infrastructure/agent';\r\nimport tasksMapper from 'features/projects/tasks/tasks.mappers';\r\n\r\nconst getAllTaskTemplates = () => Agent.get('/template/tasks');\r\n\r\nconst addTaskTemplates = (projectId, taskIds) =>\r\n Agent.post(`/template/tasks/project/${projectId}`, taskIds);\r\n\r\nconst getTaskById = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}`);\r\n\r\nconst updateTask = (projectId, taskId, task) =>\r\n Agent.put(`/project/${projectId}/tasks/${taskId}`, tasksMapper.Task.to(task));\r\n\r\nconst updateTaskServices = (projectId, taskId, serviceIds) =>\r\n Agent.post(`/project/${projectId}/tasks/${taskId}/services`, serviceIds);\r\n\r\nconst createTask = (projectId, task) =>\r\n Agent.post(`/project/${projectId}/tasks`, tasksMapper.Task.to(task));\r\n\r\nconst deleteTask = (projectId, taskId) =>\r\n Agent.delete(`/project/${projectId}/tasks/${taskId}`);\r\n\r\nconst getAllTasks = (projectId) => Agent.get(`/project/${projectId}/tasks`);\r\n\r\nconst getAllTasksWithProjects = (projectId) =>\r\n Agent.get(`/project/${projectId}/tasks/GetTasksWithProjects`);\r\n\r\nconst updateTaskSequence = (projectId, taskId, itemSequence) =>\r\n Agent.post(`/project/${projectId}/tasks/${taskId}/sequence`, itemSequence);\r\n\r\nconst copyTask = (projectId, taskId) =>\r\n Agent.post(`/project/${projectId}/tasks/${taskId}/copy`);\r\n\r\nconst getWellDetailForProjectAndTask = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/wellbore/detail`);\r\n\r\nconst updateWellDetailForProjectAndTask = (projectId, taskId, wellboreDetail) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/wellbore/detail`,\r\n wellboreDetail,\r\n );\r\n\r\nconst saveCableToTask = (taskCable, projectId, taskId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/surfaceequipment/savecable`,\r\n taskCable,\r\n );\r\n\r\nconst saveSurfaceToolToTask = (taskTool, projectId, taskId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/surfaceequipment/savesurface`,\r\n taskTool,\r\n );\r\n\r\nconst saveSurfaceTemplateToolToTask = (taskTemplate, projectId, taskId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/surfaceequipment/savesurfacetemplate`,\r\n taskTemplate,\r\n );\r\n\r\nconst deleteCableFromTask = (taskCable, projectId, taskId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/surfaceequipment/deletecable/${taskCable.CableId}`,\r\n taskCable,\r\n );\r\n\r\nconst getCablesForTask = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/surfaceequipment/getcables`);\r\n\r\nconst getSurfaceEquipmentForTask = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/surfaceequipment/getsurfaces`,\r\n );\r\n\r\nconst deleteSurfaceFromTask = (surfaceEquipment, projectId, taskId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/surfaceequipment/deletesurface/${surfaceEquipment.surfaceId}`,\r\n );\r\n\r\nconst saveCableSerialNumberToTask = (cableSerialNumberDto) =>\r\n Agent.put('/Cable/task/individual-serial-number', cableSerialNumberDto);\r\n\r\nconst saveSurfaceEquipmentSerialNumber = (surfaceEquipmentSerialNumberDto) =>\r\n Agent.put(\r\n '/Cable/surfacequipment/individual-serial-number',\r\n surfaceEquipmentSerialNumberDto,\r\n );\r\n\r\nconst getDataAcquisitionForTask = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/dataacquisition`);\r\n\r\nconst updateDataAcquisitionForTask = (\r\n projectId,\r\n taskId,\r\n dataAcquisitionId,\r\n dataAcquisition,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/${dataAcquisitionId}`,\r\n dataAcquisition,\r\n );\r\n\r\nconst getDebrisTypes = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/debristypes`,\r\n );\r\n\r\nconst getGlycolTypes = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/glycoltypes`,\r\n );\r\n\r\nconst getGreaseTypes = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/greasetypes`,\r\n );\r\n\r\nconst getFrictionReducerTypes = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/frictionreducertypes`,\r\n );\r\n\r\nconst getInjectionMediums = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/injectionmediums`,\r\n );\r\n\r\nconst getProductionMediums = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/productionmediums`,\r\n );\r\n\r\nconst getTaskFluids = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/dataacquisition/fluids`);\r\n\r\nconst getDefaultTaskFluid = (projectId, taskId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/fluids/default`,\r\n );\r\n\r\nconst deleteTaskFluid = (projectId, taskId, fluidId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/fluids/${fluidId}`,\r\n );\r\n\r\nexport const updateTaskFluid = (projectId, taskId, fluidObj) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/fluids/${fluidObj.fluidId}`,\r\n fluidObj,\r\n );\r\n\r\nexport const addTaskFluid = (projectId, taskId, fluidObj) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/fluids`,\r\n fluidObj,\r\n );\r\n\r\nexport const getExplosives = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/dataacquisition/explosives`);\r\n\r\nexport const updateExplosives = (projectId, taskId, data) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/dataacquisition/explosives/update`,\r\n data,\r\n );\r\n\r\nconst updateSerialNumbersFromTask = (\r\n projectId,\r\n fromTaskId,\r\n toTaskId,\r\n toToolStringId,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/fromTask/${fromTaskId}/toTask/${toTaskId}/toToolString/${toToolStringId}`,\r\n );\r\n\r\nconst updateTaskSEFromToTask = (projectId, fromTaskId, toTaskId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/fromTask/${fromTaskId}/toTask/${toTaskId}/surface-equipment-serials`,\r\n );\r\n\r\nconst updateTaskCableSerialFromToTask = (projectId, fromTaskId, toTaskId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/fromTask/${fromTaskId}/toTask/${toTaskId}/cable-serials`,\r\n );\r\n\r\nconst taskService = {\r\n getAllTaskTemplates,\r\n updateTaskSequence,\r\n getTaskById,\r\n updateTask,\r\n createTask,\r\n deleteTask,\r\n getAllTasks,\r\n copyTask,\r\n addTaskTemplates,\r\n getAllTasksWithProjects,\r\n getWellDetailForProjectAndTask,\r\n updateWellDetailForProjectAndTask,\r\n updateTaskServices,\r\n saveCableToTask,\r\n deleteCableFromTask,\r\n getCablesForTask,\r\n getSurfaceEquipmentForTask,\r\n saveSurfaceToolToTask,\r\n saveSurfaceTemplateToolToTask,\r\n deleteSurfaceFromTask,\r\n saveCableSerialNumberToTask,\r\n saveSurfaceEquipmentSerialNumber,\r\n getGreaseTypes,\r\n getGlycolTypes,\r\n getDebrisTypes,\r\n getInjectionMediums,\r\n getProductionMediums,\r\n getFrictionReducerTypes,\r\n getDataAcquisitionForTask,\r\n updateDataAcquisitionForTask,\r\n getDefaultTaskFluid,\r\n getTaskFluids,\r\n deleteTaskFluid,\r\n updateTaskFluid,\r\n addTaskFluid,\r\n getExplosives,\r\n updateExplosives,\r\n updateSerialNumbersFromTask,\r\n updateTaskSEFromToTask,\r\n updateTaskCableSerialFromToTask,\r\n};\r\n\r\nexport default taskService;\r\n","import { Map } from 'immutable';\r\n\r\nimport mappers, { measurementPreferenceToDto } from 'mappers';\r\nimport { PROJECT_STATUS as ProjectStatus } from 'app/app.constants';\r\n\r\nexport const projectStatusToString = (status) =>\r\n ({\r\n [ProjectStatus.PLAN]: 'Plan',\r\n [ProjectStatus.EXECUTE]: 'Execute',\r\n [ProjectStatus.REPORT]: 'Report',\r\n }[status]);\r\n\r\nexport const toFacilityFromDto = ({ id, name }) =>\r\n Map({\r\n id: id,\r\n name: name,\r\n });\r\n\r\nexport const toDepartmentFromDto = ({ departmentId, name }) =>\r\n Map({\r\n id: departmentId,\r\n name: name,\r\n });\r\n\r\nexport const toDropDownForOperations = ({ id, name }) =>\r\n Map({\r\n id: id,\r\n name: name,\r\n });\r\n\r\nexport const toProjectStatusFromDto = ({ id, name }) =>\r\n Map({\r\n id: id,\r\n name: name,\r\n });\r\n\r\nexport const projectToDTO = (project) => {\r\n const {\r\n id,\r\n wellboreId,\r\n fieldId,\r\n description,\r\n facilityId,\r\n estimatedStart,\r\n estimatedEnd,\r\n referenceNumber,\r\n departments,\r\n status,\r\n source,\r\n unit,\r\n organizationId,\r\n externalId,\r\n externalName,\r\n displayReferenceNumber,\r\n background,\r\n objective,\r\n internalInformation,\r\n } = project;\r\n return {\r\n fieldId,\r\n facilityId,\r\n wellboreId,\r\n projectId: id,\r\n referenceNumber: referenceNumber,\r\n description: description,\r\n departments: departments.map(mappers.Department.to),\r\n estimatedStart: Object.values(estimatedStart).includes('Invalid date')\r\n ? '--'\r\n : Object.values(estimatedStart).join('-'),\r\n estimatedEnd: Object.values(estimatedEnd).join('-'),\r\n status: status,\r\n source,\r\n measurementSystem: measurementPreferenceToDto(unit),\r\n organizationId,\r\n externalId,\r\n externalName,\r\n displayReferenceNumber,\r\n background,\r\n objective,\r\n internalInformation,\r\n };\r\n};\r\n\r\nconst projectsMappers = {\r\n toFacilityFromDto,\r\n toProjectStatusFromDto,\r\n};\r\n\r\nexport default projectsMappers;\r\n","import Agent from 'infrastructure/agent';\r\nimport { measurementPreferencesToDto } from 'mappers';\r\nimport { projectToDTO } from 'features/projects/projects.mappers';\r\n\r\nconst createProject = (project) => Agent.post('/project', project);\r\n\r\nconst updateProject = (projectId, project) =>\r\n Agent.put(`/project/${projectId}`, projectToDTO(project));\r\n\r\nconst getProjectStatus = (projectId) =>\r\n Agent.get(`/project/${projectId}/execute/status`);\r\n\r\nconst getProjectStatusLite = (projectId) =>\r\n Agent.get(`/project/${projectId}/execute/status/lite`);\r\n\r\nconst getCurrentProjectMember = (projectId) =>\r\n Agent.get(`/project/${projectId}/members/current`);\r\n\r\nconst searchProjects = (filter) => Agent.get('/project/search', filter);\r\n\r\nconst deleteProject = (projectId) => Agent.delete(`/project/${projectId}`);\r\n\r\nconst updateMeasurementPreference = (projectId, units) =>\r\n Agent.put(\r\n `/project/${projectId}/preference/measurement`,\r\n measurementPreferencesToDto(units),\r\n );\r\n\r\nconst getWellboreByProject = (projectId) =>\r\n Agent.get(`/project/${projectId}/wellbore`);\r\n\r\nconst getWellboreTrajectoryByProject = (projectId) =>\r\n Agent.get(`/project/${projectId}/wellbore/trajectory`);\r\n\r\nconst syncProjectWellboreTrajectoryWithLatest = (projectId) =>\r\n Agent.post(`/project/${projectId}/wellbore/trajectory/sync`);\r\n\r\nconst getWellboreTrajectoryByProjectByTime = (projectId, query) =>\r\n Agent.get(`/project/${projectId}/wellbore/trajectory/bytime`, query);\r\n\r\nconst updateProjectExternalId = (projectId, externalId) =>\r\n Agent.post(`/project/${projectId}/external-reference`, { externalId });\r\n\r\nconst getFacilityDecksByProjectId = (projectId) =>\r\n Agent.get(`/project/decks/${projectId}`);\r\n\r\nconst archiveProject = (projectId, isArchive) =>\r\n Agent.put(`/project/${projectId}/archive/${isArchive}`);\r\n\r\nconst getAllProjectsGantt = (filter) =>\r\n Agent.get('/project/allprojectsgantt', filter);\r\n\r\nconst getAllProjectNonProductiveTimes = (projectId) =>\r\n Agent.get(`/project/${projectId}/npt`);\r\n\r\nconst createProjectNonProductiveTime = (projectId, projectNonProductiveTime) =>\r\n Agent.post(`/project/${projectId}/npt`, projectNonProductiveTime);\r\n\r\nexport const updateProjectNonProductiveTime = (\r\n projectId,\r\n projectNonProductiveTime,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/npt/${projectNonProductiveTime.projectNonProductiveTimeId}`,\r\n projectNonProductiveTime,\r\n );\r\n\r\nexport const deleteProjectNonProductiveTime = (\r\n projectId,\r\n projectNonProductiveTimeId,\r\n) => Agent.delete(`/project/${projectId}/npt/${projectNonProductiveTimeId}`);\r\n\r\nconst projectService = {\r\n createProject,\r\n deleteProject,\r\n updateProject,\r\n searchProjects,\r\n getProjectStatus,\r\n getProjectStatusLite,\r\n getWellboreByProject,\r\n updateProjectExternalId,\r\n updateMeasurementPreference,\r\n getWellboreTrajectoryByProject,\r\n getWellboreTrajectoryByProjectByTime,\r\n syncProjectWellboreTrajectoryWithLatest,\r\n getCurrentProjectMember,\r\n getFacilityDecksByProjectId,\r\n archiveProject,\r\n getAllProjectsGantt,\r\n getAllProjectNonProductiveTimes,\r\n createProjectNonProductiveTime,\r\n updateProjectNonProductiveTime,\r\n deleteProjectNonProductiveTime,\r\n};\r\n\r\nexport default projectService;\r\n","import moment from 'moment';\r\nimport { isImmutable } from 'immutable';\r\n\r\nimport { durationFromStartAndEndTime } from 'utils/app.util';\r\n\r\nexport const getTotalElapsedTime = (timers) => {\r\n return timers.reduce((sum, timer) => {\r\n const { startTime, endTime } = isImmutable(timer) ? timer.toJS() : timer;\r\n\r\n const duration = endTime\r\n ? durationFromStartAndEndTime(startTime, endTime)\r\n : durationFromStartAndEndTime(startTime);\r\n\r\n return sum.add(duration);\r\n }, moment.duration());\r\n};\r\n\r\nexport const getTotalElapsedTimeFromDurations = (timers) => {\r\n return timers.reduce((sum, timer) => {\r\n const { duration } = isImmutable(timer) ? timer.toJS() : timer;\r\n\r\n return sum.add(duration);\r\n }, moment.duration());\r\n};\r\n\r\nexport const ProjectExecutionHub = {\r\n RegisterOnProject: 'RegisterOnProject',\r\n RelayProjectChange: 'RelayProjectChange',\r\n SignalProjectReload: 'SignalProjectReload',\r\n};\r\n","import Agent from 'infrastructure/agent';\r\nimport activitiesMapper from 'features/projects/activities/activities.mappers';\r\nimport { ProjectExecutionHub } from 'utils/activity.util';\r\n\r\nconst allActivitiesForTask = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/activities`);\r\n\r\nconst allActivitiesForProject = (projectId) =>\r\n Agent.get(`/project/${projectId}/activities`);\r\n\r\nconst activityById = (id, rid, aid) =>\r\n Agent.get(`/project/${id}/tasks/${rid}/activities/${aid}`);\r\n\r\nconst createActivity = (projectId, taskId, activity) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/activities`,\r\n activitiesMapper.Activity.to(activity),\r\n );\r\n\r\nconst updateActivity = (projectId, taskId, activity) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/activities/${activity.id}`,\r\n activitiesMapper.Activity.to(activity),\r\n );\r\n\r\nconst deleteActivity = (projectId, taskId, activityId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/activities/${activityId}`,\r\n );\r\n\r\nconst updateActivitySetOrRetrieveItems = (projectId, taskId, updateData) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/activities/updatesetorretrievetools`,\r\n updateData,\r\n );\r\n\r\nconst deleteActivitySetOrRetrieveItems = (projectId, taskId, activityId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/activities/updatesetorretrievetools/${activityId}/delete`,\r\n );\r\n\r\nconst updateActivitySequence = (projectId, taskId, activityId, itemSequence) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/activities/${activityId}/sequence`,\r\n itemSequence,\r\n );\r\n\r\nconst startOperation = (projectId) =>\r\n Agent.post(`/project/${projectId}/execute/start`);\r\n\r\nconst completeActivity = (projectId, taskId, activityId) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/completeactivity`,\r\n activitiesMapper.CompleteActivity.to(taskId, activityId),\r\n );\r\n\r\nconst completeTask = (\r\n projectId,\r\n completeTask,\r\n status,\r\n continueWithContingencyTaskId,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/completetask`,\r\n activitiesMapper.CompleteTask.to(\r\n completeTask,\r\n status,\r\n continueWithContingencyTaskId,\r\n ),\r\n );\r\n\r\nconst completeAndRepeatTask = (projectId, completeTask, status) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/completetaskrepeat`,\r\n activitiesMapper.CompleteTask.to(completeTask, status),\r\n );\r\n\r\nconst completeTaskAndEndOperation = (projectId, completeTask, status) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/completetaskend`,\r\n activitiesMapper.CompleteTask.to(completeTask, status),\r\n );\r\n\r\nconst getAllActivityTypes = () =>\r\n Agent.get('/search/filter/valueset/activitytypes');\r\n\r\nconst getAllWaitingActivityTypes = () =>\r\n Agent.get('/search/filter/valueset/activitytypes/waiting');\r\n\r\nconst getAllPointInTimeActivityTypes = () =>\r\n Agent.get('/search/filter/valueset/activitytypes/pointintime');\r\n\r\nconst createNewPointInTimeActivity = (\r\n projectId,\r\n taskId,\r\n activityId,\r\n activityTypeId,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/newpointintimeactivity`,\r\n activitiesMapper.CreateActivity.to(taskId, activityId, activityTypeId),\r\n );\r\n\r\nconst pauseActivity = (projectId, taskId, activityId, activityTypeId) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/pauseactivity`,\r\n activitiesMapper.CreateActivity.to(taskId, activityId, activityTypeId),\r\n );\r\n\r\nconst endOperation = (projectId, endOperation) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/end`,\r\n activitiesMapper.EndOperation.to(endOperation),\r\n );\r\n\r\nconst completeActivityAbortTask = (projectId, taskId, activityId) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/completeactivityend`,\r\n activitiesMapper.CompleteActivity.to(taskId, activityId),\r\n );\r\n\r\nconst getAllProjectTimers = (projectId) =>\r\n Agent.get(`/project/${projectId}/execute/timers`);\r\n\r\nconst updateProjectTimer = (projectId, timer) =>\r\n Agent.put(\r\n `/project/${projectId}/execute/timers/${timer.id}`,\r\n activitiesMapper.Timer.to(timer),\r\n );\r\n\r\nconst createProjectTimer = (projectId, timer) =>\r\n Agent.post(\r\n `/project/${projectId}/execute/timers`,\r\n activitiesMapper.Timer.to(timer),\r\n );\r\n\r\nconst goBack = (projectId) =>\r\n Agent.post(`/project/${projectId}/execute/goback`);\r\n\r\nconst sendProjectChangedNotification = (connection, projectId, taskId) =>\r\n connection.invoke(ProjectExecutionHub.RelayProjectChange, projectId, taskId);\r\n\r\nconst activitiesService = {\r\n goBack,\r\n activityById,\r\n completeTask,\r\n endOperation,\r\n allActivitiesForTask,\r\n pauseActivity,\r\n updateActivity,\r\n createActivity,\r\n deleteActivity,\r\n startOperation,\r\n completeActivity,\r\n sendProjectChangedNotification,\r\n createProjectTimer,\r\n updateProjectTimer,\r\n getAllProjectTimers,\r\n getAllActivityTypes,\r\n completeAndRepeatTask,\r\n updateActivitySequence,\r\n allActivitiesForProject,\r\n completeActivityAbortTask,\r\n getAllWaitingActivityTypes,\r\n completeTaskAndEndOperation,\r\n createNewPointInTimeActivity,\r\n getAllPointInTimeActivityTypes,\r\n updateActivitySetOrRetrieveItems,\r\n deleteActivitySetOrRetrieveItems,\r\n};\r\n\r\nexport default activitiesService;\r\n","import { isMobile } from 'react-device-detect';\r\n\r\nexport const useViewMode = () => {\r\n return isMobile ? 'mobile' : 'desktop';\r\n};\r\n","import moment from 'moment';\r\nimport { initialize } from 'redux-form/immutable';\r\nimport { replace } from 'connected-react-router/immutable';\r\n\r\nimport {\r\n ACTIVITIES_ACTIONS as ACTIONS,\r\n ACTIVITIES_ACTIONS,\r\n COMPLETE_TASK_FORM,\r\n COMPLETE_TASK_MODAL_ID,\r\n CREATE_ACTIVITY_FORM,\r\n CREATE_ACTIVITY_MODAL_ID,\r\n CREATE_TIMER_ENTRY_MODAL_ID,\r\n CREATE_TIMER_FORM,\r\n EDIT_ACTIVITY_FORM,\r\n EDIT_ACTIVITY_MODAL_ID,\r\n EDIT_TIMER_ENTRY_MODAL_ID,\r\n EDIT_TIMER_FORM,\r\n END_OPERATION_FORM,\r\n END_OPERATION_MODAL_ID,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport { Format, NOTIFICATION_VARIANTS, APP_ACTIONS } from 'app/app.constants';\r\n\r\nimport { toggleModal } from 'app/app.actions';\r\nimport taskService from 'services/task.service';\r\nimport { toExecutionSection } from 'utils/route.util';\r\nimport projectsService from 'services/project.service';\r\nimport activitiesService from 'services/activities.service';\r\nimport { formatDate, formatDuration } from 'utils/format.util';\r\nimport { getFormFromState, getFormValuesFromState } from 'app/app.selectors';\r\nimport { durationFromStartAndEndTime } from 'utils/app.util';\r\nimport activitiesMappers from 'features/projects/activities/activities.mappers';\r\nimport { useViewMode } from 'app/hooks/useViewMode';\r\n\r\nexport const onLoad = (projectId) => (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.ACTIVITIES_INITIALIZED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllTasks(projectId)),\r\n dispatch(getProjectTimers(projectId)),\r\n dispatch(getProjectStatusLite(projectId)),\r\n ]),\r\n });\r\n};\r\n\r\nexport const getAllActivityTypes = () => (dispatch) => {\r\n const payload = activitiesService.getAllActivityTypes();\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_ALL_ACTIVITY_TYPES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getAllTasks = (projectId) => (dispatch) => {\r\n const payload = taskService.getAllTasks(projectId);\r\n\r\n dispatch({\r\n payload,\r\n type: ACTIVITIES_ACTIONS.GET_ALL_TASKS,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getAllTasksWithProjects = (projectId) => (dispatch) => {\r\n const payload = taskService.getAllTasksWithProjects(projectId);\r\n\r\n dispatch({\r\n payload,\r\n type: ACTIVITIES_ACTIONS.GET_ALL_TASKS,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const redirectToTask = (projectId, taskId) => (dispatch) => {\r\n dispatch(replace(toExecutionSection(projectId, taskId, 'activities')));\r\n};\r\n\r\nexport const onUnload = () => (dispatch) => {\r\n dispatch({ type: ACTIVITIES_ACTIONS.ACTIVITIES_UNINITIALIZED });\r\n};\r\n\r\nexport const activityListOnLoad = (projectId, taskId) => (dispatch) => {\r\n const payload = dispatch(getTaskActivities(projectId, taskId));\r\n\r\n dispatch({\r\n taskId,\r\n type: ACTIVITIES_ACTIONS.ACTIVITY_LIST_LOADED,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const activityListOnUnload = () => (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.ACTIVITY_LIST_UNLOADED,\r\n });\r\n};\r\n\r\nexport const selectActivity = (index) => (dispatch) =>\r\n dispatch(\r\n toggleModal({ modalId: EDIT_ACTIVITY_MODAL_ID, activeIndex: index }),\r\n );\r\n\r\nexport const updateActivity =\r\n (projectId, taskId, activity, connection) => (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.INITIATE_UPDATE_ACTIVITY,\r\n projectId,\r\n taskId,\r\n activity,\r\n connection,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The activity was successfully updated',\r\n },\r\n });\r\n };\r\n\r\nexport const getActivityPdf =\r\n (projectId, taskId, activityId) => (dispatch, getState) => {\r\n const state = getState();\r\n const { values } = getFormFromState(state, EDIT_ACTIVITY_FORM.ID).toJS();\r\n\r\n activitiesService\r\n .updateActivity(projectId, taskId, values)\r\n .then(() => {\r\n dispatch(getTaskActivities(projectId, taskId));\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.DOWNLOAD_ACTIVITY_PDF,\r\n projectId,\r\n taskId,\r\n activityId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The activity was successfully updated',\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to update the activity',\r\n },\r\n });\r\n })\r\n .catch(() => {\r\n dispatch({\r\n hideable: true,\r\n type: APP_ACTIONS.ADD_NOTIFICATION,\r\n notification: {\r\n message: 'Failed to update the activity',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n },\r\n });\r\n });\r\n };\r\n\r\nexport const updateActivityTimes =\r\n (projectId, taskId, autosave, values, formikPrimitives, connection) =>\r\n (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.INITIATE_UPDATE_ACTIVITY_TIMES,\r\n projectId,\r\n taskId,\r\n autosave,\r\n values,\r\n formikPrimitives,\r\n connection,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The activity was successfully updated',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to update activity times',\r\n },\r\n });\r\n };\r\n\r\nexport const updateActivityFormOnSubmitWithNotification =\r\n (connection) =>\r\n (projectId, taskId, autosave, reset, callback) =>\r\n (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.INITIATE_UPDATE_ACTIVITY_FORM_WITH_NOTIFICATION,\r\n projectId,\r\n taskId,\r\n autosave,\r\n callback,\r\n connection,\r\n reset,\r\n });\r\n };\r\n\r\nexport const updateActivityFormOnSubmitWithoutNotification =\r\n (projectId, taskId, autosave, callback) => (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.INITIATE_UPDATE_ACTIVITY_FORM_WITHOUT_NOTIFICATION,\r\n projectId,\r\n taskId,\r\n autosave,\r\n callback,\r\n });\r\n };\r\n\r\nconst confirmDeleteActivityWithBase =\r\n (actionType) =>\r\n (projectId, taskId, activityId, index, isSubActivity, connection) =>\r\n (dispatch) => {\r\n dispatch({\r\n type: actionType,\r\n projectId,\r\n taskId,\r\n activityId,\r\n index,\r\n isSubActivity,\r\n connection,\r\n });\r\n };\r\nconst confirmDeleteActivityWithNotification = confirmDeleteActivityWithBase(\r\n ACTIVITIES_ACTIONS.INITIATE_CONFIRM_DELETE_ACTIVITY_WITH_NOTIFICATION,\r\n);\r\nconst confirmDeleteActivityWithoutNotification = confirmDeleteActivityWithBase(\r\n ACTIVITIES_ACTIONS.INITIATE_CONFIRM_DELETE_ACTIVITY_WITHOUT_NOTIFICATION,\r\n);\r\n\r\nconst deleteActivityBase =\r\n (confirmDeleteActionFn) =>\r\n (projectId, taskId, activityId, index, isSubActivity, connection) =>\r\n (dispatch) =>\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.PROJECT_ACTIVITIES_DELETE_ACTIVITY,\r\n confirmationDialog: {\r\n description: 'Are you sure you want to delete this activity?',\r\n title: 'Delete activity',\r\n },\r\n payload: () =>\r\n dispatch(\r\n confirmDeleteActionFn(\r\n projectId,\r\n taskId,\r\n activityId,\r\n index,\r\n isSubActivity,\r\n connection,\r\n ),\r\n ),\r\n });\r\n\r\nexport const deleteActivityWithNotification = deleteActivityBase(\r\n confirmDeleteActivityWithNotification,\r\n);\r\nexport const deleteActivityNoNotification = deleteActivityBase(\r\n confirmDeleteActivityWithoutNotification,\r\n);\r\n\r\nexport const sortActivitiesBase =\r\n (actionType) => (projectId, taskId, indices, connection) => (dispatch) => {\r\n const { oldIndex, newIndex } = indices;\r\n dispatch({\r\n type: actionType,\r\n projectId,\r\n taskId,\r\n oldIndex,\r\n newIndex,\r\n connection,\r\n });\r\n };\r\n\r\n// This function will emit msg to SignalR hub\r\nexport const sortActivitiesWithNotification = sortActivitiesBase(\r\n ACTIVITIES_ACTIONS.INITIATE_SORT_ACTIVITIES,\r\n);\r\n// Default version, no message to SignalR hub\r\nexport const sortActivities = sortActivitiesBase(\r\n ACTIVITIES_ACTIONS.INITIATE_SORT_ACTIVITIES_NO_NOTIFICATION,\r\n);\r\n\r\n// Connection being SignalR connection\r\nexport const handleEstablishingConnectionError = () => (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.ESTABLISHING_REAL_TIME_CONNECTION_FAILED,\r\n });\r\n};\r\n\r\nexport const onEnterEditActivityModal = (activity) => (dispatch) => {\r\n const startTime = activity.startTime;\r\n const endTime = activity.endTime;\r\n const duration =\r\n startTime &&\r\n endTime &&\r\n formatDuration(\r\n durationFromStartAndEndTime(startTime, endTime),\r\n Format.duration_short,\r\n );\r\n\r\n dispatch(\r\n initialize(EDIT_ACTIVITY_FORM.ID, {\r\n ...activity,\r\n [EDIT_ACTIVITY_FORM.START_TIME]: formatDate(\r\n startTime,\r\n Format.datetime_local,\r\n ),\r\n [EDIT_ACTIVITY_FORM.END_TIME]: formatDate(endTime, Format.datetime_local),\r\n [EDIT_ACTIVITY_FORM.EDITED_DURATION]: duration ? duration : null,\r\n }),\r\n );\r\n};\r\n\r\nexport const toggleCreateActivityModal = (mode, sequence) => (dispatch) => {\r\n dispatch(\r\n toggleModal({\r\n modalId: CREATE_ACTIVITY_MODAL_ID,\r\n payload: () =>\r\n dispatch(\r\n initialize(CREATE_ACTIVITY_FORM.ID, {\r\n [CREATE_ACTIVITY_FORM.MODE]: mode,\r\n // create new activities after the current, if any\r\n [CREATE_ACTIVITY_FORM.SEQUENCE]: sequence + 1,\r\n }),\r\n ),\r\n }),\r\n );\r\n};\r\n\r\nexport const createActivityBase =\r\n (actionType) => (taskId, connection) => (dispatch) => (values) => {\r\n dispatch({\r\n type: actionType,\r\n taskId,\r\n connection,\r\n values,\r\n });\r\n };\r\n\r\nexport const duplicateActivityBase =\r\n (actionType) => (taskId, connection, values) => (dispatch) => {\r\n dispatch({\r\n type: actionType,\r\n taskId,\r\n connection,\r\n values,\r\n });\r\n };\r\n\r\nexport const createActivity = createActivityBase(\r\n ACTIONS.INITIATE_CREATE_ACTIVITY_WITHOUT_NOTIFICATION,\r\n);\r\nexport const createActivityWithNotification = createActivityBase(\r\n ACTIONS.INITIATE_CREATE_ACTIVITY_WITH_NOTIFICATION,\r\n);\r\nexport const duplicateActivityWithNotification = duplicateActivityBase(\r\n ACTIONS.PROJECT_ACTIVITIES_DUPLICATE_ACTIVITY,\r\n);\r\n\r\nexport const startOperation = (allTaskActivities) => {\r\n return {\r\n type: ACTIVITIES_ACTIONS.START_OPERATION,\r\n payload: allTaskActivities,\r\n };\r\n};\r\n\r\nexport const startOperationInitiate = (projectId, taskId) => (dispatch) => {\r\n dispatch({\r\n taskId,\r\n projectId,\r\n type: ACTIVITIES_ACTIONS.START_OPERATION_INITIATE,\r\n });\r\n};\r\n\r\nexport const completeActivity =\r\n (projectId, taskId, activityId, connection) => (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.INITIATE_COMPLETE_ACTIVITY,\r\n projectId,\r\n taskId,\r\n activityId,\r\n connection,\r\n });\r\n };\r\n\r\n/// Handling same functionality as completeTask but by using redux-saga\r\n/// This is the new way of handling this functionality\r\n/// For now only default case (completeTaskDefault) is implemented.\r\nexport const completeTask =\r\n (\r\n projectId,\r\n completeTaskMode,\r\n continueWithContingencyTaskId,\r\n values,\r\n connection,\r\n setSubmitting,\r\n ) =>\r\n (dispatch) => {\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.INITATE_COMPLETE_TASK,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Please wait...',\r\n },\r\n projectId,\r\n completeTaskMode,\r\n continueWithContingencyTaskId,\r\n values,\r\n connection,\r\n setSubmitting,\r\n });\r\n };\r\n\r\nexport const setProjectStatus = (status) => (dispatch) => {\r\n dispatch(setProjectStatusAsPlainAction(status));\r\n return status;\r\n};\r\n\r\nexport const setProjectStatusAsPlainAction = (status) => {\r\n return {\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_STATUS,\r\n payload: status,\r\n };\r\n};\r\n\r\nexport const getProjectStatusLite = (projectId) => (dispatch) => {\r\n const payload = projectsService.getProjectStatusLite(projectId);\r\n const viewMode = useViewMode();\r\n if (viewMode === 'mobile')\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_STATUS_MOBILE,\r\n payload,\r\n });\r\n else\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_STATUS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getProjectStatus = (projectId) => (dispatch) => {\r\n const payload = projectsService.getProjectStatus(projectId);\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_STATUS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const refreshProjectStatus = (projectId, taskId) => (dispatch) => {\r\n projectsService.getProjectStatusLite(projectId).then((status) => {\r\n return dispatch(\r\n getTaskActivities(projectId, taskId, { silent: true }),\r\n ).then(() => dispatch(setProjectStatus(status)));\r\n });\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.REFRESH_PROJECT_STATUS,\r\n });\r\n};\r\n\r\nexport const toggleCompleteTaskModal = (objectivesMet, task) => (dispatch) => {\r\n dispatch(\r\n toggleModal({\r\n modalId: COMPLETE_TASK_MODAL_ID,\r\n payload: () =>\r\n dispatch(\r\n initialize(COMPLETE_TASK_FORM.ID, {\r\n [COMPLETE_TASK_FORM.OBJECTIVES_MET]: objectivesMet,\r\n [COMPLETE_TASK_FORM.TASK_ID]: task.id,\r\n [COMPLETE_TASK_FORM.COMMENTS]: task.comments,\r\n }),\r\n ),\r\n }),\r\n );\r\n};\r\n\r\nexport const toggleEndOperationModal = (isProjectSuccessful) => (dispatch) => {\r\n dispatch(\r\n toggleModal({\r\n modalId: END_OPERATION_MODAL_ID,\r\n payload: () =>\r\n dispatch(\r\n initialize(END_OPERATION_FORM.ID, {\r\n [END_OPERATION_FORM.IS_SUCCESSFUL]: isProjectSuccessful,\r\n }),\r\n ),\r\n }),\r\n );\r\n};\r\n\r\nexport const getAllWaitingActivityTypes = () => (dispatch) => {\r\n const payload = activitiesService.getAllWaitingActivityTypes();\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_WAITING_ACTIVITY_TYPES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getAllPointInTimeActivityTypes = () => (dispatch) => {\r\n const payload = activitiesService.getAllPointInTimeActivityTypes();\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_POINT_IN_TIME_ACTIVITY_TYPES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const createNewPointInTimeActivity =\r\n (projectId, taskId, activityId, activityTypeId, connection) => (dispatch) => {\r\n dispatch({\r\n projectId,\r\n taskId,\r\n activityId,\r\n activityTypeId,\r\n connection,\r\n type: ACTIVITIES_ACTIONS.INITIATE_CREATE_NEW_POINT_IN_TIME_ACTIVITY,\r\n });\r\n };\r\n\r\nexport const pauseActivity =\r\n (projectId, taskId, activityId, activityTypeId, connection) => (dispatch) => {\r\n dispatch({\r\n type: ACTIONS.INITIATE_PAUSE_ACTIVITY,\r\n projectId,\r\n taskId,\r\n activityId,\r\n activityTypeId,\r\n connection,\r\n });\r\n };\r\n\r\nexport const completeActivityAbortTask =\r\n (projectId, taskId, activityId, connection) => (dispatch) => {\r\n const payload = activitiesService\r\n .completeActivityAbortTask(projectId, taskId, activityId)\r\n .then((status) => dispatch(setProjectStatus(status)))\r\n .then((status) =>\r\n activitiesService\r\n .sendProjectChangedNotification(connection, projectId, taskId)\r\n .then(() => status),\r\n );\r\n\r\n dispatch({\r\n taskId,\r\n payload,\r\n projectId,\r\n type: ACTIVITIES_ACTIONS.COMPLETE_ACTIVITY_ABORT_TASK,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const endOperation = (projectId) => (dispatch, getState) => {\r\n const values = getFormValuesFromState(\r\n getState(),\r\n END_OPERATION_FORM.ID,\r\n ).toJS();\r\n\r\n dispatch({\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Project successfully completed',\r\n },\r\n confirmationDialog: {\r\n description:\r\n 'Are you sure you want to complete this project? This will change the project status to Report and cannot be undone',\r\n title: 'Are you sure?',\r\n confirmButtonText: 'Yes, complete project',\r\n onCancel: toggleModal({\r\n modalId: END_OPERATION_MODAL_ID,\r\n }),\r\n },\r\n type: ACTIVITIES_ACTIONS.END_OPERATION,\r\n payload: () => activitiesService.endOperation(projectId, values),\r\n });\r\n};\r\n\r\nexport const goBack =\r\n (projectId, previousCurrentTaskId, connection) => (dispatch) => {\r\n dispatch({\r\n projectId,\r\n connection,\r\n previousCurrentTaskId,\r\n type: ACTIVITIES_ACTIONS.CONFIRM_ACTIVITY_GO_BACK,\r\n });\r\n };\r\n\r\nexport const onEnterEditTimerModal = (timer) => (dispatch) => {\r\n const startTime = timer.startTime;\r\n const endTime = timer.endTime;\r\n const duration =\r\n startTime &&\r\n formatDuration(\r\n durationFromStartAndEndTime(startTime, endTime),\r\n Format.duration_short,\r\n );\r\n\r\n dispatch(\r\n initialize(EDIT_TIMER_FORM.ID, {\r\n ...timer,\r\n [EDIT_TIMER_FORM.START_TIME]: formatDate(\r\n startTime,\r\n Format.datetime_local,\r\n ),\r\n [EDIT_TIMER_FORM.END_TIME]: formatDate(endTime, Format.datetime_local),\r\n [EDIT_TIMER_FORM.EDITED_DURATION]: duration ? duration : null,\r\n }),\r\n );\r\n};\r\n\r\nexport const onEnterCreateTimerModal = (typeId) => (dispatch) => {\r\n const now = moment();\r\n\r\n dispatch(\r\n initialize(CREATE_TIMER_FORM.ID, {\r\n [CREATE_TIMER_FORM.TIMER_TYPE]: typeId,\r\n [CREATE_TIMER_FORM.START_TIME]: formatDate(now, Format.datetime_local),\r\n [CREATE_TIMER_FORM.END_TIME]: formatDate(now, Format.datetime_local),\r\n [CREATE_TIMER_FORM.DURATION]: formatDuration(moment.duration()),\r\n }),\r\n );\r\n};\r\n\r\nexport const editTimer = (projectId, timer) => (dispatch) => {\r\n const timerJS = timer.toJS();\r\n const payload = activitiesService\r\n .updateProjectTimer(projectId, timerJS)\r\n .then(() => dispatch(getProjectTimers(projectId)))\r\n .then((response) =>\r\n dispatch(\r\n toggleModal({ modalId: EDIT_TIMER_ENTRY_MODAL_ID, payload: response }),\r\n ),\r\n );\r\n\r\n dispatch({\r\n id: timerJS.id,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The timer was successfully updated',\r\n },\r\n type: ACTIVITIES_ACTIONS.EDIT_TIMER,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const createTimer = (projectId, timer) => (dispatch) => {\r\n const timerJS = timer.toJS();\r\n const payload = activitiesService\r\n .createProjectTimer(projectId, timerJS)\r\n .then(() => dispatch(getProjectTimers(projectId)))\r\n .then((response) =>\r\n dispatch(\r\n toggleModal({\r\n modalId: CREATE_TIMER_ENTRY_MODAL_ID,\r\n payload: response,\r\n }),\r\n ),\r\n );\r\n\r\n dispatch({\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'A new entry was successfully created',\r\n },\r\n type: ACTIVITIES_ACTIONS.CREATE_TIMER,\r\n payload,\r\n });\r\n return payload;\r\n};\r\n\r\nexport const getProjectActivities = (projectId) => (dispatch) => {\r\n const payload = activitiesService.allActivitiesForProject(projectId);\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_ACTIVITIES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getAllProjectActivities = (projectId) => (dispatch) => {\r\n const payload = activitiesService.allActivitiesForProject(projectId);\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_ALL_PROJECT_ACTIVITIES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getTaskActivities = (projectId, taskId) => (dispatch) => {\r\n const payload = activitiesService.allActivitiesForTask(projectId, taskId);\r\n\r\n dispatch({\r\n taskId,\r\n payload,\r\n type: ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\n/**\r\n * Proper name should be getTaskActivities but that is already used in previous method\r\n * @param taskId\r\n * @param payload\r\n * @return {{payload, type: string, taskId}}\r\n */\r\nexport const getTaskActivitiesDispatchOnly = (taskId, payload) => {\r\n return {\r\n taskId,\r\n payload,\r\n type: ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n };\r\n};\r\n\r\nexport const getProjectTimers = (projectId) => (dispatch) => {\r\n const payload = activitiesService.getAllProjectTimers(projectId);\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_TIMERS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateActivitySetOrRetrieveItems =\r\n (projectId, taskId, updateData) => (dispatch) => {\r\n const mappedData = updateData.map((data) =>\r\n activitiesMappers.UpdateActivitySetOrRetrieveItems.to(data),\r\n );\r\n\r\n const payload = activitiesService\r\n .updateActivitySetOrRetrieveItems(projectId, taskId, mappedData)\r\n .then(() => dispatch(getTaskActivities(projectId, taskId)));\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.UPDATE_ACTIVITY_SET_OR_RETRIEVE_ITEMS,\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The activity was successfully updated',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to update activity',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const deleteActivitySetOrRetrieveItems =\r\n (projectId, taskId, activityId) => (dispatch) => {\r\n const payload = activitiesService.deleteActivitySetOrRetrieveItems(\r\n projectId,\r\n taskId,\r\n activityId,\r\n );\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.DELETE_ACTIVITY_SET_OR_RETRIEVE_ITEMS,\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The activity was successfully updated',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to update activity',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n","export const requestDeleteFluidGeneric = (\r\n actionType,\r\n fluidOriginAsObj,\r\n fluidId,\r\n) => ({\r\n ...fluidOriginAsObj,\r\n fluidId,\r\n type: actionType,\r\n confirmationDialog: {\r\n title: 'Delete fluid',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this fluid? ',\r\n },\r\n notification: {\r\n info: 'Deleting...',\r\n success: 'Fluid successfully deleted',\r\n },\r\n});\r\n","import { TASK_ACTIONS as ACTIONS } from './tasks/tasks.constants';\r\nimport { requestDeleteFluidGeneric } from '../../utils/fluids/actions.base';\r\n\r\nexport const requestGetTaskFluids = (projectId, taskId) => ({\r\n projectId,\r\n taskId,\r\n type: ACTIONS.INITIATE_GET_TASK_FLUIDS,\r\n});\r\n\r\nexport const storeTaskFluids = (fluids) => ({\r\n type: ACTIONS.GET_TASK_FLUIDS,\r\n payload: fluids,\r\n});\r\n\r\nexport const requestDeleteTaskFluid = (projectId, taskId, fluidId) => {\r\n return requestDeleteFluidGeneric(\r\n ACTIONS.INITIATE_DELETE_TASK_FLUID,\r\n { projectId, taskId },\r\n fluidId,\r\n );\r\n};\r\n\r\nexport const deletedTaskFluid = (fluidId) => ({\r\n type: ACTIONS.DELETE_TASK_FLUID,\r\n payload: {\r\n fluidId,\r\n },\r\n});\r\n\r\nexport const requestUpdateTaskFluid = (\r\n projectId,\r\n taskId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n projectId,\r\n taskId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n type: ACTIONS.INITIATE_UPDATE_TASK_FLUID,\r\n notification: {\r\n info: 'Updating fluid...',\r\n success: 'Fluid successfully updated',\r\n },\r\n});\r\n\r\nexport const updatedTaskFluid = (fluidId, taskId) => ({\r\n type: ACTIONS.UPDATE_TASK_FLUID,\r\n payload: {\r\n fluidId,\r\n taskId,\r\n },\r\n});\r\n\r\nexport const requestCreateTaskFluid = (\r\n projectId,\r\n taskId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n projectId,\r\n taskId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n type: ACTIONS.INITIATE_CREATE_TASK_FLUID,\r\n notification: {\r\n info: 'Adding fluid...',\r\n success: 'Fluid successfully created',\r\n },\r\n});\r\n\r\nexport const createTaskFluid = (fluidId, taskId) => ({\r\n type: ACTIONS.CREATE_TASK_FLUID,\r\n payload: {\r\n fluidId,\r\n taskId,\r\n },\r\n});\r\n","import { call, put, takeEvery } from 'redux-saga/effects';\r\n\r\nimport { getAllTasks } from 'features/projects/activities/activities.actions';\r\nimport {\r\n TASK_ACTIONS as ACTIONS,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS,\r\n} from 'features/projects/tasks/tasks.constants';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\nimport {\r\n storeTaskFluids,\r\n deletedTaskFluid,\r\n updatedTaskFluid,\r\n createTaskFluid,\r\n} from 'features/projects/task.actions.fluids';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport taskService from 'services/task.service';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\n\r\nconst UPDATE_TASKS_TRIGGER_ACTIONS = [\r\n ACTIONS.COPY_TASK,\r\n ACTIONS.SORT_TASKS,\r\n ACTIONS.CONFIRM_DELETE_TASK,\r\n ACTIONS.ADD_TASKS_FROM_TEMPLATE,\r\n ACTIVITIES_ACTIONS.ACTIVITY_GO_BACK,\r\n];\r\n\r\nexport function* getAllTasksAsync(action) {\r\n const { projectId, skipTracking } = action;\r\n\r\n // use skipTracking to only fetch the tasks when the promise is complete\r\n if (!skipTracking) return;\r\n\r\n // do not fetch the tasks if projectId is missing from action\r\n if (!projectId) return;\r\n return yield put(getAllTasks(projectId));\r\n}\r\n\r\nexport function* getAllTaskFluids(action) {\r\n const { projectId, taskId } = action;\r\n const allFluids = yield call(taskService.getTaskFluids, projectId, taskId);\r\n yield put(storeTaskFluids(allFluids));\r\n}\r\n\r\nexport function* deleteTaskFluid(action) {\r\n const { projectId, taskId, fluidId } = action;\r\n yield call(taskService.deleteTaskFluid, projectId, taskId, fluidId);\r\n yield call(getAllTaskFluids, { projectId, taskId });\r\n yield put(deletedTaskFluid({ fluidId }));\r\n}\r\n\r\nexport function* addTaskFluid(action) {\r\n const { projectId, taskId, fluidObj, setSubmitting, setStatus } = action;\r\n\r\n try {\r\n yield call(taskService.addTaskFluid, projectId, taskId, fluidObj);\r\n yield call(getAllTaskFluids, { projectId, taskId });\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n yield put(createTaskFluid(fluidObj.fluidId, taskId));\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* updateTaskFluid(action) {\r\n const { projectId, taskId, fluidObj, setSubmitting, setStatus } = action;\r\n\r\n try {\r\n yield call(taskService.updateTaskFluid, projectId, taskId, fluidObj);\r\n yield call(getAllTaskFluids, { projectId, taskId });\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n yield put(updatedTaskFluid(fluidObj.fluidId, taskId));\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* updateCableSerialNumber(action) {\r\n const { payload: dto } = action;\r\n\r\n try {\r\n yield call(taskService.saveCableSerialNumberToTask, dto);\r\n yield put(getAllTasks(dto.projectId));\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(UPDATE_TASKS_TRIGGER_ACTIONS, getAllTasksAsync);\r\n yield takeEvery(\r\n ACTIONS.INITIATE_GET_TASK_FLUIDS,\r\n callAsync,\r\n getAllTaskFluids,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_DELETE_TASK_FLUID,\r\n callAsync,\r\n deleteTaskFluid,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_UPDATE_TASK_FLUID,\r\n callAsync,\r\n updateTaskFluid,\r\n );\r\n yield takeEvery(ACTIONS.INITIATE_CREATE_TASK_FLUID, callAsync, addTaskFluid);\r\n yield takeEvery(\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_CABLE_SERIAL_NUMBER,\r\n callAsync,\r\n updateCableSerialNumber,\r\n );\r\n}\r\n","import { call, put } from 'redux-saga/effects';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\nimport projectService from 'services/project.service';\r\nimport activitiesService from 'services/activities.service';\r\nimport { APP_ACTIONS } from 'app/app.constants';\r\nimport taskService from 'services/task.service';\r\n\r\nexport function* getAllActivitiesForTask(projectId, taskId) {\r\n const allActivities = yield call(\r\n activitiesService.allActivitiesForTask,\r\n projectId,\r\n taskId,\r\n );\r\n yield put({\r\n taskId,\r\n payload: allActivities,\r\n type: ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n });\r\n\r\n return allActivities;\r\n}\r\n\r\nexport function* dispatchGetProjectStatus(status) {\r\n yield put({\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_STATUS,\r\n payload: status,\r\n });\r\n}\r\n\r\nexport function* getProjectStatus(projectId) {\r\n const status = yield call(projectService.getProjectStatus, projectId);\r\n yield call(dispatchGetProjectStatus, status);\r\n return status;\r\n}\r\n\r\nexport function* sendProjectChangedNotification(connection, projectId, taskId) {\r\n const notificationResponse = yield call(\r\n activitiesService.sendProjectChangedNotification,\r\n connection,\r\n projectId,\r\n taskId,\r\n );\r\n yield put({\r\n payload: notificationResponse,\r\n type: ACTIVITIES_ACTIONS.SEND_ACTIVITY_UPDATED_NOTIFICATION,\r\n });\r\n}\r\n\r\nexport function* Identity(...args) {\r\n return yield [...args];\r\n}\r\n\r\nexport function* toggleModal(action) {\r\n const { modalId, force = false, activeIndex, payload, ...extra } = action;\r\n yield put({\r\n type: APP_ACTIONS.TOGGLE_MODAL,\r\n modalId,\r\n force,\r\n payload,\r\n activeIndex,\r\n ...extra,\r\n });\r\n return payload;\r\n}\r\n\r\nexport function* getAllTask(projectId) {\r\n const payload = yield call(taskService.getAllTasks, projectId);\r\n yield put({\r\n payload,\r\n type: ACTIVITIES_ACTIONS.GET_ALL_TASKS,\r\n });\r\n return payload;\r\n}\r\n","import { fromJS } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { createSelector } from 'utils/app.util';\r\n\r\nconst initialProject = fromJS(mappers.Project.initial());\r\n\r\nconst getWellboreSectionSelector = (state) =>\r\n state.getIn(['entity', 'wellboreSection']);\r\n\r\nconst getProjectSelector = (state) => state.getIn(['entity', 'project']);\r\n\r\nexport const getProjectsFromState = createSelector(\r\n getProjectSelector,\r\n (projects) => projects,\r\n);\r\n\r\nexport const getFacilitiesFromState = createSelector(\r\n (state) => state.getIn(['projects', 'data', 'data', 'facilities']),\r\n (facilities) => facilities,\r\n);\r\n\r\nexport const getDepartmentsFromState = createSelector(\r\n (state) => state.getIn(['projects', 'data', 'data', 'departments']),\r\n (departments) => departments,\r\n);\r\n\r\nexport const getProjectStatusesFromState = createSelector(\r\n (state) => state.getIn(['projects', 'data', 'data', 'statuses']),\r\n (statuses) => statuses,\r\n);\r\n\r\nexport const getGanttProjectsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'ganttProjects']),\r\n (statuses) => statuses,\r\n);\r\n\r\nexport const getCurrentProject = createSelector(\r\n (state) => state.getIn(['projects', 'details', 'project']),\r\n (project) => project,\r\n);\r\n\r\nexport const createProjectSelector = (projectId) =>\r\n createSelector(\r\n getProjectSelector,\r\n (projects) => projects.get(projectId?.toString()) ?? initialProject, // fallback to initialProject for now to not break anything\r\n );\r\n\r\nexport const getCurrentProjectIdFromState = createSelector(\r\n getCurrentProject,\r\n (project) => (project ? project.get('id') : undefined),\r\n);\r\n\r\nexport const createProjectWellboreSectionsSelector = (projectId) =>\r\n createSelector(getWellboreSectionSelector, (wellboreSections) =>\r\n wellboreSections\r\n .filter((section) => section?.get('projectId'))\r\n .groupBy((section) => section.get('projectId').toString())\r\n .get(projectId.toString()),\r\n );\r\n\r\nexport const getProjectFluidsSelector = createSelector(\r\n (state) => state.getIn(['projects', 'details', 'fluids']),\r\n (fluids) => fluids,\r\n);\r\n\r\nexport const getProjectRiskSectionSelector = (state) => {\r\n var task = state.getIn(['projects', 'details', 'project', 'projectRisk']);\r\n return task;\r\n};\r\n\r\nexport const createProjectRiskSectionsSelector = () =>\r\n createSelector(getProjectRiskSectionSelector, (sections) => {\r\n return sections;\r\n });\r\n\r\nexport const getTaskRiskSectionByProjectSelector = (state) => {\r\n var task = state.getIn(['projects', 'details', 'project', 'taskRisk']);\r\n return task;\r\n};\r\n\r\nexport const createTaskRiskSectionByProjectSelector = () =>\r\n createSelector(getTaskRiskSectionByProjectSelector, (sections) => {\r\n return sections;\r\n });\r\n","import { call, put, select, takeEvery } from 'redux-saga/effects';\r\nimport activitiesService from 'services/activities.service';\r\nimport {\r\n getProjectStatus,\r\n Identity,\r\n sendProjectChangedNotification,\r\n toggleModal,\r\n} from './common.sagas';\r\nimport {\r\n ACTIVITIES_ACTIONS as ACTIONS,\r\n ACTIVITIES_ACTIONS,\r\n CREATE_ACTIVITY_MODAL_ID,\r\n CREATE_ACTIVITY_MODE,\r\n} from '../activities.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\n\r\nfunction* callCreateActivityService(\r\n actionType,\r\n sendNotificationFn,\r\n projectId,\r\n taskId,\r\n values,\r\n connection,\r\n) {\r\n const payload = yield call(\r\n activitiesService.createActivity,\r\n projectId,\r\n taskId,\r\n values,\r\n );\r\n const status = yield call(getProjectStatus, projectId);\r\n yield call(sendNotificationFn, connection, projectId, taskId);\r\n yield put({\r\n taskId,\r\n payload: status,\r\n projectId,\r\n skipTracking: true,\r\n type: actionType,\r\n });\r\n return payload;\r\n}\r\n\r\nfunction* createActivity(action, sendNotificationFn) {\r\n const { taskId, connection, values } = action;\r\n const { id: projectId } = (yield select(getCurrentProject)).toJS();\r\n\r\n switch (values.get('mode')) {\r\n case CREATE_ACTIVITY_MODE.QUICK:\r\n yield call(\r\n callCreateActivityService,\r\n ACTIVITIES_ACTIONS.QUICK_ADD_ACTIVITY,\r\n sendNotificationFn,\r\n projectId,\r\n taskId,\r\n values.toJS(),\r\n connection,\r\n );\r\n break;\r\n\r\n default:\r\n yield call(\r\n callCreateActivityService,\r\n ACTIVITIES_ACTIONS.ADD_ACTIVITY_DEFAULT,\r\n sendNotificationFn,\r\n projectId,\r\n taskId,\r\n values.toJS(),\r\n connection,\r\n );\r\n break;\r\n }\r\n yield put({\r\n type: ACTIONS.PROJECT_ACTIVITIES_ADD_ACTIVITY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'A new activity was successfully added',\r\n },\r\n });\r\n}\r\n\r\nfunction* duplicateActivity(action, sendNotificationFn) {\r\n const { taskId, connection, values } = action;\r\n const { id: projectId } = (yield select(getCurrentProject)).toJS();\r\n\r\n yield call(\r\n callCreateActivityService,\r\n ACTIVITIES_ACTIONS.QUICK_ADD_ACTIVITY,\r\n sendNotificationFn,\r\n projectId,\r\n taskId,\r\n values.toJS(),\r\n connection,\r\n );\r\n}\r\n\r\nfunction* createActivityWithNotification(action) {\r\n yield call(createActivity, action, sendProjectChangedNotification);\r\n}\r\n\r\nfunction* duplicateActivityWithNotification(action) {\r\n yield call(duplicateActivity, action, sendProjectChangedNotification);\r\n}\r\n\r\nfunction* createActivityWithoutNotification(action) {\r\n yield call(createActivity, action, Identity);\r\n}\r\n\r\nfunction* toggleActivityCreatedDialog() {\r\n yield call(toggleModal, { modalId: CREATE_ACTIVITY_MODAL_ID });\r\n}\r\n\r\nexport function* rootCreateActivity() {\r\n yield takeEvery(\r\n ACTIONS.INITIATE_CREATE_ACTIVITY_WITH_NOTIFICATION,\r\n callAsync,\r\n createActivityWithNotification,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_CREATE_ACTIVITY_WITHOUT_NOTIFICATION,\r\n callAsync,\r\n createActivityWithoutNotification,\r\n );\r\n yield takeEvery(\r\n ACTIONS.PROJECT_ACTIVITIES_ADD_ACTIVITY,\r\n callAsync,\r\n toggleActivityCreatedDialog,\r\n );\r\n yield takeEvery(\r\n ACTIONS.PROJECT_ACTIVITIES_DUPLICATE_ACTIVITY,\r\n callAsync,\r\n duplicateActivityWithNotification,\r\n );\r\n}\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getCurrentProjectWellboreFromState = createSelector(\r\n (state) => state.getIn(['projects', 'wellbore']),\r\n (projectWellbore) => projectWellbore,\r\n);\r\n\r\nexport const getCurrentProjectWellboreTrajectoryFromState = createSelector(\r\n (state) => state.getIn(['projects', 'wellbore', 'trajectory']),\r\n (projectWellboreTrajectory) => projectWellboreTrajectory,\r\n);\r\n","import { List } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { createSelector } from 'utils/app.util';\r\nimport { getTotalElapsedTimeFromDurations } from 'utils/activity.util';\r\nimport { STATE } from 'features/projects/activities/activities.constants';\r\nimport { getCurrentProjectWellboreFromState } from 'features/projects/wellbore/projectWellbore.selectors';\r\n\r\nexport const getActivitiesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'activity']),\r\n (activities) => activities,\r\n);\r\n\r\nexport const getAllActivitiesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'activity', 'allActivities']),\r\n (activities) => activities,\r\n);\r\n\r\nexport const createTaskActivitiesSelector = (taskId) =>\r\n createSelector(getActivitiesFromState, (activitiesByTaskId) =>\r\n activitiesByTaskId.get(taskId?.toString()),\r\n );\r\n\r\nexport const createTaskAllActivitiesSelector = (taskId) =>\r\n createSelector(getAllActivitiesFromState, (activitiesByTaskId) =>\r\n activitiesByTaskId.get(taskId?.toString()),\r\n );\r\n\r\nexport const createProjectActivitiesSelector = (projectId) =>\r\n createSelector(getAllActivitiesFromState, (activitiesByTaskId) =>\r\n activitiesByTaskId\r\n .flatten(1)\r\n .groupBy((activity) => activity.get('projectId').toString())\r\n .get(projectId?.toString()),\r\n );\r\n\r\nexport const createProjectAllActivitiesSelector = (projectId) =>\r\n createSelector(getAllActivitiesFromState, (activitiesByTaskId) =>\r\n activitiesByTaskId\r\n .flatten(1)\r\n .groupBy((activity) => activity.get('projectId').toString())\r\n .get(projectId?.toString()),\r\n );\r\n\r\nexport const getActivityTypes = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'activities',\r\n STATE.DATA,\r\n STATE.DATA_ACTIVITY_TYPES,\r\n ]),\r\n (activityTypes) => activityTypes,\r\n);\r\n\r\nexport const getWaitingActivityTypes = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'activities',\r\n 'data',\r\n STATE.DATA_ACTIVITY_TYPES_WAITING,\r\n ]),\r\n (waitingActivityTypes) => waitingActivityTypes,\r\n);\r\n\r\nexport const getPointInTimeActivityTypes = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'activities',\r\n 'data',\r\n STATE.DATA_ACTIVITY_TYPES_POINT_IN_TIME,\r\n ]),\r\n (pointIntimeActivities) => pointIntimeActivities,\r\n);\r\n\r\nexport const getAllTasks = createSelector(\r\n (state) =>\r\n state.getIn(['projects', 'activities', STATE.DATA, STATE.DATA_TASKS]),\r\n (tasks) => tasks,\r\n);\r\n\r\nexport const getActivityTaskByTaskId = (taskId) =>\r\n createSelector(getAllTasks, (allTasks) => {\r\n return allTasks.find((task) => task.get('taskId') === parseInt(taskId));\r\n });\r\n\r\nexport const getExecuteStatusFromState = createSelector(\r\n (state) => state.getIn(['projects', 'progress']),\r\n (status) => status,\r\n);\r\n\r\nexport const getTimersByTypeId = createSelector(\r\n (state, timerTypeId) =>\r\n state.getIn([\r\n 'projects',\r\n 'activities',\r\n STATE.DATA,\r\n STATE.TIMERS,\r\n `${timerTypeId}`,\r\n ]),\r\n (timers) => timers || List(),\r\n);\r\n\r\nexport const getTotalElapsedTimeFromState = createSelector(\r\n getTimersByTypeId,\r\n (timers) => getTotalElapsedTimeFromDurations(timers),\r\n);\r\n\r\nexport const getAutosaveDataStateFromState = createSelector(\r\n (state) => state.getIn(['projects', 'activities', 'data', 'autosave']),\r\n (autosave) => autosave,\r\n);\r\n\r\nexport const getActiveTimerTypeFromState = createSelector(\r\n (state) => state.getIn(['projects', 'activities', 'data', 'activeTimerType']),\r\n (activeTimerType) => activeTimerType,\r\n);\r\n\r\nexport const getCurrentTaskFromState = createSelector(\r\n getExecuteStatusFromState,\r\n (execute) => execute.getIn(['current', 'task']),\r\n);\r\n\r\nexport const getTargetDepthFromState = createSelector(\r\n getCurrentTaskFromState,\r\n getCurrentProjectWellboreFromState,\r\n (currentTask, wellbore = EMPTY_MAP) =>\r\n currentTask?.get('targetDepth').value ?? wellbore.get('md'),\r\n);\r\n\r\nexport const isTimerActive = (id) =>\r\n createSelector(\r\n (state) => {\r\n const timers = getTimersByTypeId(state, id);\r\n\r\n return !!timers.find((timer) => !timer.get('endTime'));\r\n },\r\n (isTimerActive) => isTimerActive,\r\n );\r\n","import { call, select, put, takeEvery } from 'redux-saga/effects';\r\n\r\nimport { createTaskActivitiesSelector } from 'features/projects/activities/activities.selectors';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport {\r\n getProjectStatus,\r\n Identity,\r\n sendProjectChangedNotification,\r\n} from 'features/projects/activities/sagas/common.sagas';\r\nimport {\r\n ACTIVITIES_ACTIONS as ACTIONS,\r\n ACTIVITIES_ACTIONS,\r\n} from 'features/projects/activities/activities.constants';\r\nimport activitiesService from 'services/activities.service';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\n\r\nexport function* initiateSortActivities(action) {\r\n yield call(\r\n initiateSortActivitiesBase,\r\n action,\r\n ACTIVITIES_ACTIONS.BACKEND_SORT_ACTIVITIES,\r\n );\r\n}\r\n\r\nfunction* initiateSortActivitiesNoNotification(action) {\r\n yield call(\r\n initiateSortActivitiesBase,\r\n action,\r\n ACTIVITIES_ACTIONS.BACKEND_SORT_ACTIVITIES_NO_NOTIFICATION,\r\n );\r\n}\r\n\r\nfunction* initiateSortActivitiesBase(action, actionType) {\r\n const { projectId, taskId, oldIndex, newIndex, connection } = action;\r\n\r\n const activitiesSelector = createTaskActivitiesSelector(taskId);\r\n const activities = yield select(activitiesSelector);\r\n if (oldIndex === newIndex) return;\r\n const sortedActivty = activities.valueSeq().get(oldIndex);\r\n const affectedActivty = activities.valueSeq().get(newIndex);\r\n\r\n if (!sortedActivty || !affectedActivty) return;\r\n\r\n const itemSequence = {\r\n sortedItemId: sortedActivty.get('id'),\r\n affectedItemId: affectedActivty.get('id'),\r\n };\r\n\r\n yield put({\r\n projectId,\r\n taskId,\r\n oldIndex,\r\n newIndex,\r\n connection,\r\n itemSequence,\r\n sortedActivty,\r\n type: actionType,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The activity was successfully updated',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Error while reordering activities!',\r\n },\r\n });\r\n}\r\n\r\nfunction* sortActivities(action) {\r\n yield call(sortActivitiesBase, action, sendProjectChangedNotification);\r\n}\r\n\r\nfunction* sortActivitiesNoNotification(action) {\r\n yield call(sortActivitiesBase, action, Identity);\r\n}\r\n\r\nfunction* sortActivitiesBase(action, notificationFn) {\r\n const {\r\n projectId,\r\n taskId,\r\n oldIndex,\r\n newIndex,\r\n itemSequence,\r\n sortedActivty,\r\n connection,\r\n } = action;\r\n\r\n const updatedSequences = yield call(\r\n activitiesService.updateActivitySequence,\r\n projectId,\r\n taskId,\r\n sortedActivty.get('id'),\r\n itemSequence,\r\n );\r\n yield call(getProjectStatus, projectId);\r\n yield call(notificationFn, connection, projectId, taskId);\r\n\r\n yield put({\r\n taskId,\r\n projectId,\r\n oldIndex,\r\n newIndex,\r\n skipTracking: true,\r\n payload: updatedSequences,\r\n type: ACTIVITIES_ACTIONS.SORT_ACTIVITIES,\r\n });\r\n}\r\n\r\nexport function* rootSortActivities() {\r\n yield takeEvery(\r\n ACTIONS.INITIATE_SORT_ACTIVITIES,\r\n callAsync,\r\n initiateSortActivities,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_SORT_ACTIVITIES_NO_NOTIFICATION,\r\n callAsync,\r\n initiateSortActivitiesNoNotification,\r\n );\r\n yield takeEvery(ACTIONS.BACKEND_SORT_ACTIVITIES, callAsync, sortActivities);\r\n yield takeEvery(\r\n ACTIONS.BACKEND_SORT_ACTIVITIES_NO_NOTIFICATION,\r\n callAsync,\r\n sortActivitiesNoNotification,\r\n );\r\n}\r\n","import { call, put, takeEvery } from 'redux-saga/effects';\r\nimport {\r\n getProjectStatus,\r\n Identity,\r\n sendProjectChangedNotification,\r\n toggleModal,\r\n} from 'features/projects/activities/sagas/common.sagas';\r\nimport {\r\n ACTIVITIES_ACTIONS as ACTIONS,\r\n ACTIVITIES_ACTIONS,\r\n EDIT_ACTIVITY_MODAL_ID,\r\n} from 'features/projects/activities/activities.constants';\r\nimport activitiesService from 'services/activities.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\n\r\nfunction* initiateDeleteActivityBase(action, notificationFn) {\r\n const {\r\n projectId,\r\n taskId,\r\n activityId,\r\n index,\r\n isSubActivity = false,\r\n connection,\r\n } = action;\r\n if (!isSubActivity)\r\n yield call(toggleModal, {\r\n modalId: EDIT_ACTIVITY_MODAL_ID,\r\n activeIndex: index,\r\n value: true,\r\n });\r\n yield call(activitiesService.deleteActivity, projectId, taskId, activityId);\r\n yield call(getProjectStatus, projectId);\r\n if (!isSubActivity)\r\n yield call(toggleModal, { modalId: EDIT_ACTIVITY_MODAL_ID });\r\n yield call(notificationFn, connection, projectId, taskId);\r\n yield put({\r\n taskId,\r\n projectId,\r\n activityId,\r\n name: 'Delete',\r\n skipTracking: true,\r\n type: ACTIVITIES_ACTIONS.DELETE_ACTIVITY_SUCCESS_DIALOG,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The activity was successfully deleted',\r\n },\r\n });\r\n}\r\n\r\nfunction* initiateDeleteActivityWithNotification(action) {\r\n yield call(\r\n initiateDeleteActivityBase,\r\n action,\r\n sendProjectChangedNotification,\r\n );\r\n}\r\n\r\nfunction* initiateDeleteActivityWithoutNotification(action) {\r\n yield call(initiateDeleteActivityBase, action, Identity);\r\n}\r\n\r\nfunction* confirmDeleteActivity(action) {\r\n const { taskId, projectId, activityId } = action;\r\n yield put({\r\n taskId,\r\n projectId,\r\n activityId,\r\n name: 'Delete',\r\n skipTracking: true,\r\n type: ACTIVITIES_ACTIONS.CONFIRM_DELETE_ACTIVITY,\r\n });\r\n}\r\n\r\nexport function* rootDeleteActivitySaga() {\r\n yield takeEvery(\r\n ACTIONS.INITIATE_CONFIRM_DELETE_ACTIVITY_WITH_NOTIFICATION,\r\n callAsync,\r\n initiateDeleteActivityWithNotification,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_CONFIRM_DELETE_ACTIVITY_WITHOUT_NOTIFICATION,\r\n callAsync,\r\n initiateDeleteActivityWithoutNotification,\r\n );\r\n yield takeEvery(\r\n ACTIONS.DELETE_ACTIVITY_SUCCESS_DIALOG,\r\n callAsync,\r\n confirmDeleteActivity,\r\n );\r\n}\r\n","import { call, put, takeEvery } from 'redux-saga/effects';\r\nimport activitiesService from 'services/activities.service';\r\nimport { replace } from 'connected-react-router/immutable';\r\nimport { toExecutionSection } from 'utils/route.util';\r\nimport {\r\n getAllTask,\r\n sendProjectChangedNotification,\r\n} from 'features/projects/activities/sagas/common.sagas';\r\nimport {\r\n ACTIVITIES_ACTIONS as ACTIONS,\r\n ACTIVITIES_ACTIONS,\r\n} from 'features/projects/activities/activities.constants';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\n\r\nfunction* confirmGoBack(action) {\r\n const { projectId, connection, previousCurrentTaskId } = action;\r\n yield put({\r\n type: ACTIONS.CONFIRMED_ACTIVITY_GO_BACK,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Going back first...',\r\n },\r\n confirmationDialog: {\r\n description:\r\n 'Undo and go back to the previous activity? Time tracked on the ongoing activity will be added to the previous ',\r\n title: 'Are you sure?',\r\n confirmButtonText: 'Yes, undo',\r\n },\r\n projectId,\r\n connection,\r\n previousCurrentTaskId,\r\n });\r\n}\r\n\r\nfunction* fetchAllActivitiesForTask(projectId, previousCurrentTaskId) {\r\n const allActivities = yield call(\r\n activitiesService.allActivitiesForTask,\r\n projectId,\r\n previousCurrentTaskId,\r\n );\r\n yield put({\r\n taskId: previousCurrentTaskId,\r\n payload: allActivities,\r\n type: ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n });\r\n}\r\n\r\nfunction* goBack(action) {\r\n const { projectId, connection, previousCurrentTaskId } = action;\r\n const status = yield call(activitiesService.goBack, projectId);\r\n const { currentTask: newCurrentTask } = status;\r\n\r\n if (newCurrentTask && newCurrentTask.taskId !== previousCurrentTaskId) {\r\n yield put(\r\n replace(\r\n toExecutionSection(projectId, newCurrentTask.taskId, 'activities'),\r\n ),\r\n );\r\n }\r\n\r\n // If we are going back in the first activity of the first task,\r\n // we want to fetch the activities of the previousCurrenTaskId because newCurrentTask.taskId will be null\r\n const taskId = newCurrentTask?.taskId ?? previousCurrentTaskId;\r\n\r\n // If going back to in activity and task then refresh previous task\r\n // And refresh tasks (to update current task to new task)\r\n if (String(newCurrentTask?.taskId) !== String(previousCurrentTaskId)) {\r\n yield call(fetchAllActivitiesForTask, projectId, previousCurrentTaskId);\r\n yield call(getAllTask, projectId);\r\n }\r\n\r\n yield call(sendProjectChangedNotification, connection, projectId, taskId);\r\n yield call(fetchAllActivitiesForTask, projectId, taskId);\r\n\r\n yield put({\r\n type: ACTIVITIES_ACTIONS.GET_PROJECT_STATUS,\r\n payload: status,\r\n });\r\n}\r\n\r\nexport function* rootGoBack() {\r\n yield takeEvery(ACTIONS.CONFIRM_ACTIVITY_GO_BACK, callAsync, confirmGoBack);\r\n yield takeEvery(ACTIONS.CONFIRMED_ACTIVITY_GO_BACK, callAsync, goBack);\r\n}\r\n","export function addErrorMessageDuration(action, duration) {\r\n const notificationObj = {\r\n notification: {\r\n config: {\r\n error: {\r\n duration: duration,\r\n },\r\n },\r\n },\r\n };\r\n return {\r\n ...action,\r\n ...notificationObj,\r\n };\r\n}\r\n","import { select, call, put, takeEvery } from 'redux-saga/effects';\r\nimport isEqual from 'lodash/isEqual';\r\nimport { getFormFromState } from 'app/app.selectors';\r\nimport {\r\n ACTIVITIES_ACTIONS as ACTIONS,\r\n ACTIVITIES_ACTIONS,\r\n EDIT_ACTIVITY_FORM,\r\n EDIT_ACTIVITY_MODAL_ID,\r\n} from 'features/projects/activities/activities.constants';\r\nimport activitiesService from 'services/activities.service';\r\nimport {\r\n getAllActivitiesForTask,\r\n Identity,\r\n sendProjectChangedNotification,\r\n} from 'features/projects/activities/sagas/common.sagas';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { APP_ACTIONS, NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { addErrorMessageDuration } from 'features/projects/activities/sagas/utils';\r\n\r\nexport const toggleModal = ({\r\n modalId,\r\n force = false,\r\n activeIndex,\r\n payload,\r\n ...extra\r\n}) => {\r\n return {\r\n type: APP_ACTIONS.TOGGLE_MODAL,\r\n modalId,\r\n force,\r\n payload,\r\n activeIndex,\r\n ...extra,\r\n };\r\n};\r\n\r\nfunction* updateActivityFormBase(action, notificationFn) {\r\n const actionExtended = addErrorMessageDuration(action, 5000);\r\n const {\r\n projectId,\r\n taskId,\r\n autosave,\r\n reset: resetForm,\r\n callback,\r\n connection,\r\n } = actionExtended;\r\n\r\n const { values, initial } = (yield select(\r\n getFormFromState,\r\n EDIT_ACTIVITY_FORM.ID,\r\n )).toJS();\r\n try {\r\n if (!isEqual(initial, values) || !autosave) {\r\n const payload = yield call(\r\n activitiesService.updateActivity,\r\n projectId,\r\n taskId,\r\n values,\r\n );\r\n yield call(getAllActivitiesForTask, projectId, taskId);\r\n if (!autosave) {\r\n yield put(toggleModal({ modalId: EDIT_ACTIVITY_MODAL_ID }));\r\n } else {\r\n invokeIfFunction(callback);\r\n }\r\n yield call(notificationFn, connection, projectId, taskId);\r\n yield put({\r\n autosave,\r\n activityId: initial.id,\r\n type: ACTIVITIES_ACTIONS.INITIATE_UPDATE_ACTIVITY_CONFIRMATION,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The activity was successfully updated',\r\n },\r\n payload,\r\n });\r\n }\r\n } catch (exc) {\r\n resetForm();\r\n throw exc;\r\n }\r\n}\r\n\r\nfunction* updateActivityFormWithNotification(action) {\r\n yield call(updateActivityFormBase, action, sendProjectChangedNotification);\r\n}\r\n\r\nfunction* updateActivityFormWithoutNotification(action) {\r\n yield call(updateActivityFormBase, action, Identity);\r\n}\r\n\r\nfunction* emitUpdateActivity(action) {\r\n const { autosave, activityId, payload } = action;\r\n yield put({\r\n autosave,\r\n activityId,\r\n type: ACTIVITIES_ACTIONS.UPDATE_ACTIVITY,\r\n payload,\r\n });\r\n}\r\n\r\nexport function* rootUpdateActivityFormSaga() {\r\n yield takeEvery(\r\n ACTIONS.INITIATE_UPDATE_ACTIVITY_FORM_WITH_NOTIFICATION,\r\n callAsync,\r\n updateActivityFormWithNotification,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_UPDATE_ACTIVITY_FORM_WITHOUT_NOTIFICATION,\r\n callAsync,\r\n updateActivityFormWithoutNotification,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_UPDATE_ACTIVITY_CONFIRMATION,\r\n callAsync,\r\n emitUpdateActivity,\r\n );\r\n}\r\n","import { call, put } from 'redux-saga/effects';\r\nimport activitiesService from '../../../../services/activities.service';\r\nimport { WORK_ITEM_STATUS } from '../../../../app/app.constants';\r\nimport {\r\n ACTIVITIES_ACTIONS,\r\n COMPLETE_TASK_MODAL_ID,\r\n COMPLETE_TASK_MODE,\r\n} from '../activities.constants';\r\nimport { replace } from 'connected-react-router/immutable';\r\nimport { toExecutionSection } from '../../../../utils/route.util';\r\nimport { getAllTask, toggleModal } from './common.sagas';\r\n\r\nfunction* completeTaskDefault(projectId, values) {\r\n const payload = yield call(\r\n activitiesService.completeTask,\r\n projectId,\r\n values,\r\n values.objectivesMet ? WORK_ITEM_STATUS.COMPLETED : WORK_ITEM_STATUS.FAILED,\r\n );\r\n yield put({\r\n type: ACTIVITIES_ACTIONS.COMPLETE_TASK_DEFAULT,\r\n payload,\r\n });\r\n return payload;\r\n}\r\n\r\nfunction* completeTaskRepeat(projectId, values) {\r\n const payload = yield call(\r\n activitiesService.completeAndRepeatTask,\r\n projectId,\r\n values,\r\n WORK_ITEM_STATUS.FAILED,\r\n );\r\n yield call(getAllTask, projectId);\r\n\r\n yield put({\r\n type: ACTIVITIES_ACTIONS.COMPLETE_AND_REPEAT_TASK,\r\n payload,\r\n });\r\n return payload;\r\n}\r\n\r\nfunction* completeTaskWithContingency(\r\n projectId,\r\n values,\r\n continueWithContingencyTaskId,\r\n) {\r\n const payload = yield call(\r\n activitiesService.completeTask,\r\n projectId,\r\n values,\r\n values.objectivesMet ? WORK_ITEM_STATUS.COMPLETED : WORK_ITEM_STATUS.FAILED,\r\n continueWithContingencyTaskId,\r\n );\r\n yield put({\r\n type: ACTIVITIES_ACTIONS.COMPLETE_TASK_WITH_CONTINGENCY,\r\n payload,\r\n });\r\n return payload;\r\n}\r\n\r\nfunction* completeTaskAndEndOperation(projectId, values) {\r\n const payload = yield call(\r\n activitiesService.completeTaskAndEndOperation,\r\n projectId,\r\n values,\r\n values.objectivesMet ? WORK_ITEM_STATUS.COMPLETED : WORK_ITEM_STATUS.FAILED,\r\n );\r\n yield call(getAllTask, projectId);\r\n yield put({\r\n type: ACTIVITIES_ACTIONS.COMPLETE_TASK_AND_END_OPERATION,\r\n payload,\r\n });\r\n return payload;\r\n}\r\n\r\nfunction* completeTaskPostOp(payload, projectId, connection) {\r\n const { currentTask, previousTask } = payload;\r\n if (previousTask && currentTask) {\r\n const { taskId } = currentTask;\r\n if (taskId) {\r\n yield put(replace(toExecutionSection(projectId, taskId, 'activities')));\r\n yield call(\r\n activitiesService.sendProjectChangedNotification,\r\n connection,\r\n projectId,\r\n taskId,\r\n );\r\n yield call(toggleModal, { modalId: COMPLETE_TASK_MODAL_ID });\r\n }\r\n }\r\n yield put({\r\n type: ACTIVITIES_ACTIONS.COMPLETE_TASK,\r\n payload,\r\n });\r\n}\r\n\r\nexport function* completeTask(action) {\r\n const {\r\n projectId,\r\n completeTaskMode,\r\n continueWithContingencyTaskId,\r\n values,\r\n connection,\r\n setSubmitting,\r\n } = action;\r\n\r\n setSubmitting(true);\r\n\r\n let payload;\r\n switch (completeTaskMode) {\r\n case COMPLETE_TASK_MODE.REPEAT:\r\n payload = yield call(completeTaskRepeat, projectId, values);\r\n yield call(completeTaskPostOp, payload, projectId, connection);\r\n break;\r\n case COMPLETE_TASK_MODE.END_OPERATION:\r\n payload = yield call(completeTaskAndEndOperation, projectId, values);\r\n yield call(completeTaskPostOp, payload, projectId, connection);\r\n break;\r\n case COMPLETE_TASK_MODE.CONTINUE_WITH_CONTINGENCY:\r\n payload = yield call(\r\n completeTaskWithContingency,\r\n projectId,\r\n values,\r\n continueWithContingencyTaskId,\r\n );\r\n yield call(completeTaskPostOp, payload, projectId, connection);\r\n break;\r\n default:\r\n payload = yield call(completeTaskDefault, projectId, values);\r\n yield call(completeTaskPostOp, payload, projectId, connection);\r\n break;\r\n }\r\n\r\n setSubmitting(false);\r\n\r\n return payload;\r\n}\r\n","import Agent from 'infrastructure/agent';\r\nimport { saveFile } from 'utils/app.util';\r\n\r\nconst getSimulationReportAvailableCharts = (projectId) =>\r\n Agent.get(`/reports/simulation/available-charts/${projectId}`);\r\n\r\nconst downloadProjectToolstringReport = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n collapseAssemblies = false,\r\n) =>\r\n Agent.file\r\n .get(\r\n `/reports/project/${projectId}/task/${taskId}/toolstring/${toolstringId}/download`,\r\n { collapseAssemblies: collapseAssemblies },\r\n )\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\nconst downloadProjectSimulationReport = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n chartsToInclude = [],\r\n collapseAssemblies = false,\r\n) =>\r\n Agent.file\r\n .get(\r\n `/reports/project/${projectId}/task/${taskId}/simulation/${simulationId}/download`,\r\n { chartTypes: chartsToInclude, collapseAssemblies: collapseAssemblies },\r\n )\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\nconst downloadActivityReport = (projectId, taskId, activityId) =>\r\n Agent.file\r\n .get(\r\n `/reports/project/${projectId}/task/${taskId}/activity/${activityId}/download`,\r\n )\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\nconst downloadEndOfJobReport = (projectExternalId) => {\r\n return Agent.file\r\n .get(`/reports/project/${projectExternalId}/endofjob/download`)\r\n .then(([file, filename]) => saveFile(file, filename));\r\n};\r\n\r\nconst reportsService = {\r\n getSimulationReportAvailableCharts,\r\n downloadProjectToolstringReport,\r\n downloadProjectSimulationReport,\r\n downloadEndOfJobReport,\r\n downloadActivityReport,\r\n};\r\n\r\nexport default reportsService;\r\n","import { all, call, delay, fork, put, takeEvery } from 'redux-saga/effects';\r\n\r\nimport {\r\n getTaskActivities,\r\n getTaskActivitiesDispatchOnly,\r\n setProjectStatusAsPlainAction,\r\n startOperation,\r\n} from 'features/projects/activities/activities.actions';\r\nimport {\r\n ACTIVITIES_ACTIONS,\r\n ACTIVITIES_ACTIONS as ACTIONS,\r\n} from 'features/projects/activities/activities.constants';\r\nimport activitiesService from 'services/activities.service';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { addNotification } from 'altus-redux-middlewares';\r\nimport { FormikFormStatus, NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport taskService from 'services/task.service';\r\nimport {\r\n dispatchGetProjectStatus,\r\n sendProjectChangedNotification,\r\n} from './sagas/common.sagas';\r\nimport { rootCreateActivity } from './sagas/create.activity.saga';\r\nimport { rootSortActivities } from 'features/projects/activities/sagas/sort.activities.saga';\r\nimport { rootDeleteActivitySaga } from 'features/projects/activities/sagas/delete.activity.saga';\r\nimport { rootGoBack } from 'features/projects/activities/sagas/goback.activity.saga';\r\nimport { rootUpdateActivityFormSaga } from './sagas/update.activity.form.saga';\r\nimport { completeTask } from './sagas/complete.task.saga';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { addErrorMessageDuration } from 'features/projects/activities/sagas/utils';\r\nimport reportsService from 'services/reports.service';\r\n\r\nconst UPDATE_ACTIVITIES_TRIGGER_ACTIONS = [\r\n ACTIONS.PAUSE_ACTIVITY,\r\n ACTIONS.SORT_ACTIVITIES,\r\n ACTIONS.COMPLETE_ACTIVITY,\r\n ACTIONS.QUICK_ADD_ACTIVITY,\r\n ACTIONS.ADD_ACTIVITY_DEFAULT,\r\n ACTIONS.CONFIRM_DELETE_ACTIVITY,\r\n ACTIONS.COMPLETE_ACTIVITY_ABORT_TASK,\r\n ACTIONS.CREATE_NEW_POINT_IN_TIME_ACTIVITY,\r\n];\r\n\r\nfunction* getTaskActivitiesAsync(action) {\r\n const { taskId, projectId, skipTracking } = action;\r\n\r\n // use skipTracking to only fetch the activities when the promise is complete\r\n if (!skipTracking) return;\r\n\r\n // do not fetch the activities if taskId or projectId is missing from action\r\n if (!taskId || !projectId) return;\r\n\r\n return yield put(getTaskActivities(projectId, taskId));\r\n}\r\n\r\nexport function* startOperationAsync(action) {\r\n const nextProjectStatus = yield call(\r\n activitiesService.startOperation,\r\n action.projectId,\r\n );\r\n\r\n yield put(setProjectStatusAsPlainAction(nextProjectStatus));\r\n\r\n const allActivities = yield call(\r\n activitiesService.allActivitiesForTask,\r\n action.projectId,\r\n action.taskId,\r\n );\r\n yield put(getTaskActivitiesDispatchOnly(action.taskId, allActivities));\r\n return yield put(startOperation(allActivities));\r\n}\r\n\r\nfunction* handleEstablishingConnectionError() {\r\n yield put(\r\n addNotification({\r\n message:\r\n 'Unable to establish real-time connection with server. Will refresh in 5 seconds...',\r\n duration: 5000,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n yield delay(5000);\r\n window.location.reload();\r\n}\r\n\r\nfunction* createNewPointInTimeActivity(action) {\r\n const { projectId, taskId, activityId, activityTypeId, connection } = action;\r\n const activity = yield call(\r\n activitiesService.createNewPointInTimeActivity,\r\n projectId,\r\n taskId,\r\n activityId,\r\n activityTypeId,\r\n );\r\n const notificationPayload = yield call(\r\n activitiesService.sendProjectChangedNotification,\r\n connection,\r\n projectId,\r\n taskId,\r\n );\r\n yield put({\r\n payload: notificationPayload,\r\n type: ACTIVITIES_ACTIONS.SENT_SUBACTIVITY_ADDED_NOTIFICATION,\r\n });\r\n\r\n yield put({\r\n taskId,\r\n payload: activity,\r\n projectId,\r\n skipTracking: true, // In order to trigger saga defined on UPDATE_ACTIVITIES_TRIGGER_ACTIONS (see below)\r\n type: ACTIVITIES_ACTIONS.CREATE_NEW_POINT_IN_TIME_ACTIVITY,\r\n });\r\n}\r\n\r\nfunction* updateActivity(action) {\r\n const { projectId, taskId, activity, connection } = action;\r\n const updatedActivity = yield call(\r\n activitiesService.updateActivity,\r\n projectId,\r\n taskId,\r\n activity,\r\n );\r\n yield call(sendProjectChangedNotification, connection, projectId, taskId);\r\n yield put({\r\n activityId: activity.id,\r\n type: ACTIVITIES_ACTIONS.UPDATE_ACTIVITY,\r\n payload: updatedActivity,\r\n });\r\n return updatedActivity;\r\n}\r\n\r\nfunction* getActivityPdf(action) {\r\n const { projectId, taskId, activityId } = action;\r\n const updatedActivity = yield call(\r\n reportsService.downloadActivityReport,\r\n projectId,\r\n taskId,\r\n activityId,\r\n );\r\n return updatedActivity;\r\n}\r\n\r\nfunction* updateActivityTimes(action) {\r\n const actionExtended = addErrorMessageDuration(action, 5000);\r\n const { projectId, taskId, autosave, values, formikPrimitives, connection } =\r\n actionExtended;\r\n\r\n try {\r\n const updatedActivity = yield call(\r\n activitiesService.updateActivity,\r\n projectId,\r\n taskId,\r\n values,\r\n );\r\n const allActivities = yield call(\r\n activitiesService.allActivitiesForTask,\r\n projectId,\r\n taskId,\r\n );\r\n yield put({\r\n taskId,\r\n payload: allActivities,\r\n type: ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n });\r\n yield call(sendProjectChangedNotification, connection, projectId, taskId);\r\n\r\n yield put({\r\n autosave,\r\n type: ACTIVITIES_ACTIONS.UPDATE_ACTIVITY,\r\n payload: updatedActivity,\r\n });\r\n return updatedActivity;\r\n } catch (exc) {\r\n yield call(getTaskActivitiesAsync, {\r\n taskId,\r\n projectId,\r\n skipTracking: true,\r\n });\r\n const { resetForm, setStatus, setSubmitting } = formikPrimitives;\r\n invokeIfFunction(resetForm);\r\n setSubmitting(false);\r\n setStatus(FormikFormStatus.ERROR);\r\n throw exc;\r\n }\r\n}\r\n\r\nexport function* completeActivity(action) {\r\n const { projectId, taskId, activityId, connection } = action;\r\n const status = yield call(\r\n activitiesService.completeActivity,\r\n projectId,\r\n taskId,\r\n activityId,\r\n );\r\n const { nextTask, currentTask, nextActivity, currentActivity } = status;\r\n\r\n const projectComplete = [\r\n nextTask,\r\n currentTask,\r\n nextActivity,\r\n currentActivity,\r\n ].every((item) => !item);\r\n\r\n if (projectComplete) {\r\n yield all([call(getAllTask, projectId), call(getProjectTimers, projectId)]);\r\n yield call(dispatchGetProjectStatus, status);\r\n } else {\r\n yield call(dispatchGetProjectStatus, status);\r\n }\r\n\r\n yield call(sendProjectChangedNotification, connection, projectId, taskId);\r\n\r\n yield put({\r\n taskId,\r\n payload: status,\r\n projectId,\r\n skipTracking: true,\r\n type: ACTIVITIES_ACTIONS.COMPLETE_ACTIVITY,\r\n });\r\n\r\n return status;\r\n}\r\n\r\nfunction* getProjectTimers(projectId) {\r\n const payload = yield call(activitiesService.getAllProjectTimers, projectId);\r\n yield put({\r\n payload,\r\n type: ACTIVITIES_ACTIONS.GET_ALL_TASKS,\r\n });\r\n return payload;\r\n}\r\n\r\nfunction* getAllTask(projectId) {\r\n const payload = yield call(taskService.getAllTasks, projectId);\r\n yield put({\r\n payload,\r\n type: ACTIVITIES_ACTIONS.GET_ALL_TASKS,\r\n });\r\n return payload;\r\n}\r\n\r\nfunction* pauseActivity(action) {\r\n const { projectId, taskId, activityId, activityTypeId, connection } = action;\r\n const status = yield call(\r\n activitiesService.pauseActivity,\r\n projectId,\r\n taskId,\r\n activityId,\r\n activityTypeId,\r\n );\r\n yield call(dispatchGetProjectStatus, status);\r\n yield call(sendProjectChangedNotification, connection, projectId, taskId);\r\n\r\n yield put({\r\n taskId,\r\n payload: status,\r\n projectId,\r\n skipTracking: true,\r\n type: ACTIVITIES_ACTIONS.PAUSE_ACTIVITY,\r\n });\r\n return status;\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(UPDATE_ACTIVITIES_TRIGGER_ACTIONS, getTaskActivitiesAsync);\r\n yield takeEvery(\r\n ACTIONS.ESTABLISHING_REAL_TIME_CONNECTION_FAILED,\r\n handleEstablishingConnectionError,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_CREATE_NEW_POINT_IN_TIME_ACTIVITY,\r\n callAsync,\r\n createNewPointInTimeActivity,\r\n );\r\n yield takeEvery(ACTIONS.INITIATE_UPDATE_ACTIVITY, callAsync, updateActivity);\r\n yield takeEvery(ACTIONS.DOWNLOAD_ACTIVITY_PDF, callAsync, getActivityPdf);\r\n yield takeEvery(\r\n ACTIONS.INITIATE_UPDATE_ACTIVITY_TIMES,\r\n callAsync,\r\n updateActivityTimes,\r\n );\r\n yield takeEvery(\r\n ACTIONS.INITIATE_COMPLETE_ACTIVITY,\r\n callAsync,\r\n completeActivity,\r\n );\r\n yield takeEvery(ACTIONS.INITIATE_PAUSE_ACTIVITY, callAsync, pauseActivity);\r\n yield takeEvery(\r\n ACTIONS.START_OPERATION_INITIATE,\r\n callAsync,\r\n startOperationAsync,\r\n );\r\n yield takeEvery(ACTIONS.INITATE_COMPLETE_TASK, callAsync, completeTask);\r\n\r\n yield fork(rootUpdateActivityFormSaga);\r\n yield fork(rootGoBack);\r\n yield fork(rootDeleteActivitySaga);\r\n yield fork(rootCreateActivity);\r\n yield fork(rootSortActivities);\r\n}\r\n","import { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nexport const requestDashboards = () => ({\r\n type: DASHBOARDS_ACTIONS.REQUEST_DASHBOARDS,\r\n});\r\n\r\nexport const receiveDashboards = (dashboards) => ({\r\n payload: dashboards,\r\n type: DASHBOARDS_ACTIONS.RECEIVE_DASHBOARDS,\r\n});\r\n\r\nexport const requestProjectDashboard = (projectId, projectDashboardId) => ({\r\n projectId,\r\n projectDashboardId,\r\n type: DASHBOARDS_ACTIONS.REQUEST_PROJECT_DASHBOARD,\r\n});\r\n\r\nexport const requestProjectDashboards = (projectId) => ({\r\n projectId,\r\n type: DASHBOARDS_ACTIONS.REQUEST_PROJECT_DASHBOARDS,\r\n});\r\n\r\nexport const receiveProjectDashboards = (projectId, projectDashboards) => ({\r\n projectId,\r\n payload: projectDashboards,\r\n type: DASHBOARDS_ACTIONS.RECEIVE_PROJECT_DASHBOARDS,\r\n});\r\n\r\nexport const receiveProjectDashboardCurves = (\r\n projectDashboardId,\r\n projectDashboardCurves,\r\n) => ({\r\n projectDashboardId,\r\n payload: projectDashboardCurves,\r\n type: DASHBOARDS_ACTIONS.RECEIVE_PROJECT_DASHBOARD_CURVES,\r\n});\r\n\r\nexport const receiveProjectDashboard = (\r\n projectId,\r\n projectDashboardId,\r\n projectDashboard,\r\n) => ({\r\n projectId,\r\n projectDashboardId,\r\n payload: projectDashboard,\r\n type: DASHBOARDS_ACTIONS.RECEIVE_PROJECT_DASHBOARD,\r\n});\r\n\r\nexport const toggleProjectDashboard = (projectId, dashboardId, callback) => ({\r\n callback,\r\n projectId,\r\n dashboardId,\r\n type: DASHBOARDS_ACTIONS.TOGGLE_PROJECT_DASHBOARD,\r\n notification: {\r\n success: 'Project dashboard updated successfully',\r\n },\r\n});\r\n\r\nexport const toggleProjectDashboards = (projectId, callback) => ({\r\n callback,\r\n projectId,\r\n type: DASHBOARDS_ACTIONS.TOGGLE_PROJECT_DASHBOARDS,\r\n notification: {\r\n success: 'Project dashboards updated successfully',\r\n },\r\n});\r\n\r\nexport const updateProjectDashboard = (\r\n projectId,\r\n projectDashboardId,\r\n projectDashboard,\r\n) => ({\r\n projectId,\r\n projectDashboardId,\r\n payload: projectDashboard,\r\n type: DASHBOARDS_ACTIONS.UPDATE_PROJECT_DASHBOARD,\r\n notification: {\r\n success: 'Project dashboard updated successfully',\r\n },\r\n});\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getDashboards = () => Agent.get('/dashboard');\r\n\r\nconst dashboardService = {\r\n getDashboards,\r\n};\r\n\r\nexport default dashboardService;\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getProjectDashboard = (projectId, projectDashboardId) =>\r\n Agent.get(`/project/${projectId}/dashboard/${projectDashboardId}`);\r\n\r\nconst getProjectDashboardCurves = (projectId, projectDashboardId) =>\r\n Agent.get(`/project/${projectId}/dashboard/${projectDashboardId}/curves`);\r\n\r\nconst getProjectDashboardSimulations = (projectId, projectDashboardId) =>\r\n Agent.get(`/project/${projectId}/dashboard/${projectDashboardId}/simulation`);\r\n\r\nconst getProjectDashboardCurvesBySource = (\r\n projectId,\r\n projectDashboardId,\r\n source,\r\n) =>\r\n Agent.get(\r\n `/project/${projectId}/dashboard/${projectDashboardId}/curves/${source}`,\r\n );\r\n\r\nconst getProjectDashboards = (projectId) =>\r\n Agent.get(`/project/${projectId}/dashboard`);\r\n\r\nconst toggleProjectDashboard = (projectId, dashboardId) =>\r\n Agent.post(`/project/${projectId}/dashboard/toggle/${dashboardId}`);\r\n\r\nconst toggleProjectDashboards = (projectId) =>\r\n Agent.post(`/project/${projectId}/dashboard/toggle`);\r\n\r\nconst getProjectDashboardCheetahJobCurves = (\r\n projectId,\r\n projectDashboardId,\r\n cheetahJobId,\r\n) =>\r\n Agent.get(\r\n `/project/${projectId}/dashboard/${projectDashboardId}/cheetah/${cheetahJobId}/curves`,\r\n );\r\n\r\nconst updateProjectDashboard = (\r\n projectId,\r\n projectDashboardId,\r\n projectDashboard,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/dashboard/${projectDashboardId}`,\r\n projectDashboard,\r\n );\r\n\r\nconst projectDashboardService = {\r\n getProjectDashboard,\r\n getProjectDashboards,\r\n toggleProjectDashboard,\r\n updateProjectDashboard,\r\n toggleProjectDashboards,\r\n getProjectDashboardCurves,\r\n getProjectDashboardSimulations,\r\n getProjectDashboardCurvesBySource,\r\n getProjectDashboardCheetahJobCurves,\r\n};\r\n\r\nexport default projectDashboardService;\r\n","import { put, call, takeLatest } from 'redux-saga/effects';\r\n\r\nimport {\r\n receiveDashboards,\r\n receiveProjectDashboard,\r\n receiveProjectDashboards,\r\n receiveProjectDashboardCurves,\r\n} from 'features/projects/dashboard/dashboard.actions';\r\n\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport dashboardService from 'services/dashboard.service';\r\nimport projectDashboardService from 'services/projectDashboard.service';\r\nimport { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nexport function* requestDashboardsAsync() {\r\n const dashboards = yield call(dashboardService.getDashboards);\r\n\r\n yield put(receiveDashboards(dashboards));\r\n\r\n return dashboards;\r\n}\r\n\r\nexport function* requestProjectDashboardAsync(action) {\r\n const { projectId, projectDashboardId } = action;\r\n\r\n const projectDashboard = yield call(\r\n projectDashboardService.getProjectDashboard,\r\n projectId,\r\n projectDashboardId,\r\n );\r\n\r\n const projectDashboardCurves = yield call(\r\n projectDashboardService.getProjectDashboardCurves,\r\n projectId,\r\n projectDashboardId,\r\n );\r\n\r\n yield put(\r\n receiveProjectDashboard(projectId, projectDashboardId, projectDashboard),\r\n );\r\n\r\n yield put(\r\n receiveProjectDashboardCurves(projectDashboardId, projectDashboardCurves),\r\n );\r\n\r\n return projectDashboard;\r\n}\r\n\r\nexport function* requestProjectDashboardsAsync(action) {\r\n const { projectId } = action;\r\n\r\n const projectDashboards = yield call(\r\n projectDashboardService.getProjectDashboards,\r\n projectId,\r\n );\r\n\r\n yield put(receiveProjectDashboards(projectId, projectDashboards));\r\n\r\n return projectDashboards;\r\n}\r\n\r\nexport function* toggleProjectDashboardAsync(action) {\r\n const { callback, projectId, dashboardId } = action;\r\n\r\n const projectDashboard = yield call(\r\n projectDashboardService.toggleProjectDashboard,\r\n projectId,\r\n dashboardId,\r\n );\r\n\r\n yield call(requestProjectDashboardsAsync, action);\r\n\r\n if (projectDashboard) {\r\n invokeIfFunction(callback, projectDashboard.projectDashboardId);\r\n }\r\n}\r\n\r\nexport function* toggleProjectDashboardsAsync(action) {\r\n const { callback, projectId } = action;\r\n\r\n const projectDashboards = yield call(\r\n projectDashboardService.toggleProjectDashboards,\r\n projectId,\r\n );\r\n\r\n invokeIfFunction(callback);\r\n\r\n yield put(receiveProjectDashboards(projectId, projectDashboards));\r\n}\r\n\r\nexport function* updateProjectDashboardAsync(action) {\r\n const { projectId, projectDashboardId, payload } = action;\r\n\r\n const projectDashboard = yield call(\r\n projectDashboardService.updateProjectDashboard,\r\n projectId,\r\n projectDashboardId,\r\n payload,\r\n );\r\n\r\n yield put(\r\n receiveProjectDashboard(projectId, projectDashboardId, projectDashboard),\r\n );\r\n}\r\n\r\nexport default function* root() {\r\n yield takeLatest(\r\n DASHBOARDS_ACTIONS.REQUEST_PROJECT_DASHBOARDS,\r\n callAsync,\r\n requestProjectDashboardsAsync,\r\n );\r\n\r\n yield takeLatest(\r\n DASHBOARDS_ACTIONS.REQUEST_DASHBOARDS,\r\n callAsync,\r\n requestDashboardsAsync,\r\n );\r\n\r\n yield takeLatest(\r\n DASHBOARDS_ACTIONS.TOGGLE_PROJECT_DASHBOARD,\r\n callAsync,\r\n toggleProjectDashboardAsync,\r\n );\r\n\r\n yield takeLatest(\r\n DASHBOARDS_ACTIONS.TOGGLE_PROJECT_DASHBOARDS,\r\n callAsync,\r\n toggleProjectDashboardsAsync,\r\n );\r\n\r\n yield takeLatest(\r\n DASHBOARDS_ACTIONS.UPDATE_PROJECT_DASHBOARD,\r\n callAsync,\r\n updateProjectDashboardAsync,\r\n );\r\n\r\n yield takeLatest(\r\n DASHBOARDS_ACTIONS.REQUEST_PROJECT_DASHBOARD,\r\n callAsync,\r\n requestProjectDashboardAsync,\r\n );\r\n}\r\n","export const ACTIONS = {\r\n REQUEST_CREATE_WELLBORE_SECTION: 'REQUEST_CREATE_WELLBORE_SECTION',\r\n REQUEST_UPDATE_WELLBORE_SECTION: 'REQUEST_UPDATE_WELLBORE_SECTION',\r\n REQUEST_DELETE_WELLBORE_SECTION: 'REQUEST_DELETE_WELLBORE_SECTION',\r\n REQUEST_WELLBORE_SECTIONS: 'REQUEST_WELLBORE_SECTIONS',\r\n REQUEST_CREATE_WELLBORE_SECTION_NIPPLE:\r\n 'REQUEST_CREATE_WELLBORE_SECTION_NIPPLE',\r\n REQUEST_UPDATE_WELLBORE_SECTION_NIPPLE:\r\n 'REQUEST_UPDATE_WELLBORE_SECTION_NIPPLE',\r\n REQUEST_DELETE_WELLBORE_SECTION_NIPPLE:\r\n 'REQUEST_DELETE_WELLBORE_SECTION_NIPPLE',\r\n\r\n DELETE_WELLBORE_SECTION: 'DELETE_WELLBORE_SECTION',\r\n RECEIVE_WELLBORE_SECTION: 'RECEIVE_WELLBORE_SECTION',\r\n RECEIVE_WELLBORE_SECTIONS: 'RECEIVE_WELLBORE_SECTIONS',\r\n DELETE_WELLBORE_SECTION_NIPPLE: 'DELETE_WELLBORE_SECTION_NIPPLE',\r\n RECEIVE_WELLBORE_SECTION_NIPPLES: 'RECEIVE_WELLBORE_SECTION_NIPPLES',\r\n\r\n UPDATE_WELLBORE_SECTION_SIMULATION: 'UPDATE_WELLBORE_SECTION_SIMULATION',\r\n};\r\n\r\nexport const WellboreSectionType = {\r\n TUBING: 0,\r\n CASING: 1,\r\n LINER: 2,\r\n OPEN_HOLE: 3,\r\n DRILLPIPE: 4,\r\n RISER: 5,\r\n};\r\n\r\nexport const MINUSKEY = '-';\r\n","import { ACTIONS } from 'features/wells/sections/wellboreSection.constants';\r\n\r\nexport const requestWellboreSectionsForWellbore = (fieldId, wellboreId) => ({\r\n fieldId,\r\n wellboreId,\r\n type: ACTIONS.REQUEST_WELLBORE_SECTIONS,\r\n});\r\n\r\nexport const requestCreateWellboreSection = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSection,\r\n formik,\r\n callback,\r\n) => {\r\n const { setStatus, setSubmitting } = formik;\r\n\r\n return {\r\n fieldId,\r\n callback,\r\n setStatus,\r\n wellboreId,\r\n setSubmitting,\r\n payload: wellboreSection,\r\n type: ACTIONS.REQUEST_CREATE_WELLBORE_SECTION,\r\n notification: {\r\n success: 'Section successfully created',\r\n },\r\n };\r\n};\r\n\r\nexport const requestUpdateWellboreSection = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n) => ({\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n payload: wellboreSection,\r\n type: ACTIONS.REQUEST_UPDATE_WELLBORE_SECTION,\r\n notification: {\r\n success: 'Section successfully updated',\r\n },\r\n});\r\n\r\nexport const requestDeleteWellboreSection = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n) => ({\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n type: ACTIONS.REQUEST_DELETE_WELLBORE_SECTION,\r\n confirmationDialog: {\r\n title: 'Delete section',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this section? ',\r\n },\r\n notification: {\r\n success: 'Section was successfully deleted',\r\n },\r\n});\r\n\r\nexport const deleteWellboreSection = (wellboreSectionId) => ({\r\n wellboreSectionId,\r\n type: ACTIONS.DELETE_WELLBORE_SECTION,\r\n});\r\n\r\nexport const receiveWellboreSection = (wellboreSection) => ({\r\n payload: wellboreSection,\r\n type: ACTIONS.RECEIVE_WELLBORE_SECTION,\r\n});\r\n\r\nexport const receiveWellboreSections = (wellboreSections) => ({\r\n payload: wellboreSections,\r\n type: ACTIONS.RECEIVE_WELLBORE_SECTIONS,\r\n});\r\n\r\nexport const receiveWellboreSectionNipples = (\r\n wellboreSectionId,\r\n wellboreSectionNipples,\r\n) => ({\r\n payload: {\r\n wellboreSectionId: wellboreSectionId,\r\n wellboreSectionNipples: wellboreSectionNipples,\r\n },\r\n type: ACTIONS.RECEIVE_WELLBORE_SECTION_NIPPLES,\r\n});\r\n\r\nexport const requestCreateWellboreSectionNipple = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNipple,\r\n formik,\r\n callback,\r\n) => {\r\n const { setStatus, setSubmitting } = formik;\r\n\r\n return {\r\n fieldId,\r\n callback,\r\n setStatus,\r\n wellboreId,\r\n wellboreSectionId,\r\n setSubmitting,\r\n payload: wellboreSectionNipple,\r\n type: ACTIONS.REQUEST_CREATE_WELLBORE_SECTION_NIPPLE,\r\n notification: {\r\n info: 'Saving...',\r\n success: 'Nipple section successfully created',\r\n },\r\n };\r\n};\r\n\r\nexport const requestUpdateWellboreSectionNipple = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n wellboreSectionNipple,\r\n) => ({\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n payload: wellboreSectionNipple,\r\n type: ACTIONS.REQUEST_UPDATE_WELLBORE_SECTION_NIPPLE,\r\n notification: {\r\n info: 'Saving...',\r\n success: 'Nipple section successfully updated',\r\n },\r\n});\r\n\r\nexport const requestDeleteWellboreSectionNipple = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n) => {\r\n return {\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n type: ACTIONS.REQUEST_DELETE_WELLBORE_SECTION_NIPPLE,\r\n confirmationDialog: {\r\n title: 'Delete nipple section',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this nipple section? ',\r\n },\r\n notification: {\r\n info: 'Deleting...',\r\n success: 'Nipple section was successfully deleted',\r\n },\r\n };\r\n};\r\n\r\nexport const deleteWellboreSectionNipple = (\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n) => ({\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n type: ACTIONS.DELETE_WELLBORE_SECTION_NIPPLE,\r\n});\r\n","import { Map, OrderedMap } from 'immutable';\r\n\r\nimport { WellboreSectionType } from 'features/wells/sections/wellboreSection.constants';\r\n\r\nexport const wellboreSectionTypeToString = (wellboreSectionType) =>\r\n ({\r\n [WellboreSectionType.TUBING]: 'Tubing',\r\n [WellboreSectionType.CASING]: 'Casing',\r\n [WellboreSectionType.LINER]: 'Liner',\r\n [WellboreSectionType.OPEN_HOLE]: 'Open Hole',\r\n [WellboreSectionType.DRILLPIPE]: 'Drillpipe',\r\n [WellboreSectionType.RISER]: 'Riser',\r\n }[wellboreSectionType]);\r\n\r\nexport const wellboreSectionFromDto = ({ wellboreSectionNipples, ...rest }) =>\r\n Map({\r\n wellboreSectionNipples: wellboreSectionNipplesFromDto(\r\n wellboreSectionNipples,\r\n ),\r\n ...rest,\r\n });\r\n\r\nexport const wellboreSectionsFromDto = (wellboreSections) =>\r\n OrderedMap(\r\n wellboreSections.map((wellboreSection) => [\r\n wellboreSection.wellboreSectionId.toString(),\r\n wellboreSectionFromDto(wellboreSection),\r\n ]),\r\n );\r\n\r\nexport const wellboreSectionNipplesFromDto = (wellboreSectionNipples) =>\r\n OrderedMap(\r\n wellboreSectionNipples.map((wellboreSectionNipple) => [\r\n wellboreSectionNipple.wellboreSectionNippleId.toString(),\r\n wellboreSectionNippleFromDto(wellboreSectionNipple),\r\n ]),\r\n );\r\n\r\nexport const wellboreSectionNippleFromDto = ({ name, ...rest }) =>\r\n Map({\r\n type: name,\r\n isNipple: true,\r\n ...rest,\r\n });\r\n\r\nexport const wellboreSectionToDto = ({\r\n top,\r\n type,\r\n bottom,\r\n wellboreId,\r\n innerDiameter,\r\n frictionFactorIn,\r\n frictionFactorOut,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n}) => ({\r\n top,\r\n type,\r\n bottom,\r\n wellboreId,\r\n innerDiameter,\r\n frictionFactorIn,\r\n frictionFactorOut,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n});\r\n\r\nexport const wellboreSectionNippleToDto = ({\r\n type,\r\n top,\r\n length,\r\n innerDiameter,\r\n wellboreSectionId,\r\n}) => ({\r\n top,\r\n length,\r\n name: type,\r\n innerDiameter,\r\n wellboreSectionId,\r\n});\r\n\r\nconst wellboreSectionsMappers = {\r\n WellboreSection: {\r\n to: wellboreSectionToDto,\r\n from: wellboreSectionFromDto,\r\n },\r\n WellboreSectionNipple: {\r\n to: wellboreSectionNippleToDto,\r\n from: wellboreSectionNippleFromDto,\r\n },\r\n WellboreSectionNipples: {\r\n from: wellboreSectionNipplesFromDto,\r\n },\r\n};\r\n\r\nexport default wellboreSectionsMappers;\r\n","import Agent from 'infrastructure/agent';\r\nimport wellboreSectionMappers from 'features/wells/sections/wellboreSection.mappers';\r\n\r\nconst getDefaultWellboreSection = (fieldId, wellboreId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellboreId}/section/default`);\r\n\r\nconst getWellboreSection = (fieldId, wellboreId, wellboreSectionId) =>\r\n Agent.get(\r\n `/field/${fieldId}/wellbore/${wellboreId}/section/${wellboreSectionId}`,\r\n );\r\n\r\nconst getWellboreSectionsForWellbore = (fieldId, wellboreId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellboreId}/section`);\r\n\r\nconst createWellboreSection = (fieldId, wellboreId, wellboreSection) =>\r\n Agent.post(\r\n `/field/${fieldId}/wellbore/${wellboreId}/section`,\r\n wellboreSectionMappers.WellboreSection.to(wellboreSection),\r\n );\r\n\r\nconst updateWellboreSection = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n) =>\r\n Agent.put(\r\n `/field/${fieldId}/wellbore/${wellboreId}/section/${wellboreSectionId}`,\r\n wellboreSectionMappers.WellboreSection.to(wellboreSection),\r\n );\r\n\r\nconst deleteWellboreSection = (fieldId, wellboreId, wellboreSectionId) =>\r\n Agent.delete(\r\n `/field/${fieldId}/wellbore/${wellboreId}/section/${wellboreSectionId}`,\r\n );\r\n\r\nconst createWellboreSectionNipple = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNipple,\r\n) =>\r\n Agent.post(\r\n `/field/${fieldId}/wellbore/${wellboreId}/section/${wellboreSectionId}/nipple`,\r\n wellboreSectionMappers.WellboreSectionNipple.to(wellboreSectionNipple),\r\n );\r\n\r\nconst updateWellboreSectionNipple = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n wellboreSectionNipple,\r\n) =>\r\n Agent.put(\r\n `/field/${fieldId}/wellbore/${wellboreId}/section/${wellboreSectionId}/nipple/${wellboreSectionNippleId}`,\r\n wellboreSectionMappers.WellboreSectionNipple.to(wellboreSectionNipple),\r\n );\r\n\r\nconst deleteWellboreSectionNipple = (\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n) =>\r\n Agent.delete(\r\n `/field/${fieldId}/wellbore/${wellboreId}/section/${wellboreSectionId}/nipple/${wellboreSectionNippleId}`,\r\n );\r\n\r\nconst wellboreSectionService = {\r\n getWellboreSection,\r\n updateWellboreSection,\r\n createWellboreSection,\r\n deleteWellboreSection,\r\n getDefaultWellboreSection,\r\n createWellboreSectionNipple,\r\n updateWellboreSectionNipple,\r\n deleteWellboreSectionNipple,\r\n getWellboreSectionsForWellbore,\r\n};\r\n\r\nexport default wellboreSectionService;\r\n","import { put, call, takeEvery } from 'redux-saga/effects';\r\n\r\nimport {\r\n deleteWellboreSection,\r\n receiveWellboreSections,\r\n deleteWellboreSectionNipple,\r\n receiveWellboreSection,\r\n} from 'features/wells/sections/wellboreSection.actions';\r\n\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport wellboreSectionService from 'services/wellboreSection.service';\r\nimport { ACTIONS } from 'features/wells/sections/wellboreSection.constants';\r\n\r\nexport function* requestWellboreSectionsForWellboreAsync(action) {\r\n const { fieldId, wellboreId } = action;\r\n\r\n const wellboreSections = yield call(\r\n wellboreSectionService.getWellboreSectionsForWellbore,\r\n fieldId,\r\n wellboreId,\r\n );\r\n\r\n yield put(receiveWellboreSections(wellboreSections));\r\n\r\n return wellboreSections;\r\n}\r\n\r\nexport function* requestCreateWellboreSectionAsync(action) {\r\n const { fieldId, payload, callback, setStatus, wellboreId, setSubmitting } =\r\n action;\r\n\r\n try {\r\n const wellboreSection = yield call(\r\n wellboreSectionService.createWellboreSection,\r\n fieldId,\r\n wellboreId,\r\n payload,\r\n );\r\n\r\n // refresh sections to get correct order\r\n yield call(requestWellboreSectionsForWellboreAsync, action);\r\n\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n\r\n if (callback) {\r\n yield call(callback);\r\n }\r\n\r\n return wellboreSection;\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestUpdateWellboreSectionAsync(action) {\r\n const { fieldId, wellboreId, wellboreSectionId, payload } = action;\r\n\r\n const wellboreSection = yield call(\r\n wellboreSectionService.updateWellboreSection,\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n payload,\r\n );\r\n\r\n // refresh sections to get correct order\r\n yield call(requestWellboreSectionsForWellboreAsync, action);\r\n\r\n return wellboreSection;\r\n}\r\n\r\nexport function* requestDeleteWellboreSectionAsync(action) {\r\n const { fieldId, wellboreId, wellboreSectionId } = action;\r\n\r\n yield call(\r\n wellboreSectionService.deleteWellboreSection,\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n );\r\n\r\n yield put(deleteWellboreSection(wellboreSectionId));\r\n}\r\n\r\nexport function* requestCreateWellboreSectionNippleAsync(action) {\r\n const {\r\n fieldId,\r\n payload,\r\n callback,\r\n setStatus,\r\n wellboreId,\r\n wellboreSectionId,\r\n setSubmitting,\r\n } = action;\r\n\r\n try {\r\n const wellboreSection = yield call(\r\n wellboreSectionService.createWellboreSectionNipple,\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n payload,\r\n );\r\n\r\n yield put(receiveWellboreSection(wellboreSection));\r\n\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n\r\n if (callback) {\r\n yield call(callback);\r\n }\r\n\r\n return wellboreSection;\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestUpdateWellboreSectionNippleAsync(action) {\r\n const {\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n payload,\r\n } = action;\r\n\r\n const wellboreSection = yield call(\r\n wellboreSectionService.updateWellboreSectionNipple,\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n payload,\r\n );\r\n\r\n yield put(receiveWellboreSection(wellboreSection));\r\n\r\n return wellboreSection;\r\n}\r\n\r\nexport function* requestDeleteWellboreSectionNippleAsync(action) {\r\n const { fieldId, wellboreId, wellboreSectionId, wellboreSectionNippleId } =\r\n action;\r\n yield call(\r\n wellboreSectionService.deleteWellboreSectionNipple,\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n );\r\n\r\n yield put(\r\n deleteWellboreSectionNipple(wellboreSectionId, wellboreSectionNippleId),\r\n );\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n ACTIONS.REQUEST_WELLBORE_SECTIONS,\r\n callAsync,\r\n requestWellboreSectionsForWellboreAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_CREATE_WELLBORE_SECTION,\r\n callAsync,\r\n requestCreateWellboreSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_WELLBORE_SECTION,\r\n callAsync,\r\n requestUpdateWellboreSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_DELETE_WELLBORE_SECTION,\r\n callAsync,\r\n requestDeleteWellboreSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_CREATE_WELLBORE_SECTION_NIPPLE,\r\n callAsync,\r\n requestCreateWellboreSectionNippleAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_WELLBORE_SECTION_NIPPLE,\r\n callAsync,\r\n requestUpdateWellboreSectionNippleAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_DELETE_WELLBORE_SECTION_NIPPLE,\r\n callAsync,\r\n requestDeleteWellboreSectionNippleAsync,\r\n );\r\n}\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getDefaultTaskRiskSection = (taskId) =>\r\n Agent.get(`/risk/taskRisk/${taskId}`);\r\n\r\nconst getTaskRiskSection = (taskId) =>\r\n Agent.get(`/risk/taskrisk/task/${taskId}`);\r\n\r\nconst getTaskRiskSectionsForTaskRisk = (taskId) =>\r\n Agent.get(`/risk/taskRisk/task/${taskId}`);\r\n\r\nconst createTaskRiskSection = (risks) => Agent.post('/risk/taskRisk', risks);\r\n\r\nconst updateTaskRiskSection = (risks) => Agent.put('/risk/taskRisk', risks);\r\n\r\nconst deleteTaskRiskSection = (taskRiskId) =>\r\n Agent.delete(`/risk/taskRisk/${taskRiskId}`);\r\n\r\n//PROJECT\r\n\r\nconst getDefaultProjectRiskSection = (projectId) =>\r\n Agent.get(`/risk/projectrisk/${projectId}`);\r\n\r\nconst getProjectRiskSection = (projectId) =>\r\n Agent.get(`/risk/projectrisk/${projectId}`);\r\n\r\nconst getProjectRiskSectionsForProjectRisk = (projectId) =>\r\n Agent.get(`/risk/projectrisk/project/${projectId}`);\r\n\r\nconst getTaskRiskSectionsByProject = (projectId) =>\r\n Agent.get(`/risk/projectrisk/project/${projectId}/taskrisk`);\r\n\r\nconst createProjectRiskSection = (risks) =>\r\n Agent.post('/risk/projectRisk', risks);\r\n\r\nconst updateProjectRiskSection = (risks) =>\r\n Agent.put('/risk/projectRisk', risks);\r\n\r\nconst deleteProjectRiskSection = (projectRiskId) =>\r\n Agent.delete(`/risk/projectRisk/${projectRiskId}`);\r\n\r\nconst riskService = {\r\n getTaskRiskSection,\r\n updateTaskRiskSection,\r\n createTaskRiskSection,\r\n deleteTaskRiskSection,\r\n getDefaultTaskRiskSection,\r\n getTaskRiskSectionsForTaskRisk,\r\n\r\n getProjectRiskSection,\r\n updateProjectRiskSection,\r\n createProjectRiskSection,\r\n deleteProjectRiskSection,\r\n getDefaultProjectRiskSection,\r\n getProjectRiskSectionsForProjectRisk,\r\n getTaskRiskSectionsByProject,\r\n};\r\n\r\nexport default riskService;\r\n","export const TASK_INFO_ACTIONS = {\r\n TASK_INFO_PAGE_LOADED: 'TASK_INFO_PAGE_LOADED',\r\n};\r\n\r\nexport const RISK_TABLE_ACTIONS = {\r\n REQUEST_TASK_RISK_SECTIONS: 'REQUEST_TASK_RISK_SECTIONS',\r\n REQUEST_CREATE_TASK_RISK_SECTION: 'REQUEST_CREATE_TASK_RISK_SECTION',\r\n REQUEST_UPDATE_TASK_RISK_SECTION: 'REQUEST_UPDATE_TASK_RISK_SECTION',\r\n DELETE_TASK_RISK_SECTION: 'DELETE_TASK_RISK_SECTION',\r\n REQUEST_DELETE_TASK_RISK_SECTION: 'REQUEST_DELETE_TASK_RISK_SECTION',\r\n RECEIVE_TASK_RISK_SECTION: 'RECEIVE_TASK_RISK_SECTION',\r\n RECEIVE_TASK_RISK_SECTIONS: 'RECEIVE_TASK_RISK_SECTIONS',\r\n\r\n REQUEST_TASK_RISK_BY_PROJECT: 'REQUEST_TASK_RISK_BY_PROJECT',\r\n REQUEST_PROJECT_RISK_SECTIONS: 'REQUEST_PROJECT_RISK_SECTIONS',\r\n REQUEST_CREATE_PROJECT_RISK_SECTION: 'REQUEST_CREATE_PROJECT_RISK_SECTION',\r\n REQUEST_UPDATE_PROJECT_RISK_SECTION: 'REQUEST_UPDATE_PROJECT_RISK_SECTION',\r\n DELETE_PROJECT_RISK_SECTION: 'DELETE_PROJECT_RISK_SECTION',\r\n REQUEST_DELETE_PROJECT_RISK_SECTION: 'REQUEST_DELETE_PROJECT_RISK_SECTION',\r\n RECEIVE_PROJECT_RISK_SECTION: 'RECEIVE_PROJECT_RISK_SECTION',\r\n RECEIVE_PROJECT_RISK_SECTIONS: 'RECEIVE_PROJECT_RISK_SECTIONS',\r\n RECEIVE_TASK_RISK_BY_PROJECT: 'RECEIVE_TASK_RISK_BY_PROJECT',\r\n};\r\n","import Agent from 'infrastructure/agent';\r\nimport { saveFile } from 'utils/app.util';\r\n\r\nexport const searchWellbores = (filter) =>\r\n Agent.get('/search/wellbore', filter);\r\n\r\nexport const getWellboreStatuses = () =>\r\n Agent.get('/search/filter/valueset/wellborestatus');\r\n\r\nexport const getWellboreTrajectory = (fieldId, wellId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellId}/trajectory`);\r\n\r\nexport const getWellbore = (fieldId, wellId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellId}`);\r\n\r\nexport const getSchematicData = (wellboreId) =>\r\n Agent.get(`/wellbore/${wellboreId}/schematic`);\r\n\r\nexport const createNewSchematicVersion = (wellboreId, data) =>\r\n Agent.post(`/wellbore/${wellboreId}/schematic`, data);\r\n\r\nexport const getWellboreEvents = (fieldId, wellId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellId}/events`);\r\n\r\nexport const uploadWellboreTrajectory = (fieldId, wellId, file, meta = {}) =>\r\n Agent.file.post(\r\n `/field/${fieldId}/wellbore/${wellId}/trajectory`,\r\n file,\r\n meta,\r\n );\r\n\r\nexport const getWellboreTrajectoryPreview = (\r\n fieldId,\r\n wellboreId,\r\n file,\r\n meta = {},\r\n) =>\r\n Agent.file.post(\r\n `/field/${fieldId}/wellbore/${wellboreId}/trajectory/preview`,\r\n file,\r\n meta,\r\n );\r\n\r\nexport const downloadTrajectoryTemplateTxt = () =>\r\n Agent.file\r\n .get('/wellbore/trajectory/template/txt')\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\nexport const downloadTrajectoryTemplateCsv = () =>\r\n Agent.file\r\n .get('/wellbore/trajectory/template/csv')\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\nexport const downloadTrajectorySurveyTxt = (wellboreId) =>\r\n Agent.file\r\n .get(`/wellbore/${wellboreId}/trajectory/survey/txt`)\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\nexport const downloadTrajectorySurveyCsv = (wellboreId) =>\r\n Agent.file\r\n .get(`/wellbore/${wellboreId}/trajectory/survey/csv`)\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\nexport const getWellcomTrajectorySurvey = (wellId) =>\r\n Agent.get(`/wellbore/${wellId}/trajectory/wellcom`);\r\n\r\nexport const getWellboreRevisionWithElementsFromWellcom = (fieldId, wellId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellId}/elements/wellcom`);\r\n\r\nexport const getWellboreRevisionWithElements = (fieldId, wellId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellId}/elements`);\r\n\r\nexport const searchAperioWellbores = (filter) =>\r\n Agent.get('/search/wellbore/aperio', filter);\r\n\r\nexport const loadAllElementsList = () =>\r\n Agent.get('/wellbore/schematic/elements');\r\n\r\nconst wellboreService = {\r\n getWellbore,\r\n getSchematicData,\r\n createNewSchematicVersion,\r\n searchWellbores,\r\n getWellboreEvents,\r\n getWellboreStatuses,\r\n getWellboreTrajectory,\r\n uploadWellboreTrajectory,\r\n getWellcomTrajectorySurvey,\r\n downloadTrajectorySurveyTxt,\r\n downloadTrajectorySurveyCsv,\r\n getWellboreTrajectoryPreview,\r\n downloadTrajectoryTemplateTxt,\r\n downloadTrajectoryTemplateCsv,\r\n getWellboreRevisionWithElements,\r\n getWellboreRevisionWithElementsFromWellcom,\r\n searchAperioWellbores,\r\n loadAllElementsList,\r\n};\r\n\r\nexport default wellboreService;\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getAvailableHostileFluids = () =>\r\n Agent.get('/wellbore/details/hostile-fluids');\r\n\r\nconst getAvailableAdditionalParameters = () =>\r\n Agent.get('/wellbore/details/additional-parameters');\r\n\r\nconst getAvailableWellboreDetailServices = () =>\r\n Agent.get('/wellbore/details/services');\r\n\r\nconst updateWellboreDetail = (fieldId, wellboreId, wellboreDetail) =>\r\n Agent.put(`/field/${fieldId}/wellbore/${wellboreId}/details`, wellboreDetail);\r\n\r\nconst createWellboreDetail = (fieldId, wellboreId) =>\r\n Agent.post(`/field/${fieldId}/wellbore/${wellboreId}/details`);\r\n\r\nconst addHostileFluids = (fieldId, wellboreId, hostileFluidsToAdd) =>\r\n Agent.post(\r\n `/field/${fieldId}/wellbore/${wellboreId}/details/hostile-fluids`,\r\n hostileFluidsToAdd,\r\n );\r\n\r\nconst removeHostileFluids = (fieldId, wellboreId, hostileFluidsToRemove) =>\r\n Agent.put(\r\n `/field/${fieldId}/wellbore/${wellboreId}/details/hostile-fluids/delete`,\r\n hostileFluidsToRemove,\r\n );\r\n\r\nconst deleteWellboreDetailService = (\r\n fieldId,\r\n wellboreId,\r\n wellboreDetailServiceId,\r\n) =>\r\n Agent.put(\r\n `/field/${fieldId}/wellbore/${wellboreId}/details/services/${wellboreDetailServiceId}/delete`,\r\n );\r\n\r\nconst addWellboreDetailServices = (\r\n fieldId,\r\n wellboreId,\r\n wellboreDetailServiceTypes,\r\n) =>\r\n Agent.post(\r\n `/field/${fieldId}/wellbore/${wellboreId}/details/services`,\r\n wellboreDetailServiceTypes,\r\n );\r\n\r\nconst wellboreDetailsService = {\r\n addHostileFluids,\r\n removeHostileFluids,\r\n createWellboreDetail,\r\n updateWellboreDetail,\r\n getAvailableHostileFluids,\r\n addWellboreDetailServices,\r\n deleteWellboreDetailService,\r\n getAvailableAdditionalParameters,\r\n getAvailableWellboreDetailServices,\r\n};\r\n\r\nexport default wellboreDetailsService;\r\n","const splitParts = (str) => {\r\n // Here I have split the string into parts of digits and non-digits to compare the complex wellname\r\n return str.match(/(\\d+|\\D+)/g).map((part) => {\r\n // converting numeric strings to numbers for proper comparison\r\n return isNaN(part) ? part : parseInt(part, 10);\r\n });\r\n};\r\n\r\nexport const naturalSort = (a, b) => {\r\n let aParts = splitParts(a);\r\n let bParts = splitParts(b);\r\n\r\n // I had to compare each part of the strings to have a proper sort order\r\n while (aParts.length && bParts.length) {\r\n let aPart = aParts.shift();\r\n let bPart = bParts.shift();\r\n\r\n if (typeof aPart !== typeof bPart) {\r\n return typeof aPart === 'number' ? -1 : 1;\r\n }\r\n\r\n if (aPart !== bPart) {\r\n return aPart < bPart ? -1 : 1;\r\n }\r\n }\r\n\r\n return aParts.length - bParts.length;\r\n};\r\n","import { Map } from 'immutable';\r\n\r\nimport { createSelector } from 'utils/app.util';\r\nimport { naturalSort } from 'features/wells/wellbore.utils';\r\n\r\nexport const getWellboresPageResultsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'wellbore', 'pageResults']),\r\n (wellbores) => wellbores,\r\n);\r\n\r\nexport const getWellboresPageParamsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'wellbore', 'pageParams']),\r\n (wellbores) => wellbores,\r\n);\r\n\r\nconst getWellboreTrajectoriesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'wellboreTrajectory']),\r\n (wellbores) => wellbores,\r\n);\r\n\r\nexport const getWellboreDetailsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'wellboreDetail']),\r\n (wellboreDetails) => wellboreDetails,\r\n);\r\n\r\nexport const getWellboreFluidsSelector = createSelector(\r\n (state) => state.getIn(['entity', 'wellboreDetail', 'fluids']),\r\n (fluids) => fluids,\r\n);\r\n\r\nexport const getFieldsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'field']),\r\n (fields) => fields,\r\n);\r\n\r\nexport const getAllElementsList = createSelector(\r\n (state) => state.getIn(['entity', 'wellbore', 'elementsData']),\r\n (elementsData) => elementsData,\r\n);\r\n\r\nexport const selectSchematicData = createSelector(\r\n (state) => state.getIn(['entity', 'wellbore', 'wellboreIntData']),\r\n (wellboreIntData) => wellboreIntData,\r\n);\r\n\r\nexport const getWellboresGroupedByWellNameFromState = createSelector(\r\n getWellboresPageResultsFromState,\r\n (wellbores) => {\r\n const sortedWellbores = wellbores.sort((a, b) => {\r\n if (!a.get('fieldName') || !b.get('fieldName')) {\r\n if (!a.get('fieldName') && !b.get('fieldName')) {\r\n return 0;\r\n }\r\n return a.get('fieldName') ? -1 : 1;\r\n }\r\n const fieldCompare = a.get('fieldName').localeCompare(b.get('fieldName'));\r\n if (fieldCompare !== 0) {\r\n return fieldCompare; // If field names are different, sort by field name\r\n }\r\n\r\n // If field names are the same, then sort by wellName using natural sort\r\n return naturalSort(a.get('wellName'), b.get('wellName'));\r\n });\r\n return sortedWellbores\r\n .groupBy((x) => x.get('wellName'))\r\n .entrySeq()\r\n .filter(([wellName]) => !!wellName)\r\n .map(([wellName, wellboresByWellName]) => {\r\n const isWell = wellboresByWellName.size > 1;\r\n\r\n if (isWell) {\r\n const fieldId = wellboresByWellName.first().get('fieldId');\r\n\r\n return Map({\r\n fieldId,\r\n isWell: true,\r\n name: wellName,\r\n wellbores: wellboresByWellName.toList(),\r\n });\r\n }\r\n\r\n return wellboresByWellName.first();\r\n });\r\n },\r\n);\r\n\r\nexport const getWellboresGroupedByFieldFromState = createSelector(\r\n getWellboresGroupedByWellNameFromState,\r\n getFieldsFromState,\r\n (wellboresByWellName, fields) =>\r\n wellboresByWellName\r\n .groupBy((wellbore) => wellbore.get('fieldId'))\r\n .entrySeq()\r\n // .filter(([fieldId]) => !!fieldId)\r\n // .filter(([fieldId]) => fields.get(fieldId.toString()))\r\n .map(([fieldId, wellboresByField]) =>\r\n Map({\r\n fieldId,\r\n isField: true,\r\n wellbores: wellboresByField,\r\n name: fields.getIn([fieldId.toString(), 'name']) ?? 'Unknown',\r\n }),\r\n )\r\n .toList(),\r\n);\r\n\r\nexport const getAvailableWellStatuses = createSelector(\r\n (state) => state.getIn(['wells', 'data', 'wellStatuses']),\r\n (wellStatuses) => wellStatuses,\r\n);\r\n\r\nexport const getWellEventsFromState = createSelector(\r\n (state) => state.getIn(['wells', 'events', 'data']),\r\n (wellEvents) => wellEvents,\r\n);\r\n\r\nexport const getWellboreTrajectoryFromState = (wellboreId) =>\r\n createSelector(getWellboreTrajectoriesFromState, (trajectories) =>\r\n trajectories.get(wellboreId?.toString()),\r\n );\r\n\r\nexport const getWellboreDetailByIdFromState = (wellboreDetailId) =>\r\n createSelector(getWellboreDetailsFromState, (wellboreDetails) =>\r\n wellboreDetails.get(wellboreDetailId?.toString()),\r\n );\r\n\r\nexport const getWellboreByIdFromState = (wellboreId) =>\r\n createSelector(getWellboresPageResultsFromState, (wellbores) =>\r\n wellbores.get(wellboreId?.toString()),\r\n );\r\n","export const WELLS_ACTIONS = {\r\n GET_FIELDS: 'GET_FIELDS',\r\n GET_WELLBORE: 'GET_WELLBORE',\r\n LOAD_ALL_ELEMENTS_LIST: 'LOAD_ALL_ELEMENTS_LIST',\r\n WELLBORE_INT_FETCH_STARTED: 'WELLBORE_INT_FETCH_STARTED',\r\n WELLBORE_INT_FETCH_SUCCEEDED: 'WELLBORE_INT_FETCH_SUCCEEDED',\r\n WELLBORE_INT_FETCH_FAILED: 'WELLBORE_INT_FETCH_FAILED',\r\n SCHEMATIC_CREATE_STARTED: 'SCHEMATIC_CREATE_STARTED',\r\n SCHEMATIC_CREATE_SUCCEEDED: 'SCHEMATIC_CREATE_SUCCEEDED',\r\n SCHEMATIC_CREATE_FAILED: 'SCHEMATIC_CREATE_FAILED',\r\n SCHEMATIC_COMPONENT_UPDATE_STARTED: 'SCHEMATIC_COMPONENT_UPDATE_STARTED',\r\n SCHEMATIC_COMPONENT_UPDATE_SUCCEEDED: 'SCHEMATIC_COMPONENT_UPDATE_SUCCEEDED',\r\n SCHEMATIC_COMPONENT_UPDATE_FAILED: 'SCHEMATIC_COMPONENT_UPDATE_FAILED',\r\n SCHEMATIC_COMPONENT_DELETE_STARTED: 'SCHEMATIC_COMPONENT_DELETE_STARTED',\r\n SCHEMATIC_COMPONENT_DELETE_SUCCEEDED: 'SCHEMATIC_COMPONENT_DELETE_SUCCEEDED',\r\n SCHEMATIC_COMPONENT_DELETE_FAILED: 'SCHEMATIC_COMPONENT_DELETE_FAILED',\r\n SCHEMATIC_VERSION_CREATE: 'SCHEMATIC_VERSION_CREATE',\r\n RECEIVE_FIELDS: 'RECEIVE_FIELDS',\r\n WELLS_PAGE_LOADED: 'WELLS_PAGE_LOADED',\r\n UPDATE_WELL_FILTER: 'UPDATE_WELL_FILTER',\r\n RECEIVE_WELLBORE_DETAIL: 'RECEIVE_WELLBORE_DETAIL',\r\n UPDATE_WELLBORE: 'UPDATE_WELLBORE',\r\n RECEIVE_WELLBORE: 'RECEIVE_WELLBORE',\r\n RECEIVE_WELLBORES_PAGE: 'RECEIVE_WELLBORES_PAGE',\r\n CLEAR_WELLBORES: 'CLEAR_WELLBORES',\r\n WELLBORE_CONTAINER_LOADED: 'WELLBORE_CONTAINER_LOADED',\r\n WELLBORE_CONTAINER_UNLOADED: 'WELLBORE_CONTAINER_UNLOADED',\r\n RECEIVE_WELLBORE_TRAJECTORY: 'RECEIVE_WELLBORE_TRAJECTORY',\r\n REQUEST_WELLBORE_TRAJECTORY: 'REQUEST_WELLBORE_TRAJECTORY',\r\n UPDATE_WELLBORE_DETAIL: 'UPDATE_WELL_DETAIL',\r\n CREATE_WELLBORE_DETAIL: 'CREATE_WELL_DETAIL',\r\n ADD_HOSTILE_FLUIDS: 'ADD_HOSTILE_FLUIDS',\r\n REMOVE_HOSTILE_FLUIDS: 'REMOVE_HOSTILE_FLUIDS',\r\n ADD_WELLBORE_DETAIL_SERVICES: 'ADD_WELLBORE_DETAIL_SERVICES',\r\n DELETE_WELLBORE_DETAIL_SERVICE: 'DELETE_WELLBORE_DETAIL_SERVICE',\r\n\r\n // FLUID ACTIONS\r\n INITIATE_GET_WELLBORE_FLUIDS: 'INITIATE_GET_WELLBORE_FLUIDS',\r\n GET_WELLBORE_FLUIDS: 'GET_WELLBORE_FLUIDS',\r\n INITIATE_DELETE_WELLBORE_FLUID: 'INITIATE_DELETE_WELLBORE_FLUID',\r\n DELETE_WELLBORE_FLUID: 'DELETE_WELLBORE_FLUID',\r\n INITIATE_UPDATE_WELLBORE_FLUID: 'INITIATE_UPDATE_WELLBORE_FLUID',\r\n UPDATE_WELLBORE_FLUID: 'UPDATE_WELLBORE_FLUID',\r\n INITIATE_CREATE_WELLBORE_FLUID: 'INITIATE_CREATE_WELLBORE_FLUID',\r\n CREATE_WELLBORE_FLUID: 'CREATE_WELLBORE_FLUID',\r\n};\r\n\r\nexport const WellStatus = {\r\n UNKNOWN: 0,\r\n CLOSED: 1,\r\n DRILLING: 2,\r\n JUNKED: 3,\r\n ONLINE_OPERATIONAL: 4,\r\n P_AND_A: 5,\r\n PLUGGED: 6,\r\n PREDRILLED: 7,\r\n SUSPENDED: 8,\r\n WILL_NEVER_BE_DRILLED: 9,\r\n};\r\n\r\nexport const ADD_WELLBORE_DETAILS_HOSTILE_FLUIDS_MODAL_ID =\r\n 'ADD_WELLBORE_DETAILS_HOSTILE_FLUIDS_MODAL_ID';\r\n\r\nexport const ADD_WELLBORE_DETAIL_SERVICES_MODAL_ID =\r\n 'ADD_WELLBORE_DETAIL_SERVICES_MODAL_ID';\r\n","import service from 'services/app.service';\r\nimport { HTTP_STATUS } from 'app/app.constants';\r\nimport wellboreService from 'services/wellbore.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport wellboreDetailService from 'services/wellboreDetail.service';\r\nimport { getWellboreByIdFromState } from 'features/wells/wellbore.selectors';\r\nimport { WELLS_ACTIONS as WELLBORE_ACTIONS } from 'features/wells/wells.constants';\r\n\r\nexport const getWellbore = (fieldId, wellboreId) => (dispatch) => {\r\n const payload = wellboreService\r\n .getWellbore(fieldId, wellboreId)\r\n .then((wellbore) => {\r\n const { wellboreDetailId, wellboreDetail } = wellbore;\r\n\r\n dispatch(receiveWellbore(wellbore));\r\n\r\n if (wellboreDetailId) {\r\n dispatch(receiveWellboreDetail(wellboreDetail));\r\n }\r\n\r\n return wellbore;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: WELLBORE_ACTIONS.GET_WELLBORE,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const fetchSchematicData = (wellboreId) => (dispatch) => {\r\n dispatch({\r\n payload: {},\r\n type: WELLBORE_ACTIONS.WELLBORE_INT_FETCH_STARTED,\r\n });\r\n\r\n wellboreService\r\n .getSchematicData(wellboreId)\r\n .then((data) => {\r\n dispatch({\r\n payload: data,\r\n type: WELLBORE_ACTIONS.WELLBORE_INT_FETCH_SUCCEEDED,\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n payload: error,\r\n type: WELLBORE_ACTIONS.WELLBORE_INT_FETCH_FAILED,\r\n });\r\n });\r\n};\r\n\r\n//will create saga\r\nexport const updateSchematicComponent =\r\n (data, callback, componentIndex) => (dispatch) => {\r\n dispatch({\r\n payload: { componentData: data, componentIndex },\r\n type: WELLBORE_ACTIONS.SCHEMATIC_COMPONENT_UPDATE_STARTED,\r\n });\r\n callback();\r\n };\r\n\r\n//will create saga\r\nexport const createSchematicComponent = (data, callback) => (dispatch) => {\r\n dispatch({\r\n payload: data,\r\n type: WELLBORE_ACTIONS.SCHEMATIC_CREATE_SUCCEEDED,\r\n });\r\n callback();\r\n};\r\n//will create saga\r\nexport const deleteSchematicComponent =\r\n (componentId, callback) => (dispatch) => {\r\n dispatch({\r\n payload: componentId,\r\n type: WELLBORE_ACTIONS.SCHEMATIC_COMPONENT_DELETE_STARTED,\r\n });\r\n callback();\r\n };\r\n\r\nexport const createNewSchematicVersion = (wellboreId, data) => (dispatch) => {\r\n dispatch({\r\n payload: async () => {\r\n await wellboreService.createNewSchematicVersion(wellboreId, data);\r\n dispatch(fetchSchematicData(wellboreId));\r\n },\r\n type: WELLBORE_ACTIONS.SCHEMATIC_VERSION_CREATE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating new version...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'New version created',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to create new version',\r\n },\r\n });\r\n fetchSchematicData(wellboreId);\r\n};\r\n\r\nexport const wellboreContainerOnLoad = (fieldId, wellId) => (dispatch) => {\r\n const payload = dispatch(getWellbore(fieldId, wellId)).then((wellbore) => {\r\n const { wellboreDetailId, wellboreDetail } = wellbore;\r\n\r\n if (wellboreDetailId) {\r\n dispatch(receiveWellboreDetail(wellboreDetail));\r\n } else {\r\n dispatch(createWellboreDetail(fieldId, wellId));\r\n }\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: WELLBORE_ACTIONS.WELLBORE_CONTAINER_LOADED,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateFilter = (filter) => (dispatch) => {\r\n const payload = wellboreService\r\n .searchWellbores(filter)\r\n .then((wellboresPage) => {\r\n return dispatch(receiveWellboresPage(wellboresPage));\r\n });\r\n\r\n dispatch({\r\n filter,\r\n payload,\r\n type: WELLBORE_ACTIONS.UPDATE_WELL_FILTER,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateWellAperioFilter = (filter) => (dispatch) => {\r\n const payload = wellboreService\r\n .searchAperioWellbores(filter)\r\n .then((wellboresPage) => {\r\n return dispatch(receiveWellboresPage(wellboresPage));\r\n });\r\n\r\n dispatch({\r\n filter,\r\n payload,\r\n type: WELLBORE_ACTIONS.UPDATE_WELL_FILTER,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveFields = (fields) => ({\r\n payload: fields,\r\n type: WELLBORE_ACTIONS.RECEIVE_FIELDS,\r\n});\r\n\r\nexport const getFields = (filters) => (dispatch) => {\r\n const payload = service\r\n .getFields(filters)\r\n .then((fields) => dispatch(receiveFields(fields)));\r\n\r\n dispatch({\r\n payload,\r\n type: WELLBORE_ACTIONS.GET_FIELDS,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onLoad = (organizationId) => (dispatch) => {\r\n const filter = {\r\n organizationId,\r\n };\r\n\r\n const payload = Promise.all([\r\n wellboreService.getWellboreStatuses(),\r\n dispatch(getFields(filter)),\r\n ]);\r\n\r\n dispatch({\r\n type: WELLBORE_ACTIONS.WELLS_PAGE_LOADED,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getWellboreTrajectory = (fieldId, wellboreId) => (dispatch) => {\r\n const payload = wellboreService\r\n .getWellboreTrajectory(fieldId, wellboreId)\r\n .catch((error) => {\r\n if (error.status === HTTP_STATUS.NOT_FOUND) {\r\n return [];\r\n }\r\n return Promise.reject(error);\r\n })\r\n .then((trajectory) =>\r\n dispatch(receiveWellboreTrajectory(wellboreId, trajectory)),\r\n );\r\n\r\n dispatch({\r\n payload,\r\n type: WELLBORE_ACTIONS.REQUEST_WELLBORE_TRAJECTORY,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveWellboreTrajectory = (wellboreId, trajectory) => ({\r\n wellboreId,\r\n payload: trajectory,\r\n type: WELLBORE_ACTIONS.RECEIVE_WELLBORE_TRAJECTORY,\r\n});\r\n\r\nexport const receiveWellboreDetail = (wellboreDetail) => ({\r\n payload: wellboreDetail,\r\n type: WELLBORE_ACTIONS.RECEIVE_WELLBORE_DETAIL,\r\n});\r\n\r\nexport const receiveWellbore = (wellbore) => ({\r\n payload: wellbore,\r\n type: WELLBORE_ACTIONS.RECEIVE_WELLBORE,\r\n});\r\n\r\nexport const updateWellbore = (wellboreId, wellbore) => ({\r\n wellboreId,\r\n payload: wellbore,\r\n type: WELLBORE_ACTIONS.UPDATE_WELLBORE,\r\n});\r\n\r\nexport const receiveWellboresPage = (wellbores) => ({\r\n payload: wellbores,\r\n type: WELLBORE_ACTIONS.RECEIVE_WELLBORES_PAGE,\r\n});\r\n\r\nexport const clearWellbores = () => ({\r\n type: WELLBORE_ACTIONS.CLEAR_WELLBORES,\r\n});\r\n\r\nexport const receiveAndSetWellboreDetailId =\r\n (wellboreId, wellboreDetail) => (dispatch, getState) => {\r\n const { wellboreDetailId } = wellboreDetail;\r\n\r\n dispatch(receiveWellboreDetail(wellboreDetail));\r\n\r\n const currentWellbore = getWellboreByIdFromState(wellboreId)(getState());\r\n\r\n // do not fetch wellbore, update wellboreDetailId on existing one instead\r\n dispatch(\r\n updateWellbore(\r\n wellboreId,\r\n currentWellbore.set('wellboreDetailId', wellboreDetailId),\r\n ),\r\n );\r\n };\r\n\r\nexport const updateWellboreDetail =\r\n (fieldId, wellboreId, updatedWellboreDetail) => (dispatch) => {\r\n const payload = wellboreDetailService\r\n .updateWellboreDetail(fieldId, wellboreId, updatedWellboreDetail)\r\n .then((wellboreDetail) =>\r\n dispatch(receiveAndSetWellboreDetailId(wellboreId, wellboreDetail)),\r\n );\r\n\r\n dispatch({\r\n payload,\r\n type: WELLBORE_ACTIONS.UPDATE_WELLBORE_DETAIL,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving changes...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The well details was successfully updated',\r\n },\r\n });\r\n };\r\n\r\nexport const createWellboreDetail = (fieldId, wellboreId) => (dispatch) => {\r\n const payload = wellboreDetailService\r\n .createWellboreDetail(fieldId, wellboreId)\r\n .then((wellboreDetail) =>\r\n dispatch(receiveAndSetWellboreDetailId(wellboreId, wellboreDetail)),\r\n );\r\n\r\n dispatch({\r\n payload,\r\n type: WELLBORE_ACTIONS.CREATE_WELLBORE_DETAIL,\r\n });\r\n};\r\n\r\nexport const loadAllElementsList = () => (dispatch) => {\r\n try {\r\n const data = wellboreService.loadAllElementsList();\r\n\r\n dispatch({\r\n type: WELLBORE_ACTIONS.LOAD_ALL_ELEMENTS_LIST,\r\n payload: data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: WELLBORE_ACTIONS.LOAD_ALL_ELEMENTS_LIST,\r\n payload: {},\r\n error: true,\r\n });\r\n }\r\n};\r\n","export const CREATE_PROJECT_MODAL_ID = 'CREATE_PROJECT_MODAL_ID';\r\n\r\nexport const PROJECTS_ACTIONS = {\r\n RECEIVE_PROJECT: 'RECEIVE_PROJECT',\r\n RECEIVE_PROJECTS: 'RECEIVE_PROJECTS',\r\n CREATE_PROJECT: 'CREATE_PROJECT',\r\n UPDATE_PROJECT: 'UPDATE_PROJECT',\r\n SEARCH_PROJECTS: 'SEARCH_PROJECTS',\r\n GET_PROJECT_BY_ID: 'GET_PROJECT_BY_ID',\r\n GET_ACTIVITY_TYPES: 'GET_ACTIVITY_TYPES',\r\n PROJECTS_PAGE_LOADED: 'PROJECTS_PAGE_LOADED',\r\n GET_PROJECT_RESOURCES: 'GET_PROJECT_RESOURCES',\r\n PROJECTS_PAGE_UNLOADED: 'PROJECTS_PAGE_UNLOADED',\r\n RESET_PROJECT_RESOURCES: 'RESET_PROJECT_RESOURCES',\r\n GET_PROJECT_STATUS_SILENT: 'GET_PROJECT_STATUS_SILENT',\r\n PROJECT_PAGES_UNLOADED: 'PROJECT_PAGES_UNLOADED',\r\n CLEAR_PROJECTS: 'CLEAR_PROJECTS',\r\n GET_CURRENT_PROJECT_MEMBER: 'GET_CURRENT_PROJECT_MEMBER',\r\n\r\n // FLUID ACTIONS\r\n INITIATE_GET_PROJECT_FLUIDS: 'INITIATE_GET_PROJECT_FLUIDS',\r\n GET_PROJECT_FLUIDS: 'GET_PROJECT_FLUIDS',\r\n INITIATE_UPDATE_PROJECT_FLUID: 'INITIATE_UPDATE_PROJECT_FLUID',\r\n UPDATE_PROJECT_FLUID: 'UPDATE_PROJECT_FLUID',\r\n INITIATE_CREATE_PROJECT_FLUID: 'INITIATE_CREATE_PROJECT_FLUID',\r\n CREATE_PROJECT_FLUID: 'CREATE_PROJECT_FLUID',\r\n INITIATE_DELETE_PROJECT_FLUID: 'INITIATE_DELETE_PROJECT_FLUID',\r\n DELETE_PROJECT_FLUID: 'DELETE_PROJECT_FLUID',\r\n ARCHIVE_PROJECT: 'ARCHIVE_PROJECT',\r\n GANTT_PROJECTS: 'GANTT_PROJECTS',\r\n RECEIVE_GANTT_PROJECTS: 'RECEIVE_GANTT_PROJECTS',\r\n};\r\n\r\nexport const CreateProjectFormFields = {\r\n FIELD_ID: 'fieldId',\r\n FIELD_NAME: 'fieldName',\r\n WELLBORE_ID: 'wellboreId',\r\n WELLBORE_NAME: 'wellboreName',\r\n FACILITY_ID: 'facilityId',\r\n FACILITY_NAME: 'facilityName',\r\n ORGANIZATION_ID: 'organizationId',\r\n ORGANIZATION_NAME: 'organizationName',\r\n OBJECTIVE_ID: 'objectiveId',\r\n OBJECTIVE_NAME: 'objectiveName',\r\n};\r\n\r\nexport const PROJECT_VIEWS = {\r\n TABLE_VIEW: 'TABLE_VIEW',\r\n CHART_VIEW: 'CHART_VIEW',\r\n};\r\n","import moment from 'moment';\r\nimport { Map, Set } from 'immutable';\r\n\r\nimport { EMPTY_SET } from 'app/app.constants';\r\nimport { getInitials, getAvatar } from 'utils/app.util';\r\nimport { toPermissionIdFromDto, toRoleIdFromDto } from 'mappers';\r\n\r\nconst toProjectMemberRoleDTO = (roleId, projectMemberId) => {\r\n return {\r\n roleId,\r\n projectMemberId,\r\n };\r\n};\r\n\r\nconst toProjectFieldCrewRoleDTO = (roleId, projectMemberFieldCrewId) => {\r\n return {\r\n roleId,\r\n projectMemberFieldCrewId,\r\n };\r\n};\r\n\r\nexport const toProjectMemberFromDTO = ({\r\n roles,\r\n userId,\r\n fullName,\r\n jobTitle,\r\n projectId,\r\n userAvatar,\r\n permissions,\r\n projectMemberId,\r\n organizationName,\r\n teamProjectRoleId,\r\n}) => {\r\n return Map({\r\n userId,\r\n projectId,\r\n projectMemberId,\r\n teamProjectRoleId,\r\n user: {\r\n id: userId,\r\n name: fullName,\r\n initials: getInitials(fullName),\r\n avatar: getAvatar(userAvatar),\r\n title: jobTitle,\r\n organizationName: organizationName,\r\n },\r\n project: {\r\n id: projectId,\r\n memberId: projectMemberId,\r\n },\r\n roles: roles\r\n ? Set(roles.map(toRoleIdFromDto))\r\n : initialProjectMember.get('roles'),\r\n permissions: permissions\r\n ? Set(permissions.map(toPermissionIdFromDto))\r\n : initialProjectMember.get('permissions'),\r\n });\r\n};\r\n\r\nexport const toProjectFieldCrewFromDTO = ({\r\n roles,\r\n userId,\r\n fullName,\r\n jobTitle,\r\n projectId,\r\n userAvatar,\r\n permissions,\r\n projectMemberFieldCrewId,\r\n organizationName,\r\n crewId,\r\n qualificationId,\r\n shiftTypeId,\r\n safetyDelegate,\r\n to,\r\n from,\r\n}) => {\r\n return Map({\r\n userId,\r\n projectId,\r\n projectMemberFieldCrewId,\r\n to: to ? moment(to) : null,\r\n from: from ? moment(from) : null,\r\n crewId,\r\n qualificationId,\r\n shiftTypeId,\r\n safetyDelegate,\r\n user: {\r\n id: userId,\r\n name: fullName,\r\n initials: getInitials(fullName),\r\n avatar: getAvatar(userAvatar),\r\n title: jobTitle,\r\n organizationName: organizationName,\r\n },\r\n project: {\r\n id: projectId,\r\n memberId: projectMemberFieldCrewId,\r\n },\r\n roles: roles\r\n ? Set(roles.map(toRoleIdFromDto))\r\n : initialProjectFieldCrew.get('roles'),\r\n permissions: permissions\r\n ? Set(permissions.map(toPermissionIdFromDto))\r\n : initialProjectFieldCrew.get('permissions'),\r\n });\r\n};\r\n\r\nconst toProjectMemberFromDTOById = (projectMembers) =>\r\n projectMembers.reduce(\r\n (usersById, member) => ({\r\n ...usersById,\r\n [member.userId]: toProjectMemberFromDTO(member),\r\n }),\r\n {},\r\n );\r\n\r\nconst toProjectFieldCrewFromDTOById = (fieldCrews) =>\r\n fieldCrews.reduce(\r\n (usersById, member) => ({\r\n ...usersById,\r\n [member.userId]: toProjectFieldCrewFromDTO(member),\r\n }),\r\n {},\r\n );\r\n\r\nexport const toProjectFieldCrewDTO = ({\r\n roles,\r\n permissions,\r\n ...projectFieldCrew\r\n}) => {\r\n return {\r\n roles: [],\r\n permissions: [],\r\n\r\n ...projectFieldCrew,\r\n };\r\n};\r\n\r\nconst initialProjectMember = Map({\r\n roles: EMPTY_SET,\r\n permissions: EMPTY_SET,\r\n});\r\n\r\nconst initialProjectFieldCrew = Map({\r\n roles: EMPTY_SET,\r\n permissions: EMPTY_SET,\r\n});\r\n\r\nconst teamMappers = {\r\n ProjectMember: {\r\n initial: initialProjectMember,\r\n from: toProjectMemberFromDTO,\r\n fromByUserId: toProjectMemberFromDTOById,\r\n },\r\n ProjectFieldCrew: {\r\n initial: initialProjectFieldCrew,\r\n from: toProjectFieldCrewFromDTO,\r\n fromByUserId: toProjectFieldCrewFromDTOById,\r\n to: toProjectFieldCrewDTO,\r\n },\r\n ProjectMemberRole: {\r\n to: toProjectMemberRoleDTO,\r\n },\r\n ProjectFieldCrewRole: {\r\n to: toProjectFieldCrewRoleDTO,\r\n },\r\n};\r\n\r\nexport default teamMappers;\r\n","import Agent from 'infrastructure/agent';\r\nimport teamMapper from 'features/projects/team/team.mappers';\r\n\r\nexport const allAvailableUsers = (projectId) =>\r\n Agent.get(`/project/${projectId}/members/available`);\r\n\r\nexport const addProjectMembers = (projectId, userIds) =>\r\n Agent.post(`/project/${projectId}/members`, userIds);\r\n\r\nexport const assignProjectMemberToRole = (projectId, projectMemberId, roleId) =>\r\n Agent.put(\r\n `/project/${projectId}/members/${projectMemberId}/role`,\r\n teamMapper.ProjectMemberRole.to(roleId, projectMemberId),\r\n );\r\n\r\nexport const deleteProjectMember = (projectId, projectMemberId) =>\r\n Agent.delete(`/project/${projectId}/members/${projectMemberId}`);\r\n\r\nexport const getProjectMember = (projectId, projectMemberId) =>\r\n Agent.get(`/project/${projectId}/members/${projectMemberId}`);\r\n\r\n// TODOA call field crew controller\r\n\r\nexport const getFieldCrew = (projectId) =>\r\n Agent.get(`/project/${projectId}/fieldCrew`);\r\n\r\nexport const allAvailableFieldCrewUsers = (projectId) =>\r\n Agent.get(`/project/${projectId}/fieldCrew/available`);\r\n\r\nexport const addProjectFieldCrews = (projectId, userIds) =>\r\n Agent.post(`/project/${projectId}/fieldCrew`, userIds);\r\n\r\nexport const deleteProjectFieldCrew = (projectId, projectMemberId) =>\r\n Agent.delete(`/project/${projectId}/fieldCrew/${projectMemberId}`);\r\n\r\nexport const getQualifications = (projectId) =>\r\n Agent.get(`/project/${projectId}/fieldCrew/qualifications`);\r\n\r\nexport const getCrews = (projectId) =>\r\n Agent.get(`/project/${projectId}/fieldCrew/crews`);\r\n\r\nexport const updateProjectFieldCrew = (projectId, projectMemberId, fieldCrew) =>\r\n Agent.put(\r\n `/project/${projectId}/fieldCrew/${projectMemberId}`,\r\n teamMapper.ProjectFieldCrew.to(fieldCrew),\r\n );\r\n\r\nexport const assignProjectFieldCrewToRole = (\r\n projectId,\r\n projectMemberFieldCrewId,\r\n roleId,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/fieldCrew/${projectMemberFieldCrewId}/role`,\r\n teamMapper.ProjectFieldCrewRole.to(roleId, projectMemberFieldCrewId),\r\n );\r\n\r\nexport const getTeamProjectRoles = (projectId) =>\r\n Agent.get(`/project/${projectId}/members/teamProjectRoles`);\r\n\r\nexport const assignProjectMemberTeamRole = (\r\n projectId,\r\n projectMemberId,\r\n projectTeamRole,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/members/${projectMemberId}/teamRole`,\r\n projectTeamRole,\r\n );\r\n\r\nconst teamService = {\r\n getProjectMember,\r\n addProjectMembers,\r\n addProjectFieldCrews,\r\n allAvailableUsers,\r\n allAvailableFieldCrewUsers,\r\n deleteProjectMember,\r\n deleteProjectFieldCrew,\r\n assignProjectMemberToRole,\r\n assignProjectMemberTeamRole,\r\n getCrews,\r\n getQualifications,\r\n getFieldCrew,\r\n updateProjectFieldCrew,\r\n getTeamProjectRoles,\r\n assignProjectFieldCrewToRole,\r\n};\r\n\r\nexport default teamService;\r\n","export const ADD_TEAM_MEMBERS_MODAL_ID = 'ADD_TEAM_MEMBERS_MODAL_ID';\r\n\r\nexport const TEAM_ACTIONS = {\r\n GET_PROJECT_MEMBER: 'GET_PROJECT_MEMBER',\r\n ADD_PROJECT_MEMBERS: 'ADD_PROJECT_MEMBERS',\r\n DELETE_PROJECT_MEMBER: 'DELETE_PROJECT_MEMBER',\r\n GET_ALL_PROJECT_MEMBERS: 'GET_ALL_PROJECT_MEMBERS',\r\n GET_ALL_AVAILABLE_USERS: 'GET_ALL_AVAILABLE_USERS',\r\n PROJECT_MEMBER_PAGE_LOADED: 'PROJECT_MEMBER_PAGE_LOADED',\r\n PROJECT_TEAM_PAGE_UNLOADED: 'PROJECT_TEAM_PAGE_UNLOADED',\r\n ASSIGN_PROJECT_MEMBER_TO_ROLE: 'ASSIGN_PROJECT_MEMBER_TO_ROLE',\r\n RECEIVE_PROJECT_MEMBER: 'RECEIVE_PROJECT_MEMBER',\r\n RECEIVE_PROJECT_MEMBERS: 'RECEIVE_PROJECT_MEMBERS',\r\n GET_PROJECT_FIELD_CREW: 'GET_PROJECT_FIELD_CREW',\r\n GET_PROJECT_FIELD_MEMBER_CREWS: 'GET_PROJECT_FIELD_MEMBER_CREWS',\r\n RECEIVE_PROJECT_FIELD_CREW: 'RECEIVE_PROJECT_FIELD_CREW',\r\n RECEIVE_PROJECT_FIELD_CREWS: 'RECEIVE_PROJECT_FIELD_CREWS',\r\n GET_ALL_AVAILABLE_FIELD_CREW_USERS: 'GET_ALL_AVAILABLE_FIELD_CREW_USERS',\r\n DELETE_PROJECT_FIELD_CREW: 'DELETE_PROJECT_FIELD_CREW',\r\n GET_PROJECT_FIELD_QUALIFICATIONS: 'GET_PROJECT_FIELD_QUALIFICATIONS',\r\n GET_PROJECT_FIELD_CREWS: 'GET_PROJECT_FIELD_CREWS',\r\n UPDATE_PROJECT_FIELD_CREW: 'UPDATE_PROJECT_FIELD_CREW',\r\n PROJECT_FIELD_CREW_PAGE_LOADED: 'PROJECT_FIELD_CREW_PAGE_LOADED',\r\n ADD_PROJECT_FIELD_CREW: 'ADD_PROJECT_FIELD_CREW',\r\n ASSIGN_PROJECT_FIELD_CREW_TO_ROLE: 'ASSIGN_PROJECT_FIELD_CREW_TO_ROLE',\r\n GET_TEAM_PROJECT_ROLES: 'GET_TEAM_PROJECT_ROLES',\r\n RECEIVE_TEAM_PROJECT_ROLES: 'RECEIVE_TEAM_PROJECT_ROLES',\r\n UPDATE_MEMBER_TEAM_PROJECT_ROLE: 'UPDATE_MEMBER_TEAM_PROJECT_ROLE',\r\n};\r\n\r\nexport const TEAM_ACTIVE_TAB = {\r\n ONSHORE_TEAM: 'ONSHORE_TEAM',\r\n FIELD_CREW: 'FIELD_CREW',\r\n};\r\n\r\n/**ENUMS */\r\nexport const ShiftType = {\r\n SUB_SURFACE: 0,\r\n SURFACE: 1,\r\n};\r\n","import { ProjectPermission, SystemPermission } from 'app/app.constants';\r\nimport routePaths from 'app/routePaths';\r\n\r\nexport const ROLE_ACCESS_TYPES = {\r\n NORMAL: 0,\r\n PROTECTED: 1,\r\n};\r\n\r\nexport const PermissionType = {\r\n SYSTEM: 0,\r\n PROJECT: 1,\r\n};\r\n\r\nexport const AUTHORIZATION_ACTIONS = {\r\n GET_SYSTEM_ROLES: 'GET_SYSTEM_ROLES',\r\n GET_SYSTEM_ROLE: 'GET_SYSTEM_ROLE',\r\n CREATE_SYSTEM_ROLE: 'CREATE_SYSTEM_ROLE',\r\n DELETE_SYSTEM_ROLE: 'DELETE_SYSTEM_ROLE',\r\n UPDATE_SYSTEM_ROLE: 'UPDATE_SYSTEM_ROLE',\r\n DELETE_SYSTEM_ROLE_ASK_CONFIRMATION: 'DELETE_SYSTEM_ROLE_ASK_CONFIRMATION',\r\n GET_USERS_ASSIGNED_TO_SYSTEM_ROLE: 'GET_USERS_ASSIGNED_TO_SYSTEM_ROLE',\r\n REMOVE_SYSTEM_ROLE_FROM_USER: 'REMOVE_SYSTEM_ROLE_FROM_USER',\r\n ADD_SYSTEM_ROLE_TO_USER: 'ADD_SYSTEM_ROLE_TO_USER',\r\n\r\n GET_PROJECT_ROLES: 'GET_PROJECT_ROLES',\r\n GET_PROJECT_ROLE: 'GET_PROJECT_ROLE',\r\n CREATE_PROJECT_ROLE: 'CREATE_PROJECT_ROLE',\r\n DELETE_PROJECT_ROLE: 'DELETE_PROJECT_ROLE',\r\n UPDATE_PROJECT_ROLE: 'UPDATE_PROJECT_ROLE',\r\n DELETE_PROJECT_ROLE_ASK_CONFIRMATION: 'DELETE_PROJECT_ROLE_ASK_CONFIRMATION',\r\n\r\n ASSIGN_PERMISSIONS_TO_PROJECT_ROLE: 'ASSIGN_PERMISSIONS_TO_PROJECT_ROLE',\r\n UNASSIGN_PERMISSIONS_FROM_PROJECT_ROLE:\r\n 'UNASSIGN_PERMISSIONS_FROM_PROJECT_ROLE',\r\n GET_PROJECT_ROLE_PERMISSIONS: 'GET_PROJECT_ROLE_PERMISSIONS',\r\n\r\n GET_SYSTEM_ROLE_PERMISSIONS: 'GET_SYSTEM_ROLE_PERMISSIONS',\r\n ASSIGN_SYSTEM_PERMISSIONS_TO_SYSTEM_ROLE:\r\n 'ASSIGN_SYSTEM_PERMISSIONS_TO_SYSTEM_ROLE',\r\n UNASSIGN_SYSTEM_PERMISSIONS_FROM_SYSTEM_ROLE:\r\n 'UNASSIGN_SYSTEM_PERMISSIONS_FROM_SYSTEM_ROLE',\r\n GET_SYSTEM_ROLE_PROJECT_PERMISSIONS: 'GET_SYSTEM_ROLE_PROJECT_PERMISSIONS',\r\n ASSIGN_PROJECT_PERMISSIONS_TO_SYSTEM_ROLE:\r\n 'ASSIGN_PROJECT_PERMISSIONS_TO_SYSTEM_ROLE',\r\n UNASSIGN_PROJECT_PERMISSIONS_FROM_SYSTEM_ROLE:\r\n 'UNASSIGN_PROJECT_PERMISSIONS_FROM_SYSTEM_ROLE',\r\n\r\n GET_PROJECT_PERMISSIONS: 'GET_PROJECT_PERMISSIONS',\r\n GET_SYSTEM_PERMISSIONS: 'GET_SYSTEM_PERMISSIONS',\r\n};\r\n\r\nexport const SYSTEM_ROLE_FORM = {\r\n ID: 'systemRole',\r\n NAME: 'name',\r\n DESCRIPTION: 'description',\r\n};\r\n\r\nexport const CREATE_SYSTEM_ROLE_FORM = {\r\n ...SYSTEM_ROLE_FORM,\r\n ID: 'createSystemRole',\r\n};\r\n\r\nexport const PROJECT_ROLE_FORM = {\r\n ID: 'projectRole',\r\n NAME: 'name',\r\n DESCRIPTION: 'description',\r\n};\r\n\r\nexport const CREATE_PROJECT_ROLE_FORM = {\r\n ...PROJECT_ROLE_FORM,\r\n ID: 'createProjectRole',\r\n};\r\n\r\nexport const CREATE_SYSTEM_ROLE_MODAL_ID = 'CREATE_SYSTEM_ROLE_MODAL_ID';\r\nexport const CREATE_PROJECT_ROLE_MODAL_ID = 'CREATE_PROJECT_ROLE_MODAL_ID';\r\n\r\nexport const projectExecutePermissions = [\r\n ProjectPermission.EXECUTE,\r\n ProjectPermission.READ_ACTIVITY_COMMENTS_EXECUTE,\r\n];\r\n\r\nexport const projectReportPermissions = [\r\n ProjectPermission.READ_ACTIVITY_COMMENTS_REPORT,\r\n];\r\n\r\nexport const projectWellPermissions = [\r\n ProjectPermission.EDIT_WELL_DETAILS,\r\n ProjectPermission.APPROVE_WELL_DETAILS,\r\n ProjectPermission.EXPORT_WELL_DETAILS,\r\n];\r\n\r\nexport const projectDetailsPermissions = [\r\n ProjectPermission.INITIATE_DELETE_PROJECT,\r\n ProjectPermission.EDIT_PROJECT_DETAILS,\r\n];\r\n\r\nexport const projectPlanPermissions = [\r\n ProjectPermission.EDIT_TASKS,\r\n ProjectPermission.CREATE_TASKS,\r\n ProjectPermission.DELETE_TASKS,\r\n ProjectPermission.EDIT_TASK_WELL_DETAILS,\r\n // TODO: Figure out if we need this or not\r\n // ProjectPermission.EDIT_TASK_DETAILS,\r\n ProjectPermission.EDIT_TOOLSTRING,\r\n ProjectPermission.CREATE_TOOLSTRING,\r\n ProjectPermission.DELETE_TOOLSTRING,\r\n ProjectPermission.EDIT_SIMULATION,\r\n ProjectPermission.CREATE_SIMULATION,\r\n ProjectPermission.DELETE_SIMULATION,\r\n ProjectPermission.EDIT_ACTIVITIES,\r\n ProjectPermission.CREATE_ACTIVITY,\r\n ProjectPermission.DELETE_ACTIVITY,\r\n ProjectPermission.READ_ACTIVITY_COMMENTS,\r\n];\r\n\r\nexport const projectTeamPermissions = [\r\n ProjectPermission.ADD_TEAM_MEMBERS,\r\n ProjectPermission.MANAGE_TEAM_MEMBERS_ACCESS,\r\n ProjectPermission.DELETE_TEAM_MEMBERS,\r\n];\r\n\r\nexport const projectDocumentPermissions = [\r\n ProjectPermission.UPLOAD_DOCUMENTS,\r\n ProjectPermission.DOWNLOAD_DOCUMENTS,\r\n ProjectPermission.DELETE_ALL_DOCUMENTS,\r\n];\r\n\r\nexport const projectLessonPermissions = [\r\n ProjectPermission.EDIT_LESSONS,\r\n ProjectPermission.CREATE_LESSONS,\r\n ProjectPermission.DELETE_LESSONS,\r\n];\r\n\r\nexport const allProjectPermissions = [\r\n ...projectTeamPermissions,\r\n ...projectPlanPermissions,\r\n ...projectWellPermissions,\r\n ...projectLessonPermissions,\r\n ...projectDetailsPermissions,\r\n ...projectDocumentPermissions,\r\n ...projectReportPermissions,\r\n];\r\n\r\nexport const systemProjectManagementPermissions = [\r\n SystemPermission.CREATE_PROJECTS,\r\n SystemPermission.DELETE_PROJECTS,\r\n];\r\n\r\nexport const systemEquipmentTabPermissions = [\r\n SystemPermission.EQUIPMENT_TAB_VIEW,\r\n SystemPermission.ITEM_TAB_EDIT,\r\n SystemPermission.THIRD_PARTY_TAB_EDIT,\r\n SystemPermission.ITEM_VERIFICATION,\r\n];\r\n\r\nexport const systemProjectPermissions = [ProjectPermission.FULL_ACCESS];\r\n\r\nexport const systemSettingsPermissions = [\r\n SystemPermission.MANAGE_USER_ACCESS,\r\n SystemPermission.MANAGE_SYSTEM_ROLES,\r\n SystemPermission.MANAGE_PROJECT_ROLES,\r\n];\r\n\r\nexport const systemEquipmentPermissions = [SystemPermission.MANAGE_EQUIPMENT];\r\n\r\nexport const systemServicesPermissions = [SystemPermission.MANAGE_SERVICES];\r\n\r\nexport const systemWellPermissions = [SystemPermission.MANAGE_WELLS];\r\n\r\nexport const systemDataExchangePermissions = [SystemPermission.DATA_EXCHANGE];\r\n\r\nexport const systemSimulationsPermissions = [\r\n SystemPermission.MANAGE_SIMULATIONS,\r\n];\r\nexport const systemAperioPermissions = [SystemPermission.WELL_ACCESS_ONLY];\r\n\r\nexport const integrityRulesManagement = [\r\n SystemPermission.INTEGRITY_RULES_MANAGEMENT,\r\n];\r\n\r\nexport const systemDashboardConfigurationPermissions = [\r\n SystemPermission.DASHBOARD_CONFIGURATION_ACCESS,\r\n];\r\n\r\nexport const schematicsEditorPermissions = [SystemPermission.SCHEMATICS_EDITOR];\r\n\r\nexport const systemPermissionGroups = [\r\n {\r\n title: 'Settings',\r\n showSubPermissions: true,\r\n permissions: systemSettingsPermissions,\r\n },\r\n {\r\n showSubPermissions: true,\r\n permissions: systemProjectManagementPermissions,\r\n title: 'Projects Management',\r\n },\r\n {\r\n title: 'Equipment Tab Access',\r\n showSubPermissions: true,\r\n permissions: systemEquipmentTabPermissions,\r\n },\r\n {\r\n title: 'Projects Full Access',\r\n permissions: systemProjectPermissions,\r\n rootPermissionType: PermissionType.PROJECT,\r\n rootPermissionId: ProjectPermission.FULL_ACCESS,\r\n },\r\n {\r\n title: 'Data Exchange',\r\n permissions: systemDataExchangePermissions,\r\n rootPermissionType: PermissionType.SYSTEM,\r\n rootPermissionId: SystemPermission.DATA_EXCHANGE,\r\n },\r\n {\r\n title: 'Wells',\r\n permissions: systemWellPermissions,\r\n rootPermissionId: SystemPermission.MANAGE_WELLS,\r\n },\r\n {\r\n hidden: true,\r\n title: 'Equipment',\r\n permissions: systemEquipmentPermissions,\r\n rootPermissionId: SystemPermission.MANAGE_EQUIPMENT,\r\n },\r\n {\r\n hidden: true,\r\n title: 'Services',\r\n permissions: systemServicesPermissions,\r\n rootPermissionId: SystemPermission.MANAGE_SERVICES,\r\n },\r\n {\r\n hidden: true,\r\n title: 'Simulations',\r\n permissions: systemSimulationsPermissions,\r\n rootPermissionId: SystemPermission.MANAGE_SIMULATIONS,\r\n },\r\n {\r\n title: 'Aperio',\r\n permissions: systemAperioPermissions,\r\n rootPermissionId: SystemPermission.WELL_ACCESS_ONLY,\r\n },\r\n {\r\n title: 'Dashboard Configuration',\r\n permissions: systemDashboardConfigurationPermissions,\r\n rootPermissionId: SystemPermission.DASHBOARD_CONFIGURATION_ACCESS,\r\n },\r\n {\r\n title: 'Integrity Rules Management',\r\n permissions: integrityRulesManagement,\r\n rootPermissionId: SystemPermission.INTEGRITY_RULES_MANAGEMENT,\r\n },\r\n {\r\n title: 'Schematics Editor',\r\n permissions: schematicsEditorPermissions,\r\n rootPermissionId: SystemPermission.SCHEMATICS_EDITOR,\r\n },\r\n];\r\n\r\nexport const projectPermissionGroups = [\r\n {\r\n title: 'Project',\r\n permissions: allProjectPermissions,\r\n permissionGroups: [\r\n {\r\n title: 'Project details',\r\n permissions: projectDetailsPermissions,\r\n },\r\n {\r\n title: 'Well details',\r\n permissions: projectWellPermissions,\r\n },\r\n {\r\n title: 'Team',\r\n permissions: projectTeamPermissions,\r\n },\r\n {\r\n title: 'Documents',\r\n permissions: projectDocumentPermissions,\r\n },\r\n {\r\n title: 'Plan',\r\n permissions: projectPlanPermissions,\r\n },\r\n {\r\n title: 'Lessons',\r\n permissions: projectLessonPermissions,\r\n },\r\n {\r\n title: 'Report',\r\n permissions: projectReportPermissions,\r\n },\r\n ],\r\n },\r\n {\r\n title: 'Project Execute',\r\n permissions: projectExecutePermissions,\r\n showSubPermissions: true,\r\n },\r\n];\r\n\r\nexport const aperioUserAllowedRoutepaths = [\r\n routePaths.field.root,\r\n routePaths.wells.index,\r\n routePaths.wells.root,\r\n routePaths.details,\r\n routePaths.login,\r\n routePaths.logout,\r\n routePaths.changelog,\r\n];\r\n","import Agent from 'infrastructure/agent';\r\nimport mappers from 'mappers';\r\n\r\nexport const getSystemRoles = () => Agent.get('/authorization/system/role');\r\n\r\nexport const getSystemRole = (systemRoleId) =>\r\n Agent.get(`/authorization/system/role/${systemRoleId}`);\r\n\r\nexport const deleteSystemRole = (systemRoleId) =>\r\n Agent.delete(`/authorization/system/role/${systemRoleId}`);\r\n\r\nexport const createSystemRole = (systemRole) =>\r\n Agent.post('/authorization/system/role', systemRole);\r\n\r\nexport const updateSystemRole = (systemRoleId, systemRole) =>\r\n Agent.put(`/authorization/system/role/${systemRoleId}`, systemRole);\r\n\r\nexport const removeSystemRoleFromUser = (systemRoleId, userId) =>\r\n Agent.delete(`/authorization/system/role/${systemRoleId}/user/${userId}`);\r\n\r\nexport const addSystemRoleToUser = (systemRoleId, userId) =>\r\n Agent.post(\r\n `/authorization/system/role/${systemRoleId}/user/${userId}`,\r\n mappers.UserRole.to(systemRoleId, userId),\r\n );\r\n\r\nexport const getUsersAssignedToSystemRole = (systemRoleId) =>\r\n Agent.get(`/authorization/system/${systemRoleId}/user`);\r\n\r\nexport const getProjectRoles = () => Agent.get('/authorization/project/role');\r\n\r\nexport const getProjectRole = (projectRoleId) =>\r\n Agent.get(`/authorization/project/role/${projectRoleId}`);\r\n\r\nexport const deleteProjectRole = (projectRoleId) =>\r\n Agent.delete(`/authorization/project/role/${projectRoleId}`);\r\n\r\nexport const createProjectRole = (projectRole) =>\r\n Agent.post('/authorization/project/role', projectRole);\r\n\r\nexport const updateProjectRole = (projectRoleId, projectRole) =>\r\n Agent.put(`/authorization/project/role/${projectRoleId}`, projectRole);\r\n\r\nexport const getProjectRolePermissions = (roleId) =>\r\n Agent.get(`/authorization/project/role/${roleId}/permission`);\r\n\r\nexport const assignPermissionsToProjectRole = (roleId, rolePermissions) =>\r\n Agent.put(\r\n `/authorization/project/role/${roleId}/permissions`,\r\n rolePermissions,\r\n );\r\n\r\nexport const unassignPermissionsFromProjectRole = (roleId, permissionIds) =>\r\n Agent.put(\r\n `/authorization/project/role/${roleId}/permissions/delete`,\r\n permissionIds,\r\n );\r\n\r\nexport const getSystemRolePermissions = (roleId) =>\r\n Agent.get(`/authorization/system/role/${roleId}/systemPermissions`);\r\n\r\nexport const assignSystemPermissionsToSystemRole = (roleId, rolePermissions) =>\r\n Agent.put(\r\n `/authorization/system/role/${roleId}/systemPermissions`,\r\n rolePermissions,\r\n );\r\n\r\nexport const unassignSystemPermissionsFromSystemRole = (\r\n roleId,\r\n permissionIds,\r\n) =>\r\n Agent.put(\r\n `/authorization/system/role/${roleId}/systemPermissions/delete`,\r\n permissionIds,\r\n );\r\n\r\nexport const getSystemRoleProjectPermissions = (roleId) =>\r\n Agent.get(`/authorization/system/role/${roleId}/projectPermissions`);\r\n\r\nexport const assignProjectPermissionsToSystemRole = (roleId, rolePermissions) =>\r\n Agent.put(\r\n `/authorization/system/role/${roleId}/projectPermissions`,\r\n rolePermissions,\r\n );\r\n\r\nexport const unassignProjectPermissionsFromSystemRole = (\r\n roleId,\r\n permissionIds,\r\n) =>\r\n Agent.put(\r\n `/authorization/system/role/${roleId}/projectPermissions/delete`,\r\n permissionIds,\r\n );\r\n\r\nexport const getProjectPermissions = () =>\r\n Agent.get('/authorization/project/permission');\r\n\r\nexport const getSystemPermissions = () =>\r\n Agent.get('/authorization/system/permission');\r\n\r\nconst authorizationService = {\r\n getSystemRoles,\r\n getSystemRole,\r\n deleteSystemRole,\r\n getUsersAssignedToSystemRole,\r\n createSystemRole,\r\n updateSystemRole,\r\n removeSystemRoleFromUser,\r\n addSystemRoleToUser,\r\n\r\n getProjectRoles,\r\n getProjectRole,\r\n deleteProjectRole,\r\n createProjectRole,\r\n updateProjectRole,\r\n\r\n getProjectRolePermissions,\r\n assignPermissionsToProjectRole,\r\n unassignPermissionsFromProjectRole,\r\n\r\n getSystemRolePermissions,\r\n assignSystemPermissionsToSystemRole,\r\n unassignSystemPermissionsFromSystemRole,\r\n getSystemRoleProjectPermissions,\r\n assignProjectPermissionsToSystemRole,\r\n unassignProjectPermissionsFromSystemRole,\r\n\r\n getSystemPermissions,\r\n getProjectPermissions,\r\n};\r\n\r\nexport default authorizationService;\r\n","import { ROLE_ACCESS_TYPES } from 'authorization/authorization.constants';\r\nimport { Map } from 'immutable';\r\n\r\nconst SystemRole = {\r\n from: ({ accessType, ...systemRole }) =>\r\n Map({\r\n isProtected: accessType === ROLE_ACCESS_TYPES.PROTECTED,\r\n ...systemRole,\r\n }),\r\n};\r\n\r\nconst ProjectRole = {\r\n from: ({ accessType, ...projectRole }) =>\r\n Map({\r\n isProtected: accessType === ROLE_ACCESS_TYPES.PROTECTED,\r\n ...projectRole,\r\n }),\r\n};\r\n\r\nconst RolePermission = {\r\n from: (rolePermission) =>\r\n Map({\r\n ...rolePermission,\r\n }),\r\n to: (roleId, permissionId) => ({\r\n roleId,\r\n permissionId,\r\n }),\r\n};\r\n\r\nconst Permission = {\r\n from: ({ ...permission }) => Map({ ...permission }),\r\n};\r\n\r\nconst authorizationMappers = {\r\n SystemRole,\r\n ProjectRole,\r\n RolePermission,\r\n Permission,\r\n};\r\n\r\nexport default authorizationMappers;\r\n","import { initialize } from 'redux-form/immutable';\r\nimport { replace } from 'connected-react-router';\r\n\r\nimport {\r\n AUTHORIZATION_ACTIONS,\r\n PROJECT_ROLE_FORM,\r\n SYSTEM_ROLE_FORM,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport {\r\n getMainVendorUsers,\r\n getUsersByOrganizationType,\r\n} from 'app/app.actions';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { toProjectRole, toSystemRole } from 'utils/route.util';\r\nimport authorizationService from 'services/authorization.service';\r\nimport authorizationMappers from 'authorization/authorization.mappers';\r\n\r\n/** System Roles */\r\nexport const userAccessOnLoad = () => (dispatch) =>\r\n dispatch(getSystemRoles()).then(() => dispatch(getMainVendorUsers()));\r\n\r\nexport const userAccessOnLoadWithOrganizationType =\r\n (organizationType) => (dispatch) =>\r\n dispatch(getSystemRoles()).then(() =>\r\n dispatch(getUsersByOrganizationType(organizationType)),\r\n );\r\n\r\nexport const systemRoleAccessRightsOnLoad = (systemRoleId) => (dispatch) =>\r\n Promise.all([\r\n dispatch(getProjectPermissions()),\r\n dispatch(getSystemPermissions()),\r\n ]).then(() =>\r\n Promise.all([\r\n dispatch(getSystemRolePermissions(systemRoleId)),\r\n dispatch(getSystemRoleProjectPermissions(systemRoleId)),\r\n ]),\r\n );\r\n\r\nexport const getSystemRoles = () => (dispatch) => {\r\n const payload = authorizationService.getSystemRoles();\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getSystemRole = (systemRoleId) => (dispatch) => {\r\n const payload = authorizationService.getSystemRole(systemRoleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLE,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const createSystemRole = (systemRole) => (dispatch) => {\r\n const payload = authorizationService.createSystemRole(systemRole);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.CREATE_SYSTEM_ROLE,\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Project Role created successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const createSystemRoleOnSubmit =\r\n (toggleModal) => (dispatch) => (systemRole) => {\r\n dispatch(createSystemRole(systemRole.toJS()))\r\n .then(({ roleId }) => dispatch(replace(toSystemRole(roleId))))\r\n .then(toggleModal);\r\n };\r\n\r\nexport const deleteSystemRole = (systemRoleId) => (dispatch) => {\r\n const payload = authorizationService.deleteSystemRole(systemRoleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.DELETE_SYSTEM_ROLE,\r\n systemRoleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'System Role deleted successfully',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteSystemRoleAskConfirmation = (systemRole) => (dispatch) => {\r\n const systemRoleId = systemRole.get('roleId');\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.DELETE_SYSTEM_ROLE_ASK_CONFIRMATION,\r\n confirmationDialog: {\r\n title: 'Delete System Role',\r\n confirmButtonText: 'Delete',\r\n description: `Are you sure you want to delete ${systemRole.get('name')}?`,\r\n },\r\n payload: () =>\r\n dispatch(deleteSystemRole(systemRoleId)).then(() =>\r\n dispatch(replace(toSystemRole())),\r\n ),\r\n });\r\n};\r\n\r\nexport const updateSystemRole = (systemRoleId, systemRole) => (dispatch) => {\r\n const payload = authorizationService.updateSystemRole(\r\n systemRoleId,\r\n systemRole,\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.UPDATE_SYSTEM_ROLE,\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Saved',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const systemRoleFormOnChange = (values, dispatch, props) => {\r\n const { dirty, systemRoleId } = props;\r\n\r\n if (dirty) {\r\n dispatch(updateSystemRole(systemRoleId, values.toJS()));\r\n }\r\n};\r\n\r\nexport const initializeSystemRoleForm = (systemRole) => (dispatch) => {\r\n return dispatch(initialize(SYSTEM_ROLE_FORM.ID, systemRole));\r\n};\r\n\r\nexport const removeSystemRoleFromUser = (systemRole, user) => (dispatch) =>\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.REMOVE_SYSTEM_ROLE_FROM_USER,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Removing Role...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The role was successfully removed',\r\n },\r\n confirmationDialog: {\r\n title: 'Remove role',\r\n confirmButtonText: 'Remove',\r\n description: `Are you sure you want to remove ${systemRole.get(\r\n 'name',\r\n )} from ${user.get('name')}?`,\r\n },\r\n userId: user.get('id'),\r\n systemRoleId: systemRole.get('roleId'),\r\n payload: () =>\r\n authorizationService.removeSystemRoleFromUser(\r\n systemRole.get('roleId'),\r\n user.get('id'),\r\n ),\r\n });\r\n\r\nexport const addSystemRoleToUser = (systemRoleId, userId) => (dispatch) => {\r\n const payload = authorizationService.addSystemRoleToUser(\r\n systemRoleId,\r\n userId,\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.ADD_SYSTEM_ROLE_TO_USER,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Adding Role...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The role was successfully added',\r\n },\r\n payload,\r\n userId,\r\n systemRoleId,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getUsersAssignedToSystemRole = (systemRoleId) => (dispatch) => {\r\n const payload =\r\n authorizationService.getUsersAssignedToSystemRole(systemRoleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_USERS_ASSIGNED_TO_SYSTEM_ROLE,\r\n roleId: systemRoleId,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getSystemRolePermissions = (roleId) => (dispatch) => {\r\n const payload = authorizationService.getSystemRolePermissions(roleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLE_PERMISSIONS,\r\n payload,\r\n roleId,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const assignSystemPermissionsToSystemRole =\r\n (roleId, permissionIds) => (dispatch) => {\r\n const payload = authorizationService.assignSystemPermissionsToSystemRole(\r\n roleId,\r\n permissionIds.map((permissionId) =>\r\n authorizationMappers.RolePermission.to(roleId, permissionId),\r\n ),\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.ASSIGN_SYSTEM_PERMISSIONS_TO_SYSTEM_ROLE,\r\n payload,\r\n roleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Assigning...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Role permissions assigned successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const unassignSystemPermissionsFromSystemRole =\r\n (roleId, permissionIds) => (dispatch) => {\r\n const payload =\r\n authorizationService.unassignSystemPermissionsFromSystemRole(\r\n roleId,\r\n permissionIds,\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.UNASSIGN_SYSTEM_PERMISSIONS_FROM_SYSTEM_ROLE,\r\n payload,\r\n roleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Unassigning...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Role permissions unassigned successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const getSystemRoleProjectPermissions = (roleId) => (dispatch) => {\r\n const payload = authorizationService.getSystemRoleProjectPermissions(roleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLE_PROJECT_PERMISSIONS,\r\n payload,\r\n roleId,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const assignProjectPermissionsToSystemRole =\r\n (roleId, permissionIds) => (dispatch) => {\r\n const payload = authorizationService.assignProjectPermissionsToSystemRole(\r\n roleId,\r\n permissionIds.map((permissionId) =>\r\n authorizationMappers.RolePermission.to(roleId, permissionId),\r\n ),\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.ASSIGN_PROJECT_PERMISSIONS_TO_SYSTEM_ROLE,\r\n payload,\r\n roleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Assigning...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Role permissions assigned successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const unassignProjectPermissionsFromSystemRole =\r\n (roleId, permissionIds) => (dispatch) => {\r\n const payload =\r\n authorizationService.unassignProjectPermissionsFromSystemRole(\r\n roleId,\r\n permissionIds,\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.UNASSIGN_PROJECT_PERMISSIONS_FROM_SYSTEM_ROLE,\r\n payload,\r\n roleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Unassigning...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Role permissions unassigned successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\n/** Project Roles */\r\n\r\nexport const projectRoleAccessRightsOnLoad = (projectRoleId) => (dispatch) =>\r\n dispatch(getProjectPermissions()).then(() =>\r\n dispatch(getProjectRolePermissions(projectRoleId)),\r\n );\r\n\r\nexport const getProjectRoles = () => (dispatch) => {\r\n const payload = authorizationService.getProjectRoles();\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_PROJECT_ROLES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getProjectRole = (projectRoleId) => (dispatch) => {\r\n const payload = authorizationService.getProjectRole(projectRoleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_PROJECT_ROLE,\r\n payload,\r\n projectRoleId,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteProjectRole = (projectRoleId) => (dispatch) => {\r\n const payload = authorizationService.deleteProjectRole(projectRoleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.DELETE_PROJECT_ROLE,\r\n projectRoleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Project Role deleted successfully',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteProjectRoleAskConfirmation = (projectRole) => (dispatch) => {\r\n const projectRoleId = projectRole.get('roleId');\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.DELETE_PROJECT_ROLE_ASK_CONFIRMATION,\r\n projectRoleId,\r\n confirmationDialog: {\r\n title: 'Delete Project Role',\r\n confirmButtonText: 'Delete',\r\n description: `Are you sure you want to delete ${projectRole.get(\r\n 'name',\r\n )}?`,\r\n },\r\n payload: () =>\r\n dispatch(deleteProjectRole(projectRoleId)).then(() =>\r\n dispatch(replace(toProjectRole())),\r\n ),\r\n });\r\n};\r\n\r\nexport const createProjectRole = (projectRole) => (dispatch) => {\r\n const payload = authorizationService.createProjectRole(projectRole);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.CREATE_PROJECT_ROLE,\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Project Role created successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const createProjectRoleOnSubmit =\r\n (toggleModal) => (dispatch) => (projectRole) => {\r\n dispatch(createProjectRole(projectRole.toJS()))\r\n .then(({ roleId }) => dispatch(replace(toProjectRole(roleId))))\r\n .then(toggleModal);\r\n };\r\n\r\nexport const updateProjectRole = (projectRoleId, projectRole) => (dispatch) => {\r\n const payload = authorizationService.updateProjectRole(\r\n projectRoleId,\r\n projectRole,\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.UPDATE_PROJECT_ROLE,\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Saved',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const projectRoleFormOnChange = (projectRole, dispatch, props) => {\r\n const { dirty, projectRoleId } = props;\r\n\r\n if (dirty) {\r\n dispatch(updateProjectRole(projectRoleId, projectRole.toJS()));\r\n }\r\n};\r\n\r\nexport const initializeProjectRoleForm = (projectRole) => (dispatch) => {\r\n return dispatch(initialize(PROJECT_ROLE_FORM.ID, projectRole));\r\n};\r\n\r\nexport const getProjectRolePermissions = (roleId) => (dispatch) => {\r\n const payload = authorizationService.getProjectRolePermissions(roleId);\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_PROJECT_ROLE_PERMISSIONS,\r\n payload,\r\n roleId,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const assignPermissionsToProjectRole =\r\n (roleId, permissionIds) => (dispatch) => {\r\n const payload = authorizationService.assignPermissionsToProjectRole(\r\n roleId,\r\n permissionIds.map((permissionId) =>\r\n authorizationMappers.RolePermission.to(roleId, permissionId),\r\n ),\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.ASSIGN_PERMISSIONS_TO_PROJECT_ROLE,\r\n payload,\r\n roleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Assigning...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Role permissions assigned successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const unassignPermissionsFromProjectRole =\r\n (roleId, permissionIds) => (dispatch) => {\r\n const payload = authorizationService.unassignPermissionsFromProjectRole(\r\n roleId,\r\n permissionIds,\r\n );\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.UNASSIGN_PERMISSIONS_FROM_PROJECT_ROLE,\r\n payload,\r\n roleId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Unassigning...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Role permissions unassigned successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const getProjectPermissions = () => (dispatch) => {\r\n const payload = authorizationService.getProjectPermissions();\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_PROJECT_PERMISSIONS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getSystemPermissions = () => (dispatch) => {\r\n const payload = authorizationService.getSystemPermissions();\r\n\r\n dispatch({\r\n type: AUTHORIZATION_ACTIONS.GET_SYSTEM_PERMISSIONS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n","import service from 'services/app.service';\r\nimport teamService from 'services/team.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { getProjectById } from 'features/projects/projects.actions';\r\nimport { TEAM_ACTIONS } from 'features/projects/team/team.constants';\r\nimport { getProjectRoles } from 'authorization/authorization.actions';\r\n\r\nexport const getProjectMember = (projectId, projectMemberId) => (dispatch) => {\r\n const payload = teamService.getProjectMember(projectId, projectMemberId);\r\n\r\n dispatch({\r\n payload,\r\n type: TEAM_ACTIONS.GET_PROJECT_MEMBER,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveProjectMember = (projectMember) => ({\r\n type: TEAM_ACTIONS.RECEIVE_PROJECT_MEMBER,\r\n payload: projectMember,\r\n});\r\n\r\nexport const assignProjectFieldCrewToRole =\r\n (projectId, projectMember, roleId) => (dispatch) => {\r\n const userId = projectMember.get('userId');\r\n const projectMemberFieldCrewId = projectMember.get(\r\n 'projectMemberFieldCrewId',\r\n );\r\n\r\n dispatch({\r\n userId,\r\n roleId,\r\n type: TEAM_ACTIONS.ASSIGN_PROJECT_FIELD_CREW_TO_ROLE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Team member was successfully assigned a role',\r\n },\r\n payload: () =>\r\n teamService\r\n .assignProjectFieldCrewToRole(\r\n projectId,\r\n projectMemberFieldCrewId,\r\n roleId,\r\n )\r\n .then(() => dispatch(getFieldCrews(projectId)))\r\n .then(() => dispatch(getProjectById(projectId))),\r\n });\r\n };\r\n\r\nexport const assignProjectMemberToRole =\r\n (projectMember, roleId) => (dispatch) => {\r\n const userId = projectMember.get('userId');\r\n const projectId = projectMember.get('projectId');\r\n const projectMemberId = projectMember.get('projectMemberId');\r\n\r\n dispatch({\r\n userId,\r\n roleId,\r\n type: TEAM_ACTIONS.ASSIGN_PROJECT_MEMBER_TO_ROLE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Team member was successfully assigned a role',\r\n },\r\n payload: () =>\r\n teamService\r\n .assignProjectMemberToRole(projectId, projectMemberId, roleId)\r\n .then(() => dispatch(getProjectMember(projectId, projectMemberId)))\r\n .then(() => dispatch(getProjectById(projectId))),\r\n });\r\n };\r\n\r\nexport const assignProjectMemberTeamRole =\r\n (projectMember, teamProjectRole) => (dispatch) => {\r\n const userId = projectMember.get('userId');\r\n const projectId = projectMember.get('projectId');\r\n const projectMemberId = projectMember.get('projectMemberId');\r\n const teamProjectRoleId = teamProjectRole.get('teamProjectRoleId');\r\n\r\n dispatch({\r\n userId,\r\n teamProjectRoleId,\r\n type: TEAM_ACTIONS.UPDATE_MEMBER_TEAM_PROJECT_ROLE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Team member was successfully updated',\r\n },\r\n payload: () =>\r\n teamService\r\n .assignProjectMemberTeamRole(\r\n projectId,\r\n projectMemberId,\r\n teamProjectRole.toJS(),\r\n )\r\n .then(() => dispatch(getAllProjectMembers(projectId)))\r\n .then(() => dispatch(getProjectById(projectId))),\r\n });\r\n };\r\n\r\nexport const getAllAvailableUsers = (projectId) => (dispatch) => {\r\n const payload = teamService.allAvailableUsers(projectId);\r\n\r\n dispatch({\r\n payload,\r\n type: TEAM_ACTIONS.GET_ALL_AVAILABLE_USERS,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getAllAvailableFieldCrewUsers = (projectId) => (dispatch) => {\r\n const payload = teamService.allAvailableUsers(projectId);\r\n\r\n dispatch({\r\n payload,\r\n type: TEAM_ACTIONS.GET_ALL_AVAILABLE_FIELD_CREW_USERS,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onLoad = (projectId) => (dispatch) => {\r\n dispatch({\r\n type: TEAM_ACTIONS.PROJECT_MEMBER_PAGE_LOADED,\r\n payload: () =>\r\n dispatch(getProjectRoles()).then(() => {\r\n return Promise.all([\r\n dispatch(getAllAvailableUsers(projectId)),\r\n dispatch(getAllProjectMembers(projectId)),\r\n dispatch(getAllTeamProjectRoles(projectId)),\r\n ]);\r\n }),\r\n });\r\n};\r\n\r\nexport const onLoadProjectFieldCrew = (projectId) => (dispatch) => {\r\n dispatch({\r\n type: TEAM_ACTIONS.PROJECT_FIELD_CREW_PAGE_LOADED,\r\n payload: () =>\r\n dispatch(getProjectRoles()).then(() => {\r\n return Promise.all([\r\n dispatch(getAllAvailableFieldCrewUsers(projectId)),\r\n dispatch(getFieldCrews(projectId)),\r\n dispatch(getCrews(projectId)),\r\n dispatch(getQualifications(projectId)),\r\n ]);\r\n }),\r\n });\r\n};\r\n\r\nexport const getQualifications = (projectId) => (dispatch) => {\r\n const payload = teamService.getQualifications(projectId);\r\n\r\n dispatch({\r\n payload,\r\n type: TEAM_ACTIONS.GET_PROJECT_FIELD_QUALIFICATIONS,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getCrews = (projectId) => (dispatch) => {\r\n const payload = teamService.getCrews(projectId);\r\n\r\n dispatch({\r\n payload,\r\n type: TEAM_ACTIONS.GET_PROJECT_FIELD_CREWS,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: TEAM_ACTIONS.PROJECT_TEAM_PAGE_UNLOADED });\r\n\r\nexport const getAllProjectMembers = (projectId) => (dispatch) => {\r\n const payload = service\r\n .allMembers(projectId)\r\n .then((projectMembers) => dispatch(receiveProjectMembers(projectMembers)));\r\n\r\n dispatch({\r\n type: TEAM_ACTIONS.GET_ALL_PROJECT_MEMBERS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getAllTeamProjectRoles = (projectId) => (dispatch) => {\r\n const payload = teamService\r\n .getTeamProjectRoles(projectId)\r\n .then((fieldCrews) => dispatch(receiveProjectTeamRoles(fieldCrews)));\r\n\r\n dispatch({\r\n type: TEAM_ACTIONS.GET_TEAM_PROJECT_ROLES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getFieldCrews = (projectId) => (dispatch) => {\r\n const payload = teamService\r\n .getFieldCrew(projectId)\r\n .then((fieldCrews) => dispatch(receiveProjectFieldCrews(fieldCrews)));\r\n\r\n dispatch({\r\n type: TEAM_ACTIONS.GET_PROJECT_FIELD_MEMBER_CREWS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteProjectMember =\r\n (projectId, projectMemberId, memberName) => (dispatch) => {\r\n return dispatch({\r\n projectMemberId,\r\n type: TEAM_ACTIONS.DELETE_PROJECT_MEMBER,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${memberName} was deleted from Onshore Team`,\r\n },\r\n confirmationDialog: {\r\n confirmButtonText: 'Remove',\r\n title: 'Remove Onshore Team Member',\r\n description: `Are you sure you want to remove ${memberName} from the Onshore team?`,\r\n },\r\n payload: () =>\r\n teamService.deleteProjectMember(projectId, projectMemberId),\r\n });\r\n };\r\n\r\nexport const addUsersToProject = (projectId, selectedUsers) => (dispatch) => {\r\n const userIds = selectedUsers.map((user) => user.get('id')).toArray();\r\n\r\n const userMsgPart =\r\n userIds.length <= 1\r\n ? `${selectedUsers.first().get('name')} was`\r\n : `${userIds.length} members were`;\r\n\r\n const payload = teamService\r\n .addProjectMembers(projectId, userIds)\r\n .then((projectMembers) => dispatch(receiveProjectMembers(projectMembers)));\r\n\r\n dispatch({\r\n payload,\r\n type: TEAM_ACTIONS.ADD_PROJECT_MEMBERS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${userMsgPart} added to the Onshore team`,\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const addFieldCrewToProject =\r\n (projectId, selectedFieldCrews) => (dispatch) => {\r\n const userIds = selectedFieldCrews.map((user) => user.get('id')).toArray();\r\n\r\n const userMsgPart =\r\n userIds.length <= 1\r\n ? `${selectedFieldCrews.first().get('name')} was`\r\n : `${userIds.length} members were`;\r\n\r\n const payload = teamService\r\n .addProjectFieldCrews(projectId, userIds)\r\n .then((projectMembers) =>\r\n dispatch(receiveProjectFieldCrews(projectMembers)),\r\n );\r\n\r\n dispatch({\r\n payload,\r\n type: TEAM_ACTIONS.ADD_PROJECT_FIELD_CREW,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${userMsgPart} added to the Field crew team`,\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const deleteProjectFieldCrew =\r\n (projectId, projectMemberId, memberName) => (dispatch) => {\r\n return dispatch({\r\n projectMemberId,\r\n type: TEAM_ACTIONS.DELETE_PROJECT_FIELD_CREW,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${memberName} was deleted from Field Crew`,\r\n },\r\n confirmationDialog: {\r\n confirmButtonText: 'Remove',\r\n title: 'Remove Field Crew Team Member',\r\n description: `Are you sure you want to remove ${memberName} from the Field crew team?`,\r\n },\r\n payload: () =>\r\n teamService.deleteProjectFieldCrew(projectId, projectMemberId),\r\n });\r\n };\r\n\r\nexport const receiveProjectMembers = (projectMembers) => ({\r\n payload: projectMembers,\r\n type: TEAM_ACTIONS.RECEIVE_PROJECT_MEMBERS,\r\n});\r\n\r\nexport const receiveProjectFieldCrews = (fieldCrews) => ({\r\n payload: fieldCrews,\r\n type: TEAM_ACTIONS.RECEIVE_PROJECT_FIELD_CREWS,\r\n});\r\n\r\nexport const receiveProjectTeamRoles = (projectTeamRoles) => ({\r\n payload: projectTeamRoles,\r\n type: TEAM_ACTIONS.RECEIVE_TEAM_PROJECT_ROLES,\r\n});\r\n\r\nexport const receiveProjectFieldCrew = (fieldCrew) => ({\r\n type: TEAM_ACTIONS.RECEIVE_PROJECT_FIELD_CREW,\r\n payload: fieldCrew,\r\n});\r\n\r\nexport const updateProjectFieldCrew =\r\n (projectId, projectMemId, vals) => (dispatch) => {\r\n const payload = teamService\r\n .updateProjectFieldCrew(projectId, projectMemId, vals)\r\n .then(() => dispatch(getFieldCrews(projectId)));\r\n\r\n dispatch({\r\n projectMemberFieldCrewId: projectMemId,\r\n payload,\r\n type: TEAM_ACTIONS.UPDATE_PROJECT_FIELD_CREW,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Team was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n","import { push, replace } from 'connected-react-router/immutable';\r\n\r\nimport { addNotification } from 'altus-redux-middlewares';\r\n\r\nimport {\r\n getAllActivityTypes,\r\n getAllPointInTimeActivityTypes,\r\n getAllWaitingActivityTypes,\r\n getProjectStatus,\r\n getProjectStatusLite,\r\n} from 'features/projects/activities/activities.actions';\r\n\r\nimport {\r\n FormikFormStatus,\r\n HTTP_STATUS,\r\n NOTIFICATION_VARIANTS,\r\n} from 'app/app.constants';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport service from 'services/app.service';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { toProjectDetails } from 'utils/route.util';\r\nimport projectService from 'services/project.service';\r\nimport { getFields } from 'features/wells/wellbore.actions';\r\n\r\nimport {\r\n PROJECTS_ACTIONS,\r\n PROJECT_VIEWS,\r\n} from 'features/projects/projects.constants';\r\nimport { receiveProjectMember } from 'features/projects/team/team.actions';\r\n\r\nexport const onLoad = (organizationId) => (dispatch) => {\r\n const filter = {\r\n organizationId,\r\n };\r\n\r\n const payload = Promise.all([\r\n dispatch(getFields(filter)),\r\n service.getFacilities(filter),\r\n service.getAllProjectStatuses(),\r\n service.getAllDepartments(),\r\n ]);\r\n\r\n dispatch({\r\n type: PROJECTS_ACTIONS.PROJECTS_PAGE_LOADED,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onUnload = () => (dispatch) => {\r\n dispatch({ type: PROJECTS_ACTIONS.PROJECTS_PAGE_UNLOADED });\r\n};\r\n\r\nexport const updateFilter = (filter) => (dispatch) => {\r\n if (filter?.ganttView === PROJECT_VIEWS.CHART_VIEW) {\r\n getAllProjectsGantt(filter)(dispatch);\r\n return;\r\n }\r\n\r\n dispatch({\r\n filter,\r\n type: PROJECTS_ACTIONS.SEARCH_PROJECTS,\r\n payload: () =>\r\n projectService\r\n .searchProjects(filter)\r\n .then((projects) => dispatch(receiveProjects(projects))),\r\n });\r\n};\r\n\r\nexport const submitCreateProjectForm =\r\n (project, formik, callback) => (dispatch) => {\r\n const { setStatus, setSubmitting } = formik;\r\n\r\n setSubmitting(true);\r\n\r\n return dispatch(createProject(project))\r\n .then((createdProject) => {\r\n setSubmitting(false);\r\n setStatus(FormikFormStatus.SUCCESS);\r\n\r\n invokeIfFunction(callback);\r\n\r\n dispatch(push(toProjectDetails(createdProject.projectId)));\r\n })\r\n .catch((error) => {\r\n setSubmitting(false);\r\n setStatus(FormikFormStatus.ERROR);\r\n\r\n if (error?.response?.body?.hasErrors) {\r\n var message = error.response.body.errors[0];\r\n\r\n dispatch(\r\n addNotification({\r\n message,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }\r\n });\r\n };\r\n\r\nexport const createProject = (project) => (dispatch) => {\r\n const payload = projectService.createProject(project).then((project) => {\r\n dispatch(receiveProject(project));\r\n\r\n return project;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: PROJECTS_ACTIONS.CREATE_PROJECT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'A new project was successfully created',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getProjectById = (projectId) => (dispatch) => {\r\n const payload = service.getProjectById(projectId).then((project) => {\r\n dispatch(receiveProject(project));\r\n\r\n return project;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: PROJECTS_ACTIONS.GET_PROJECT_BY_ID,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getCurrentProjectMember = (projectId) => (dispatch) => {\r\n const payload = projectService\r\n .getCurrentProjectMember(projectId)\r\n .catch((error) => {\r\n if (error.status === HTTP_STATUS.NOT_FOUND) {\r\n return;\r\n }\r\n\r\n return Promise.reject(error);\r\n })\r\n .then((projectMember) => {\r\n if (projectMember) {\r\n dispatch(receiveProjectMember(projectMember));\r\n }\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: PROJECTS_ACTIONS.GET_CURRENT_PROJECT_MEMBER,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveProject = (project) => ({\r\n payload: project,\r\n type: PROJECTS_ACTIONS.RECEIVE_PROJECT,\r\n});\r\n\r\nexport const receiveProjects = (projects) => ({\r\n payload: projects,\r\n type: PROJECTS_ACTIONS.RECEIVE_PROJECTS,\r\n});\r\n\r\nexport const receiveGanttProjects = (projects) => ({\r\n payload: projects,\r\n type: PROJECTS_ACTIONS.RECEIVE_GANTT_PROJECTS,\r\n});\r\n\r\nexport const clearProjects = (projects) => ({\r\n payload: projects,\r\n type: PROJECTS_ACTIONS.CLEAR_PROJECTS,\r\n});\r\n\r\nexport const getProjectResources = (projectId) => (dispatch) => {\r\n const payload = Promise.all([\r\n dispatch(getProjectById(projectId)),\r\n dispatch(getProjectStatusLite(projectId)),\r\n dispatch(getCurrentProjectMember(projectId)),\r\n ]);\r\n\r\n dispatch({\r\n type: PROJECTS_ACTIONS.GET_PROJECT_RESOURCES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getProjectStatusSilent = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: PROJECTS_ACTIONS.GET_PROJECT_STATUS_SILENT,\r\n payload: () => Promise.all([dispatch(getProjectStatus(projectId))]),\r\n });\r\n\r\nexport const getActivityTypes = () => (dispatch) =>\r\n dispatch({\r\n type: PROJECTS_ACTIONS.GET_ACTIVITY_TYPES,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]:\r\n 'Failed to fetch activity types - try reloading',\r\n },\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllActivityTypes()),\r\n dispatch(getAllPointInTimeActivityTypes()),\r\n dispatch(getAllWaitingActivityTypes()),\r\n ]),\r\n });\r\n\r\nexport const resetProjectResources = () => (dispatch) =>\r\n dispatch({\r\n type: PROJECTS_ACTIONS.RESET_PROJECT_RESOURCES,\r\n });\r\n\r\nexport const projectPagesOnUnload = () => (dispatch) => {\r\n dispatch({\r\n type: PROJECTS_ACTIONS.PROJECT_PAGES_UNLOADED,\r\n });\r\n};\r\n\r\nexport const toProjectsHome = () => (dispatch) =>\r\n dispatch(replace(routePaths.projects));\r\n\r\nexport const updateProject = (projectId, project) => (dispatch) => {\r\n const payload = projectService\r\n .updateProject(projectId, project)\r\n .then((updatedProject) => {\r\n dispatch(receiveProject(updatedProject));\r\n\r\n return updatedProject;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: PROJECTS_ACTIONS.UPDATE_PROJECT,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const archiveProject = (projectId, isArchive, filter) => (dispatch) => {\r\n dispatch({\r\n payload: () =>\r\n projectService.archiveProject(projectId, isArchive).then(() => {\r\n projectService\r\n .searchProjects(filter)\r\n .then((projects) => dispatch(receiveProjects(projects)));\r\n }),\r\n type: PROJECTS_ACTIONS.ARCHIVE_PROJECT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `Project ${projectId} was restored`,\r\n },\r\n confirmationDialog: {\r\n title: 'Restore project?',\r\n confirmButtonText: 'Restore',\r\n description: 'Are you sure you want to restore project?',\r\n },\r\n });\r\n};\r\n\r\nexport const getAllProjectsGantt = (filter) => (dispatch) => {\r\n dispatch({\r\n type: PROJECTS_ACTIONS.GANTT_PROJECTS,\r\n payload: () =>\r\n projectService\r\n .getAllProjectsGantt(filter)\r\n .then((projects) => dispatch(receiveGanttProjects(projects))),\r\n });\r\n};\r\n","import Agent from 'infrastructure/agent';\r\nimport wellboreSectionMappers from 'features/wells/sections/wellboreSection.mappers';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\n\r\nconst createSimulation = (projectId, taskId, simulation) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/simulations`,\r\n simulationMappers.Simulation.to(simulation),\r\n );\r\n\r\nconst deleteSimulation = (projectId, taskId, simulationId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}`,\r\n );\r\n\r\nconst getSimulation = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}`,\r\n );\r\n\r\nconst getSimulationsForTask = (projectId, taskId, states) => {\r\n return Agent.get(`/project/${projectId}/tasks/${taskId}/simulations`, {\r\n states,\r\n });\r\n};\r\n\r\nconst getSimulationResults = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/results`,\r\n );\r\n\r\nconst getSimulationResultsByTime = (projectId, taskId, simulationId, query) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/results/bytime`,\r\n query,\r\n );\r\n\r\nconst updateSimulation = (projectId, taskId, simulationId, simulation) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}`,\r\n simulationMappers.Simulation.to(simulation),\r\n );\r\n\r\nconst duplicateSimulation = (projectId, taskId, simulationId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/copy`,\r\n );\r\n\r\nconst createUpdatedPlannedSimulation = (projectId, taskId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/simulations/updated-planned`,\r\n );\r\n\r\nconst toggleSimulationFavorite = (projectId, taskId, simulationId) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/favorite`,\r\n );\r\n\r\nconst toggleSimulationPlanned = (projectId, taskId, simulationId) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/planned`,\r\n );\r\n\r\nconst getSimulationParameters = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/parameters`,\r\n );\r\n\r\nconst getDefaultSimulationParameter = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/parameters/default`,\r\n );\r\n\r\nconst createSimulationParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameter,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/parameters`,\r\n simulationMappers.SimulationParameter.to(simulationParameter),\r\n );\r\n\r\nconst updateSimulationParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameterId,\r\n simulationParameter,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/parameters/${simulationParameterId}`,\r\n simulationMappers.SimulationParameter.to(simulationParameter),\r\n );\r\n\r\nconst deleteSimulationParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameterId,\r\n) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/parameters/${simulationParameterId}`,\r\n );\r\n\r\nconst getWellboreSectionsForSimulation = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/sections`,\r\n );\r\n\r\nconst updateSimulationWellboreSection = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/sections/${wellboreSectionId}`,\r\n wellboreSectionMappers.WellboreSection.to(wellboreSection),\r\n );\r\n\r\nconst runSimulation = (projectId, taskId, simulationId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/run`,\r\n );\r\n\r\nconst getDefaultSimulationFluid = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/fluids/default`,\r\n );\r\n\r\nconst getSimulationFluids = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/fluids`,\r\n );\r\n\r\nconst createSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluid,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/fluids`,\r\n simulationMappers.SimulationFluid.to(simulationFluid),\r\n );\r\n\r\nconst updateSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n simulationFluid,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/fluids/${simulationFluidId}`,\r\n simulationMappers.SimulationFluid.to(simulationFluid),\r\n );\r\n\r\nconst deleteSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/fluids/${simulationFluidId}`,\r\n );\r\n\r\nconst deleteSimulationResults = (projectId, taskId, simulationId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/delete/results`,\r\n );\r\n\r\nconst deleteSimulationFluids = (projectId, taskId, simulationId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/fluids/delete`,\r\n );\r\n\r\nconst getSimulationDynamicToolParameters = (projectId, taskId, simulationId) =>\r\n Agent.get(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/dynamictoolparameters`,\r\n );\r\n\r\nconst updateSimulationDynamicToolParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationDynamicToolParameterId,\r\n simulationDynamicToolParameter,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/simulations/${simulationId}/dynamictoolparameters/${simulationDynamicToolParameterId}`,\r\n simulationMappers.SimulationDynamicToolParameter.to(\r\n simulationDynamicToolParameter,\r\n ),\r\n );\r\n\r\nconst simulationService = {\r\n runSimulation,\r\n getSimulation,\r\n createSimulation,\r\n deleteSimulation,\r\n updateSimulation,\r\n getSimulationFluids,\r\n duplicateSimulation,\r\n createUpdatedPlannedSimulation,\r\n getSimulationResults,\r\n createSimulationFluid,\r\n updateSimulationFluid,\r\n deleteSimulationFluid,\r\n getSimulationsForTask,\r\n deleteSimulationFluids,\r\n getSimulationParameters,\r\n deleteSimulationResults,\r\n toggleSimulationPlanned,\r\n toggleSimulationFavorite,\r\n updateSimulationParameter,\r\n createSimulationParameter,\r\n deleteSimulationParameter,\r\n getDefaultSimulationFluid,\r\n getSimulationResultsByTime,\r\n getDefaultSimulationParameter,\r\n updateSimulationWellboreSection,\r\n getWellboreSectionsForSimulation,\r\n getSimulationDynamicToolParameters,\r\n updateSimulationDynamicToolParameter,\r\n};\r\n\r\nexport default simulationService;\r\n","import reportsService from 'services/reports.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport simulationService from 'services/simulation.service';\r\n\r\nexport const requestSimulation = (projectId, taskId, simulationId) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_SIMULATION,\r\n});\r\n\r\nexport const submitCreateSimulation = (\r\n projectId,\r\n taskId,\r\n simulation,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n projectId,\r\n taskId,\r\n simulation,\r\n setSubmitting,\r\n setStatus,\r\n type: ACTIONS.SUBMIT_CREATE_SIMULATION,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The simulation was successfully created',\r\n },\r\n});\r\n\r\nexport const requestDuplicateSimulation = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_DUPLICATE_SIMULATION,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Copying simulation...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The simulation was successfully copied',\r\n },\r\n});\r\n\r\nexport const requestCreateUpdatePlannedSimulation = (projectId, taskId) => ({\r\n taskId,\r\n projectId,\r\n type: ACTIONS.REQUEST_CREATE_UPDATE_PLANNED_SIMULATION,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating an updated planned simulation...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The updated simulation was successfully created',\r\n },\r\n});\r\n\r\nexport const requestUpdateSimulation = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulation,\r\n resetResults,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulation,\r\n simulationId,\r\n resetResults,\r\n type: ACTIONS.REQUEST_UPDATE_SIMULATION,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating simulation...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The simulation was successfully updated',\r\n },\r\n});\r\n\r\nexport const requestDeleteSimulation = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n redirect,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n redirect,\r\n type: ACTIONS.REQUEST_DELETE_SIMULATION,\r\n confirmationDialog: {\r\n title: 'Delete simulation',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this simulation? ',\r\n },\r\n notification: {\r\n success: 'The simulation was successfully deleted',\r\n },\r\n});\r\n\r\nexport const requestRunSimulation = (projectId, taskId, simulationId) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_RUN_SIMULATION,\r\n notification: {\r\n success: 'The simulation was successful',\r\n config: {\r\n error: {\r\n duration: null,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const requestSimulationsForTask = (projectId, taskId, states = []) => ({\r\n taskId,\r\n projectId,\r\n states,\r\n type: ACTIONS.REQUEST_SIMULATIONS_FOR_TASK,\r\n});\r\n\r\nexport const requestSimulationResults = (projectId, taskId, simulationId) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_SIMULATION_RESULTS,\r\n});\r\n\r\nexport const loadSimulations = (projectId, taskId, states = []) => ({\r\n taskId,\r\n projectId,\r\n states,\r\n type: ACTIONS.LOAD_SIMULATIONS,\r\n});\r\n\r\nexport const loadSimulation = (projectId, taskId, simulationId) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.LOAD_SIMULATION,\r\n});\r\n\r\nexport const receiveSimulation = (simulation) => ({\r\n payload: simulation,\r\n type: ACTIONS.RECEIVE_SIMULATION,\r\n});\r\n\r\nexport const deleteSimulationResults = (projectId, taskId, simulationId) => ({\r\n payload: () =>\r\n simulationService.deleteSimulationResults(projectId, taskId, simulationId),\r\n type: ACTIONS.DELETE_SIMULATION_RESULTS,\r\n});\r\n\r\nexport const deleteSimulationFluids = (projectId, taskId, simulationId) => ({\r\n payload: () =>\r\n simulationService.deleteSimulationFluids(projectId, taskId, simulationId),\r\n type: ACTIONS.DELETE_SIMULATION_FLUIDS,\r\n});\r\n\r\nexport const deleteSimulation = (simulationId) => ({\r\n simulationId,\r\n type: ACTIONS.DELETE_SIMULATION,\r\n});\r\n\r\nexport const receiveSimulationsForTask = (simulations) => ({\r\n payload: simulations,\r\n type: ACTIONS.RECEIVE_SIMULATIONS_FOR_TASK,\r\n});\r\n\r\nexport const receiveSimulationResults = (simulationResults) => ({\r\n payload: simulationResults,\r\n type: ACTIONS.RECEIVE_SIMULATION_RESULTS,\r\n});\r\n\r\nexport const requestToggleSimulationFavorite = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => ({\r\n type: ACTIONS.REQUEST_TOGGLE_SIMULATION_FAVORITE,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating favorite...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Simulation favorite updated succesfully',\r\n },\r\n});\r\n\r\nexport const requestToggleSimulationPlanned = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n isCurrentlyPlanned,\r\n) => {\r\n const newState = isCurrentlyPlanned ? 'unplanned' : 'planned';\r\n\r\n const actionWithoutConfirmation = {\r\n type: ACTIONS.REQUEST_TOGGLE_SIMULATION_PLANNED,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: `Marking as ${newState}...`,\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `Simulation succesfully marked as ${newState}`,\r\n },\r\n };\r\n\r\n if (!isCurrentlyPlanned) {\r\n return actionWithoutConfirmation;\r\n }\r\n\r\n return {\r\n ...actionWithoutConfirmation,\r\n confirmationDialog: {\r\n title: 'Unlock Simulation',\r\n confirmButtonText: 'Unlock',\r\n description: 'Are you sure you want to unlock this Simulation?',\r\n },\r\n };\r\n};\r\n\r\nexport const requestWellboreSectionsForSimulation = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => ({\r\n projectId,\r\n taskId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_SIMULATION_WELLBORE_SECTIONS,\r\n});\r\n\r\nexport const updateWellboreSectionForSimulation = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n) => ({\r\n projectId,\r\n taskId,\r\n simulationId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n type: ACTIONS.REQUEST_UPDATE_SIMULATION_WELLBORE_SECTION,\r\n notification: {\r\n success: 'Section successfully updated',\r\n },\r\n});\r\n\r\nexport const requestSimulationFluids = (projectId, taskId, simulationId) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_SIMULATION_FLUIDS,\r\n});\r\n\r\nexport const requestCreateSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluid,\r\n setSubmitting,\r\n setStatus,\r\n onRedirect,\r\n) => ({\r\n taskId,\r\n projectId,\r\n setStatus,\r\n onRedirect,\r\n simulationId,\r\n setSubmitting,\r\n payload: simulationFluid,\r\n type: ACTIONS.REQUEST_CREATE_SIMULATION_FLUID,\r\n notification: {\r\n success: 'Fluid successfully created',\r\n },\r\n});\r\n\r\nexport const requestUpdateSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n simulationFluid,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n taskId,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n simulationFluidId,\r\n payload: simulationFluid,\r\n type: ACTIONS.REQUEST_UPDATE_SIMULATION_FLUID,\r\n notification: {\r\n info: 'Updating fluid',\r\n success: 'Fluid successfully updated',\r\n },\r\n});\r\n\r\nexport const requestDeleteSimulationFluid = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n onRedirect,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n simulationFluidId,\r\n onRedirect,\r\n type: ACTIONS.REQUEST_DELETE_SIMULATION_FLUID,\r\n confirmationDialog: {\r\n title: 'Delete simulation fluid',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this fluid? ',\r\n },\r\n notification: {\r\n success: 'Fluid successfully deleted',\r\n },\r\n});\r\n\r\nexport const receiveSimulationFluid = (simulationFluid) => ({\r\n payload: simulationFluid,\r\n type: ACTIONS.RECEIVE_SIMULATION_FLUID,\r\n});\r\n\r\nexport const deleteSimulationFluid = (simulationFluidId) => ({\r\n simulationFluidId,\r\n type: ACTIONS.DELETE_SIMULATION_FLUID,\r\n});\r\n\r\nexport const receiveSimulationFluids = (simulationFluids) => ({\r\n payload: simulationFluids,\r\n type: ACTIONS.RECEIVE_SIMULATION_FLUIDS,\r\n});\r\n\r\nexport const downloadSimulationPdfReport =\r\n (taskId, projectId, simulationId, charts, collapseAssemblies) =>\r\n (dispatch) => {\r\n const payload = reportsService.downloadProjectSimulationReport(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n charts,\r\n collapseAssemblies,\r\n );\r\n\r\n dispatch({\r\n type: ACTIONS.DOWNLOAD_SIMULATION_PDF_REPORT,\r\n payload,\r\n });\r\n };\r\n","import mappers from 'mappers';\r\nimport Agent from 'infrastructure/agent';\r\nimport { ToolType } from 'features/projects/tool/tool.constants';\r\nimport toolstringMapper from 'features/projects/tasks/task/toolstring/toolstring.mappers';\r\n\r\nconst getAllToolstringTemplates = () =>\r\n Agent.get('/template/toolstringsOptimized');\r\n\r\nconst getToolstringTemplateById = (templateId) =>\r\n Agent.get(`/template/toolstring/${templateId}`);\r\n\r\nconst getToolStringsForTask = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/toolstrings`);\r\n\r\nconst createToolString = (projectId, taskId, toolstring) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings`,\r\n toolstringMapper.Toolstring.to(toolstring),\r\n );\r\n\r\nconst getToolString = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n isMobilise = false,\r\n stringTestId = null,\r\n) => {\r\n let url = `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}?isMobilise=${isMobilise}`;\r\n if (stringTestId !== undefined && stringTestId !== null) {\r\n url += `&stringTestId=${stringTestId}`;\r\n }\r\n return Agent.get(url);\r\n};\r\n\r\nconst updateToolString = (projectId, taskId, toolStringId, toolstring) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}`,\r\n toolstringMapper.Toolstring.to(toolstring),\r\n );\r\n\r\nconst toggleToolstringFavorite = (projectId, taskId, toolStringId) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/favorite`,\r\n );\r\n\r\nconst deleteToolString = (projectId, taskId, toolStringId) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}`,\r\n );\r\n\r\nconst duplicateToolstring = (projectId, taskId, toolStringId) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/copy`,\r\n );\r\n\r\nconst getToolstringSections = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n isMobilise = false,\r\n stringTestId = null,\r\n) => {\r\n let url = `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/sections?isMobilise=${isMobilise}`;\r\n if (stringTestId !== undefined && stringTestId !== null) {\r\n url += `&stringTestId=${stringTestId}`;\r\n }\r\n return Agent.get(url);\r\n};\r\n\r\nconst createToolstringItem = (projectId, taskId, toolStringId, tool) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/items`,\r\n toolstringMapper.ToolstringItem.toCreate(tool),\r\n );\r\n\r\nconst updateToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n toolstringItem,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/${\r\n toolstringItem.type === ToolType.ASSEMBLY ? 'assembly' : 'tools'\r\n }/${toolstringItem.toolstringItemId}`,\r\n toolstringMapper.ToolstringItem.toUpdate(toolstringItem),\r\n );\r\n\r\nconst updatePlannedToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n toolstringItem,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/${\r\n toolstringItem.type === ToolType.ASSEMBLY ? 'assembly' : 'plannedTools'\r\n }/${toolstringItem.toolstringItemId}`,\r\n toolstringMapper.ToolstringItem.toUpdate(toolstringItem),\r\n );\r\n\r\nconst updateToolstringAssemblyTool = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n toolstringItem,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/assembly/${toolstringItem.toolAssemblyId}/tool/${toolstringItem.id}`,\r\n toolstringMapper.ToolAssemblyTool.toUpdate(toolstringItem),\r\n );\r\n\r\nconst updateToolstringNotPlannedAssemblyTool = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n toolstringItem,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/notPlannedAssembly/${toolstringItem.toolAssemblyId}/tool/${toolstringItem.id}`,\r\n toolstringMapper.ToolAssemblyTool.toUpdate(toolstringItem),\r\n );\r\n\r\nconst deleteToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n toolstringItemId,\r\n) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/items/${toolstringItemId}`,\r\n );\r\n\r\nconst duplicateToolstringItem = (projectId, taskId, toolStringId, tool) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/items/copy`,\r\n toolstringMapper.ToolstringItem.toDuplicate(tool),\r\n );\r\n\r\nconst updateToolstringItemSequence = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n toolstringItemId,\r\n indices,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/items/${toolstringItemId}/sequence`,\r\n mappers.Sequence.to(toolstringItemId, indices),\r\n );\r\n\r\nconst toggleToolstringItemBreakpoint = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n toolstringItemId,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/items/${toolstringItemId}/breakpoint`,\r\n );\r\n\r\nconst updateToolstringAssemblyToolSequence = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolAssemblyToolId,\r\n sequences,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolstringId}/assembly/${toolstringItemId}/tool/${toolAssemblyToolId}/sequence`,\r\n mappers.Sequence.to(toolAssemblyToolId, sequences),\r\n );\r\n\r\nconst createToolstringAssemblyTool = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n tool,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolstringId}/assembly/${toolstringItemId}/tool`,\r\n toolstringMapper.ToolAssemblyTool.toCreate(tool),\r\n );\r\n\r\nconst deleteToolstringAssemblyTool = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolAssemblyToolId,\r\n) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolstringId}/assembly/${toolstringItemId}/tool/${toolAssemblyToolId}`,\r\n );\r\n\r\nconst createToolstringFromTemplate = (\r\n projectId,\r\n taskId,\r\n toolstringTemplateId,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/template/${toolstringTemplateId}`,\r\n );\r\n\r\nconst getPlannedToolstring = (\r\n projectId,\r\n taskId,\r\n isMobilise = false,\r\n stringTestId = null,\r\n) => {\r\n \r\n let url = `/project/${projectId}/tasks/${taskId}/toolstrings/planned?isMobilise=${isMobilise}`;\r\n\r\n if (stringTestId !== undefined && stringTestId !== null) {\r\n url += `&stringTestId=${stringTestId}`;\r\n }\r\n return Agent.get(url);\r\n};\r\n\r\nconst createToolAttachment = (projectId, taskId, toolStringId, owner, tool) => {\r\n const ownerId =\r\n owner.get('type') === ToolType.TOOL\r\n ? owner.get('toolstringItemId')\r\n : owner.get('toolAssemblyToolId');\r\n\r\n return Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/tool/${ownerId}/attachment`,\r\n toolstringMapper.ToolstringAttachment.toCreate(owner, tool),\r\n );\r\n};\r\n\r\nconst deleteToolstringAttachment = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n ownerId,\r\n toolStringAttachmentId,\r\n) =>\r\n Agent.delete(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/tool/${ownerId}/attachment/${toolStringAttachmentId}`,\r\n );\r\n\r\nconst updateToolStringAttachmentSequence = (\r\n projectId,\r\n taskId,\r\n toolStringId,\r\n ownerId,\r\n toolStringAttachmentId,\r\n indices,\r\n) => {\r\n return Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolStringId}/tool/${ownerId}/attachment/${toolStringAttachmentId}/sequence`,\r\n mappers.Sequence.to(toolStringAttachmentId, indices),\r\n );\r\n};\r\n\r\nconst updateToolStringToolStatus = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n status,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/tasks/${taskId}/toolstrings/${toolstringId}/tools/${toolstringItemId}/${status}`,\r\n );\r\n\r\nconst createToolstringTemplateAttachment = (toolStringId, owner, tool) => {\r\n const ownerId =\r\n owner.get('type') === ToolType.TOOL\r\n ? owner.get('toolstringItemId')\r\n : owner.get('toolAssemblyToolId');\r\n\r\n return Agent.post(\r\n `/template/toolstring/${toolStringId}/tool/${ownerId}/attachment`,\r\n toolstringMapper.ToolstringAttachment.toCreate(owner, tool),\r\n );\r\n};\r\n\r\nconst deleteToolstringTemplateAttachment = (\r\n toolStringId,\r\n ownerId,\r\n toolStringAttachmentId,\r\n) =>\r\n Agent.delete(\r\n `/template/toolstring/${toolStringId}/tool/${ownerId}/attachment/${toolStringAttachmentId}`,\r\n );\r\n\r\nconst updateToolStringTemplateAttachmentSequence = (\r\n toolStringId,\r\n ownerId,\r\n toolStringAttachmentId,\r\n indices,\r\n) => {\r\n return Agent.post(\r\n `/template/toolstring/${toolStringId}/tool/${ownerId}/attachment/${toolStringAttachmentId}/sequence`,\r\n mappers.Sequence.to(toolStringAttachmentId, indices),\r\n );\r\n};\r\n\r\nconst toolstringService = {\r\n getAllToolstringTemplates,\r\n getToolStringsForTask,\r\n createToolString,\r\n getToolString,\r\n updateToolString,\r\n toggleToolstringFavorite,\r\n deleteToolString,\r\n duplicateToolstring,\r\n getToolstringSections,\r\n createToolstringItem,\r\n updateToolstringItem,\r\n updatePlannedToolstringItem,\r\n deleteToolstringItem,\r\n duplicateToolstringItem,\r\n updateToolstringItemSequence,\r\n toggleToolstringItemBreakpoint,\r\n updateToolstringAssemblyToolSequence,\r\n createToolstringAssemblyTool,\r\n updateToolstringAssemblyTool,\r\n deleteToolstringAssemblyTool,\r\n createToolstringFromTemplate,\r\n getPlannedToolstring,\r\n updateToolstringNotPlannedAssemblyTool,\r\n createToolAttachment,\r\n deleteToolstringAttachment,\r\n updateToolStringAttachmentSequence,\r\n updateToolStringToolStatus,\r\n createToolstringTemplateAttachment,\r\n deleteToolstringTemplateAttachment,\r\n updateToolStringTemplateAttachmentSequence,\r\n getToolstringTemplateById,\r\n};\r\n\r\nexport default toolstringService;\r\n","export const TOOLSTRING_ACTIONS = {\r\n GET_TASK_BY_ID: 'GET_TASK_BY_ID',\r\n GET_CABLES: 'GET_CABLES',\r\n GET_BHA_TEMPLATES: 'GET_BHA_TEMPLATES',\r\n\r\n // Tool Attachments\r\n REQUEST_ATTACH_TOOL: 'REQUEST_ATTACH_TOOL',\r\n REQUEST_DELETE_TOOLSTRING_ATTACHMENT: 'REQUEST_DELETE_TOOLSTRING_ATTACHMENT',\r\n REQUEST_SORT_TOOLSTRING_ATTACHMENTS: 'REQUEST_SORT_TOOLSTRING_ATTACHMENTS',\r\n // Tool Attachments for Templates\r\n REQUEST_ATTACH_TOOL_TO_TEMPLATE: 'REQUEST_ATTACH_TOOL_TO_TEMPLATE',\r\n REQUEST_DELETE_TOOLSTRING_TEMPLATE_ATTACHMENT:\r\n 'REQUEST_DELETE_TOOLSTRING_TEMPLATE_ATTACHMENT',\r\n REQUEST_SORT_TOOLSTRING_TEMPLATE_ATTACHMENTS:\r\n 'REQUEST_SORT_TOOLSTRING_TEMPLATE_ATTACHMENTS',\r\n REQUEST_REDIRECT_TO_BHA_EDIT: 'REQUEST_REDIRECT_TO_BHA_EDIT',\r\n\r\n // Toolstring tools\r\n REQUEST_CREATE_TOOLSTRING_TOOL: 'REQUEST_CREATE_TOOLSTRING_TOOL',\r\n REQUEST_UPDATE_TOOLSTRING_ITEM: 'REQUEST_UPDATE_TOOLSTRING_ITEM',\r\n REQUEST_UPDATE_PLANNED_TOOLSTRING_ITEM:\r\n 'REQUEST_UPDATE_PLANNED_TOOLSTRING_ITEM',\r\n REQUEST_UPDATE_NOT_PLANNED_TOOLSTRING_ITEM:\r\n 'REQUEST_UPDATE_NOT_PLANNED_TOOLSTRING_ITEM',\r\n REQUEST_DUPLICATE_TOOLSTRING_ITEM: 'REQUEST_CREATE_TOOLSTRING_ITEM',\r\n REQUEST_TOGGLE_TOOLSTRING_ITEM_BREAKPOINT:\r\n 'REQUEST_TOGGLE_TOOLSTRING_ITEM_BREAKPOINT',\r\n UDPATE_TOOLSTRING_TOOL_STATUS: 'UDPATE_TOOLSTRING_TOOL_STATUS',\r\n REQUEST_UPDATE_SERIAL_NUMBERS_FROM_TASK:\r\n 'REQUEST_UPDATE_SERIAL_NUMBERS_FROM_TASK',\r\n\r\n // Toolstring\r\n GET_TOOLSTRINGS_FOR_TASK: 'GET_TOOLSTRINGS_FOR_TASK',\r\n GET_TOOLSTRING_FOR_TASK: 'GET_TOOLSTRING_FOR_TASK',\r\n CREATE_TOOLSTRING_FOR_TASK: 'CREATE_TOOLSTRING_FOR_TASK',\r\n CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK:\r\n 'CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK',\r\n SUBMIT_CREATE_TOOLSTRING_FOR_TASK: 'SUBMIT_CREATE_TOOLSTRING_FOR_TASK',\r\n SUBMIT_CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK:\r\n 'SUBMIT_CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK',\r\n DELETE_TOOLSTRING_FOR_TASK: 'DELETE_TOOLSTRING_FOR_TASK',\r\n UPDATE_TOOLSTRING_FOR_TASK: 'UPDATE_TOOLSTRING_FOR_TASK',\r\n\r\n REQUEST_TASK_TOOLSTRINGS_PAGE_ON_LOAD:\r\n 'REQUEST_TASK_TOOLSTRINGS_PAGE_ON_LOAD',\r\n REQUEST_UPDATE_TOOLSTRING_FOR_TASK: 'REQUEST_UPDATE_TOOLSTRING_FOR_TASK',\r\n REQUEST_GET_TOOLSTRINGS_FOR_TASK: 'REQUEST_GET_TOOLSTRINGS_FOR_TASK',\r\n REQUEST_GET_TOOLSTRING_FOR_TASK: 'REQUEST_GET_TOOLSTRING_FOR_TASK',\r\n REQUEST_CREATE_TOOLSTRING_FOR_TASK: 'REQUEST_CREATE_TOOLSTRING_FOR_TASK',\r\n REQUEST_CREATE_TOOLSTRING_FOR_TASK_FROM_TEMPLATE:\r\n 'REQUEST_CREATE_TOOLSTRING_FOR_TASK_FROM_TEMPLATE',\r\n REQUEST_DUPLICATE_TOOLSTRING_FOR_TASK_AND_REDIRECT:\r\n 'REQUEST_DUPLICATE_TOOLSTRING_FOR_TASK',\r\n REQUEST_DELETE_TOOLSTRING_FOR_TASK_AND_REDIRECT:\r\n 'REQUEST_DELETE_TOOLSTRING_FOR_TASK',\r\n REQUEST_TOGGLE_TOOLSTRING_FAVORITE: 'REQUEST_TOGGLE_TOOLSTRING_FAVORITE',\r\n RECEIVE_TASK_TOOLSTRING: 'RECEIVE_TASK_TOOLSTRING',\r\n RECEIVE_TASK_TOOLSTRINGS: 'RECEIVE_TASK_TOOLSTRINGS',\r\n REQUEST_DELETE_TOOLSTRING_ITEM: 'REQUEST_DELETE_TOOLSTRING_ITEM',\r\n REQUEST_SORT_TOOLSTRING_TOOLS: 'REQUEST_SORT_TOOLSTRING_TOOLS',\r\n RECEIVE_TOOLSTRING_TOOLS_UPDATED_SEQUENCES:\r\n 'RECEIVE_TOOLSTRING_TOOLS_UPDATED_SEQUENCES',\r\n\r\n RECEIVE_TOOLSTRING_ITEM: 'RECEIVE_TOOLSTRING_ITEM',\r\n RECEIVE_TOOLSTRING_ASSEMBLY_TOOL: 'RECEIVE_TOOLSTRING_ASSEMBLY_TOOL',\r\n REQUEST_SORT_TOOLSTRING_ASSEMBLY_TOOLS:\r\n 'REQUEST_SORT_TOOLSTRING_ASSEMBLY_TOOLS',\r\n REQUEST_TOOLSTRING_SECTIONS: 'REQUEST_TOOLSTRING_SECTIONS',\r\n RECEIVE_TOOLSTRING_SECTIONS: 'RECEIVE_TOOLSTRING_SECTIONS',\r\n REQUEST_CREATE_TOOLSTRING_ASSEMBLY_TOOL:\r\n 'REQUEST_CREATE_TOOLSTRING_ASSEMBLY_TOOL',\r\n REQUEST_DELETE_TOOLSTRING_ASSEMBLY_TOOL:\r\n 'REQUEST_DELETE_TOOLSTRING_ASSEMBLY_TOOL',\r\n\r\n DOWNLOAD_TOOLSTRING_PDF_REPORT: 'DOWNLOAD_TOOLSTRING_PDF_REPORT',\r\n\r\n REQUEST_TOOLSTRING_TEMPLATES: 'REQUEST_TOOLSTRING_TEMPLATES',\r\n RECEIVE_TOOLSTRING_TEMPLATES: 'RECEIVE_TOOLSTRING_TEMPLATES',\r\n RECEIVE_TOOLSTRING_TEMPLATE_BY_ID: 'RECEIVE_TOOLSTRING_TEMPLATE_BY_ID',\r\n\r\n // ASSETS\r\n ADD_ASSETS_TO_TOOLSTRING: 'ADD_ASSETS_TO_TOOLSTRING',\r\n};\r\n\r\nexport const MODAL = {\r\n CREATE_TOOLSTRING_MODAL_ID: 'CREATE_TOOLSTRING_MODAL_ID',\r\n SIMULATION_EXPORT_MODAL_ID: 'SIMULATION_EXPORT_MODAL_ID',\r\n};\r\n\r\nexport const TOOLSTRING_FORMS = {\r\n TOOL_SEARCH_FILTER_FORM: {\r\n FORM_ID: 'toolSearch',\r\n TOOL_TYPE: 'toolType',\r\n BOTTOM_CONNECTOR: 'bottomConnector',\r\n TOP_CONNECTOR: 'topConnector',\r\n },\r\n CREATE_TOOLSTRING_FORM: {\r\n TOOLSTRING_NAME: 'name',\r\n },\r\n EDIT_TOOLSTRING_FORM: {\r\n FORM_ID: 'editToolstring',\r\n TOOLSTRING_NAME: 'name',\r\n TOOLSTRING_CABLE_GROUP: 'cableType',\r\n TOOLSTRING_CABLE_TOOL: 'cableId',\r\n TOOLSTRING_COMMENT: 'comment',\r\n },\r\n};\r\n\r\nexport const CREATE_TOOLSTRING_FORM = {\r\n FORM_ID: 'createToolstring',\r\n TOOLSTRING_NAME: 'name',\r\n TOOLSTRING_DESCRIPTION: 'description',\r\n TOOLSTRING_WIRE_DIMENSION: 'wireDescription',\r\n TOOLSTRING_WIRE_TYPE: 'wireType',\r\n TOOLSTRING_CABLE_GROUP: 'cableType',\r\n TOOLSTRING_CABLE_TOOL: 'cableId',\r\n};\r\n\r\nexport const TOOLSTRING_OPTION_ACTIONS = {\r\n ADD_TOOL: 1,\r\n DUPLICATE_ITEM: 2,\r\n ASSET_HISTORY: 3,\r\n REMOVE_TOOL: 4,\r\n ATTACH_TOOL: 5,\r\n};\r\n\r\nexport const TOOL_STATUS = {\r\n NULL_ASSIGNED: 0,\r\n NOT_ASSIGNED: 1,\r\n SET: 2,\r\n RETRIEVE: 3,\r\n};\r\n","import { push } from 'connected-react-router/immutable';\r\n\r\nimport toolService from 'services/tool.service';\r\nimport taskService from 'services/task.service';\r\nimport reportsService from 'services/reports.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport toolstringService from 'services/toolstring.service';\r\nimport { receiveTask } from 'features/projects/tasks/tasks.actions';\r\nimport { toTaskToolstringEdit, toTaskToolstring } from 'utils/route.util';\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nexport const getTaskById = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService\r\n .getTaskById(projectId, taskId)\r\n .then((task) => dispatch(receiveTask(task)));\r\n\r\n dispatch({\r\n type: TOOLSTRING_ACTIONS.GET_TASK_BY_ID,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getToolstring =\r\n (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n options = {\r\n silent: false,\r\n },\r\n ) =>\r\n (dispatch) => {\r\n const payload = toolstringService.getToolString(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n );\r\n\r\n dispatch({\r\n payload,\r\n silent: options.silent,\r\n type: TOOLSTRING_ACTIONS.GET_TOOLSTRING_FOR_TASK,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const getToolstringsForTask = (projectId, taskId) => (dispatch) => {\r\n const payload = toolstringService.getToolStringsForTask(projectId, taskId);\r\n\r\n dispatch({\r\n type: TOOLSTRING_ACTIONS.GET_TOOLSTRINGS_FOR_TASK,\r\n payload,\r\n taskId,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getCables = () => (dispatch) => {\r\n const payload = () => toolService.getCables();\r\n\r\n dispatch({\r\n type: TOOLSTRING_ACTIONS.GET_CABLES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const redirectToTaskToolstring = (projectId, taskId, toolstringId) =>\r\n push(toTaskToolstring(projectId, taskId, toolstringId));\r\n\r\nexport const redirectToTaskToolstringEdit = (projectId, taskId, toolstringId) =>\r\n push(toTaskToolstringEdit(projectId, taskId, toolstringId));\r\n\r\n/**\r\n * Sagas actions\r\n */\r\n\r\nexport const receiveTaskToolstrings = (projectId, taskId, toolstrings) => ({\r\n taskId,\r\n projectId,\r\n payload: toolstrings,\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TASK_TOOLSTRINGS,\r\n});\r\n\r\nexport const receiveTaskToolstring = (projectId, taskId, toolstring) => ({\r\n taskId,\r\n projectId,\r\n payload: toolstring,\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TASK_TOOLSTRING,\r\n});\r\n\r\nexport const requestGetTaskToolstrings = (projectId, taskId) => ({\r\n taskId,\r\n projectId,\r\n type: TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRINGS_FOR_TASK,\r\n});\r\n\r\nexport const requestGetTaskToolstring = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n isMobilise = false,\r\n stringTestId=null,\r\n) => ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n isMobilise,\r\n stringTestId,\r\n type: TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n});\r\n\r\nexport const requestTaskToolstringSections = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n isMobilise,\r\n stringTestId,\r\n) => {\r\n return {\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n isMobilise,\r\n stringTestId,\r\n type: TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_SECTIONS,\r\n };\r\n};\r\n\r\nexport const receiveTaskToolstringSections = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n sections,\r\n) => ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n payload: sections,\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_SECTIONS,\r\n});\r\n\r\nexport const requestCreateToolstringForTask = (\r\n projectId,\r\n taskId,\r\n toolstring,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstring,\r\n type: TOOLSTRING_ACTIONS.REQUEST_CREATE_TOOLSTRING_FOR_TASK,\r\n});\r\n\r\nexport const submitCreateToolstringForTask = (\r\n projectId,\r\n taskId,\r\n toolstring,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstring,\r\n setSubmitting,\r\n setStatus,\r\n type: TOOLSTRING_ACTIONS.SUBMIT_CREATE_TOOLSTRING_FOR_TASK,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The BHA was successfully created',\r\n },\r\n});\r\n\r\nexport const submitCreateToolstringFromTemplateForTask = (\r\n projectId,\r\n taskId,\r\n toolstringTemplateId,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstringTemplateId,\r\n type: TOOLSTRING_ACTIONS.SUBMIT_CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating BHA from Template...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The BHA was successfully created',\r\n },\r\n});\r\n\r\nexport const requestToogleToolstringFavorite = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n) => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_TOGGLE_TOOLSTRING_FAVORITE,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating favorite...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA favorite updated succesfully',\r\n },\r\n});\r\n\r\nexport const requestToggleToolstringItemBreakpoint = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n) => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_TOGGLE_TOOLSTRING_ITEM_BREAKPOINT,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating breakpoint...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA breakpoint updated succesfully',\r\n },\r\n});\r\n\r\nexport const requestDuplicateToolstringAndRedirect = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n) => ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n type: TOOLSTRING_ACTIONS.REQUEST_DUPLICATE_TOOLSTRING_FOR_TASK_AND_REDIRECT,\r\n});\r\n\r\nexport const requestDeleteToolstringAndRedirect = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n activeToolstringId,\r\n) => ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n activeToolstringId,\r\n confirmationDialog: {\r\n title: 'Delete BHA',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this BHA?',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA successfully deleted!',\r\n },\r\n type: TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_FOR_TASK_AND_REDIRECT,\r\n});\r\n\r\nexport const requestUpdateToolstring = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstring,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstring,\r\n type: TOOLSTRING_ACTIONS.REQUEST_UPDATE_TOOLSTRING_FOR_TASK,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA updated succesfully',\r\n },\r\n});\r\n\r\nexport const requestCreateToolstringTool = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n tool,\r\n sequenceNumber,\r\n) => {\r\n const toolName = tool.get('name');\r\n\r\n return {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n tool,\r\n sequenceNumber,\r\n type: TOOLSTRING_ACTIONS.REQUEST_CREATE_TOOLSTRING_TOOL,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${toolName} was successfully added to BHA`,\r\n },\r\n };\r\n};\r\n\r\nexport const requestCreateToolAttachment = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n owner,\r\n tool,\r\n) => {\r\n return {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n owner,\r\n tool,\r\n type: TOOLSTRING_ACTIONS.REQUEST_ATTACH_TOOL,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${tool.get(\r\n 'name',\r\n )} was successfully attached to ${owner.get('name')}`,\r\n },\r\n };\r\n};\r\n\r\nexport const requestDeleteToolstringAttachment = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ownerId,\r\n toolstringItemId,\r\n) => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ATTACHMENT,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ownerId,\r\n toolstringItemId,\r\n confirmationDialog: {\r\n title: 'Remove attachment',\r\n description: 'Are you sure you want to remove this attachment?',\r\n confirmButtonText: 'Remove',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The attachment was successfully removed',\r\n },\r\n});\r\n\r\nexport const requestSortToolstringAttachments = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ownerId,\r\n sortedAttachment,\r\n affectedAttachment,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ownerId,\r\n sortedAttachment,\r\n affectedAttachment,\r\n type: TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_ATTACHMENTS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Moving attachment...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA sequence successfully updated!',\r\n },\r\n});\r\n\r\nexport const requestCreateToolstringTemplateAttachment = (\r\n toolstringId,\r\n owner,\r\n tool,\r\n) => {\r\n return {\r\n toolstringId,\r\n owner,\r\n tool,\r\n type: TOOLSTRING_ACTIONS.REQUEST_ATTACH_TOOL_TO_TEMPLATE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${tool.get(\r\n 'name',\r\n )} was successfully attached to template ${owner.get('name')}`,\r\n },\r\n };\r\n};\r\n\r\nexport const requestDeleteToolstringTemplateAttachment = (\r\n toolstringId,\r\n ownerId,\r\n toolstringItemId,\r\n) => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_TEMPLATE_ATTACHMENT,\r\n toolstringId,\r\n ownerId,\r\n toolstringItemId,\r\n confirmationDialog: {\r\n title: 'Remove attachment from template',\r\n description:\r\n 'Are you sure you want to remove this attachment from template?',\r\n confirmButtonText: 'Remove',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The attachment was successfully removed from template',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Error on removing attachment from template',\r\n },\r\n});\r\n\r\nexport const requestSortToolstringTemplateAttachments = (\r\n toolstringId,\r\n ownerId,\r\n sortedAttachment,\r\n affectedAttachment,\r\n) => ({\r\n toolstringId,\r\n ownerId,\r\n sortedAttachment,\r\n affectedAttachment,\r\n type: TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TEMPLATE_ATTACHMENTS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Moving attachment...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'BHA template sequence successfully updated!',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Error on moving attachment on BHA template',\r\n },\r\n});\r\n\r\nexport const requestUpdateToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n) => {\r\n const name = toolstringItem.name;\r\n const m3Number = toolstringItem.m3ItemNumber;\r\n\r\n return {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n type: TOOLSTRING_ACTIONS.REQUEST_UPDATE_TOOLSTRING_ITEM,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `#${m3Number} - ${name} was successfully updated`,\r\n },\r\n };\r\n};\r\n\r\nexport const requestUpdatePlannedToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n) => {\r\n const name = toolstringItem.name;\r\n const m3Number = toolstringItem.m3ItemNumber;\r\n\r\n return {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n type: TOOLSTRING_ACTIONS.REQUEST_UPDATE_PLANNED_TOOLSTRING_ITEM,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `#${m3Number} - ${name} was successfully updated`,\r\n },\r\n };\r\n};\r\n\r\nexport const requestUpdateNotPlannedToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n) => {\r\n const name = toolstringItem.name;\r\n const m3Number = toolstringItem.m3ItemNumber;\r\n\r\n return {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n type: TOOLSTRING_ACTIONS.REQUEST_UPDATE_NOT_PLANNED_TOOLSTRING_ITEM,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `#${m3Number} - ${name} was successfully updated`,\r\n },\r\n };\r\n};\r\n\r\nexport const requestUpdateSerialNumbersFromTask = (\r\n projectId,\r\n fromTaskId,\r\n toTaskId,\r\n toToolStringId,\r\n fromToolstringName,\r\n) => {\r\n return {\r\n projectId,\r\n fromTaskId,\r\n toTaskId,\r\n toToolStringId,\r\n type: TOOLSTRING_ACTIONS.REQUEST_UPDATE_SERIAL_NUMBERS_FROM_TASK,\r\n confirmationDialog: {\r\n title: 'Auto-fill Serial Numbers',\r\n description: `Are you sure that you want to copy serial numbers from '${fromToolstringName}' to this tool string?`,\r\n confirmButtonText: 'Copy',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Serial Numbers are successfully updated',\r\n },\r\n };\r\n};\r\n\r\nexport const requestDuplicateToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n tool,\r\n) => {\r\n const toolName = tool.get('name');\r\n\r\n return {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n tool,\r\n type: TOOLSTRING_ACTIONS.REQUEST_DUPLICATE_TOOLSTRING_ITEM,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${toolName} was successfully duplicated`,\r\n },\r\n };\r\n};\r\n\r\nexport const requestDeleteToolstringTool = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n) => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ITEM,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n confirmationDialog: {\r\n title: 'Remove tool',\r\n description: 'Are you sure you want to remove this tool?',\r\n confirmButtonText: 'Remove',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The tool was successfully removed',\r\n },\r\n});\r\n\r\nexport const requestDeleteToolstringAssemblyTool = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolAssemblyToolId,\r\n) => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ASSEMBLY_TOOL,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolAssemblyToolId,\r\n confirmationDialog: {\r\n title: 'Remove tool from assembly',\r\n description:\r\n 'Are you sure you want to remove this tool from the BHA assembly?',\r\n confirmButtonText: 'Remove',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The tool was successfully removed',\r\n },\r\n});\r\n\r\nexport const requestTaskToolstringsPageOnLoad = (projectId, taskId) => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_TASK_TOOLSTRINGS_PAGE_ON_LOAD,\r\n projectId,\r\n taskId,\r\n});\r\n\r\nexport const requestSortToolstringTools = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n sortedTool,\r\n affectedTool,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n sortedTool,\r\n affectedTool,\r\n type: TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TOOLS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Moving tool...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA sequence successfully updated!',\r\n },\r\n});\r\n\r\nexport const receiveToolstringToolsUpdatedSequences = (\r\n toolstringId,\r\n updatedToolstringToolSequences,\r\n) => ({\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_TOOLS_UPDATED_SEQUENCES,\r\n toolstringId,\r\n payload: updatedToolstringToolSequences,\r\n});\r\n\r\nexport const requestSortToolstringAssemblyTools = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n type: TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_ASSEMBLY_TOOLS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool sequence successfully updated!',\r\n },\r\n});\r\n\r\nexport const requestCreateToolstringAssemblyTool = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n tool,\r\n) => ({\r\n tool,\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n toolstringItemId,\r\n type: TOOLSTRING_ACTIONS.REQUEST_CREATE_TOOLSTRING_ASSEMBLY_TOOL,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool successfully added!',\r\n },\r\n});\r\n\r\nexport const receiveToolstringItem = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n) => ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n payload: toolstringItem,\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_ITEM,\r\n});\r\n\r\nexport const receiveToolstringAssemblyTool = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolstringAssemblyTool,\r\n) => ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n toolstringItemId,\r\n payload: toolstringAssemblyTool,\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_ASSEMBLY_TOOL,\r\n});\r\n\r\nexport const downloadToolstringPdfReport =\r\n (projectId, taskId, toolstringId, collapseAssemblies) => (dispatch) => {\r\n const payload = reportsService.downloadProjectToolstringReport(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n collapseAssemblies,\r\n );\r\n\r\n dispatch({\r\n type: TOOLSTRING_ACTIONS.DOWNLOAD_TOOLSTRING_PDF_REPORT,\r\n payload,\r\n });\r\n };\r\n\r\nexport const requestToolstringTemplates = () => ({\r\n type: TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_TEMPLATES,\r\n});\r\n\r\nexport const redirectToBhaEditAction = (taskId, projectId, toolstringId) => ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n type: TOOLSTRING_ACTIONS.REQUEST_REDIRECT_TO_BHA_EDIT,\r\n});\r\n\r\nexport const receiveToolstringTemplates = (templates) => ({\r\n payload: templates,\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_TEMPLATES,\r\n});\r\n\r\nexport const receiveToolstringTemplateByID = (templateID) => ({\r\n payload: toolstringService.getToolstringTemplateById(templateID),\r\n type: TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_TEMPLATE_BY_ID,\r\n});\r\n\r\nexport const updateToolStringToolStatus = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n status,\r\n) => {\r\n return {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n status,\r\n type: TOOLSTRING_ACTIONS.UDPATE_TOOLSTRING_TOOL_STATUS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating status...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Status successfully updated!',\r\n },\r\n };\r\n};\r\n\r\nexport const addStringTestAssetsToToolstring = (assets) => ({\r\n payload: assets,\r\n type: TOOLSTRING_ACTIONS.ADD_ASSETS_TO_TOOLSTRING,\r\n});\r\n","import { initialize } from 'redux-form/immutable';\r\nimport { replace } from 'connected-react-router/immutable';\r\n\r\nimport {\r\n TASK_FORMS,\r\n TASK_ACTIONS,\r\n TASKS_EDIT_TASK_MODAL_ID,\r\n TASKS_CREATE_TASK_MODAL_ID,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport { toggleModal } from 'app/app.actions';\r\nimport taskService from 'services/task.service';\r\nimport { toProjectTasks } from 'utils/route.util';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport tasksMapper from 'features/projects/tasks/tasks.mappers';\r\nimport { getProjectById } from 'features/projects/projects.actions';\r\nimport { getAllProjectActivities } from 'features/projects/activities/activities.actions';\r\nimport { loadSimulations } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { SimulationState } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { getToolstringsForTask } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nexport const addTasksFromTemplate =\r\n (projectId, selectedTemplateTasks) => (dispatch) => {\r\n const payload = taskService\r\n .addTaskTemplates(\r\n projectId,\r\n selectedTemplateTasks.map((templateTask) => templateTask.get('id')),\r\n )\r\n .then((tasks) => {\r\n dispatch(getAllProjectActivities(projectId));\r\n return tasks;\r\n })\r\n .then((tasks) =>\r\n Promise.all(\r\n tasks\r\n .filter((task) => task.hasToolStrings)\r\n .map((task) =>\r\n dispatch(getToolstringsForTask(projectId, task.taskId)),\r\n ),\r\n )\r\n .then(() => dispatch(getProjectById(projectId)))\r\n .then(() => {\r\n dispatch(\r\n toggleModal({\r\n modalId: TASKS_CREATE_TASK_MODAL_ID,\r\n value: false,\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n dispatch({\r\n payload,\r\n projectId,\r\n type: TASK_ACTIONS.ADD_TASKS_FROM_TEMPLATE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${selectedTemplateTasks.size} item(s) was successfully created`,\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const createTask = (projectId) => (dispatch) => (task) => {\r\n dispatch({\r\n type: TASK_ACTIONS.CREATE_TASK,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'A new task was successfully created',\r\n },\r\n payload: () =>\r\n taskService.createTask(projectId, task.toJS()).then((Task) => {\r\n const { taskId } = Task;\r\n dispatch(replace(toProjectTasks(projectId, taskId)));\r\n dispatch(getProjectById(projectId));\r\n return dispatch(\r\n toggleModal({\r\n modalId: TASKS_CREATE_TASK_MODAL_ID,\r\n payload: Task,\r\n value: false,\r\n }),\r\n );\r\n }),\r\n });\r\n};\r\n\r\nexport const editTask = (index) => (dispatch) =>\r\n dispatch(\r\n toggleModal({\r\n modalId: TASKS_EDIT_TASK_MODAL_ID,\r\n activeIndex: index,\r\n }),\r\n );\r\n\r\nexport const createTaskModalContainerOnLoad = () => (dispatch) => {\r\n dispatch(initialize(TASK_FORMS.NEW_TASK.FORM_ID, tasksMapper.Task.initial));\r\n dispatch({\r\n type: TASK_ACTIONS.CREATE_TASK_MODAL_LOADED,\r\n payload: () => taskService.getAllTaskTemplates(),\r\n });\r\n};\r\n\r\nexport const getAllTasks = (projectId) => (dispatch) => {\r\n const payload = taskService.getAllTasks(projectId);\r\n\r\n dispatch({\r\n type: TASK_ACTIONS.GET_ALL_TASKS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const tasksContainerOnUnload = () => (dispatch) =>\r\n dispatch({ type: TASK_ACTIONS.PROJECT_TASKS_PAGE_UNLOADED });\r\n\r\nexport const confirmDeleteTask = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService\r\n .deleteTask(projectId, taskId)\r\n .then(() => dispatch(getProjectById(projectId)));\r\n\r\n dispatch({\r\n payload,\r\n projectId,\r\n type: TASK_ACTIONS.CONFIRM_DELETE_TASK,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteTask = (projectId, taskId, callback) => (dispatch) =>\r\n dispatch({\r\n id: taskId,\r\n type: TASK_ACTIONS.DELETE_TASK,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The task was successfully deleted',\r\n },\r\n confirmationDialog: {\r\n description:\r\n 'Are you sure you want to delete this task? All activities will be lost',\r\n title: 'Delete task',\r\n confirmButtonText: 'Delete',\r\n },\r\n payload: () =>\r\n dispatch(confirmDeleteTask(projectId, taskId)).then(() =>\r\n invokeIfFunction(callback),\r\n ),\r\n });\r\n\r\nexport const sortTasks =\r\n (projectId, { oldIndex, newIndex }, tasks) =>\r\n (dispatch) => {\r\n if (oldIndex === newIndex) return;\r\n\r\n const sortedTask = tasks.get(oldIndex);\r\n const affectedTask = tasks.get(newIndex);\r\n\r\n const itemSequence = {\r\n sortedItemId: sortedTask.get('id'),\r\n affectedItemId: affectedTask.get('id'),\r\n };\r\n\r\n dispatch({\r\n projectId,\r\n oldIndex,\r\n newIndex,\r\n type: TASK_ACTIONS.SORT_TASKS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The task was successfully updated',\r\n },\r\n payload: () =>\r\n taskService.updateTaskSequence(\r\n projectId,\r\n sortedTask.get('id'),\r\n itemSequence,\r\n ),\r\n });\r\n };\r\n\r\nexport const copyTask = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.copyTask(projectId, taskId).then((newTask) => {\r\n dispatch(getAllTasks(projectId));\r\n\r\n newTask.hasToolStrings\r\n ? dispatch(getToolstringsForTask(projectId, newTask.taskId))\r\n : Promise.resolve();\r\n\r\n return newTask;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The task was successfully copied',\r\n },\r\n type: TASK_ACTIONS.COPY_TASK,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveTask = (task) => ({\r\n payload: task,\r\n type: TASK_ACTIONS.RECEIVE_TASK,\r\n});\r\n\r\nexport const onLoadTaskSurfaceEquipment = (projectId, taskId) => (dispatch) => {\r\n dispatch(getTaskCables(projectId, taskId));\r\n dispatch(getTaskSurfaceEquipment(projectId, taskId));\r\n\r\n dispatch({\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.PAGE_LOADED,\r\n });\r\n};\r\n\r\nexport const getTaskCables = (projectId, taskId) => (dispatch) => {\r\n dispatch({\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n payload: () => taskService.getCablesForTask(projectId, taskId),\r\n });\r\n};\r\n\r\nexport const getTaskSurfaceEquipment = (projectId, taskId) => (dispatch) => {\r\n dispatch({\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n payload: () => taskService.getSurfaceEquipmentForTask(projectId, taskId),\r\n });\r\n};\r\n\r\nexport const saveCableToTask = (taskCable, projectId, taskId) => (dispatch) => {\r\n const payload = taskService.saveCableToTask(taskCable, projectId, taskId);\r\n\r\n dispatch({\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Cable successfully added',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_CABLE,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const saveSurfaceToTask =\r\n (surfaceTool, projectId, taskId) => (dispatch) => {\r\n dispatch({\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool successfully added!',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_SURFACE_EQUIPMENT,\r\n payload: () =>\r\n taskService.saveSurfaceToolToTask(surfaceTool, projectId, taskId),\r\n });\r\n };\r\n\r\nexport const saveSurfaceTemplateToTask =\r\n (surfaceTool, projectId, taskId) => (dispatch) => {\r\n const payload = taskService\r\n .saveSurfaceTemplateToolToTask(surfaceTool, projectId, taskId)\r\n .then(() => {\r\n dispatch(onLoadTaskSurfaceEquipment(projectId, taskId));\r\n });\r\n\r\n return dispatch({\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Tools from template successfully added!',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_SURFACE_EQUIPMENT_TEMPLATE,\r\n });\r\n };\r\n\r\nexport const deleteCableFromTask =\r\n (taskCable, projectId, taskId) => (dispatch) => {\r\n const payload = taskService.deleteCableFromTask(\r\n taskCable,\r\n projectId,\r\n taskId,\r\n );\r\n\r\n return dispatch({\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Cable successfully removed',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.DELETE_CABLE,\r\n });\r\n };\r\n\r\nexport const deleteSurfaceEquipmentFromTask =\r\n (surfaceEquipment, projectId, taskId) => (dispatch) => {\r\n const payload = taskService.deleteSurfaceFromTask(\r\n surfaceEquipment,\r\n projectId,\r\n taskId,\r\n );\r\n\r\n return dispatch({\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Equipment successfully removed',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.DELETE_CABLE,\r\n });\r\n };\r\n\r\nexport const saveCableSerialNumberToTask = (\r\n projectId,\r\n taskId,\r\n individualSerialNumber,\r\n) => ({\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Serial number saved',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_CABLE_SERIAL_NUMBER,\r\n payload: {\r\n projectId,\r\n taskId,\r\n individualSerialNumber,\r\n },\r\n});\r\n\r\n// TODO: Move to saga\r\nexport const saveSurfaceEquipmentSerialNumber =\r\n (projectId, taskId, individualSerialNumber, id) => (dispatch) => {\r\n const dto = {\r\n projectId,\r\n taskId,\r\n individualSerialNumber,\r\n id,\r\n };\r\n\r\n const payload = taskService\r\n .saveSurfaceEquipmentSerialNumber(dto)\r\n .then(() => {\r\n dispatch(getTaskSurfaceEquipment(projectId, taskId));\r\n });\r\n\r\n return dispatch({\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Serial number saved',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_SURFACE_SERIAL_NUMBER,\r\n });\r\n };\r\n\r\nexport const copySerialsForCableFromAnotherTask =\r\n (projectId, taskId, fromTaskId) => (dispatch) => {\r\n dispatch({\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.UPDATE_TASK_CABLE_SERIALS_FROM_TO,\r\n payload: () =>\r\n taskService.updateTaskCableSerialFromToTask(\r\n projectId,\r\n fromTaskId,\r\n taskId,\r\n ),\r\n });\r\n };\r\n\r\nexport const copySerialsForSEFromAnotherTask =\r\n (projectId, taskId, fromTaskId) => (dispatch) => {\r\n const payload = taskService\r\n .updateTaskSEFromToTask(projectId, fromTaskId, taskId)\r\n .then(() => {\r\n dispatch(\r\n copySerialsForCableFromAnotherTask(projectId, taskId, fromTaskId),\r\n );\r\n dispatch(getTaskCables(projectId, taskId));\r\n dispatch(getTaskSurfaceEquipment(projectId, taskId));\r\n dispatch(\r\n loadSimulations(projectId, taskId, [\r\n SimulationState.PLANNED,\r\n SimulationState.UPDATED_PLANNED,\r\n ]),\r\n );\r\n dispatch(getAllTasks(projectId));\r\n })\r\n .finally(() => {\r\n dispatch(getTaskCables(projectId, taskId));\r\n dispatch(getTaskSurfaceEquipment(projectId, taskId));\r\n dispatch(\r\n loadSimulations(projectId, taskId, [\r\n SimulationState.PLANNED,\r\n SimulationState.UPDATED_PLANNED,\r\n ]),\r\n );\r\n dispatch(getAllTasks(projectId));\r\n });\r\n\r\n return dispatch({\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Copying serial numbers',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Sussessfuly copied serial numbers',\r\n },\r\n type: TASK_SURFACE_EQUIPMENT_ACTIONS.UPDATE_TASK_SURFACE_EQUIPMENT_SERIALS_FROM_TO,\r\n });\r\n };\r\n","import moment from 'moment';\r\nimport { Map } from 'immutable';\r\n\r\nimport { createSelector } from 'utils/app.util';\r\nimport { getTotalElapsedTime } from 'utils/activity.util';\r\nimport { TASK_STATE } from 'features/projects/tasks/tasks.constants';\r\n\r\nexport const getAllTasksFromState = createSelector(\r\n (state) => state.getIn(['projects', 'plan', 'tasks', TASK_STATE.DATA]),\r\n (tasks) => tasks,\r\n);\r\n\r\nexport const getTotalPlannedDuration = createSelector(\r\n getAllTasksFromState,\r\n (tasks) =>\r\n getTotalElapsedTime(\r\n tasks\r\n .filter((task) => task.get('durationPlanned'))\r\n .map((task) =>\r\n Map({\r\n startTime: moment(),\r\n endTime: moment().add(moment.duration(task.get('durationPlanned'))),\r\n }),\r\n ),\r\n ),\r\n);\r\n\r\nexport const getTotalElapsedDuration = createSelector(\r\n getAllTasksFromState,\r\n (tasks) => getTotalElapsedTime(tasks),\r\n);\r\n\r\nexport const getTaskTemplates = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'tasks',\r\n TASK_STATE.TEMPLATE,\r\n TASK_STATE.TEMPLATE_DATA,\r\n ]),\r\n (taskTemplates) => taskTemplates,\r\n);\r\n\r\nexport const getTaskActivitiesFromState = createSelector(\r\n (state, taskId) =>\r\n state\r\n .getIn(['projects', 'activities', 'data', 'activities'])\r\n .filter((activity) => activity.get('taskId') === taskId),\r\n (taskActivities) => taskActivities,\r\n);\r\n\r\nexport const getTaskSurfaceEquipmentFromState = createSelector(\r\n (state) => state.getIn(['projects', 'plan', 'tasks', 'surfaceEquipment']),\r\n (surfaces) => surfaces,\r\n);\r\n\r\nexport const getTaskById = (taskId) =>\r\n createSelector(getAllTasksFromState, (allTasks) => {\r\n return allTasks.find((task) => task.get('taskId') === parseInt(taskId));\r\n });\r\n\r\nexport const getTaskRiskSectionSelector = (state) =>\r\n state.getIn(['entity', 'toolString', 'data', 'task', 'taskRisk']);\r\n\r\nexport const createTaskRiskSectionsForWellboreSelector = () =>\r\n createSelector(getTaskRiskSectionSelector, (sections) => {\r\n return sections;\r\n });\r\n\r\nexport const getTaskFluidsSelector = createSelector(\r\n (state) => state.getIn(['projects', 'plan', 'task', 'fluids', 'data']),\r\n (fluids) => fluids,\r\n);\r\n","import isEqual from 'lodash/isEqual';\r\nimport taskService from 'services/task.service';\r\nimport { initialize } from 'redux-form/immutable';\r\nimport { replace, push } from 'connected-react-router/immutable';\r\n\r\nimport { addNotification } from 'altus-redux-middlewares';\r\n\r\nimport {\r\n TASK_FORMS,\r\n TASK_ACTIONS,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport {\r\n copyTask,\r\n deleteTask,\r\n receiveTask,\r\n} from 'features/projects/tasks/tasks.actions';\r\n\r\nimport { getFormFromState } from 'app/app.selectors';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { toProjectTasks } from 'utils/route.util';\r\nimport { getProjectById } from 'features/projects/projects.actions';\r\nimport { getAllTasksFromState } from 'features/projects/tasks/tasks.selectors';\r\nimport { getTaskRiskSectionSelector } from 'features/projects/tasks/tasks.selectors';\r\n\r\nimport { getTaskById } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { TASK_INFO_ACTIONS } from 'features/projects/tasks/task/details/taskDetails.constants';\r\nimport { RISK_TABLE_ACTIONS } from 'features/projects/tasks/task/details/taskDetails.constants';\r\n\r\nconst { EDIT_TASK } = TASK_FORMS;\r\n\r\nexport const initializeEditTaskForm = (task, tasks) => (dispatch) => {\r\n const taskContingencies = tasks\r\n .filter((t) => t.get('contingencyForTaskId') === task.get('taskId'))\r\n .map((t) => t.get('taskId'));\r\n\r\n dispatch(\r\n initialize(\r\n EDIT_TASK.FORM_ID,\r\n task.set('taskContingencies', taskContingencies),\r\n ),\r\n );\r\n};\r\n\r\nexport const taskDetailsOnLoad = (projectId, taskId) => (dispatch) => {\r\n const payload = dispatch(getTaskById(projectId, taskId));\r\n\r\n dispatch({\r\n payload,\r\n type: TASK_INFO_ACTIONS.TASK_INFO_PAGE_LOADED,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateTaskServices =\r\n (projectId, taskId, services) => (dispatch) => {\r\n const payload = taskService\r\n .updateTaskServices(\r\n projectId,\r\n taskId,\r\n services.map((service) => service.get('id')),\r\n )\r\n .then((task) => dispatch(receiveTask(task)));\r\n\r\n dispatch({\r\n payload,\r\n type: TASK_ACTIONS.UPDATE_TASK_SERVICES,\r\n notification: {\r\n info: 'Saving...',\r\n success: 'The task was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const updateTaskDetails =\r\n (projectId, taskId, objective) => (dispatch, getState) => {\r\n const state = getState();\r\n const {\r\n values: task,\r\n initial: initialTask,\r\n syncErrors,\r\n } = getFormFromState(state, TASK_FORMS.EDIT_TASK.FORM_ID).toJS();\r\n task[EDIT_TASK.TASK_OBJECTIVE] = objective?.objective;\r\n task[EDIT_TASK.TASK_DESCRIPTION] = objective?.description;\r\n task[EDIT_TASK.TASK_COMMENTS] = objective?.comments;\r\n if (!isEqual(task, initialTask) && !syncErrors) {\r\n const tasks = getAllTasksFromState(state).toJS();\r\n\r\n const removeContingencies = initialTask[\r\n EDIT_TASK.TASK_CONTINGENCIES\r\n ].filter(\r\n (contingency) =>\r\n !task[EDIT_TASK.TASK_CONTINGENCIES].includes(contingency),\r\n );\r\n\r\n const addContingencies = task[EDIT_TASK.TASK_CONTINGENCIES].filter(\r\n (contingency) =>\r\n !initialTask[EDIT_TASK.TASK_CONTINGENCIES].includes(contingency),\r\n );\r\n\r\n var addContingenciesOk = true;\r\n var sequencingOk = true;\r\n var lastSequence = task.sequence;\r\n // prevent if current task is already contigency\r\n if (task.contingencyForTaskId > 0 && addContingencies.length > 0) {\r\n addContingenciesOk = false;\r\n }\r\n\r\n var savedContigencies = tasks.filter(\r\n (t) => t.contingencyForTaskId === task.taskId,\r\n );\r\n // prevent removing contigencies from middle\r\n if (savedContigencies.length > 0) {\r\n lastSequence = Math.max(...savedContigencies.map((x) => x.sequence));\r\n removeContingencies.forEach((contingencyTaskId) => {\r\n var remContigency = tasks.find((t) => t.id === contingencyTaskId);\r\n\r\n if (\r\n lastSequence >=\r\n remContigency.sequence + removeContingencies.length\r\n ) {\r\n sequencingOk = false;\r\n }\r\n });\r\n }\r\n\r\n // 1 prevent if contigency for adding already have its own contigency\r\n // 2 at the same time check if some tasks are skipped by sequence number\r\n addContingencies.forEach((contingencyTaskId) => {\r\n var newContigency = tasks.find((t) => t.id === contingencyTaskId);\r\n if (\r\n newContigency.contingencyCount > 0 ||\r\n newContigency.contingencyForTaskId > 0\r\n ) {\r\n addContingenciesOk = false;\r\n }\r\n\r\n lastSequence = lastSequence + 1;\r\n\r\n if (lastSequence !== newContigency.sequence) {\r\n sequencingOk = false;\r\n }\r\n });\r\n\r\n if (addContingenciesOk && sequencingOk) {\r\n dispatch({\r\n taskId,\r\n type: TASK_ACTIONS.UPDATE_TASK_DETAILS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The task was successfully updated',\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving...',\r\n },\r\n payload: () =>\r\n Promise.all([\r\n dispatch(updateTask(projectId, taskId, task)),\r\n ...removeContingencies.map((contingencyTaskId) =>\r\n dispatch(\r\n updateTask(projectId, contingencyTaskId, {\r\n ...tasks.find((t) => t.id === contingencyTaskId),\r\n [EDIT_TASK.TASK_CONTINGENCY_FOR_TASK]: null,\r\n }),\r\n ),\r\n ),\r\n ...addContingencies.map((contingencyTaskId) =>\r\n dispatch(\r\n updateTask(projectId, contingencyTaskId, {\r\n ...tasks.find((t) => t.id === contingencyTaskId),\r\n [EDIT_TASK.TASK_CONTINGENCY_FOR_TASK]: taskId,\r\n }),\r\n ),\r\n ),\r\n ]).then((response) => {\r\n const [Task] = response;\r\n dispatch(receiveTask(Task));\r\n dispatch(getProjectById(projectId));\r\n dispatch(\r\n receiveTaskRiskSections(getTaskRiskSectionSelector(state)),\r\n );\r\n return Task;\r\n }),\r\n });\r\n } else if (!addContingenciesOk) {\r\n dispatch({\r\n taskId,\r\n type: TASK_ACTIONS.UPDATE_TASK_DETAILS,\r\n payload: () => {\r\n taskService.getTaskById(projectId, taskId).then((task) => {\r\n dispatch(receiveTask(task));\r\n dispatch(\r\n addNotification({\r\n message: 'Adding contigencies to contigency not allowed',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n });\r\n return task;\r\n },\r\n });\r\n } else if (!sequencingOk) {\r\n dispatch({\r\n taskId,\r\n type: TASK_ACTIONS.UPDATE_TASK_DETAILS,\r\n payload: () => {\r\n taskService.getTaskById(projectId, taskId).then((task) => {\r\n dispatch(receiveTask(task));\r\n dispatch(\r\n addNotification({\r\n message:\r\n 'Please follow order when assigning or removing contigencies, skipping tasks not allowed',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n });\r\n return task;\r\n },\r\n });\r\n }\r\n }\r\n };\r\n\r\nexport const deleteTaskAndRedirectToTasks = (projectId, taskId) => (dispatch) =>\r\n dispatch(\r\n deleteTask(projectId, taskId, () =>\r\n dispatch(replace(toProjectTasks(projectId))),\r\n ),\r\n );\r\n\r\nexport const copyAndRedirectToTask = (projectId, taskId) => (dispatch) =>\r\n dispatch(copyTask(projectId, taskId)).then(({ taskId }) =>\r\n dispatch(push(toProjectTasks(projectId, taskId))),\r\n );\r\n\r\nexport const updateTask = (projectId, taskId, task) => (dispatch) => {\r\n const payload = taskService.updateTask(projectId, taskId, task);\r\n\r\n dispatch({\r\n taskId: taskId,\r\n type: TASK_ACTIONS.UPDATE_TASK,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const requestTaskRiskSections = (taskId) => (dispatch) => {\r\n dispatch({\r\n taskId,\r\n type: RISK_TABLE_ACTIONS.REQUEST_TASK_RISK_SECTIONS,\r\n });\r\n};\r\n\r\nexport const requestCreateRiskSection =\r\n (taskId, risk, riskSection, formik, callback) => (dispatch) => {\r\n const { setStatus, setSubmitting } = formik;\r\n\r\n dispatch({\r\n callback,\r\n setStatus,\r\n taskId,\r\n risk,\r\n setSubmitting,\r\n payload: riskSection,\r\n type: RISK_TABLE_ACTIONS.REQUEST_CREATE_TASK_RISK_SECTION,\r\n notification: {\r\n success: 'Risk successfully created',\r\n },\r\n });\r\n };\r\n\r\nexport const requestUpdateRiskSection = (taskId, risk) => (dispatch) => {\r\n dispatch({\r\n taskId,\r\n risk,\r\n payload: risk,\r\n type: RISK_TABLE_ACTIONS.REQUEST_UPDATE_TASK_RISK_SECTION,\r\n notification: {\r\n success: 'Risk successfully updated',\r\n },\r\n });\r\n};\r\n\r\nexport const requestDeleteRiskSection = (riskId, taskId) => (dispatch) => {\r\n dispatch({\r\n riskId,\r\n taskId,\r\n type: RISK_TABLE_ACTIONS.REQUEST_DELETE_TASK_RISK_SECTION,\r\n confirmationDialog: {\r\n title: 'Delete risk',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this risk? ',\r\n },\r\n notification: {\r\n success: 'Risk was successfully deleted',\r\n },\r\n });\r\n};\r\n\r\nexport const deleteTaskRiskSection = (RiskSectionId) => ({\r\n RiskSectionId,\r\n type: RISK_TABLE_ACTIONS.DELETE_TASK_RISK_SECTION,\r\n});\r\n\r\nexport const receiveTaskRiskSection = (sections) => ({\r\n payload: sections,\r\n type: RISK_TABLE_ACTIONS.RECEIVE_TASK_RISK_SECTION,\r\n});\r\n\r\nexport const receiveTaskRiskSections = (sections) => ({\r\n payload: sections,\r\n type: RISK_TABLE_ACTIONS.RECEIVE_TASK_RISK_SECTIONS,\r\n});\r\n","export const DETAILS_ACTIONS = {\r\n DELETE_PROJECT: 'DELETE_PROJECT',\r\n UPDATE_PROJECT: 'UPDATE_PROJECT',\r\n SIMULATE_DELETE: 'SIMULATE_DELETE',\r\n CONFIRM_DELETE_PROJECT: 'CONFIRM_DELETE_PROJECT',\r\n PROJECT_DETAILS_PAGE_LOADED: 'PROJECT_DETAILS_PAGE_LOADED',\r\n PROJECT_DETAILS_PAGE_UNLOADED: 'PROJECT_DETAILS_PAGE_UNLOADED',\r\n UPDATE_PROJECT_MEASUREMENT_PREFERENCES:\r\n 'UPDATE_PROJECT_MEASUREMENT_PREFERENCES',\r\n UPDATE_EXTERNAL_ID: 'UPDATE_EXTERNAL_ID',\r\n ARCHIVE_SINGLE_PROJECT: 'ARCHIVE_SINGLE_PROJECT',\r\n};\r\n\r\nexport const MAX_YEAR_DROPDOWN_RANGE = 3;\r\nexport const MIN_YEAR_DROPDOWN_RANGE = -2;\r\n\r\nexport const SERVICE_SELECT_MODAL_ID = 'SERVICE_SELECT_MODAL_ID';\r\nexport const EDIT_PROJECT_UNITS_MODAL_ID = 'EDIT_PROJECT_UNITS_MODAL_ID';\r\n\r\nexport const EDIT_PROJECT_FORM = {\r\n FORM_ID: 'editProject',\r\n ID: 'id',\r\n DEFAULT_UNIT: 'unit',\r\n REFERENCE: 'referenceNumber',\r\n WELLBORE: 'wellboreName',\r\n FIELD: 'fieldName',\r\n FACILITY: 'facilityName',\r\n DESCRIPTION: 'description',\r\n DEPARTMENTS: 'departments',\r\n FACILITY_NAME: 'facilityName',\r\n ESTIMATED_END: 'estimatedEnd',\r\n ESTIMATED_START: 'estimatedStart',\r\n OPERATOR: 'operator',\r\n ORGANIZATION_ID: 'organizationId',\r\n EXTERNAL_ID: 'externalId',\r\n EXTERNAL_NAME: 'externalName',\r\n TASK_SERVICES: 'taskServices',\r\n DISPLAY_REFERENCE_NUMBER: 'displayReferenceNumber',\r\n OBJECTIVE_DESCRIPTION: 'objective',\r\n BACKGROUND: 'background',\r\n TITLE: 'title',\r\n INTERNAL_INFORMATION: 'internalInformation',\r\n};\r\n","import isEqual from 'lodash/isEqual';\r\nimport debounce from 'lodash/debounce';\r\nimport { replace } from 'connected-react-router/immutable';\r\n\r\nimport {\r\n DETAILS_ACTIONS,\r\n EDIT_PROJECT_FORM,\r\n EDIT_PROJECT_UNITS_MODAL_ID,\r\n} from 'features/projects/details/details.constants';\r\n\r\nimport {\r\n getFormValueFromState,\r\n getFormValuesFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n toggleModal,\r\n getAllServices,\r\n getAllDepartments,\r\n} from 'app/app.actions';\r\n\r\nimport {\r\n updateProject,\r\n receiveProject,\r\n getProjectById,\r\n} from 'features/projects/projects.actions';\r\n\r\nimport service from 'services/app.service';\r\nimport { projectsBase } from 'app/routePaths';\r\nimport projectService from 'services/project.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { getAllTasks } from 'features/projects/activities/activities.actions';\r\nimport { RISK_TABLE_ACTIONS } from 'features/projects/tasks/task/details/taskDetails.constants';\r\n\r\nexport const submitUpdateProject = debounce((dispatch, getState) => {\r\n const state = getState();\r\n const form = state.get('form').toJS();\r\n const { values, initial } = form[EDIT_PROJECT_FORM.FORM_ID];\r\n const { id: projectId } = initial;\r\n const payload = Promise.resolve()\r\n .then(() => {\r\n const { services: _ignore1, ...initialNoServices } = initial;\r\n const { services: _ignore2, ...valuesNoServices } = values;\r\n if (!isEqual(initialNoServices, valuesNoServices)) {\r\n return dispatch(updateProject(projectId, values));\r\n } else {\r\n return service.getProjectById(projectId);\r\n }\r\n })\r\n .then((project) => dispatch(receiveProject(project)))\r\n .then(() => dispatch(getAllTasks(projectId)));\r\n\r\n dispatch({\r\n payload,\r\n type: DETAILS_ACTIONS.UPDATE_PROJECT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving changes...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The project was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n}, 1000);\r\n\r\nexport const updateProjectExternalId = (projectId) => (dispatch, getState) => {\r\n const externalId = getFormValueFromState(\r\n getState(),\r\n EDIT_PROJECT_FORM.FORM_ID,\r\n EDIT_PROJECT_FORM.EXTERNAL_ID,\r\n );\r\n\r\n const payload = projectService\r\n .updateProjectExternalId(projectId, externalId)\r\n .then((project) => dispatch(receiveProject(project)));\r\n\r\n dispatch({\r\n payload,\r\n type: DETAILS_ACTIONS.UPDATE_EXTERNAL_ID,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onLoad = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: DETAILS_ACTIONS.PROJECT_DETAILS_PAGE_LOADED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllServices()),\r\n dispatch(getAllDepartments()),\r\n // Needed for updating Owners and TaskServices\r\n // TODO: Check if this can be skipped by using for example takeLeading from redux-saga\r\n dispatch(getProjectById(projectId)),\r\n ]),\r\n });\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: DETAILS_ACTIONS.PROJECT_DETAILS_PAGE_UNLOADED });\r\n\r\nexport const deleteProject = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: DETAILS_ACTIONS.DELETE_PROJECT,\r\n payload: () =>\r\n projectService\r\n .deleteProject(projectId)\r\n .then(() => dispatch(replace(`/${projectsBase}`))),\r\n confirmationDialog: {\r\n title: 'Delete project',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this project?',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The project was successfully deleted',\r\n },\r\n });\r\n\r\nexport const updateProjectMeasurementPreference =\r\n (projectId, values) => (dispatch, getState) => {\r\n const valuesJS = values.toJS();\r\n const project = getFormValuesFromState(\r\n getState(),\r\n EDIT_PROJECT_FORM.FORM_ID,\r\n ).toJS();\r\n\r\n const { system } = valuesJS;\r\n\r\n const payload = projectService\r\n .updateMeasurementPreference(projectId, valuesJS)\r\n .then(() =>\r\n dispatch(\r\n updateProject(projectId, {\r\n ...project,\r\n unit: system,\r\n }),\r\n ),\r\n )\r\n .then(() =>\r\n dispatch(\r\n toggleModal({\r\n modalId: EDIT_PROJECT_UNITS_MODAL_ID,\r\n }),\r\n ),\r\n )\r\n .then((response) => {\r\n window.location.reload();\r\n return response;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: DETAILS_ACTIONS.UPDATE_PROJECT_MEASUREMENT_PREFERENCES,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Project measurement preferences successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestProjectRiskSections = (taskId) => (dispatch) => {\r\n dispatch({\r\n taskId,\r\n type: RISK_TABLE_ACTIONS.REQUEST_PROJECT_RISK_SECTIONS,\r\n });\r\n};\r\n\r\nexport const requestTaskRiskByProject = (projectId) => (dispatch) => {\r\n dispatch({\r\n projectId,\r\n type: RISK_TABLE_ACTIONS.REQUEST_TASK_RISK_BY_PROJECT,\r\n });\r\n};\r\n\r\nexport const requestCreateProjectSection =\r\n (taskId, risk, riskSection, formik, callback) => (dispatch) => {\r\n const { setStatus, setSubmitting } = formik;\r\n\r\n dispatch({\r\n callback,\r\n setStatus,\r\n taskId,\r\n risk,\r\n setSubmitting,\r\n payload: riskSection,\r\n type: RISK_TABLE_ACTIONS.REQUEST_CREATE_PROJECT_RISK_SECTION,\r\n notification: {\r\n success: 'Risk successfully created',\r\n },\r\n });\r\n };\r\n\r\nexport const requestUpdateProjectSection = (taskId, risk) => (dispatch) => {\r\n dispatch({\r\n taskId,\r\n risk,\r\n payload: risk,\r\n type: RISK_TABLE_ACTIONS.REQUEST_UPDATE_PROJECT_RISK_SECTION,\r\n notification: {\r\n success: 'Risk successfully updated',\r\n },\r\n });\r\n};\r\n\r\nexport const requestDeleteProjectSection = (riskId, taskId) => (dispatch) => {\r\n dispatch({\r\n riskId,\r\n taskId,\r\n type: RISK_TABLE_ACTIONS.REQUEST_DELETE_PROJECT_RISK_SECTION,\r\n confirmationDialog: {\r\n title: 'Delete risk',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this risk? ',\r\n },\r\n notification: {\r\n success: 'Risk was successfully deleted',\r\n },\r\n });\r\n};\r\n\r\nexport const deleteProjectRiskSection = (RiskSectionId) => ({\r\n RiskSectionId,\r\n type: RISK_TABLE_ACTIONS.DELETE_PROJECT_RISK_SECTION,\r\n});\r\n\r\nexport const receiveProjectRiskSection = (sections) => ({\r\n payload: sections,\r\n type: RISK_TABLE_ACTIONS.RECEIVE_PROJECT_RISK_SECTION,\r\n});\r\n\r\nexport const receiveProjectRiskSections = (sections) => ({\r\n payload: sections,\r\n type: RISK_TABLE_ACTIONS.RECEIVE_PROJECT_RISK_SECTIONS,\r\n});\r\n\r\nexport const receiveTaskRiskByProject = (sections) => ({\r\n payload: sections,\r\n type: RISK_TABLE_ACTIONS.RECEIVE_TASK_RISK_BY_PROJECT,\r\n});\r\n\r\nexport const archiveProject = (projectId, isArchive) => (dispatch) => {\r\n dispatch({\r\n type: DETAILS_ACTIONS.ARCHIVE_SINGLE_PROJECT,\r\n payload: () =>\r\n projectService\r\n .archiveProject(projectId, isArchive)\r\n .then(() => dispatch(onLoad(projectId))),\r\n confirmationDialog: {\r\n title: isArchive ? 'Archive project?' : 'Restore project?',\r\n confirmButtonText: isArchive ? 'Archive' : 'Restore',\r\n description: isArchive\r\n ? 'Are you sure you want to archive project?'\r\n : 'Are you sure you want to restore project?',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: isArchive\r\n ? `The project ${projectId} has been archived.`\r\n : `Project ${projectId} was restored.`,\r\n },\r\n });\r\n};\r\n","import { put, call, takeEvery } from 'redux-saga/effects';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport riskService from 'services/risk.service';\r\nimport { RISK_TABLE_ACTIONS } from 'features/projects/tasks/task/details/taskDetails.constants';\r\nimport {\r\n receiveTaskRiskSections,\r\n deleteTaskRiskSection,\r\n} from 'features/projects/tasks/task/details/taskDetails.actions';\r\nimport {\r\n deleteProjectRiskSection,\r\n receiveProjectRiskSections,\r\n receiveTaskRiskByProject,\r\n} from 'features/projects/details/details.actions';\r\n\r\nexport function* requestTaskRiskSectionsForRiskAsync(action) {\r\n const { taskId } = action;\r\n\r\n const sections = yield call(\r\n riskService.getTaskRiskSectionsForTaskRisk,\r\n taskId,\r\n );\r\n\r\n yield put(receiveTaskRiskSections(sections));\r\n\r\n return sections;\r\n}\r\n\r\nexport function* requestCreateTaskRiskSectionAsync(action) {\r\n const { risk, setStatus, callback, taskId } = action;\r\n const { description, mitigation, consequence, probability, state } = risk;\r\n const payload = {\r\n id: taskId,\r\n description: description,\r\n mitigation: mitigation,\r\n consequence: consequence,\r\n probability: probability,\r\n state: state,\r\n };\r\n try {\r\n const riskSection = yield call(riskService.createTaskRiskSection, payload);\r\n\r\n yield call(requestTaskRiskSectionsForRiskAsync, action);\r\n\r\n if (callback) {\r\n yield call(callback);\r\n }\r\n return riskSection;\r\n } catch (error) {\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestUpdateTaskRiskSectionAsync(action) {\r\n const { risk } = action;\r\n const payload = risk;\r\n\r\n const wellboreSection = yield call(\r\n riskService.updateTaskRiskSection,\r\n payload,\r\n );\r\n\r\n yield call(requestTaskRiskSectionsForRiskAsync, action);\r\n\r\n return wellboreSection;\r\n}\r\n\r\nexport function* requestDeleteTaskRiskSectionAsync(action) {\r\n const { riskId } = action;\r\n\r\n yield call(riskService.deleteTaskRiskSection, riskId);\r\n\r\n yield put(deleteTaskRiskSection(riskId));\r\n\r\n yield call(requestTaskRiskSectionsForRiskAsync, action);\r\n}\r\n\r\n//PROJECT\r\nexport function* requestProjectRiskSectionsForRiskAsync(action) {\r\n const { taskId } = action;\r\n\r\n const sections = yield call(\r\n riskService.getProjectRiskSectionsForProjectRisk,\r\n taskId,\r\n );\r\n\r\n yield put(receiveProjectRiskSections(sections));\r\n\r\n return sections;\r\n}\r\n\r\nexport function* requestTaskRiskSectionsByProjectAsync(action) {\r\n const { projectId } = action;\r\n\r\n const sections = yield call(\r\n riskService.getTaskRiskSectionsByProject,\r\n projectId,\r\n );\r\n\r\n yield put(receiveTaskRiskByProject(sections));\r\n\r\n return sections;\r\n}\r\n\r\nexport function* requestCreateProjectRiskSectionAsync(action) {\r\n const { risk, setStatus, callback, taskId } = action;\r\n const { description, mitigation, probability, consequence, state } = risk;\r\n const payload = {\r\n id: taskId,\r\n description: description,\r\n mitigation: mitigation,\r\n probability: probability,\r\n consequence: consequence,\r\n state: state,\r\n };\r\n try {\r\n const riskSection = yield call(\r\n riskService.createProjectRiskSection,\r\n payload,\r\n );\r\n\r\n yield call(requestProjectRiskSectionsForRiskAsync, action);\r\n\r\n if (callback) {\r\n yield call(callback);\r\n }\r\n return riskSection;\r\n } catch (error) {\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestUpdateProjectRiskSectionAsync(action) {\r\n const { risk } = action;\r\n const payload = risk;\r\n\r\n const wellboreSection = yield call(\r\n riskService.updateProjectRiskSection,\r\n payload,\r\n );\r\n\r\n yield call(requestProjectRiskSectionsForRiskAsync, action);\r\n\r\n return wellboreSection;\r\n}\r\n\r\nexport function* requestDeleteProjectRiskSectionAsync(action) {\r\n const { riskId } = action;\r\n\r\n yield call(riskService.deleteProjectRiskSection, riskId);\r\n\r\n yield put(deleteProjectRiskSection(riskId));\r\n\r\n yield call(requestProjectRiskSectionsForRiskAsync, action);\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_TASK_RISK_SECTIONS,\r\n callAsync,\r\n requestTaskRiskSectionsForRiskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_CREATE_TASK_RISK_SECTION,\r\n callAsync,\r\n requestCreateTaskRiskSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_UPDATE_TASK_RISK_SECTION,\r\n callAsync,\r\n requestUpdateTaskRiskSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_DELETE_TASK_RISK_SECTION,\r\n callAsync,\r\n requestDeleteTaskRiskSectionAsync,\r\n );\r\n\r\n //PROJECT\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_PROJECT_RISK_SECTIONS,\r\n callAsync,\r\n requestProjectRiskSectionsForRiskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_CREATE_PROJECT_RISK_SECTION,\r\n callAsync,\r\n requestCreateProjectRiskSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_UPDATE_PROJECT_RISK_SECTION,\r\n callAsync,\r\n requestUpdateProjectRiskSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_DELETE_PROJECT_RISK_SECTION,\r\n callAsync,\r\n requestDeleteProjectRiskSectionAsync,\r\n );\r\n\r\n yield takeEvery(\r\n RISK_TABLE_ACTIONS.REQUEST_TASK_RISK_BY_PROJECT,\r\n callAsync,\r\n requestTaskRiskSectionsByProjectAsync,\r\n );\r\n}\r\n","import Agent from 'infrastructure/agent';\r\nimport { saveFile } from 'utils/app.util';\r\n\r\nconst searchM3Items = (search) => Agent.post('/m3/search', search);\r\n\r\nconst findM3ItemsBySerialNumber = (search) => Agent.post('/m3/search', search);\r\n\r\nconst uploadSurfaceEquipmentImage = (file, meta = {}) =>\r\n Agent.file.post('/equipment/image/upload', file, meta);\r\n\r\nconst deleteSurfaceEquipmentImage = (imageId) =>\r\n Agent.delete(`/equipment/image/${imageId}`);\r\n\r\nconst getAllSurfaceEquipmentGroups = () => Agent.get('/equipment/groups');\r\n\r\nconst createSurfaceEquipment = (tool) => Agent.post('/equipment/create', tool);\r\n\r\nconst getAllSurfaceEquipment = () => Agent.get('/equipment');\r\n\r\nconst searchSurfaceEquipmentByGroup = (groupId) =>\r\n Agent.get(`/equipment/getequipment/${groupId}`);\r\n\r\nconst getSurfaceEquipmentById = (equipmentId) =>\r\n Agent.get(`/equipment/${equipmentId}`);\r\n\r\nconst getAssetHistoryByExternalToolId = (equipmentId, equipmentType, asset) =>\r\n Agent.post(`/assethistory/${equipmentId}/items/${equipmentType}`, asset);\r\n\r\nconst createTestAssetHistory = (asset, equipmentId, equipmentType) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/tests?equipmentType=${equipmentType}`,\r\n asset,\r\n );\r\n\r\nconst createBopTestAssetHistory = (asset, equipmentId, _, taskId) =>\r\n Agent.post(`/assethistory/${equipmentId}/items/boptests/${taskId}`, asset);\r\n\r\nconst createStringTestAssetHistory = (asset) => {\r\n const { taskId, toolstringId } = asset;\r\n return Agent.post(\r\n `/assethistory/items/${taskId}/${toolstringId}/stringtests`,\r\n asset,\r\n );\r\n};\r\n\r\n// also used for mobilisation\r\nconst createstringtesttoolstringitem = (taskId, toolstringId, asset) => {\r\n return Agent.post(\r\n `/assethistory/items/${taskId}/${toolstringId}/stringtesttoolstringitem`,\r\n asset,\r\n );\r\n};\r\n\r\nconst validatestringtesttoolstringitemSerial = (\r\n stringtesttoolstringitemIds,\r\n) => {\r\n return Agent.post(\r\n '/assethistory/stringtesttoolstringitem/validate-serial-number',\r\n stringtesttoolstringitemIds,\r\n );\r\n};\r\n\r\nconst getstringtesttoolstringitemsForToolstring = (taskId, toolstringId) => {\r\n return Agent.get(\r\n `/assethistory/items/${taskId}/${toolstringId}/stringtesttoolstringitem`,\r\n );\r\n};\r\nconst getstringtesttoolstringitemsForStringTestId = (stringTestId) => {\r\n return Agent.get(\r\n `/assethistory/items/${stringTestId}/stringtesttoolstringitem`,\r\n );\r\n};\r\n\r\nconst updateStringTestDraft = (updateDraftReport) => {\r\n return Agent.post(\r\n '/assethistory/items/stringtests/update',\r\n updateDraftReport,\r\n );\r\n};\r\n\r\nconst createcableTorsionTestAssetHistory = (asset, equipmentId, _, taskId) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableTorsionTest/${taskId}`,\r\n asset,\r\n );\r\n\r\nconst createcableWrapTestAssetHistory = (asset, equipmentId, _, taskId) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableWrapTest/${taskId}`,\r\n asset,\r\n );\r\n\r\nconst createcableTortureTestAssetHistory = (asset, equipmentId, _, taskId) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableTortureTest/${taskId}`,\r\n asset,\r\n );\r\n\r\nconst createcableContinuityTestAssetHistory = (asset, equipmentId, _, taskId) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableContinuityTest/${taskId}`,\r\n asset,\r\n );\r\n\r\nconst createcableInsulationTestAssetHistory = (asset, equipmentId, _, taskId) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableInsulationTest/${taskId}`,\r\n asset,\r\n );\r\n\r\nconst createSil2TestAssetHistory = (asset, ___, _, taskId) =>\r\n Agent.post(`/assethistory/items/sil2Test/${taskId}`, asset);\r\n\r\nconst validateToolStringSerialNumbers = (toolstringId) => {\r\n return Agent.post(`/assethistory/${toolstringId}/validate-serial-number`);\r\n};\r\n\r\nconst validateSurfaceEquipmentSerialNumbers = (taskId) => {\r\n return Agent.post(\r\n `/assethistory/${taskId}/validate-surface-equipment-serial-number`,\r\n );\r\n};\r\n\r\nconst createMaintenanceAssetHistory = (asset, equipmentId, equipmentType) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/maintenances?equipmentType=${equipmentType}`,\r\n asset,\r\n );\r\n\r\nconst getEquipmentAssets = (equipmentId, equipmentType) => {\r\n return Agent.get(\r\n `/assethistory/${equipmentId}/items?equipmentType=${equipmentType}`,\r\n );\r\n};\r\n\r\nconst getStringVerificationsForToolstring = (\r\n taskId,\r\n toolstringId,\r\n isMobilise = false,\r\n stringTestId = null,\r\n) => {\r\n let url = `/assethistory/items/${taskId}/${toolstringId}/stringtests?isMobilise=${isMobilise}`;\r\n if (stringTestId !== undefined && stringTestId !== null) {\r\n url += `&stringTestId=${stringTestId}`;\r\n }\r\n return Agent.get(url);\r\n};\r\n\r\nconst getEquipmentByCategories = (taskId) =>\r\n Agent.get(`/assethistory/${taskId}/equipment/categories`);\r\n\r\nconst createCableWrapBraidedMonoTestAssetHistory = (\r\n asset,\r\n equipmentId,\r\n _,\r\n taskId,\r\n) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableWrapBraidedMonoTest/${taskId}`,\r\n asset,\r\n );\r\n\r\nconst createCableBreakTestAssetHistory = (asset, equipmentId, _, taskId) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableBreakTest/${taskId}`,\r\n asset,\r\n );\r\n\r\nconst createCableCutMaintenanceAssetHistory = (\r\n asset,\r\n equipmentId,\r\n equipmentType,\r\n taskId,\r\n) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableCutMaintenances/${taskId}?equipmentType=${equipmentType}`,\r\n asset,\r\n );\r\n\r\nconst createCableServiceMaintenanceAssetHistory = (\r\n asset,\r\n equipmentId,\r\n equipmentType,\r\n taskId,\r\n) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableServiceMaintenances/${taskId}?equipmentType=${equipmentType}`,\r\n asset,\r\n );\r\n\r\nconst createCableSpoolingMaintenanceAssetHistory = (\r\n asset,\r\n equipmentId,\r\n equipmentType,\r\n taskId,\r\n drumItemNumber,\r\n drumSerialNumber,\r\n storageType,\r\n) =>\r\n Agent.post(\r\n `/assethistory/${equipmentId}/items/cableSpoolingMaintenances/${taskId}?equipmentType=${equipmentType}&drumItemNumber=${drumItemNumber}&drumSerialNumber=${drumSerialNumber}&storageType=${storageType}`,\r\n asset,\r\n );\r\n\r\nconst getCableTestDetails = (cableId, assetInfo) =>\r\n Agent.post(`/assethistory/${cableId}/cable/details`, assetInfo);\r\n\r\nconst exportCableHistory = (equipmentId, serialNumber) =>\r\n Agent.file\r\n .get(`/assethistory/${equipmentId}/cable/${serialNumber}/historyReport`)\r\n .then(([file, filename]) => saveFile(file, filename));\r\n\r\n// Search\r\nconst searchSurfaceEquipment = (filters) =>\r\n Agent.post('/equipment/search', filters);\r\n\r\n// equipment templates\r\nconst createEquipmentTemplate = (equipmentTemplate) =>\r\n Agent.post('/equipment/template', equipmentTemplate);\r\n\r\nconst updateEquipmentTemplate = (equipmentTemplate) =>\r\n Agent.put('/equipment/template', equipmentTemplate);\r\n\r\nconst getEquipmentTemplate = (equipmentTemplateId) =>\r\n Agent.get(`/equipment/template/${equipmentTemplateId}`);\r\n\r\nconst searchEquiomentTemplate = (filters) =>\r\n Agent.post('/equipment/template/search', filters);\r\n\r\nconst equipmentService = {\r\n getAllSurfaceEquipment,\r\n uploadSurfaceEquipmentImage,\r\n deleteSurfaceEquipmentImage,\r\n createSurfaceEquipment,\r\n getAllSurfaceEquipmentGroups,\r\n searchM3Items,\r\n findM3ItemsBySerialNumber,\r\n getAssetHistoryByExternalToolId,\r\n getSurfaceEquipmentById,\r\n searchSurfaceEquipmentByGroup,\r\n createTestAssetHistory,\r\n createMaintenanceAssetHistory,\r\n getEquipmentAssets,\r\n createBopTestAssetHistory,\r\n createStringTestAssetHistory,\r\n validateToolStringSerialNumbers,\r\n createcableTorsionTestAssetHistory,\r\n createcableWrapTestAssetHistory,\r\n createcableTortureTestAssetHistory,\r\n createcableContinuityTestAssetHistory,\r\n createcableInsulationTestAssetHistory,\r\n createSil2TestAssetHistory,\r\n validateSurfaceEquipmentSerialNumbers,\r\n getStringVerificationsForToolstring,\r\n getEquipmentByCategories,\r\n createCableWrapBraidedMonoTestAssetHistory,\r\n createCableBreakTestAssetHistory,\r\n createCableCutMaintenanceAssetHistory,\r\n getCableTestDetails,\r\n createCableServiceMaintenanceAssetHistory,\r\n createCableSpoolingMaintenanceAssetHistory,\r\n exportCableHistory,\r\n createstringtesttoolstringitem,\r\n getstringtesttoolstringitemsForToolstring,\r\n getstringtesttoolstringitemsForStringTestId,\r\n updateStringTestDraft,\r\n searchSurfaceEquipment,\r\n validatestringtesttoolstringitemSerial,\r\n createEquipmentTemplate,\r\n updateEquipmentTemplate,\r\n getEquipmentTemplate,\r\n searchEquiomentTemplates: searchEquiomentTemplate,\r\n};\r\n\r\nexport default equipmentService;\r\n","import { addNotification } from 'altus-redux-middlewares';\r\n\r\nimport {\r\n EQIPMENT_CATEGORY_IDS,\r\n EQUIPMENT_ACTIONS,\r\n MODAL,\r\n ASSET_HISTORY_TEST_TYPE,\r\n ASSET_HISTORY_EVENT_TYPES_ITEM,\r\n ASSET_HISTORY_MAINTENANCE_TYPE,\r\n ASSET_HISTORY_EQUIPMENT_TYPE,\r\n} from 'features/equipment/equipment.constants';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport toolService from 'services/tool.service';\r\nimport { toggleModal } from 'app/app.actions';\r\nimport equipmentService from 'features/equipment/equipment.service';\r\nimport { TOOL_ACTIONS } from 'features/projects/tool/tool.constants';\r\nimport { M3SearchType } from 'app/app.constants';\r\n\r\nconst onLoadGeneric = (getAllToolStringsFunc) => (categoryId) => (dispatch) => {\r\n dispatch(getToolGroups(categoryId));\r\n dispatch(getToolSuppliers());\r\n dispatch(getCables());\r\n getAllToolStringsFunc();\r\n\r\n const payload = dispatch(getTools(categoryId));\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.PAGE_LOADED,\r\n payload: payload,\r\n });\r\n};\r\n\r\nexport const onLoadWithoutToolstrings = (categoryId) => (dispatch) => {\r\n const onLoadFunc = onLoadGeneric(() => {});\r\n onLoadFunc(categoryId)(dispatch);\r\n};\r\n\r\nexport const onLoad = (categoryId) => (dispatch) => {\r\n const onLoadFunc = onLoadGeneric(() => dispatch(getAllToolStrings()));\r\n onLoadFunc(categoryId)(dispatch);\r\n};\r\n\r\nexport const onLoadToolAssemblies = (categoryId) => (dispatch) => {\r\n dispatch(getToolGroups(categoryId));\r\n dispatch(getToolSuppliers());\r\n dispatch(getCables());\r\n\r\n const payload = dispatch(getToolAssemblies(categoryId));\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.PAGE_LOADED,\r\n payload: payload,\r\n });\r\n};\r\n\r\nexport const onLoadAssetHistory =\r\n (externalToolId, equipmentType, serialNumber) => (dispatch) => {\r\n dispatch(\r\n getEquipmentAssetHistory(externalToolId, equipmentType, serialNumber),\r\n );\r\n\r\n if (equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.CABLE) {\r\n dispatch(getCableTestDetails(externalToolId, serialNumber));\r\n }\r\n };\r\n\r\nexport const getToolGroups = (categoryId) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.TOOL_GROUPS_LOADED,\r\n payload: () => toolService.getToolGroupsByCategory(categoryId),\r\n });\r\n};\r\n\r\nexport const getToolProjectHistoryByToolId = (toolId) => (dispatch) => {\r\n dispatch({\r\n type: TOOL_ACTIONS.RECEIVE_TOOL_PROJECT_HISTORY,\r\n payload: () => toolService.getToolProjectHistoryByToolId(toolId),\r\n });\r\n};\r\n\r\nexport const getTools = (categoryId) => (dispatch) => {\r\n const filter = {\r\n categoryId,\r\n };\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.TOOLS_LOADED,\r\n payload: () => toolService.searchTools(filter),\r\n });\r\n};\r\n\r\nexport const getEquipmentByCategories = (taskId) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_BY_CATEGORIES,\r\n payload: () => equipmentService.getEquipmentByCategories(taskId),\r\n });\r\n};\r\n\r\nexport const getToolAssemblies = (categoryId) => (dispatch) => {\r\n const filter = {\r\n categoryId,\r\n };\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.TOOL_ASSEMBLIES_LOADED,\r\n payload: () => toolService.searchTools(filter),\r\n });\r\n};\r\n\r\nexport const getToolSuppliers = () => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SUPPLIERS_LOADED,\r\n payload: () => toolService.getToolSuppliers(),\r\n });\r\n};\r\n\r\nexport const getCables = () => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n payload: () => toolService.getCables(),\r\n });\r\n};\r\n\r\nexport const getCablesByProject = (projectId) => (dispatch) => {\r\n if (projectId) {\r\n return dispatch({\r\n type: EQUIPMENT_ACTIONS.CABLES_LOADED_BY_PROJECTID,\r\n payload: () => toolService.getCablesByProject(projectId),\r\n });\r\n }\r\n return dispatch({\r\n type: EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n payload: () => toolService.getCables(),\r\n });\r\n};\r\n\r\nexport const getCable = (cableId) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.LOAD_CABLE,\r\n payload: () => toolService.getCable(cableId),\r\n });\r\n};\r\n\r\nexport const searchCables = (filter) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n payload: () => toolService.searchCables(filter),\r\n });\r\n};\r\n\r\nexport const searchTools = (filter) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.TOOLS_LOADED,\r\n payload: toolService.searchTools(filter),\r\n });\r\n};\r\n\r\nexport const searchToolAssemblies = (filter) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.TOOL_ASSEMBLIES_LOADED,\r\n payload: toolService.searchTools(filter),\r\n });\r\n};\r\n\r\nexport const searchBhas = (filter) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.BHA_TEMPLATES_LOADED,\r\n payload: toolService.searchBhas(filter),\r\n });\r\n};\r\n\r\nexport const searchSurfaceEquipment = (filter) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n payload: equipmentService.searchSurfaceEquipment(filter),\r\n });\r\n};\r\n\r\nexport const searchEquipmentTemplates = (filter) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.EQUIPMENT_TEMPLATES_LOADED,\r\n payload: equipmentService.searchEquiomentTemplates(filter),\r\n });\r\n};\r\n\r\nexport const onUnload = () => (dispatch) => {\r\n dispatch({ type: EQUIPMENT_ACTIONS.PAGE_UNLOADED });\r\n};\r\n\r\nexport const onLoadAddToolsModal = () => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.TOOL_CONNECTORS_LOADED,\r\n payload: toolService.getToolConnectors(),\r\n });\r\n};\r\n\r\nexport const createTool = (tool) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating tool...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool successfully created!',\r\n },\r\n confirmationDialog: {\r\n confirmButtonText: 'Save',\r\n title: 'Confirm tool saving',\r\n description: 'Are you sure you want to save this tool?',\r\n },\r\n payload: () =>\r\n toolService.createTool(tool).then(() => {\r\n dispatch(toggleModal({ modalId: MODAL.ADD_TOOL }));\r\n dispatch(toggleModal({ modalId: MODAL.M3_TOOL }));\r\n }),\r\n });\r\n};\r\n\r\nexport const receiveToolCreated = (createdTool) => ({\r\n payload: createdTool,\r\n type: EQUIPMENT_ACTIONS.RECEIVE_CREATED_TOOL,\r\n});\r\n\r\nexport const uploadToolImage = (file) => (dispatch) => {\r\n const payload = toolService.uploadToolImage(file);\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.UPLOAD_IMAGE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Uploading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The image was successfully uploaded',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to upload image',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteToolImage = (toolImageId) => (dispatch) => {\r\n const payload = toolService.deleteToolImage(toolImageId);\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.DELETE_IMAGE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting image...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Image successfully deleted!',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getAllToolStrings = () => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.BHA_TEMPLATES_LOADED,\r\n payload: () => toolService.getAllToolStrings(),\r\n });\r\n};\r\n\r\nexport const searchM3Items = (textSearch) => {\r\n const search = { textSearch: textSearch, searchType: M3SearchType.ITEMS };\r\n const payload = equipmentService.searchM3Items(search);\r\n // #9316 Not able to add serial and item number for cable spooling test : This dispatch causes modal to be rerendered\r\n // dispatch({\r\n // type: EQUIPMENT_ACTIONS.M3_ITEM_SEARCH,\r\n // payload,\r\n // });\r\n\r\n return payload;\r\n};\r\n\r\nexport const searchM3ItemsWithDispatch = (textSearch) => (dispatch) => {\r\n const search = { textSearch: textSearch, searchType: M3SearchType.ITEMS };\r\n const payload = equipmentService.searchM3Items(search);\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.M3_ITEM_SEARCH,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const findM3ItemsBySerialNumber = (m3itemNumber, textSearch) => {\r\n const search = {\r\n m3ItemNumber: m3itemNumber,\r\n serialNumber: textSearch,\r\n searchType: M3SearchType.SERIALNUMBERS,\r\n };\r\n const payload = equipmentService.findM3ItemsBySerialNumber(search);\r\n\r\n // #9316 Not able to add serial and item number for cable spooling test : This dispatch causes modal to be rerendered\r\n // dispatch({\r\n // type: EQUIPMENT_ACTIONS.M3_FIND_ITEMS_BY_SERIAL_NUMBER,\r\n // payload,\r\n // });\r\n\r\n return payload;\r\n};\r\n\r\nexport const findM3ItemsBySerialNumberAndStatus = (\r\n m3itemNumber,\r\n textSearch,\r\n) => {\r\n const search = {\r\n m3ItemNumber: m3itemNumber,\r\n serialNumber: textSearch,\r\n searchType: M3SearchType.SERIALNUMBERS,\r\n getByStatus: true,\r\n };\r\n const payload = equipmentService.findM3ItemsBySerialNumber(search);\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateTool = (tool, activeModal) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.UPDATE_TOOL,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating tool',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool successfully updated!',\r\n },\r\n payload: () =>\r\n toolService.updateTool(tool).then(() => {\r\n dispatch(toggleModal({ modalId: activeModal }));\r\n window.location.reload();\r\n }),\r\n });\r\n};\r\n\r\nexport const onLoadSurfaceEquipment = () => (dispatch) => {\r\n dispatch(onLoadSurfaceEquipmentsGroupsModal());\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n payload: () => equipmentService.getAllSurfaceEquipment(),\r\n });\r\n};\r\n\r\nexport const onSearchSurfaceEquipmentByGroup = (groupId) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n payload: () => equipmentService.searchSurfaceEquipmentByGroup(groupId),\r\n });\r\n};\r\n\r\nexport const createSurfaceEquipment = (tool) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.CREATE_SURFACE_EQUIPMENT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Error creating surface equipment.',\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating surface equipment...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Surface equipment successfully created!',\r\n },\r\n confirmationDialog: {\r\n confirmButtonText: 'Save',\r\n title: 'Confirm surface equipment saving',\r\n description: 'Are you sure you want to save this?',\r\n },\r\n payload: () =>\r\n equipmentService.createSurfaceEquipment(tool).then(() => {\r\n dispatch(toggleModal({ modalId: MODAL.ADD_SURFACE_EQUIPMENT }));\r\n dispatch(onLoadSurfaceEquipment());\r\n }),\r\n });\r\n};\r\n\r\nexport const onLoadSurfaceEquipmentsGroupsModal = () => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS,\r\n payload: equipmentService.getAllSurfaceEquipmentGroups(),\r\n });\r\n};\r\n\r\nexport const uploadSurfaceEquipmentImage = (file) => (dispatch) => {\r\n const payload = equipmentService.uploadSurfaceEquipmentImage(file);\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_UPLOAD_IMAGE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Uploading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The image was successfully uploaded',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to upload image',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteSurfaceEquipmentImage = (toolImageId) => (dispatch) => {\r\n const payload = equipmentService.deleteSurfaceEquipmentImage(toolImageId);\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.DELETE_SURFACE_EQUIPMENT_IMAGE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting image...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Image successfully deleted!',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const saveToolAssembly = (toolAssemblyToSave) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SAVE_TOOL_ASSEMBLY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving tool assembly...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool assembly saved!',\r\n },\r\n payload: () =>\r\n toolService.saveToolAssembly(toolAssemblyToSave).then(() => {\r\n dispatch(getTools(EQIPMENT_CATEGORY_IDS.TOOL_ASSEMBLIES));\r\n dispatch(toggleModal({ modalId: MODAL.ADD_TOOL_ASSEMBLY }));\r\n }),\r\n });\r\n};\r\n\r\nexport const getToolAssembly = (toolId) => (dispatch) => {\r\n const payload = toolService.getToolAssembly(toolId);\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.GET_TOOL_ASSEMBLY,\r\n payload: payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateToolAssembly = (toolAssemblyToSave) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SAVE_TOOL_ASSEMBLY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving tool assembly...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool assembly saved!',\r\n },\r\n payload: () =>\r\n toolService.updateToolAssembly(toolAssemblyToSave).then(() => {\r\n dispatch(getTools(EQIPMENT_CATEGORY_IDS.TOOL_ASSEMBLIES));\r\n dispatch(toggleModal({ modalId: MODAL.EDIT_TOOL_ASSEMBLY }));\r\n }),\r\n });\r\n};\r\n\r\nexport const saveEquipmentTemplate =\r\n (equipmentTemplateToSave) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SAVE_EQUIPMENT_TEMPLATE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving equipment template...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Equipment template saved!',\r\n },\r\n payload: () =>\r\n equipmentService\r\n .createEquipmentTemplate(equipmentTemplateToSave)\r\n .then(() => {\r\n dispatch(searchEquipmentTemplates({ textSearch: '' }));\r\n dispatch(toggleModal({ modalId: MODAL.ADD_EQUIPMENT_TEMPLATE }));\r\n }),\r\n });\r\n };\r\n\r\n// might not be needed\r\nexport const getEquipmentTemplate = (toolId) => (dispatch) => {\r\n const payload = toolService.getEquipmentTemplate(toolId);\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.GET_EQUIPMENT_TEMPLATE,\r\n payload: payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateEquipmentTemplate =\r\n (equipmentTemplateToSave) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SAVE_EQUIPMENT_TEMPLATE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating equipment template...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Equipment template updated!',\r\n },\r\n payload: () =>\r\n equipmentService\r\n .updateEquipmentTemplate(equipmentTemplateToSave)\r\n .then(() => {\r\n dispatch(searchEquipmentTemplates({ textSearch: '' }));\r\n dispatch(toggleModal({ modalId: MODAL.EDIT_EQUIPMENT_TEMPLATE }));\r\n }),\r\n });\r\n };\r\n\r\nexport const saveBhaTemplate = (bhaTemplateToSave) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.SAVE_BHA_TEMPLATE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving template...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Template saved!',\r\n },\r\n payload: () => toolService.saveBhaFromClient(bhaTemplateToSave),\r\n });\r\n};\r\n\r\nexport const uploadTool3DObject = (file) => (dispatch) => {\r\n const payload = toolService.uploadTool3DObject(file);\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.UPLOAD_3D_OBJECT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Uploading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The 3D Object was successfully uploaded',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to upload 3D Object',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteTool3DObject = (toolImageId) => (dispatch) => {\r\n const payload = toolService.deleteTool3DObject(toolImageId);\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.DELETE_3D_OBJECT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting 3D Object...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: '3D Object successfully deleted!',\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const createAssetHistory =\r\n (asset, equipmentType, getAssetAfterRefresh = true) =>\r\n (dispatch) => {\r\n const {\r\n externalToolId,\r\n serialNumber,\r\n typeOfEvent,\r\n testType,\r\n taskId,\r\n drumItemNumber,\r\n drumSerialNumber,\r\n storageType,\r\n } = asset;\r\n\r\n const handleAssetHistoryResponse = () => {\r\n dispatch(\r\n getEquipmentAssetHistory(externalToolId, equipmentType, serialNumber),\r\n );\r\n if (equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.CABLE) {\r\n dispatch(getCableTestDetails(externalToolId, serialNumber));\r\n }\r\n };\r\n\r\n const closeModal = () => {\r\n dispatch(\r\n toggleModal({ modalId: MODAL.ADD_ASSET_HISTORY_TEST, value: false }),\r\n );\r\n dispatch(\r\n toggleModal({ modalId: MODAL.ADD_ASSET_HISTORY_SURFACE, value: false }),\r\n );\r\n dispatch(\r\n toggleModal({ modalId: MODAL.ADD_ASSET_HISTORY_BHA, value: false }),\r\n );\r\n dispatch(\r\n toggleModal({\r\n modalId: MODAL.ADD_ASSET_HISTORY_SURFACE_SIL2,\r\n value: false,\r\n }),\r\n );\r\n };\r\n\r\n let assetHistoryService;\r\n let successMessage = 'Asset history successfully created!';\r\n\r\n switch (typeOfEvent) {\r\n case String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST):\r\n switch (testType) {\r\n case String(ASSET_HISTORY_TEST_TYPE.BOP_TEST):\r\n assetHistoryService = equipmentService.createBopTestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.STRING_TEST):\r\n assetHistoryService = equipmentService.createStringTestAssetHistory;\r\n successMessage = 'String verification successfully created!';\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.CABLE_TORSION_TEST):\r\n assetHistoryService =\r\n equipmentService.createcableTorsionTestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_TEST):\r\n assetHistoryService =\r\n equipmentService.createcableWrapTestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.CABLE_TORTURE_TEST):\r\n assetHistoryService =\r\n equipmentService.createcableTortureTestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.CABLE_CONTINUITY_TEST):\r\n assetHistoryService =\r\n equipmentService.createcableContinuityTestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.CABLE_INSULATION_TEST):\r\n assetHistoryService =\r\n equipmentService.createcableInsulationTestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.SIL2_TEST):\r\n assetHistoryService = equipmentService.createSil2TestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_BRAIDED_MONO_TEST):\r\n assetHistoryService =\r\n equipmentService.createCableWrapBraidedMonoTestAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_TEST_TYPE.CABLE_BREAK_TEST):\r\n assetHistoryService =\r\n equipmentService.createCableBreakTestAssetHistory;\r\n break;\r\n default:\r\n assetHistoryService = equipmentService.createTestAssetHistory;\r\n break;\r\n }\r\n break;\r\n case String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE):\r\n switch (testType) {\r\n case String(ASSET_HISTORY_MAINTENANCE_TYPE.GENERIC):\r\n assetHistoryService =\r\n equipmentService.createMaintenanceAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_CUT):\r\n assetHistoryService =\r\n equipmentService.createCableCutMaintenanceAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_SERVICE):\r\n assetHistoryService =\r\n equipmentService.createCableServiceMaintenanceAssetHistory;\r\n break;\r\n case String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_SPOOLING):\r\n assetHistoryService =\r\n equipmentService.createCableSpoolingMaintenanceAssetHistory;\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.CREATE_ASSET_HISTORY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Creating asset history...',\r\n },\r\n payload: () =>\r\n assetHistoryService(\r\n asset,\r\n externalToolId,\r\n equipmentType,\r\n taskId ?? 0,\r\n drumItemNumber === '' ? 0 : drumItemNumber ?? 0,\r\n drumSerialNumber === '' ? 0 : drumSerialNumber ?? 0,\r\n storageType,\r\n )\r\n .then(() => {\r\n try {\r\n dispatch(\r\n addNotification({\r\n message: successMessage,\r\n variant: NOTIFICATION_VARIANTS.SUCCESS,\r\n }),\r\n );\r\n\r\n if (getAssetAfterRefresh) {\r\n return handleAssetHistoryResponse();\r\n }\r\n } finally {\r\n closeModal();\r\n }\r\n })\r\n .catch((error) => {\r\n closeModal();\r\n const message = error?.response?.body?.hasErrors\r\n ? error.response.body.errors[0]\r\n : 'Error creating the asset history.';\r\n\r\n dispatch(\r\n addNotification({\r\n message,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }),\r\n });\r\n };\r\n\r\nexport const validateToolStringSerialNumbers = (toolstringId) => (dispatch) => {\r\n const openModal = (show) => {\r\n dispatch(\r\n toggleModal({ modalId: MODAL.ADD_ASSET_HISTORY_BHA, value: show }),\r\n );\r\n };\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.VALIDATE_TOOLSTRING_SERIAL_NUMBERS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Validating serial numbers...',\r\n },\r\n payload: () =>\r\n equipmentService\r\n .validateToolStringSerialNumbers(toolstringId)\r\n .then(() => {\r\n openModal(true);\r\n })\r\n .catch((error) => {\r\n openModal(false);\r\n const message = error?.response?.body?.hasErrors\r\n ? error.response.body.errors[0]\r\n : 'Error has ocurred, please try again.';\r\n\r\n dispatch(\r\n addNotification({\r\n message,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }),\r\n });\r\n};\r\n\r\nexport const validateSurfaceEquipmentSerialNumbers = (taskId) => (dispatch) => {\r\n dispatch(getEquipmentByCategories(taskId));\r\n const openModal = (show) => {\r\n dispatch(\r\n toggleModal({\r\n modalId: MODAL.ADD_ASSET_HISTORY_SURFACE_SIL2,\r\n value: show,\r\n }),\r\n );\r\n };\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.VALIDATE_TOOLSTRING_SERIAL_NUMBERS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Validating serial numbers...',\r\n },\r\n payload: () =>\r\n equipmentService\r\n .validateSurfaceEquipmentSerialNumbers(taskId)\r\n .then(() => {\r\n openModal(true);\r\n })\r\n .catch((error) => {\r\n openModal(false);\r\n const message = error?.response?.body?.hasErrors\r\n ? error.response.body.errors[0]\r\n : 'Error has ocurred, please try again.';\r\n\r\n dispatch(\r\n addNotification({\r\n message,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }),\r\n });\r\n};\r\n\r\nexport const getBhaTemplateForEditing = (templateId) => {\r\n return {\r\n templateId,\r\n type: EQUIPMENT_ACTIONS.REQUEST_BHA_TEMPLATE_FOR_EDITING,\r\n };\r\n};\r\n\r\nexport const receiveBhaTemplateForEditing = (template) => ({\r\n payload: template,\r\n type: EQUIPMENT_ACTIONS.RECEIVE_BHA_TEMPLATE_FOR_EDITING,\r\n});\r\n\r\nexport const getBhaTemplateSectionsForEditing = (templateId) => {\r\n return {\r\n templateId,\r\n type: EQUIPMENT_ACTIONS.REQUEST_BHA_TEMPLATE_SECTIONS_FOR_EDITING,\r\n };\r\n};\r\n\r\nexport const receiveBhaTemplateSectionsForEditing = (sections) => ({\r\n payload: sections,\r\n type: EQUIPMENT_ACTIONS.RECEIVE_BHA_TEMPLATE_SECTIONS_FOR_EDITING,\r\n});\r\n\r\nexport const unloadBhaTemplateForEditing = () => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.UNLOAD_BHA_TEMPLATE_FOR_EDITING,\r\n });\r\n};\r\n\r\nexport const addTemplateTool = (toolstringId, tool) => {\r\n const toolName = tool.get('name');\r\n\r\n return {\r\n toolstringId,\r\n tool,\r\n type: EQUIPMENT_ACTIONS.CREATE_TEMPLATE_TOOL,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${toolName} was successfully added to BHA`,\r\n },\r\n };\r\n};\r\n\r\nexport const deleteTemplateTool = (toolstringItemId, templateId) => ({\r\n type: EQUIPMENT_ACTIONS.DELETE_TEMPLATE_TOOL,\r\n toolstringItemId,\r\n templateId,\r\n confirmationDialog: {\r\n title: 'Remove tool',\r\n description: 'Are you sure you want to remove this tool?',\r\n confirmButtonText: 'Remove',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The tool was successfully removed',\r\n },\r\n});\r\n\r\nexport const updateTemplate = (templateId, toolstring) => ({\r\n templateId,\r\n toolstring,\r\n type: EQUIPMENT_ACTIONS.REQUEST_UPDATE_TEMPLATE_FOR_EDITING,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA updated succesfully',\r\n },\r\n});\r\n\r\nexport const duplicateTemplateItem = (templateId, tool) => {\r\n const toolName = tool.get('name');\r\n\r\n return {\r\n templateId,\r\n tool,\r\n type: EQUIPMENT_ACTIONS.REQUEST_DUPLICATE_TEMPLATE_ITEM,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Loading...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${toolName} was successfully duplicated`,\r\n },\r\n };\r\n};\r\n\r\nexport const sortTemplateTools = (templateId, sortedTool, affectedTool) => ({\r\n templateId,\r\n sortedTool,\r\n affectedTool,\r\n type: EQUIPMENT_ACTIONS.REQUEST_SORT_TEMPLATE_TOOLS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Moving tool...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'BHA sequence successfully updated!',\r\n },\r\n});\r\n\r\nexport const sortTemplateAssemblyTools = (\r\n templateId,\r\n toolstringItemId,\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n) => ({\r\n templateId,\r\n toolstringItemId,\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n type: EQUIPMENT_ACTIONS.REQUEST_SORT_TEMPLATE_ASSEMBLY_TOOLS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Moving tool...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Tool sequence successfully updated!',\r\n },\r\n});\r\n\r\nexport const editToolImage = (values, imageId) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.EDIT_TOOL_IMAGE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Saving...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The image was successfully saved',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to save image',\r\n },\r\n payload: toolService.editToolImage(values, imageId).then(() => {\r\n dispatch(toggleModal(MODAL.EDIT_TOOL_IMAGE));\r\n window.location.reload();\r\n }),\r\n });\r\n};\r\n\r\nexport const getEquipmentAssetHistory =\r\n (externalToolId, equipmentType, serialNumber) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.LOAD_ASSET_HISTORY,\r\n payload: () =>\r\n equipmentService.getAssetHistoryByExternalToolId(\r\n externalToolId,\r\n equipmentType,\r\n { serialNumber },\r\n ),\r\n });\r\n };\r\n\r\nexport const loadEquipmentAssets =\r\n (equipmentId, equipmentType) => (dispatch) => {\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.RECEIVE_EQUIPMENT_ASSETS,\r\n payload: () =>\r\n equipmentService.getEquipmentAssets(equipmentId, equipmentType),\r\n });\r\n };\r\n\r\nexport const deleteTemplateToolAssemblyTool = (\r\n toolAssemblyToolId,\r\n templateId,\r\n) => ({\r\n type: EQUIPMENT_ACTIONS.DELETE_TEMPLATE_TOOLASSEMBLY_TOOL,\r\n toolAssemblyToolId,\r\n templateId,\r\n confirmationDialog: {\r\n title: 'Remove tool',\r\n description: 'Are you sure you want to remove this tool?',\r\n confirmButtonText: 'Remove',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating BHA...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The tool was successfully removed',\r\n },\r\n});\r\n\r\nexport const validateToolStringSerialNumbersForMobile =\r\n (toolstringId) => (dispatch) => {\r\n dispatch(getEquipmentByCategories());\r\n\r\n const openErrorModal = (show) => {\r\n dispatch(\r\n toggleModal({ modalId: MODAL.MISSING_SERIAL_NUMBER, value: show }),\r\n );\r\n };\r\n const openVerificationModal = (show) => {\r\n dispatch(\r\n toggleModal({ modalId: MODAL.ADD_ASSET_HISTORY_BHA, value: show }),\r\n );\r\n };\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.VALIDATE_TOOLSTRING_SERIAL_NUMBERS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Validating serial numbers...',\r\n },\r\n payload: () =>\r\n equipmentService\r\n .validateToolStringSerialNumbers(toolstringId)\r\n .then(() => {\r\n openVerificationModal(true);\r\n })\r\n .catch(() => {\r\n openErrorModal(true);\r\n }),\r\n });\r\n };\r\n\r\nexport const getStringVerificationsForToolstring =\r\n (taskId, toolstringId) => (dispatch) => {\r\n const payload = equipmentService.getStringVerificationsForToolstring(\r\n taskId,\r\n toolstringId,\r\n );\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.RECEIVE_STRING_VERIFICATIONS_FOR_TOOLSTRING,\r\n payload: payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const getCableTestDetails = (cableId, serialNumber) => (dispatch) => {\r\n const payload = equipmentService.getCableTestDetails(cableId, {\r\n serialNumber,\r\n });\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.RECEIVE_CABLE_TEST_DETAILS,\r\n payload: payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const exportCableHistory = (equipmentId, serialNumber) => (dispatch) => {\r\n const payload = equipmentService.exportCableHistory(\r\n equipmentId,\r\n serialNumber,\r\n );\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.EXPORT_CABLE_HISTORY,\r\n payload: payload,\r\n });\r\n\r\n dispatch({\r\n type: EQUIPMENT_ACTIONS.EXPORT_CABLE_HISTORY,\r\n payload: payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Exporting Cable History...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Cable History Export Successful!',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n","import { push } from 'connected-react-router/immutable';\r\nimport { put, call, takeEvery } from 'redux-saga/effects';\r\n\r\nimport { toggleModal } from 'altus-modal';\r\n\r\nimport {\r\n getTaskById,\r\n receiveTaskToolstring,\r\n receiveTaskToolstrings,\r\n receiveTaskToolstringSections,\r\n receiveToolstringAssemblyTool,\r\n receiveToolstringItem,\r\n receiveToolstringTemplates,\r\n receiveToolstringToolsUpdatedSequences,\r\n redirectToTaskToolstringEdit,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport {\r\n MODAL,\r\n TOOLSTRING_ACTIONS,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nimport {\r\n receiveBhaTemplateForEditing,\r\n receiveBhaTemplateSectionsForEditing,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport toolService from 'services/tool.service';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { toTaskToolstring } from 'utils/route.util';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport toolstringService from 'services/toolstring.service';\r\nimport simulationService from 'services/simulation.service.js';\r\nimport taskService from 'services/task.service';\r\nimport { ToolType } from 'features/projects/tool/tool.constants';\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport { SimulationState } from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nexport function* requestToolstringsForTaskAsync(action) {\r\n const { projectId, taskId } = action;\r\n\r\n const toolstrings = yield call(\r\n toolstringService.getToolStringsForTask,\r\n projectId,\r\n taskId,\r\n );\r\n\r\n yield put(receiveTaskToolstrings(projectId, taskId, toolstrings));\r\n\r\n return toolstrings;\r\n}\r\n\r\nexport function* requestToolstringForTaskAsync(action) {\r\n const { projectId, taskId, toolstringId, isMobilise, stringTestId } = action;\r\n\r\n const toolstring = yield call(\r\n toolstringService.getToolString,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n isMobilise,\r\n stringTestId,\r\n );\r\n yield put(receiveTaskToolstring(projectId, taskId, toolstring));\r\n yield call(requestToolstringSectionsAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n isMobilise,\r\n stringTestId,\r\n });\r\n\r\n return toolstring;\r\n}\r\n\r\nexport function* requestTaskToolstringsPageOnLoadAsync(action) {\r\n const { projectId, taskId } = action;\r\n\r\n yield put(getTaskById(projectId, taskId)); // TODO: convert to saga\r\n const toolstrings = yield call(requestToolstringsForTaskAsync, {\r\n projectId,\r\n taskId,\r\n });\r\n\r\n return toolstrings;\r\n}\r\n\r\nexport function* requestToggleToolstringFavoriteAsync(action) {\r\n const { projectId, taskId, toolstringId } = action;\r\n\r\n const toolstring = yield call(\r\n toolstringService.toggleToolstringFavorite,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n );\r\n\r\n yield put(receiveTaskToolstring(projectId, taskId, toolstring));\r\n\r\n return toolstring;\r\n}\r\n\r\nexport function* requestDuplicateToolstringAndRedirectAsync(action) {\r\n const { projectId, taskId, toolstringId } = action;\r\n\r\n const duplicatedToolstring = yield call(\r\n toolstringService.duplicateToolstring,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n );\r\n\r\n yield put(receiveTaskToolstring(projectId, taskId, duplicatedToolstring));\r\n\r\n yield put(\r\n push(\r\n toTaskToolstring(projectId, taskId, duplicatedToolstring.toolStringId),\r\n ),\r\n );\r\n\r\n return duplicatedToolstring;\r\n}\r\n\r\nexport function* requestDeleteToolstringAndRedirectAsync(action) {\r\n const {\r\n taskId,\r\n projectId,\r\n activeToolstringId,\r\n toolstringId: toolstringIdToDelete,\r\n } = action;\r\n\r\n yield call(\r\n toolstringService.deleteToolString,\r\n projectId,\r\n taskId,\r\n toolstringIdToDelete,\r\n );\r\n\r\n const [firstToolstring] = yield call(requestToolstringsForTaskAsync, {\r\n projectId,\r\n taskId,\r\n });\r\n\r\n if (toolstringIdToDelete.toString() === activeToolstringId.toString()) {\r\n yield put(\r\n push(toTaskToolstring(projectId, taskId, firstToolstring?.toolStringId)),\r\n );\r\n }\r\n}\r\n\r\nexport function* requestCreateToolstringFromTemplateForTaskAsync(action) {\r\n const { projectId, taskId, toolstringTemplateId } = action;\r\n\r\n const createdToolstring = yield call(\r\n toolstringService.createToolstringFromTemplate,\r\n projectId,\r\n taskId,\r\n toolstringTemplateId,\r\n );\r\n\r\n yield put(receiveTaskToolstring(projectId, taskId, createdToolstring));\r\n\r\n yield put(\r\n redirectToTaskToolstringEdit(\r\n projectId,\r\n taskId,\r\n createdToolstring.toolStringId,\r\n ),\r\n );\r\n\r\n return createdToolstring;\r\n}\r\n\r\nexport function* submitCreateToolstringFromTemplateForTaskAsync(action) {\r\n yield put(toggleModal({ modalId: MODAL.CREATE_TOOLSTRING_MODAL_ID }));\r\n yield call(requestCreateToolstringFromTemplateForTaskAsync, action);\r\n}\r\n\r\nexport function* requestCreateToolstringForTaskAsync(action) {\r\n const { projectId, taskId, toolstring } = action;\r\n\r\n const createdToolstring = yield call(\r\n toolstringService.createToolString,\r\n projectId,\r\n taskId,\r\n toolstring,\r\n );\r\n\r\n yield put(receiveTaskToolstring(projectId, taskId, createdToolstring));\r\n\r\n yield put(\r\n redirectToTaskToolstringEdit(\r\n projectId,\r\n taskId,\r\n createdToolstring.toolStringId,\r\n ),\r\n );\r\n\r\n return createdToolstring;\r\n}\r\n\r\nexport function* submitCreateToolstringForTaskAsync(action) {\r\n const { setSubmitting, setStatus } = action;\r\n\r\n try {\r\n yield call(requestCreateToolstringForTaskAsync, action);\r\n yield put(toggleModal({ modalId: MODAL.CREATE_TOOLSTRING_MODAL_ID }));\r\n invokeIfFunction(setStatus, FormikFormStatus.SUCCESS);\r\n } catch (error) {\r\n invokeIfFunction(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n } finally {\r\n invokeIfFunction(setSubmitting, false);\r\n }\r\n}\r\n\r\nexport function* requestUpdateToolstringForTaskAsync(action) {\r\n const { toolstring, toolstringId, projectId, taskId } = action;\r\n\r\n const updatedToolstring = yield call(\r\n toolstringService.updateToolString,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstring,\r\n );\r\n\r\n yield put(receiveTaskToolstring(projectId, taskId, updatedToolstring));\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestUpdateTemplateAsync(action) {\r\n const { toolstring, templateId } = action;\r\n\r\n yield call(toolService.updateTemplate, templateId, toolstring);\r\n\r\n const updatedToolstring = yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestCreateToolstringToolAsync(action) {\r\n const { projectId, taskId, toolstringId, tool } = action;\r\n\r\n const createdToolstringTool = yield call(\r\n toolstringService.createToolstringItem,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n tool,\r\n );\r\n\r\n yield put(\r\n receiveToolstringItem(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n createdToolstringTool,\r\n ),\r\n );\r\n\r\n return createdToolstringTool;\r\n}\r\n\r\nexport function* requestCreateTemplateToolstringToolAsync(action) {\r\n const { toolstringId, tool } = action;\r\n\r\n const createdToolstringTool = yield call(\r\n toolService.createTemplateItem,\r\n toolstringId,\r\n tool,\r\n );\r\n\r\n return createdToolstringTool;\r\n}\r\n\r\nexport function* requestUpdateToolstringItemAsync(action) {\r\n const { projectId, taskId, toolstringId, toolstringItem } = action;\r\n\r\n const updateToolstringItem = yield call(\r\n toolstringItem.type === ToolType.ASSEMBLY_TOOL\r\n ? toolstringService.updateToolstringAssemblyTool\r\n : toolstringService.updateToolstringItem,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n );\r\n\r\n yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return updateToolstringItem;\r\n}\r\n\r\nexport function* requestUpdatePlannedToolstringItemAsync(action) {\r\n const { projectId, taskId, toolstringId, toolstringItem } = action;\r\n\r\n const updateToolstringItem = yield call(\r\n toolstringItem.type === ToolType.ASSEMBLY_TOOL\r\n ? toolstringService.updateToolstringAssemblyTool\r\n : toolstringService.updatePlannedToolstringItem,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n );\r\n\r\n yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return updateToolstringItem;\r\n}\r\n\r\nexport function* requestUpdateNotPlannedToolstringItemAsync(action) {\r\n const { projectId, taskId, toolstringId, toolstringItem } = action;\r\n\r\n const updateToolstringItem = yield call(\r\n toolstringItem.type === ToolType.ASSEMBLY_TOOL\r\n ? toolstringService.updateToolstringNotPlannedAssemblyTool\r\n : toolstringService.updatePlannedToolstringItem,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n );\r\n\r\n yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return updateToolstringItem;\r\n}\r\n\r\nexport function* requestUpdateSerialNumbersFromTaskAsync(action) {\r\n const { projectId, fromTaskId, toTaskId, toToolStringId } = action;\r\n\r\n const updateToolstring = yield call(\r\n taskService.updateSerialNumbersFromTask,\r\n projectId,\r\n fromTaskId,\r\n toTaskId,\r\n toToolStringId,\r\n );\r\n\r\n yield put(receiveTaskToolstring(projectId, toTaskId, updateToolstring));\r\n\r\n yield call(requestToolstringSectionsAsync, {\r\n projectId: projectId,\r\n taskId: toTaskId,\r\n toolstringId: toToolStringId,\r\n });\r\n\r\n return updateToolstring;\r\n}\r\n\r\nexport function* requestDuplicateToolstringItemAsync(action) {\r\n const { projectId, taskId, toolstringId, tool } = action;\r\n\r\n const duplicatedToolstringTool = yield call(\r\n toolstringService.duplicateToolstringItem,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n tool,\r\n );\r\n\r\n yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return duplicatedToolstringTool;\r\n}\r\n\r\nexport function* requestDuplicateTemplateItemAsync(action) {\r\n const { templateId, tool } = action;\r\n\r\n yield call(toolService.duplicateTemplateItem, templateId, tool);\r\n\r\n const updatedToolstring = yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestToggleToolstringItemBreakpointAsync(action) {\r\n const { projectId, taskId, toolstringId, toolstringItemId } = action;\r\n\r\n const updatedToolstringItem = yield call(\r\n toolstringService.toggleToolstringItemBreakpoint,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n );\r\n\r\n yield put(\r\n receiveToolstringItem(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n updatedToolstringItem,\r\n ),\r\n );\r\n\r\n yield call(requestToolstringSectionsAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return updatedToolstringItem;\r\n}\r\n\r\nexport function* requestDeleteToolstringToolAsync(action) {\r\n const { projectId, taskId, toolstringId, toolstringItemId } = action;\r\n\r\n yield call(\r\n toolstringService.deleteToolstringItem,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n );\r\n\r\n const updatedToolstring = yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestDeleteTemplateToolAsync(action) {\r\n const { toolstringItemId, templateId } = action;\r\n\r\n yield call(toolService.deleteTemplateItem, templateId, toolstringItemId);\r\n\r\n const updatedToolstring = yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestDeleteTemplateToolAssemblyToolAsync(action) {\r\n const { toolAssemblyToolId, templateId } = action;\r\n\r\n yield call(\r\n toolService.deleteTemplateToolAssemblyTool,\r\n templateId,\r\n toolAssemblyToolId,\r\n );\r\n\r\n const updatedToolstring = yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestGetTemplateForEditingAsync(action) {\r\n const { templateId } = action;\r\n\r\n const template = yield call(toolService.getTemplate, templateId);\r\n\r\n yield put(receiveBhaTemplateForEditing(template));\r\n\r\n const sections = yield call(requestGetTemplateSectionsForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n yield put(receiveBhaTemplateSectionsForEditing(sections));\r\n\r\n return template;\r\n}\r\n\r\nexport function* requestGetTemplateSectionsForEditingAsync(action) {\r\n const { templateId } = action;\r\n\r\n const sections = yield call(toolService.getTemplateSections, templateId);\r\n\r\n return sections;\r\n}\r\n\r\nexport function* requestDeleteToolstringAssemblyToolAsync(action) {\r\n const {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolAssemblyToolId,\r\n } = action;\r\n\r\n yield call(\r\n toolstringService.deleteToolstringAssemblyTool,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolAssemblyToolId,\r\n );\r\n\r\n const updatedToolstring = yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestSortToolstringToolsAsync(action) {\r\n const { projectId, taskId, toolstringId, sortedTool, affectedTool } = action;\r\n\r\n const sortedToolSequence = sortedTool.get('sequence');\r\n const affectedToolSequence = affectedTool.get('sequence');\r\n const sortedToolstringToolId = sortedTool.get('toolstringItemId');\r\n\r\n const updatedToolstringToolSequences = yield call(\r\n toolstringService.updateToolstringItemSequence,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n sortedToolstringToolId,\r\n {\r\n oldSequenceNumber: sortedToolSequence,\r\n newSequenceNumber: affectedToolSequence,\r\n },\r\n );\r\n\r\n yield put(\r\n receiveToolstringToolsUpdatedSequences(\r\n toolstringId,\r\n updatedToolstringToolSequences,\r\n ),\r\n );\r\n\r\n yield call(requestToolstringSectionsAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return updatedToolstringToolSequences;\r\n}\r\n\r\nexport function* requestSortToolstringAttachmentsAsync(action) {\r\n const {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ownerId,\r\n sortedAttachment,\r\n affectedAttachment,\r\n } = action;\r\n\r\n const toolstringItem = yield call(\r\n toolstringService.updateToolStringAttachmentSequence,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ownerId,\r\n sortedAttachment.get('toolstringItemId'),\r\n {\r\n oldSequenceNumber: sortedAttachment.get('sequence'),\r\n newSequenceNumber: affectedAttachment.get('sequence'),\r\n },\r\n );\r\n\r\n yield put(\r\n receiveToolstringItem(projectId, taskId, toolstringId, toolstringItem),\r\n );\r\n\r\n yield call(requestToolstringSectionsAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return toolstringItem;\r\n}\r\n\r\nexport function* requestSortTemplateToolsAsync(action) {\r\n const { templateId, sortedTool, affectedTool } = action;\r\n\r\n const sortedToolSequence = sortedTool.get('sequence');\r\n const affectedToolSequence = affectedTool.get('sequence');\r\n const sortedToolstringToolId = sortedTool.get('toolstringItemId');\r\n\r\n yield call(\r\n toolService.updateTemplateItemSequence,\r\n templateId,\r\n sortedToolstringToolId,\r\n {\r\n oldSequenceNumber: sortedToolSequence,\r\n newSequenceNumber: affectedToolSequence,\r\n },\r\n );\r\n\r\n const updatedToolstring = yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestSortToolstringAssemblyToolsAsync(action) {\r\n const {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n } = action;\r\n\r\n const sortedToolSequence = sortedToolstringAssemblyTool.get('sequence');\r\n const affectedToolSequence = affectedToolstringAssemblyTool.get('sequence');\r\n\r\n const sortedToolAssemblyToolId =\r\n sortedToolstringAssemblyTool.get('toolAssemblyToolId');\r\n\r\n const toolstringItem = yield call(\r\n toolstringService.updateToolstringAssemblyToolSequence,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n sortedToolAssemblyToolId,\r\n {\r\n oldSequenceNumber: sortedToolSequence,\r\n newSequenceNumber: affectedToolSequence,\r\n },\r\n );\r\n\r\n yield put(\r\n receiveToolstringItem(projectId, taskId, toolstringId, toolstringItem),\r\n );\r\n\r\n yield call(requestToolstringSectionsAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n\r\n return toolstringItem;\r\n}\r\n\r\nexport function* requestSortTemplateAssemblyToolsAsync(action) {\r\n const {\r\n templateId,\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n } = action;\r\n\r\n const sortedToolSequence = sortedToolstringAssemblyTool.get('sequence');\r\n const affectedToolSequence = affectedToolstringAssemblyTool.get('sequence');\r\n\r\n const sortedToolAssemblyToolId =\r\n sortedToolstringAssemblyTool.get('toolAssemblyToolId');\r\n\r\n yield call(\r\n toolService.updateTemplateAssemblyToolSequence,\r\n templateId,\r\n sortedToolAssemblyToolId,\r\n {\r\n oldSequenceNumber: sortedToolSequence,\r\n newSequenceNumber: affectedToolSequence,\r\n },\r\n );\r\n\r\n const updatedToolstring = yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestCreateToolstringAssemblyToolAsync(action) {\r\n const { tool, projectId, taskId, toolstringId, toolstringItemId } = action;\r\n\r\n const toolstringAssemblyTool = yield call(\r\n toolstringService.createToolstringAssemblyTool,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n tool,\r\n );\r\n\r\n yield put(\r\n receiveToolstringAssemblyTool(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n toolstringAssemblyTool,\r\n ),\r\n );\r\n\r\n return toolstringAssemblyTool;\r\n}\r\n\r\nexport function* requestToolstringSectionsAsync(action) {\r\n const { projectId, taskId, toolstringId, isMobilise, stringTestId } = action;\r\n\r\n const sections = yield call(\r\n toolstringService.getToolstringSections,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n isMobilise,\r\n stringTestId,\r\n );\r\n yield put(\r\n receiveTaskToolstringSections(projectId, taskId, toolstringId, sections),\r\n );\r\n\r\n return sections;\r\n}\r\n\r\nexport function* requestToolstringTemplatesAsync() {\r\n const templates = yield call(toolstringService.getAllToolstringTemplates);\r\n\r\n yield put(receiveToolstringTemplates(templates));\r\n\r\n return templates;\r\n}\r\n\r\nexport function* requestCreateToolAttachment(action) {\r\n const { projectId, taskId, toolstringId, owner, tool } = action;\r\n\r\n return yield call(\r\n toolstringService.createToolAttachment,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n owner,\r\n tool,\r\n );\r\n}\r\n\r\nexport function* requestDeleteToolstringAttachmentAsync(action) {\r\n const { projectId, taskId, toolstringId, toolstringItemId, ownerId } = action;\r\n\r\n yield call(\r\n toolstringService.deleteToolstringAttachment,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ownerId,\r\n toolstringItemId,\r\n );\r\n\r\n return yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n });\r\n}\r\n\r\nexport function* requestCreateToolstringTemplateAttachment(action) {\r\n const { toolstringId, owner, tool } = action;\r\n\r\n return yield call(\r\n toolstringService.createToolstringTemplateAttachment,\r\n toolstringId,\r\n owner,\r\n tool,\r\n );\r\n}\r\n\r\nexport function* requestDeleteToolstringTemplateAttachmentAsync(action) {\r\n const { toolstringId, ownerId, toolstringItemId } = action;\r\n\r\n const templateId = toolstringId;\r\n\r\n yield call(\r\n toolstringService.deleteToolstringTemplateAttachment,\r\n toolstringId,\r\n ownerId,\r\n toolstringItemId,\r\n );\r\n\r\n const updatedToolstring = yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return updatedToolstring;\r\n}\r\n\r\nexport function* requestSortToolstringTemplateAttachmentsAsync(action) {\r\n const { toolstringId, ownerId, sortedAttachment, affectedAttachment } =\r\n action;\r\n\r\n const templateId = toolstringId;\r\n\r\n const toolstringItem = yield call(\r\n toolstringService.updateToolStringTemplateAttachmentSequence,\r\n toolstringId,\r\n ownerId,\r\n sortedAttachment.get('toolstringItemId'),\r\n {\r\n oldSequenceNumber: sortedAttachment.get('sequence'),\r\n newSequenceNumber: affectedAttachment.get('sequence'),\r\n },\r\n );\r\n\r\n yield call(requestGetTemplateForEditingAsync, {\r\n templateId,\r\n });\r\n\r\n return toolstringItem;\r\n}\r\n\r\nexport function* requestUpdateToolStringToolStatus(action) {\r\n const { projectId, taskId, toolstringId, toolstringItemId, status } = action;\r\n\r\n return yield call(\r\n toolstringService.updateToolStringToolStatus,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n status,\r\n );\r\n}\r\n\r\nfunction* requestRedirectToBhaEdit(action) {\r\n const { projectId, taskId, toolstringId } = action;\r\n const simulations = yield call(\r\n simulationService.getSimulationsForTask,\r\n projectId,\r\n taskId,\r\n [SimulationState.PLANNED],\r\n );\r\n for (const currentSimulation of simulations) {\r\n yield call(\r\n simulationService.toggleSimulationPlanned,\r\n projectId,\r\n taskId,\r\n currentSimulation.simulationId,\r\n );\r\n }\r\n\r\n yield put(\r\n push(`/projects/${projectId}/plan/${taskId}/bha/${toolstringId}/edit`),\r\n );\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRINGS_FOR_TASK,\r\n callAsync,\r\n requestToolstringsForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n callAsync,\r\n requestToolstringForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_TASK_TOOLSTRINGS_PAGE_ON_LOAD,\r\n callAsync,\r\n requestTaskToolstringsPageOnLoadAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_DUPLICATE_TOOLSTRING_FOR_TASK_AND_REDIRECT,\r\n callAsync,\r\n requestDuplicateToolstringAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_FOR_TASK_AND_REDIRECT,\r\n callAsync,\r\n requestDeleteToolstringAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_TOGGLE_TOOLSTRING_FAVORITE,\r\n callAsync,\r\n requestToggleToolstringFavoriteAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_CREATE_TOOLSTRING_FOR_TASK,\r\n callAsync,\r\n requestCreateToolstringForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.SUBMIT_CREATE_TOOLSTRING_FOR_TASK,\r\n callAsync,\r\n submitCreateToolstringForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_CREATE_TOOLSTRING_FOR_TASK_FROM_TEMPLATE,\r\n callAsync,\r\n requestCreateToolstringFromTemplateForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.SUBMIT_CREATE_TOOLSTRING_FROM_TEMPLATE_FOR_TASK,\r\n callAsync,\r\n submitCreateToolstringFromTemplateForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_UPDATE_TOOLSTRING_FOR_TASK,\r\n callAsync,\r\n requestUpdateToolstringForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.REQUEST_UPDATE_TEMPLATE_FOR_EDITING,\r\n callAsync,\r\n requestUpdateTemplateAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_CREATE_TOOLSTRING_TOOL,\r\n callAsync,\r\n requestCreateToolstringToolAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.CREATE_TEMPLATE_TOOL,\r\n callAsync,\r\n requestCreateTemplateToolstringToolAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.REQUEST_BHA_TEMPLATE_FOR_EDITING,\r\n callAsync,\r\n requestGetTemplateForEditingAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.REQUEST_BHA_TEMPLATE_SECTIONS_FOR_EDITING,\r\n callAsync,\r\n requestGetTemplateSectionsForEditingAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_UPDATE_TOOLSTRING_ITEM,\r\n callAsync,\r\n requestUpdateToolstringItemAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_UPDATE_PLANNED_TOOLSTRING_ITEM,\r\n callAsync,\r\n requestUpdatePlannedToolstringItemAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_UPDATE_NOT_PLANNED_TOOLSTRING_ITEM,\r\n callAsync,\r\n requestUpdateNotPlannedToolstringItemAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_UPDATE_SERIAL_NUMBERS_FROM_TASK,\r\n callAsync,\r\n requestUpdateSerialNumbersFromTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_DUPLICATE_TOOLSTRING_ITEM,\r\n callAsync,\r\n requestDuplicateToolstringItemAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.REQUEST_DUPLICATE_TEMPLATE_ITEM,\r\n callAsync,\r\n requestDuplicateTemplateItemAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ITEM,\r\n callAsync,\r\n requestDeleteToolstringToolAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.DELETE_TEMPLATE_TOOL,\r\n callAsync,\r\n requestDeleteTemplateToolAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.DELETE_TEMPLATE_TOOLASSEMBLY_TOOL,\r\n callAsync,\r\n requestDeleteTemplateToolAssemblyToolAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TOOLS,\r\n callAsync,\r\n requestSortToolstringToolsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_ATTACHMENTS,\r\n callAsync,\r\n requestSortToolstringAttachmentsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.REQUEST_SORT_TEMPLATE_TOOLS,\r\n callAsync,\r\n requestSortTemplateToolsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_TOGGLE_TOOLSTRING_ITEM_BREAKPOINT,\r\n callAsync,\r\n requestToggleToolstringItemBreakpointAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_ASSEMBLY_TOOLS,\r\n callAsync,\r\n requestSortToolstringAssemblyToolsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n EQUIPMENT_ACTIONS.REQUEST_SORT_TEMPLATE_ASSEMBLY_TOOLS,\r\n callAsync,\r\n requestSortTemplateAssemblyToolsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_SECTIONS,\r\n callAsync,\r\n requestToolstringSectionsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_CREATE_TOOLSTRING_ASSEMBLY_TOOL,\r\n callAsync,\r\n requestCreateToolstringAssemblyToolAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ASSEMBLY_TOOL,\r\n callAsync,\r\n requestDeleteToolstringAssemblyToolAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_TEMPLATES,\r\n callAsync,\r\n requestToolstringTemplatesAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_ATTACH_TOOL,\r\n callAsync,\r\n requestCreateToolAttachment,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ATTACHMENT,\r\n callAsync,\r\n requestDeleteToolstringAttachmentAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.UDPATE_TOOLSTRING_TOOL_STATUS,\r\n callAsync,\r\n requestUpdateToolStringToolStatus,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_ATTACH_TOOL_TO_TEMPLATE,\r\n callAsync,\r\n requestCreateToolstringTemplateAttachment,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_TEMPLATE_ATTACHMENT,\r\n callAsync,\r\n requestDeleteToolstringTemplateAttachmentAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TEMPLATE_ATTACHMENTS,\r\n callAsync,\r\n requestSortToolstringTemplateAttachmentsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n TOOLSTRING_ACTIONS.REQUEST_REDIRECT_TO_BHA_EDIT,\r\n callAsync,\r\n requestRedirectToBhaEdit,\r\n );\r\n}\r\n","import _isNil from 'lodash/isNil';\r\nimport { call, takeEvery, put, all } from 'redux-saga/effects';\r\nimport { replace, push } from 'connected-react-router/immutable';\r\n\r\nimport { toggleModal } from 'altus-modal';\r\n\r\nimport {\r\n deleteSimulation,\r\n receiveSimulation,\r\n deleteSimulationFluid,\r\n receiveSimulationFluids,\r\n receiveSimulationResults,\r\n receiveSimulationsForTask,\r\n deleteSimulationResults,\r\n deleteSimulationFluids,\r\n} from 'features/projects/tasks/task/simulation/simulation.actions';\r\n\r\nimport {\r\n receiveWellboreSection,\r\n receiveWellboreSections,\r\n} from 'features/wells/sections/wellboreSection.actions';\r\n\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport simulationService from 'services/simulation.service';\r\nimport { toExecutionSimulation, toTaskSimulation } from 'utils/route.util';\r\nimport { MODAL } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { requestToolstringsForTaskAsync } from 'features/projects/tasks/task/toolstring/toolstring.sagas';\r\n\r\nexport function* requestSimulationAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulation = yield call(\r\n simulationService.getSimulation,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulation(simulation));\r\n\r\n return simulation;\r\n}\r\n\r\nexport function* requestToggleSimulationFavoriteAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulation = yield call(\r\n simulationService.toggleSimulationFavorite,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulation(simulation));\r\n\r\n return simulation;\r\n}\r\n\r\nexport function* requestToggleSimulationPlannedAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulation = yield call(\r\n simulationService.toggleSimulationPlanned,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulation(simulation));\r\n\r\n return simulation;\r\n}\r\n\r\nexport function* submitCreateSimulationAndRedirectAsync(action) {\r\n const { projectId, taskId, simulation, setStatus, setSubmitting } = action;\r\n\r\n try {\r\n const createdSimulation = yield call(\r\n simulationService.createSimulation,\r\n projectId,\r\n taskId,\r\n simulation,\r\n );\r\n\r\n yield put(receiveSimulation(createdSimulation));\r\n\r\n yield put(\r\n push(toTaskSimulation(projectId, taskId, createdSimulation.simulationId)),\r\n );\r\n\r\n yield put(toggleModal({ modalId: MODAL.CREATE_SIMULATION_MODAL }));\r\n\r\n invokeIfFunction(setStatus, FormikFormStatus.SUCCESS);\r\n return createdSimulation;\r\n } catch (error) {\r\n invokeIfFunction(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n } finally {\r\n invokeIfFunction(setSubmitting, false);\r\n }\r\n}\r\n\r\nexport function* requestUpdateSimulationAsync(action) {\r\n const { projectId, taskId, simulationId, simulation, resetResults } = action;\r\n\r\n const updatedSimulation = yield call(\r\n simulationService.updateSimulation,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulation,\r\n );\r\n\r\n if (resetResults) {\r\n yield put(deleteSimulationResults(projectId, taskId, simulationId));\r\n yield put(deleteSimulationFluids(projectId, taskId, simulationId));\r\n }\r\n\r\n yield put(receiveSimulation(updatedSimulation));\r\n\r\n return updatedSimulation;\r\n}\r\n\r\nexport function* requestDuplicateSimulationAndRedirectAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulation = yield call(\r\n simulationService.duplicateSimulation,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulation(simulation));\r\n\r\n yield put(push(toTaskSimulation(projectId, taskId, simulation.simulationId)));\r\n\r\n return simulation;\r\n}\r\n\r\nexport function* requestCreateUpdatedPlannedSimulationAndRedirectAsync(action) {\r\n const { projectId, taskId } = action;\r\n\r\n const simulation = yield call(\r\n simulationService.createUpdatedPlannedSimulation,\r\n projectId,\r\n taskId,\r\n );\r\n\r\n yield put(receiveSimulation(simulation));\r\n\r\n yield put(\r\n push(\r\n toExecutionSimulation(\r\n projectId,\r\n taskId,\r\n simulation.simulationId,\r\n 'sections',\r\n ),\r\n ),\r\n );\r\n\r\n return simulation;\r\n}\r\n\r\nexport function* requestDeleteSimulationAndRedirectAsync(action) {\r\n const { taskId, projectId, simulationId, redirect = null } = action;\r\n\r\n yield call(\r\n simulationService.deleteSimulation,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(deleteSimulation(simulationId));\r\n\r\n if (redirect) {\r\n yield put(replace(redirect));\r\n }\r\n}\r\n\r\nexport function* requestSimulationsForTaskAsync(action) {\r\n const { projectId, taskId, states } = action;\r\n const simulations = yield call(\r\n simulationService.getSimulationsForTask,\r\n projectId,\r\n taskId,\r\n states,\r\n );\r\n\r\n yield put(receiveSimulationsForTask(simulations));\r\n\r\n return simulations;\r\n}\r\n\r\nexport function* requestRunSimulationAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const response = yield call(\r\n simulationService.runSimulation,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulationResults(response));\r\n\r\n // Get the updated simulation state after executing the simulator\r\n yield call(requestSimulationAsync, action);\r\n\r\n return response.payload;\r\n}\r\n\r\nexport function* requestSimulationResultsAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulationResults = yield call(\r\n simulationService.getSimulationResults,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulationResults(simulationResults));\r\n\r\n return simulationResults;\r\n}\r\n\r\nexport function* loadSimulationsAsync(action) {\r\n yield all([\r\n call(requestSimulationsForTaskAsync, action),\r\n call(requestToolstringsForTaskAsync, action),\r\n ]);\r\n}\r\n\r\nexport function* loadSimulationAsync(action) {\r\n yield all([\r\n call(requestSimulationAsync, action),\r\n call(requestSimulationResultsAsync, action),\r\n ]);\r\n}\r\n\r\nexport function* requestWellboreSectionsForSimulationAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulationWellboreSections = yield call(\r\n simulationService.getWellboreSectionsForSimulation,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveWellboreSections(simulationWellboreSections));\r\n\r\n return simulationWellboreSections;\r\n}\r\n\r\nexport function* requestUpdateWellboreSectionForSimulationAsync(action) {\r\n const {\r\n projectId,\r\n taskId,\r\n simulationId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n } = action;\r\n\r\n const updatedWellboreSection = yield call(\r\n simulationService.updateSimulationWellboreSection,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n );\r\n\r\n yield call(requestSimulationAsync, action);\r\n\r\n yield put(receiveWellboreSection(updatedWellboreSection));\r\n\r\n return updatedWellboreSection;\r\n}\r\n\r\nexport function* requestSimulationFluidsAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulationFluids = yield call(\r\n simulationService.getSimulationFluids,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulationFluids(simulationFluids));\r\n\r\n return simulationFluids;\r\n}\r\n\r\nexport function* requestCreateSimulationFluidAndRedirectAsync(action) {\r\n const {\r\n taskId,\r\n payload,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n onRedirect,\r\n } = action;\r\n\r\n try {\r\n const simulationFluid = yield call(\r\n simulationService.createSimulationFluid,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n payload,\r\n );\r\n\r\n // refresh fluids to get correct order\r\n yield call(requestSimulationFluidsAsync, action);\r\n\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n\r\n if (!_isNil(onRedirect)) {\r\n yield put(push(onRedirect(simulationFluid.simulationFluidId)));\r\n }\r\n\r\n yield call(requestSimulationAsync, action);\r\n\r\n return simulationFluid;\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestUpdateSimulationFluidAsync(action) {\r\n const {\r\n taskId,\r\n payload,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n simulationFluidId,\r\n } = action;\r\n\r\n try {\r\n const simulationFluid = yield call(\r\n simulationService.updateSimulationFluid,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n payload,\r\n );\r\n\r\n // refresh fluids to get correct order\r\n yield call(requestSimulationFluidsAsync, action);\r\n\r\n yield call(requestSimulationAsync, action);\r\n\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n\r\n return simulationFluid;\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestDeleteSimulationFluidAsync(action) {\r\n const { taskId, projectId, simulationId, simulationFluidId, onRedirect } =\r\n action;\r\n\r\n yield call(\r\n simulationService.deleteSimulationFluid,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n );\r\n\r\n if (!_isNil(onRedirect)) {\r\n yield put(replace(onRedirect()));\r\n }\r\n\r\n yield call(requestSimulationAsync, action);\r\n\r\n yield put(deleteSimulationFluid(simulationFluidId));\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n ACTIONS.REQUEST_SIMULATION,\r\n callAsync,\r\n requestSimulationAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_TOGGLE_SIMULATION_FAVORITE,\r\n callAsync,\r\n requestToggleSimulationFavoriteAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_TOGGLE_SIMULATION_PLANNED,\r\n callAsync,\r\n requestToggleSimulationPlannedAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_SIMULATIONS_FOR_TASK,\r\n callAsync,\r\n requestSimulationsForTaskAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_SIMULATION_RESULTS,\r\n callAsync,\r\n requestSimulationResultsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_DELETE_SIMULATION,\r\n callAsync,\r\n requestDeleteSimulationAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.SUBMIT_CREATE_SIMULATION,\r\n callAsync,\r\n submitCreateSimulationAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_SIMULATION,\r\n callAsync,\r\n requestUpdateSimulationAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_DUPLICATE_SIMULATION,\r\n callAsync,\r\n requestDuplicateSimulationAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_CREATE_UPDATE_PLANNED_SIMULATION,\r\n callAsync,\r\n requestCreateUpdatedPlannedSimulationAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(ACTIONS.LOAD_SIMULATIONS, callAsync, loadSimulationsAsync);\r\n\r\n yield takeEvery(ACTIONS.LOAD_SIMULATION, callAsync, loadSimulationAsync);\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_SIMULATION_WELLBORE_SECTIONS,\r\n callAsync,\r\n requestWellboreSectionsForSimulationAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_SIMULATION_WELLBORE_SECTION,\r\n callAsync,\r\n requestUpdateWellboreSectionForSimulationAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_RUN_SIMULATION,\r\n callAsync,\r\n requestRunSimulationAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_SIMULATION_FLUIDS,\r\n callAsync,\r\n requestSimulationFluidsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_CREATE_SIMULATION_FLUID,\r\n callAsync,\r\n requestCreateSimulationFluidAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_SIMULATION_FLUID,\r\n callAsync,\r\n requestUpdateSimulationFluidAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_DELETE_SIMULATION_FLUID,\r\n callAsync,\r\n requestDeleteSimulationFluidAsync,\r\n );\r\n}\r\n","export const ADD_PROJECT_WELL_DETAILS_ADDITIONAL_PARAMETERS_MODAL_ID =\r\n 'ADD_PROJECT_WELL_DETAILS_ADDITIONAL_PARAMETERS_MODAL_ID';\r\nexport const PROJECT_WELLBORE_DETAIL_CHANGELOG_MODAL_ID =\r\n 'PROJECT_WELLBORE_DETAIL_CHANGELOG_MODAL_ID';\r\n\r\nexport const WELLBORE_DETAIL_FORM = {\r\n WELLBORE_DETAIL_ID: 'wellboreDetailId',\r\n WELLBORE_NAME: 'wellboreName',\r\n WELLBORE_CONTENT: 'wellboreContent',\r\n WELLBORE_PURPOSE: 'wellborePurpose',\r\n KELLY_BUSHING_ELEVATION: 'kellyBushingElevation',\r\n\r\n // Well Information\r\n COMPLETION_TYPE: 'completionType',\r\n COMPLETION_SIZE: 'completionSize',\r\n DOWN_HOLE_SAFETY_VALVE_DEPTH: 'downHoleSafetyValveDepth',\r\n CORROSION_SCALE_BSS: 'corrosionScaleBSS',\r\n WELL_INFORMATION_COMMENTS: 'wellInformationComments',\r\n\r\n // Well Area\r\n TOTAL_LUBRICATOR_ABOVE_SPLIT_POINT: 'totalLubricatorAboveSplitPoint',\r\n TOTAL_RISER_BELOW_SPLIT_POINT: 'totalRiserBelowSplitPoint',\r\n TOTAL_AVAILABLE_BHA_LENGTH: 'totalAvailableBhaLength',\r\n WELL_AREA_COMMENTS: 'wellAreaComments',\r\n\r\n // Operation Details\r\n MAX_WORKING_DEPTH: 'maximumWorkingDepth',\r\n MAX_INCLINATION: 'maximumInclination',\r\n MAX_INCLINATION_DEPTH: 'maximumInclinationDepth',\r\n MAX_DOGLEG: 'maximumDogLeg',\r\n MAX_DOGLEG_DEPTH: 'maximumDogLegDepth',\r\n MIN_INNER_DIAMETER: 'minimumInnerDiameter',\r\n MIN_INNER_DIAMETER_DEPTH: 'minimumInnerDiameterDepth',\r\n MAX_INNER_DIAMETER: 'maximumInnerDiameter',\r\n MAX_INNER_DIAMETER_DEPTH: 'maximumInnerDiameterDepth',\r\n OPERATION_DETAILS_COMMENTS: 'operationDetailsComments',\r\n\r\n // Well Properties\r\n MAX_RESERVOIR_PRESSURE: 'maxReservoirPressure',\r\n RESERVOIR_TEMPERATURE: 'reservoirTemperature',\r\n FLUID_TYPE: 'fluidType',\r\n FLUID_DENSITY: 'fluidDensity',\r\n SHUT_IN_WELLHEAD_PRESSURE: 'shutInWellheadPressure',\r\n WELLHEAD_PRESSURE: 'wellheadPressure',\r\n FRICTION: 'friction',\r\n FLOWING_WELLHEAD_PRESSURE: 'flowingWellheadPressure',\r\n WELL_PROPERTIES_COMMENTS: 'wellPropertiesComments',\r\n SURFACE_TEMPERATURE: 'surfaceTemperature',\r\n RESERVOIR_DEPTH: 'reservoirDepth',\r\n\r\n // Hostile Fluids\r\n HOSTILE_FLUIDS_COMMENTS: 'hostileFluidsComments',\r\n};\r\n\r\nexport const ACTIONS = {\r\n CLEAR_PROJECT_WELLBORE_DETAILS: 'CLEAR_PROJECT_WELLBORE_DETAILS',\r\n CREATE_PROJECT_WELLBORE_DETAIL_DRAFT: 'CREATE_PROJECT_WELLBORE_DETAIL_DRAFT',\r\n CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT:\r\n 'CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT',\r\n CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT_AND_SYNC:\r\n 'CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT_AND_SYNC',\r\n REQUEST_PROJECT_WELLBORE_DETAIL_DRAFT_APPROVAL:\r\n 'REQUEST_PROJECT_WELLBORE_DETAIL_DRAFT_APPROVAL',\r\n APPROVE_PROJECT_WELLBORE_DETAIL_DRAFT:\r\n 'APPROVE_PROJECT_WELLBORE_DETAIL_DRAFT',\r\n CANCEL_PROJECT_WELLBORE_DETAIL_DRAFT: 'CANCEL_PROJECT_WELLBORE_DETAIL_DRAFT',\r\n EDIT_PROJECT_WELLBORE_DETAIL_DRAFT: 'EDIT_PROJECT_WELLBORE_DETAIL_DRAFT',\r\n SUBMIT_PROJECT_WELLBORE_DETAIL_FORM: 'SUBMIT_PROJECT_WELLBORE_DETAIL_FORM',\r\n\r\n GET_PROJECT_WELLBORE_DETAIL_CHANGE_LOG:\r\n 'GET_PROJECT_WELLBORE_DETAIL_CHANGE_LOG',\r\n\r\n DELETE_PROJECT_WELLBORE_DETAIL: 'DELETE_PROJECT_WELLBORE_DETAIL',\r\n REQUEST_PROJECT_WELLBORE_DETAIL: 'REQUEST_PROJECT_WELLBORE_DETAIL',\r\n RECEIVE_PROJECT_WELLBORE_DETAIL: 'RECEIVE_PROJECT_WELLBORE_DETAIL',\r\n\r\n REQUEST_PROJECT_WELLBORE_DETAILS: 'REQUEST_PROJECT_WELLBORE_DETAILS',\r\n RECEIVE_PROJECT_WELLBORE_DETAILS: 'RECEIVE_PROJECT_WELLBORE_DETAILS',\r\n\r\n REQUEST_ADD_HOSTILE_FLUIDS_TO_PROJECT_WELLBORE_DETAIL:\r\n 'REQUEST_ADD_HOSTILE_FLUIDS_TO_PROJECT_WELLBORE_DETAIL',\r\n REQUEST_REMOVE_HOSTILE_FLUIDS_FROM_PROJECT_WELLBORE_DETAIL:\r\n 'REQUEST_REMOVE_HOSTILE_FLUIDS_FROM_PROJECT_WELLBORE_DETAIL',\r\n REQUEST_ADD_PROJECT_WELLBORE_DETAIL_SERVICES:\r\n 'REQUEST_ADD_PROJECT_WELLBORE_DETAIL_SERVICES',\r\n REQUEST_REMOVE_PROJECT_WELLBORE_DETAIL_SERVICE:\r\n 'REQUEST_REMOVE_PROJECT_WELLBORE_DETAIL_SERVICE',\r\n\r\n REQUEST_LATEST_PROJECT_WELLBORE_DETAIL:\r\n 'REQUEST_LATEST_PROJECT_WELLBORE_DETAIL',\r\n\r\n LOAD_PROJECT_WELLBORE_DETAIL_PAGE: 'LOAD_PROJECT_WELLBORE_DETAIL_PAGE',\r\n LOAD_PROJECT_WELLBORE_DETAILS_PAGE: 'LOAD_PROJECT_WELLBORE_DETAILS_PAGE',\r\n SYNC_PROJECT_WELLBORE_DETAILS_WITH_LATEST:\r\n 'SYNC_PROJECT_WELLBORE_DETAILS_WITH_LATEST',\r\n SET_ACTIVE_WELLBOREDETAILSID: 'SET_ACTIVE_WELLBOREDETAILSID',\r\n};\r\n","import { replace } from 'connected-react-router/immutable';\r\n\r\nimport { toProjectWellboreDetail } from 'utils/route.util';\r\nimport { ACTIONS } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\n\r\nexport const redirectToProjectWellboreDetail = ({\r\n projectId,\r\n projectWellboreDetailId,\r\n}) => replace(toProjectWellboreDetail(projectId, projectWellboreDetailId));\r\n\r\nexport const createAndRedirectProjectWellboreDetailDraft = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n confirmationDialog: {\r\n title: 'Create new draft',\r\n confirmButtonText: 'Create',\r\n description: 'Are you sure you want to create a new draft?',\r\n },\r\n notification: {\r\n success: 'Draft created successfully',\r\n },\r\n});\r\n\r\nexport const createAndRedirectProjectWellboreDetailDraftAndSync = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT_AND_SYNC,\r\n confirmationDialog: {\r\n title: 'Create new draft and sync',\r\n confirmButtonText: 'Create',\r\n description: 'Are you sure you want to create a new draft?',\r\n },\r\n notification: {\r\n success: 'Draft created successfully',\r\n },\r\n});\r\n\r\nexport const approveProjectWellboreDetailDraft = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.APPROVE_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n notification: {\r\n success: 'Draft approved successfully',\r\n },\r\n});\r\n\r\nexport const cancelProjectWellboreDetailDraft = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.CANCEL_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n confirmationDialog: {\r\n title: 'Cancel draft',\r\n confirmButtonText: 'Cancel draft',\r\n description:\r\n 'Are you sure you want to cancel this draft? Any changes will be lost',\r\n },\r\n notification: {\r\n success: 'Draft cancelled successfully',\r\n },\r\n});\r\n\r\nexport const requestProjectWellboreDetailDraftApproval = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.REQUEST_PROJECT_WELLBORE_DETAIL_DRAFT_APPROVAL,\r\n confirmationDialog: {\r\n confirmButtonText: 'Send for approval',\r\n title: 'Send for approval',\r\n description:\r\n 'Are you sure? It cannot be cancelled after being sent for approval',\r\n },\r\n});\r\n\r\nexport const editProjectWellboreDetailDraft = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.EDIT_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n});\r\n\r\nexport const submitProjectWellboreDetailForm = (\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetail,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: wellboreDetail,\r\n type: ACTIONS.SUBMIT_PROJECT_WELLBORE_DETAIL_FORM,\r\n setSubmitting,\r\n setStatus,\r\n notification: {\r\n info: 'Saving',\r\n success: 'Well details successfully saved',\r\n },\r\n});\r\n\r\nexport const requestProjectWellboreDetail = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.REQUEST_PROJECT_WELLBORE_DETAIL,\r\n});\r\n\r\nexport const receiveProjectWellboreDetail = (projectWellboreDetail) => ({\r\n payload: projectWellboreDetail,\r\n type: ACTIONS.RECEIVE_PROJECT_WELLBORE_DETAIL,\r\n});\r\n\r\nexport const setActiveWellboredetailId = (wellboreDetailId) => ({\r\n payload: wellboreDetailId,\r\n type: ACTIONS.SET_ACTIVE_WELLBOREDETAILSID,\r\n});\r\n\r\nexport const deleteProjectWellboreDetail = (projectWellboreDetailId) => ({\r\n projectWellboreDetailId,\r\n type: ACTIONS.DELETE_PROJECT_WELLBORE_DETAIL,\r\n});\r\n\r\nexport const requestProjectWellboreDetails = (projectId) => ({\r\n projectId,\r\n type: ACTIONS.REQUEST_PROJECT_WELLBORE_DETAILS,\r\n});\r\n\r\nexport const receiveProjectWellboreDetails = (projectWellboreDetails) => ({\r\n payload: projectWellboreDetails,\r\n type: ACTIONS.RECEIVE_PROJECT_WELLBORE_DETAILS,\r\n});\r\n\r\nexport const requestAddHostileFluidsToProjectWellboreDetail = (\r\n projectId,\r\n projectWellboreDetailId,\r\n hostileFluidsToAdd,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: hostileFluidsToAdd,\r\n type: ACTIONS.REQUEST_ADD_HOSTILE_FLUIDS_TO_PROJECT_WELLBORE_DETAIL,\r\n notification: {\r\n success: 'Hostile fluid(s) added successfully',\r\n },\r\n});\r\n\r\nexport const requestRemoveHostileFluidsFromProjectWellboreDetail = (\r\n projectId,\r\n projectWellboreDetailId,\r\n hostileFluidsToRemove,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: hostileFluidsToRemove,\r\n type: ACTIONS.REQUEST_REMOVE_HOSTILE_FLUIDS_FROM_PROJECT_WELLBORE_DETAIL,\r\n notification: {\r\n success: 'Hostile fluid removed successfully',\r\n },\r\n confirmationDialog: {\r\n confirmButtonText: 'Remove',\r\n title: 'Remove hostile fluid',\r\n description: 'Are you sure you want to remove this?',\r\n },\r\n});\r\n\r\nexport const clearProjectWellboreDetails = () => ({\r\n type: ACTIONS.CLEAR_PROJECT_WELLBORE_DETAILS,\r\n});\r\n\r\nexport const requestLatestProjectWellboreDetail = (projectId) => ({\r\n projectId,\r\n type: ACTIONS.REQUEST_LATEST_PROJECT_WELLBORE_DETAIL,\r\n});\r\n\r\nexport const getProjectWellboreDetailChangelog = (projectId) => ({\r\n projectId,\r\n type: ACTIONS.GET_PROJECT_WELLBORE_DETAIL_CHANGE_LOG,\r\n});\r\n\r\nexport const loadProjectWellboreDetailPage = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.LOAD_PROJECT_WELLBORE_DETAIL_PAGE,\r\n});\r\n\r\nexport const loadProjectWellboreDetailsPage = (projectId) => ({\r\n projectId,\r\n type: ACTIONS.LOAD_PROJECT_WELLBORE_DETAILS_PAGE,\r\n});\r\n\r\nexport const requestAddProjectWellboreDetailServices = (\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetailServiceTypes,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: wellboreDetailServiceTypes,\r\n type: ACTIONS.REQUEST_ADD_PROJECT_WELLBORE_DETAIL_SERVICES,\r\n notification: {\r\n success: 'Service(s) added successfully',\r\n },\r\n});\r\n\r\nexport const requestDeleteProjectWellboreDetailService = (\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetailServiceId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: wellboreDetailServiceId,\r\n type: ACTIONS.REQUEST_REMOVE_PROJECT_WELLBORE_DETAIL_SERVICE,\r\n notification: {\r\n success: 'Service removed successfully',\r\n },\r\n confirmationDialog: {\r\n confirmButtonText: 'Remove',\r\n title: 'Remove service',\r\n description: 'Are you sure you want to remove this?',\r\n },\r\n});\r\n\r\nexport const requestSyncProjectWellboreDetailsWithLatest = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.SYNC_PROJECT_WELLBORE_DETAILS_WITH_LATEST,\r\n notification: {\r\n success: 'Well details synced successfully',\r\n },\r\n});\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getProjectWellboreDetails = (projectId) =>\r\n Agent.get(`/project/${projectId}/wellbore/details`);\r\n\r\nconst getProjectWellboreDetail = (projectId, projectWellboreDetailId) =>\r\n Agent.get(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}`,\r\n );\r\n\r\nconst getLatestProjectWellboreDetail = (projectId) =>\r\n Agent.get(`/project/${projectId}/wellbore/details/latest`);\r\n\r\nconst approveDraft = (projectId, projectWellboreDetailId) =>\r\n Agent.put(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}/approve`,\r\n );\r\n\r\nconst requestApproval = (projectId, projectWellboreDetailId) =>\r\n Agent.put(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}/request-approval`,\r\n );\r\n\r\nconst createDraft = (projectId) =>\r\n Agent.post(`/project/${projectId}/wellbore/details`);\r\n\r\nconst addHostileFluidsToProjectWellboreDetails = (\r\n projectId,\r\n projectWellboreDetailId,\r\n hostileFluidsToAdd,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}/hostile-fluids`,\r\n hostileFluidsToAdd,\r\n );\r\n\r\nconst removeHostileFluidsFromProjectWellboreDetails = (\r\n projectId,\r\n projectWellboreDetailId,\r\n hostileFluidsToRemove,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}/hostile-fluids/delete`,\r\n hostileFluidsToRemove,\r\n );\r\n\r\nconst addProjectWellboreDetailServices = (\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetailServiceTypes,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}/services`,\r\n wellboreDetailServiceTypes,\r\n );\r\n\r\n const syncProjectWellboreDetailsWithLatest = (\r\n projectId,\r\n projectWellboreDetailId,\r\n ) =>\r\n Agent.post(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}/sync`,\r\n );\r\n\r\nconst deleteProjectWellboreDetailService = (\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetailServiceId,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}/services/${wellboreDetailServiceId}/delete`,\r\n );\r\n\r\nconst updateWellboreDetail = (\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetail,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}`,\r\n wellboreDetail,\r\n );\r\n\r\nconst cancelProjectWellboreDetailDraft = (projectId, projectWellboreDetailId) =>\r\n Agent.delete(\r\n `/project/${projectId}/wellbore/details/${projectWellboreDetailId}`,\r\n );\r\n\r\nconst getProjectWellboreDetailChangelog = (projectId) =>\r\n Agent.get(`/project/${projectId}/wellbore/details/changelog`);\r\n\r\nconst projectWellboreDetailService = {\r\n createDraft,\r\n approveDraft,\r\n requestApproval,\r\n updateWellboreDetail,\r\n getProjectWellboreDetail,\r\n getProjectWellboreDetails,\r\n getLatestProjectWellboreDetail,\r\n cancelProjectWellboreDetailDraft,\r\n addProjectWellboreDetailServices,\r\n getProjectWellboreDetailChangelog, \r\n deleteProjectWellboreDetailService,\r\n syncProjectWellboreDetailsWithLatest,\r\n addHostileFluidsToProjectWellboreDetails,\r\n removeHostileFluidsFromProjectWellboreDetails,\r\n};\r\n\r\nexport default projectWellboreDetailService;\r\n","import Agent from 'infrastructure/agent';\r\nimport wellboreSectionMappers from 'features/wells/sections/wellboreSection.mappers';\r\n\r\nconst getProjectWellboreSection = (projectId, wellboreSectionId) =>\r\n Agent.get(`/project/${projectId}/wellbore/section/${wellboreSectionId}`);\r\n\r\nconst getProjectWellboreSections = (projectId, wellboreDetailId) => {\r\n if (wellboreDetailId) {\r\n return Agent.get(\r\n `/project/${projectId}/wellbore/section/detail/${wellboreDetailId}`,\r\n );\r\n } else {\r\n return Agent.get(`/project/${projectId}/wellbore/section/detail`);\r\n }\r\n};\r\n\r\nconst getDefaultProjectWellboreSection = (projectId) =>\r\n Agent.get(`/project/${projectId}/wellbore/section/default`);\r\n\r\nconst createProjectWellboreSection = (\r\n projectId,\r\n wellboreDetailId,\r\n wellboreSection,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/wellbore/section/detail/${wellboreDetailId}`,\r\n wellboreSectionMappers.WellboreSection.to(wellboreSection),\r\n );\r\n\r\nconst syncProjectWellboreSectionsWithLatest = (projectId, wellboreDetailId) =>\r\n Agent.post(`/project/${projectId}/wellbore/section/sync/${wellboreDetailId}`);\r\n\r\nconst syncAndCreateDraftProjectWellboreSectionsWithLatest = (projectId) =>\r\n Agent.post(`/project/${projectId}/wellbore/section/sync/create`);\r\n\r\nconst updateProjectWellboreSection = (\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSection,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/wellbore/section/${wellboreSectionId}/detail/${wellboreDetailId}`,\r\n wellboreSectionMappers.WellboreSection.to(wellboreSection),\r\n );\r\n\r\nconst deleteProjectWellboreSection = (\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n) =>\r\n Agent.delete(\r\n `/project/${projectId}/wellbore/section/${wellboreSectionId}/detail/${wellboreDetailId}`,\r\n );\r\n\r\nconst createProjectWellboreSectionNipple = (\r\n projectId,\r\n wellboreSectionId,\r\n wellboreSectionNipple,\r\n) =>\r\n Agent.post(\r\n `/project/${projectId}/wellbore/section/${wellboreSectionId}/nipple`,\r\n wellboreSectionMappers.WellboreSectionNipple.to(wellboreSectionNipple),\r\n );\r\n\r\nconst updateProjectWellboreSectionNipple = (\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSectionNippleId,\r\n wellboreSectionNipple,\r\n) =>\r\n Agent.put(\r\n `/project/${projectId}/wellbore/section/${wellboreSectionId}/detail/${wellboreDetailId}/nipple/${wellboreSectionNippleId}`,\r\n wellboreSectionMappers.WellboreSectionNipple.to(wellboreSectionNipple),\r\n );\r\n\r\nconst deleteProjectWellboreSectionNipple = (\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSectionNippleId,\r\n) =>\r\n Agent.delete(\r\n `/project/${projectId}/wellbore/section/${wellboreSectionId}/detail/${wellboreDetailId}/nipple/${wellboreSectionNippleId}`,\r\n );\r\n\r\nconst projectWellboreSectionService = {\r\n getProjectWellboreSection,\r\n getProjectWellboreSections,\r\n updateProjectWellboreSection,\r\n createProjectWellboreSection,\r\n deleteProjectWellboreSection,\r\n getDefaultProjectWellboreSection,\r\n createProjectWellboreSectionNipple,\r\n updateProjectWellboreSectionNipple,\r\n deleteProjectWellboreSectionNipple,\r\n syncAndCreateDraftProjectWellboreSectionsWithLatest,\r\n syncProjectWellboreSectionsWithLatest,\r\n};\r\n\r\nexport default projectWellboreSectionService;\r\n","import Agent from 'infrastructure/agent';\r\n\r\nexport const getAllFluids = async (projectId, projectWellboreId) =>\r\n Agent.get(`/project/${projectId}/wellbore/${projectWellboreId}/fluids`);\r\n\r\nexport const deleteFluid = async (\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidId,\r\n) =>\r\n await Agent.delete(\r\n `/project/${projectId}/wellbore/${projectWellboreDetailId}/fluids/${fluidId}`,\r\n );\r\n\r\nexport const updateFluid = async (\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n) => {\r\n await Agent.put(\r\n `/project/${projectId}/wellbore/${projectWellboreDetailId}/fluids/${fluidObj.fluidId}`,\r\n fluidObj,\r\n );\r\n};\r\n\r\nexport const addFluid = async (projectId, projectWellboreId, fluidObj) =>\r\n await Agent.post(\r\n `/project/${projectId}/wellbore/${projectWellboreId}/fluids`,\r\n fluidObj,\r\n );\r\n\r\nexport const duplicateFluids = async (\r\n projectId,\r\n currentProjectWellboreId,\r\n newProjectWellboreId,\r\n) =>\r\n await Agent.post(\r\n `/project/${projectId}/wellbore/${currentProjectWellboreId}/fluids/duplicate/${newProjectWellboreId}`,\r\n );\r\n\r\nconst getDefaultProjectFluid = (projectId, projectWellboreId) =>\r\n Agent.get(\r\n `/project/${projectId}/wellbore/${projectWellboreId}/fluids/default`,\r\n );\r\n\r\nconst projectFluidService = {\r\n getAllFluids,\r\n getDefaultProjectFluid,\r\n deleteFluid,\r\n updateFluid,\r\n addFluid,\r\n duplicateFluids,\r\n};\r\n\r\nexport default projectFluidService;\r\n","import { put, call, takeEvery } from 'redux-saga/effects';\r\n\r\nimport {\r\n setActiveWellboredetailId,\r\n deleteProjectWellboreDetail,\r\n receiveProjectWellboreDetail,\r\n receiveProjectWellboreDetails,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport projectWellboreDetailsService from 'services/projectWellboreDetail.service';\r\nimport projectWellboreSectionService from 'services/projectWellboreSection.service';\r\n\r\nimport { ACTIONS } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\nimport projectFluidService from 'services/projectFluid.service';\r\n\r\nexport function* requestCreateProjectWellboreDetailDraftAsync(action) {\r\n const { projectId, projectWellboreDetailId: currentProjectWellboreDetailId } =\r\n action;\r\n\r\n const projectWellboreDetailDraft = yield call(\r\n projectWellboreDetailsService.createDraft,\r\n projectId,\r\n );\r\n\r\n yield call(\r\n projectFluidService.duplicateFluids,\r\n projectId,\r\n currentProjectWellboreDetailId,\r\n projectWellboreDetailDraft.projectWellboreDetailId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetailDraft));\r\n\r\n return projectWellboreDetailDraft;\r\n}\r\n\r\nexport function* requestCreateProjectWellboreDetailDraftAndSyncAsync(action) {\r\n const { projectId, projectWellboreDetailId: currentProjectWellboreDetailId } =\r\n action;\r\n\r\n const projectWellboreDetailDraft = yield call(\r\n projectWellboreSectionService.syncAndCreateDraftProjectWellboreSectionsWithLatest,\r\n projectId,\r\n );\r\n\r\n yield call(\r\n projectFluidService.duplicateFluids,\r\n projectId,\r\n currentProjectWellboreDetailId,\r\n projectWellboreDetailDraft.projectWellboreDetailId,\r\n );\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetailDraft));\r\n\r\n return projectWellboreDetailDraft;\r\n}\r\n\r\nexport function* requestCancelProjectWellboreDetailDraftAsync(action) {\r\n const { projectId, projectWellboreDetailId } = action;\r\n\r\n yield call(\r\n projectWellboreDetailsService.cancelProjectWellboreDetailDraft,\r\n projectId,\r\n projectWellboreDetailId,\r\n );\r\n}\r\n\r\nexport function* cancelProjectWellboreDetailDraftAndRedirectAsync(action) {\r\n const { projectWellboreDetailId } = action;\r\n\r\n yield call(requestCancelProjectWellboreDetailDraftAsync, action);\r\n\r\n const lastProjectWellboreDetail = yield call(\r\n requestLatestProjectWellDetailAsync,\r\n action,\r\n );\r\n\r\n yield put(\r\n setActiveWellboredetailId(\r\n lastProjectWellboreDetail.projectWellboreDetailId,\r\n ),\r\n );\r\n\r\n yield put(deleteProjectWellboreDetail(projectWellboreDetailId));\r\n}\r\n\r\nexport function* createAndRedirectToProjectWellboreDetailAsync(action) {\r\n const projectWellboreDetailDraft = yield call(\r\n requestCreateProjectWellboreDetailDraftAsync,\r\n action,\r\n );\r\n\r\n yield put(\r\n setActiveWellboredetailId(\r\n projectWellboreDetailDraft.projectWellboreDetailId,\r\n ),\r\n );\r\n\r\n return projectWellboreDetailDraft;\r\n}\r\n\r\nexport function* createAndRedirectToProjectWellboreDetailAndSyncAsync(action) {\r\n const projectWellboreDetailDraft = yield call(\r\n requestCreateProjectWellboreDetailDraftAndSyncAsync,\r\n action,\r\n );\r\n\r\n yield put(\r\n setActiveWellboredetailId(\r\n projectWellboreDetailDraft.projectWellboreDetailId,\r\n ),\r\n );\r\n\r\n return projectWellboreDetailDraft;\r\n}\r\n\r\nexport function* requestApproveProjectWellboreDetailDraftAsync(action) {\r\n const { projectId, projectWellboreDetailId } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.approveDraft,\r\n projectId,\r\n projectWellboreDetailId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestProjectWellboreDetailDraftApprovalAsync(action) {\r\n const { projectId, projectWellboreDetailId } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.requestApproval,\r\n projectId,\r\n projectWellboreDetailId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestLatestProjectWellDetailAsync(action) {\r\n const { projectId } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.getLatestProjectWellboreDetail,\r\n projectId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestProjectWellDetailsAsync(action) {\r\n const { projectId } = action;\r\n\r\n const projectWellboreDetails = yield call(\r\n projectWellboreDetailsService.getProjectWellboreDetails,\r\n projectId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetails(projectWellboreDetails));\r\n\r\n return projectWellboreDetails;\r\n}\r\n\r\nexport function* requestAddHostileFluidsToProjectWellboreDetailAsync(action) {\r\n const {\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: hostileFluidsToAdd,\r\n } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.addHostileFluidsToProjectWellboreDetails,\r\n projectId,\r\n projectWellboreDetailId,\r\n hostileFluidsToAdd,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestRemoveHostileFluidsFromProjectWellboreDetailAsync(\r\n action,\r\n) {\r\n const {\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: hostileFluidsToRemove,\r\n } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.removeHostileFluidsFromProjectWellboreDetails,\r\n projectId,\r\n projectWellboreDetailId,\r\n hostileFluidsToRemove,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestAddProjectWellboreDetailServicesAsync(action) {\r\n const {\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: wellboreDetailServiceTypes,\r\n } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.addProjectWellboreDetailServices,\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetailServiceTypes,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestDeleteProjectWellboreDetailServiceAsync(action) {\r\n const {\r\n projectId,\r\n projectWellboreDetailId,\r\n payload: wellboreDetailServiceId,\r\n } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.deleteProjectWellboreDetailService,\r\n projectId,\r\n projectWellboreDetailId,\r\n wellboreDetailServiceId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestProjectWellDetailAsync(action) {\r\n const { projectId, projectWellboreDetailId } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.getProjectWellboreDetail,\r\n projectId,\r\n projectWellboreDetailId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* requestProjectWellboreDetailChangelogAsync(action) {\r\n const { projectId } = action;\r\n\r\n const changelog = yield call(\r\n projectWellboreDetailsService.getProjectWellboreDetailChangelog,\r\n projectId,\r\n );\r\n\r\n return changelog;\r\n}\r\n\r\nexport function* loadProjectWellboreDetailsPageAsync(action) {\r\n const lastProjectWellboreDetail = yield call(\r\n requestLatestProjectWellDetailAsync,\r\n action,\r\n );\r\n\r\n return lastProjectWellboreDetail;\r\n}\r\n\r\nexport function* requestUpdateWellboreDetailAsync(action) {\r\n const { projectId, projectWellboreDetailId, payload } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.updateWellboreDetail,\r\n projectId,\r\n projectWellboreDetailId,\r\n payload,\r\n );\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport function* submitWellboreDetailFormAsync(action) {\r\n const { setSubmitting, setStatus } = action;\r\n\r\n try {\r\n yield call(requestUpdateWellboreDetailAsync, action);\r\n invokeIfFunction(setStatus, FormikFormStatus.SUCCESS);\r\n } catch (error) {\r\n invokeIfFunction(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n } finally {\r\n invokeIfFunction(setSubmitting, false); // if your onSubmit function is synchronous, then you need to call setSubmitting(false) on your own\r\n }\r\n}\r\n\r\nexport function* syncProjectWellboreDetailsWithLatestAsync(action) {\r\n const { projectId, projectWellboreDetailId } = action;\r\n\r\n const projectWellboreDetail = yield call(\r\n projectWellboreDetailsService.syncProjectWellboreDetailsWithLatest,\r\n projectId,\r\n projectWellboreDetailId,\r\n );\r\n\r\n yield put(receiveProjectWellboreDetail(projectWellboreDetail));\r\n\r\n yield put(\r\n setActiveWellboredetailId(projectWellboreDetail.projectWellboreDetailId),\r\n );\r\n\r\n return projectWellboreDetail;\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n ACTIONS.CREATE_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n callAsync,\r\n requestCreateProjectWellboreDetailDraftAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n callAsync,\r\n createAndRedirectToProjectWellboreDetailAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT_AND_SYNC,\r\n callAsync,\r\n createAndRedirectToProjectWellboreDetailAndSyncAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.APPROVE_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n callAsync,\r\n requestApproveProjectWellboreDetailDraftAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_PROJECT_WELLBORE_DETAIL_DRAFT_APPROVAL,\r\n callAsync,\r\n requestProjectWellboreDetailDraftApprovalAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_PROJECT_WELLBORE_DETAILS,\r\n callAsync,\r\n requestProjectWellDetailsAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_PROJECT_WELLBORE_DETAIL,\r\n callAsync,\r\n requestProjectWellDetailAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_LATEST_PROJECT_WELLBORE_DETAIL,\r\n callAsync,\r\n requestLatestProjectWellDetailAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.GET_PROJECT_WELLBORE_DETAIL_CHANGE_LOG,\r\n callAsync,\r\n requestProjectWellboreDetailChangelogAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.LOAD_PROJECT_WELLBORE_DETAILS_PAGE,\r\n callAsync,\r\n loadProjectWellboreDetailsPageAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.SUBMIT_PROJECT_WELLBORE_DETAIL_FORM,\r\n callAsync,\r\n submitWellboreDetailFormAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_ADD_HOSTILE_FLUIDS_TO_PROJECT_WELLBORE_DETAIL,\r\n callAsync,\r\n requestAddHostileFluidsToProjectWellboreDetailAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_REMOVE_HOSTILE_FLUIDS_FROM_PROJECT_WELLBORE_DETAIL,\r\n callAsync,\r\n requestRemoveHostileFluidsFromProjectWellboreDetailAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_ADD_PROJECT_WELLBORE_DETAIL_SERVICES,\r\n callAsync,\r\n requestAddProjectWellboreDetailServicesAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_REMOVE_PROJECT_WELLBORE_DETAIL_SERVICE,\r\n callAsync,\r\n requestDeleteProjectWellboreDetailServiceAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.CANCEL_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n callAsync,\r\n cancelProjectWellboreDetailDraftAndRedirectAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.SYNC_PROJECT_WELLBORE_DETAILS_WITH_LATEST,\r\n callAsync,\r\n syncProjectWellboreDetailsWithLatestAsync,\r\n );\r\n}\r\n","export const ACTIONS = {\r\n REQUEST_SIMULATION_PARAMETERS: 'REQUEST_SIMULATION_PARAMETERS',\r\n REQUEST_CREATE_SIMULATION_PARAMETER: 'REQUEST_CREATE_SIMULATION_PARAMETER',\r\n REQUEST_DELETE_SIMULATION_PARAMETER: 'REQUEST_DELETE_SIMULATION_PARAMETER',\r\n REQUEST_UPDATE_SIMULATION_PARAMETER: 'REQUEST_UPDATE_SIMULATION_PARAMETER',\r\n\r\n DELETE_SIMULATION_PARAMETER: 'DELETE_SIMULATION_PARAMETER',\r\n RECEIVE_SIMULATION_PARAMETER: 'RECEIVE_SIMULATION_PARAMETER',\r\n RECEIVE_SIMULATION_PARAMETERS: 'RECEIVE_SIMULATION_PARAMETERS',\r\n\r\n LOAD_SIMULATION_PARAMETERS_PAGE: 'LOAD_SIMULATION_PARAMETERS_PAGE',\r\n};\r\n","import { ACTIONS } from 'features/projects/tasks/task/simulation/parameters/simulationParameter.constants';\r\n\r\nexport const requestSimulationParameters = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_SIMULATION_PARAMETERS,\r\n});\r\n\r\nexport const requestCreateSimulationParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameter,\r\n setSubmitting,\r\n setStatus,\r\n callback,\r\n) => ({\r\n taskId,\r\n projectId,\r\n callback,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n payload: simulationParameter,\r\n type: ACTIONS.REQUEST_CREATE_SIMULATION_PARAMETER,\r\n notification: {\r\n success: 'Parameter successfully created',\r\n },\r\n});\r\n\r\nexport const requestUpdateSimulationParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameterId,\r\n simulationParameter,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n taskId,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n simulationParameterId,\r\n payload: simulationParameter,\r\n type: ACTIONS.REQUEST_UPDATE_SIMULATION_PARAMETER,\r\n notification: {\r\n info: 'Updating parameter',\r\n success: 'Parameter successfully updated',\r\n },\r\n});\r\n\r\nexport const requestDeleteSimulationParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameterId,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n simulationParameterId,\r\n type: ACTIONS.REQUEST_DELETE_SIMULATION_PARAMETER,\r\n confirmationDialog: {\r\n title: 'Delete simulation parameter',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this parameter? ',\r\n },\r\n notification: {\r\n success: 'Parameter successfully deleted',\r\n },\r\n});\r\n\r\nexport const loadSimulationParametersPage = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.LOAD_SIMULATION_PARAMETERS_PAGE,\r\n});\r\n\r\nexport const receiveSimulationParameter = (simulationParameter) => ({\r\n payload: simulationParameter,\r\n type: ACTIONS.RECEIVE_SIMULATION_PARAMETER,\r\n});\r\n\r\nexport const deleteSimulationParameter = (simulationParameterId) => ({\r\n simulationParameterId,\r\n type: ACTIONS.DELETE_SIMULATION_PARAMETER,\r\n});\r\n\r\nexport const receiveSimulationParameters = (simulationParameters) => ({\r\n payload: simulationParameters,\r\n type: ACTIONS.RECEIVE_SIMULATION_PARAMETERS,\r\n});\r\n","import { call, takeEvery, put } from 'redux-saga/effects';\r\n\r\nimport {\r\n deleteSimulationParameter,\r\n receiveSimulationParameters,\r\n} from 'features/projects/tasks/task/simulation/parameters/simulationParameter.actions';\r\n\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport simulationService from 'services/simulation.service';\r\nimport { requestSimulationAsync } from 'features/projects/tasks/task/simulation/simulation.sagas';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/parameters/simulationParameter.constants';\r\n\r\nexport function* requestSimulationParametersAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulationParameters = yield call(\r\n simulationService.getSimulationParameters,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(receiveSimulationParameters(simulationParameters));\r\n\r\n return simulationParameters;\r\n}\r\n\r\nexport function* requestCreateSimulationParameterAsync(action) {\r\n const {\r\n taskId,\r\n payload,\r\n callback,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n } = action;\r\n\r\n try {\r\n const simulationParameter = yield call(\r\n simulationService.createSimulationParameter,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n payload,\r\n );\r\n\r\n // refresh parameters to get correct order\r\n yield call(requestSimulationParametersAsync, action);\r\n\r\n yield call(requestSimulationAsync, action);\r\n\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n\r\n if (callback) {\r\n yield call(callback);\r\n }\r\n\r\n return simulationParameter;\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestUpdateSimulationParameterAsync(action) {\r\n const {\r\n taskId,\r\n payload,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n simulationParameterId,\r\n } = action;\r\n\r\n try {\r\n const simulationParameter = yield call(\r\n simulationService.updateSimulationParameter,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameterId,\r\n payload,\r\n );\r\n\r\n // refresh parameters to get correct order\r\n yield call(requestSimulationParametersAsync, action);\r\n\r\n yield call(requestSimulationAsync, action);\r\n\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n\r\n return simulationParameter;\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* requestDeleteSimulationParameterAsync(action) {\r\n const { taskId, projectId, simulationId, simulationParameterId } = action;\r\n\r\n yield call(\r\n simulationService.deleteSimulationParameter,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameterId,\r\n );\r\n\r\n yield put(deleteSimulationParameter(simulationParameterId));\r\n\r\n yield call(requestSimulationAsync, action);\r\n}\r\n\r\nexport function* loadSimulationParametersPageAsync(action) {\r\n yield call(requestSimulationParametersAsync, action);\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n ACTIONS.LOAD_SIMULATION_PARAMETERS_PAGE,\r\n callAsync,\r\n loadSimulationParametersPageAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_SIMULATION_PARAMETERS,\r\n callAsync,\r\n requestSimulationParametersAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_CREATE_SIMULATION_PARAMETER,\r\n callAsync,\r\n requestCreateSimulationParameterAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_DELETE_SIMULATION_PARAMETER,\r\n callAsync,\r\n requestDeleteSimulationParameterAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_SIMULATION_PARAMETER,\r\n callAsync,\r\n requestUpdateSimulationParameterAsync,\r\n );\r\n}\r\n","import {\r\n PROJECTS_ACTIONS,\r\n PROJECTS_ACTIONS as ACTIONS,\r\n} from 'features/projects/projects.constants';\r\nimport { requestDeleteFluidGeneric } from 'utils/fluids/actions.base';\r\n\r\nexport const requestGetProjectFluids = (\r\n projectId,\r\n projectWellboreDetailId,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n type: ACTIONS.INITIATE_GET_PROJECT_FLUIDS,\r\n});\r\n\r\nexport const getProjectFluids = (fluids) => ({\r\n type: PROJECTS_ACTIONS.GET_PROJECT_FLUIDS,\r\n payload: fluids,\r\n});\r\n\r\nexport const requestUpdateFluid = (\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n type: ACTIONS.INITIATE_UPDATE_PROJECT_FLUID,\r\n notification: {\r\n info: 'Updating fluid...',\r\n success: 'Fluid successfully updated',\r\n },\r\n});\r\n\r\nexport const updateFluid = (fluidId, projectWellboreDetailId) => ({\r\n type: PROJECTS_ACTIONS.UPDATE_PROJECT_FLUID,\r\n payload: {\r\n fluidId,\r\n projectWellboreDetailId,\r\n },\r\n});\r\n\r\nexport const requestDeleteFluid = (\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidId,\r\n) => {\r\n return requestDeleteFluidGeneric(\r\n ACTIONS.INITIATE_DELETE_PROJECT_FLUID,\r\n { projectId, projectWellboreDetailId },\r\n fluidId,\r\n );\r\n};\r\n\r\nexport const deleteFluid = (projectWellboreDetailId, fluidId) => ({\r\n type: PROJECTS_ACTIONS.DELETE_PROJECT_FLUID,\r\n payload: {\r\n fluidId,\r\n projectWellboreDetailId,\r\n },\r\n});\r\n\r\nexport const requestCreateFluid = (\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n type: PROJECTS_ACTIONS.INITIATE_CREATE_PROJECT_FLUID,\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n notification: {\r\n info: 'Adding fluid...',\r\n success: 'Fluid successfully created',\r\n },\r\n});\r\n\r\nexport const createFluid = (projectWellboreDetailId, fluidObj) => ({\r\n type: PROJECTS_ACTIONS.CREATE_PROJECT_FLUID,\r\n payload: {\r\n projectWellboreDetailId,\r\n fluidObj,\r\n },\r\n});\r\n","import { put, takeEvery, call } from 'redux-saga/effects';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport {\r\n getProjectFluids,\r\n deleteFluid,\r\n updateFluid,\r\n createFluid,\r\n} from './project.actions.fluids';\r\nimport projectFluidService from 'services/projectFluid.service';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\n\r\nexport function* getAllProjectFluids(action) {\r\n const { projectId, projectWellboreDetailId } = action;\r\n const fluids = yield call(\r\n projectFluidService.getAllFluids,\r\n projectId,\r\n projectWellboreDetailId,\r\n );\r\n yield put(getProjectFluids(fluids));\r\n}\r\n\r\nexport function* updateProjectFluid(action) {\r\n const {\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n } = action;\r\n try {\r\n yield call(\r\n projectFluidService.updateFluid,\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n );\r\n yield call(getAllProjectFluids, { projectId, projectWellboreDetailId });\r\n yield put(updateFluid(fluidObj.fluidId, projectWellboreDetailId));\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nexport function* deleteProjectFluid(action) {\r\n const { projectId, projectWellboreDetailId, fluidId } = action;\r\n yield call(\r\n projectFluidService.deleteFluid,\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidId,\r\n );\r\n yield call(getAllProjectFluids, { projectId, projectWellboreDetailId });\r\n yield put(deleteFluid(projectWellboreDetailId, fluidId));\r\n}\r\n\r\nexport function* addProjectFluid(action) {\r\n const {\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n } = action;\r\n try {\r\n yield call(\r\n projectFluidService.addFluid,\r\n projectId,\r\n projectWellboreDetailId,\r\n fluidObj,\r\n );\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n yield call(getAllProjectFluids, { projectId, projectWellboreDetailId });\r\n yield put(createFluid(projectWellboreDetailId, fluidObj));\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n PROJECTS_ACTIONS.INITIATE_GET_PROJECT_FLUIDS,\r\n callAsync,\r\n getAllProjectFluids,\r\n );\r\n yield takeEvery(\r\n PROJECTS_ACTIONS.INITIATE_UPDATE_PROJECT_FLUID,\r\n callAsync,\r\n updateProjectFluid,\r\n );\r\n yield takeEvery(\r\n PROJECTS_ACTIONS.INITIATE_DELETE_PROJECT_FLUID,\r\n callAsync,\r\n deleteProjectFluid,\r\n );\r\n yield takeEvery(\r\n PROJECTS_ACTIONS.INITIATE_CREATE_PROJECT_FLUID,\r\n callAsync,\r\n addProjectFluid,\r\n );\r\n}\r\n","import { ACTIONS } from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.constants';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nexport const requestSimulationDynamicToolParameters = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n type: ACTIONS.REQUEST_SIMULATION_TOOL_PARAMETERS,\r\n});\r\n\r\nexport const requestUpdateSimulationDynamicToolParameter = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationDynamicToolParameterId,\r\n simulationDynamicToolParameter,\r\n setSubmitting,\r\n setStatus,\r\n refreshParameters = false,\r\n) => ({\r\n taskId,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n simulationDynamicToolParameterId,\r\n refreshParameters,\r\n payload: simulationDynamicToolParameter,\r\n type: ACTIONS.REQUEST_UPDATE_SIMULATION_TOOL_PARAMETER,\r\n notification: {\r\n info: 'Updating tool parameter',\r\n success: 'Tool Parameter successfully updated',\r\n },\r\n});\r\n\r\nexport const receiveSimulationDynamicToolParameter = (\r\n simulationDynamicToolParameter,\r\n) => ({\r\n payload: simulationDynamicToolParameter,\r\n type: ACTIONS.RECEIVE_SIMULATION_TOOL_PARAMETER,\r\n});\r\n\r\nexport const receiveSimulationDynamicToolParameters = (\r\n simulationDynamicToolParameters,\r\n) => ({\r\n payload: simulationDynamicToolParameters ?? EMPTY_MAP,\r\n type: ACTIONS.RECEIVE_SIMULATION_TOOL_PARAMETERS,\r\n});\r\n","import { call, takeEvery, put } from 'redux-saga/effects';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport {\r\n requestSimulationDynamicToolParameters,\r\n receiveSimulationDynamicToolParameters,\r\n receiveSimulationDynamicToolParameter,\r\n} from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.actions';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport simulationService from 'services/simulation.service';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.constants';\r\nimport { requestSimulationAsync } from '../simulation.sagas';\r\n\r\nexport function* requestSimulationDynamicToolParametersAsync(action) {\r\n const { projectId, taskId, simulationId } = action;\r\n\r\n const simulationDynamicToolParameters = yield call(\r\n simulationService.getSimulationDynamicToolParameters,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n yield put(\r\n receiveSimulationDynamicToolParameters(simulationDynamicToolParameters),\r\n );\r\n\r\n return simulationDynamicToolParameters;\r\n}\r\n\r\nexport function* requestUpdateSimulationDynamicToolParameterAsync(action) {\r\n const {\r\n taskId,\r\n payload,\r\n projectId,\r\n setStatus,\r\n simulationId,\r\n setSubmitting,\r\n simulationDynamicToolParameterId,\r\n refreshParameters,\r\n } = action;\r\n\r\n try {\r\n const simulationDynamicToolParameter = yield call(\r\n simulationService.updateSimulationDynamicToolParameter,\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationDynamicToolParameterId,\r\n payload,\r\n );\r\n\r\n // If refresh parameters is set to true - fetch all parameters for the simulation to refresh the client\r\n // This can be used when updating a single parameter causes other parameters to change\r\n // Otherwise update the current parameter with the updated result\r\n if (refreshParameters) {\r\n yield put(\r\n requestSimulationDynamicToolParameters(projectId, taskId, simulationId),\r\n );\r\n } else {\r\n yield put(\r\n receiveSimulationDynamicToolParameter(simulationDynamicToolParameter),\r\n );\r\n }\r\n\r\n // Request simulation - as updating a tool parameter will reset the simulation status to outdated\r\n yield call(requestSimulationAsync, action);\r\n\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n\r\n return simulationDynamicToolParameter;\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n\r\n throw error;\r\n }\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n ACTIONS.REQUEST_SIMULATION_TOOL_PARAMETERS,\r\n callAsync,\r\n requestSimulationDynamicToolParametersAsync,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_SIMULATION_TOOL_PARAMETER,\r\n callAsync,\r\n requestUpdateSimulationDynamicToolParameterAsync,\r\n );\r\n}\r\n","import Agent from 'infrastructure/agent';\r\n\r\nexport const getAllFluids = async (wellboreId) =>\r\n Agent.get(`/wellbore/details/${wellboreId}/fluids`);\r\n\r\nexport const deleteFluid = async (wellboreId, fluidId) =>\r\n await Agent.delete(`/wellbore/details/${wellboreId}/fluids/${fluidId}`);\r\n\r\nconst getDefaultFluid = (wellboreId) =>\r\n Agent.get(`/wellbore/details/${wellboreId}/fluids/default`);\r\n\r\nexport const updateFluid = async (wellboreId, fluidObj) => {\r\n await Agent.put(\r\n `/wellbore/details/${wellboreId}/fluids?wellboreFluidId=${fluidObj.fluidId}`,\r\n fluidObj,\r\n );\r\n};\r\n\r\nexport const addFluid = async (wellboreId, fluidObj) =>\r\n await Agent.post(`/wellbore/details/${wellboreId}/fluids`, fluidObj);\r\n\r\nconst wellboreFluidService = {\r\n getAllFluids,\r\n deleteFluid,\r\n updateFluid,\r\n addFluid,\r\n getDefaultFluid,\r\n};\r\n\r\nexport default wellboreFluidService;\r\n","import {\r\n WELLS_ACTIONS,\r\n WELLS_ACTIONS as ACTIONS,\r\n} from 'features/wells/wells.constants';\r\nimport { requestDeleteFluidGeneric } from 'utils/fluids/actions.base';\r\n\r\nexport const requestGetWellboreFluids = (wellboreId) => ({\r\n wellboreId,\r\n type: ACTIONS.INITIATE_GET_WELLBORE_FLUIDS,\r\n});\r\n\r\nexport const getWellboreFluids = (fluids) => ({\r\n type: ACTIONS.GET_WELLBORE_FLUIDS,\r\n payload: fluids,\r\n});\r\n\r\nexport const requestUpdateWellboreFluid = (\r\n wellboreId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n wellboreId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n type: ACTIONS.INITIATE_UPDATE_WELLBORE_FLUID,\r\n notification: {\r\n info: 'Updating fluid...',\r\n success: 'Fluid successfully updated',\r\n },\r\n});\r\n\r\nexport const updateFluid = (fluidId, wellboreId) => ({\r\n type: ACTIONS.UPDATE_WELLBORE_FLUID,\r\n payload: {\r\n fluidId,\r\n wellboreId,\r\n },\r\n});\r\n\r\nexport const requestCreateWellboreFluid = (\r\n wellboreId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n) => ({\r\n type: ACTIONS.INITIATE_CREATE_WELLBORE_FLUID,\r\n wellboreId,\r\n fluidObj,\r\n setSubmitting,\r\n setStatus,\r\n notification: {\r\n info: 'Adding fluid...',\r\n success: 'Fluid successfully created',\r\n },\r\n});\r\n\r\nexport const createFluid = (wellboreId, fluidObj) => ({\r\n type: ACTIONS.CREATE_WELLBORE_FLUID,\r\n payload: {\r\n wellboreId,\r\n fluidObj,\r\n },\r\n});\r\nexport const requestDeleteWellboreFluid = (wellboreId, fluidId) => {\r\n return requestDeleteFluidGeneric(\r\n WELLS_ACTIONS.INITIATE_DELETE_WELLBORE_FLUID,\r\n { wellboreId },\r\n fluidId,\r\n );\r\n};\r\n","import { callAsync } from '../../app/sagas/helperSagas';\r\nimport { WELLS_ACTIONS as ACTIONS } from './wells.constants';\r\nimport { call, takeEvery, put } from 'redux-saga/effects';\r\nimport wellboreFluidService from '../../services/wellboreFluid.service';\r\nimport {\r\n createFluid,\r\n getWellboreFluids,\r\n updateFluid,\r\n} from './wellboreFluid.actions';\r\nimport { FormikFormStatus } from '../../app/app.constants';\r\n\r\nfunction* getAllWellboreFluids(action) {\r\n const { wellboreId } = action;\r\n const fluids = yield call(wellboreFluidService.getAllFluids, wellboreId);\r\n yield put(getWellboreFluids(fluids));\r\n}\r\n\r\nexport function* deleteWellboreFluid(action) {\r\n const { wellboreId, fluidId } = action;\r\n yield call(wellboreFluidService.deleteFluid, wellboreId, fluidId);\r\n yield call(getAllWellboreFluids, { wellboreId });\r\n yield put(deleteFluid(wellboreId, fluidId));\r\n}\r\n\r\nexport const deleteFluid = (wellboreId, fluidId) => ({\r\n type: ACTIONS.DELETE_WELLBORE_FLUID,\r\n payload: {\r\n fluidId,\r\n wellboreId,\r\n },\r\n});\r\n\r\nfunction* updateWellboreFluid(action) {\r\n const { wellboreId, fluidObj, setSubmitting, setStatus } = action;\r\n try {\r\n yield call(wellboreFluidService.updateFluid, wellboreId, fluidObj);\r\n yield call(getAllWellboreFluids, { wellboreId });\r\n yield put(updateFluid(fluidObj.fluidId, wellboreId));\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nfunction* createWellboreFluid(action) {\r\n const { wellboreId, fluidObj, setSubmitting, setStatus } = action;\r\n try {\r\n yield call(wellboreFluidService.addFluid, wellboreId, fluidObj);\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.SUCCESS);\r\n yield call(getAllWellboreFluids, { wellboreId });\r\n yield put(createFluid(wellboreId, wellboreId));\r\n } catch (error) {\r\n yield call(setSubmitting, false);\r\n yield call(setStatus, FormikFormStatus.ERROR);\r\n throw error;\r\n }\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n ACTIONS.INITIATE_GET_WELLBORE_FLUIDS,\r\n callAsync,\r\n getAllWellboreFluids,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.INITIATE_DELETE_WELLBORE_FLUID,\r\n callAsync,\r\n deleteWellboreFluid,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.INITIATE_UPDATE_WELLBORE_FLUID,\r\n callAsync,\r\n updateWellboreFluid,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.INITIATE_CREATE_WELLBORE_FLUID,\r\n callAsync,\r\n createWellboreFluid,\r\n );\r\n}\r\n","import { call, takeLatest, put } from 'redux-saga/effects';\r\nimport {\r\n APP_ACTIONS,\r\n APP_VERSION,\r\n APP_VERSION_STORAGE_KEY,\r\n NOTIFICATION_VARIANTS,\r\n} from 'app/app.constants';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport appService from 'services/app.service';\r\nimport { storeChangeLog } from 'app/app.actions';\r\nimport routePaths from 'app/routePaths';\r\n\r\nfunction* logFetchChange() {\r\n const response = yield call(appService.getChangeLog);\r\n yield put(storeChangeLog(response.markdown));\r\n}\r\n\r\nfunction* newAppVersionNotification() {\r\n localStorage.setItem(APP_VERSION_STORAGE_KEY, APP_VERSION);\r\n yield put({\r\n type: APP_ACTIONS.SHOW_CHANGE_LOG_SEPARATE_TAB,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'The app version changed',\r\n },\r\n confirmationDialog: {\r\n confirmButtonText: 'View Changelog',\r\n title: \"Discover What's New!\",\r\n description:\r\n 'Stay up-to-date with improvements and enhancements.\\nThank you for choosing Digital Well Intervention!',\r\n },\r\n });\r\n}\r\n\r\nfunction* storeNewAppVersion() {\r\n window.open(routePaths.changelog, '_blank');\r\n yield;\r\n}\r\n\r\nexport default function* rootCh() {\r\n yield takeLatest(\r\n APP_ACTIONS.INITIATE_FETCH_CHANGE_LOG,\r\n callAsync,\r\n logFetchChange,\r\n );\r\n\r\n yield takeLatest(\r\n APP_ACTIONS.NEW_APP_VERSION_NOTIFICATION,\r\n callAsync,\r\n newAppVersionNotification,\r\n );\r\n\r\n yield takeLatest(\r\n APP_ACTIONS.SHOW_CHANGE_LOG_SEPARATE_TAB,\r\n callAsync,\r\n storeNewAppVersion,\r\n );\r\n}\r\n","import { List } from 'immutable';\r\n\r\nexport const ACTIONS = {\r\n REQUEST_PROJECT_MOBILISATION_TASKS: 'REQUEST_PROJECT_MOBILISATION_TASKS',\r\n RECEIVE_PROJECT_MOBILISATION_TASKS: 'RECEIVE_PROJECT_MOBILISATION_TASKS',\r\n RECEIVE_PROJECT_MOBILISATION_TOOLSTRINGS:\r\n 'RECEIVE_PROJECT_MOBILISATION_TOOLSTRINGS',\r\n REQUEST_PROJECT_MOBILISATION_TOOLSTRING:\r\n 'REQUEST_PROJECT_MOBILISATION_TOOLSTRING',\r\n RECEIVE_PROJECT_MOBILISATION_TOOLSTRING:\r\n 'RECEIVE_PROJECT_MOBILISATION_TOOLSTRING',\r\n CREATE_STRING_TEST_REPORT: 'CREATE_STRING_TEST_REPORT',\r\n REQUEST_STRING_TEST_REPORTS_FOR_TASK: 'REQUEST_STRING_TEST_REPORTS_FOR_TASK',\r\n RECEIVE_STRING_TEST_REPORTS_FOR_TASK: 'RECEIVE_STRING_TEST_REPORTS_FOR_TASK',\r\n REQUEST_STRING_TEST_REPORT_EVENT: 'REQUEST_STRING_TEST_REPORT_EVENT',\r\n RECEIVE_STRING_TEST_REPORT_EVENT: 'RECEIVE_STRING_TEST_REPORT_EVENT',\r\n REQUEST_CREATE_SECONDARY_TEST_REPORT: 'REQUEST_CREATE_SECONDARY_TEST_REPORT',\r\n REQUEST_FINISH_STRING_TEST_REPORT: 'REQUEST_FINISH_STRING_TEST_REPORT',\r\n REQUEST_UPDATE_STRING_TEST_TOOL_STRING_ITEM: 'REQUEST_UPDATE_STRING_TEST_TOOL_STRING_ITEM',\r\n REQUEST_GET_STRING_TEST_TOOL_STRING_ITEMS: 'REQIEST_GET_STRING_TEST_TOOL_STRING_ITEMS',\r\n RECEIVE_STRING_TEST_TOOL_STRING_ITEMS: 'RECEIVE_STRING_TEST_TOOL_STRING_ITEMS',\r\n REQUEST_GET_STRING_TEST_TOOL_STRING_ITEMS_FOR_STRING_TEST: 'REQUEST_GET_STRING_TEST_TOOL_STRING_ITEMS_FOR_STRING_TEST',\r\n RECEIVE_STRING_TEST_TOOL_STRING_ITEMS_FOR_STRING_TEST: 'RECEIVE_STRING_TEST_TOOL_STRING_ITEMS_FOR_STRING_TEST',\r\n VALIDATE_STRING_TEST_TOOL_STRING_ITEMS_SERIALS: 'VALIDATE_STRING_TEST_TOOL_STRING_ITEMS_SERIALS',\r\n};\r\n\r\nexport const MODAL = {\r\n STRING_TEST_REPORT_EVENT: 'STRING_TEST_REPORT_EVENT',\r\n};\r\n\r\nexport const STRING_TEST_REPORT_EVENT_TYPE_ENUM = {\r\n PASS: 1,\r\n WARNING: 2,\r\n FAIL: 3,\r\n};\r\n\r\nexport const STRING_TEST_REPORT_EVENT_TYPES_LIST = List([\r\n { id: '1', name: 'Pass' },\r\n { id: '2', name: 'Warning' },\r\n { id: '3', name: 'Fail' },\r\n]);\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getProjectMobilisationTasks = (projectId) =>\r\n Agent.get(`/mobilisation/${projectId}/tasks`);\r\n\r\nconst getProjectMobilisationToolstrings = (projectId) =>\r\n Agent.get(`/mobilisation/${projectId}/plannedtoolstrings`);\r\n\r\nconst getProjectMobilisationToolstringForTask = (projectId, taskId) =>\r\n Agent.get(`/mobilisation/${projectId}/${taskId}/mobilisationtoolstrings`);\r\n\r\nconst createStringTestReport = (projectId, taskId, stringTestReport) =>\r\n Agent.post(\r\n `/mobilisation/${projectId}/${taskId}/createstringtestreport`,\r\n stringTestReport,\r\n );\r\n\r\nconst getStringTestReportsForTask = (projectId, taskId) =>\r\n Agent.get(`/mobilisation/${projectId}/${taskId}/stringtestreports`);\r\n\r\nconst getStringTestReportEventById = (projectId, taskId, eventId) =>\r\n Agent.get(\r\n `/mobilisation/${projectId}/${taskId}/${eventId}/stringtestreportevent`,\r\n );\r\n\r\nconst createSecondaryStringTestReport = (projectId, taskId, toolstringId) =>\r\n Agent.post(\r\n `/mobilisation/${projectId}/${taskId}/${toolstringId}/secondarycreatestringtestreport`,\r\n );\r\n\r\nconst finishStringTestReport = (\r\n projectId,\r\n taskId,\r\n stringTestReportId,\r\n stringTestReport,\r\n) =>\r\n Agent.post(\r\n `/mobilisation/${projectId}/${taskId}/${stringTestReportId}/finishstringtestreport`,\r\n stringTestReport,\r\n );\r\n\r\nconst projectMobilisationService = {\r\n createStringTestReport,\r\n finishStringTestReport,\r\n getProjectMobilisationTasks,\r\n getStringTestReportsForTask,\r\n getStringTestReportEventById,\r\n createSecondaryStringTestReport,\r\n getProjectMobilisationToolstrings,\r\n getProjectMobilisationToolstringForTask,\r\n};\r\n\r\nexport default projectMobilisationService;\r\n","import { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/projects/mobilisation/projectMobilisation.constants';\r\n\r\nexport const requestProjectMobilisationTasks = (projectId) => ({\r\n projectId,\r\n type: ACTIONS.REQUEST_PROJECT_MOBILISATION_TASKS,\r\n});\r\n\r\nexport const receiveProjectMobilisationTasks = (projectMobilisationTasks) => ({\r\n payload: projectMobilisationTasks,\r\n type: ACTIONS.RECEIVE_PROJECT_MOBILISATION_TASKS,\r\n});\r\n\r\nexport const receiveProjectMobilisationToolstrings = (\r\n projectMobilisationToolstrings,\r\n) => ({\r\n payload: projectMobilisationToolstrings,\r\n type: ACTIONS.RECEIVE_PROJECT_MOBILISATION_TOOLSTRINGS,\r\n});\r\n\r\nexport const requestProjectMobilisationToolstringForTask = (\r\n projectId,\r\n taskId,\r\n) => ({\r\n projectId,\r\n taskId,\r\n type: ACTIONS.REQUEST_PROJECT_MOBILISATION_TOOLSTRING,\r\n});\r\n\r\nexport const receiveProjectMobilisationToolstringForTask = (toolstring) => ({\r\n payload: toolstring,\r\n type: ACTIONS.RECEIVE_PROJECT_MOBILISATION_TOOLSTRING,\r\n});\r\n\r\nexport const createStringTestReport = (\r\n projectId,\r\n taskId,\r\n stringTestReport,\r\n toggleModal,\r\n) => ({\r\n projectId,\r\n taskId,\r\n stringTestReport,\r\n toggleModal,\r\n type: ACTIONS.CREATE_STRING_TEST_REPORT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'String test report created',\r\n },\r\n});\r\n\r\nexport const requestStringReportsForTask = (\r\n taskId,\r\n toolstringId,\r\n stringTestId = null,\r\n) => ({\r\n taskId,\r\n toolstringId,\r\n stringTestId,\r\n type: ACTIONS.REQUEST_STRING_TEST_REPORTS_FOR_TASK,\r\n});\r\n\r\nexport const receiveStringTestReportsForTask = (stringTestReports) => ({\r\n payload: stringTestReports,\r\n type: ACTIONS.RECEIVE_STRING_TEST_REPORTS_FOR_TASK,\r\n});\r\n\r\nexport const requestStringTestReportEvent = (\r\n projectId,\r\n taskId,\r\n stringTestReportEventId,\r\n) => ({\r\n projectId,\r\n taskId,\r\n stringTestReportEventId,\r\n type: ACTIONS.REQUEST_STRING_TEST_REPORT_EVENT,\r\n});\r\n\r\nexport const receiveStringTestReportEvent = (stringTestReportEvent) => ({\r\n payload: stringTestReportEvent,\r\n type: ACTIONS.RECEIVE_STRING_TEST_REPORT_EVENT,\r\n});\r\n\r\nexport const requestCreateSecondaryStringTestReport = (\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n) => ({\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n type: ACTIONS.REQUEST_CREATE_SECONDARY_TEST_REPORT,\r\n});\r\n\r\nexport const requestFinishStringTestReport = (\r\n updateDraftReport,\r\n taskId,\r\n toolstringId,\r\n) => ({\r\n updateDraftReport,\r\n taskId,\r\n toolstringId,\r\n type: ACTIONS.REQUEST_FINISH_STRING_TEST_REPORT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'String test report created',\r\n },\r\n});\r\n\r\nexport const requestUpdatestringtesttoolstringitem = (\r\n taskId,\r\n toolstringId,\r\n projectId,\r\n asset,\r\n stringTestId,\r\n) => {\r\n const name = asset.name;\r\n const m3Number = asset.m3ItemNumber;\r\n\r\n return {\r\n taskId,\r\n toolstringId,\r\n projectId,\r\n asset,\r\n stringTestId,\r\n type: ACTIONS.REQUEST_UPDATE_STRING_TEST_TOOL_STRING_ITEM,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `#${m3Number} - ${name} was successfully updated`,\r\n },\r\n };\r\n};\r\n//stringtestid\r\nexport const requestGetstringtesttoolstringitems = (taskId, toolstringId) => ({\r\n taskId,\r\n toolstringId,\r\n type: ACTIONS.REQUEST_GET_STRING_TEST_TOOL_STRING_ITEMS,\r\n});\r\n\r\nexport const receivestringtesttoolstringitems = (\r\n stringtesttoolstringitems,\r\n) => ({\r\n payload: stringtesttoolstringitems,\r\n type: ACTIONS.RECEIVE_STRING_TEST_TOOL_STRING_ITEMS,\r\n});\r\n\r\nexport const requestGetstringtesttoolstringitemsForStringTest = (\r\n stringTestId,\r\n) => ({\r\n stringTestId,\r\n type: ACTIONS.RECEIVE_STRING_TEST_TOOL_STRING_ITEMS_FOR_STRING_TEST,\r\n});\r\n\r\nexport const receivestringtesttoolstringitemsForStringTest = (\r\n stringtesttoolstringitems,\r\n) => ({\r\n payload: stringtesttoolstringitems,\r\n type: ACTIONS.RECEIVE_STRING_TEST_TOOL_STRING_ITEMs_FOR_STRING_TEST,\r\n});\r\n\r\nexport const validatestringtesttoolstringitemsSerialNumbers = (\r\n stringtesttoolstringitemIds,\r\n) => ({\r\n stringtesttoolstringitemIds,\r\n type: ACTIONS.VALIDATE_STRING_TEST_TOOL_STRING_ITEMS_SERIALS,\r\n});\r\n","import { put, call, takeEvery } from 'redux-saga/effects';\r\n\r\nimport { toggleModal } from 'altus-modal';\r\nimport { callAsync } from 'app/sagas/helperSagas';\r\nimport { addNotification } from 'altus-redux-middlewares';\r\n\r\nimport {\r\n ACTIONS,\r\n MODAL,\r\n} from 'features/projects/mobilisation/projectMobilisation.constants';\r\nimport projectMobilisationService from 'features/projects/mobilisation/projectMobilisation.service';\r\nimport {\r\n receiveProjectMobilisationTasks,\r\n receiveStringTestReportEvent,\r\n receiveStringTestReportsForTask,\r\n receivestringtesttoolstringitems,\r\n} from 'features/projects/mobilisation/projectMobilisation.actions';\r\nimport equipmentService from 'features/equipment/equipment.service';\r\nimport { EMPTY_STRING, NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { requestToolstringForTaskAsync } from '../tasks/task/toolstring/toolstring.sagas';\r\n\r\nexport function* requestMobilisationTasks(action) {\r\n const { projectId } = action;\r\n\r\n const projectMobilisationTasks = yield call(\r\n projectMobilisationService.getProjectMobilisationTasks,\r\n projectId,\r\n );\r\n\r\n yield call(\r\n projectMobilisationService.getProjectMobilisationToolstrings,\r\n projectId,\r\n );\r\n\r\n yield put(receiveProjectMobilisationTasks(projectMobilisationTasks));\r\n}\r\n\r\nexport function* createStringTestReport(action) {\r\n const { taskId, stringTestReport, toggleModal } = action;\r\n\r\n const { toolstringId } = stringTestReport;\r\n\r\n const asset = {\r\n toolstringId,\r\n taskId,\r\n ...stringTestReport,\r\n };\r\n const stringTest = yield call(\r\n equipmentService.createStringTestAssetHistory,\r\n asset,\r\n );\r\n\r\n const stringTestReports = yield call(\r\n equipmentService.getStringVerificationsForToolstring,\r\n taskId,\r\n toolstringId,\r\n true,\r\n stringTest?.stringTestId,\r\n );\r\n\r\n yield put(receiveStringTestReportsForTask(stringTestReports));\r\n\r\n if (toggleModal) {\r\n yield put(toggleModal({ modalId: MODAL.STRING_TEST_REPORT_EVENT }));\r\n }\r\n}\r\n\r\nexport function* requestStringTestReportsForTask(action) {\r\n const { taskId, toolstringId, stringTestId = null } = action;\r\n\r\n const stringTestReports = yield call(\r\n equipmentService.getStringVerificationsForToolstring,\r\n taskId,\r\n toolstringId,\r\n true,\r\n stringTestId,\r\n );\r\n yield put(receiveStringTestReportsForTask(stringTestReports));\r\n}\r\n\r\nexport function* requestStringTestReportEventById(action) {\r\n const { projectId, taskId, stringTestReportEventId } = action;\r\n\r\n const event = yield call(\r\n projectMobilisationService.getStringTestReportEventById,\r\n projectId,\r\n taskId,\r\n stringTestReportEventId,\r\n );\r\n\r\n yield put(receiveStringTestReportEvent(event));\r\n}\r\n\r\nexport function* createSecondaryStringTestReport(action) {\r\n const { projectId, taskId, toolstringId } = action;\r\n\r\n yield call(\r\n projectMobilisationService.createSecondaryStringTestReport,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n );\r\n\r\n const stringTestReports = yield call(\r\n projectMobilisationService.getStringTestReportsForTask,\r\n projectId,\r\n taskId,\r\n );\r\n\r\n yield put(receiveStringTestReportsForTask(stringTestReports));\r\n}\r\n\r\nexport function* finishStringTestReport(action) {\r\n const {\r\n updateDraftReport,\r\n taskId,\r\n toolstringId,\r\n stringTestId = null,\r\n } = action;\r\n\r\n yield call(equipmentService.updateStringTestDraft, updateDraftReport);\r\n\r\n const stringTestReports = yield call(\r\n equipmentService.getStringVerificationsForToolstring,\r\n taskId,\r\n toolstringId,\r\n true,\r\n stringTestId,\r\n );\r\n\r\n yield put(receiveStringTestReportsForTask(stringTestReports));\r\n\r\n yield put(toggleModal({ modalId: MODAL.STRING_TEST_REPORT_EVENT }));\r\n}\r\n\r\nexport function* updatestringtesttoolstringitem(action) {\r\n const { taskId, toolstringId, projectId, asset,stringTestId=null } = action;\r\n\r\n const assetDto = {\r\n toolstringItemId: asset.toolstringItemId,\r\n toolAssemblyId: asset.toolAssemblyId,\r\n toolAssemblyToolId: asset.toolAssemblyToolId,\r\n serialNumber: asset.serialNo === EMPTY_STRING ? null : asset.serialNo,\r\n };\r\n yield call(\r\n equipmentService.createstringtesttoolstringitem,\r\n taskId,\r\n toolstringId,\r\n assetDto,\r\n );\r\n yield call(requestToolstringForTaskAsync, {\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n isMobilise: true,\r\n stringTestId,\r\n });\r\n\r\n yield call(getstringtesttoolstringitemsForToolstring, {\r\n taskId,\r\n toolstringId,\r\n });\r\n}\r\n\r\nexport function* getstringtesttoolstringitemsForToolstring(action) {\r\n const { taskId, toolstringId } = action;\r\n\r\n const stringtesttoolstringitems = yield call(\r\n equipmentService.getstringtesttoolstringitemsForToolstring,\r\n taskId,\r\n toolstringId,\r\n );\r\n yield put(receivestringtesttoolstringitems(stringtesttoolstringitems));\r\n}\r\nexport function* getstringtesttoolstringitemsForStringTestId(action) {\r\n const { stringTestId } = action;\r\n\r\n const stringtesttoolstringitems = yield call(\r\n equipmentService.getstringtesttoolstringitemsForStringTestId,\r\n stringTestId,\r\n );\r\n\r\n yield put(receivestringtesttoolstringitems(stringtesttoolstringitems));\r\n}\r\nexport function* validatestringtesttoolstringitemsSerials(action) {\r\n const { stringtesttoolstringitemIds } = action;\r\n\r\n const dto = {\r\n stringtesttoolstringitemIds: stringtesttoolstringitemIds,\r\n };\r\n\r\n try {\r\n yield call(equipmentService.validatestringtesttoolstringitemSerial, dto);\r\n yield put(toggleModal({ modalId: MODAL.STRING_TEST_REPORT_EVENT }));\r\n } catch (error) {\r\n yield put(\r\n addNotification({\r\n message: 'Duplicate serial numbers found',\r\n duration: 5000,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }\r\n}\r\n\r\nexport default function* root() {\r\n yield takeEvery(\r\n ACTIONS.VALIDATE_STRING_TEST_TOOL_STRING_ITEMS_SERIALS,\r\n callAsync,\r\n validatestringtesttoolstringitemsSerials,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_GET_STRING_TEST_TOOL_STRING_ITEMS,\r\n callAsync,\r\n getstringtesttoolstringitemsForToolstring,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_UPDATE_STRING_TEST_TOOL_STRING_ITEM,\r\n callAsync,\r\n updatestringtesttoolstringitem,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_PROJECT_MOBILISATION_TASKS,\r\n callAsync,\r\n requestMobilisationTasks,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.CREATE_STRING_TEST_REPORT,\r\n callAsync,\r\n createStringTestReport,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_STRING_TEST_REPORTS_FOR_TASK,\r\n callAsync,\r\n requestStringTestReportsForTask,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_STRING_TEST_REPORT_EVENT,\r\n callAsync,\r\n requestStringTestReportEventById,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_CREATE_SECONDARY_TEST_REPORT,\r\n callAsync,\r\n createSecondaryStringTestReport,\r\n );\r\n\r\n yield takeEvery(\r\n ACTIONS.REQUEST_FINISH_STRING_TEST_REPORT,\r\n callAsync,\r\n finishStringTestReport,\r\n );\r\n}\r\n","import { Map } from 'immutable';\r\n\r\nimport {\r\n WellStatus,\r\n WELLS_ACTIONS as WELLBORE_ACTIONS,\r\n} from 'features/wells/wells.constants';\r\n\r\nconst initialState = Map({\r\n wellStatuses: Map([\r\n [\r\n WellStatus.ONLINE_OPERATIONAL.toString(),\r\n Map({\r\n id: WellStatus.ONLINE_OPERATIONAL,\r\n name: 'Online/Operational',\r\n }),\r\n ],\r\n ]),\r\n});\r\n\r\nconst wellboresReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case WELLBORE_ACTIONS.WELLS_PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n const [wellStatuses] = action.payload;\r\n\r\n return state.setIn(\r\n ['wellStatuses'],\r\n Map(\r\n wellStatuses.map((wellStatus) => [\r\n wellStatus.id.toString(),\r\n Map({\r\n id: wellStatus.id,\r\n name: wellStatus.name,\r\n }),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellboresReducer;\r\n","export const WELL_EVENTS_PAGE_LOADED = 'WELL_EVENTS_PAGE_LOADED';\r\n","import { fromJS, List } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { WELL_EVENTS_PAGE_LOADED } from 'features/wells/events/wellEvents.constants';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst wellEventsReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case WELL_EVENTS_PAGE_LOADED:\r\n if (action.error) return state;\r\n return state.set('data', List(action.payload).map(mappers.Event.from));\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellEventsReducer;\r\n","export const WELL_PROJECT_HISTORY_PAGE_LOADED =\r\n 'WELL_PROJECT_HISTORY_PAGE_LOADED';\r\n","import { fromJS, Map, List } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { WELL_PROJECT_HISTORY_PAGE_LOADED } from 'features/wells/projects/wellProjects.constants';\r\n\r\nconst initialState = fromJS({\r\n data: Map({\r\n projects: EMPTY_LIST,\r\n }),\r\n});\r\n\r\nconst wellProjectsReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case WELL_PROJECT_HISTORY_PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n const [projects] = action.payload;\r\n\r\n return state.setIn(\r\n ['data', 'projects'],\r\n List(projects).map(mappers.Project.from),\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellProjectsReducer;\r\n","import { combineReducers } from 'redux-immutable';\r\n\r\nimport wellsReducer from 'features/wells/wells.reducer';\r\nimport wellEventsReducer from 'features/wells/events/wellEvents.reducer';\r\nimport wellProjectsReducer from 'features/wells/projects/wellProjects.reducer';\r\n\r\nconst wellReducer = combineReducers({\r\n data: wellsReducer,\r\n projects: wellProjectsReducer,\r\n events: wellEventsReducer,\r\n});\r\n\r\nexport default wellReducer;\r\n","export const FIELDS_ACTIONS = {\r\n GET_FIELDS_WITH_ORGANIZATIONS: 'GET_FIELDS_WITH_ORGANIZATIONS',\r\n FIELD_WITH_ORGANIZATIONS_PAGE_UNLOADED:\r\n 'FIELD_WITH_ORGANIZATIONS_PAGE_UNLOADED',\r\n GET_FIELD_DOCUMENTS: 'GET_FIELD_DOCUMENTS',\r\n GET_FIELD_DOCUMENT: 'GET_FIELD_DOCUMENT',\r\n FIELD_DOCUMENTS_PAGE_LOADED: 'FIELD_DOCUMENTS_PAGE_LOADED',\r\n FIELD_DOCUMENTS_PAGE_UNLOADED: 'FIELD_DOCUMENTS_PAGE_UNLOADED',\r\n DELETE_FIELD_DOCUMENT: 'DELETE_FIELD_DOCUMENT',\r\n UPLOAD_FIELD_DOCUMENT: 'UPLOAD_FIELD_DOCUMENT',\r\n UPLOAD_FIELD_DOCUMENT_MODAL_UNLOADED: 'UPLOAD_FIELD_DOCUMENT_MODAL_UNLOADED',\r\n UPDATE_FIELD_DOCUMENT: 'UPDATE_FIELD_DOCUMENT',\r\n DOWNLOAD_FIELD_DOCUMENT: 'DOWNLOAD_FIELD_DOCUMENT',\r\n};\r\n\r\nexport const FIELD_STATUS = {\r\n UNKNOWN: { id: 0, description: 'Unknown' },\r\n PRODUCING: { id: 1, description: 'Producing' },\r\n PRODUCTION_UNLIKELY: { id: 2, description: 'Production Unlikely' },\r\n PRODUCTION_LIKELY: { id: 3, description: 'Production Likely' },\r\n PRODUCTION_APPROVED: { id: 4, description: 'Production Approved' },\r\n PRODUCTION_IN_CLARIFICATION_PHASE: {\r\n id: 5,\r\n description: 'Production In Clarification Phase',\r\n },\r\n PRODUCTION_NOT_EVALUATED: { id: 6, description: 'Production Not Evaluated' },\r\n PRODUCTION_DECIDED: { id: 7, description: 'Production Decided' },\r\n INCLUDED_IN_OTHER_DISCOVERY: {\r\n id: 8,\r\n description: 'Included In Other Discovery',\r\n },\r\n SHUT_DOWN: { id: 9, description: 'Shut Down' },\r\n};\r\n\r\nexport const getStatusById = (id) => {\r\n if (!id) {\r\n return FIELD_STATUS.UNKNOWN.description;\r\n }\r\n\r\n const result = Object.values(FIELD_STATUS).find(\r\n (status) => status.id === id,\r\n )?.description;\r\n\r\n if (!result) {\r\n return FIELD_STATUS.UNKNOWN.description;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const IMPORT_SOURCE = {\r\n MANUAL: { id: 0, description: 'Manual' },\r\n NPD: { id: 1, description: 'Npd' },\r\n OGA: { id: 2, description: 'Oga' },\r\n MARINE_TRAFFIC_POSITION: { id: 3, description: 'MarineTrafficPosition' },\r\n MARINE_TRAFFIC_IMAGE: { id: 4, description: 'MarineTrafficImage' },\r\n ENS: { id: 5, description: 'Ens' },\r\n EXCEL: { id: 6, description: 'Excel' }, // todo check duplicate ids\r\n UNKNOWN: { id: 6, description: 'Unknown' }, // todo check duplicate ids\r\n API: { id: 7, description: 'Api' },\r\n};\r\n\r\nexport const getImportSourceById = (id) => {\r\n if (!id) {\r\n return IMPORT_SOURCE.UNKNOWN.description;\r\n }\r\n\r\n const result = Object.values(IMPORT_SOURCE).find(\r\n (source) => source.id === id,\r\n ).description;\r\n\r\n if (!result) {\r\n return IMPORT_SOURCE.UNKNOWN.description;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const FIELD_DETAILS_ACTIVE_TABS = {\r\n OVERVIEW: 'FIELD_OVERVIEW_TAB',\r\n DETAILS: 'FIELD_DETAILS_TAB',\r\n};\r\n","import { OrderedMap, fromJS } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { WELLS_ACTIONS as ACTIONS } from 'features/wells/wells.constants';\r\nimport { FIELDS_ACTIONS } from 'features/fields/fields.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst fieldReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_FIELDS: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((field) => [\r\n field.fieldId.toString(),\r\n mappers.Field.from(field),\r\n ]),\r\n );\r\n }\r\n\r\n case FIELDS_ACTIONS.GET_FIELDS_WITH_ORGANIZATIONS: {\r\n if (error) return state;\r\n\r\n const immutablePayload = fromJS(payload);\r\n\r\n return state.setIn([payload.fieldId.toString()], immutablePayload);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default fieldReducer;\r\n","import { fromJS, Map, List } from 'immutable';\r\n\r\nimport { TOOL_ACTIONS } from 'features/projects/tool/tool.constants';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport toolMapper from 'features/projects/tool/tool.mappers';\r\nimport mappers from 'mappers';\r\n\r\nconst initialState = fromJS({\r\n data: Map({\r\n cables: EMPTY_MAP,\r\n toolGroups: EMPTY_MAP,\r\n toolTopConnectors: EMPTY_MAP,\r\n toolBottomConnectors: EMPTY_MAP,\r\n toolSuppliers: EMPTY_MAP,\r\n toolImages: EMPTY_LIST,\r\n toolProjectHistory: EMPTY_LIST,\r\n toolImports: Map({\r\n tools: EMPTY_LIST,\r\n errors: EMPTY_LIST,\r\n }),\r\n }),\r\n search: EMPTY_MAP,\r\n});\r\n\r\nconst toolReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case TOOL_ACTIONS.DELETE_TOOL_IMAGE:\r\n case TOOL_ACTIONS.RECEIVE_TOOL_IMAGES: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'toolImages'],\r\n List(action.payload).map(toolMapper.ToolImage.from),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_TOOLS_SEARCH: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['search'],\r\n toolMapper.ToolSearch.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_TOOL_GROUPS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'toolGroups'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_TOOL_CONNECTORS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'toolConnectors'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_TOOL_TOP_CONNECTORS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'toolTopConnectors'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_TOOL_BOTTOM_CONNECTORS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'toolBottomConnectors'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_TOOL_SUPPLIERS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'toolSuppliers'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.IMPORT_TOOLS_FROM_FILE: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'toolImports'],\r\n toolMapper.ToolImport.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_CABLES: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'cables'],\r\n Map(\r\n action.payload.map((cable) => [\r\n cable.cableId.toString(),\r\n toolMapper.Cable.from(cable),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case TOOL_ACTIONS.RECEIVE_TOOL_PROJECT_HISTORY: {\r\n if (action.error) return state;\r\n const [projects] = action.payload;\r\n return state.setIn(\r\n ['data', 'toolProjectHistory'],\r\n List(projects).map(mappers.Project.from),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default toolReducer;\r\n","export const dropdownItems = [\r\n 'anchor catcher',\r\n 'bent sub',\r\n 'blast joint',\r\n 'blind pipe',\r\n 'bridge plug',\r\n 'casing brush',\r\n 'casing cutter closed',\r\n 'casing cutter open',\r\n 'casing',\r\n 'cement plug',\r\n 'cement',\r\n 'chemical injection mandrel',\r\n 'choke',\r\n 'circulating sleeve',\r\n 'circulating string',\r\n 'corod',\r\n 'crossover enlarging',\r\n 'crossover reducing',\r\n 'crossover',\r\n 'cuttings',\r\n 'default',\r\n 'downhole choke',\r\n 'drill collar',\r\n 'drill pipe',\r\n 'dual tubing hanger',\r\n 'electric submersible pump',\r\n 'expandable sand screen',\r\n 'expansion joint.2',\r\n 'expansion joint',\r\n 'external packer',\r\n 'float sub',\r\n 'flow coupling',\r\n 'gas anchor',\r\n 'gas lift dummy',\r\n 'gas lift mandrel',\r\n 'gravel pack crossover',\r\n 'gravel pack extension',\r\n 'gravel pack screen',\r\n 'heavy weight drill pipe',\r\n 'hole opener',\r\n 'holefill',\r\n 'hydraulic packer',\r\n 'jar',\r\n 'jet pump',\r\n 'landing collar',\r\n 'landing nipple',\r\n 'liner hanger',\r\n 'liner',\r\n 'locator sub',\r\n 'mandrel',\r\n 'mud motor',\r\n 'mule shoe',\r\n 'nipple',\r\n 'nogo nipple',\r\n 'on-off tool',\r\n 'open hole',\r\n 'packer dual',\r\n 'packer.blue',\r\n 'packer',\r\n 'pdc drill bit',\r\n 'perforated liner',\r\n 'perforated tubing.2',\r\n 'perforated tubing',\r\n 'perforating guns',\r\n 'perforation',\r\n 'plug',\r\n 'polished nipple',\r\n 'polished rod',\r\n 'pony rod',\r\n 'port collar',\r\n 'production packer',\r\n 'profile nipple',\r\n 'progressive cavity pump',\r\n 'pump barrel',\r\n 'pump',\r\n 'pup joint',\r\n 'reamer',\r\n 'reentry guide',\r\n 'rod pump.2',\r\n 'rod pump',\r\n 'rod.green',\r\n 'safety valve closed',\r\n 'safety valve open',\r\n 'sand control screen',\r\n 'scssv 1 sub',\r\n 'scssvsub',\r\n 'seal assembly.2',\r\n 'seal assembly',\r\n 'seal bore receptacle',\r\n 'seating nipple',\r\n 'shear tool',\r\n 'side pocket mandrel.2',\r\n 'side pocket mandrel',\r\n 'sinker bar',\r\n 'sliding sleeve.2',\r\n 'sliding sleeve',\r\n 'slotted liner',\r\n 'spiral drill collar',\r\n 'ssv closed',\r\n 'ssv open',\r\n 'stabilizer',\r\n 'subsurface safety valve closed',\r\n 'subsurface safety valve open',\r\n 'sucker rod pump.cutaway',\r\n 'sucker rod pump',\r\n 'sucker rod',\r\n 'tail joint',\r\n 'tail pipe',\r\n 'tool',\r\n 'tricone drill bit',\r\n 'tubing anchor',\r\n 'tubing hanger',\r\n 'tubing.gold',\r\n 'tubing.green',\r\n 'tubing.grey',\r\n 'tubing.red',\r\n 'tubing',\r\n 'valve closed',\r\n 'valve open',\r\n 'valve',\r\n 'wellhead',\r\n 'wireline guide.2',\r\n 'wireline guide',\r\n 'yblock',\r\n 'extras/crossover.grey',\r\n 'extras/drill bit.1',\r\n 'extras/drill bit.2',\r\n 'extras/drill bit.3',\r\n 'extras/drill bit.4',\r\n 'extras/gas lift mandrel.grey',\r\n 'extras/hole opener.1',\r\n 'extras/hole opener.2',\r\n 'extras/hole opener.3',\r\n 'extras/reamer.1',\r\n 'extras/reamer.2',\r\n 'extras/reamer.3',\r\n 'extras/tricone drill bit.grey',\r\n 'deprecated/cement_w_gradient',\r\n 'deprecated/drill bit.2',\r\n 'deprecated/drill bit.3',\r\n 'deprecated/float collar',\r\n 'deprecated/hollowareafill',\r\n 'deprecated/jet pump.ORIGINAL',\r\n 'deprecated/liner slotted',\r\n 'deprecated/liner',\r\n 'deprecated/mule shoe.2',\r\n 'deprecated/mule shoe',\r\n 'deprecated/old_perf',\r\n 'deprecated/perforation',\r\n 'deprecated/pump barrel.ORIGINAL',\r\n 'deprecated/rod pump',\r\n 'deprecated/sliding sleeve.2.ORIGINAL',\r\n 'deprecated/spiral drill collar',\r\n 'deprecated/sq',\r\n 'deprecated/ssv closed',\r\n 'deprecated/ssv open',\r\n 'deprecated/tricone drill bit.old',\r\n 'deprecated/tub_valid',\r\n 'animated/drill bit',\r\n 'animated/spiral drill collar',\r\n];\r\n\r\nexport const formID = 'Schematic_Form_1';\r\n\r\nexport const SCHEMATIC_FORM_VALUES = {\r\n COMPONENT: 'component',\r\n DESCRIPTION: 'description',\r\n START_DEPTH: 'startDepth',\r\n END_DEPTH: 'endDepth',\r\n INNER_DIAMETER: 'innerDiameter',\r\n OUTER_DIAMETER: 'outerDiameter',\r\n};\r\n\r\nexport const SCHEMATIC_COMMENT_FORM_VALUES = {\r\n COMMENT: 'comment',\r\n};\r\n\r\nexport const SCHEMATIC_VERSION_FORM_VALUES = {\r\n VERSION: 'version',\r\n};\r\n","import { Rect } from '@int/geotoolkit/util/Rect';\r\nimport { WellLogWidget } from '@int/geotoolkit/welllog/widgets/WellLogWidget';\r\nimport { LogAbstractVisual } from '@int/geotoolkit/welllog/LogAbstractVisual';\r\nimport { WellBoreNode } from '@int/geotoolkit/schematics/scene/WellBoreNode';\r\nimport { TrackType } from '@int/geotoolkit/welllog/TrackType';\r\nimport { SCHEMATIC_FORM_VALUES } from 'features/wells/schematics/helpers/constants';\r\n\r\nimport { CONVERT_SYSTEMS, UNITS } from 'app/app.constants';\r\n\r\nimport { object, string, number } from 'yup';\r\n\r\nexport let leftRectangle;\r\nexport let rightRectangle;\r\n\r\nconst units = {\r\n [CONVERT_SYSTEMS.METRIC]: {\r\n length: UNITS.METER,\r\n width: UNITS.MILLIMETER,\r\n },\r\n [CONVERT_SYSTEMS.IMPERIAL]: {\r\n length: UNITS.FEET,\r\n width: UNITS.INCHES,\r\n },\r\n};\r\n\r\nexport const setLeftRectangle = (left) => (leftRectangle = left);\r\n\r\nexport const setRightRectangle = (right) => (rightRectangle = right);\r\n\r\nconst getGeometryProperty = (geometry, propertyName) => {\r\n if (Array.isArray(geometry)) {\r\n geometry = geometry[0];\r\n }\r\n return geometry[propertyName];\r\n};\r\n\r\nexport const highlightComponentNode = (\r\n componentNode,\r\n wellBoreNode,\r\n highlightLayer,\r\n) => {\r\n if (componentNode === undefined) {\r\n return;\r\n }\r\n let bounds = componentNode.getBounds();\r\n const diameters = getGeometryProperty(\r\n componentNode.getData()['geometry'],\r\n 'diameter',\r\n );\r\n\r\n if (diameters['inner'] === undefined) {\r\n bounds = wellBoreNode.getSceneTransform().transform(bounds);\r\n bounds = highlightLayer.getSceneTransform().inverseTransform(bounds);\r\n leftRectangle.setBounds(bounds);\r\n leftRectangle.setVisible(true);\r\n } else {\r\n const width = (diameters['outer'] - diameters['inner']) / 2;\r\n let leftBounds = new Rect(\r\n bounds.getLeft(),\r\n bounds.getTop(),\r\n bounds.getLeft() + width,\r\n bounds.getTop() + bounds.getHeight(),\r\n );\r\n let rightBounds = new Rect(\r\n bounds.getRight() - width,\r\n bounds.getTop(),\r\n bounds.getRight(),\r\n bounds.getTop() + bounds.getHeight(),\r\n );\r\n leftBounds = wellBoreNode.getSceneTransform().transform(leftBounds);\r\n leftBounds = highlightLayer\r\n .getSceneTransform()\r\n .inverseTransform(leftBounds);\r\n rightBounds = wellBoreNode.getSceneTransform().transform(rightBounds);\r\n rightBounds = highlightLayer\r\n .getSceneTransform()\r\n .inverseTransform(rightBounds);\r\n leftRectangle.setBounds(leftBounds);\r\n rightRectangle.setBounds(rightBounds);\r\n leftRectangle.setVisible(true);\r\n rightRectangle.setVisible(true);\r\n }\r\n};\r\n\r\nexport const createWellLogWidget = function (wellBoreNode, geometryBounds) {\r\n const widget = new WellLogWidget({\r\n header: { visible: false },\r\n footer: { visible: false },\r\n border: { visible: false },\r\n horizontalscrollable: false,\r\n verticalscrollable: false,\r\n nodefilter: (node) =>\r\n node instanceof LogAbstractVisual || node instanceof WellBoreNode,\r\n tools: {\r\n cursortracking: {\r\n tooltip: {\r\n enabled: true,\r\n },\r\n },\r\n },\r\n }).setDepthLimits(geometryBounds.getTop(), geometryBounds.getBottom());\r\n widget\r\n .addTrack(TrackType.AnnotationTrack)\r\n .setWidth(405)\r\n .addChild([wellBoreNode]);\r\n return widget;\r\n};\r\n\r\nexport function compareNumbers(a, b) {\r\n return a.data.geometry.depth.from.value - b.data.geometry.depth.from.value;\r\n}\r\n\r\nexport function compareDates(a, b) {\r\n return new Date(a.validFrom) - new Date(b.validFrom);\r\n}\r\n\r\nexport const formDataMapper = (data) => ({\r\n name: data.component,\r\n data: {\r\n description: data.description,\r\n geometry: {\r\n depth: {\r\n from: data.startDepth,\r\n to: data.endDepth,\r\n },\r\n diameter: {\r\n outer: data.outerDiameter,\r\n inner: data.innerDiameter,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const wellBoreDataMapper = (data) => {\r\n if (data === null || data === undefined || data.length === 0) {\r\n return null;\r\n }\r\n return data.map(({ name, data }) => {\r\n const { description, geometry } = data;\r\n const { depth, diameter } = geometry;\r\n return {\r\n name,\r\n data: {\r\n description,\r\n geometry: {\r\n depth: {\r\n from: depth.from.value,\r\n to: depth.to.value,\r\n },\r\n diameter: {\r\n outer: diameter.outer.value,\r\n inner: diameter.inner.value,\r\n },\r\n },\r\n },\r\n };\r\n });\r\n};\r\n\r\nexport const initialFormValueMapper = (rawData) => {\r\n if (rawData.data === undefined || rawData === null) return null;\r\n\r\n const { data, name } = rawData;\r\n const { description, geometry } = data;\r\n const { depth, diameter } = geometry;\r\n\r\n return {\r\n [SCHEMATIC_FORM_VALUES.COMPONENT]: name,\r\n [SCHEMATIC_FORM_VALUES.DESCRIPTION]: description,\r\n [SCHEMATIC_FORM_VALUES.END_DEPTH]: depth.to,\r\n [SCHEMATIC_FORM_VALUES.INNER_DIAMETER]: diameter.inner,\r\n [SCHEMATIC_FORM_VALUES.OUTER_DIAMETER]: diameter.outer,\r\n [SCHEMATIC_FORM_VALUES.START_DEPTH]: depth.from,\r\n };\r\n};\r\n\r\nexport const newSchematicVersionComponentsMapper = (\r\n data,\r\n lengthUnit,\r\n widthUnit,\r\n) => {\r\n if (data === null || data === undefined || data.length === 0) {\r\n return [];\r\n }\r\n return data.map(({ name, data }) => {\r\n const { description, geometry } = data;\r\n const { depth, diameter } = geometry;\r\n return {\r\n name,\r\n description,\r\n depthFrom: {\r\n value: depth.from,\r\n unit: lengthUnit,\r\n roundedValue: 0,\r\n },\r\n depthTo: {\r\n value: depth.to,\r\n unit: lengthUnit,\r\n roundedValue: 0,\r\n },\r\n outerDiameter: {\r\n value: diameter.outer,\r\n unit: widthUnit,\r\n roundedValue: 0,\r\n },\r\n innerDiameter: {\r\n value: diameter.inner,\r\n unit: widthUnit,\r\n roundedValue: 0,\r\n },\r\n };\r\n });\r\n};\r\n\r\nexport const getFormSchema = () =>\r\n object().shape({\r\n [SCHEMATIC_FORM_VALUES.COMPONENT]: string()\r\n .required('Component name is required')\r\n .nullable(),\r\n [SCHEMATIC_FORM_VALUES.START_DEPTH]: number().required(\r\n 'Start depth is required',\r\n ),\r\n [SCHEMATIC_FORM_VALUES.END_DEPTH]: number()\r\n .required('End depth is required')\r\n .test(\r\n 'greater-than-start-depth',\r\n 'End depth must be greater than Start depth',\r\n function (value) {\r\n return value > this.parent[SCHEMATIC_FORM_VALUES.START_DEPTH];\r\n },\r\n ),\r\n [SCHEMATIC_FORM_VALUES.INNER_DIAMETER]: number().required(\r\n 'Inner Diameter is required',\r\n ),\r\n [SCHEMATIC_FORM_VALUES.OUTER_DIAMETER]: number()\r\n .required('Outer Diameter is required')\r\n .test(\r\n 'greater-than-outer-diameter',\r\n 'Outer Diameter must be greater than Inner Diameter',\r\n function (value) {\r\n return value > this.parent[SCHEMATIC_FORM_VALUES.INNER_DIAMETER];\r\n },\r\n ),\r\n });\r\n\r\nexport const schematicUoM = (unitSystem) => {\r\n if (unitSystem === undefined) return units[CONVERT_SYSTEMS.METRIC];\r\n return units[unitSystem];\r\n};\r\n","import { Map, OrderedMap } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { WELLS_ACTIONS as ACTIONS } from 'features/wells/wells.constants';\r\nimport {\r\n compareDates,\r\n compareNumbers,\r\n wellBoreDataMapper,\r\n} from 'features/wells/schematics/helpers/utils';\r\n\r\nconst initialState = Map({\r\n pageParams: Map({\r\n currentPage: 1,\r\n pageSize: 50,\r\n }),\r\n pageResults: EMPTY_MAP,\r\n wellboreIntData: {\r\n data: null,\r\n isFetching: false,\r\n error: null,\r\n },\r\n elementsData: [],\r\n});\r\n\r\nconst wellboreReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_WELLBORE: {\r\n if (error) return state;\r\n\r\n return state.setIn(\r\n ['pageResults', payload.wellboreId.toString()],\r\n mappers.Wellbore.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_WELLBORES_PAGE: {\r\n if (error) return state;\r\n\r\n const { results: wellbores, ...pageParams } = payload;\r\n\r\n return state\r\n .set('pageParams', mappers.PageParams.from(pageParams))\r\n .set(\r\n 'pageResults',\r\n OrderedMap(\r\n wellbores.map((wellbore) => [\r\n wellbore.wellboreId.toString(),\r\n mappers.Wellbore.from(wellbore),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case ACTIONS.UPDATE_WELLBORE: {\r\n if (error) return state;\r\n\r\n const { wellboreId } = action;\r\n\r\n return state.setIn(['pageResults', wellboreId.toString()], payload);\r\n }\r\n\r\n case ACTIONS.CLEAR_WELLBORES: {\r\n return initialState;\r\n }\r\n\r\n case ACTIONS.WELLBORE_INT_FETCH_STARTED: {\r\n return state.set('wellboreIntData', {\r\n data: null,\r\n isFetching: true,\r\n error: null,\r\n });\r\n }\r\n\r\n case ACTIONS.WELLBORE_INT_FETCH_SUCCEEDED: {\r\n const schematicVersions = payload ?? [];\r\n const schematicVersionsSorted = schematicVersions.sort(compareDates);\r\n const versionsAndComponentsSorted = schematicVersionsSorted.map(\r\n (version) => ({\r\n ...version,\r\n components: wellBoreDataMapper(\r\n version.components.sort(compareNumbers),\r\n ),\r\n }),\r\n );\r\n\r\n return state.set('wellboreIntData', {\r\n data: versionsAndComponentsSorted,\r\n isFetching: false,\r\n error: null,\r\n });\r\n }\r\n\r\n case ACTIONS.WELLBORE_INT_FETCH_FAILED: {\r\n return state.set('wellboreIntData', {\r\n data: null,\r\n isFetching: false,\r\n error: payload,\r\n });\r\n }\r\n\r\n case ACTIONS.SCHEMATIC_CREATE_SUCCEEDED: {\r\n const schematicData = state.get('wellboreIntData').data;\r\n const previousComponentsData =\r\n schematicData !== null && schematicData.length > 0\r\n ? schematicData[schematicData.length - 1].components\r\n : [];\r\n const unsortedComponentsData =\r\n previousComponentsData !== null\r\n ? [...previousComponentsData, payload]\r\n : [payload];\r\n const sortedComponentsData = unsortedComponentsData.sort(compareNumbers);\r\n if (schematicData.length === 0) {\r\n return state.set('wellboreIntData', {\r\n data: [{ components: sortedComponentsData }],\r\n isFetching: false,\r\n error: null,\r\n });\r\n }\r\n const newSchematicData = schematicData.map((version, index) => {\r\n if (schematicData.length === 1 || schematicData.length - 1 === index) {\r\n return { ...version, components: sortedComponentsData };\r\n }\r\n return version;\r\n });\r\n\r\n return state.set('wellboreIntData', {\r\n data: newSchematicData,\r\n isFetching: false,\r\n error: null,\r\n });\r\n }\r\n\r\n case ACTIONS.SCHEMATIC_COMPONENT_DELETE_STARTED: {\r\n const schematicData = state.get('wellboreIntData').data;\r\n const previousComponentsData =\r\n schematicData !== null && schematicData.length > 0\r\n ? schematicData[schematicData.length - 1].components\r\n : [];\r\n const newComponentsData =\r\n previousComponentsData.length !== 0\r\n ? previousComponentsData.filter(\r\n (_component, index) => index !== payload,\r\n )\r\n : previousComponentsData;\r\n\r\n const newSchematicData = schematicData.map((version, index) => {\r\n if (schematicData.length - 1 === index) {\r\n return { ...version, components: newComponentsData };\r\n }\r\n return version;\r\n });\r\n\r\n return state.set('wellboreIntData', {\r\n data: newSchematicData,\r\n isFetching: false,\r\n error: null,\r\n });\r\n }\r\n\r\n case ACTIONS.SCHEMATIC_COMPONENT_UPDATE_STARTED: {\r\n const { componentData, componentIndex } = payload;\r\n const schematicData = state.get('wellboreIntData').data;\r\n const previousComponentsData =\r\n schematicData !== null && schematicData.length > 0\r\n ? schematicData[schematicData.length - 1].components\r\n : [];\r\n const newComponentsData =\r\n previousComponentsData.length !== 0\r\n ? previousComponentsData.map((component, index) => {\r\n if (index !== componentIndex) {\r\n return component;\r\n }\r\n return componentData;\r\n })\r\n : previousComponentsData;\r\n const newSchematicData = schematicData.map((version, index) => {\r\n if (schematicData.length - 1 === index) {\r\n return { ...version, components: newComponentsData };\r\n }\r\n return version;\r\n });\r\n\r\n return state.set('wellboreIntData', {\r\n data: newSchematicData,\r\n isFetching: false,\r\n error: null,\r\n });\r\n }\r\n\r\n case ACTIONS.LOAD_ALL_ELEMENTS_LIST:\r\n if (error) return state;\r\n\r\n return state.set('elementsData', payload);\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellboreReducer;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst projectReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case PROJECTS_ACTIONS.RECEIVE_PROJECT: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.projectId.toString(),\r\n mappers.Project.from(payload),\r\n );\r\n }\r\n\r\n case PROJECTS_ACTIONS.RECEIVE_PROJECTS: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((project) => [\r\n project.projectId.toString(),\r\n mappers.Project.from(project),\r\n ]),\r\n );\r\n }\r\n\r\n case PROJECTS_ACTIONS.CLEAR_PROJECTS: {\r\n return initialState;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectReducer;\r\n","import moment from 'moment';\r\nimport last from 'lodash/last';\r\nimport initial from 'lodash/initial';\r\nimport { fromJS, Map } from 'immutable';\r\n\r\nexport const initialDocument = () => {\r\n return {\r\n id: null,\r\n name: '',\r\n category: 1,\r\n extension: null,\r\n wellbore: { id: null },\r\n created: null,\r\n modified: null,\r\n };\r\n};\r\n\r\nexport const toFileFromDTO = ({\r\n fileId,\r\n name,\r\n category,\r\n wellboreId,\r\n extension,\r\n created,\r\n modified,\r\n taskId,\r\n fullName,\r\n createdByUserId,\r\n categoryName,\r\n projectId,\r\n}) => {\r\n return fromJS({\r\n id: fileId,\r\n name: name,\r\n category: category,\r\n extension: extension,\r\n wellbore: { id: wellboreId },\r\n created: moment(created),\r\n modified: modified,\r\n taskId: taskId,\r\n fullName: fullName,\r\n createdByUserId,\r\n fileId,\r\n categoryName,\r\n projectId,\r\n });\r\n};\r\n\r\nconst initialMetaFromFilename = ({ name }, initialCategory) => {\r\n const parts = name.split('.');\r\n\r\n return Map({\r\n name: initial(parts).join('.'),\r\n category: initialCategory.id,\r\n extension: `.${last(parts)}`,\r\n });\r\n};\r\n\r\nconst wellboreFileMappers = {\r\n WellboreFile: {\r\n initial: initialDocument,\r\n from: toFileFromDTO,\r\n Meta: {\r\n initial: initialMetaFromFilename,\r\n },\r\n },\r\n toFileFromDTO,\r\n initialDocument,\r\n};\r\n\r\nexport default wellboreFileMappers;\r\n","export const WELLBORE_FILE_ACTIONS = {\r\n UPDATE_WELLBORE_FILE: 'UPDATE_WELLBORE_FILE',\r\n UPLOAD_WELLBORE_FILE: 'UPLOAD_WELLBORE_FILE',\r\n DELETE_WELLBORE_FILE: 'DELETE_WELLBORE_FILE',\r\n RECEIVE_WELLBORE_FILE: 'RECEIVE_WELLBORE_FILE',\r\n RECEIVE_WELLBORE_FILES: 'RECEIVE_WELLBORE_FILES',\r\n DOWNLOAD_WELLBORE_FILE: 'DOWNLOAD_WELLBORE_FILE',\r\n UPLOAD_FILE_MODAL_UNLOADED: 'UPLOAD_FILE_MODAL_UNLOADED',\r\n SET_DOCUMENT_CATEGORY_FILTER: 'SET_DOCUMENT_CATEGORY_FILTER',\r\n WELLBORE_FILES_PAGE_LOADED: 'WELLBORE_FILES_PAGE_LOADED',\r\n WELLBORE_FILES_PAGE_UNLOADED: 'WELLBORE_FILES_PAGE_UNLOADED',\r\n};\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport wellboreFileMapper from 'features/wells/wellboreFiles.mappers';\r\nimport { WELLBORE_FILE_ACTIONS } from 'features/wells/wellboreFiles.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst wellboreFileReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case WELLBORE_FILE_ACTIONS.RECEIVE_WELLBORE_FILE: {\r\n if (error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n payload.fileId.toString(),\r\n wellboreFileMapper.WellboreFile.from(payload),\r\n );\r\n }\r\n\r\n case WELLBORE_FILE_ACTIONS.DELETE_WELLBORE_FILE: {\r\n if (error) return state;\r\n\r\n const { wellboreFileId } = action;\r\n\r\n return state.delete(wellboreFileId.toString());\r\n }\r\n\r\n case WELLBORE_FILE_ACTIONS.RECEIVE_WELLBORE_FILES: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((wellboreFile) => [\r\n wellboreFile.fileId.toString(),\r\n wellboreFileMapper.WellboreFile.from(wellboreFile),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellboreFileReducer;\r\n","export const OPERATIONS_ACTIONS = {\r\n CLEAR_OPERATIONS: 'CLEAR_OPERATIONS',\r\n SEARCH_OPERATIONS: 'SEARCH_OPERATIONS',\r\n RECEIVE_OPERATION: 'RECEIVE_OPERATION',\r\n RECEIVE_OPERATIONS: 'RECEIVE_OPERATIONS',\r\n RECEIVE_OPERATIONS_LIVE_PROJECTS: 'RECEIVE_OPERATIONS_LIVE_PROJECTS',\r\n UPDATE_CHEETAH_JOB: 'UPDATE_CHEETAH_JOB',\r\n RECEIVE_CHEETAH_JOB: 'RECEIVE_CHEETAH_JOB',\r\n SEARCH_CHEETAH_JOBS: 'SEARCH_CHEETAH_JOBS',\r\n RECEIVE_CHEETAH_JOBS: 'RECEIVE_CHEETAH_JOBS',\r\n UPDATE_PROJECT_CHEETAH_JOB_STATUS: 'UPDATE_PROJECT_CHEETAH_JOB_STATUS',\r\n};\r\n\r\nexport const OPERATIONS_VIEWS = {\r\n TILES: 'TILES',\r\n LIST: 'LIST',\r\n};\r\n\r\nexport const STATE = {\r\n PAGE_PARAMS: 'pageParams',\r\n PAGE_RESULTS: 'pageResults',\r\n};\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport operationsMappers from 'features/operations/operations.mappers';\r\nimport { OPERATIONS_ACTIONS } from 'features/operations/operations.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst cheetahJobReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n\r\n switch (type) {\r\n case OPERATIONS_ACTIONS.RECEIVE_CHEETAH_JOB: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n payload.id.toString(),\r\n operationsMappers.CheetahJob.from(payload),\r\n );\r\n }\r\n\r\n case OPERATIONS_ACTIONS.RECEIVE_CHEETAH_JOBS: {\r\n if (action.error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((cheetahJob) => [\r\n cheetahJob.id.toString(),\r\n operationsMappers.CheetahJob.from(cheetahJob),\r\n ]),\r\n );\r\n }\r\n\r\n case OPERATIONS_ACTIONS.CLEAR_OPERATIONS: {\r\n return initialState;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default cheetahJobReducer;\r\n","export const FACILITIES_ACTIONS = {\r\n GET_OPERATORS: 'GET_OPERATORS',\r\n FACILITIES_PAGE_LOADED: 'FACILITIES_PAGE_LOADED',\r\n GET_FACILITIES_FOR_ORG: 'GET_FACILITIES_FOR_ORG',\r\n RECEIVE_FACILITIES_PAGE: 'RECEIVE_FACILITIES_PAGE',\r\n UPDATE_FACILITIES_FILTER: 'UPDATE_FACILITIES_FILTER',\r\n GET_FACILITY_BY_ID: 'GET_FACILITY_BY_ID',\r\n GET_FACILITY_IMAGE: 'GET_FACILITY_IMAGE',\r\n GET_FACILITY_LOCATION: 'GET_FACILITY_LOCATION',\r\n GET_FACILITY_DECKS: 'GET_FACILITY_DECKS',\r\n};\r\n\r\nexport const FacilityStatus = {\r\n Unknown: 0,\r\n Abandoned: 1,\r\n Decommissioned: 2,\r\n Fabrication: 3,\r\n Future: 4,\r\n InService: 5,\r\n Installation: 6,\r\n LaidUp: 7,\r\n Removed: 8,\r\n};\r\n","import { Map, List, OrderedMap } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport { FACILITIES_ACTIONS as ACTIONS } from 'features/facilities/facilities.constants';\r\n\r\nconst initialState = Map({\r\n facilityById: EMPTY_MAP,\r\n operators: EMPTY_LIST,\r\n pageParams: EMPTY_MAP,\r\n pageResults: EMPTY_MAP,\r\n});\r\n\r\nconst facilitiesReducer = (state = initialState, action = {}) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_FACILITIES_PAGE: {\r\n if (error) return state;\r\n\r\n const { results: facilities, ...pageParams } = payload;\r\n\r\n return state\r\n .set('pageParams', mappers.PageParams.from(pageParams))\r\n .set(\r\n 'pageResults',\r\n OrderedMap(\r\n facilities.map((facility) => [\r\n facility.facilityId.toString(),\r\n mappers.Facility.from(facility),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case ACTIONS.GET_OPERATORS: {\r\n if (action.error) return state;\r\n\r\n return state.set('operators', List(action.payload));\r\n }\r\n\r\n case ACTIONS.GET_FACILITY_BY_ID: {\r\n if (action.error) return state;\r\n\r\n return state.set('facilityById', Map(action.payload));\r\n }\r\n\r\n case ACTIONS.GET_FACILITY_DECKS: {\r\n if (action.error) return state;\r\n return state.set('decks', List(action.payload));\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default facilitiesReducer;\r\n","export const FACILITIES_PROJECTS_ACTIONS = {\r\n FACILITIES_PROJECTS_PAGE_LOADED: 'FACILITIES_PROJECTS_PAGE_LOADED',\r\n};\r\n","import { Map, List } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { FACILITIES_PROJECTS_ACTIONS as ACTIONS } from 'features/facilities/projects/facilitiesProjects.constants';\r\n\r\nconst initialState = Map({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst facilitiesProjectsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ACTIONS.FACILITIES_PROJECTS_PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n const [projects] = action.payload;\r\n return state.set('data', List(projects).map(mappers.Project.from));\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default facilitiesProjectsReducer;\r\n","import moment from 'moment';\r\nimport last from 'lodash/last';\r\nimport initial from 'lodash/initial';\r\nimport { fromJS, Map } from 'immutable';\r\n\r\nexport const initialDocument = () => {\r\n return {\r\n id: null,\r\n name: '',\r\n category: 1,\r\n extension: null,\r\n project: { id: null },\r\n wellbore: { id: null },\r\n created: null,\r\n modified: null,\r\n };\r\n};\r\n\r\nexport const toFileFromDTO = ({\r\n facilityFileId,\r\n name,\r\n category,\r\n projectId,\r\n extension,\r\n created,\r\n modified,\r\n taskId,\r\n fullName,\r\n createdByUserId,\r\n categoryName,\r\n editDocumentUrl,\r\n comments,\r\n facilityId,\r\n fileId,\r\n}) => {\r\n return fromJS({\r\n id: facilityFileId,\r\n name: name,\r\n category: category,\r\n extension: extension,\r\n project: { id: projectId },\r\n created: moment(created),\r\n modified: modified,\r\n taskId: taskId,\r\n fullName: fullName,\r\n createdByUserId,\r\n fileId,\r\n projectId,\r\n categoryName,\r\n editDocumentUrl,\r\n comments,\r\n facilityId,\r\n facilityFileId,\r\n });\r\n};\r\n\r\nconst initialMetaFromFilename = ({ name }, initialCategory) => {\r\n const parts = name.split('.');\r\n\r\n return Map({\r\n name: initial(parts).join('.'),\r\n category: initialCategory.id,\r\n extension: `.${last(parts)}`,\r\n });\r\n};\r\n\r\nconst documentMappers = {\r\n Document: {\r\n initial: initialDocument,\r\n from: toFileFromDTO,\r\n Meta: {\r\n initial: initialMetaFromFilename,\r\n },\r\n },\r\n toFileFromDTO,\r\n initialDocument,\r\n};\r\n\r\nexport default documentMappers;\r\n","export const FACILITY_DOCUMENTS_ACTIONS = {\r\n DOWNLOAD_FACILITY_FILE: 'DOWNLOAD_FACILITY_FILE',\r\n UPDATE_FACILITY_FILE: 'UPDATE_FACILITY_FILE',\r\n UPLOAD_FACILITY_FILE: 'UPLOAD_FACILITY_FILE',\r\n DELETE_FACILITY_FILE: 'DELETE_FACILITY_FILE',\r\n RECEIVE_FACILITY_FILE: 'RECEIVE_FACILITY_FILE',\r\n RECEIVE_FACILITY_FILES: 'RECEIVE_FACILITY_FILES',\r\n UPLOAD_FILE_MODAL_UNLOADED: 'UPLOAD_FILE_MODAL_UNLOADED',\r\n SET_DOCUMENT_CATEGORY_FILTER: 'SET_DOCUMENT_CATEGORY_FILTER',\r\n PROJECT_FACILITY_PAGE_LOADED: 'PROJECT_FACILITY_PAGE_LOADED',\r\n PROJECT_FACILITY_PAGE_UNLOADED: 'PROJECT_FACILITY_PAGE_UNLOADED',\r\n};\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport documentMapper from 'features/facilities/documents/facilityDocuments.mappers';\r\nimport { FACILITY_DOCUMENTS_ACTIONS } from 'features/facilities/documents/facilityDocuments.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst facilityDocumentsReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case FACILITY_DOCUMENTS_ACTIONS.RECEIVE_FACILITY_FILE: {\r\n if (error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n payload.facilityFileId.toString(),\r\n documentMapper.Document.from(payload),\r\n );\r\n }\r\n\r\n case FACILITY_DOCUMENTS_ACTIONS.DELETE_FACILITY_FILE: {\r\n if (error) return state;\r\n\r\n const { facilityFileId } = action;\r\n\r\n return state.delete(facilityFileId.toString());\r\n }\r\n\r\n case FACILITY_DOCUMENTS_ACTIONS.RECEIVE_FACILITY_FILES: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((file) => [\r\n file.facilityFileId.toString(),\r\n documentMapper.Document.from(file),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default facilityDocumentsReducer;\r\n","import { combineReducers } from 'redux-immutable';\r\n\r\nimport facilitiesReducer from 'features/facilities/facilities.reducer';\r\nimport facilitiesProjectsReducer from 'features/facilities/projects/facilitiesProjects.reducer';\r\nimport facilityDocumentsReducer from 'features/facilities/documents/facilityDocuments.reducer';\r\n\r\nconst facilityReducer = combineReducers({\r\n facilities: facilitiesReducer,\r\n facilityProjects: facilitiesProjectsReducer,\r\n facilityDocuments: facilityDocumentsReducer,\r\n});\r\n\r\nexport default facilityReducer;\r\n","export const EQUIPMENT_DETAILS_ACTIONS = {\r\n PAGE_LOADED: 'PAGE_LOADED',\r\n UNLOAD_TOOL: 'UNLOAD_TOOL',\r\n UNLOAD_CABLE: 'UNLOAD_CABLE',\r\n};\r\n\r\nexport const SURFACE_EQUIPMENT_DETAILS_ACTIONS = {\r\n PAGE_LOADED: 'SURFACE_EQUIPMENT_DETAILS_PAGE_LOADED',\r\n UNLOAD_TOOL: 'SURFACE_EQUIPMENT_DETAILS_UNLOAD_TOOL',\r\n};\r\n\r\nexport const EQUIPMENT_DETAILS_ACTIVE_TABS = {\r\n ASSETS: 'EQUIPMENT_ASSETS_TAB',\r\n DETAILS: 'EQUIPMENT_DETAILS_TAB',\r\n};\r\n","import { Map, List, fromJS } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { EQUIPMENT_ACTIONS } from './equipment.constants';\r\nimport toolMapper, {\r\n surfaceEquipmentItemDto,\r\n} from 'features/projects/tool/tool.mappers';\r\nimport {\r\n EQUIPMENT_DETAILS_ACTIONS,\r\n SURFACE_EQUIPMENT_DETAILS_ACTIONS,\r\n} from 'features/equipment/details/equipmentDetails.constants';\r\nimport mappers from '../../mappers';\r\nimport toolstringMappers from 'features/projects/tasks/task/toolstring/toolstring.mappers';\r\n\r\nconst initialState = Map({\r\n tool: EMPTY_MAP,\r\n tools: EMPTY_MAP,\r\n cable: EMPTY_MAP,\r\n cables: EMPTY_MAP,\r\n toolGroups: EMPTY_MAP,\r\n createdTool: EMPTY_MAP,\r\n bhaTemplates: EMPTY_MAP,\r\n assetHistory: EMPTY_MAP,\r\n toolSuppliers: EMPTY_MAP,\r\n toolAssemblies: EMPTY_MAP,\r\n toolConnectors: EMPTY_MAP,\r\n surfaceEquipment: EMPTY_MAP,\r\n surfaceEquipments: EMPTY_MAP,\r\n surfaceEquipmentCategories: EMPTY_MAP,\r\n bhaTemplateToEdit: EMPTY_MAP,\r\n bhaTemplateSectionsToEdit: EMPTY_MAP,\r\n assets: EMPTY_MAP,\r\n cableTestDetails: EMPTY_MAP,\r\n equipmentTemplates: EMPTY_MAP,\r\n});\r\n\r\nconst equipmentReducer = (state = initialState, action = {}) => {\r\n const { type } = action;\r\n\r\n switch (type) {\r\n case EQUIPMENT_ACTIONS.TOOL_GROUPS_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['toolGroups'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.TOOLS_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['tools'], toolMapper.ToolSearch.from(action.payload));\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.TOOL_ASSEMBLIES_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['toolAssemblies'],\r\n toolMapper.ToolAssemblies.from(action.payload),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.SUPPLIERS_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['toolSuppliers'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.CABLES_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['cables'],\r\n Map(\r\n action.payload.map((cable) => [\r\n cable.cableId.toString(),\r\n toolMapper.Cable.from(cable),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.CABLES_LOADED_BY_PROJECTID: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['cables'],\r\n Map(\r\n action.payload.map((cable) => [\r\n cable.cableId.toString(),\r\n toolMapper.Cable.from(cable),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.BHA_TEMPLATES_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['bhaTemplates'],\r\n Map(\r\n action.payload.map((template) => [\r\n template.toolStringId.toString(),\r\n toolMapper.bhaTemplate.from(template),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.EQUIPMENT_TEMPLATES_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['equipmentTemplates'],\r\n Map(\r\n action.payload.map((template) => [\r\n template.equipmentTemplateId.toString(),\r\n toolMapper.EquipmentTemplate.from(template),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.PAGE_UNLOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['tools'], EMPTY_MAP);\r\n }\r\n\r\n case EQUIPMENT_DETAILS_ACTIONS.PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n if (action.payload) {\r\n return state.setIn(['tool'], toolMapper.Tool.from(action.payload));\r\n } else return state;\r\n }\r\n\r\n case EQUIPMENT_DETAILS_ACTIONS.UNLOAD_TOOL: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['tool'], EMPTY_MAP);\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.TOOL_CONNECTORS_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['toolConnectors'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['surfaceEquipments'],\r\n List(action.payload).map(surfaceEquipmentItemDto),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_BY_CATEGORIES: {\r\n if (action.error) return state;\r\n return state.setIn(\r\n ['surfaceEquipmentCategories'],\r\n List(action.payload).map(surfaceEquipmentItemDto),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.RECEIVE_CABLE_TEST_DETAILS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['cableTestDetails'],\r\n toolMapper.Cable.from(action.payload),\r\n );\r\n }\r\n\r\n case SURFACE_EQUIPMENT_DETAILS_ACTIONS.PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n if (action.payload) {\r\n return state.setIn(\r\n ['surfaceEquipment'],\r\n toolMapper.SurfaceEquipment.from(action.payload),\r\n );\r\n } else return state;\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS: {\r\n if (action.error) return state;\r\n return state.setIn(\r\n ['surfaceEquipmentGroups'],\r\n toolMapper.ToolSearchFilter.from(action.payload),\r\n );\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.LOAD_ASSET_HISTORY: {\r\n if (action.error) return state;\r\n return state.setIn(['assetHistory'], fromJS(action.payload));\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.CREATE_ASSET_HISTORY: {\r\n if (action.error) return state;\r\n return state.setIn(['assetHistory'], fromJS(action.payload));\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.LOAD_CABLE: {\r\n if (action.error) return state;\r\n return state.setIn(['cable'], fromJS(action.payload));\r\n }\r\n\r\n case EQUIPMENT_DETAILS_ACTIONS.UNLOAD_CABLE: {\r\n return state.setIn(['cable'], EMPTY_MAP);\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.RECEIVE_BHA_TEMPLATE_FOR_EDITING: {\r\n if (action.error) return state;\r\n\r\n const toolstringTest = toolstringMappers.Toolstring.from(action.payload);\r\n // clean mapping of toolMapper.bhaTemplate.from(action.payload) throws errors (only) on assemblies thus toJS/fromJS\r\n return state.setIn(['bhaTemplateToEdit'], toolstringTest);\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.RECEIVE_BHA_TEMPLATE_SECTIONS_FOR_EDITING: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['bhaTemplateSectionsToEdit'], fromJS(action.payload));\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.UNLOAD_BHA_TEMPLATE_FOR_EDITING: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['bhaTemplateToEdit'], EMPTY_MAP);\r\n }\r\n\r\n case EQUIPMENT_ACTIONS.RECEIVE_EQUIPMENT_ASSETS: {\r\n if (action.error) return state;\r\n\r\n return state.set('assets', mappers.equipmentAsset.from(action.payload));\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default equipmentReducer;\r\n","import { Map } from 'immutable';\r\n\r\nconst DashboardMapper = {\r\n from: Map,\r\n};\r\n\r\nconst CurveMapper = (curve) => {\r\n return Map({\r\n ...curve,\r\n });\r\n};\r\n\r\nconst dashboardMappers = {\r\n Dashboard: DashboardMapper,\r\n Curve: {\r\n from: CurveMapper,\r\n },\r\n};\r\n\r\nexport default dashboardMappers;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport dashboardMappers from 'features/projects/dashboard/dashboard.mapper';\r\nimport { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst dashboardReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case DASHBOARDS_ACTIONS.RECEIVE_DASHBOARDS: {\r\n if (action.error) return state;\r\n\r\n return OrderedMap(\r\n action.payload.map((dashboard) => [\r\n dashboard.dashboardId.toString(),\r\n dashboardMappers.Dashboard.from(dashboard),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default dashboardReducer;\r\n","export const CREATE_SMLOCATION_MODAL = 'CREATE_SMLOCATION_MODAL';\r\n\r\nexport const SMLOCATION_CONFIG_ACTIONS = {\r\n GET_SMLOCATIONS: 'GET_SMLOCATIONS',\r\n RECEIVE_SMLOCATIONS: 'RECEIVE_SMLOCATIONS',\r\n RECEIVE_SMLOCATION: 'RECEIVE_SMLOCATION',\r\n CREATE_SMLOCATION: 'CREATE_SMLOCATION',\r\n UPDATE_SMLOCATION: 'UPDATE_SMLOCATION',\r\n DELETE_SMLOCATION: 'DELETE_SMLOCATION',\r\n};\r\n\r\nexport const SMLocationCreateFormFields = {\r\n NAME: 'name',\r\n};\r\n","import { Map } from 'immutable';\r\n\r\nconst smLocationFromDto = (smLocation) => {\r\n return Map({\r\n ...smLocation,\r\n });\r\n};\r\n\r\nconst smlocationMappers = {\r\n SMLocation: {\r\n from: smLocationFromDto,\r\n },\r\n};\r\n\r\nexport default smlocationMappers;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { SMLOCATION_CONFIG_ACTIONS as ACTIONS } from 'features/data-exchange/winch/smlocation.constants';\r\nimport smlocationMappers from 'features/data-exchange/winch/smlocation.mappers';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst smLocationReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.DELETE_SMLOCATION: {\r\n if (error) return state;\r\n\r\n const { smLocationId } = action;\r\n\r\n return state.delete(smLocationId.toString());\r\n }\r\n\r\n case ACTIONS.RECEIVE_SMLOCATION: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.smLocationId.toString(),\r\n smlocationMappers.SMLocation.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_SMLOCATIONS: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((smLocation) => [\r\n smLocation.smLocationId.toString(),\r\n smlocationMappers.SMLocation.from(smLocation),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default smLocationReducer;\r\n","import mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { WELLS_ACTIONS as ACTIONS } from 'features/wells/wells.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst wellboreTrajectoryReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_WELLBORE_TRAJECTORY: {\r\n if (error) return state;\r\n\r\n const { wellboreId } = action;\r\n\r\n return state.set(wellboreId.toString(), mappers.Trajectory.from(payload));\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellboreTrajectoryReducer;\r\n","import { fromJS, OrderedMap, Map } from 'immutable';\r\nimport { arrayMove } from 'react-sortable-hoc';\r\n\r\nimport { APP_ACTIONS, EMPTY_MAP } from 'app/app.constants';\r\nimport activitiesMappers from 'features/projects/activities/activities.mappers';\r\nimport { ACTIVITIES_ACTIONS as ACTIONS } from 'features/projects/activities/activities.constants';\r\n\r\nconst initialState = Map({\r\n allActivities: EMPTY_MAP,\r\n});\r\n\r\nconst activityReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.GET_ALL_PROJECT_ACTIVITIES: {\r\n if (error) return state;\r\n\r\n const activities = OrderedMap(\r\n payload.map((activity) => [\r\n activity.activityId.toString(),\r\n activitiesMappers.Activity.from(activity),\r\n ]),\r\n );\r\n\r\n return state.set(\r\n 'allActivities',\r\n activities.groupBy((activity) => activity.get('taskId').toString()),\r\n );\r\n }\r\n\r\n case ACTIONS.GET_PROJECT_ACTIVITIES: {\r\n if (error) return state;\r\n\r\n const activities = OrderedMap(\r\n payload.map((activity) => [\r\n activity.activityId.toString(),\r\n activitiesMappers.Activity.from(activity),\r\n ]),\r\n );\r\n\r\n return activities.groupBy((activity) =>\r\n activity.get('taskId').toString(),\r\n );\r\n }\r\n\r\n case ACTIONS.GET_TASK_ACTIVITIES: {\r\n if (error) return state;\r\n\r\n const { taskId } = action;\r\n\r\n return state.set(\r\n taskId.toString(),\r\n OrderedMap(\r\n payload.map((activity) => [\r\n activity.activityId.toString(),\r\n activitiesMappers.Activity.from(activity),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case ACTIONS.UPDATE_ACTIVITY: {\r\n if (error) return state;\r\n\r\n const { taskId, activityId } = payload;\r\n\r\n return state.setIn(\r\n [taskId.toString(), activityId.toString()],\r\n activitiesMappers.Activity.from(payload),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.ASYNC_START: {\r\n const { subtype } = action;\r\n\r\n switch (subtype) {\r\n case ACTIONS.BACKEND_SORT_ACTIVITIES:\r\n case ACTIONS.BACKEND_SORT_ACTIVITIES_NO_NOTIFICATION: {\r\n const { taskId, oldIndex, newIndex } = action;\r\n\r\n return state.update(taskId.toString(), (activities) =>\r\n fromJS(\r\n arrayMove(activities.valueSeq().toArray(), oldIndex, newIndex),\r\n ),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default activityReducer;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/wells/sections/wellboreSection.constants';\r\nimport wellboreSectionMappers from 'features/wells/sections/wellboreSection.mappers';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst wellboreSectionReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.DELETE_WELLBORE_SECTION: {\r\n if (error) return state;\r\n\r\n const { wellboreSectionId } = action;\r\n\r\n return state.delete(wellboreSectionId.toString());\r\n }\r\n\r\n case ACTIONS.RECEIVE_WELLBORE_SECTION: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.wellboreSectionId.toString(),\r\n wellboreSectionMappers.WellboreSection.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_WELLBORE_SECTIONS: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((wellboreSection) => [\r\n wellboreSection.wellboreSectionId.toString(),\r\n wellboreSectionMappers.WellboreSection.from(wellboreSection),\r\n ]),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_WELLBORE_SECTION_NIPPLES: {\r\n if (error) return state;\r\n\r\n const { wellboreSectionId, wellboreSectionNipples } = payload;\r\n return state.setIn(\r\n [wellboreSectionId.toString(), 'wellboreSectionNipples'],\r\n wellboreSectionMappers.WellboreSectionNipples.from(\r\n wellboreSectionNipples,\r\n ),\r\n );\r\n }\r\n\r\n case ACTIONS.DELETE_WELLBORE_SECTION_NIPPLE: {\r\n if (error) return state;\r\n\r\n const { wellboreSectionId, wellboreSectionNippleId } = action;\r\n\r\n return state.deleteIn([\r\n wellboreSectionId.toString(),\r\n 'wellboreSectionNipples',\r\n wellboreSectionNippleId.toString(),\r\n ]);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellboreSectionReducer;\r\n","export const ACTIONS = {\r\n REQUEST_GET_WELLBORE_ELEMENTS: 'REQUEST_GET_WELLBORE_ELEMENTS',\r\n REQUEST_GET_WELLBORE_ELEMENTS_FROM_WELLCOM:\r\n 'REQUEST_GET_WELLBORE_ELEMENTS_FROM_WELLCOM',\r\n};\r\n","import { Map, OrderedMap } from 'immutable';\r\n\r\nexport const wellboreRevisionFromDto = ({ wellboreElements, ...rest }) =>\r\n Map({\r\n wellboreElements: wellboreElementsFromDto(wellboreElements),\r\n ...rest,\r\n });\r\n\r\nexport const wellboreElementsFromDto = (wellboreElements) =>\r\n OrderedMap(\r\n wellboreElements.map((wellboreElement) => [\r\n wellboreElement.wellboreElementId.toString(),\r\n wellboreElementFromDto(wellboreElement),\r\n ]),\r\n );\r\n\r\nexport const wellboreElementFromDto = ({ ...rest }) =>\r\n Map({\r\n ...rest,\r\n });\r\n\r\nconst wellboreElementMappers = {\r\n WellboreRevision: {\r\n from: wellboreRevisionFromDto,\r\n },\r\n WellboreElement: {\r\n from: wellboreElementFromDto,\r\n },\r\n WellboreElements: {\r\n from: wellboreElementsFromDto,\r\n },\r\n};\r\n\r\nexport default wellboreElementMappers;\r\n","import { EMPTY_MAP } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/wells/elements/wellboreElement.constants';\r\nimport wellboreElementMappers from 'features/wells/elements/wellboreElement.mappers';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst wellboreElementReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.REQUEST_GET_WELLBORE_ELEMENTS:\r\n case ACTIONS.REQUEST_GET_WELLBORE_ELEMENTS_FROM_WELLCOM: {\r\n if (error || payload === null) return state;\r\n\r\n return state.set(\r\n payload.wellboreId.toString(),\r\n wellboreElementMappers.WellboreRevision.from(payload),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellboreElementReducer;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst simulationReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.DELETE_SIMULATION: {\r\n if (error) return state;\r\n\r\n const { simulationId } = action;\r\n\r\n return state.delete(simulationId.toString());\r\n }\r\n\r\n case ACTIONS.RECEIVE_SIMULATION: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.simulationId.toString(),\r\n simulationMappers.Simulation.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_SIMULATIONS_FOR_TASK: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((simulation) => [\r\n simulation.simulationId.toString(),\r\n simulationMappers.Simulation.from(simulation),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default simulationReducer;\r\n","export const TASK_ACTIVITIES_ACTIONS = {\r\n TASK_ACTIVITIES_PAGE_LOADED: 'TASK_ACTIVITIES_PAGE_LOADED',\r\n TASK_ACTIVITIES_PLANNED_TOOLSTRING_LOADED:\r\n 'TASK_ACTIVITIES_PLANNED_TOOLSTRING_LOADED',\r\n TASK_ACTIVITIES_RECEIVE_PLANNED_TOOLSTRING:\r\n 'TASK_ACTIVITIES_RECEIVE_PLANNED_TOOLSTRING',\r\n TASK_ACTIVITIES_RECEIVE_NO_TOOLSTRING:\r\n 'TASK_ACTIVITIES_RECEIVE_NO_TOOLSTRING',\r\n};\r\n","import { fromJS, Map, OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport toolMapper from 'features/projects/tool/tool.mappers';\r\nimport tasksMapper from 'features/projects/tasks/tasks.mappers';\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport toolstringMapper from 'features/projects/tasks/task/toolstring/toolstring.mappers';\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport { RISK_TABLE_ACTIONS } from 'features/projects/tasks/task/details/taskDetails.constants';\r\nimport { TASK_ACTIVITIES_ACTIONS } from 'features/projects/tasks/task/activities/taskActivities.constants';\r\n\r\nconst initialState = fromJS({\r\n data: Map({\r\n toolstringsByTaskId: EMPTY_MAP,\r\n toolstringSectionsByToolstringId: EMPTY_MAP,\r\n toolstringById: EMPTY_MAP,\r\n task: tasksMapper.Task.initial(),\r\n plannedToolstringToolsWithStatus: EMPTY_LIST,\r\n }),\r\n});\r\n\r\nconst toolstringReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case TASK_ACTIONS.RECEIVE_TASK: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'task'],\r\n tasksMapper.Task.from(action.payload),\r\n );\r\n }\r\n\r\n case RISK_TABLE_ACTIONS.RECEIVE_TASK_RISK_SECTIONS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['data', 'task', 'taskRisk'], fromJS(action.payload));\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_TEMPLATES: {\r\n if (action.error) return state;\r\n\r\n const { payload } = action;\r\n return state.setIn(\r\n ['data', 'toolstringTemplates'],\r\n Map(\r\n payload.map((toolstring) => [\r\n toolstring.toolStringId.toString(),\r\n toolstringMapper.Toolstring.from(toolstring),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.RECEIVE_TASK_TOOLSTRINGS:\r\n case TOOLSTRING_ACTIONS.GET_TOOLSTRINGS_FOR_TASK: {\r\n if (action.error) return state;\r\n\r\n const { payload, taskId } = action;\r\n return state.setIn(\r\n ['data', 'toolstringsByTaskId', taskId.toString()],\r\n OrderedMap(\r\n payload.map((toolstring) => [\r\n toolstring.toolStringId.toString(),\r\n toolstringMapper.Toolstring.from(toolstring),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.RECEIVE_TASK_TOOLSTRING:\r\n case TOOLSTRING_ACTIONS.GET_TOOLSTRING_FOR_TASK:\r\n case TOOLSTRING_ACTIONS.CREATE_TOOLSTRING_FOR_TASK: {\r\n if (action.error || !action.payload) return state;\r\n\r\n const toolstring = toolstringMapper.Toolstring.from(action.payload);\r\n\r\n return state\r\n .setIn(\r\n ['data', 'toolstringById', toolstring.get('id').toString()],\r\n toolstring,\r\n )\r\n .setIn(\r\n [\r\n 'data',\r\n 'toolstringsByTaskId',\r\n toolstring.get('taskId').toString(),\r\n toolstring.get('id').toString(),\r\n ],\r\n toolstring,\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.UPDATE_TOOLSTRING_FOR_TASK: {\r\n if (action.error) return state;\r\n\r\n const { _toolStringTools, ...simplePayload } = action.payload;\r\n const simpleToolstring = toolstringMapper.Toolstring.from(simplePayload);\r\n const toolstring = toolstringMapper.Toolstring.from(action.payload);\r\n return state\r\n .setIn(\r\n [\r\n 'data',\r\n 'toolstringsByTaskId',\r\n action.payload.taskId.toString(),\r\n simpleToolstring.get('id').toString(),\r\n ],\r\n simpleToolstring,\r\n )\r\n .setIn(\r\n ['data', 'toolstringById', toolstring.get('id').toString()],\r\n toolstring,\r\n );\r\n }\r\n case TOOLSTRING_ACTIONS.DELETE_TOOLSTRING_FOR_TASK: {\r\n if (action.error) return state;\r\n\r\n const { toolstringId } = action;\r\n return state.deleteIn([\r\n 'data',\r\n 'toolstringById',\r\n toolstringId.toString(),\r\n ]);\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_TOOLS_UPDATED_SEQUENCES: {\r\n if (action.error) return state;\r\n\r\n const { toolstringId } = action;\r\n action.payload.forEach((sequence) => {\r\n state = state.updateIn(\r\n [\r\n 'data',\r\n 'toolstringById',\r\n toolstringId.toString(),\r\n 'toolsByToolstringToolId',\r\n sequence.itemId.toString(),\r\n 'sequence',\r\n ],\r\n () => sequence.newSequenceNumber,\r\n );\r\n });\r\n return state;\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_SECTIONS: {\r\n if (action.error) return state;\r\n\r\n const { toolstringId, payload } = action;\r\n return state.setIn(\r\n ['data', 'toolstringSectionsByToolstringId', toolstringId.toString()],\r\n toolstringMapper.ToolstringSections.from(payload),\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.GET_CABLES: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'cables'],\r\n toolMapper.CableSearch.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.GET_BHA_TEMPLATES: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'bhaTemplates'],\r\n toolMapper.BhaTemplatesSearch.from(action.payload),\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_ITEM: {\r\n if (action.error) return state;\r\n\r\n const { toolstringId, payload: toolstringItem } = action;\r\n\r\n return state.setIn(\r\n [\r\n 'data',\r\n 'toolstringById',\r\n toolstringId.toString(),\r\n 'toolsByToolstringToolId',\r\n toolstringItem.toolstringItemId.toString(),\r\n ],\r\n toolstringMapper.ToolstringItem.from(toolstringItem),\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.RECEIVE_TOOLSTRING_ASSEMBLY_TOOL: {\r\n const { toolstringId, toolstringItemId, payload } = action;\r\n\r\n return state.updateIn(\r\n [\r\n 'data',\r\n 'toolstringById',\r\n toolstringId.toString(),\r\n 'toolsByToolstringToolId',\r\n toolstringItemId.toString(),\r\n 'toolAssemblyTools',\r\n ],\r\n (toolAssemblyTools) => {\r\n const toolstringAssemblyTool =\r\n toolstringMapper.ToolAssemblyTool.from(payload);\r\n\r\n const toolIndex = toolAssemblyTools.findIndex(\r\n (toolAssemblyTool) =>\r\n toolAssemblyTool.get('toolAssemblyToolId') ===\r\n toolstringAssemblyTool.get('toolAssemblyToolId'),\r\n );\r\n\r\n return toolIndex > 0\r\n ? toolAssemblyTools.set(toolIndex, toolstringAssemblyTool)\r\n : toolAssemblyTools.push(toolstringAssemblyTool);\r\n },\r\n );\r\n }\r\n\r\n case TASK_ACTIVITIES_ACTIONS.TASK_ACTIVITIES_RECEIVE_PLANNED_TOOLSTRING: {\r\n if (action.error) return state;\r\n\r\n const toolstring = action.payload;\r\n const filteredTools = toolstring.toolStringItems.filter(\r\n (tool) => tool.toolStatus !== 0,\r\n );\r\n\r\n return state.setIn(\r\n ['data', 'plannedToolstringToolsWithStatus'],\r\n fromJS(filteredTools),\r\n );\r\n }\r\n\r\n case TASK_ACTIVITIES_ACTIONS.TASK_ACTIVITIES_RECEIVE_NO_TOOLSTRING: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(\r\n ['data', 'plannedToolstringToolsWithStatus'],\r\n EMPTY_LIST,\r\n );\r\n }\r\n\r\n case TOOLSTRING_ACTIONS.ADD_ASSETS_TO_TOOLSTRING: {\r\n if (action.error) return state;\r\n\r\n let toolstringsByTaskId = state.getIn(['data', 'toolstringsByTaskId']);\r\n let toolstringsByTaskIdToJS = toolstringsByTaskId.toJS();\r\n\r\n const serialNumberMap = action.payload.stringTestReport.assets.reduce(\r\n (map, asset) => {\r\n map[asset.itemNumber] = asset.serialNumber;\r\n return map;\r\n },\r\n {},\r\n );\r\n\r\n let toolsByToolstringToolId =\r\n toolstringsByTaskIdToJS[action.payload.taskId][\r\n action.payload.toolstringId\r\n ].toolsByToolstringToolId;\r\n\r\n let updatedToolsByToolstringToolId = Object.entries(\r\n toolsByToolstringToolId,\r\n ).reduce((result, [toolId, tool]) => {\r\n if (serialNumberMap[tool.m3ItemNumber]) {\r\n result[toolId] = {\r\n ...tool,\r\n serialNo: serialNumberMap[tool.m3ItemNumber],\r\n };\r\n } else {\r\n result[toolId] = tool;\r\n }\r\n return result;\r\n }, {});\r\n\r\n toolstringsByTaskIdToJS[action.payload.taskId][\r\n action.payload.toolstringId\r\n ].toolsByToolstringToolId = updatedToolsByToolstringToolId;\r\n\r\n return state.setIn(\r\n ['data', 'toolstringsByTaskId'],\r\n fromJS(toolstringsByTaskIdToJS),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default toolstringReducer;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst projectDashboardReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case DASHBOARDS_ACTIONS.RECEIVE_PROJECT_DASHBOARD: {\r\n if (error) return state;\r\n\r\n const { projectId, projectDashboardId } = action;\r\n\r\n return state.setIn(\r\n [projectId.toString(), projectDashboardId.toString()],\r\n mappers.ProjectDashboard.from(payload),\r\n );\r\n }\r\n\r\n case DASHBOARDS_ACTIONS.RECEIVE_PROJECT_DASHBOARDS: {\r\n if (error) return state;\r\n\r\n const { projectId } = action;\r\n\r\n return state.set(\r\n projectId.toString(),\r\n OrderedMap(\r\n payload.map((projectDashboard) => [\r\n projectDashboard.projectDashboardId.toString(),\r\n mappers.ProjectDashboard.from(projectDashboard),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectDashboardReducer;\r\n","import mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { WELLS_ACTIONS as WELLBORE_ACTIONS } from 'features/wells/wells.constants';\r\nimport { ACTIONS } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst wellboreDetailReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_PROJECT_WELLBORE_DETAIL: {\r\n if (error) return state;\r\n\r\n const { wellboreDetail } = payload;\r\n\r\n if (!wellboreDetail) return state;\r\n\r\n return state.set(\r\n wellboreDetail.wellboreDetailId.toString(),\r\n mappers.WellboreDetail.from(wellboreDetail),\r\n );\r\n }\r\n\r\n case WELLBORE_ACTIONS.RECEIVE_WELLBORE_DETAIL: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.wellboreDetailId.toString(),\r\n mappers.WellboreDetail.from(payload),\r\n );\r\n }\r\n\r\n case WELLBORE_ACTIONS.GET_WELLBORE_FLUIDS: {\r\n if (error) return state;\r\n const mapped = mappers.WellboreFluids.from(action.payload);\r\n return state.set('fluids', mapped);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellboreDetailReducer;\r\n","import { List } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst projectDashboardCurveReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case DASHBOARDS_ACTIONS.RECEIVE_PROJECT_DASHBOARD_CURVES: {\r\n if (error) return state;\r\n\r\n const { projectDashboardId } = action;\r\n\r\n return state.set(\r\n projectDashboardId.toString(),\r\n List(payload).map(mappers.CheetahJobCurve.from),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectDashboardCurveReducer;\r\n","import _isEmpty from 'lodash/isEmpty';\r\nimport { OrderedMap } from 'immutable';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst simulationResultReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_SIMULATION_RESULTS: {\r\n if (error) return state;\r\n\r\n const updatedState = OrderedMap().asMutable();\r\n\r\n // Iterate over each simulation result in payload\r\n payload.forEach((resultSet) => {\r\n if (!_isEmpty(resultSet)) {\r\n const direction = resultSet.direction ?? 'null'; // Assuming direction can be null\r\n const simulationResults = resultSet.simulationResults || [];\r\n\r\n // Map simulation results to OrderedMap entries\r\n simulationResults.forEach((simulationResult) => {\r\n const measuredDepthKey =\r\n simulationResult.measuredDepth.value.toString();\r\n const mappedResult = simulationMappers.SimulationResult.from(\r\n simulationResult,\r\n ).set('simulationId', resultSet.simulationId);\r\n\r\n // Append to the existing entries for the direction or create new entry\r\n updatedState.update(direction, OrderedMap(), (existingResults) =>\r\n existingResults.set(measuredDepthKey, mappedResult),\r\n );\r\n });\r\n }\r\n });\r\n\r\n return updatedState.asImmutable();\r\n }\r\n\r\n case ACTIONS.DELETE_SIMULATION_RESULTS: {\r\n if (error) return state;\r\n\r\n return initialState;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default simulationResultReducer;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst simulationFluidReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.DELETE_SIMULATION_FLUID: {\r\n if (error) return state;\r\n\r\n const { simulationFluidId } = action;\r\n\r\n return state.delete(simulationFluidId.toString());\r\n }\r\n\r\n case ACTIONS.RECEIVE_SIMULATION_FLUID: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.simulationFluidId.toString(),\r\n simulationMappers.SimulationFluid.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_SIMULATION_FLUIDS: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((simulationFluid) => [\r\n simulationFluid.simulationFluidId.toString(),\r\n simulationMappers.SimulationFluid.from(simulationFluid),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default simulationFluidReducer;\r\n","import moment from 'moment';\r\nimport { Map } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { ProjectWellboreDetailStatus } from 'app/app.constants';\r\n\r\nexport const ProjectWellboreDetailMapper = {\r\n from: ({\r\n status,\r\n created,\r\n approvedBy,\r\n approvalDate,\r\n wellboreDetail,\r\n ...projectWellboreDetail\r\n }) =>\r\n Map({\r\n status,\r\n created: moment(created),\r\n approvalDate: approvalDate ? moment(approvalDate) : undefined,\r\n approvedBy: approvedBy ? mappers.User.from(approvedBy) : undefined,\r\n revisionDate: moment(\r\n status === ProjectWellboreDetailStatus.APPROVED\r\n ? approvalDate\r\n : created,\r\n ),\r\n ...projectWellboreDetail,\r\n }),\r\n};\r\n\r\nexport const WellborePurpose = {\r\n UNKNOWN: 0,\r\n INJECTION: 1,\r\n NOT_AVAILABLE: 2,\r\n OBSERVATION: 3,\r\n PRODUCTION: 4,\r\n SHALLOW_GAS: 5,\r\n};\r\n\r\nexport const WellboreContent = {\r\n UNKNOWN: 0,\r\n CO2: 1,\r\n CUTTINGS: 2,\r\n DRY: 3,\r\n GAS: 4,\r\n GAS_CONDENSATE: 5,\r\n NOT_APPLICABLE: 6,\r\n NOT_AVAILABLE: 7,\r\n OIL: 8,\r\n OIL_GAS: 9,\r\n OIL_GAS_CONDENSATE: 10,\r\n WATER: 11,\r\n WATER_GAS: 12,\r\n};\r\n\r\nexport const HostileFluids = {\r\n CARBON_DIOXIDE: 1,\r\n HYDROGEN_SULPHIDE: 2,\r\n CALCIUM_CHLORIDE: 3,\r\n CALCIUM_BROMIDE: 4,\r\n CESIUM_FORMATE: 5,\r\n POTASSIUM_FORMATE: 6,\r\n SODIUM_FORMATE: 7,\r\n ZINC_BROMIDE: 8,\r\n};\r\n\r\nexport const AdditionalParameters = {\r\n SIBHP: 1,\r\n FBHP: 2,\r\n FWHP: 3,\r\n SIZE_OF_LOGGED_CASING_TUBING: 4,\r\n GAS_DENSITY: 5,\r\n OIL_DENSITY: 6,\r\n WATER_DENSITY: 7,\r\n FLUID_DENSITY: 8,\r\n TYPE_OF_FLUIDS: 9,\r\n WATER_CUT: 10,\r\n WATER_RATE: 11,\r\n OIL_RATE: 12,\r\n GAS_RATE: 13,\r\n GAS_LIQUID_RATE: 14,\r\n GUN_TYPE: 15,\r\n CHARGE_TYPE: 16,\r\n SHOOTING_IN_GAS_OR_LIQUID: 17,\r\n GAS_RATE_NEEDED_FOR_CORRELATION: 18,\r\n PERFORATION_INTERVALS_MD: 19,\r\n PERFORATION_INTERVALS_TVD: 20,\r\n DIFFERENCE_OF_PRESSURE_WHEN_PERFORATING: 21,\r\n DURATION: 22,\r\n SETTING_DEPTH_TVD: 23,\r\n SETTING_DEPTH_MD: 24,\r\n TEMPERATURE_AT_SETTING_DEPTH: 25,\r\n PRESSURE_AT_SETTING_DEPTH: 26,\r\n MAX_DP_AT_SETTING_DEPTH: 27,\r\n INNER_DIAMETER_AT_SETTING_DEPTH: 28,\r\n CASING_TUBING_SIZE: 29,\r\n CASING_TUBING_MATERIAL: 30,\r\n CASING_TUBING_WEIGHT: 31,\r\n INCLINATION_AT_SETTING_DEPTH: 33,\r\n ELEMENT_TO_BE_CUT_FBHP: 34,\r\n MATERIAL_TYPE: 35,\r\n OUTER_DIAMETER_TO_BE_CUT: 36,\r\n INNER_DIAMETER_TO_BE_CUT: 37,\r\n THICKNESS_FROM_ABOVE_OUTER_DIAMETER_INNER_DIAMETER: 38,\r\n MINIMUM_RESTRICTION_ABOVE_THE_CUT_POINT: 39,\r\n CUT_DEPTH_CORRELATION_DEPTH_IN_WELL: 40,\r\n PIPE_IN_TENSION_NEUTRAL_COMPRESSION: 41,\r\n AMOUNT_OF_TENSION_COMPRESSIONS: 42,\r\n DHSV_HOLD_OPEN_SLEEVE_INSTALLED: 43,\r\n DEPTH_DETERMINATION_METHOD: 44,\r\n NO_GO_MAXIMUM_OUTER_DIAMETER: 45,\r\n NO_GO_MINIMUM_OUTER_DIAMETER: 46,\r\n DISTANCE_FROM_NO_GO_TO_TOP_CUT_ZONE: 47,\r\n LENGTH_OF_CUT_ZONE: 48,\r\n WELL_FLUID_TYPE_INSIDE_TUBING: 49,\r\n WELL_FLUID_WEIGHT_INSIDE_TUBING: 50,\r\n WELL_FLUID_TYPE_INSIDE_ANNULUS: 51,\r\n WELL_FLUID_WEIGHT_INSIDE_ANNULUS: 52,\r\n PRESSURE_DIFFERENTIAL_BETWEEN_TUBING_AND_ANNULUS: 53,\r\n IS_COMMUNICATION_BETWEEN_TUBING_AND_ANNULUS_REQUIRED: 54,\r\n MONO_HEPTA: 55,\r\n DRAWING_WITH_SPACE_OUT_MEASUREMENT_PROVIDED: 56,\r\n DRAWING_WITH_ALL_INNER_DIAMETER_DIMENSIONS_DETAILED: 57,\r\n PUMPING_RATE: 58,\r\n BULLHEADING_DISPLACEMENT: 59,\r\n FLOW_DURING_OPERATION: 61,\r\n DATE: 62,\r\n};\r\n\r\nexport const wellborePurposeToString = (wellborePurpose) =>\r\n ({\r\n [undefined]: '',\r\n [WellborePurpose.UNKNOWN]: 'Unknown',\r\n [WellborePurpose.INJECTION]: 'Injection',\r\n [WellborePurpose.NOT_AVAILABLE]: 'Not available',\r\n [WellborePurpose.OBSERVATION]: 'Observation',\r\n [WellborePurpose.PRODUCTION]: 'Production',\r\n [WellborePurpose.SHALLOW_GAS]: 'Shallow gas',\r\n }[wellborePurpose]);\r\n\r\nexport const wellboreContentToString = (wellboreContent) =>\r\n ({\r\n [undefined]: '',\r\n [WellboreContent.UNKNOWN]: 'Unknown',\r\n [WellboreContent.CO2]: 'CO2',\r\n [WellboreContent.CUTTINGS]: 'Cuttings',\r\n [WellboreContent.DRY]: 'Dry',\r\n [WellboreContent.GAS]: 'Gas',\r\n [WellboreContent.GAS_CONDENSATE]: 'Gas and condensate',\r\n [WellboreContent.NOT_APPLICABLE]: 'Not applicable',\r\n [WellboreContent.OIL]: 'Oil',\r\n [WellboreContent.OIL_GAS]: 'Oil and gas',\r\n [WellboreContent.OIL_GAS_CONDENSATE]: 'Oil, gas and condensate',\r\n [WellboreContent.WATER]: 'Water',\r\n [WellboreContent.WATER_GAS]: 'Water and gas',\r\n }[wellboreContent]);\r\n\r\nexport const hostileFluidToDisplayName = (hostileFluid) =>\r\n ({\r\n [HostileFluids.CARBON_DIOXIDE]: 'CO2 (%)',\r\n [HostileFluids.HYDROGEN_SULPHIDE]: 'H2S (ppm)',\r\n [HostileFluids.CALCIUM_CHLORIDE]: 'Calcium Chloride (%)',\r\n [HostileFluids.CALCIUM_BROMIDE]: 'Calcium Bromide',\r\n [HostileFluids.CESIUM_FORMATE]: 'Cesium Formate',\r\n [HostileFluids.POTASSIUM_FORMATE]: 'Potassium Formate',\r\n [HostileFluids.SODIUM_FORMATE]: 'Sodium Formate',\r\n [HostileFluids.ZINC_BROMIDE]: 'Zinc Bromide',\r\n }[hostileFluid]);\r\n\r\nconst projectWellboreDetailsMappers = {\r\n ProjectWellboreDetail: ProjectWellboreDetailMapper,\r\n};\r\n\r\nexport default projectWellboreDetailsMappers;\r\n","import { Map, OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport { ACTIONS } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\nimport projectWellboreDetailsMappers from 'features/projects/wellbore/details/projectWellboreDetails.mappers';\r\n\r\nconst initialState = Map({\r\n details: EMPTY_MAP,\r\n changelog: EMPTY_LIST,\r\n activeDetailsId: null,\r\n});\r\n\r\nconst projectWellboreDetailReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.DELETE_PROJECT_WELLBORE_DETAIL: {\r\n if (error) return state;\r\n\r\n const { projectWellboreDetailId } = action;\r\n\r\n return state.deleteIn(['details', projectWellboreDetailId.toString()]);\r\n }\r\n\r\n case ACTIONS.RECEIVE_PROJECT_WELLBORE_DETAILS: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n 'details',\r\n OrderedMap(\r\n payload.map((projectWellboreDetail) => [\r\n projectWellboreDetail.projectWellboreDetailId.toString(),\r\n projectWellboreDetailsMappers.ProjectWellboreDetail.from(\r\n projectWellboreDetail,\r\n ),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_PROJECT_WELLBORE_DETAIL: {\r\n if (error) return state;\r\n\r\n return state.setIn(\r\n ['details', payload.projectWellboreDetailId.toString()],\r\n projectWellboreDetailsMappers.ProjectWellboreDetail.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.CLEAR_PROJECT_WELLBORE_DETAILS: {\r\n return state.set('details', initialState.get('details'));\r\n }\r\n\r\n case ACTIONS.SET_ACTIVE_WELLBOREDETAILSID: {\r\n return state.set('activeDetailsId', payload);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectWellboreDetailReducer;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/parameters/simulationParameter.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst simulationParameterReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.DELETE_SIMULATION_PARAMETER: {\r\n if (error) return state;\r\n\r\n const { simulationParameterId } = action;\r\n\r\n return state.delete(simulationParameterId.toString());\r\n }\r\n\r\n case ACTIONS.RECEIVE_SIMULATION_PARAMETER: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.simulationParameterId.toString(),\r\n simulationMappers.SimulationParameter.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_SIMULATION_PARAMETERS: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((simulationParameter) => [\r\n simulationParameter.simulationParameterId.toString(),\r\n simulationMappers.SimulationParameter.from(simulationParameter),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default simulationParameterReducer;\r\n","import moment from 'moment';\r\nimport { Map, List } from 'immutable';\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\n\r\nexport const situationFromDto = ({\r\n id,\r\n wellControlDrillCategoryId,\r\n title,\r\n ...situation\r\n}) =>\r\n Map({\r\n id,\r\n wellControlDrillCategoryId,\r\n title,\r\n ...situation,\r\n });\r\n\r\nexport const categoryFromDto = ({\r\n id,\r\n title,\r\n wellControlDrillSituations,\r\n ...category\r\n}) =>\r\n Map({\r\n id,\r\n title,\r\n situations: List(wellControlDrillSituations.map(situationFromDto)),\r\n ...category,\r\n });\r\n\r\nconst activityToDTO = ({\r\n endTime,\r\n startTime,\r\n status = WORK_ITEM_STATUS.PLANNED,\r\n ...activity\r\n}) => {\r\n return {\r\n status: status,\r\n endTime: endTime ? moment(endTime).toISOString() : endTime,\r\n startTime: startTime ? moment(startTime).toISOString() : startTime,\r\n ...activity,\r\n };\r\n};\r\n\r\nconst wellControlMappers = {\r\n situation: {\r\n from: situationFromDto,\r\n },\r\n category: {\r\n from: categoryFromDto,\r\n },\r\n activity: {\r\n to: activityToDTO,\r\n },\r\n};\r\n\r\nexport default wellControlMappers;\r\n","export const WELL_CONTROL_ACTIONS = {\r\n GET_ALL_CATEGORIES_AND_SITUATIONS: 'GET_ALL_CATEGORIES_AND_SITUATIONS',\r\n UPDATE_WELL_CONTROLL_DRILL_ACTIVITY: 'UPDATE_WELL_CONTROLL_DRILL_ACTIVITY',\r\n};\r\n","import { Map } from 'immutable';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport wellControlMappers from 'features/wellControlDrillActivity/wellControl.mapper';\r\nimport { WELL_CONTROL_ACTIONS } from 'features/wellControlDrillActivity/wellControl.constants';\r\n\r\nconst initialState = Map({\r\n categories: EMPTY_LIST,\r\n situations: EMPTY_LIST,\r\n});\r\n\r\nconst wellControlReducer = (state = initialState, action = {}) => {\r\n const { type } = action;\r\n\r\n switch (type) {\r\n case WELL_CONTROL_ACTIONS.GET_ALL_CATEGORIES_AND_SITUATIONS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'categories',\r\n action.payload.map((category) =>\r\n wellControlMappers.category.from(category),\r\n ),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default wellControlReducer;\r\n","import { Map } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst simulationDynamicToolParameterReducer = (\r\n state = initialState,\r\n action,\r\n) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_SIMULATION_TOOL_PARAMETER: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n payload.simulationDynamicToolParameterId.toString(),\r\n simulationMappers.SimulationDynamicToolParameter.from(payload),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_SIMULATION_TOOL_PARAMETERS: {\r\n if (error) return state;\r\n\r\n return Map(\r\n payload.map((parameter) => [\r\n parameter.simulationDynamicToolParameterId.toString(),\r\n simulationMappers.SimulationDynamicToolParameter.from(parameter),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default simulationDynamicToolParameterReducer;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst projectGanttReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case PROJECTS_ACTIONS.RECEIVE_GANTT_PROJECTS: {\r\n if (error) return state;\r\n const gantt = OrderedMap(\r\n payload.map((project) => [\r\n project.projectId.toString(),\r\n mappers.Project.from(project),\r\n ]),\r\n );\r\n\r\n state.setIn(['project', 'ganttProjects'], gantt);\r\n return gantt;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectGanttReducer;\r\n","import { Map } from 'immutable';\r\n\r\nconst ProjectMobilisationTasksMapper = {\r\n from: ({ ...projectMobilisationTasks }) =>\r\n Map({ ...projectMobilisationTasks }),\r\n};\r\n\r\nfunction groupByStringTest(data) {\r\n const grouped = data.reduce((acc, curr) => {\r\n const stringTestKey = curr.stringTest.stringTestId;\r\n\r\n if (!acc[stringTestKey]) {\r\n acc[stringTestKey] = {\r\n ...curr.stringTest,\r\n assets: [],\r\n };\r\n }\r\n\r\n acc[stringTestKey].assets.push(curr.asset);\r\n\r\n return acc;\r\n }, {});\r\n\r\n return Object.values(grouped);\r\n}\r\n\r\nexport const ProjectMobilisationMappers = {\r\n projectMobilisationTasksMapper: ProjectMobilisationTasksMapper,\r\n stringTestAssetsGroupMapper: groupByStringTest,\r\n};\r\n","import { List, Map, fromJS } from 'immutable';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\n\r\nimport { ACTIONS } from 'features/projects/mobilisation/projectMobilisation.constants';\r\nimport { ProjectMobilisationMappers } from 'features/projects/mobilisation/projectMobilisation.mappers';\r\n\r\nconst initialState = Map({\r\n tasks: EMPTY_LIST,\r\n toolstrings: EMPTY_LIST,\r\n stringtesttoolstringitems: EMPTY_LIST,\r\n stringTestReportEvent: EMPTY_MAP,\r\n stringTestReportsForTask: EMPTY_LIST,\r\n mobilisationToolstringForTask: EMPTY_MAP,\r\n});\r\n\r\nconst projectMobilisationReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case ACTIONS.RECEIVE_PROJECT_MOBILISATION_TASKS: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n 'tasks',\r\n List(\r\n payload.map((task) =>\r\n ProjectMobilisationMappers.projectMobilisationTasksMapper.from(\r\n task,\r\n ),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_STRING_TEST_REPORTS_FOR_TASK: {\r\n if (error) return state;\r\n return state.set(\r\n 'stringTestReportsForTask',\r\n fromJS(ProjectMobilisationMappers.stringTestAssetsGroupMapper(payload)),\r\n );\r\n }\r\n\r\n case ACTIONS.RECEIVE_STRING_TEST_REPORT_EVENT: {\r\n if (error) return state;\r\n\r\n return state.set('stringTestReportEvent', fromJS(payload));\r\n }\r\n\r\n case ACTIONS.RECEIVE_STRING_TEST_TOOL_STRING_ITEMS: {\r\n if (error) return state;\r\n\r\n return state.set(\r\n 'stringtesttoolstringitems',\r\n List(\r\n payload.map((stringtesttoolstringitem) =>\r\n fromJS(stringtesttoolstringitem),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectMobilisationReducer;\r\n","import moment from 'moment';\r\nimport last from 'lodash/last';\r\nimport initial from 'lodash/initial';\r\nimport { fromJS, Map } from 'immutable';\r\n\r\nexport const initialDocument = () => {\r\n return {\r\n id: null,\r\n name: '',\r\n category: 1,\r\n extension: null,\r\n field: { id: null },\r\n created: null,\r\n modified: null,\r\n };\r\n};\r\n\r\nexport const toFileFromDTO = ({\r\n fieldFileId,\r\n name,\r\n category,\r\n fieldId,\r\n extension,\r\n created,\r\n modified,\r\n taskId,\r\n fullName,\r\n createdByUserId,\r\n categoryName,\r\n editUrl,\r\n comments,\r\n fileId,\r\n projectId,\r\n wellboreId,\r\n}) => {\r\n return fromJS({\r\n id: fieldFileId,\r\n name: name,\r\n category: category,\r\n extension: extension,\r\n created: moment(created),\r\n modified: modified,\r\n taskId: taskId,\r\n fullName: fullName,\r\n createdByUserId,\r\n fileId,\r\n categoryName,\r\n editUrl,\r\n comments,\r\n fieldId,\r\n fieldFileId,\r\n projectId,\r\n wellboreId,\r\n });\r\n};\r\n\r\nconst initialMetaFromFilename = ({ name }, initialCategory) => {\r\n const parts = name.split('.');\r\n\r\n return Map({\r\n name: initial(parts).join('.'),\r\n category: initialCategory.id,\r\n extension: `.${last(parts)}`,\r\n });\r\n};\r\n\r\nconst documentMappers = {\r\n Document: {\r\n initial: initialDocument,\r\n from: toFileFromDTO,\r\n Meta: {\r\n initial: initialMetaFromFilename,\r\n },\r\n },\r\n toFileFromDTO,\r\n initialDocument,\r\n};\r\n\r\nexport default documentMappers;\r\n","import { OrderedMap } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { FIELDS_ACTIONS } from 'features/fields/fields.constants';\r\nimport documentMappers from 'features/fields/fieldDocuments.mappers';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst fieldDocumentsReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case FIELDS_ACTIONS.GET_FIELD_DOCUMENT: {\r\n if (error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n payload.fieldFileId.toString(),\r\n documentMappers.Document.from(payload),\r\n );\r\n }\r\n\r\n case FIELDS_ACTIONS.DELETE_FIELD_DOCUMENT: {\r\n if (error) return state;\r\n\r\n const { fieldFileId } = action;\r\n\r\n return state.delete(fieldFileId.toString());\r\n }\r\n\r\n case FIELDS_ACTIONS.GET_FIELD_DOCUMENTS: {\r\n if (error) return state;\r\n\r\n return OrderedMap(\r\n payload.map((file) => [\r\n file.fileId.toString(),\r\n documentMappers.Document.from(file),\r\n ]),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default fieldDocumentsReducer;\r\n","import { List } from 'immutable';\r\n\r\nexport const INTEGRITY_MANAGEMENT_ACTIONS = {\r\n GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES:\r\n 'GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES',\r\n ADD_NEW_INTEGRITY_MANAGEMENT_INTEGRITY:\r\n 'ADD_NEW_INTEGRITY_MANAGEMENT_INTEGRITY',\r\n DELETE_INTEGRITY_MANAGEMENT_INTEGRITY:\r\n 'DELETE_INTEGRITY_MANAGEMENT_INTEGRITY',\r\n UPDATE_INTEGRITY_MANAGEMENT_INTEGRITY:\r\n 'UPDATE_INTEGRITY_MANAGEMENT_INTEGRITY',\r\n GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL:\r\n 'GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL',\r\n ADD_NEW_INTEGRITY_MANAGEMENT_RULE_DATA:\r\n 'ADD_NEW_INTEGRITY_MANAGEMENT_RULE_DATA',\r\n GET_ALL_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS:\r\n 'GET_ALL_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS',\r\n GET_ALL_INTEGRITY_MANAGEMENT_AVAILABLE_FILES:\r\n 'GET_ALL_INTEGRITY_MANAGEMENT_AVAILABLE_FILES',\r\n UPDATE_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS:\r\n 'UPDATE_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS',\r\n UPLOAD_AND_UPDATE_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS:\r\n 'UPLOAD_AND_UPDATE_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS',\r\n GET_INTEGRITY_MANAGEMENT_RISK_SCORE_TREND_FOR_WELL:\r\n 'GET_INTEGRITY_MANAGEMENT_RISK_SCORE_TREND_FOR_WELL',\r\n GET_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_HISTORY:\r\n 'GET_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_HISTORY',\r\n GET_RULE_BY_ID: 'GET_RULE_BY_ID',\r\n};\r\n\r\n// check can we use the same ID\r\nexport const RISK_PRINCIPLE_TYPES = {\r\n LIKELIHOOD_OF_FAILURE: 'LIKELIHOOD OF FAILURE',\r\n WELL_CONSEQUENCE: 'WELL CONSEQUENCE',\r\n};\r\n\r\nexport const INTEGRITY_TYPE_ENUM = {\r\n // NONE: 0, // not needed\r\n RULE: 1,\r\n CATEGORY: 2,\r\n RISK_PRINCIPLE: 3,\r\n};\r\n\r\n// used for selector when creating new rule or category\r\nexport const INTEGRITY_TYPE_SELECTOR = {\r\n RULE: 1,\r\n CATEGORY: 2,\r\n};\r\n\r\nexport const RULE_TYPES_ENUM = {\r\n RULE_BOOL: 1,\r\n RULE_DOUBLE: 2,\r\n RULE_GEOGRAPHY: 3,\r\n RULE_TIME: 4,\r\n RULE_PICKLIST: 5,\r\n};\r\n\r\nexport const BOOLEAN_DATA_VALUES_ENUM = {\r\n NO: { value: 0, label: 'No' },\r\n YES: { value: 1, label: 'Yes' },\r\n};\r\n\r\nexport const INTEGRITY_MANAGEMENT_RULE_TYPES = List([\r\n { id: '1', code: 'RuleBool', name: 'Data Value (Yes/No)' },\r\n { id: '2', code: 'RuleDouble', name: 'Data Value (Numeric Value)' },\r\n { id: '3', code: 'RuleGeography', name: 'Geography' },\r\n { id: '4', code: 'RuleTime', name: 'Time/Age' },\r\n { id: '5', code: 'PickListOption', name: 'Picklist option' },\r\n]);\r\n\r\nexport const INTEGRITY_MANAGEMENT_RULE_DATA_TYPE = List([\r\n { id: '1', name: 'Yes/No' },\r\n { id: '2', name: 'Numeric Value' },\r\n]);\r\n\r\nexport const getRuleTypeString = (ruleType) => {\r\n return INTEGRITY_MANAGEMENT_RULE_TYPES.find(\r\n (rule) => Number(rule.id) === ruleType,\r\n )?.name;\r\n};\r\n\r\nexport const IntegrityForm = {\r\n INTEGRITY_ID: 'integrityId', // for edit\r\n TITLE: 'title',\r\n WEIGHT: 'weight',\r\n // rule\r\n SCORE: 'score',\r\n RULE_TYPE: 'integrityDetailType',\r\n DEFAULT_VALUE_CHECKED: 'defaultValueRequired',\r\n VALUE: 'value',\r\n LATITUDE: 'latitude',\r\n LONGITUDE: 'longitude',\r\n SRID: 'srid',\r\n PARENT_ID: 'parentId',\r\n PICKLIST_OPTIONS: 'picklistOptions',\r\n // category\r\n INTEGRITY_TYPE: 'integrityType',\r\n RELATED_INTEGRITIES: 'relatedIntegrities',\r\n};\r\n\r\nexport const WellIntegrityRiskMatrix = [\r\n ['N/A', 'Very Likely', 'Likely', 'Possible', 'Unlikely', 'Very Unlikely'],\r\n ['Catastrophic', 'Red', 'Red', 'Red', 'Red', 'Yellow', 'Weight'],\r\n ['Critical', 'Red', 'Red', 'Red', 'Yellow', 'Yellow'],\r\n ['Major', 'Red', 'Yellow', 'Yellow', 'Yellow', 'Green'],\r\n ['Moderate', 'Yellow', 'Yellow', 'Green', 'Green', 'Green'],\r\n ['Minor', 'Yellow', 'Green', 'Green', 'Green', 'Green'],\r\n];\r\n\r\nexport const INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM = {\r\n PROJECT: 1,\r\n WELL: 2,\r\n INTEGRITY: 3,\r\n FIELD: 4,\r\n};\r\n\r\nexport const INTEGRITY_ATTACHMENT_FILES_TABS = {\r\n WELL: 'INTEGRITY_FILES_WELL',\r\n PROJECT: 'INTEGRITY_FILES_PROJECT',\r\n};\r\n\r\nexport const UPLOAD_ATTACHMENT_FORM = {\r\n ID: 'uploadAttachment',\r\n FILE_DETAILS: 'fileDetails',\r\n FILES: 'files',\r\n ATTACHMENTS: 'attachments',\r\n};\r\n\r\nexport const ATTACHMENTS_DATE_FORMAT = 'DD/MM/YYYY';\r\n\r\nexport const TRAIL_SOURCE_ENUM = {\r\n NONE: 0,\r\n RULE: 1,\r\n UPLOADED: 2,\r\n ATTACHED: 3,\r\n UNATTACHED: 4,\r\n CREATED: 5,\r\n};\r\n","const integrityIntegritiesFromDTO = ({ ...integrities }) => {\r\n return {\r\n ...integrities,\r\n };\r\n};\r\n\r\nconst integrityIntegritiesToDTO = ({ ...integrities }) => {\r\n return {\r\n ...integrities,\r\n };\r\n};\r\n\r\nconst integrityWellDataCreateDTO = (wellboreId, { ...integrities }) => {\r\n return {\r\n wellId: wellboreId,\r\n integrityId: integrities.integrityId,\r\n integrityDetailType: integrities.integrityDetailType,\r\n value: integrities.value,\r\n };\r\n};\r\n\r\nconst integrityAttachmentsFromDTO = ({ ...attachments }) => {\r\n return {\r\n ...attachments,\r\n };\r\n};\r\n\r\nconst integrityAttachmentsToDTO = (\r\n externalWellboreId,\r\n integrityId,\r\n attachments,\r\n) => {\r\n return {\r\n wellId: externalWellboreId,\r\n integrityId: integrityId,\r\n attachments: attachments?.map(filesToIntegrityAttachmentDTO),\r\n };\r\n};\r\n\r\n// mapping for GetWellAttachmentDto\r\nconst filesToIntegrityAttachmentDTO = (attachment) => ({\r\n externalFileId: attachment.externalId,\r\n reportedDate: attachment.created,\r\n fileName: attachment.fullName,\r\n fileType: attachment.extension,\r\n fileLink: attachment.editDocumenturl,\r\n fileSource: attachment.fileSource,\r\n});\r\n\r\nconst rawDataFromDTO = ({ ...data }) => {\r\n return {\r\n ...data,\r\n };\r\n};\r\n\r\nconst integrityHistoryFromDTO = ({ ...history }) => {\r\n return {\r\n ...history,\r\n };\r\n};\r\n\r\nconst integrityManagementMappers = {\r\n integrities: {\r\n from: integrityIntegritiesFromDTO,\r\n to: integrityIntegritiesToDTO,\r\n create: integrityWellDataCreateDTO,\r\n },\r\n attachments: {\r\n from: integrityAttachmentsFromDTO,\r\n to: integrityAttachmentsToDTO,\r\n mapAttachment: filesToIntegrityAttachmentDTO,\r\n },\r\n rawData: {\r\n from: rawDataFromDTO,\r\n },\r\n history: {\r\n from: integrityHistoryFromDTO,\r\n },\r\n};\r\n\r\nexport default integrityManagementMappers;\r\n","import { Map, List } from 'immutable';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport { INTEGRITY_MANAGEMENT_ACTIONS } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport integrityManagementMappers from 'features/settings/integrityManagement/helpers/integrityManagement.mappers';\r\n\r\nconst initialState = Map({\r\n rules: EMPTY_LIST,\r\n integrityAttachments: EMPTY_LIST,\r\n availableFiles: EMPTY_LIST,\r\n riskScoreTrend: EMPTY_MAP,\r\n selectedRule: EMPTY_LIST,\r\n});\r\n\r\nconst integrityManagementReducer = (state = initialState, action = {}) => {\r\n const { type } = action;\r\n\r\n switch (type) {\r\n case INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES:\r\n case INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL:\r\n case INTEGRITY_MANAGEMENT_ACTIONS.DELETE_INTEGRITY_MANAGEMENT_INTEGRITY: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'integrities',\r\n List(\r\n action.payload?.map((integrities) =>\r\n integrityManagementMappers.integrities.from(integrities),\r\n ),\r\n ),\r\n );\r\n }\r\n case INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'integrityAttachments',\r\n List(\r\n action.payload?.map((attachments) =>\r\n integrityManagementMappers.attachments.from(attachments),\r\n ),\r\n ),\r\n );\r\n }\r\n case INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_AVAILABLE_FILES: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'availableFiles',\r\n List(\r\n action.payload?.map((availableFiles) =>\r\n integrityManagementMappers.rawData.from(availableFiles),\r\n ),\r\n ),\r\n );\r\n }\r\n case INTEGRITY_MANAGEMENT_ACTIONS.GET_INTEGRITY_MANAGEMENT_RISK_SCORE_TREND_FOR_WELL: {\r\n if (action.error) return state;\r\n\r\n const { externalWellboreId, scores } = action.payload;\r\n const key = `riskScoreTrend,${externalWellboreId}`;\r\n\r\n return state.set(\r\n key,\r\n List(\r\n scores?.map((riskTrendScores) =>\r\n integrityManagementMappers.rawData.from(riskTrendScores),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n case INTEGRITY_MANAGEMENT_ACTIONS.GET_RULE_BY_ID: {\r\n if (action.error) return state;\r\n\r\n return state.set('selectedRule', action.payload);\r\n }\r\n\r\n case INTEGRITY_MANAGEMENT_ACTIONS.GET_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_HISTORY: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'integrityHistory',\r\n List(\r\n action.payload?.map((history) =>\r\n integrityManagementMappers.history.from(history),\r\n ),\r\n ),\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default integrityManagementReducer;\r\n","import { combineReducers } from 'redux-immutable';\r\n\r\nimport { APP_ACTIONS } from 'app/app.constants';\r\n\r\nimport fieldReducer from 'features/wells/field.reducer';\r\nimport toolReducer from 'features/projects/tool/tool.reducer';\r\nimport wellboreReducer from 'features/wells/wellbore.reducer';\r\nimport projectReducer from 'features/projects/project.entity.reducer';\r\nimport wellboreFileReducer from 'features/wells/wellboreFiles.reducer';\r\nimport cheetahJobReducer from 'features/operations/cheetahJob.reducer';\r\nimport facilityReducer from 'features/facilities/facility.reducer';\r\nimport equipmentReducer from 'features/equipment/equipment.reducer';\r\nimport dashboardReducer from 'features/projects/dashboard/dashboard.reducer';\r\nimport smLocationReducer from 'features/data-exchange/winch/smlocation.reducer';\r\nimport wellboreTrajectoryReducer from 'features/wells/wellboreTrajectory.reducer';\r\nimport activityReducer from 'features/projects/activities/activity.entity.reducer';\r\nimport wellboreSectionReducer from 'features/wells/sections/wellboreSection.reducer';\r\nimport wellboreElementReducer from 'features/wells/elements/wellboreElement.reducer';\r\nimport simulationReducer from 'features/projects/tasks/task/simulation/simulation.reducer';\r\nimport toolstringReducer from 'features/projects/tasks/task/toolstring/toolstring.reducer';\r\nimport projectDashboardReducer from 'features/projects/dashboard/projectDashboard.reducer';\r\nimport wellboreDetailReducer from 'features/projects/wellbore/details/wellboreDetail.reducer';\r\nimport projectDashboardCurveReducer from 'features/projects/dashboard/projectDashboardCurve.reducer';\r\nimport simulationResultReducer from 'features/projects/tasks/task/simulation/simulationResult.reducer';\r\nimport simulationFluidReducer from 'features/projects/tasks/task/simulation/fluids/simulationFluid.reducer';\r\nimport projectWellboreDetailReducer from 'features/projects/wellbore/details/projectWellboreDetails.reducer';\r\nimport simulationParameterReducer from 'features/projects/tasks/task/simulation/parameters/simulationParameter.reducer';\r\nimport wellControlReducer from 'features/wellControlDrillActivity/wellControl.reducer';\r\nimport simulationDynamicToolParameterReducer from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.reducer';\r\nimport projectGanttReducer from 'features/projects/projectGantt.entity.reducer';\r\nimport projectMobilisationReducer from 'features/projects/mobilisation/projectMobilisation.reducer';\r\nimport fieldDocumentsReducer from 'features/fields/fieldDocuments.reducer';\r\nimport integrityManagementReducer from 'features/settings/integrityManagement/helpers/integrityManagement.reducer';\r\n\r\nconst entityReducers = combineReducers({\r\n tool: toolReducer,\r\n field: fieldReducer,\r\n fieldDocuments: fieldDocumentsReducer,\r\n project: projectReducer,\r\n activity: activityReducer,\r\n wellbore: wellboreReducer,\r\n dashboard: dashboardReducer,\r\n cheetahJob: cheetahJobReducer,\r\n toolString: toolstringReducer,\r\n simulation: simulationReducer,\r\n smlocation: smLocationReducer,\r\n facilities: facilityReducer,\r\n equipment: equipmentReducer,\r\n wellControl: wellControlReducer,\r\n wellboreFile: wellboreFileReducer,\r\n wellboreDetail: wellboreDetailReducer,\r\n wellboreSection: wellboreSectionReducer,\r\n wellboreElement: wellboreElementReducer,\r\n simulationFluid: simulationFluidReducer,\r\n simulationResult: simulationResultReducer,\r\n projectDashboard: projectDashboardReducer,\r\n wellboreTrajectory: wellboreTrajectoryReducer,\r\n simulationParameter: simulationParameterReducer,\r\n simulationDynamicToolParameter: simulationDynamicToolParameterReducer,\r\n projectWellboreDetail: projectWellboreDetailReducer,\r\n projectDashboardCurve: projectDashboardCurveReducer,\r\n ganttProjects: projectGanttReducer,\r\n projectMobilisation: projectMobilisationReducer,\r\n integrityManagement: integrityManagementReducer,\r\n});\r\n\r\nconst entityReducer = (state, action) => {\r\n if (action.type === APP_ACTIONS.LOGOUT) {\r\n state = undefined;\r\n }\r\n\r\n return entityReducers(state, action);\r\n};\r\n\r\nexport default entityReducer;\r\n","import { fromJS, Map } from 'immutable';\r\nimport { LOCATION_CHANGE } from 'connected-react-router/immutable';\r\n\r\nimport routePaths, { pages } from 'app/routePaths';\r\nimport { APP_ACTIONS } from 'app/app.constants';\r\n\r\nexport const initialState = fromJS({\r\n previous: Map(),\r\n location: Map(),\r\n action: '',\r\n globalLocation: '/',\r\n});\r\n\r\nconst ignorePreviousPages = [pages.login, pages.events, pages.dashboard];\r\n\r\nexport const previous = (state = initialState, action) => {\r\n switch (action.type) {\r\n case APP_ACTIONS.PROJECT_SET_SUBPAGE: {\r\n return state.set('subPage', action.page);\r\n }\r\n case LOCATION_CHANGE: {\r\n const subPage = state.get('subPage');\r\n\r\n return state\r\n .update('previous', (previous) => {\r\n return subPage\r\n ? ignorePreviousPages.includes(subPage)\r\n ? previous\r\n : state.get('location')\r\n : previous;\r\n })\r\n .set('location', action.payload.location)\r\n .set('action', action.payload.action);\r\n }\r\n case 'SAVE_REDIRECT_PATH': {\r\n return state.set(\r\n 'previous',\r\n action.payload !== routePaths.login ? action.payload : routePaths.root,\r\n );\r\n }\r\n case 'SET_GLOBAL_LOCATION':\r\n return state.set('globalLocation', action.payload);\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default previous;\r\n","import isNil from 'lodash/isNil';\r\nimport isString from 'lodash/isString';\r\nimport { List, fromJS, Map, OrderedMap } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { AUTHORIZATION_ACTIONS } from 'authorization/authorization.constants';\r\nimport { APP_ACTIONS, EMPTY_LIST, EMPTY_MAP, THEMES } from 'app/app.constants';\r\n\r\nexport const initialState = fromJS({\r\n appLoaded: false,\r\n applicationFailureReason: null,\r\n currentUser: mappers.User.initial,\r\n notification: EMPTY_MAP,\r\n pendingAction: Map({\r\n confirmation: Map({\r\n dataState: EMPTY_LIST,\r\n }),\r\n }),\r\n availableDepartments: EMPTY_LIST,\r\n availableOrganizations: EMPTY_LIST,\r\n availableServices: Map(),\r\n availableFileCategories: EMPTY_MAP,\r\n applicationHeader: Map({\r\n title: '',\r\n subTitle: '',\r\n uncheckedEvents: 0,\r\n }),\r\n theme: THEMES.DARK,\r\n featureFlags: EMPTY_MAP,\r\n users: EMPTY_MAP,\r\n currentClientOrganizationId: '',\r\n});\r\n\r\nconst commonReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case APP_ACTIONS.SET_THEME: {\r\n return state.set('theme', action.theme);\r\n }\r\n\r\n case APP_ACTIONS.CONFIRMATION_DIALOG_PENDING: {\r\n return state.set('pendingAction', action.pendingAction);\r\n }\r\n case APP_ACTIONS.APP_LOAD: {\r\n return state.set('appLoaded', true);\r\n }\r\n case APP_ACTIONS.LOGIN: {\r\n const { error } = action;\r\n if (error) return state.set('appLoaded', true);\r\n\r\n return state.set('appLoaded', true);\r\n }\r\n\r\n case APP_ACTIONS.GET_CURRENT_USER: {\r\n if (action.error) return state;\r\n\r\n return state\r\n .update('currentUser', (user) =>\r\n user.merge(\r\n action.payload\r\n ? mappers.User.from(action.payload)\r\n : mappers.User.initial,\r\n ),\r\n )\r\n .set(\r\n 'currentUserTest',\r\n action.payload\r\n ? mappers.User.from(action.payload)\r\n : mappers.User.initial,\r\n );\r\n }\r\n\r\n case APP_ACTIONS.GET_MAIN_VENDOR_USERS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'users',\r\n OrderedMap(\r\n action.payload.map((user) => [\r\n user.userId.toString(),\r\n mappers.User.from(user),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.GET_USERS_ASSIGNED_TO_SYSTEM_ROLE: {\r\n if (action.error) return state;\r\n return state.update('users', (users) =>\r\n users.merge(\r\n OrderedMap(\r\n action.payload.map((user) => [\r\n user.userId.toString(),\r\n mappers.User.from(user),\r\n ]),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.REMOVE_SYSTEM_ROLE_FROM_USER: {\r\n if (action.error) return state;\r\n\r\n const { userId, systemRoleId } = action;\r\n\r\n return state.deleteIn([\r\n 'users',\r\n userId.toString(),\r\n 'roles',\r\n systemRoleId,\r\n ]);\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.ADD_SYSTEM_ROLE_TO_USER: {\r\n if (action.error) return state;\r\n\r\n const { userId, systemRoleId } = action;\r\n\r\n return state.updateIn(['users', userId.toString(), 'roles'], (roles) =>\r\n roles.add(systemRoleId),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.UPDATE_USER_MEASUREMENT_PREFERENCES: {\r\n if (action.error) return state;\r\n\r\n const [units, user, userPreferences] = action.payload;\r\n\r\n return state\r\n .set('currentUser', mappers.User.from(user))\r\n .setIn(\r\n ['currentUser', 'units'],\r\n mappers.MeasurementPreferences.from(units),\r\n )\r\n .setIn(\r\n ['currentUser', 'preferences'],\r\n mappers.UserPreference.from(userPreferences),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.GET_USER_PREFERENCES: {\r\n if (action.error) return state;\r\n\r\n const { measurementPreference, userPreference } = action.payload;\r\n\r\n return state\r\n .setIn(\r\n ['currentUser', 'units'],\r\n measurementPreference\r\n ? mappers.MeasurementPreferences.from(measurementPreference)\r\n : undefined,\r\n )\r\n .setIn(\r\n ['currentUser', 'preferences'],\r\n userPreference\r\n ? mappers.UserPreference.from(userPreference)\r\n : undefined,\r\n );\r\n }\r\n\r\n case APP_ACTIONS.EVENTS_MARK_AS_SEEN:\r\n return state.setIn(['applicationHeader', 'uncheckedEvents'], 0);\r\n\r\n case APP_ACTIONS.ADD_NOTIFICATION:\r\n if (\r\n (!action.force && isNil(state.getIn(['currentUser', 'id']))) ||\r\n !action.notification.message\r\n )\r\n return state;\r\n return state.set('notification', Map(action.notification));\r\n case APP_ACTIONS.REMOVE_NOTIFICATION:\r\n return state.set('notification', initialState.get('notification'));\r\n\r\n case APP_ACTIONS.GET_ALL_SERVICES: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'availableServices',\r\n OrderedMap(\r\n action.payload.map((service) => [\r\n service.serviceId.toString(),\r\n mappers.Service.from(service),\r\n ]),\r\n ),\r\n );\r\n }\r\n case APP_ACTIONS.GET_ALL_DEPARTMENTS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'availableDepartments',\r\n OrderedMap(\r\n action.payload.map((department) => [\r\n department.departmentId.toString(),\r\n mappers.Department.from(department),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.GET_ALL_ORGANIZATIONS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'availableOrganizations',\r\n List(action.payload).map(mappers.Organization.from),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.SET_HEADER_VALUES: {\r\n const { logoNavigation, title, subTitle } = action;\r\n\r\n return state\r\n .updateIn(['applicationHeader', 'title'], (t) =>\r\n isString(title) ? title : t,\r\n )\r\n .updateIn(['applicationHeader', 'subTitle'], (st) =>\r\n isString(subTitle) ? subTitle : st,\r\n )\r\n .updateIn(['applicationHeader', 'logoNavigation'], (ln) =>\r\n isString(logoNavigation) ? logoNavigation : ln,\r\n );\r\n }\r\n case APP_ACTIONS.GET_ALL_FILE_CATEGORIES: {\r\n if (action.error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n 'availableFileCategories',\r\n OrderedMap(\r\n payload.map((category) => [\r\n category.id,\r\n mappers.FileCategory.from(category),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.GET_APPLICATION_FEATURES: {\r\n if (action.error) return state;\r\n\r\n return state.set('featureFlags', Map(action.payload));\r\n }\r\n\r\n case APP_ACTIONS.SET_APPLICATION_FAILURE: {\r\n const { payload: error } = action;\r\n\r\n return state.set('applicationFailureReason', error.message);\r\n }\r\n\r\n case APP_ACTIONS.SET_CURRENT_CLIENT_ORGANIZATION: {\r\n const { currentOrganizationId } = action;\r\n\r\n return state.set(\r\n 'currentClientOrganizationId',\r\n currentOrganizationId.toString(),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.STORE_CHANGE_LOG: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n return state.set('changeLog', payload);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default commonReducer;\r\n","import moment from 'moment';\r\nimport mappers from 'mappers';\r\nimport { fromJS } from 'immutable';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nimport {\r\n getInitials,\r\n getAvatar,\r\n editorStateToString,\r\n stringToEditorState,\r\n durationFromStartAndEndTime,\r\n} from 'utils/app.util';\r\n\r\nexport const projectNonProductiveTimeFromDTO = (npt) => {\r\n const {\r\n startTime,\r\n endTime,\r\n description,\r\n departments,\r\n createdByUserId,\r\n createdByUserAvatar,\r\n createdByUserFullName,\r\n } = npt;\r\n return fromJS({\r\n ...npt,\r\n startTime: moment.utc(startTime).local(),\r\n endTime: moment.utc(endTime).local(),\r\n duration: durationFromStartAndEndTime(moment(startTime), moment(endTime)),\r\n departments: departments\r\n ? departments.map((department) => mappers.Department.from(department))\r\n : EMPTY_LIST,\r\n author: {\r\n id: createdByUserId,\r\n name: createdByUserFullName,\r\n initials: getInitials(createdByUserFullName),\r\n avatar: getAvatar(createdByUserAvatar),\r\n },\r\n description: description ? stringToEditorState(description) : null,\r\n });\r\n};\r\n\r\nexport const projectNonProductiveTimeToDTO = (npt) => {\r\n const { startTime, endTime, description, departments } = npt;\r\n return {\r\n ...npt,\r\n startTime: startTime?.startOf('minute'), // zero out seconds and milliseconds\r\n endTime: endTime?.startOf('minute'), // zero out seconds and milliseconds\r\n // error here if no departments\r\n departments: departments?.map((department) =>\r\n mappers.Department.to(department),\r\n ),\r\n description: description ? editorStateToString(description) : null,\r\n };\r\n};\r\n\r\nconst nptMappers = {\r\n NPT: {\r\n to: projectNonProductiveTimeToDTO,\r\n from: projectNonProductiveTimeFromDTO,\r\n },\r\n};\r\n\r\nexport default nptMappers;\r\n","export const NPT_ACTIONS = {\r\n CREATE_PROJECT_NON_PRODUCTIVE_TIME: 'CREATE_PROJECT_NON_PRODUCTIVE_TIME',\r\n PROJECT_NON_PRODUCTIVE_TIME_REPORT_LOADED:\r\n 'PROJECT_NON_PRODUCTIVE_TIME_REPORT_LOADED',\r\n PROJECT_NON_PRODUCTIVE_TIME_REPORT_UNLOADED:\r\n 'PROJECT_NON_PRODUCTIVE_TIME_REPORT_UNLOADED',\r\n EDIT_PROJECT_NON_PRODUCTIVE_TIME: 'EDIT_PROJECT_NON_PRODUCTIVE_TIME',\r\n DELETE_PROJECT_NON_PRODUCTIVE_TIME: 'DELETE_PROJECT_NON_PRODUCTIVE_TIME',\r\n};\r\n\r\nexport const MODAL = {\r\n EDIT_PROJECT_NPT: 'EDIT_PROJECT_NPT_MODAL_ID',\r\n ADD_PROJECT_NPT: 'ADD_PROJECT_NPT_MODAL_ID',\r\n};\r\n\r\nexport const NPT_FORM = {\r\n CREATE_ID: 'createNpt',\r\n EDIT_ID: 'createNpt',\r\n START: 'startTime',\r\n END: 'endTime',\r\n DESCRIPTION: 'description',\r\n DEPARTMENTS: 'departments',\r\n CASE_NUMBER: 'caseNumber',\r\n};\r\n","import { fromJS, List } from 'immutable';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport nptMappers from 'features/projects/npt/npt.mappers';\r\nimport { NPT_ACTIONS } from 'features/projects/npt/npt.constants';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst nptReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case NPT_ACTIONS.PROJECT_NON_PRODUCTIVE_TIME_REPORT_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.set('data', List(action.payload).map(nptMappers.NPT.from));\r\n }\r\n case NPT_ACTIONS.EDIT_PROJECT_NON_PRODUCTIVE_TIME: {\r\n if (action.error) return state;\r\n\r\n const { projectNonProductiveTimeId } = action;\r\n\r\n return state.update('data', (npts) => {\r\n const index = npts.findIndex(\r\n (npt) =>\r\n npt.get('projectNonProductiveTimeId') ===\r\n projectNonProductiveTimeId,\r\n );\r\n\r\n return npts.set(index, nptMappers.NPT.from(action.payload));\r\n });\r\n }\r\n case NPT_ACTIONS.DELETE_PROJECT_NON_PRODUCTIVE_TIME: {\r\n if (action.error) return state;\r\n return state.update('data', (npts) =>\r\n npts.filterNot(\r\n (npt) =>\r\n npt.get('projectNonProductiveTimeId') ===\r\n action.projectNonProductiveTimeId,\r\n ),\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default nptReducer;\r\n","import { fromJS, List } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport teamMappers from 'features/projects/team/team.mappers';\r\nimport { TEAM_ACTIONS } from 'features/projects/team/team.constants';\r\n\r\nconst initialState = fromJS({\r\n members: EMPTY_LIST,\r\n allAvailableUsers: EMPTY_LIST,\r\n allAvailableFieldUsers: EMPTY_LIST,\r\n fieldCrews: EMPTY_LIST,\r\n crews: EMPTY_LIST,\r\n qualifications: EMPTY_LIST,\r\n teamProjectRoles: EMPTY_LIST,\r\n data: mappers.Project.initial(),\r\n});\r\n\r\nconst teamReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case TEAM_ACTIONS.DELETE_PROJECT_MEMBER: {\r\n if (action.error) return state;\r\n\r\n const currentMembers = state.get('members');\r\n return state.set(\r\n 'members',\r\n currentMembers.filterNot(\r\n (member) =>\r\n member.getIn(['project', 'memberId']) === action.projectMemberId,\r\n ),\r\n );\r\n }\r\n\r\n case TEAM_ACTIONS.RECEIVE_PROJECT_MEMBER:\r\n case TEAM_ACTIONS.GET_PROJECT_MEMBER: {\r\n if (action.error || !action.payload) return state;\r\n\r\n const { projectMemberId } = action.payload;\r\n\r\n return state.update('members', (projectMembers) => {\r\n const index = projectMembers.findIndex(\r\n (projectMember) =>\r\n projectMember.getIn(['project', 'memberId']) === projectMemberId,\r\n );\r\n\r\n return projectMembers.set(\r\n index,\r\n teamMappers.ProjectMember.from(action.payload),\r\n );\r\n });\r\n }\r\n\r\n case TEAM_ACTIONS.GET_ALL_AVAILABLE_USERS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'allAvailableUsers',\r\n List(action.payload).map(mappers.User.from),\r\n );\r\n }\r\n\r\n case TEAM_ACTIONS.GET_ALL_AVAILABLE_FIELD_CREW_USERS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'allAvailableFieldUsers',\r\n List(action.payload).map(mappers.User.from),\r\n );\r\n }\r\n\r\n case TEAM_ACTIONS.RECEIVE_PROJECT_MEMBERS: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set(\r\n 'members',\r\n List(payload).map(teamMappers.ProjectMember.from),\r\n );\r\n }\r\n return state;\r\n }\r\n\r\n case TEAM_ACTIONS.RECEIVE_PROJECT_FIELD_CREWS: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set(\r\n 'fieldCrews',\r\n List(payload).map(teamMappers.ProjectFieldCrew.from),\r\n );\r\n }\r\n return state;\r\n }\r\n\r\n case TEAM_ACTIONS.DELETE_PROJECT_FIELD_CREW: {\r\n if (action.error) return state;\r\n\r\n const currentMembers = state.get('fieldCrews');\r\n return state.set(\r\n 'fieldCrews',\r\n currentMembers.filterNot(\r\n (member) =>\r\n member.get('projectMemberFieldCrewId') === action.projectMemberId,\r\n ),\r\n );\r\n }\r\n\r\n case TEAM_ACTIONS.GET_PROJECT_FIELD_QUALIFICATIONS: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('qualifications', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case TEAM_ACTIONS.GET_PROJECT_FIELD_CREWS: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('crews', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case TEAM_ACTIONS.RECEIVE_TEAM_PROJECT_ROLES: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('teamProjectRoles', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default teamReducer;\r\n","import { fromJS, List, Map } from 'immutable';\r\nimport { arrayMove } from 'react-sortable-hoc';\r\n\r\nimport {\r\n TASK_STATE,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS,\r\n TASK_ACTIONS as TASKS_ACTIONS,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport { APP_ACTIONS, EMPTY_MAP } from 'app/app.constants';\r\nimport tasksMapper from 'features/projects/tasks/tasks.mappers';\r\nimport tasksMappers from 'features/projects/tasks/tasks.mappers';\r\n\r\nconst initialState = fromJS({\r\n [TASK_STATE.ACTIVE]: {\r\n [TASK_STATE.ACTIVE_DATA]: tasksMapper.Task.initial(),\r\n [TASK_STATE.ACTIVE_DIRECTION]: undefined,\r\n },\r\n [TASK_STATE.TEMPLATE]: Map({\r\n [TASK_STATE.TEMPLATE_DATA]: List(),\r\n }),\r\n [TASK_STATE.DATA]: List(),\r\n [TASK_STATE.CABLES]: EMPTY_MAP,\r\n [TASK_STATE.SURFACE_EQUIPMENT]: EMPTY_MAP,\r\n [TASK_STATE.SURFACE_EQUIPMENT]: EMPTY_MAP,\r\n [TASK_STATE.TASK_RISK]: List(),\r\n});\r\n\r\nconst tasksReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case TASKS_ACTIONS.GET_ALL_TASKS: {\r\n if (action.error) return state;\r\n return state.set(\r\n TASK_STATE.DATA,\r\n List(action.payload).map(tasksMapper.Task.from),\r\n );\r\n }\r\n\r\n case TASKS_ACTIONS.CREATE_TASK: {\r\n if (action.error) return state;\r\n return state\r\n .update(TASK_STATE.DATA, (tasks) =>\r\n tasks.push(tasksMapper.Task.from(action.payload)),\r\n )\r\n .set(TASK_STATE.NEW_TASK, tasksMapper.Task.initial())\r\n .setIn(\r\n [TASK_STATE.ACTIVE, TASK_STATE.ACTIVE_DATA],\r\n tasksMapper.Task.initial(),\r\n );\r\n }\r\n\r\n case TASKS_ACTIONS.UPDATE_TASK: {\r\n if (action.error) return state;\r\n\r\n return state\r\n .update(TASK_STATE.DATA, (tasks) => {\r\n let index = tasks.findIndex(\r\n (task) => task.get('id').toString() === action.taskId.toString(),\r\n );\r\n\r\n return tasks.set(index, tasksMapper.Task.from(action.payload));\r\n })\r\n .setIn(\r\n [TASK_STATE.ACTIVE, TASK_STATE.ACTIVE_DATA],\r\n tasksMapper.Task.initial(),\r\n );\r\n }\r\n case TASKS_ACTIONS.DELETE_TASK: {\r\n if (action.error) return state;\r\n\r\n const { id: taskId } = action;\r\n\r\n return state.update(TASK_STATE.DATA, (tasks) =>\r\n tasks.filterNot((task) => task.get('id') === taskId),\r\n );\r\n }\r\n case TASKS_ACTIONS.CREATE_TASK_MODAL_LOADED: {\r\n if (action.error) return state;\r\n return state\r\n .setIn(\r\n [TASK_STATE.ACTIVE, TASK_STATE.ACTIVE_DATA],\r\n tasksMapper.Task.initial(),\r\n )\r\n .setIn(\r\n [TASK_STATE.TEMPLATE, TASK_STATE.TEMPLATE_DATA],\r\n List(action.payload).map(tasksMapper.Task.Template.from),\r\n );\r\n }\r\n case TASKS_ACTIONS.PROJECT_UPDATE_PROGRESS: {\r\n if (action.error) return state;\r\n const [, updatedTask] = action.payload,\r\n task = tasksMapper.Task.from(updatedTask);\r\n return state\r\n .update(TASK_STATE.DATA, (tasks) => {\r\n let index = tasks.findIndex((r) => r.get('id') === task.get('id'));\r\n return tasks.set(index, task);\r\n })\r\n .setIn([TASK_STATE.ACTIVE, TASK_STATE.ACTIVE_DATA], task)\r\n .setIn([TASK_STATE.ACTIVE, TASK_STATE.ACTIVE_HAS_PROGRESSED], false);\r\n }\r\n\r\n case TASKS_ACTIONS.EDIT_TASK_MODAL_UNLOADED: {\r\n return state.setIn(\r\n [TASK_STATE.ACTIVE, TASK_STATE.ACTIVE_DATA],\r\n tasksMapper.Task.initial(),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.ASYNC_START: {\r\n const { subtype } = action;\r\n\r\n switch (subtype) {\r\n case TASKS_ACTIONS.SORT_TASKS: {\r\n const currentTasks = state.get(TASK_STATE.DATA);\r\n\r\n const { oldIndex, newIndex } = action;\r\n\r\n return state.set(\r\n TASK_STATE.DATA,\r\n fromJS(arrayMove(currentTasks.toJS(), oldIndex, newIndex)),\r\n );\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n }\r\n\r\n case TASK_SURFACE_EQUIPMENT_ACTIONS.CABLES_LOADED: {\r\n if (action.error) return state;\r\n\r\n const cables = action.payload;\r\n return state.setIn([TASK_STATE.CABLES], fromJS(cables));\r\n }\r\n\r\n case TASK_SURFACE_EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED: {\r\n if (action.error) return state;\r\n\r\n const surfaces = action.payload;\r\n\r\n return state.setIn(\r\n [TASK_STATE.SURFACE_EQUIPMENT],\r\n List(surfaces).map(tasksMappers.Task.TaskSurfaceEquipment.from),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default tasksReducer;\r\n","export const DATA_ACQUISITION_ACTIONS = {\r\n GET_DATA_ACQUISITION_ID: 'GET_DATA_ACQUISITION_ID',\r\n GET_DATA_ACQUISITION_BY_TASK: 'GET_DATA_ACQUISITION_BY_TASK',\r\n UPDATE_DATA_ACQUISITION: 'UPDATE_DATA_ACQUISITION',\r\n DELETE_DATA_ACQUISITION: 'DELETE_DATA_ACQUISITION',\r\n GET_ALL_DEBRIS_TYPES: 'GET_ALL_DEBRIS_TYPES',\r\n GET_ALL_GREASE_TYPES: 'GET_ALL_GREASE_TYPES',\r\n GET_ALL_GLYCOL_TYPES: 'GET_ALL_GLYCOL_TYPES',\r\n GET_ALL_FRICTION_REDUCER_TYPES: 'GET_ALL_FRICTION_REDUCER_TYPES',\r\n GET_ALL_PRODUCTION_MEDIUMS: 'GET_ALL_PRODUCTION_MEDIUMS',\r\n GET_ALL_INJECTION_MEDIUMS: 'GET_ALL_INJECTION_MEDIUMS',\r\n GET_EXPLOSIVES: 'GET_EXPLOSIVES',\r\n UPDATE_EXPLOSIVES: 'UPDATE_EXPLOSIVES',\r\n};\r\n\r\nexport const DATA_ACQUISITION_FORM = {\r\n EDIT_FORM_ID: 'editDataAcquisition',\r\n};\r\n\r\nexport const WELL_TAB_FIELDS = {\r\n WELLHEAD_PRESSURE: 'wellheadPressure',\r\n RESERVOIR_PRESSURE: 'reservoirPressure',\r\n RESERVOIR_DEPTH: 'reservoirDepth',\r\n RESERVOIR_TEMPERATURE: 'reservoirTemperature',\r\n HYDROGEN_SULFIDE: 'hydrogenSulfide',\r\n CARBON_DIOXIDE: 'carbonDioxide',\r\n SURFACE_TEMPERATURE: 'surfaceTemperature',\r\n FLOW_PATH: 'flowPath',\r\n INJECTION_MEDIUM: 'injectionMediumId',\r\n PRODUCTION_MEDIUM: 'productionMediumId',\r\n GAS_RATE: 'gasRate',\r\n LIQUID_RATE: 'liquidRate',\r\n INJECTION_RATE: 'injectionRate',\r\n INJECTION_PRODUCTION_VOLUME: 'injectionProductionVolume',\r\n};\r\n\r\nexport const CABLE_TAB_FIELDS = {\r\n FLOWTUBE: 'flowtube',\r\n MAX_TENSION: 'maxTension',\r\n WEAK_POINT_BUILD: 'weakPointBuild',\r\n DISTANCE_WINCH_TO_FIRST_SHAVE: 'distanceWinchToLowerSheave',\r\n LOWER_WINCH_TO_FIRST_SHAVE: 'lowerSheaveToUpperSheave',\r\n LOWER_TOUPPER_SHEAVE_WHEEL: 'lowerToUpperSheaveWheel',\r\n COMMENTS: 'cableComments',\r\n};\r\n\r\nexport const TOOLS_TAB_FIELDS = {\r\n TIME_LOGGED: 'timeLogged',\r\n DISTANCE_LOGGED: 'distanceLogged',\r\n DEPTH_OF_CUT: 'depthOfCut',\r\n DESCRIPTION: 'description',\r\n METERS_TRACTORED: 'metersTractored',\r\n TIME_TRACTORED: 'timeTractored',\r\n JARING_TIME: 'jaringTime',\r\n JARING_STROKES: 'jaringStrokes',\r\n DEBRIS_VOLUME_COLLECTED: 'debrisVolumeCollected',\r\n NOGO_SIZE: 'nogoSize',\r\n DISTANCE_MILLED: 'distanceMilled',\r\n TIME_MILLED: 'timeMilled',\r\n MILLING_SPEED: 'millingSpeed',\r\n ROTATION_SPEED: 'rotationSpeed',\r\n DEBRIS_TYPE: 'debrisTypeId',\r\n};\r\n\r\nexport const CONSUMABLES_TAB_FIELDS = {\r\n GREASE_TYPE_ID: 'typeOfGreaseId',\r\n GREASE_CONSUMPTION: 'greaseConsumption',\r\n GLYCOL_TYPE_ID: 'typeOfGlycolId',\r\n GLYCOL_CONSUMPTION: 'glycolConsumption',\r\n FRICTION_REDUCER_TYPE_ID: 'typeOfFrictionReducerId',\r\n FRICTION_REDUCER_CONSUMPTION: 'frictionReducerConsumption',\r\n TYPE_OF_HYDRAULIC_FUID: 'typeOfHydraulicFluid',\r\n HYDRAULIC_FUID_CONSUMPTION: 'hydraulicFluidConsumption',\r\n FRICTION_REDUCER_DESCRIPTION: 'frictionReducerDescription',\r\n};\r\n\r\nexport const EXPLOSIVES_FIELDS = {\r\n BOOSTER_BATCH_NUMBER: 'boosterBatchNumber',\r\n CHARGE_BATCH_NUMBER: 'chargeBatchNumber',\r\n CHARGER_TYPE_ID: 'chargerTypeId',\r\n CONSUMPTION: 'consumption',\r\n CORD_BATCH_NUMBER: 'cordBatchNumber',\r\n CUTTER_BATCH_NUMBER: 'cutterBatchNumber',\r\n IGNITER_BATCH_NUMBER: 'igniterBatchNumber',\r\n NUMBER_OF_BOOSTERS_USED: 'numberOfBoostersUsed',\r\n NUMBER_OF_CHARGERS_USED: 'numberOfChargersUsed',\r\n NUMBER_OF_IGNITERS_USED: 'numberOfIgnitersUsed',\r\n};\r\n","import { Map } from 'immutable';\r\nimport {\r\n CABLE_TAB_FIELDS,\r\n TOOLS_TAB_FIELDS,\r\n} from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { convertFromRaw, convertToRaw, EditorState } from 'draft-js';\r\n\r\nconst editorStateToString = (editorState) => {\r\n const rawContentState = convertToRaw(editorState.getCurrentContent());\r\n return JSON.stringify(rawContentState);\r\n};\r\n\r\nconst stringToEditorState = (str) => {\r\n const rawContentState = JSON.parse(str);\r\n const contentState = convertFromRaw(rawContentState);\r\n return EditorState.createWithContent(contentState);\r\n};\r\n\r\nconst DataAcquisitionMapper = {\r\n from: (dataAcquisition) => {\r\n const {\r\n [CABLE_TAB_FIELDS.COMMENTS]: comments,\r\n [TOOLS_TAB_FIELDS.DESCRIPTION]: description,\r\n ...restDataAcquisition\r\n } = dataAcquisition;\r\n restDataAcquisition[CABLE_TAB_FIELDS.COMMENTS] = comments\r\n ? stringToEditorState(comments)\r\n : undefined;\r\n restDataAcquisition[TOOLS_TAB_FIELDS.DESCRIPTION] = description\r\n ? stringToEditorState(description)\r\n : undefined;\r\n return Map({\r\n ...restDataAcquisition,\r\n });\r\n },\r\n to: (dataAcquisition) => {\r\n const {\r\n [CABLE_TAB_FIELDS.COMMENTS]: comments,\r\n [TOOLS_TAB_FIELDS.DESCRIPTION]: description,\r\n ...restDataAcquisition\r\n } = dataAcquisition;\r\n\r\n restDataAcquisition[CABLE_TAB_FIELDS.COMMENTS] = comments\r\n ? editorStateToString(comments)\r\n : null;\r\n restDataAcquisition[TOOLS_TAB_FIELDS.DESCRIPTION] = description\r\n ? editorStateToString(description)\r\n : null;\r\n\r\n return {\r\n ...restDataAcquisition,\r\n };\r\n },\r\n};\r\n\r\nconst dataAcquisitionMappers = {\r\n DataAcquisition: DataAcquisitionMapper,\r\n};\r\n\r\nexport default dataAcquisitionMappers;\r\n","import { fromJS } from 'immutable';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport dataAcquisitionMapper from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.mappers';\r\nimport { DATA_ACQUISITION_ACTIONS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_MAP,\r\n explosives: EMPTY_MAP,\r\n greaseTypes: EMPTY_LIST,\r\n glycolTypes: EMPTY_LIST,\r\n debrisTypes: EMPTY_LIST,\r\n injectionMediums: EMPTY_LIST,\r\n productionMediums: EMPTY_LIST,\r\n frictionReducerTypes: EMPTY_LIST,\r\n});\r\n\r\nconst dataAcquisitionReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case DATA_ACQUISITION_ACTIONS.GET_DATA_ACQUISITION_BY_TASK: {\r\n if (action.error) return state;\r\n\r\n const { taskId } = action;\r\n return state.setIn(\r\n ['data', taskId.toString()],\r\n dataAcquisitionMapper.DataAcquisition.from(action.payload),\r\n );\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.DELETE_DATA_ACQUISITION: {\r\n if (action.error) return state;\r\n\r\n return state.deleteIn(['data']);\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.GET_ALL_DEBRIS_TYPES: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('debrisTypes', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.GET_ALL_GLYCOL_TYPES: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('glycolTypes', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.GET_ALL_GREASE_TYPES: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('greaseTypes', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.GET_ALL_PRODUCTION_MEDIUMS: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('productionMediums', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.GET_ALL_INJECTION_MEDIUMS: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('injectionMediums', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.GET_ALL_FRICTION_REDUCER_TYPES: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('frictionReducerTypes', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n case DATA_ACQUISITION_ACTIONS.GET_EXPLOSIVES: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n return state.set('explosives', fromJS(payload));\r\n }\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default dataAcquisitionReducer;\r\n","import { fromJS } from 'immutable';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { TASK_ACTIONS as ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport mappers from 'mappers';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst taskFluidsReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case ACTIONS.GET_TASK_FLUIDS: {\r\n if (action.error) return state;\r\n const { payload } = action;\r\n\r\n if (payload) {\r\n const mapped = mappers.TaskFluids.from(payload);\r\n return state.set('data', fromJS(mapped));\r\n }\r\n return state;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default taskFluidsReducer;\r\n","import { combineReducers } from 'redux-immutable';\r\n\r\nimport toolstringReducer from 'features/projects/tasks/task/toolstring/toolstring.reducer';\r\nimport dataAcquisitionReducer from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.reducer';\r\nimport taskFluidsReducer from './dataAcquisition/components/Fluids/taskFluids.reducer';\r\n\r\nexport default combineReducers({\r\n toolstring: toolstringReducer,\r\n dataAcquisition: dataAcquisitionReducer,\r\n fluids: taskFluidsReducer,\r\n});\r\n","import { combineReducers } from 'redux-immutable';\r\n\r\nimport tasksReducer from 'features/projects/tasks/tasks.reducer';\r\nimport taskReducer from 'features/projects/tasks/task/task.reducer';\r\n\r\nexport default combineReducers({\r\n tasks: tasksReducer,\r\n task: taskReducer,\r\n});\r\n","import { List, fromJS, Map } from 'immutable';\r\n\r\nimport {\r\n toFacilityFromDto,\r\n toProjectStatusFromDto,\r\n toDepartmentFromDto,\r\n} from 'features/projects/projects.mappers';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\n\r\nconst initialState = fromJS({\r\n data: Map({\r\n statuses: EMPTY_LIST,\r\n facilities: EMPTY_LIST,\r\n departments: EMPTY_LIST,\r\n }),\r\n});\r\n\r\nconst projectsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case PROJECTS_ACTIONS.PROJECTS_PAGE_LOADED: {\r\n if (action.error) return initialState;\r\n\r\n const [_fields, facilities, statuses, departments] = action.payload;\r\n\r\n return state\r\n .setIn(['data', 'statuses'], List(statuses).map(toProjectStatusFromDto))\r\n .setIn(['data', 'facilities'], List(facilities).map(toFacilityFromDto))\r\n .setIn(\r\n ['data', 'departments'],\r\n List(departments).map(toDepartmentFromDto),\r\n );\r\n }\r\n\r\n case PROJECTS_ACTIONS.PROJECTS_PAGE_UNLOADED:\r\n return initialState;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectsReducer;\r\n","import isEqual from 'lodash/isEqual';\r\n\r\nimport mappers from 'mappers';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\n\r\nconst executeIntialState = mappers.Progress.initial();\r\n\r\nconst executeReducer = (state = executeIntialState, action) => {\r\n switch (action.type) {\r\n case ACTIVITIES_ACTIONS.GET_PROJECT_STATUS:\r\n case ACTIVITIES_ACTIONS.START_OPERATION:\r\n case ACTIVITIES_ACTIONS.END_OPERATION:\r\n case ACTIVITIES_ACTIONS.COMPLETE_TASK: {\r\n if (action.error) return state;\r\n\r\n const payload = mappers.Progress.from(action.payload);\r\n\r\n const currentProjectId = state.get('id');\r\n\r\n if (\r\n (currentProjectId && currentProjectId !== action.payload.projectId) ||\r\n isEqual(state, payload)\r\n ) {\r\n return state;\r\n }\r\n\r\n return payload;\r\n }\r\n\r\n case PROJECTS_ACTIONS.RESET_PROJECT_RESOURCES: {\r\n return executeIntialState;\r\n }\r\n\r\n case ACTIVITIES_ACTIONS.GET_PROJECT_STATUS_MOBILE: {\r\n if (action.error) return state;\r\n return mappers.Progress.from(action.payload);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default executeReducer;\r\n","import { fromJS, List } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { APP_ACTIONS, EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst eventsReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case APP_ACTIONS.EVENTS_LOADED:\r\n case APP_ACTIONS.EVENTS_PAGE_LOADED:\r\n if (action.error) return state;\r\n return state.set('data', List(action.payload).map(mappers.Event.from));\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default eventsReducer;\r\n","export const REPORT_ACTIONS = {\r\n PROJECT_REPORT_PAGE_LOADED: 'PROJECT_REPORT_PAGE_LOADED',\r\n PROJECT_REPORT_PAGE_UNLOADED: 'PROJECT_REPORT_PAGE_UNLOADED',\r\n PROJECT_REPORT_GET_ACTIVITIES: 'PROJECT_REPORT_GET_ACTIVITIES',\r\n PROJECT_REPORT_END_OF_JOB: 'PROJECT_REPORT_END_OF_JOB',\r\n};\r\n","import { Map, List } from 'immutable';\r\nimport { combineReducers } from 'redux-immutable';\r\n\r\nimport { REPORT_ACTIONS } from 'features/projects/report/report.constants';\r\nimport activitiesMappers from 'features/projects/activities/activities.mappers';\r\n\r\nconst dataInitialState = Map({\r\n activities: List(),\r\n});\r\n\r\nconst dataReducer = (state = dataInitialState, action) => {\r\n switch (action.type) {\r\n case REPORT_ACTIONS.PROJECT_REPORT_GET_ACTIVITIES: {\r\n if (action.error) return state;\r\n\r\n return state.update('activities', (activities) =>\r\n activities.concat(\r\n List(action.payload).map(activitiesMappers.Activity.from),\r\n ),\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default combineReducers({\r\n data: dataReducer,\r\n});\r\n","import { fromJS } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport { RISK_TABLE_ACTIONS } from 'features/projects/tasks/task/details/taskDetails.constants';\r\n\r\nconst initialState = fromJS({\r\n project: mappers.Project.initial(),\r\n fluids: mappers.ProjectFluids.initial(),\r\n});\r\n\r\nconst projectDetailsReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case PROJECTS_ACTIONS.RECEIVE_PROJECT: {\r\n if (action.error) return state;\r\n return state.set('project', mappers.Project.from(action.payload));\r\n }\r\n\r\n case PROJECTS_ACTIONS.RESET_PROJECT_RESOURCES: {\r\n return state.set('project', initialState.get('project'));\r\n }\r\n\r\n case PROJECTS_ACTIONS.GET_PROJECT_FLUIDS: {\r\n const mapped = mappers.ProjectFluids.from(action.payload);\r\n return state.set('fluids', mapped);\r\n }\r\n\r\n case RISK_TABLE_ACTIONS.RECEIVE_PROJECT_RISK_SECTIONS: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['project', 'projectRisk'], fromJS(action.payload));\r\n }\r\n\r\n case RISK_TABLE_ACTIONS.RECEIVE_TASK_RISK_BY_PROJECT: {\r\n if (action.error) return state;\r\n\r\n return state.setIn(['project', 'taskRisk'], fromJS(action.payload));\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectDetailsReducer;\r\n","import { fromJS } from 'immutable';\r\n\r\nimport {\r\n getInitials,\r\n getAvatar,\r\n editorStateToString,\r\n stringToEditorState,\r\n} from 'utils/app.util';\r\n\r\nconst lesson = () => {\r\n return {\r\n id: null,\r\n title: null,\r\n description: null,\r\n recommended: { actions: null },\r\n author: { id: null },\r\n created: null,\r\n modified: null,\r\n };\r\n};\r\n\r\nconst lessonFromDTO = ({\r\n lessonId,\r\n title,\r\n description,\r\n recommendedActions,\r\n createdByUserId,\r\n createdByUserFullName,\r\n createdByUserAvatar,\r\n created,\r\n modified,\r\n}) => {\r\n return fromJS({\r\n id: lessonId,\r\n title: title,\r\n description: description ? stringToEditorState(description) : null,\r\n recommended: {\r\n actions: recommendedActions\r\n ? stringToEditorState(recommendedActions)\r\n : null,\r\n },\r\n author: {\r\n id: createdByUserId,\r\n name: createdByUserFullName,\r\n initials: getInitials(createdByUserFullName),\r\n avatar: getAvatar(createdByUserAvatar),\r\n },\r\n created: created,\r\n modified: modified,\r\n });\r\n};\r\n\r\nconst lessonToDTO = ({ title, description, recommended }) => {\r\n return {\r\n title: title,\r\n description: description ? editorStateToString(description) : null,\r\n recommendedActions: recommended.actions\r\n ? editorStateToString(recommended.actions)\r\n : null,\r\n };\r\n};\r\n\r\nconst lessonMappers = {\r\n Lesson: {\r\n initial: lesson,\r\n from: lessonFromDTO,\r\n to: lessonToDTO,\r\n },\r\n};\r\n\r\nexport default lessonMappers;\r\n","export const LESSONS_ACTIONS = {\r\n CREATE_LESSON: 'CREATE_LESSON',\r\n UPDATE_LESSON: 'UPDATE_LESSON',\r\n DELETE_LESSON: 'DELETE_LESSON',\r\n PROJECT_LESSONS_PAGE_LOADED: 'PROJECT_LESSONS_PAGE_LOADED',\r\n PROJECT_LESSONS_PAGE_UNLOADED: 'PROJECT_LESSONS_PAGE_UNLOADED',\r\n};\r\n\r\nexport const MODAL = {\r\n EDIT_LESSON: 'EDIT_LESSON_MODAL_ID',\r\n CREATE_LESSON: 'CREATE_LESSON_MODAL_ID',\r\n};\r\n\r\nexport const CREATE_LESSON_FORM = {\r\n ID: 'createLesson',\r\n TITLE: 'title',\r\n DESCRIPTION: 'description',\r\n RECOMMENDED_ACTIONS: 'recommended.actions',\r\n};\r\n\r\nexport const EDIT_LESSON_FORM = {\r\n ID: 'editLesson',\r\n TITLE: 'title',\r\n DESCRIPTION: 'description',\r\n RECOMMENDED_ACTIONS: 'recommended.actions',\r\n};\r\n","import { fromJS, List } from 'immutable';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport lessonsMapper from 'features/projects/lessons/lessons.mappers';\r\nimport { LESSONS_ACTIONS } from 'features/projects/lessons/lessons.constants';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst lessonsReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case LESSONS_ACTIONS.PROJECT_LESSONS_PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'data',\r\n List(action.payload).map(lessonsMapper.Lesson.from),\r\n );\r\n }\r\n case LESSONS_ACTIONS.CREATE_LESSON: {\r\n if (action.error) return state;\r\n return state.update('data', (lessons) =>\r\n lessons.push(lessonsMapper.Lesson.from(action.payload)),\r\n );\r\n }\r\n case LESSONS_ACTIONS.UPDATE_LESSON: {\r\n if (action.error) return state;\r\n\r\n const { lessonId } = action;\r\n\r\n return state.update('data', (lessons) => {\r\n const index = lessons.findIndex(\r\n (lesson) => lesson.get('id') === lessonId,\r\n );\r\n\r\n return lessons.set(index, lessonsMapper.Lesson.from(action.payload));\r\n });\r\n }\r\n case LESSONS_ACTIONS.DELETE_LESSON: {\r\n if (action.error) return state;\r\n return state.update('data', (lessons) =>\r\n lessons.filterNot((lesson) => lesson.get('id') === action.id),\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default lessonsReducer;\r\n","import { fromJS } from 'immutable';\r\n\r\nimport {\r\n getInitials,\r\n getAvatar,\r\n editorStateToString,\r\n stringToEditorState,\r\n} from 'utils/app.util';\r\n\r\nconst incident = () => {\r\n return {\r\n id: null,\r\n title: null,\r\n description: null,\r\n caseNumber: null,\r\n author: { id: null },\r\n created: null,\r\n modified: null,\r\n };\r\n};\r\n\r\nconst incidentFromDTO = ({\r\n incidentId,\r\n title,\r\n description,\r\n caseNumber,\r\n createdByUserId,\r\n createdByUserFullName,\r\n createdByUserAvatar,\r\n created,\r\n modified,\r\n}) => {\r\n return fromJS({\r\n id: incidentId,\r\n title: title,\r\n description: description ? stringToEditorState(description) : null,\r\n caseNumber: caseNumber,\r\n author: {\r\n id: createdByUserId,\r\n name: createdByUserFullName,\r\n initials: getInitials(createdByUserFullName),\r\n avatar: getAvatar(createdByUserAvatar),\r\n },\r\n created: created,\r\n modified: modified,\r\n });\r\n};\r\n\r\nconst incidentToDTO = ({ title, description, caseNumber }) => {\r\n return {\r\n title: title,\r\n description: description ? editorStateToString(description) : null,\r\n caseNumber: caseNumber,\r\n };\r\n};\r\n\r\nconst incidentMappers = {\r\n Incident: {\r\n initial: incident,\r\n from: incidentFromDTO,\r\n to: incidentToDTO,\r\n },\r\n};\r\n\r\nexport default incidentMappers;\r\n","export const INCIDENTS_ACTIONS = {\r\n CREATE_INCIDENT: 'CREATE_INCIDENT',\r\n UPDATE_INCIDENT: 'UPDATE_INCIDENT',\r\n DELETE_INCIDENT: 'DELETE_INCIDENT',\r\n PROJECT_INCIDENTS_PAGE_LOADED: 'PROJECT_INCIDENTS_PAGE_LOADED',\r\n PROJECT_INCIDENTS_PAGE_UNLOADED: 'PROJECT_INCIDENTS_PAGE_UNLOADED',\r\n};\r\n\r\nexport const MODAL = {\r\n EDIT_INCIDENT: 'EDIT_INCIDENT_MODAL_ID',\r\n CREATE_INCIDENT: 'CREATE_INCIDENT_MODAL_ID',\r\n};\r\n\r\nexport const CREATE_INCIDENT_FORM = {\r\n ID: 'createIncident',\r\n TITLE: 'title',\r\n DESCRIPTION: 'description',\r\n CASE_NUMBER: 'caseNumber',\r\n};\r\n\r\nexport const EDIT_INCIDENT_FORM = {\r\n ID: 'editIncident',\r\n TITLE: 'title',\r\n DESCRIPTION: 'description',\r\n CASE_NUMBER: 'caseNumber',\r\n};\r\n\r\nexport const SYNERGY_CASE_URL = 'https://altus.synergilife.dnv.com/case/';\r\n","import { fromJS, List } from 'immutable';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport IncidentsMapper from 'features/projects/incidents/incidents.mappers';\r\nimport { INCIDENTS_ACTIONS } from 'features/projects/incidents/incidents.constants';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst incidentsReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case INCIDENTS_ACTIONS.PROJECT_INCIDENTS_PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n 'data',\r\n List(action.payload).map(IncidentsMapper.Incident.from),\r\n );\r\n }\r\n case INCIDENTS_ACTIONS.CREATE_INCIDENT: {\r\n if (action.error) return state;\r\n return state.update('data', (incidents) =>\r\n incidents.push(IncidentsMapper.Incident.from(action.payload)),\r\n );\r\n }\r\n case INCIDENTS_ACTIONS.UPDATE_INCIDENT: {\r\n if (action.error) return state;\r\n\r\n const { incidentId } = action;\r\n\r\n return state.update('data', (incidents) => {\r\n const index = incidents.findIndex(\r\n (incident) => incident.get('id') === incidentId,\r\n );\r\n\r\n return incidents.set(\r\n index,\r\n IncidentsMapper.Incident.from(action.payload),\r\n );\r\n });\r\n }\r\n case INCIDENTS_ACTIONS.DELETE_INCIDENT: {\r\n if (action.error) return state;\r\n return state.update('data', (incidents) =>\r\n incidents.filterNot((incident) => incident.get('id') === action.id),\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default incidentsReducer;\r\n","export const PROJECT_ASSET_TEST_ACTIONS = {\r\n PROJECT_ASSET_TEST_PAGE_LOADED: 'PROJECT_ASSET_TEST_PAGE_LOADED',\r\n PROJECT_ASSET_TEST_PAGE_UNLOADED: 'PROJECT_ASSET_TEST_PAGE_UNLOADED',\r\n };\r\n ","import { Format } from 'app/app.constants';\r\nimport { fromJS } from 'immutable';\r\nimport moment from 'moment';\r\n\r\nimport { extractTimeFromDate } from 'utils/app.util';\r\nimport { formatDate } from 'utils/format.util';\r\n\r\nexport const assetTestDTO = (assetTest) => {\r\n const { time } = assetTest;\r\n return fromJS({\r\n ...assetTest,\r\n date: formatDate(moment(time), Format.date_dayfirst),\r\n time: extractTimeFromDate(time),\r\n });\r\n};\r\n\r\nconst assetTestMappers = {\r\n ASSETTEST: {\r\n from: assetTestDTO,\r\n },\r\n};\r\n\r\nexport default assetTestMappers;\r\n","import { fromJS, List } from 'immutable';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { PROJECT_ASSET_TEST_ACTIONS } from 'features/projects/assets/assetTest.constants';\r\nimport assetTestMappers from 'features/projects/assets/assetTest.mappers';\r\n\r\nconst initialState = fromJS({\r\n data: EMPTY_LIST,\r\n});\r\n\r\nconst assetTestReducer = (state = initialState, action = {}) => {\r\n switch (action.type) {\r\n case PROJECT_ASSET_TEST_ACTIONS.PROJECT_ASSET_TEST_PAGE_LOADED: {\r\n if (action.error) return state;\r\n\r\n const result = state.set(\r\n 'data',\r\n List(action.payload).map(assetTestMappers.ASSETTEST.from),\r\n );\r\n\r\n return result;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default assetTestReducer;\r\n","import moment from 'moment';\r\nimport last from 'lodash/last';\r\nimport initial from 'lodash/initial';\r\nimport { fromJS, Map } from 'immutable';\r\n\r\nexport const initialDocument = () => {\r\n return {\r\n id: null,\r\n name: '',\r\n category: 1,\r\n extension: null,\r\n project: { id: null },\r\n wellbore: { id: null },\r\n created: null,\r\n modified: null,\r\n };\r\n};\r\n\r\nexport const initialChecklist = () => {\r\n return {\r\n id: null,\r\n name: '',\r\n link: '',\r\n listKeywords: '',\r\n documentLink: '',\r\n organizationId: '',\r\n procedureType: '',\r\n source: '',\r\n procedureDepartments: [],\r\n };\r\n};\r\n\r\nexport const toChecklistFromDto = ({\r\n id,\r\n name,\r\n link,\r\n listKeywords,\r\n source,\r\n documentLink,\r\n organizationId,\r\n procedureType,\r\n procedureDepartments,\r\n}) => {\r\n const keywordsArray =\r\n listKeywords.trim() !== ''\r\n ? listKeywords.split(';').map((keyword) => keyword.trim())\r\n : [];\r\n\r\n return fromJS({\r\n id,\r\n name,\r\n link,\r\n listKeywords: keywordsArray,\r\n source,\r\n documentLink,\r\n organizationId,\r\n procedureType,\r\n procedureDepartments,\r\n });\r\n};\r\n\r\nexport const toFileFromDTO = ({\r\n fileId,\r\n name,\r\n category,\r\n projectId,\r\n extension,\r\n created,\r\n modified,\r\n taskId,\r\n fullName,\r\n createdByUserId,\r\n categoryName,\r\n editDocumentUrl,\r\n createdByUser,\r\n}) => {\r\n return fromJS({\r\n id: fileId,\r\n name: name,\r\n category: category,\r\n extension: extension,\r\n project: { id: projectId },\r\n created: moment(created),\r\n modified: modified,\r\n taskId: taskId,\r\n fullName: fullName,\r\n createdByUserId,\r\n fileId,\r\n projectId,\r\n categoryName,\r\n editDocumentUrl,\r\n createdByUser,\r\n });\r\n};\r\n\r\nconst initialMetaFromFilename = ({ name }, initialCategory) => {\r\n const parts = name.split('.');\r\n\r\n return Map({\r\n name: initial(parts).join('.'),\r\n category: initialCategory.id,\r\n extension: `.${last(parts)}`,\r\n });\r\n};\r\n\r\nconst documentMappers = {\r\n Document: {\r\n initial: initialDocument,\r\n from: toFileFromDTO,\r\n Meta: {\r\n initial: initialMetaFromFilename,\r\n },\r\n },\r\n toFileFromDTO,\r\n initialDocument,\r\n Checklist: {\r\n initial: initialChecklist,\r\n from: toChecklistFromDto,\r\n },\r\n toChecklistFromDto,\r\n initialChecklist,\r\n};\r\n\r\nexport default documentMappers;\r\n","export const DOCUMENTS_ACTIONS = {\r\n UPDATE_PROJECT_FILE: 'UPDATE_PROJECT_FILE',\r\n UPLOAD_PROJECT_FILE: 'UPLOAD_PROJECT_FILE',\r\n DELETE_PROJECT_FILE: 'DELETE_PROJECT_FILE',\r\n RECEIVE_PROJECT_FILE: 'RECEIVE_PROJECT_FILE',\r\n RECEIVE_PROJECT_FILES: 'RECEIVE_PROJECT_FILES',\r\n DOWNLOAD_PROJECT_FILE: 'DOWNLOAD_PROJECT_FILE',\r\n UPLOAD_FILE_MODAL_UNLOADED: 'UPLOAD_FILE_MODAL_UNLOADED',\r\n SET_DOCUMENT_CATEGORY_FILTER: 'SET_DOCUMENT_CATEGORY_FILTER',\r\n PROJECT_DOCUMENTS_PAGE_LOADED: 'PROJECT_DOCUMENTS_PAGE_LOADED',\r\n PROJECT_DOCUMENTS_PAGE_UNLOADED: 'PROJECT_DOCUMENTS_PAGE_UNLOADED',\r\n GET_ALL_CHECKLISTS_AND_PROCEDURES: 'GET_ALL_CHECKLISTS_AND_PROCEDURES',\r\n RECEIVE_CHECKLISTS_AND_PROCEDURES: 'RECEIVE_CHECKLISTS_AND_PROCEDURES',\r\n};\r\n\r\nexport const CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE = {\r\n COMPANY: 'COMPANY',\r\n SERVICE: 'SERVICE',\r\n};\r\n\r\nexport const CHECKLISTS_AND_PROCEDURES_SOURCE = {\r\n COMPANY: 1,\r\n SERVICE: 2,\r\n};\r\n\r\nexport const INTERNAL_CATEGORIES = {\r\n INTERNAL: 'Internal',\r\n CHECKLISTS: 'Checklists',\r\n PROCEDURES: 'Procedures',\r\n};\r\n","import { Map, OrderedMap, List } from 'immutable';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport documentMapper from 'features/projects/documents/documents.mappers';\r\nimport { DOCUMENTS_ACTIONS } from 'features/projects/documents/documents.constants';\r\n\r\nconst initialState = Map({\r\n documents: EMPTY_MAP,\r\n checklistsAndProcedures: EMPTY_LIST,\r\n});\r\n\r\nconst documentsReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case DOCUMENTS_ACTIONS.RECEIVE_PROJECT_FILE: {\r\n if (error) return state;\r\n\r\n const { payload } = action;\r\n const newDocument = documentMapper.Document.from(payload);\r\n const newDocumentsMap = state\r\n .get('documents')\r\n .set(payload.fileId.toString(), newDocument);\r\n\r\n return state.set('documents', newDocumentsMap);\r\n }\r\n\r\n case DOCUMENTS_ACTIONS.DELETE_PROJECT_FILE: {\r\n if (error) return state;\r\n\r\n const { fileId } = action;\r\n const newDocumentsMap = state.get('documents').delete(fileId.toString());\r\n\r\n return state.set('documents', newDocumentsMap);\r\n }\r\n\r\n case DOCUMENTS_ACTIONS.RECEIVE_PROJECT_FILES: {\r\n if (error) return state;\r\n return state.setIn(\r\n ['documents'],\r\n OrderedMap(\r\n payload.map((file) => [\r\n file.fileId.toString(),\r\n documentMapper.Document.from(file),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case DOCUMENTS_ACTIONS.RECEIVE_CHECKLISTS_AND_PROCEDURES: {\r\n if (error) return state;\r\n\r\n return state.setIn(\r\n ['checklistsAndProcedures'],\r\n List(payload.map((file) => documentMapper.Checklist.from(file))),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default documentsReducer;\r\n","import { Map, List } from 'immutable';\r\nimport { combineReducers } from 'redux-immutable';\r\n\r\nimport { LoadingDataState, NotRequestedDataState } from 'altus-datastate';\r\n\r\nimport {\r\n STATE,\r\n ACTIVITIES_ACTIONS,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport { APP_ACTIONS } from 'app/app.constants';\r\nimport tasksMappers from 'features/projects/tasks/tasks.mappers';\r\nimport activitiesMappers from 'features/projects/activities/activities.mappers';\r\n\r\nconst dataInitialState = Map({\r\n [STATE.DATA_TASKS]: List(),\r\n [STATE.TIMERS]: List(),\r\n [STATE.DATA_ACTIVITY_TYPES]: List(),\r\n [STATE.DATA_ACTIVITY_TYPES_WAITING]: List(),\r\n [STATE.DATA_ACTIVITY_TYPES_POINT_IN_TIME]: List(),\r\n autosave: NotRequestedDataState,\r\n});\r\n\r\nconst dataReducer = (state = dataInitialState, action) => {\r\n switch (action.type) {\r\n case ACTIVITIES_ACTIONS.GET_ALL_TASKS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n STATE.DATA_TASKS,\r\n List(action.payload).map(tasksMappers.Task.from),\r\n );\r\n }\r\n case ACTIVITIES_ACTIONS.GET_ALL_ACTIVITY_TYPES: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n STATE.DATA_ACTIVITY_TYPES,\r\n List(action.payload).map(activitiesMappers.ActivityType.from),\r\n );\r\n }\r\n case ACTIVITIES_ACTIONS.ACTIVITIES_UNINITIALIZED: {\r\n return dataInitialState\r\n .set(STATE.DATA_ACTIVITY_TYPES, state.get(STATE.DATA_ACTIVITY_TYPES))\r\n .set(\r\n STATE.DATA_ACTIVITY_TYPES_WAITING,\r\n state.get(STATE.DATA_ACTIVITY_TYPES_WAITING),\r\n )\r\n .set(\r\n STATE.DATA_ACTIVITY_TYPES_POINT_IN_TIME,\r\n state.get(STATE.DATA_ACTIVITY_TYPES_POINT_IN_TIME),\r\n );\r\n }\r\n\r\n case ACTIVITIES_ACTIONS.START_OPERATION:\r\n case ACTIVITIES_ACTIONS.COMPLETE_TASK:\r\n case ACTIVITIES_ACTIONS.ACTIVITY_GO_BACK: {\r\n if (action.error) return state;\r\n const { currentTask, previousTask } = action.payload;\r\n\r\n return state\r\n .update(STATE.DATA_TASKS, (tasks) => {\r\n if (!previousTask) return tasks;\r\n\r\n const index = tasks.findIndex(\r\n (task) => task.get('id') === previousTask.taskId,\r\n );\r\n return tasks.set(index, tasksMappers.Task.from(previousTask));\r\n })\r\n .update(STATE.DATA_TASKS, (tasks) => {\r\n if (!currentTask) return tasks;\r\n\r\n const index = tasks.findIndex(\r\n (task) => task.get('id') === currentTask.taskId,\r\n );\r\n return tasks.set(index, tasksMappers.Task.from(currentTask));\r\n });\r\n }\r\n\r\n case ACTIVITIES_ACTIONS.GET_WAITING_ACTIVITY_TYPES: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n STATE.DATA_ACTIVITY_TYPES_WAITING,\r\n List(action.payload).map(activitiesMappers.ActivityType.from),\r\n );\r\n }\r\n\r\n case ACTIVITIES_ACTIONS.GET_POINT_IN_TIME_ACTIVITY_TYPES: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n STATE.DATA_ACTIVITY_TYPES_POINT_IN_TIME,\r\n List(action.payload).map(activitiesMappers.ActivityType.from),\r\n );\r\n }\r\n\r\n case ACTIVITIES_ACTIONS.GET_PROJECT_TIMERS: {\r\n if (action.error) return state;\r\n\r\n return state.set(\r\n STATE.TIMERS,\r\n activitiesMappers.Timers.from(action.payload),\r\n );\r\n }\r\n\r\n case APP_ACTIONS.ASYNC_START: {\r\n const { subtype } = action;\r\n\r\n switch (subtype) {\r\n case ACTIVITIES_ACTIONS.UPDATE_ACTIVITY: {\r\n const { autosave } = action;\r\n\r\n return state.set(\r\n 'autosave',\r\n autosave ? LoadingDataState : NotRequestedDataState,\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n }\r\n\r\n case APP_ACTIONS.ASYNC_END: {\r\n const { subtype } = action;\r\n\r\n switch (subtype) {\r\n case ACTIVITIES_ACTIONS.UPDATE_ACTIVITY: {\r\n return state.set('autosave', NotRequestedDataState);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default combineReducers({\r\n data: dataReducer,\r\n});\r\n","export const PROJECT_WELLBORE_ACTIONS = {\r\n RECEIVE_PROJECT_WELLBORE: 'RECEIVE_PROJECT_WELLBORE',\r\n RECEIVE_PROJECT_WELLBORE_TRAJECTORY: 'RECEIVE_PROJECT_WELLBORE_TRAJECTORY',\r\n\r\n GET_PROJECT_WELLBORE: 'GET_PROJECT_WELLBORE',\r\n PROJECT_WELLBORE_ON_LOAD: 'PROJECT_WELLBORE_ON_LOAD',\r\n GET_PROJECT_WELLBORE_TRAJECTORY: 'GET_PROJECT_WELLBORE_TRAJECTORY',\r\n SYNC_PROJECT_WELLBORE_TRAJECTORY_WITH_LATEST:\r\n 'SYNC_PROJECT_WELLBORE_TRAJECTORY_WITH_LATEST',\r\n UPDATE_PROJECT_WELLBORE_CONFIRMATION_DIALOG:\r\n 'UPDATE_PROJECT_WELLBORE_CONFIRMATION_DIALOG',\r\n};\r\n","import mappers from 'mappers';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { PROJECT_WELLBORE_ACTIONS } from 'features/projects/wellbore/projectWellbore.constants';\r\n\r\nconst initialState = EMPTY_MAP;\r\n\r\nconst projectWellboreReducer = (state = initialState, action) => {\r\n const { type, error, payload } = action;\r\n\r\n switch (type) {\r\n case PROJECT_WELLBORE_ACTIONS.RECEIVE_PROJECT_WELLBORE: {\r\n if (error) return state;\r\n\r\n return state.merge(mappers.Wellbore.from(payload));\r\n }\r\n\r\n case PROJECT_WELLBORE_ACTIONS.RECEIVE_PROJECT_WELLBORE_TRAJECTORY: {\r\n if (error) return state;\r\n\r\n return state.set('trajectory', mappers.Trajectory.from(payload));\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default projectWellboreReducer;\r\n","import { combineReducers } from 'redux-immutable';\r\n\r\nimport nptReducer from 'features/projects/npt/npt.reducer';\r\nimport teamReducer from 'features/projects/team/team.reducer';\r\nimport planReducer from 'features/projects/tasks/plan.reducer';\r\nimport projectsReducer from 'features/projects/projects.reducer';\r\nimport progressReducer from 'features/projects/progress.reducer';\r\nimport eventsReducer from 'features/projects/events/events.reducer';\r\nimport reportReducer from 'features/projects/report/report.reducer';\r\nimport detailsReducer from 'features/projects/details/details.reducer';\r\nimport lessonsReducer from 'features/projects/lessons/lessons.reducer';\r\nimport incidentsReducer from 'features/projects/incidents/incidents.reducer';\r\nimport assetTestReducer from 'features/projects/assets/assetTest.reducer';\r\n\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport documentsReducer from 'features/projects/documents/documents.reducer';\r\nimport activitiesReducer from 'features/projects/activities/activities.reducer';\r\nimport projectWellboreReducer from 'features/projects/wellbore/projectWellbore.reducer';\r\n\r\nconst projectReducers = combineReducers({\r\n activities: activitiesReducer,\r\n data: projectsReducer,\r\n details: detailsReducer,\r\n wellbore: projectWellboreReducer,\r\n documents: documentsReducer,\r\n events: eventsReducer,\r\n lessons: lessonsReducer,\r\n incidents: incidentsReducer,\r\n assetTests: assetTestReducer,\r\n report: reportReducer,\r\n plan: planReducer,\r\n npt: nptReducer,\r\n team: teamReducer,\r\n progress: progressReducer,\r\n});\r\n\r\nconst projectReducer = (state, action) => {\r\n if (action.type === PROJECTS_ACTIONS.PROJECT_PAGES_UNLOADED) {\r\n state = undefined;\r\n }\r\n\r\n return projectReducers(state, action);\r\n};\r\n\r\nexport default projectReducer;\r\n","import { OrderedMap, fromJS, Set } from 'immutable';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport authorizationMappers from 'authorization/authorization.mappers';\r\nimport { AUTHORIZATION_ACTIONS } from 'authorization/authorization.constants';\r\n\r\nconst initialState = fromJS({\r\n systemRoles: EMPTY_MAP,\r\n projectRoles: EMPTY_MAP,\r\n userRoles: EMPTY_MAP,\r\n projectPermissions: EMPTY_MAP,\r\n systemPermissions: EMPTY_MAP,\r\n projectRolePermissions: EMPTY_MAP,\r\n systemRolePermissions: EMPTY_MAP,\r\n systemRoleProjectPermissions: EMPTY_MAP,\r\n});\r\n\r\nconst authorizationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLES: {\r\n if (action.error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n 'systemRoles',\r\n OrderedMap(\r\n payload.map((systemRole) => [\r\n systemRole.roleId.toString(),\r\n authorizationMappers.SystemRole.from(systemRole),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.CREATE_SYSTEM_ROLE:\r\n case AUTHORIZATION_ACTIONS.UPDATE_SYSTEM_ROLE:\r\n case AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLE: {\r\n if (action.error) return state;\r\n\r\n const { payload: systemRole } = action;\r\n\r\n return state.setIn(\r\n ['systemRoles', systemRole.roleId.toString()],\r\n authorizationMappers.SystemRole.from(systemRole),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.DELETE_SYSTEM_ROLE: {\r\n if (action.error) return state;\r\n\r\n const { systemRoleId } = action;\r\n\r\n return state.deleteIn(['systemRoles', systemRoleId.toString()]);\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.GET_PROJECT_ROLES: {\r\n if (action.error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n 'projectRoles',\r\n OrderedMap(\r\n payload.map((projectRole) => [\r\n projectRole.roleId.toString(),\r\n authorizationMappers.ProjectRole.from(projectRole),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.GET_USERS_ASSIGNED_TO_SYSTEM_ROLE: {\r\n if (action.error) return state;\r\n\r\n const { payload, roleId } = action;\r\n\r\n return state.setIn(\r\n ['userRoles', roleId.toString()],\r\n Set(payload.map((user) => user.userId.toString())),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.CREATE_PROJECT_ROLE:\r\n case AUTHORIZATION_ACTIONS.UPDATE_PROJECT_ROLE:\r\n case AUTHORIZATION_ACTIONS.GET_PROJECT_ROLE: {\r\n if (action.error) return state;\r\n\r\n const { payload: projectRole } = action;\r\n\r\n return state.setIn(\r\n ['projectRoles', projectRole.roleId.toString()],\r\n authorizationMappers.ProjectRole.from(projectRole),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.DELETE_PROJECT_ROLE: {\r\n if (action.error) return state;\r\n\r\n const { projectRoleId } = action;\r\n\r\n return state.deleteIn(['projectRoles', projectRoleId.toString()]);\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.ASSIGN_PERMISSIONS_TO_PROJECT_ROLE:\r\n case AUTHORIZATION_ACTIONS.UNASSIGN_PERMISSIONS_FROM_PROJECT_ROLE:\r\n case AUTHORIZATION_ACTIONS.GET_PROJECT_ROLE_PERMISSIONS: {\r\n if (action.error) return state;\r\n\r\n const { payload, roleId } = action;\r\n\r\n return state.setIn(\r\n ['projectRolePermissions', roleId.toString()],\r\n Set(payload.map((rolePermission) => rolePermission.permissionId)),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.ASSIGN_SYSTEM_PERMISSIONS_TO_SYSTEM_ROLE:\r\n case AUTHORIZATION_ACTIONS.UNASSIGN_SYSTEM_PERMISSIONS_FROM_SYSTEM_ROLE:\r\n case AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLE_PERMISSIONS: {\r\n if (action.error) return state;\r\n\r\n const { payload, roleId } = action;\r\n\r\n return state.setIn(\r\n ['systemRolePermissions', roleId.toString()],\r\n Set(payload.map((rolePermission) => rolePermission.permissionId)),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.ASSIGN_PROJECT_PERMISSIONS_TO_SYSTEM_ROLE:\r\n case AUTHORIZATION_ACTIONS.UNASSIGN_PROJECT_PERMISSIONS_FROM_SYSTEM_ROLE:\r\n case AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLE_PROJECT_PERMISSIONS: {\r\n if (action.error) return state;\r\n\r\n const { payload, roleId } = action;\r\n\r\n return state.setIn(\r\n ['systemRoleProjectPermissions', roleId.toString()],\r\n Set(payload.map((rolePermission) => rolePermission.permissionId)),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.GET_PROJECT_PERMISSIONS: {\r\n if (action.error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n 'projectPermissions',\r\n OrderedMap(\r\n payload.map((permission) => [\r\n permission.permissionId.toString(),\r\n authorizationMappers.Permission.from(permission),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n case AUTHORIZATION_ACTIONS.GET_SYSTEM_PERMISSIONS: {\r\n if (action.error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n 'systemPermissions',\r\n OrderedMap(\r\n payload.map((permission) => [\r\n permission.permissionId.toString(),\r\n authorizationMappers.Permission.from(permission),\r\n ]),\r\n ),\r\n );\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default authorizationReducer;\r\n","import { Map, OrderedMap } from 'immutable';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_MAP, EMPTY_LIST } from 'app/app.constants';\r\nimport {\r\n OPERATIONS_ACTIONS,\r\n STATE,\r\n} from 'features/operations/operations.constants';\r\n\r\nconst initialState = Map({\r\n [STATE.PAGE_RESULTS]: EMPTY_LIST,\r\n [STATE.PAGE_PARAMS]: EMPTY_MAP,\r\n});\r\n\r\nconst operationsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case OPERATIONS_ACTIONS.RECEIVE_OPERATIONS_LIVE_PROJECTS: {\r\n if (action.error) return state;\r\n\r\n const { results, ...rest } = action.payload;\r\n const operations = OrderedMap(\r\n results.map((operation) => [\r\n operation.project.projectId.toString(),\r\n mappers.Operation.from(operation),\r\n ]),\r\n );\r\n return state\r\n .set(STATE.PAGE_PARAMS, new OrderedMap({ ...rest }))\r\n .set(STATE.PAGE_RESULTS, operations);\r\n }\r\n\r\n case OPERATIONS_ACTIONS.RECEIVE_OPERATIONS: {\r\n if (action.error) return state;\r\n\r\n const operations = OrderedMap(\r\n action.payload.map((operation) => [\r\n operation.project.projectId.toString(),\r\n mappers.Operation.from(operation),\r\n ]),\r\n );\r\n return state\r\n .set(STATE.PAGE_PARAMS, {})\r\n .set(STATE.PAGE_RESULTS, operations);\r\n }\r\n\r\n case OPERATIONS_ACTIONS.RECEIVE_OPERATION: {\r\n if (action.error) return state;\r\n\r\n const { payload } = action;\r\n\r\n return state.set(\r\n payload.projectId.toString(),\r\n mappers.Operation.from(payload),\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default operationsReducer;\r\n","import { combineReducers } from 'redux-immutable';\r\nimport { reducer as formReducer } from 'redux-form/immutable';\r\n\r\nimport {\r\n confirmationReducer,\r\n notificationReducer,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { modalReducer } from 'altus-modal';\r\nimport { dataStateReducer } from 'altus-datastate';\r\n\r\nimport wellReducer from 'features/wells/well.reducer';\r\nimport entityReducer from 'app/reducers/entityReducer';\r\nimport routerReducer from 'app/reducers/router.reducer';\r\nimport commonReducer from 'app/reducers/common.reducer';\r\nimport toolReducer from 'features/projects/tool/tool.reducer';\r\nimport projectReducer from 'features/projects/project.reducer';\r\nimport authorizationReducer from 'authorization/authorization.reducer';\r\nimport operationsReducer from 'features/operations/operations.reducer';\r\n\r\nconst appReducers = combineReducers({\r\n form: formReducer,\r\n dataState: dataStateReducer,\r\n modal: modalReducer,\r\n common: commonReducer,\r\n router: routerReducer,\r\n projects: projectReducer,\r\n wells: wellReducer,\r\n confirmation: confirmationReducer,\r\n notification: notificationReducer,\r\n authorization: authorizationReducer,\r\n entity: entityReducer,\r\n tool: toolReducer,\r\n operations: operationsReducer,\r\n});\r\n\r\nexport default appReducers;\r\n","import createSagaMiddleware from 'redux-saga';\r\nimport { applyMiddleware, compose, createStore } from 'redux';\r\nimport { routerMiddleware } from 'connected-react-router/immutable';\r\n\r\nimport {\r\n thunkMiddleware,\r\n promiseMiddleware,\r\n confirmationMiddleware,\r\n createNotificationMiddleware,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport rootSaga from 'app/sagas/rootSaga';\r\nimport history from 'infrastructure/history';\r\nimport { onUnauthorized } from 'app/app.actions';\r\nimport rootReducer from 'app/reducers/rootReducer';\r\nimport { IN_DEV } from 'app/app.constants';\r\n\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\nconst sagaMiddleware = createSagaMiddleware({\r\n onError: IN_DEV ? console.log : undefined,\r\n});\r\n\r\nconst notificationMiddleware = createNotificationMiddleware({\r\n onUnauthorized: () => store.dispatch(onUnauthorized()),\r\n});\r\n\r\nconst defaultMiddlewares = [\r\n confirmationMiddleware,\r\n sagaMiddleware,\r\n thunkMiddleware,\r\n routerMiddleware(history),\r\n promiseMiddleware,\r\n notificationMiddleware,\r\n];\r\n\r\nconst store = createStore(\r\n rootReducer,\r\n composeEnhancers(applyMiddleware(...defaultMiddlewares)),\r\n);\r\n\r\nsagaMiddleware.run(rootSaga);\r\n\r\nexport default store;\r\n","import { all } from 'redux-saga/effects';\r\n\r\nimport toolSaga from 'features/projects/tool/tool.sagas';\r\nimport taskSaga from 'features/projects/tasks/task.sagas';\r\nimport activitySaga from 'features/projects/activities/activity.sagas';\r\nimport dashboardSaga from 'features/projects/dashboard/dashboard.sagas';\r\nimport wellboreSectionsSaga from 'features/wells/sections/wellboreSection.sagas';\r\nimport riskSaga from 'features/projects/risks.sagas';\r\nimport simulationSaga from 'features/projects/tasks/task/simulation/simulation.sagas';\r\nimport toolstringSaga from 'features/projects/tasks/task/toolstring/toolstring.sagas';\r\nimport projectWellboreDetailsSaga from 'features/projects/wellbore/details/projectWellboreDetails.sagas';\r\nimport simulationParametersSaga from 'features/projects/tasks/task/simulation/parameters/simulationParameter.sagas';\r\nimport projectSaga from 'features/projects/project.sagas';\r\nimport simulationDynamicToolParametersSaga from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.sagas';\r\nimport wellboreSagas from 'features/wells/wellbore.sagas';\r\nimport changeLogSaga from 'features/changelog/changelog-saga';\r\nimport projectMobilisationSaga from 'features/projects/mobilisation/projectMobilisation.sagas';\r\n\r\nexport default function* rootSaga() {\r\n yield all([\r\n toolSaga(),\r\n taskSaga(),\r\n activitySaga(),\r\n dashboardSaga(),\r\n toolstringSaga(),\r\n simulationSaga(),\r\n wellboreSectionsSaga(),\r\n simulationParametersSaga(),\r\n simulationDynamicToolParametersSaga(),\r\n projectWellboreDetailsSaga(),\r\n projectSaga(),\r\n riskSaga(),\r\n wellboreSagas(),\r\n changeLogSaga(),\r\n projectMobilisationSaga(),\r\n ]);\r\n}\r\n","import { Map } from 'immutable';\r\nimport { createTheme } from '@material-ui/core/styles';\r\n\r\nimport {\r\n blue,\r\n grey,\r\n green,\r\n orange,\r\n yellow,\r\n amber,\r\n lightGreen,\r\n purple,\r\n red,\r\n deepPurple,\r\n teal,\r\n lightBlue,\r\n indigo,\r\n blueGrey,\r\n lime,\r\n} from '@material-ui/core/colors';\r\n\r\nimport { defaultOptions as defaultThemeOptions, THEMES } from 'altus-ui-theme';\r\n\r\nimport {\r\n ENVIRONMENTS,\r\n ProjectWellboreDetailStatus,\r\n PROJECT_STATUS as ProjectStatus,\r\n} from 'app/app.constants';\r\n\r\nexport const defaultThemeType = THEMES.DARK;\r\n\r\nconst primary = 'rgb(16, 95, 154)';\r\nconst primaryLight = '#b7d1ed';\r\nconst primaryHover = '#244c69';\r\nconst newPrimaryLight = blue[200];\r\nconst rowColor = grey[800];\r\nconst rowHover = grey[700];\r\nconst rowSelected = primary;\r\nconst warningPrimary = '#FFA726';\r\nconst disabledGrey = '#a1a1a1';\r\nconst selection = blue[200];\r\nconst success = green[500];\r\nconst warning = yellow[500];\r\nconst error = red[500];\r\nconst unknown = grey[500];\r\n\r\nexport const defaultTheme = createTheme({\r\n palette: {\r\n type: defaultThemeType,\r\n },\r\n});\r\n\r\nconst defaultDwiThemeOptions = {\r\n altus: {\r\n background: {\r\n header: primary,\r\n dashboard: '#2c2c2c',\r\n },\r\n highlight: {\r\n marker: primary,\r\n },\r\n action: {\r\n decision: blue[500],\r\n question: yellow[500],\r\n },\r\n statusColor: {\r\n [ProjectWellboreDetailStatus.DRAFT]: amber[100],\r\n [ProjectWellboreDetailStatus.REQUIRES_APPROVAL]: blue[200],\r\n },\r\n components: {\r\n TableRow: {\r\n background: rowColor,\r\n hoverColor: rowHover,\r\n },\r\n SortableListRow: {\r\n stripedColor: rowColor,\r\n background: rowColor,\r\n selectedColor: rowSelected,\r\n },\r\n SortableListHeader: {\r\n columnBackground: rowColor,\r\n background: rowColor,\r\n border: 'none',\r\n },\r\n SortableListActionsHeader: {\r\n background: 'transparent',\r\n },\r\n SortableListRowColumn: {\r\n textColor: grey[100],\r\n },\r\n ApplicationSidebar: {\r\n background: grey[900],\r\n header: {\r\n background: grey[900],\r\n },\r\n },\r\n ApplicationSidebarMenuItem: {\r\n background: {\r\n hover: grey[700],\r\n active: grey[700],\r\n },\r\n textColor: defaultTheme.palette.secondary.contrastText,\r\n iconColor: defaultTheme.palette.secondary.contrastText,\r\n },\r\n ModalContainer: {\r\n content: {\r\n padding: 25,\r\n },\r\n },\r\n AutocompleteTextField: {\r\n InputLabelColor: red[500],\r\n },\r\n RichtextEditor: {\r\n main: defaultTheme.palette.common.white,\r\n disabled: disabledGrey,\r\n },\r\n Switch: {\r\n disabled: disabledGrey,\r\n },\r\n ContextualizedWell: {\r\n tooltip: {\r\n background: {\r\n main: '#5c5c5c',\r\n },\r\n },\r\n trajectory: {\r\n depth: orange[600],\r\n dhsv: success,\r\n targetDepth: yellow[600],\r\n maximumWorkingDepth: red[500],\r\n graph: grey[800],\r\n water: '#0a5498',\r\n soil: '#ab7954',\r\n pipe: '#F5F5F5',\r\n nipple: '#8D918D',\r\n axisHelper: grey[500],\r\n base: blueGrey[100],\r\n },\r\n bha: {\r\n main: '#63686c',\r\n },\r\n metal: {\r\n main: '#919598',\r\n light: '#aaa9ad',\r\n },\r\n },\r\n SmLocation: {\r\n statusIndicator: {\r\n ping: success,\r\n noPing: warning,\r\n unknown: unknown,\r\n error: error,\r\n },\r\n },\r\n ToolstringPreview: {\r\n lengthSection: {\r\n main: amber['A700'],\r\n },\r\n },\r\n SimulationDashboard: {\r\n series: {\r\n yAxis: red[500],\r\n SurfaceWeightRIH: lightBlue[200],\r\n SurfaceWeightPOOH: lightBlue[500],\r\n SWSafeOperatingLoad: '#FF41FF',\r\n CompressionLimit: yellow['A200'],\r\n WeakPoint: purple[200],\r\n MaxSetDown: indigo[100],\r\n MaxPickupForcePOOH: indigo['A100'],\r\n MinTractorPull: success,\r\n CableHeadTensionRIH: red['A100'],\r\n CableHeadTensionPOOH: '#F76464',\r\n JarActivation: success,\r\n StretchRIH: '#FAD000',\r\n StretchPOOH: '#FA9A00',\r\n },\r\n plotBands: {\r\n RIH: blue[300],\r\n POOH: blue[800],\r\n },\r\n header: {\r\n checked: green[600],\r\n },\r\n },\r\n Dashboards: {\r\n metalMilling: {\r\n icon: green[900],\r\n ropMetric: '#74FA02',\r\n },\r\n },\r\n Mobilisation: {\r\n tasksMenu: {\r\n selected: '#0F5E99',\r\n },\r\n },\r\n GanttChart: {\r\n status: {\r\n plan: blue[500],\r\n rest: lightGreen.A400,\r\n },\r\n },\r\n RiskMatrix: {\r\n background: {\r\n red: error,\r\n yellow: lime['A100'],\r\n green: success,\r\n },\r\n },\r\n },\r\n },\r\n palette: {\r\n environment: {\r\n [ENVIRONMENTS.LOCAL]: lightGreen[500],\r\n [ENVIRONMENTS.DEV]: orange[500],\r\n //[ENVIRONMENTS.TST]: yellow[500],\r\n [ENVIRONMENTS.TST]: teal[500],\r\n // [ENVIRONMENTS.DEM]: purple[500],\r\n [ENVIRONMENTS.DEM]: teal[500],\r\n [ENVIRONMENTS.TRAINING]: red[500],\r\n },\r\n action: {\r\n hoverOpacity: 0.5,\r\n selected: selection,\r\n },\r\n warning: {\r\n main: warningPrimary,\r\n light: warningPrimary,\r\n dark: warningPrimary,\r\n },\r\n error: {\r\n main: error,\r\n },\r\n success: {\r\n main: success,\r\n },\r\n primary: {\r\n main: primary,\r\n light: primaryLight,\r\n newLight: newPrimaryLight,\r\n },\r\n secondary: {\r\n dark: grey[900],\r\n darkGrey: rowColor,\r\n main: grey[700],\r\n mainLight: grey[600],\r\n light: grey[500],\r\n lighter: grey[300],\r\n cssGray: '#808080',\r\n },\r\n table: {\r\n row: {\r\n main: rowColor,\r\n hover: rowHover,\r\n selected: rowSelected,\r\n },\r\n header: {\r\n main: rowColor,\r\n hover: rowColor,\r\n selected: rowColor,\r\n },\r\n },\r\n tabs: {\r\n selected: primary,\r\n background: {\r\n main: '#303030',\r\n light: '#383838',\r\n },\r\n },\r\n },\r\n overrides: {\r\n MultiSelectModal: {\r\n rootContent: {\r\n '& .Mui-checked': {\r\n color: primary,\r\n },\r\n },\r\n },\r\n SortableListActionsHeader: {\r\n root: {\r\n '&:hover': {\r\n background: 'transparent',\r\n },\r\n },\r\n },\r\n TableHeaderRow: {\r\n root: {\r\n background: rowColor,\r\n borderBottom: `2px solid ${rowHover}`,\r\n marginBottom: defaultTheme.spacing(0.5),\r\n },\r\n },\r\n TableHeaderCell: {\r\n sortedColumn: {\r\n background: rowColor,\r\n },\r\n },\r\n TableCell: {\r\n root: {\r\n maxHeight: 'inherit',\r\n },\r\n },\r\n TableRow: {\r\n root: {\r\n marginBottom: defaultTheme.spacing(0.25),\r\n minHeight: defaultThemeOptions.altus.components.SortableListRow.height,\r\n maxHeight: defaultThemeOptions.altus.components.SortableListRow.height,\r\n '&:hover': {\r\n background: rowHover,\r\n },\r\n '& > &': {\r\n marginBottom: 0, // TODO Table component has a nested element with the same classname, making the child element have margin as well. Check if this can be fixed inside ui-core instead\r\n },\r\n },\r\n rootBackground: {\r\n backgroundColor: rowColor,\r\n },\r\n rootStriped: {\r\n backgroundColor: rowColor,\r\n '&:nth-child(even)': {\r\n backgroundColor: rowColor,\r\n },\r\n '&:hover': {\r\n background: rowHover,\r\n },\r\n },\r\n rootSelected: {\r\n backgroundColor: rowColor,\r\n '&:nth-child(even)': {\r\n backgroundColor: rowColor,\r\n },\r\n },\r\n rootBorder: {\r\n borderWidth: 0,\r\n },\r\n },\r\n SortableListHeader: {\r\n root: {\r\n background: rowColor,\r\n marginBottom: defaultTheme.spacing(0.5),\r\n },\r\n rootBorder: {\r\n borderBottom: `2px solid ${rowHover}`,\r\n },\r\n },\r\n // TODO Switch out all instances of SortableList > Table and remove this\r\n SortableListRow: {\r\n root: {\r\n height: 'auto',\r\n marginBottom: defaultTheme.spacing(0.25),\r\n minHeight: defaultThemeOptions.altus.components.SortableListRow.height,\r\n '&:hover': {\r\n backgroundColor: rowHover,\r\n },\r\n },\r\n rootBackground: {\r\n backgroundColor: rowColor,\r\n },\r\n rootStriped: {\r\n backgroundColor: rowColor,\r\n '&:nth-child(even)': {\r\n backgroundColor: rowColor,\r\n },\r\n '&:hover': {\r\n backgroundColor: rowHover,\r\n },\r\n },\r\n rootBorder: {\r\n borderWidth: 0,\r\n },\r\n },\r\n TableFilter: {\r\n tableRowRoot: {\r\n '&:hover': {\r\n background: defaultTheme.palette.background.paper,\r\n },\r\n },\r\n },\r\n BasePage: {\r\n children: {\r\n overflow: 'auto',\r\n },\r\n },\r\n NavigationTile: {\r\n tileRoot: {\r\n background: grey[900],\r\n '&:hover': {\r\n background: grey[700],\r\n },\r\n },\r\n tileTitle: {\r\n color: defaultTheme.palette.secondary.contrastText,\r\n },\r\n tileIcon: {\r\n color: defaultTheme.palette.secondary.contrastText,\r\n },\r\n },\r\n BasePageTitle: {\r\n titleIcon: {\r\n color: defaultTheme.palette.secondary.contrastText,\r\n },\r\n },\r\n PaperListItem: {\r\n expansionPanelDetailsRoot: {\r\n width: '100%',\r\n },\r\n },\r\n MuiAppBar: {\r\n root: {\r\n boxShadow: 'none',\r\n },\r\n colorDefault: {\r\n backgroundColor: grey[900],\r\n color: defaultTheme.palette.common.white,\r\n },\r\n },\r\n MuiTypography: {\r\n colorSecondary: {\r\n color: defaultTheme.palette.common.white,\r\n },\r\n },\r\n MuiList: {\r\n padding: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n root: {\r\n '&:focus': {\r\n outline: 'none',\r\n },\r\n },\r\n },\r\n MuiDialog: {\r\n paper: {\r\n background: defaultTheme.palette.background.default,\r\n },\r\n },\r\n MuiInputAdornment: {\r\n root: {\r\n '& .MuiTypography-root': {\r\n fontSize: defaultTheme.typography.caption.fontSize,\r\n },\r\n },\r\n },\r\n MuiTimelineItem: {\r\n missingOppositeContent: {\r\n '&:before': {\r\n flex: 0,\r\n },\r\n },\r\n },\r\n MuiLink: {\r\n root: {\r\n display: 'flex',\r\n color: newPrimaryLight,\r\n alignItems: 'center',\r\n '&:hover': {\r\n color: blue[400],\r\n },\r\n },\r\n underlineAlways: {\r\n // for some reason we need to specify 'px' here\r\n textUnderlineOffset: '1px',\r\n },\r\n },\r\n MuiToggleButton: {\r\n root: {\r\n '&.Mui-selected': {\r\n backgroundColor: primary,\r\n },\r\n },\r\n },\r\n MuiInputLabel: {\r\n root: {\r\n '&.Mui-focused': {\r\n color: newPrimaryLight,\r\n },\r\n },\r\n },\r\n MuiInputBase: {\r\n root: {\r\n '&.MuiInput-underline:after': {\r\n borderBottomColor: newPrimaryLight,\r\n },\r\n },\r\n input: {\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n MuiTabs: {\r\n indicator: {\r\n backgroundColor: () => defaultDwiThemeOptions.palette.tabs.selected,\r\n },\r\n },\r\n MuiTab: {\r\n root: {\r\n textTransform: 'none',\r\n borderTopLeftRadius: defaultTheme.spacing(0.5),\r\n borderTopRightRadius: defaultTheme.spacing(0.5),\r\n '&.Mui-selected': {\r\n backgroundColor: () => defaultDwiThemeOptions.palette.tabs.selected,\r\n },\r\n },\r\n },\r\n Tab: {\r\n root: {\r\n '&.Mui-selected': {\r\n background: 'none',\r\n },\r\n '&::after': {\r\n borderBottomColor: () => defaultDwiThemeOptions.palette.tabs.selected,\r\n },\r\n },\r\n },\r\n MuiLinearProgress: {\r\n colorPrimary: {\r\n backgroundColor: defaultTheme.palette.action.disabledBackground,\r\n },\r\n barColorPrimary: {\r\n backgroundColor: lightGreen.A400,\r\n },\r\n },\r\n },\r\n props: {\r\n MuiLink: {\r\n underline: 'always',\r\n },\r\n MuiCheckbox: {\r\n color: 'primary',\r\n },\r\n MultiSelectModal: {\r\n displayChips: true,\r\n },\r\n },\r\n mobile: {\r\n Background: {\r\n dark: '#313131',\r\n main: '#232323',\r\n },\r\n Drawer: {\r\n background: {\r\n main: '#2A2A2A',\r\n dark: '#252525',\r\n },\r\n puller: {\r\n main: '#505050',\r\n },\r\n },\r\n NavBar: {\r\n children: {\r\n main: defaultTheme.palette.common.white,\r\n selected: selection,\r\n },\r\n },\r\n Dialog: {\r\n content: {\r\n background: {\r\n main: grey[800],\r\n },\r\n },\r\n buttons: {\r\n close: {\r\n main: grey[500],\r\n },\r\n },\r\n },\r\n Icons: {\r\n operationStatus: {\r\n speed: deepPurple[300],\r\n depth: orange[300],\r\n tension: teal[300],\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst darkThemeOptions = {\r\n altus: {\r\n background: {\r\n backdrop: `${grey[900]}e0`,\r\n filter: grey['A400'],\r\n header: grey[900],\r\n listitem: rowColor,\r\n navigation: `${grey[900]}bd`,\r\n panel: rowColor,\r\n },\r\n // TODO Use palette.status instead\r\n status: {\r\n planning: blue[400],\r\n execute: lightGreen['A400'],\r\n report: green[600],\r\n },\r\n },\r\n palette: {\r\n type: THEMES.DARK,\r\n action: {\r\n hover: primaryHover,\r\n selected: primary,\r\n },\r\n status: {\r\n [ProjectStatus.PLAN]: blue[400],\r\n [ProjectStatus.EXECUTE]: lightGreen.A400,\r\n [ProjectStatus.REPORT]: green[600],\r\n },\r\n },\r\n};\r\n\r\nconst lightThemeOptions = {\r\n altus: {\r\n background: {\r\n backdrop: `${grey[50]}e0`,\r\n filter: grey['A100'],\r\n headerTransparent: `${grey['A100']}bd`,\r\n header: `${grey['A100']}`,\r\n listitem: grey[50],\r\n navigation: `${grey[50]}bd`,\r\n panel: `${grey[100]}bd`,\r\n },\r\n // TODO Use palette.status instead\r\n status: {\r\n planning: blue[500],\r\n execute: lightGreen['A700'],\r\n report: green[600],\r\n },\r\n },\r\n palette: {\r\n type: THEMES.LIGHT,\r\n background: {\r\n default: grey[200],\r\n },\r\n status: {\r\n [ProjectStatus.PLAN]: blue[500],\r\n [ProjectStatus.EXECUTE]: lightGreen.A700,\r\n [ProjectStatus.REPORT]: green[600],\r\n },\r\n },\r\n};\r\n\r\nconst mergedDefaultOptions = Map(defaultThemeOptions)\r\n .mergeDeep(Map(defaultDwiThemeOptions))\r\n .toJS();\r\n\r\nconst mergedDarkThemeOptions = Map(mergedDefaultOptions)\r\n .mergeDeep(Map(darkThemeOptions))\r\n .toJS();\r\n\r\nconst mergedLightThemeOptions = Map(mergedDefaultOptions)\r\n .mergeDeep(Map(lightThemeOptions))\r\n .toJS();\r\n\r\nexport const darkTheme = createTheme(mergedDarkThemeOptions);\r\n\r\nexport const lightTheme = createTheme(mergedLightThemeOptions);\r\n\r\nconst themes = {\r\n [THEMES.DARK]: darkTheme,\r\n [THEMES.LIGHT]: lightTheme,\r\n};\r\n\r\nexport default themes;\r\n","import moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport { PureComponent } from 'react';\r\n\r\nimport {\r\n renderContent,\r\n invokeIfFunction,\r\n durationFromStartAndEndTime,\r\n calcActivityDuration,\r\n} from 'utils/app.util';\r\n\r\nimport { TIME_UNITS } from 'app/app.constants';\r\n\r\nclass Counter extends PureComponent {\r\n state = {\r\n elapsedTime: moment.duration(),\r\n incrementIntervalId: undefined,\r\n };\r\n\r\n clearCurrentInterval(callback) {\r\n const { incrementIntervalId } = this.state;\r\n\r\n clearInterval(incrementIntervalId);\r\n invokeIfFunction(callback);\r\n }\r\n\r\n setIncrementIntervalId = (incrementIntervalId) => {\r\n if (this._isMounted) {\r\n this.setState({\r\n incrementIntervalId,\r\n });\r\n }\r\n };\r\n\r\n startIncrementTimer() {\r\n const { unit, precision } = this.props;\r\n\r\n return setInterval(() => {\r\n const { elapsedTime } = this.state;\r\n\r\n if (this._isMounted) {\r\n this.setState({\r\n elapsedTime: moment.duration(elapsedTime).add(precision, unit),\r\n });\r\n }\r\n }, moment.duration({ [unit]: precision }).asMilliseconds());\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n\r\n const {\r\n endTime,\r\n startTime,\r\n isTimerActive,\r\n initialDuration,\r\n calculateDurationFromStartAndEndtime,\r\n calculateDurationFromStartAndEndtimeFn,\r\n } = this.props;\r\n\r\n this.setState({\r\n elapsedTime: calculateDurationFromStartAndEndtime\r\n ? calculateDurationFromStartAndEndtimeFn(startTime, endTime)\r\n : initialDuration,\r\n });\r\n\r\n this.setIncrementIntervalId(\r\n isTimerActive ? this.startIncrementTimer() : undefined,\r\n );\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n endTime,\r\n startTime,\r\n isTimerActive,\r\n initialDuration,\r\n calculateDurationFromStartAndEndtime,\r\n calculateDurationFromStartAndEndtimeFn,\r\n } = this.props;\r\n\r\n if (prevProps.startTime !== startTime || prevProps.endTime !== endTime) {\r\n this.setState(({ elapsedTime }) => ({\r\n elapsedTime: calculateDurationFromStartAndEndtime\r\n ? calculateDurationFromStartAndEndtimeFn(startTime, endTime)\r\n : elapsedTime,\r\n }));\r\n }\r\n\r\n // Start\r\n if (!prevProps.isTimerActive && isTimerActive) {\r\n this.setIncrementIntervalId(this.startIncrementTimer());\r\n }\r\n\r\n // Stop\r\n if (prevProps.isTimerActive && !isTimerActive) {\r\n this.clearCurrentInterval(this.setIncrementIntervalId);\r\n this.setState(({ elapsedTime }) => ({\r\n elapsedTime: calculateDurationFromStartAndEndtime\r\n ? elapsedTime\r\n : initialDuration,\r\n }));\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n this.clearCurrentInterval();\r\n }\r\n\r\n render() {\r\n const { renderValue } = this.props;\r\n const { elapsedTime } = this.state;\r\n\r\n return renderValue\r\n ? renderContent(renderValue, {\r\n elapsedTime: elapsedTime ? elapsedTime.clone().abs() : elapsedTime,\r\n })\r\n : null;\r\n }\r\n}\r\n\r\nCounter.propTypes = {\r\n renderValue: PropTypes.func.isRequired,\r\n unit: PropTypes.oneOf(Object.values(TIME_UNITS)),\r\n calculateDurationFromStartAndEndtime: PropTypes.bool,\r\n};\r\n\r\nCounter.defaultProps = {\r\n precision: 1,\r\n unit: TIME_UNITS.MINUTE,\r\n initialDuration: moment.duration(),\r\n calculateDurationFromStartAndEndtime: false,\r\n};\r\n\r\nconst CounterFactory = (calcActivityDurationFn) => (props) => {\r\n const { waitCodesDuration, ...rest } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CounterFactory(() => durationFromStartAndEndTime);\r\nexport const ActivityDuration = CounterFactory(calcActivityDuration);\r\n","import Typography from '@material-ui/core/Typography';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { TIME_UNITS } from 'app/app.constants';\r\n\r\nconst styles = (theme) => ({\r\n progress: {\r\n color: theme.altus.button.progress,\r\n },\r\n dimmer: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n width: '100%',\r\n zIndex: '1200',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: alpha(theme.palette.common.black, 0.3),\r\n },\r\n dimmerContent: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n },\r\n});\r\n\r\nconst LoadingDimmer = ({ classes, text, displaySpinner = true }) => (\r\n
\r\n
\r\n {displaySpinner && }\r\n \r\n \r\n `${text}${\r\n elapsedTime ? '.'.repeat((elapsedTime.asSeconds() * 2) % 4) : ''\r\n }`\r\n }\r\n />\r\n \r\n
\r\n
\r\n);\r\n\r\nLoadingDimmer.defaultProps = {\r\n text: 'Loading',\r\n};\r\n\r\nexport default withStyles(styles)(LoadingDimmer);\r\n","export default __webpack_public_path__ + \"static/media/login.2a52f298.jpg\";","export default __webpack_public_path__ + \"static/media/login_pattern.10ec17f9.svg\";","import UAParser from 'ua-parser-js';\r\n\r\nconst uaParser = new UAParser();\r\n\r\nexport default uaParser;\r\n","export const LOGIN_PAGE_LOADED = 'LOGIN_PAGE_LOADED';\r\nexport const LOGIN_PAGE_UNLOADED = 'LOGIN_PAGE_UNLOADED';\r\nexport const START_LOGIN = 'START_LOGIN';\r\n\r\nexport const INTERNET_EXPLORER = 'IE';\r\n\r\nexport const DOWNLOAD_LINKS = {\r\n CHROME: 'https://www.google.com/chrome/',\r\n FIREFOX: 'https://www.mozilla.org/en-US/firefox/new/',\r\n EDGE: 'https://www.microsoft.com/en-us/windows/microsoft-edge',\r\n SAFARI: 'https://support.apple.com/downloads/safari',\r\n};\r\n","import Warning from '@material-ui/icons/Warning';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { DOWNLOAD_LINKS } from 'features/login/login.constants';\r\n\r\nconst styles = (theme) => ({\r\n notSupportedMessage: { marginTop: 30, color: theme.altus.action.question },\r\n downloadLink: {\r\n color: theme.palette.text.primary,\r\n textDecoration: 'underline',\r\n },\r\n});\r\n\r\nconst NotSupported = ({ classes }) => (\r\n \r\n \r\n Browser not supported\r\n \r\n To use Digital Well Intervention we recommend that you use the latest\r\n version of{' '}\r\n \r\n Chrome\r\n \r\n ,{' '}\r\n \r\n Firefox\r\n \r\n ,{' '}\r\n \r\n Safari\r\n {' '}\r\n or{' '}\r\n \r\n Edge\r\n \r\n \r\n \r\n);\r\n\r\nexport default withStyles(styles)(NotSupported);\r\n","import { isMobile } from 'react-device-detect';\r\n\r\nimport {\r\n LOGIN_PAGE_LOADED,\r\n LOGIN_PAGE_UNLOADED,\r\n START_LOGIN,\r\n} from 'features/login/login.constants';\r\n\r\nimport { pages } from 'app/routePaths';\r\nimport Agent from 'infrastructure/agent';\r\nimport { toRoot } from 'utils/route.util';\r\nimport config from 'infrastructure/config';\r\nimport authSingleton from 'services/auth.service';\r\nimport {\r\n autoLogin,\r\n newAppVersionNotificationAction,\r\n onLoad as onLoadApp,\r\n setSubPage,\r\n} from 'app/app.actions';\r\nimport { deleteMsalFromLocalStorage } from 'utils/app.util';\r\nimport projectsService from 'services/project.service';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\nimport {\r\n getTaskActivities,\r\n setProjectStatus,\r\n} from 'features/projects/activities/activities.actions';\r\nimport { APP_VERSION, APP_VERSION_STORAGE_KEY } from 'app/app.constants';\r\n\r\nexport const onLoad = () => (dispatch) => {\r\n dispatch(setSubPage(pages.login));\r\n dispatch({ type: LOGIN_PAGE_LOADED });\r\n dispatch(onLoadApp());\r\n};\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: LOGIN_PAGE_UNLOADED });\r\n\r\nconst loginPopup = () => (dispatch) => {\r\n const payload = authSingleton\r\n .getMsalInstance()\r\n .then((msalInstance) => {\r\n return msalInstance\r\n .loginPopup({ scopes: [config.scope], prompt: 'select_account' })\r\n .then((resp) => {\r\n msalInstance.setActiveAccount(resp.account);\r\n return resp;\r\n })\r\n .then((resp) => {\r\n const previousAppVersion = localStorage.getItem(\r\n APP_VERSION_STORAGE_KEY,\r\n );\r\n if (\r\n !isMobile &&\r\n (!previousAppVersion || previousAppVersion !== APP_VERSION)\r\n ) {\r\n dispatch(newAppVersionNotificationAction);\r\n }\r\n return resp;\r\n });\r\n })\r\n .then(async () => {\r\n try {\r\n const throttledRefreshTokenFn = await Agent.throttledRefreshToken();\r\n await throttledRefreshTokenFn.cancel();\r\n } catch (e) {\r\n throw Error('Exception in refreshing access token');\r\n }\r\n return dispatch(autoLogin());\r\n });\r\n\r\n dispatch({\r\n type: START_LOGIN,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const refreshProjectStatus = (projectId, taskId) => (dispatch) => {\r\n projectsService.getProjectStatus(projectId).then((status) => {\r\n return dispatch(\r\n getTaskActivities(projectId, taskId, { silent: true }),\r\n ).then(() => dispatch(setProjectStatus(status)));\r\n });\r\n\r\n dispatch({\r\n type: ACTIVITIES_ACTIONS.REFRESH_PROJECT_STATUS,\r\n });\r\n};\r\n\r\nconst loginRedirect = () => () => {\r\n authSingleton\r\n .getMsalInstance()\r\n .then((msalInstance) =>\r\n msalInstance.loginRedirect(\r\n { scopes: [config.scope] },\r\n '&prompt=select_account',\r\n ),\r\n );\r\n};\r\n\r\nexport const login = (callback) => (dispatch) => {\r\n isMobile\r\n ? dispatch(loginRedirect(callback))\r\n : dispatch(loginPopup()).catch(() => {\r\n deleteMsalFromLocalStorage();\r\n });\r\n};\r\n\r\nexport const changeUser = () => (dispatch) => {\r\n dispatch(loginPopup()).then(() => {\r\n window.location = toRoot();\r\n });\r\n};\r\n","import { Link } from 'react-router-dom';\r\nimport Launch from '@material-ui/icons/Launch';\r\nimport { Box, Link as MuiLink } from '@material-ui/core';\r\n\r\nconst NavigationLink = ({ target, children, component = Link, ...rest }) => {\r\n const displayIcon = target === '_blank';\r\n\r\n return (\r\n \r\n {children}\r\n {displayIcon && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default NavigationLink;\r\n","import { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { BrowserView } from 'react-device-detect';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Fab, Typography } from '@material-ui/core';\r\n\r\nimport background from 'assets/login.jpg';\r\nimport stripes from 'assets/login_pattern.svg';\r\nimport { autoLogin } from 'app/app.actions';\r\nimport uaParser from 'infrastructure/uaParser';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport LoadingDimmer from 'app/components/LoadingDimmer';\r\nimport NotSupported from 'features/login/components/NotSupported';\r\nimport { login, onLoad, onUnload } from 'features/login/login.actions';\r\nimport { INTERNET_EXPLORER, START_LOGIN } from 'features/login/login.constants';\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport { toPrivacyPolicy } from 'utils/route.util';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\n\r\nclass Login extends PureComponent {\r\n componentDidMount() {\r\n this.props.dispatchOnLoad();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchOnUnload();\r\n }\r\n\r\n render() {\r\n const { classes, dataState } = this.props;\r\n const browser = uaParser.getBrowser();\r\n const loading = dataState.isLoading();\r\n\r\n return (\r\n <>\r\n {loading && (\r\n \r\n )}\r\n \r\n \r\n \r\n {!loading && (\r\n <>\r\n \r\n \r\n CHOREOGRAF Collaborate\r\n \r\n \r\n {browser.name === INTERNET_EXPLORER ? (\r\n \r\n ) : (\r\n \r\n \r\n this.props.dispatchLogin(this.props.dispatchAutologin)\r\n }\r\n className={classes.loginButton}\r\n >\r\n Login\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {\r\n event.stopPropagation();\r\n }}\r\n >\r\n Privacy Policy\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n color: theme.palette.common.white,\r\n textShadow: '2px 2px rgba(0,0,0,0.2)',\r\n },\r\n login: {\r\n position: 'fixed',\r\n height: '100%',\r\n width: '100%',\r\n '&:before': {\r\n content: 'no-open-quote',\r\n display: 'block',\r\n backgroundImage: `url(\"${background}\")`,\r\n backgroundPosition: 'bottom',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n height: '100%',\r\n width: '100%',\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n opacity: 0.7,\r\n zIndex: -1,\r\n },\r\n '&:after': {\r\n content: 'no-open-quote',\r\n display: 'block',\r\n backgroundImage: `url(\"${stripes}\")`,\r\n backgroundPosition: 'right bottom',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n opacity: 1,\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n position: 'fixed',\r\n zIndex: -1,\r\n },\r\n },\r\n logo: {\r\n position: 'fixed',\r\n top: 40,\r\n left: 40,\r\n zIndex: 10,\r\n },\r\n pattern: {\r\n position: 'fixed',\r\n right: 0,\r\n top: 20,\r\n zIndex: 10,\r\n opacity: 0.2,\r\n pointerEvents: 'none',\r\n },\r\n loginButton: {\r\n zIndex: 20,\r\n opacity: 0.9,\r\n '&:hover': {\r\n opacity: 0.85,\r\n },\r\n },\r\n marginTop: { marginTop: 30, display: 'flex', justifyContent: 'center' },\r\n firstRow: {\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n position: 'absolute',\r\n },\r\n lastRow: { position: 'absolute', bottom: 50 },\r\n dimmer: {\r\n background: 'none',\r\n },\r\n privacyPolicy: {\r\n color: theme.palette.common.white,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n});\r\n\r\nexport default connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(state, START_LOGIN),\r\n }),\r\n {\r\n dispatchLogin: login,\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchAutologin: autoLogin,\r\n },\r\n)(toJSComponent(withStyles(styles)(Login)));\r\n","import { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\n\r\nimport { logOut } from 'app/app.actions';\r\nimport LoadingDimmer from 'app/components/LoadingDimmer';\r\n\r\nclass Logout extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const { dispatchLogOut } = props;\r\n dispatchLogOut();\r\n }\r\n\r\n render() {\r\n return ;\r\n }\r\n}\r\n\r\nexport default connect(null, {\r\n dispatchLogOut: logOut,\r\n})(toJSComponent(Logout));\r\n","import { getCurrentUserFromState } from 'app/app.selectors';\r\n\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport const useCurrentUser = () => {\r\n const currentUser = useSelector(getCurrentUserFromState);\r\n\r\n return currentUser;\r\n};\r\n","import { convertToSet } from 'utils/app.util';\r\nimport { EMPTY_SET, ProjectPermission } from 'app/app.constants';\r\n\r\nexport const hasAllPermissions = (\r\n currentPermissions,\r\n permissions = EMPTY_SET,\r\n) => {\r\n const permissionsSet = convertToSet(permissions);\r\n\r\n return currentPermissions.isSuperset(permissionsSet);\r\n};\r\n\r\nexport const hasOneOrMorePermissions = (\r\n currentPermissions,\r\n permissions = EMPTY_SET,\r\n) => {\r\n const permissionsSet = convertToSet(permissions);\r\n\r\n if (permissionsSet.isEmpty()) return true;\r\n\r\n return !permissionsSet.intersect(currentPermissions).isEmpty();\r\n};\r\n\r\nexport const getRequiredProjectPermissions = (permissions) =>\r\n convertToSet(permissions).add(ProjectPermission.FULL_ACCESS);\r\n\r\nexport const hasRequiredProjectPermissions = (\r\n userProjectPermissions,\r\n permissions,\r\n) =>\r\n hasOneOrMorePermissions(\r\n userProjectPermissions,\r\n getRequiredProjectPermissions(permissions),\r\n );\r\n","import { useMemo } from 'react';\r\n\r\nimport { EMPTY_SET } from 'app/app.constants';\r\nimport { hasOneOrMorePermissions } from 'utils/authorization.util';\r\n\r\nexport const usePermissions = (\r\n userPermissions = EMPTY_SET,\r\n permissions = EMPTY_SET,\r\n) => {\r\n const hasPermission = useMemo(\r\n () => hasOneOrMorePermissions(userPermissions, permissions),\r\n [permissions, userPermissions],\r\n );\r\n\r\n return { hasPermission, userPermissions, permissions };\r\n};\r\n","import { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport { usePermissions } from 'app/hooks/authorization/usePermissions';\r\n\r\nexport const useSystemPermissions = (permissions) => {\r\n const currentUser = useCurrentUser();\r\n\r\n const userPermissions = currentUser.get('permissions');\r\n\r\n const { hasPermission, permissions: systemPermissions } = usePermissions(\r\n userPermissions,\r\n permissions,\r\n );\r\n\r\n return { hasPermission, userPermissions, systemPermissions, currentUser };\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport { castArray } from 'lodash';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport { RouteContainer } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST, SystemPermission } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { isRouteEnabledForEnvironment } from 'utils/route.util';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport { aperioUserAllowedRoutepaths } from 'authorization/authorization.constants';\r\n\r\nconst ValidRoutesContainer = ({\r\n render,\r\n routes,\r\n hasPermission,\r\n MissingRouteComponent,\r\n}) => {\r\n const { userPermissions } = useSystemPermissions();\r\n const filterRoutesWithPermissions = useCallback(\r\n (routes, callback) =>\r\n castArray(routes).reduce(callback, EMPTY_LIST).toArray(),\r\n [],\r\n );\r\n\r\n const handleValidRoute = useCallback(\r\n (route, callback) => {\r\n const { routes: subRoutes } = route;\r\n\r\n if (!subRoutes) return route;\r\n\r\n return {\r\n ...route,\r\n routes: filterRoutesWithPermissions(subRoutes, callback),\r\n };\r\n },\r\n [filterRoutesWithPermissions],\r\n );\r\n\r\n const filterRoute = useCallback(\r\n (validRoutes, route) => {\r\n const isValidRoute = hasPermission(route);\r\n const isEnabledForEnvironment = isRouteEnabledForEnvironment(route);\r\n\r\n return isValidRoute && isEnabledForEnvironment\r\n ? validRoutes.push(handleValidRoute(route, filterRoute))\r\n : validRoutes;\r\n },\r\n [hasPermission, handleValidRoute],\r\n );\r\n\r\n const validRoutes = useMemo(() => {\r\n if (userPermissions.includes(SystemPermission.WELL_ACCESS_ONLY)) {\r\n const filteredRoutesForAperio = routes.filter((route) => {\r\n if (\r\n aperioUserAllowedRoutepaths.some((path) => route.path.includes(path))\r\n )\r\n return route;\r\n else return null;\r\n });\r\n return filteredRoutesForAperio;\r\n }\r\n return filterRoutesWithPermissions(routes, filterRoute);\r\n }, [routes, filterRoute, filterRoutesWithPermissions, userPermissions]);\r\n\r\n if (render) return invokeIfFunction(render, validRoutes);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nValidRoutesContainer.propTypes = {\r\n render: PropTypes.func,\r\n MissingRouteComponent: PropTypes.oneOfType([\r\n PropTypes.func,\r\n PropTypes.node,\r\n PropTypes.elementType,\r\n ]),\r\n hasPermission: PropTypes.func.isRequired,\r\n routes: PropTypes.oneOfType([\r\n PropTypes.object,\r\n PropTypes.arrayOf(PropTypes.object),\r\n ]),\r\n};\r\n\r\nexport default ValidRoutesContainer;\r\n","import { useCallback } from 'react';\r\n\r\nimport { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport { hasOneOrMorePermissions } from 'utils/authorization.util';\r\nimport ValidRoutesContainer from 'app/components/ValidRoutesContainer';\r\n\r\nconst SystemRoutesContainer = ({ render, routes }) => {\r\n const currentUser = useCurrentUser();\r\n\r\n const hasRoutePermission = useCallback(\r\n (route) => {\r\n if (!route.systemPermissions) return true;\r\n\r\n const permissions = currentUser.get('permissions');\r\n\r\n return hasOneOrMorePermissions(permissions, route.systemPermissions);\r\n },\r\n [currentUser],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SystemRoutesContainer;\r\n","export default __webpack_public_path__ + \"static/media/not_found.9e24e434.jpg\";","import { PureComponent } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport notfound from 'assets/not_found.jpg';\r\n\r\nclass NoMatchingRoute extends PureComponent {\r\n render() {\r\n const { classes } = this.props;\r\n\r\n return (\r\n \r\n \"Page\r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = {\r\n basePageChildren: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(NoMatchingRoute);\r\n","import {\r\n getCurrentUserFromState,\r\n getUsersByUserIdFromState,\r\n getCurrentProjectMemberFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { createSelector } from 'utils/app.util';\r\n\r\nconst getSystemRoleSelector = (state, systemRoleId) =>\r\n state.getIn(['authorization', 'systemRoles', systemRoleId.toString()]);\r\n\r\nconst getProjectRoleSelector = (state, projectRoleId) =>\r\n state.getIn(['authorization', 'projectRoles', projectRoleId.toString()]);\r\n\r\nexport const getSystemRolesFromState = createSelector(\r\n (state) => state.getIn(['authorization', 'systemRoles']),\r\n (systemRoles) => systemRoles,\r\n);\r\n\r\nexport const getSystemRolesListFromState = createSelector(\r\n getSystemRolesFromState,\r\n (systemRoles) => systemRoles.toList(),\r\n);\r\n\r\nexport const getUserRolesFromState = createSelector(\r\n (state) => state.getIn(['authorization', 'userRoles']),\r\n (userRoles) => userRoles,\r\n);\r\n\r\nexport const getUsersAssignedToSystemRoleFromState = (systemRoleId) =>\r\n createSelector(\r\n getUsersByUserIdFromState,\r\n getUserRolesFromState,\r\n (users, userRoles) =>\r\n userRoles\r\n .get(systemRoleId.toString(), EMPTY_LIST)\r\n .map((userId) => users.get(userId.toString()))\r\n .filter(Boolean),\r\n );\r\n\r\nexport const getSystemRoleFromStateSelector = (systemRoleId) =>\r\n createSelector(getSystemRolesFromState, (systemRoles) =>\r\n systemRoles.get(systemRoleId.toString()),\r\n );\r\n\r\nexport const getSystemRoleFromState = createSelector(\r\n getSystemRoleSelector,\r\n (systemRole) => systemRole,\r\n);\r\n\r\nexport const getProjectRoleFromState = createSelector(\r\n getProjectRoleSelector,\r\n (projectRole) => projectRole,\r\n);\r\n\r\nexport const getProjectRolesFromState = createSelector(\r\n (state) => state.getIn(['authorization', 'projectRoles']),\r\n (projectRoles) => projectRoles,\r\n);\r\n\r\nexport const getProjectRolesListFromState = createSelector(\r\n getProjectRolesFromState,\r\n (projectRoles) => projectRoles.toList(),\r\n);\r\n\r\nconst getProjectRolePermissionsSelector = (state, projectRoleId) =>\r\n state.getIn([\r\n 'authorization',\r\n 'projectRolePermissions',\r\n projectRoleId.toString(),\r\n ]);\r\n\r\nexport const getProjectRolePermissionsFromState = createSelector(\r\n getProjectRolePermissionsSelector,\r\n (projectRolePermissions) => projectRolePermissions,\r\n);\r\n\r\nconst getSystemRolePermissionsSelector = (state, systemRoleId) =>\r\n state.getIn([\r\n 'authorization',\r\n 'systemRolePermissions',\r\n systemRoleId.toString(),\r\n ]);\r\n\r\nexport const getSystemRolePermissionsFromState = createSelector(\r\n getSystemRolePermissionsSelector,\r\n (systemRolePermissions) => systemRolePermissions,\r\n);\r\n\r\nconst getSystemRoleProjectPermissionsSelector = (state, systemRoleId) =>\r\n state.getIn([\r\n 'authorization',\r\n 'systemRoleProjectPermissions',\r\n systemRoleId.toString(),\r\n ]);\r\n\r\nexport const getSystemRoleProjectPermissionsFromState = createSelector(\r\n getSystemRoleProjectPermissionsSelector,\r\n (systemRoleProjectPermissions) => systemRoleProjectPermissions,\r\n);\r\n\r\nexport const getProjectPermissionsFromState = createSelector(\r\n (state) => state.getIn(['authorization', 'projectPermissions']),\r\n (projectPermissions) => projectPermissions,\r\n);\r\n\r\nexport const getSystemPermissionsFromState = createSelector(\r\n (state) => state.getIn(['authorization', 'systemPermissions']),\r\n (systemPermissions) => systemPermissions,\r\n);\r\n\r\nexport const getCurrentUserProjectPermissionsFromState = createSelector(\r\n getCurrentUserFromState,\r\n getCurrentProjectMemberFromState,\r\n (currentUser, currentProjectMember) =>\r\n currentProjectMember\r\n ? currentUser\r\n .get('projectPermissions')\r\n .union(currentProjectMember.get('permissions'))\r\n : currentUser.get('projectPermissions'),\r\n);\r\n\r\nexport const getSystemAndProjectPermissionsFromState = createSelector(\r\n getSystemPermissionsFromState,\r\n getProjectPermissionsFromState,\r\n (systemPermissions, projectPermissions) =>\r\n systemPermissions && projectPermissions\r\n ? systemPermissions.concat(projectPermissions)\r\n : undefined,\r\n);\r\n\r\nexport const getSystemAndProjectRolePermissionsFromState = createSelector(\r\n getSystemRolePermissionsFromState,\r\n getSystemRoleProjectPermissionsFromState,\r\n (systemRolePermissions, projectRolePermissions) =>\r\n systemRolePermissions && projectRolePermissions\r\n ? systemRolePermissions.concat(projectRolePermissions)\r\n : undefined,\r\n);\r\n","import { useCallback } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport NoMatchingRoute from 'app/components/NoMatchingRoute';\r\nimport ValidRoutesContainer from 'app/components/ValidRoutesContainer';\r\nimport { hasRequiredProjectPermissions } from 'utils/authorization.util';\r\nimport { getCurrentUserProjectPermissionsFromState } from 'authorization/authorization.selectors';\r\n\r\nconst ProjectRoutesContainer = ({\r\n routes,\r\n render,\r\n MissingRouteComponent = NoMatchingRoute,\r\n}) => {\r\n const userProjectPermissions = useSelector(\r\n getCurrentUserProjectPermissionsFromState,\r\n );\r\n\r\n const hasRoutePermission = useCallback(\r\n (route) => {\r\n if (!route.projectPermissions) return true;\r\n\r\n return hasRequiredProjectPermissions(\r\n userProjectPermissions,\r\n route.projectPermissions,\r\n );\r\n },\r\n [userProjectPermissions],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProjectRoutesContainer;\r\n","import { useCallback } from 'react';\r\n\r\nimport { RouteContainer } from 'altus-ui-components';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\n\r\nconst RoutesContainer = ({ render, routes }) => {\r\n const renderRouteContainer = useCallback(\r\n (routes) => {\r\n if (render) return invokeIfFunction(render, routes);\r\n\r\n return ;\r\n },\r\n [render],\r\n );\r\n\r\n const renderRoutes = useCallback(\r\n (routes) => (\r\n \r\n ),\r\n [renderRouteContainer],\r\n );\r\n\r\n // filter away routes with systemPermissions, then projectPermissions\r\n return ;\r\n};\r\n\r\nexport default RoutesContainer;\r\n","import { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { AppBar, Tab } from '@material-ui/core';\r\n\r\nimport { NavTabsContainer } from 'altus-ui-components';\r\n\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport routePaths from 'app/routePaths';\r\n\r\nconst NavigationAppBarBase = ({ routes, isRouteHidden }) => {\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n const routeIfNotHidden = useCallback(\r\n (route) => {\r\n return isRouteHidden(!!route.subSurfaceRoute) ? null : route;\r\n },\r\n [isRouteHidden],\r\n );\r\n\r\n const renderTabs = useCallback(\r\n (routes) => {\r\n const routesToDisplay = routes.filter((route) => {\r\n if (!userPermissions.includes(SystemPermission.WELL_ACCESS_ONLY)) {\r\n if (route.permission) {\r\n if (userPermissions.includes(route.permission)) {\r\n return routeIfNotHidden(route);\r\n } else return null;\r\n } else {\r\n return routeIfNotHidden(route);\r\n }\r\n } else if (\r\n userPermissions.includes(SystemPermission.WELL_ACCESS_ONLY) &&\r\n (route.path.includes(routePaths.field.root) ||\r\n route.path.includes(routePaths.wells.index)) &&\r\n !route.path.includes(routePaths.wells.elements) &&\r\n !route.path.includes(routePaths.wells.sections)\r\n ) {\r\n return routeIfNotHidden(route);\r\n } else {\r\n return null;\r\n }\r\n });\r\n return (\r\n \r\n );\r\n },\r\n [routeIfNotHidden, userPermissions],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst NavigationAppBar = (props) => {\r\n return false} />;\r\n};\r\n\r\nexport default NavigationAppBar;\r\n\r\n// Special case, hide subsurface routes (tabs) for surface tasks.\r\nexport const NavigationAppBarForTaskRoutes = ({\r\n isTaskTypeSurface,\r\n ...props\r\n}) => {\r\n return (\r\n \r\n isTaskTypeSurface && isSubSurfaceRoute\r\n }\r\n />\r\n );\r\n};\r\n\r\nNavigationAppBarForTaskRoutes.propTypes = {\r\n render: PropTypes.func,\r\n};\r\n","import { useDispatch } from 'react-redux';\r\nimport { useCallback, useEffect } from 'react';\r\n\r\nimport { setHeaderValues } from 'app/app.actions';\r\n\r\nexport const useHeader = ({ title, subTitle, logoNavigation }) => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetHeaderValues = useCallback(\r\n (...params) => dispatch(setHeaderValues(...params)),\r\n [dispatch],\r\n );\r\n\r\n const setHeaderTitle = useCallback(\r\n (title) => dispatchSetHeaderValues({ title }),\r\n [dispatchSetHeaderValues],\r\n );\r\n\r\n const setHeaderSubTitle = useCallback(\r\n (subTitle) => dispatchSetHeaderValues({ subTitle }),\r\n [dispatchSetHeaderValues],\r\n );\r\n\r\n const setHeaderLogoNavigation = useCallback(\r\n (logoNavigation) => dispatchSetHeaderValues({ logoNavigation }),\r\n [dispatchSetHeaderValues],\r\n );\r\n\r\n useEffect(\r\n () => dispatchSetHeaderValues({ title, subTitle, logoNavigation }),\r\n [title, subTitle, logoNavigation, dispatchSetHeaderValues],\r\n );\r\n\r\n return {\r\n setHeaderTitle,\r\n setHeaderSubTitle,\r\n setHeaderLogoNavigation,\r\n };\r\n};\r\n","const common = [\r\n {\r\n featureType: 'all',\r\n elementType: 'labels.icon',\r\n stylers: [\r\n {\r\n visibility: 'off',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'geometry.fill',\r\n stylers: [\r\n {\r\n visibility: 'off',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'geometry.stroke',\r\n stylers: [\r\n {\r\n visibility: 'off',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'all',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n visibility: 'off',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'all',\r\n elementType: 'labels.text.stroke',\r\n stylers: [\r\n {\r\n visibility: 'off',\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const dark = [\r\n ...common,\r\n {\r\n featureType: 'administrative',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n saturation: '10',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'administrative',\r\n elementType: 'geometry.fill',\r\n stylers: [\r\n {\r\n color: '#2a2a2a',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'administrative',\r\n elementType: 'geometry.stroke',\r\n stylers: [\r\n {\r\n color: '#2a2a2a',\r\n },\r\n {\r\n weight: 1.2,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'landscape',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#2a2a2a',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'landscape',\r\n elementType: 'geometry.fill',\r\n stylers: [],\r\n },\r\n {\r\n featureType: 'poi',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#2a2a2a',\r\n },\r\n ],\r\n },\r\n\r\n {\r\n featureType: 'transit',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#2a2a2a',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#1B1C1D',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'geometry.fill',\r\n stylers: [\r\n {\r\n lightness: '-53',\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const light = [\r\n ...common,\r\n {\r\n featureType: 'landscape',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#bdbdbd',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'poi',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#bdbdbd',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'transit',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#bdbdbd',\r\n },\r\n {\r\n weight: 0.2,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#eeeeee',\r\n },\r\n ],\r\n },\r\n];\r\n\r\nconst googleMapsThemes = {\r\n dark,\r\n light,\r\n};\r\n\r\nexport default googleMapsThemes;\r\n","import { compose } from 'redux';\r\nimport withTheme from '@material-ui/styles/withTheme';\r\nimport GoogleMapReact from 'google-map-react';\r\n\r\nimport GoogleMapTheme from 'layout/googleMap.themes';\r\nimport { NORWAY_MAP_CENTER_COORDS } from 'app/app.constants';\r\n\r\nexport const GoogleMap = ({\r\n center,\r\n children,\r\n theme,\r\n allowZoom = false,\r\n ...rest\r\n}) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nexport default compose(withTheme)(GoogleMap);\r\n","import isEqual from 'lodash/isEqual';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { usePrevious } from 'altus-hooks';\r\n\r\nimport { PagedQueryParams } from 'app/app.constants';\r\n\r\nconst usePagedSearch = (onSubmit, initialFilters, preloadedState = false) => {\r\n const [filters, setCurrentFilters] = useState(initialFilters);\r\n const [isSkipNextSubmit, setIsSkipNextSubmit] = useState(preloadedState);\r\n\r\n const previousFilters = usePrevious(filters);\r\n\r\n const onPageChange = useCallback(({ pageIndex, pageSize }) => {\r\n setCurrentFilters((currentFilters) => ({\r\n ...currentFilters,\r\n [PagedQueryParams.PAGE]: pageIndex + 1,\r\n [PagedQueryParams.PAGE_SIZE]: pageSize,\r\n }));\r\n }, []);\r\n\r\n const onFiltersChange = useCallback(\r\n (updatedFilters) =>\r\n setCurrentFilters((currentFilters) => {\r\n const retValue = {\r\n ...currentFilters,\r\n ...updatedFilters,\r\n [PagedQueryParams.PAGE]: 1,\r\n };\r\n return retValue;\r\n }),\r\n [],\r\n );\r\n\r\n useEffect(() => {\r\n if (isEqual(previousFilters, filters)) return;\r\n\r\n if (isSkipNextSubmit) {\r\n setIsSkipNextSubmit(false);\r\n } else {\r\n onSubmit(filters);\r\n }\r\n }, [onSubmit, filters, previousFilters, isSkipNextSubmit]);\r\n\r\n return { onPageChange, onFiltersChange };\r\n};\r\n\r\nexport default usePagedSearch;\r\n","import isNil from 'lodash/isNil';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\n// Mark all rows and nested subrows as expanded\r\nexport const getAllRowsExpanded = (items, getSubRows, index) => {\r\n if (!items) return EMPTY_MAP;\r\n\r\n return items\r\n .reduce((result, item, itemIndex) => {\r\n var subRows = invokeIfFunction(getSubRows, item);\r\n\r\n const currentIndex = !isNil(index) ? `${index}.${itemIndex}` : itemIndex;\r\n\r\n const expandedSubRows = getAllRowsExpanded(\r\n subRows,\r\n getSubRows,\r\n itemIndex,\r\n );\r\n\r\n return result.set(currentIndex, true).merge(expandedSubRows);\r\n }, EMPTY_MAP)\r\n .toJS();\r\n};\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport debounce from 'lodash/debounce';\r\nimport { useFormikContext } from 'formik';\r\nimport { memo, useMemo, useEffect, useRef } from 'react';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst shouldSubmitDefault = ({ isValid, dirty }) => isValid && dirty;\r\n\r\nconst AutoSaveFormik = ({\r\n children,\r\n timeout = 1500,\r\n shouldSubmit = shouldSubmitDefault,\r\n}) => {\r\n const formikContext = useFormikContext();\r\n const formikContextRef = useRef(formikContext);\r\n\r\n const { values, submitForm, dirty, isValid } = formikContext;\r\n\r\n useEffect(() => {\r\n formikContextRef.current = formikContext;\r\n }, [formikContext]);\r\n\r\n const debouncedSubmit = useMemo(\r\n () =>\r\n debounce((shouldSubmit) => {\r\n if (!shouldSubmit) return;\r\n\r\n invokeIfFunction(submitForm);\r\n }, timeout),\r\n [timeout, submitForm],\r\n );\r\n\r\n useEffect(() => {\r\n const shouldSubmitForm = invokeIfFunction(\r\n shouldSubmit,\r\n formikContextRef.current,\r\n );\r\n\r\n if (!dirty && shouldSubmitForm) {\r\n // If submitting on initialize, cancel previous debounced submissions and submit immediately.\r\n debouncedSubmit.cancel();\r\n invokeIfFunction(submitForm);\r\n } else {\r\n debouncedSubmit(shouldSubmitForm);\r\n }\r\n }, [debouncedSubmit, dirty, submitForm, shouldSubmit, values, isValid]);\r\n\r\n return children;\r\n};\r\n\r\nAutoSaveFormik.propTypes = {\r\n children: PropTypes.node,\r\n timeout: PropTypes.number,\r\n shouldSubmit: PropTypes.func,\r\n};\r\n\r\nexport default compose(memo)(AutoSaveFormik);\r\n","import PropTypes from 'prop-types';\r\n\r\nimport { TextField as MuiTextField } from '@material-ui/core';\r\n\r\nconst TextFieldV2 = ({ margin, fullwidth, ...rest }) => {\r\n return ;\r\n};\r\n\r\nTextFieldV2.propTypes = {\r\n margin: PropTypes.string,\r\n fullWidth: PropTypes.bool,\r\n};\r\n\r\nTextFieldV2.defaultProps = {\r\n margin: 'normal',\r\n fullWidth: true,\r\n};\r\n\r\nexport default TextFieldV2;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport { TextField as MuiTextField } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\n\r\nconst useStyles = makeStyles({\r\n textfieldRoot: {\r\n flex: '1 1 auto',\r\n '& .MuiInputBase-root': {\r\n flex: '1 1 auto',\r\n },\r\n '& .MuiInputBase-multiline': {\r\n flex: '1 1 auto',\r\n },\r\n },\r\n});\r\n\r\nconst TextFieldOutlined = ({ margin, fullwidth, ...rest }) => {\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n );\r\n};\r\n\r\nTextFieldOutlined.propTypes = {\r\n margin: PropTypes.string,\r\n fullWidth: PropTypes.bool,\r\n};\r\n\r\nTextFieldOutlined.defaultProps = {\r\n margin: 'normal',\r\n fullWidth: true,\r\n};\r\n\r\nexport default TextFieldOutlined;\r\n","import isNil from 'lodash/isNil';\r\nimport { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport TextField from 'app/components/form/TextFieldV2';\r\nimport TextFieldOutlined from '../TextFieldOutlined';\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\n\r\nconst defaultFormat = (value) => (isNil(value) ? '' : value);\r\n\r\nconst TextFieldFormik = ({\r\n outlinedTextField = false,\r\n form,\r\n field,\r\n format = defaultFormat,\r\n destroyOnUnmount = false,\r\n minValue = null,\r\n useRoundedValue = false,\r\n ...rest\r\n}) => {\r\n const { value, onChange, name, onBlur } = field;\r\n const { getFieldMeta, setFieldValue } = form;\r\n\r\n const handleValueChange = (event) => {\r\n let inputValue = event.target.value;\r\n\r\n if (minValue !== null && inputValue < minValue) {\r\n inputValue = minValue;\r\n setFieldValue(name, inputValue);\r\n return;\r\n }\r\n\r\n if (onChange) onChange(event); // Call the original onChange if provided\r\n };\r\n\r\n useEffect(\r\n () => () => {\r\n if (destroyOnUnmount) {\r\n // clear value and unregister field\r\n setFieldValue(name, undefined);\r\n }\r\n },\r\n [name, setFieldValue, destroyOnUnmount],\r\n );\r\n\r\n const { touched, error } = getFieldMeta(name);\r\n\r\n const formattedValue = format ? invokeIfFunction(format, value) : value;\r\n\r\n const roundToThreeDecimals = (value) => {\r\n return typeof value !== typeof EMPTY_STRING\r\n ? parseFloat(Number(value)?.toFixed(3))\r\n : '';\r\n };\r\n\r\n if (outlinedTextField)\r\n return (\r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nTextFieldFormik.propTypes = {\r\n format: PropTypes.func,\r\n destroyOnUnmount: PropTypes.bool,\r\n};\r\n\r\nexport default TextFieldFormik;\r\n","import { useState } from 'react';\r\nimport { Field, useFormikContext, ErrorMessage } from 'formik';\r\nimport { MenuItem, IconButton } from '@material-ui/core';\r\nimport { DialogContentText } from '@material-ui/core';\r\nimport CommentIcon from '@material-ui/icons/Comment';\r\n\r\nimport {\r\n Dialog,\r\n Tooltip,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Button,\r\n} from '@material-ui/core';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst SelectTextFieldFormik = ({\r\n name,\r\n items,\r\n label,\r\n getItemName,\r\n getItemValue,\r\n emptyText = 'All',\r\n displayEmpty = true,\r\n otherOption = -1,\r\n dialogFormName,\r\n iconsMapping,\r\n ...rest\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const { setFieldValue, values } = useFormikContext();\r\n const showMoreDetails = values[name] !== otherOption || !dialogFormName;\r\n\r\n const handleOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {'Please provide description'}\r\n \r\n \r\n To continue, please enter the description here.\r\n \r\n \r\n \r\n {(msg) =>
{msg}
}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n {\r\n if (event.target.value === otherOption) {\r\n handleOpen();\r\n }\r\n setFieldValue(name, event.target.value);\r\n }}\r\n SelectProps={{\r\n displayEmpty,\r\n }}\r\n {...rest}\r\n >\r\n {displayEmpty && (\r\n \r\n {emptyText}\r\n \r\n )}\r\n {items.valueSeq().map((item) => {\r\n const name = getItemName\r\n ? invokeIfFunction(getItemName, item)\r\n : item;\r\n const value = getItemValue\r\n ? invokeIfFunction(getItemValue, item)\r\n : item;\r\n return (\r\n \r\n
\r\n {iconsMapping && iconsMapping[name] && (\r\n \r\n )}\r\n {name}\r\n
\r\n
\r\n );\r\n })}\r\n \r\n\r\n {showMoreDetails ? null : (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default SelectTextFieldFormik;\r\n","import { compose } from 'redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n FIELD_ID: 'fieldId',\r\n WELL_STATUS: 'wellboreStatus',\r\n ORGANIZATION_ID: 'organizationId',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst WellboresFilter = ({\r\n fields,\r\n classes,\r\n onSubmit,\r\n wellStatuses,\r\n initialValues,\r\n}) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n field.get('fieldId')}\r\n getItemName={(field) => field.get('name')}\r\n />\r\n \r\n \r\n status.get('id')}\r\n getItemName={(status) => status.get('name')}\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n },\r\n filterSpacing: {\r\n paddingLeft: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(WellboresFilter);\r\n","import { Link } from 'react-router-dom';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport { toWellbore } from 'utils/route.util';\r\n\r\nconst WellboreTableRow = ({ classes, item, ...rest }) => {\r\n const isWell = item.get('isWell');\r\n const isField = item.get('isField');\r\n\r\n if (isField) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (isWell) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n wellRoot: {\r\n '&:hover': {\r\n background: theme.altus.components.TableRow.background,\r\n },\r\n },\r\n fieldRoot: {\r\n top: 0,\r\n position: 'sticky',\r\n background: theme.altus.components.TableRow.hoverColor,\r\n '&:hover': {\r\n background: theme.altus.components.TableRow.hoverColor,\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(WellboreTableRow);\r\n","import { compose } from 'redux';\r\nimport { useMemo } from 'react';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Link } from 'react-router-dom';\r\nimport { IconButton, Typography } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport { Format, EMPTY_LIST } from 'app/app.constants';\r\nimport WellboreTableRow from 'features/wells/components/WellboreTableRow';\r\nimport { toField } from 'utils/route.util';\r\n\r\nconst WellboresTable = ({\r\n classes,\r\n wellboresByField = EMPTY_LIST,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'placeholder',\r\n Header: ,\r\n Cell: ,\r\n },\r\n {\r\n xs: 6,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (wellOrField) => wellOrField.get('name'),\r\n Cell: ({ row, value }) => {\r\n const isField = row.original.get('isField');\r\n\r\n if (isField) {\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n }\r\n\r\n return value;\r\n },\r\n },\r\n {\r\n xs: 6,\r\n Header: 'Survey',\r\n id: 'trajectoryUpdated',\r\n accessor: (wellOrField) => wellOrField.get('trajectoryUpdated'),\r\n Cell: ({ value }) => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n Survey uploaded\r\n \r\n  \r\n \r\n {formatDate(value, Format.date)}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'expander',\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return null;\r\n\r\n return (\r\n \r\n {row.isExpanded ? : }\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n surveyUploadedDescription: {\r\n color: theme.palette.secondary.mainLight,\r\n },\r\n wellHeader: {\r\n color: theme.palette.common.white,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(WellboresTable);\r\n","import { compose } from 'redux';\r\nimport { useMemo } from 'react';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Link } from 'react-router-dom';\r\nimport { IconButton, Typography } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST, Format } from 'app/app.constants';\r\nimport WellboreTableRow from 'features/wells/components/WellboreTableRow';\r\nimport { toField } from 'utils/route.util';\r\nimport { formatDate } from 'utils/format.util';\r\nimport moment from 'moment';\r\n\r\nconst AperioWellboresTable = ({\r\n classes,\r\n wellboresByField = EMPTY_LIST,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'placeholder',\r\n Header: ,\r\n Cell: ,\r\n },\r\n {\r\n xs: 3,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (wellOrField) => wellOrField.get('name'),\r\n Cell: ({ row, value }) => {\r\n const isField = row.original.get('isField');\r\n\r\n if (isField) {\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n }\r\n\r\n return value;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Last Project',\r\n id: 'lastProject',\r\n accessor: (wellOrField) => wellOrField.get('lastProject'),\r\n Cell: ({ value }) => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {formatDate(moment(value), Format.date)}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Main Obj. (Last Project)',\r\n id: 'lastMainOjectiveProject',\r\n accessor: (wellOrField) => wellOrField.get('lastMainOjectiveProject'),\r\n Cell: ({ value }) => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {value}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Risk Score',\r\n id: 'riskScore',\r\n accessor: (wellOrField) => wellOrField.get('wellRiskScore'),\r\n Cell: ({ value }) => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {value?.score?.toFixed(3)}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Suggested Integrity Re-log',\r\n id: 'reLogDate',\r\n accessor: (wellOrField) => wellOrField.get('wellRiskScore'),\r\n Cell: ({ value }) => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {getReLogDate()}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'expander',\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return null;\r\n\r\n return (\r\n \r\n {row.isExpanded ? : }\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n surveyUploadedDescription: {\r\n color: theme.palette.secondary.mainLight,\r\n },\r\n wellHeader: {\r\n color: theme.palette.common.white,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(AperioWellboresTable);\r\n\r\n//temp function for re-log date\r\nconst getReLogDate = () => {\r\n const date = new Date();\r\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear() + 1}`;\r\n};\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport { useEffect, memo, useMemo } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getFieldsFromState,\r\n getAvailableWellStatuses,\r\n getWellboresPageParamsFromState,\r\n getWellboresGroupedByFieldFromState,\r\n} from 'features/wells/wellbore.selectors';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentClientOrganizationIdFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n EMPTY_MAP,\r\n EMPTY_LIST,\r\n EMPTY_STRING,\r\n PagedQueryParams,\r\n EUROPE_MAP_CENTER_COORDS,\r\n SystemPermission,\r\n} from 'app/app.constants';\r\n\r\nimport {\r\n onLoad,\r\n updateFilter,\r\n clearWellbores,\r\n updateWellAperioFilter,\r\n} from 'features/wells/wellbore.actions';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport GoogleMap from 'app/components/GoogleMap';\r\nimport usePagedSearch from 'app/hooks/usePagedSearch';\r\nimport { getAllRowsExpanded } from 'utils/table.util';\r\nimport { Filters } from 'features/wells/components/WellboresFilter';\r\nimport WellboresTable from 'features/wells/components/WellboresTable';\r\nimport WellboresFilter from 'features/wells/components/WellboresFilter';\r\nimport { WELLS_ACTIONS as WELLBORE_ACTIONS } from 'features/wells/wells.constants';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport AperioWellboresTable from 'features/wells/components/AperioWellboresTable';\r\n\r\nconst getWellboreSubRows = (row) => {\r\n if (row.original) return;\r\n\r\n return row.get('wellbores', EMPTY_LIST).valueSeq();\r\n};\r\n\r\nconst defaultFormValues = {\r\n [Filters.FIELD_ID]: EMPTY_STRING,\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.WELL_STATUS]: EMPTY_STRING,\r\n [Filters.ORGANIZATION_ID]: EMPTY_STRING,\r\n};\r\n\r\nconst pageSize = 50;\r\nconst initialPage = 1;\r\n\r\nconst WellboresContainer = ({\r\n fields,\r\n classes,\r\n breadcrumb,\r\n pageParams,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchUpdateFilter,\r\n currentClientOrganizationId,\r\n wellboresByField = EMPTY_MAP,\r\n availableWellStatuses = EMPTY_LIST,\r\n dispatchUpdateWellAperioFilter,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n WELLBORE_ACTIONS.GET_FIELDS,\r\n WELLBORE_ACTIONS.WELLS_PAGE_LOADED,\r\n WELLBORE_ACTIONS.UPDATE_WELL_FILTER,\r\n ),\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(currentClientOrganizationId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [dispatchOnLoad, dispatchOnUnload, currentClientOrganizationId]);\r\n\r\n const initialTableState = useMemo(\r\n () => ({\r\n pageSize,\r\n pageIndex: (pageParams.get('currentPage') ?? initialPage) - 1,\r\n expanded: getAllRowsExpanded(wellboresByField, getWellboreSubRows),\r\n }),\r\n [pageParams, wellboresByField],\r\n );\r\n\r\n const initialFilterValues = useMemo(\r\n () => ({\r\n ...defaultFormValues,\r\n organizationId: currentClientOrganizationId,\r\n }),\r\n [currentClientOrganizationId],\r\n );\r\n\r\n const initialPagedSearchFilters = useMemo(\r\n () => ({\r\n [PagedQueryParams.PAGE]: initialTableState.pageIndex + 1,\r\n [PagedQueryParams.PAGE_SIZE]: pageSize,\r\n ...initialFilterValues,\r\n }),\r\n [initialTableState, initialFilterValues],\r\n );\r\n\r\n const { onPageChange, onFiltersChange } = usePagedSearch(\r\n userPermissions.includes(SystemPermission.WELL_ACCESS_ONLY)\r\n ? dispatchUpdateWellAperioFilter\r\n : dispatchUpdateFilter,\r\n initialPagedSearchFilters,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {userPermissions.includes(SystemPermission.WELL_ACCESS_ONLY) ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n content: {\r\n top: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n fields: getFieldsFromState(state),\r\n wellboresByField: getWellboresGroupedByFieldFromState(state),\r\n availableWellStatuses: getAvailableWellStatuses(state),\r\n pageParams: getWellboresPageParamsFromState(state),\r\n currentClientOrganizationId:\r\n getCurrentClientOrganizationIdFromState(state),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: clearWellbores,\r\n dispatchUpdateFilter: updateFilter,\r\n dispatchUpdateWellAperioFilter: updateWellAperioFilter,\r\n },\r\n ),\r\n memo,\r\n withStyles(styles),\r\n)(WellboresContainer);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nconst BasePageDense = ({ classes, ...rest }) => {\r\n const basePageClasses = useMemo(\r\n () => ({\r\n children: classes.basePageChildren,\r\n }),\r\n [classes],\r\n );\r\n\r\n return ;\r\n};\r\n\r\nconst styles = () => ({\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(BasePageDense);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport BarChartIcon from '@material-ui/icons/BarChart';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ViewAgendaIcon from '@material-ui/icons/ViewAgenda';\r\nimport { ToggleButton, ToggleButtonGroup } from '@material-ui/lab';\r\nimport ArchiveIcon from '@material-ui/icons/Archive';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { Box, Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { PROJECT_VIEWS } from 'features/projects/projects.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nexport const Filters = {\r\n PROJECT_STATUS: 'projectStatus',\r\n FACILITY_ID: 'facilityId',\r\n FIELD_ID: 'fieldId',\r\n DEPARTMENT_ID: 'departmentId',\r\n TEXT_SEARCH: 'textSearch',\r\n ORGANIZATION_ID: 'organizationId',\r\n GET_LOCATIONS: 'getLocations',\r\n IS_ARCHIVE: 'isArchive',\r\n PROJECT_STATUSES: 'ProjectStatuses',\r\n GANTT_VIEW: 'ganttView',\r\n};\r\n\r\nconst defaultFilters = [\r\n Filters.PROJECT_STATUS,\r\n Filters.FACILITY_ID,\r\n Filters.FIELD_ID,\r\n Filters.DEPARTMENT_ID,\r\n Filters.TEXT_SEARCH,\r\n Filters.GET_LOCATIONS,\r\n];\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst ProjectFilter = ({\r\n fieldId,\r\n fields,\r\n classes,\r\n statuses,\r\n onSubmit,\r\n facilities,\r\n departments,\r\n selectedView,\r\n onViewChange,\r\n organizations,\r\n filters = defaultFilters,\r\n currentClientOrganizationId,\r\n getArchiveProjects,\r\n}) => {\r\n const initialValues = {\r\n [Filters.PROJECT_STATUS]: '',\r\n [Filters.FACILITY_ID]: '',\r\n [Filters.DEPARTMENT_ID]: '',\r\n [Filters.FIELD_ID]: fieldId ? fieldId : '',\r\n [Filters.TEXT_SEARCH]: '',\r\n [Filters.GET_LOCATIONS]: true,\r\n [Filters.IS_ARCHIVE]: false,\r\n [Filters.GANTT_VIEW]: selectedView,\r\n };\r\n const displayFilter = useCallback(\r\n (filter) => filters?.includes(filter) ?? true,\r\n [filters],\r\n );\r\n const displayFields = displayFilter(Filters.FIELD_ID);\r\n const displayTextSearch = displayFilter(Filters.TEXT_SEARCH);\r\n const displayFacilities = displayFilter(Filters.FACILITY_ID);\r\n const displayStatuses = displayFilter(Filters.PROJECT_STATUS);\r\n const displayOrganizations = displayFilter(Filters.ORGANIZATION_ID);\r\n const displayDepartments = displayFilter(Filters.DEPARTMENT_ID);\r\n\r\n const showArchiveProjectClick = () => {\r\n getArchiveProjects();\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ARCHIVE\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {displayTextSearch && (\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n )}\r\n {displayStatuses && (\r\n \r\n status.get('id')}\r\n getItemName={(status) => status.get('name')}\r\n />\r\n \r\n )}\r\n {displayOrganizations && (\r\n \r\n organization.get('id')}\r\n getItemName={(organization) => organization.get('name')}\r\n />\r\n \r\n )}\r\n {displayFields && (\r\n \r\n field.get('fieldId')}\r\n getItemName={(field) => field.get('name')}\r\n />\r\n \r\n )}\r\n {displayFacilities && (\r\n \r\n facility.get('id')}\r\n getItemName={(facility) => facility.get('name')}\r\n />\r\n \r\n )}\r\n {displayDepartments && (\r\n \r\n department.get('id')}\r\n getItemName={(department) => department.get('name')}\r\n />\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n viewToggle: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n};\r\n\r\nexport default compose(withStyles(styles))(ProjectFilter);\r\n","import { useState, useCallback } from 'react';\r\nimport { compose } from 'redux';\r\nimport { useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport Link from '@material-ui/core/Link';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Box, Grid, InputAdornment } from '@material-ui/core';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport FilterListIcon from '@material-ui/icons/FilterList';\r\nimport { Field, Formik } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { updateFilter } from 'features/projects/projects.actions';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nexport const Filters = {\r\n PROJECT_STATUS: 'projectStatus',\r\n FACILITY_ID: 'facilityId',\r\n FIELD_ID: 'fieldId',\r\n TEXT_SEARCH: 'textSearch',\r\n ORGANIZATION_ID: 'organizationId',\r\n GET_LOCATIONS: 'getLocations',\r\n IS_ARCHIVE: 'isArchive',\r\n};\r\n\r\nconst ARCHIVE_FILTERS = {\r\n TEXT_SEARCH: 'textSearch',\r\n};\r\n\r\nexport const filterProjectOptions = ['Plan', 'Report', 'Execute'];\r\n\r\nconst ArchiveProjectFilter = ({\r\n goBackToProjects,\r\n updateProjectFilter,\r\n classes,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [selected, setSelected] = useState({\r\n Plan: false,\r\n Report: false,\r\n });\r\n\r\n const filterClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleToggle = (value) => () => {\r\n const newSelected = { ...selected, [value]: !selected[value] };\r\n setSelected(newSelected);\r\n updateProjectFilter(newSelected);\r\n };\r\n\r\n const onArchiveTextSearchSubmit = useCallback(\r\n (formValues) => {\r\n const filterValues = {\r\n isArchive: true,\r\n getLocations: true,\r\n textSearch: formValues.textSearch,\r\n };\r\n dispatch(updateFilter(filterValues));\r\n },\r\n [dispatch],\r\n );\r\n\r\n const initialArchiveFilterValues = {\r\n [ARCHIVE_FILTERS.TEXT_SEARCH]: EMPTY_STRING,\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n PROJECTS\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n form.setFieldValue(\r\n ARCHIVE_FILTERS.TEXT_SEARCH,\r\n initialArchiveFilterValues[\r\n ARCHIVE_FILTERS.TEXT_SEARCH\r\n ],\r\n );\r\n const value = {\r\n textSearch: '',\r\n };\r\n onArchiveTextSearchSubmit(value);\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {filterProjectOptions.map((option) => (\r\n \r\n \r\n }\r\n label={option}\r\n />\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n viewToggle: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n filterContainer: {\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n gap: '30px',\r\n },\r\n};\r\n\r\nexport default compose(withStyles(styles))(ArchiveProjectFilter);\r\n","import {\r\n Fab as MuiFab,\r\n Grid as MuiGrid,\r\n Button as MuiButton,\r\n Avatar as MuiAvatar,\r\n Tooltip as MuiTooltip,\r\n IconButton as MuiIconButton,\r\n Typography as MuiTypography,\r\n} from '@material-ui/core';\r\n\r\nconst withTooltip =\r\n (WrappedComponent) =>\r\n ({ title, TooltipProps = {}, ...rest }) => {\r\n return title ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n );\r\n };\r\n\r\nexport default withTooltip;\r\n\r\nexport const Fab = withTooltip(MuiFab);\r\nexport const Image = withTooltip('img');\r\nexport const Grid = withTooltip(MuiGrid);\r\nexport const Button = withTooltip(MuiButton);\r\nexport const Avatar = withTooltip(MuiAvatar);\r\nexport const IconButton = withTooltip(MuiIconButton);\r\nexport const Typography = withTooltip(MuiTypography);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst styles = {\r\n svg: {\r\n width: '1em',\r\n height: '1em',\r\n flexShrink: '0',\r\n fontSize: '24px',\r\n userSelect: 'none',\r\n fill: 'currentColor',\r\n display: 'inline-block',\r\n transition: 'fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\r\n },\r\n icon: {\r\n display: 'flex',\r\n },\r\n};\r\n\r\nconst DashboardIcon = ({ classes }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default withStyles(styles)(DashboardIcon);\r\n","import { compose } from 'redux';\r\nimport { Chip } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst ProjectTaskServiceChips = ({\r\n classes,\r\n size = 'small',\r\n taskServices = EMPTY_LIST,\r\n ...rest\r\n}) =>\r\n taskServices.map((taskService, index) => (\r\n \r\n ));\r\n\r\nconst styles = (theme) => ({\r\n chip: {\r\n marginLeft: 0,\r\n margin: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectTaskServiceChips);\r\n","import { compose } from 'redux';\r\nimport { Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst ProjectTableRowDetail = ({ title, value, classes }) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n {value}\r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n paddingRight: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectTableRowDetail);\r\n","import LocationOn from '@material-ui/icons/LocationOn';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst ProjectMapMarker = ({ classes, isHovered }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n fontSize: theme.typography.h4.fontSize,\r\n color: ({ status }) => theme.palette.status[status],\r\n },\r\n zoomedIcon: {\r\n transition: 'transform 0.2s ease-in-out',\r\n transform: 'scale(1.5)',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectMapMarker);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\n\r\nconst DashboardImage = ({ name, title, classes, renderImage, ...rest }) => {\r\n const src = `${PUBLIC_ASSETS_URL}/images/dashboard/${name}.png`;\r\n\r\n if (renderImage) return invokeIfFunction(renderImage, src);\r\n\r\n return {title};\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(DashboardImage);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const createProjectDashboardsSelector = (projectId) =>\r\n createSelector(\r\n (state) => state.getIn(['entity', 'projectDashboard']),\r\n (projectDashboards) => projectDashboards.get(projectId.toString()),\r\n );\r\n\r\nexport const createProjectDashboardSelector = (projectId, projectDashboardId) =>\r\n createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'entity',\r\n 'projectDashboard',\r\n projectId.toString(),\r\n projectDashboardId.toString(),\r\n ]),\r\n (projectDashboard) => projectDashboard,\r\n );\r\n\r\nexport const createProjectDashboardCurvesSelector = (projectDashboardId) =>\r\n createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'entity',\r\n 'projectDashboardCurve',\r\n projectDashboardId.toString(),\r\n ]),\r\n (projectDashboard) => projectDashboard,\r\n );\r\n\r\nexport const getDashboardsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'dashboard']),\r\n (dashboards) => dashboards,\r\n);\r\n","import { useCallback, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n toggleProjectDashboard,\r\n updateProjectDashboard,\r\n toggleProjectDashboards,\r\n requestProjectDashboard,\r\n requestProjectDashboards,\r\n} from 'features/projects/dashboard/dashboard.actions';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\nimport { createProjectDashboardsSelector } from 'features/projects/dashboard/dashboard.selectors';\r\n\r\nconst useProjectDashboards = (projectId) => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchRequestProjectDashboard = useCallback(\r\n (projectDashboardId) =>\r\n dispatch(requestProjectDashboard(projectId, projectDashboardId)),\r\n [dispatch, projectId],\r\n );\r\n\r\n const dispatchRequestProjectDashboards = useCallback(\r\n () => dispatch(requestProjectDashboards(projectId)),\r\n [dispatch, projectId],\r\n );\r\n\r\n const dispatchToggleProjectDashboard = useCallback(\r\n (dashboardId, callback) =>\r\n dispatch(toggleProjectDashboard(projectId, dashboardId, callback)),\r\n [dispatch, projectId],\r\n );\r\n\r\n const dispatchToggleProjectDashboards = useCallback(\r\n (callback) => dispatch(toggleProjectDashboards(projectId, callback)),\r\n [dispatch, projectId],\r\n );\r\n\r\n const dispatchUpdateProjectDashboard = useCallback(\r\n (projectDashboardId, projectDashboard) =>\r\n dispatch(\r\n updateProjectDashboard(projectId, projectDashboardId, projectDashboard),\r\n ),\r\n [dispatch, projectId],\r\n );\r\n\r\n const projectDashboardsSelector = useMemo(\r\n () => createProjectDashboardsSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const dataState = useSelector((state) =>\r\n getActionDataStateFromState(\r\n state,\r\n DASHBOARDS_ACTIONS.REQUEST_PROJECT_DASHBOARDS,\r\n ),\r\n );\r\n\r\n const toggleProjectDashboardDataState = useSelector((state) =>\r\n getActionDataStateFromState(\r\n state,\r\n DASHBOARDS_ACTIONS.TOGGLE_PROJECT_DASHBOARD,\r\n ),\r\n );\r\n\r\n const toggleProjectDashboardsDataState = useSelector((state) =>\r\n getActionDataStateFromState(\r\n state,\r\n DASHBOARDS_ACTIONS.TOGGLE_PROJECT_DASHBOARDS,\r\n ),\r\n );\r\n\r\n const updateProjectDashboardDataState = useSelector((state) =>\r\n getActionDataStateFromState(\r\n state,\r\n DASHBOARDS_ACTIONS.UPDATE_PROJECT_DASHBOARD,\r\n ),\r\n );\r\n\r\n const projectDashboards = useSelector(projectDashboardsSelector);\r\n\r\n return {\r\n dataState,\r\n projectDashboards,\r\n toggleProjectDashboardDataState,\r\n updateProjectDashboardDataState,\r\n toggleProjectDashboardsDataState,\r\n updateProjectDashboard: dispatchUpdateProjectDashboard,\r\n toggleProjectDashboard: dispatchToggleProjectDashboard,\r\n toggleProjectDashboards: dispatchToggleProjectDashboards,\r\n requestProjectDashboard: dispatchRequestProjectDashboard,\r\n requestProjectDashboards: dispatchRequestProjectDashboards,\r\n };\r\n};\r\n\r\nexport default useProjectDashboards;\r\n","import { useEffect } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { isMobile } from 'react-device-detect';\r\nimport { lighten } from '@material-ui/core/styles';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Grid,\r\n Card,\r\n MenuItem,\r\n CardMedia,\r\n Typography,\r\n CardContent,\r\n CardActionArea,\r\n} from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { toProjectDashboardV2 } from 'utils/route.util';\r\nimport DashboardImage from 'features/projects/dashboard/components/DashboardImage';\r\nimport useProjectDashboards from 'features/projects/dashboard/hooks/useProjectDashboards';\r\n\r\nconst ProjectDashboardsList = ({ classes, projectId, taskId }) => {\r\n const {\r\n dataState,\r\n requestProjectDashboards,\r\n projectDashboards = EMPTY_MAP,\r\n } = useProjectDashboards(projectId);\r\n\r\n useEffect(requestProjectDashboards, [requestProjectDashboards]);\r\n\r\n if (!projectDashboards.size && dataState.isSuccess()) {\r\n return (\r\n \r\n None Available\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {projectDashboards.valueSeq().map((projectDashboard) => {\r\n const name = projectDashboard.get('name');\r\n const title = projectDashboard.get('title');\r\n\r\n const url = toProjectDashboardV2(\r\n projectId,\r\n projectDashboard.get('projectDashboardId'),\r\n taskId,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n cardMedia: {\r\n height: 0,\r\n paddingTop: '56.25%', // 16:9\r\n },\r\n card: {\r\n background: lighten(theme.palette.background.paper, 0.1),\r\n },\r\n menuItemRoot: {\r\n padding: 0,\r\n marginBottom: theme.spacing(1.5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectDashboardsList);\r\n","import { isIPv4 } from 'is-ip';\r\nimport isNil from 'lodash/isNil';\r\nimport isNumber from 'lodash/isNumber';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\n\r\nexport const requiredBetween = (min, max) => (value) => {\r\n if (isQuantity(value)) {\r\n return requiredQuantity(value);\r\n }\r\n\r\n if (isInvalid(value) || value < min || value > max) {\r\n return `Value must be between ${min} and ${max}`;\r\n }\r\n};\r\n\r\nexport const required = (value) => {\r\n if (isQuantity(value)) {\r\n return requiredQuantity(value);\r\n }\r\n\r\n return isInvalid(value) ? 'Required' : undefined;\r\n};\r\n\r\nconst isInvalid = (value) => (isNumber(value) ? isNil(value) : !value);\r\n\r\nconst isQuantity = (value) => !!value?.unit; // workaround to check if it's a quantity object.\r\n\r\nconst requiredQuantity = (quantity) => {\r\n const isInvalid = isNil(quantity?.value) || quantity.value === EMPTY_STRING;\r\n\r\n return isInvalid ? 'Required' : undefined;\r\n};\r\n\r\nexport const createMaxLengthValidator = (maxLength) => (value) => {\r\n if (isNil(value)) return undefined;\r\n\r\n return value.length > maxLength ? `Max ${maxLength} characters` : undefined;\r\n};\r\n\r\nexport const validateIPAddress = (value) => {\r\n if (!value) return undefined;\r\n\r\n return isIPv4(value) ? undefined : 'Invalid IP address';\r\n};\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst searchOperations = (filter) => Agent.get('/operations/search', filter);\r\n\r\nconst searchOperationsLiveProject = (filter) =>\r\n Agent.get('/operations/search/liveproject', filter);\r\n\r\nconst searchOnlineOperations = (filter) =>\r\n Agent.get('/operations/search/online', filter);\r\n\r\nconst searchOnlineOperationsLite = (filter) =>\r\n Agent.get('/operations/search/online/lite', filter);\r\n\r\nconst getLiveOperationFields = (filters) =>\r\n Agent.get('/search/filter/valueset/operationField', filters);\r\n\r\nconst getLiveOperationFacilities = (filters) =>\r\n Agent.get('/search/filter/valueset/operationFacility', filters);\r\n\r\nconst getCheetahJobsByProject = (projectId) =>\r\n Agent.get(`/operations/byproject/${projectId}`);\r\n\r\nconst searchCheetahJobs = (query) =>\r\n Agent.get('/operations/cheetah/search', query);\r\n\r\nconst getCheetahJobsFilter = (query) =>\r\n Agent.get('/operations/cheetah/filter', query);\r\n\r\nconst updateCheetahJob = (cheetahJobId, cheetahJob) =>\r\n Agent.put(`/operations/cheetah/${cheetahJobId}`, cheetahJob);\r\n\r\nconst getCheetahJobCurves = (cheetahJobId) =>\r\n Agent.get(`/operations/cheetah/${cheetahJobId}/curves`);\r\n\r\nconst getAvailableProjectsForCheetahJobs = (filter, source) =>\r\n Agent.get(`/operations/cheetah/available-projects/${source}`, filter);\r\n\r\nconst getCheetahJobsProjectFilter = (source) =>\r\n Agent.get(`/operations/cheetah/available-projects/filter/${source}`);\r\n\r\nconst updateProjectStatus = (projectId, status) =>\r\n Agent.put(`/operations/${projectId}/status/${status}`);\r\n\r\nconst getOperationsFilter = (query) => Agent.get('/operations/filter', query);\r\n\r\nconst getOperationsFilterLiveProject = (query) =>\r\n Agent.get('/operations/filter/liveproject', query);\r\n\r\nconst operationService = {\r\n searchOperations,\r\n searchOperationsLiveProject,\r\n updateCheetahJob,\r\n searchCheetahJobs,\r\n updateProjectStatus,\r\n getOperationsFilter,\r\n getOperationsFilterLiveProject,\r\n getCheetahJobCurves,\r\n getCheetahJobsFilter,\r\n searchOnlineOperations,\r\n searchOnlineOperationsLite,\r\n getLiveOperationFields,\r\n getCheetahJobsByProject,\r\n getLiveOperationFacilities,\r\n getCheetahJobsProjectFilter,\r\n getAvailableProjectsForCheetahJobs,\r\n};\r\n\r\nexport default operationService;\r\n","import operationService from 'services/operation.service';\r\nimport { OPERATIONS_ACTIONS } from 'features/operations/operations.constants';\r\n\r\nexport const receiveOperations = (operations) => ({\r\n type: OPERATIONS_ACTIONS.RECEIVE_OPERATIONS,\r\n payload: operations,\r\n});\r\n\r\nexport const receiveOperationsLiveProjects = (operations) => ({\r\n type: OPERATIONS_ACTIONS.RECEIVE_OPERATIONS_LIVE_PROJECTS,\r\n payload: operations,\r\n});\r\n\r\nexport const receiveOperation = (operation) => ({\r\n type: OPERATIONS_ACTIONS.RECEIVE_OPERATION,\r\n payload: operation,\r\n});\r\n\r\nexport const receiveCheetahJobs = (cheetahJobs) => ({\r\n type: OPERATIONS_ACTIONS.RECEIVE_CHEETAH_JOBS,\r\n payload: cheetahJobs,\r\n});\r\n\r\nexport const receiveCheetahJob = (cheetahJob) => ({\r\n type: OPERATIONS_ACTIONS.RECEIVE_CHEETAH_JOB,\r\n payload: cheetahJob,\r\n});\r\n\r\nexport const clearOperations = {\r\n type: OPERATIONS_ACTIONS.CLEAR_OPERATIONS,\r\n};\r\n\r\nexport const searchOnlineOperations = (filter) => (dispatch) => {\r\n const payload = operationService\r\n .searchOnlineOperationsLite(filter)\r\n .then((operations) => dispatch(receiveOperations(operations)));\r\n\r\n dispatch({\r\n filter,\r\n type: OPERATIONS_ACTIONS.SEARCH_OPERATIONS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const searchOperations = (filter) => (dispatch) => {\r\n const payload = operationService\r\n .searchOperationsLiveProject(filter)\r\n .then((operations) => dispatch(receiveOperationsLiveProjects(operations)));\r\n\r\n dispatch({\r\n filter,\r\n type: OPERATIONS_ACTIONS.SEARCH_OPERATIONS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const searchCheetahJobs = (query) => (dispatch) => {\r\n const payload = operationService\r\n .searchCheetahJobs(query)\r\n .then((operations) => dispatch(receiveCheetahJobs(operations)));\r\n\r\n dispatch({\r\n type: OPERATIONS_ACTIONS.SEARCH_CHEETAH_JOBS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateCheetahJob = (cheetahJobId, cheetahJob) => (dispatch) => {\r\n const payload = operationService\r\n .updateCheetahJob(cheetahJobId, cheetahJob)\r\n .then((cheetahJob) => dispatch(receiveCheetahJob(cheetahJob)));\r\n\r\n dispatch({\r\n payload,\r\n type: OPERATIONS_ACTIONS.UPDATE_CHEETAH_JOB,\r\n notification: {\r\n success: 'Job updated successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateProjectStatus = (projectId, status) => (dispatch) => {\r\n const payload = operationService\r\n .updateProjectStatus(projectId, status)\r\n .then((operation) => dispatch(receiveOperation(operation)));\r\n\r\n dispatch({\r\n payload,\r\n type: OPERATIONS_ACTIONS.UPDATE_PROJECT_CHEETAH_JOB_STATUS,\r\n notification: {\r\n success: 'Project status updated successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nconst getCheetahJobsSelector = (state) => state.getIn(['entity', 'cheetahJob']);\r\n\r\nexport const getCheetahJobsFromState = createSelector(\r\n getCheetahJobsSelector,\r\n (cheetahJobs) => cheetahJobs,\r\n);\r\n\r\nexport const createFilteredCheetahJobsSelector = (filter) =>\r\n createSelector(getCheetahJobsFromState, (cheetahJobs) =>\r\n cheetahJobs.filter((cheetahJob) =>\r\n Object.keys(filter).every(\r\n (key) => cheetahJob.get(key)?.toString() === filter[key]?.toString(),\r\n ),\r\n ),\r\n );\r\n","import { useMemo, useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n updateCheetahJob,\r\n searchCheetahJobs,\r\n} from 'features/operations/operations.actions';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { OPERATIONS_ACTIONS } from 'features/operations/operations.constants';\r\nimport { createFilteredCheetahJobsSelector } from 'features/operations/cheetahJob.selectors';\r\n\r\nconst useCheetahJobs = (filter) => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSearchCheetahJobs = useCallback(\r\n (filter) => dispatch(searchCheetahJobs(filter)),\r\n [dispatch],\r\n );\r\n\r\n const dispatchUpdateCheetahJob = useCallback(\r\n (cheetahJob) => dispatch(updateCheetahJob(cheetahJob.id, cheetahJob)),\r\n [dispatch],\r\n );\r\n\r\n const selector = useMemo(\r\n () => createFilteredCheetahJobsSelector(filter),\r\n [filter],\r\n );\r\n\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n OPERATIONS_ACTIONS.UPDATE_CHEETAH_JOB,\r\n OPERATIONS_ACTIONS.SEARCH_CHEETAH_JOBS,\r\n ),\r\n );\r\n\r\n const cheetahJobs = useSelector(selector);\r\n\r\n return {\r\n dataState,\r\n cheetahJobs,\r\n updateCheetahJob: dispatchUpdateCheetahJob,\r\n searchCheetahJobs: dispatchSearchCheetahJobs,\r\n };\r\n};\r\n\r\nexport default useCheetahJobs;\r\n","import { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { requestDashboards } from 'features/projects/dashboard/dashboard.actions';\r\nimport { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\nimport { getDashboardsFromState } from 'features/projects/dashboard/dashboard.selectors';\r\n\r\nconst useDashboards = () => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchRequestDashboards = useCallback(\r\n () => dispatch(requestDashboards()),\r\n [dispatch],\r\n );\r\n\r\n const projectDashboards = useSelector(getDashboardsFromState);\r\n\r\n const dataState = useSelector((state) =>\r\n getActionDataStateFromState(state, DASHBOARDS_ACTIONS.REQUEST_DASHBOARDS),\r\n );\r\n\r\n return {\r\n dataState,\r\n dashboards: projectDashboards ?? EMPTY_LIST,\r\n requestDashboards: dispatchRequestDashboards,\r\n };\r\n};\r\n\r\nexport default useDashboards;\r\n","import { useCallback, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n createProjectDashboardSelector,\r\n createProjectDashboardCurvesSelector,\r\n} from 'features/projects/dashboard/dashboard.selectors';\r\n\r\nimport {\r\n requestProjectDashboard,\r\n updateProjectDashboard,\r\n} from 'features/projects/dashboard/dashboard.actions';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { DASHBOARDS_ACTIONS } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nconst useProjectDashboard = (projectId, projectDashboardId) => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchRequestProjectDashboard = useCallback(\r\n () => dispatch(requestProjectDashboard(projectId, projectDashboardId)),\r\n [dispatch, projectId, projectDashboardId],\r\n );\r\n const dispatchUpdateProjectDashboard = useCallback(\r\n (projectDashboard) =>\r\n dispatch(\r\n updateProjectDashboard(projectId, projectDashboardId, projectDashboard),\r\n ),\r\n [dispatch, projectId, projectDashboardId],\r\n );\r\n\r\n const projectDashboardSelector = useMemo(\r\n () => createProjectDashboardSelector(projectId, projectDashboardId),\r\n [projectId, projectDashboardId],\r\n );\r\n\r\n const projectDashboardCurvesSelector = useMemo(\r\n () => createProjectDashboardCurvesSelector(projectDashboardId),\r\n [projectDashboardId],\r\n );\r\n\r\n const dataState = useSelector((state) =>\r\n getActionDataStateFromState(\r\n state,\r\n DASHBOARDS_ACTIONS.REQUEST_PROJECT_DASHBOARD,\r\n ),\r\n );\r\n\r\n const curves = useSelector(projectDashboardCurvesSelector);\r\n const projectDashboard = useSelector(projectDashboardSelector);\r\n\r\n return {\r\n dataState,\r\n projectDashboard,\r\n curves: curves ?? EMPTY_LIST,\r\n updateProjectDashboard: dispatchUpdateProjectDashboard,\r\n requestProjectDashboard: dispatchRequestProjectDashboard,\r\n };\r\n};\r\n\r\nexport default useProjectDashboard;\r\n","import makeStyles from '@material-ui/styles/makeStyles';\r\nimport FiberManualRecord from '@material-ui/icons/FiberManualRecord';\r\n\r\nexport const Status = {\r\n SUCCESS: 1,\r\n WARNING: 2,\r\n ERROR: 3,\r\n};\r\n\r\nconst StatusIndicator = ({ title, status, color, ...rest }) => {\r\n const classes = useStyles({ status, color });\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n fill: ({ status, color }) => {\r\n if (color) return color;\r\n\r\n switch (status) {\r\n case Status.SUCCESS:\r\n return theme.altus.components.SmLocation.statusIndicator.ping;\r\n case Status.WARNING:\r\n return theme.altus.components.SmLocation.statusIndicator.noPing;\r\n case Status.ERROR:\r\n return theme.altus.components.SmLocation.statusIndicator.error;\r\n default:\r\n return theme.altus.components.SmLocation.statusIndicator.unknown;\r\n }\r\n },\r\n },\r\n}));\r\n\r\nexport default StatusIndicator;\r\n","import StatusIndicator, {\r\n Status,\r\n} from 'features/data-exchange/components/StatusIndicator';\r\n\r\nimport { CheetahJobStatus } from 'app/app.constants';\r\n\r\nconst CheetahJobStatusIndicator = ({\r\n cheetahJob,\r\n status: statusOverride,\r\n ...rest\r\n}) => {\r\n const status = cheetahJob.get('status');\r\n const title = cheetahJob.get('statusName');\r\n\r\n if (statusOverride) {\r\n return ;\r\n }\r\n\r\n switch (status) {\r\n case CheetahJobStatus.STREAMING:\r\n return (\r\n \r\n );\r\n default:\r\n return ;\r\n }\r\n};\r\n\r\nexport default CheetahJobStatusIndicator;\r\n","import { compose } from 'redux';\r\nimport { FastField as Field } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { styles } from 'app/components/form/formik/helpers/tablerow.textfield.styles';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst TableRowTextFieldFormik = ({\r\n name,\r\n classes,\r\n InputProps,\r\n TextFieldComponent = TextFieldFormik,\r\n keepChangeAfterOnBlur = false,\r\n ...rest\r\n}) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(withStyles(styles))(TableRowTextFieldFormik);\r\n","import { lighten } from '@material-ui/core/styles';\r\n\r\nexport const styles = (theme) => {\r\n const background = lighten(\r\n theme.altus.components.SortableListRow.background,\r\n 0.05,\r\n );\r\n\r\n return {\r\n underline: {\r\n '&::before': {\r\n display: 'none',\r\n },\r\n },\r\n input: {\r\n '&:focus': {\r\n background,\r\n },\r\n '&:hover': {\r\n background,\r\n },\r\n '&:disabled': {\r\n background: 'initial',\r\n },\r\n background,\r\n padding: 10,\r\n ...theme.typography.body2,\r\n },\r\n error: {\r\n '& $input': {\r\n background,\r\n },\r\n },\r\n };\r\n};\r\n","import { Grid, Box } from '@material-ui/core';\r\n\r\nimport StatusIndicator from 'features/data-exchange/components/StatusIndicator';\r\n\r\nconst StatusIndicatorWithText = ({ color, children }) => (\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n);\r\n\r\nexport default StatusIndicatorWithText;\r\n","import { Field } from 'formik';\r\nimport { MenuItem } from '@material-ui/core';\r\nimport * as colors from '@material-ui/core/colors';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport StatusIndicatorWithText from 'features/projects/dashboard/components/StatusIndicatorWithText';\r\n\r\nconst availableColors = [\r\n colors.purple[400],\r\n colors.orange[400],\r\n colors.pink[400],\r\n colors.green[400],\r\n colors.orange[600],\r\n colors.pink[100],\r\n colors.cyan[400],\r\n colors.yellow[400],\r\n];\r\n\r\nconst ProjectDashboardCurveColorField = ({ field, caption }) => {\r\n const { name, value } = field;\r\n\r\n const isValidColor = availableColors.includes(value);\r\n\r\n return (\r\n \r\n {/* Make sure there is always one selected option, even though the value is not available for selection */}\r\n {!isValidColor && (\r\n \r\n \r\n {caption}\r\n \r\n \r\n )}\r\n {availableColors.map((color) => (\r\n \r\n \r\n {caption}\r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default ProjectDashboardCurveColorField;\r\n","import { Field } from 'formik';\r\nimport { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { Switch } from '@material-ui/core';\r\nimport { useCallback, useMemo } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table, TableRow, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport StatusIndicatorWithText from 'features/projects/dashboard/components/StatusIndicatorWithText';\r\nimport { ProjectDashboardFormFields as FormFields } from 'features/projects/dashboard/dashboard.constants';\r\nimport ProjectDashboardCurveColorField from 'features/projects/dashboard/components/ProjectDashboardCurveColorField';\r\n\r\nexport const getInitialSelectedProjectDashboardCurveRowIds = (\r\n projectDashboardCurves = EMPTY_LIST,\r\n) => {\r\n if (!projectDashboardCurves.size) return EMPTY_MAP.toJS();\r\n\r\n return projectDashboardCurves\r\n .map((curve) => !!curve.get('projectDashboardId'))\r\n .reduce(\r\n (result, isSelected, index) => result.set(index, isSelected),\r\n EMPTY_MAP,\r\n )\r\n .toJS();\r\n};\r\n\r\nconst ProjectDashboardCurvesTable = ({\r\n classes,\r\n fieldName,\r\n disabledFields,\r\n maxSelectedItems,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'selection',\r\n Header: ,\r\n Cell: ({ row, state, toggleRowSelected }) => {\r\n const { selectedRowIds } = state;\r\n\r\n const selectedRows = Object.values(selectedRowIds).filter(Boolean);\r\n\r\n const isSelected = !!selectedRowIds[row.id];\r\n\r\n const isExceedingMaxSelectedItems =\r\n maxSelectedItems > 0 && selectedRows.length >= maxSelectedItems;\r\n\r\n if (isExceedingMaxSelectedItems && !isSelected) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n toggleRowSelected(row.id)}\r\n />\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Caption',\r\n accessor: (projectDashboardCurve) =>\r\n projectDashboardCurve.getIn(['curve', 'caption']),\r\n Cell: ({ row, state }) => {\r\n const projectDashboard = row.original;\r\n\r\n const color = projectDashboard.getIn(['curve', 'color']);\r\n const caption = projectDashboard.getIn(['curve', 'caption']);\r\n\r\n const { selectedRowIds } = state;\r\n\r\n const isSelected = !!selectedRowIds[row.id];\r\n const isDisabled = disabledFields?.includes(FormFields.COLOR);\r\n\r\n if (isDisabled || !isSelected) {\r\n return (\r\n \r\n {caption}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Description',\r\n accessor: (projectDashboardCurve) =>\r\n projectDashboardCurve.getIn(['curve', 'description']),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Offset',\r\n accessor: (projectDashboardCurve) =>\r\n projectDashboardCurve.getIn(['curve', 'offset']),\r\n Cell: ({ row, value, state }) => {\r\n const { selectedRowIds } = state;\r\n\r\n const isSelected = !!selectedRowIds[row.id];\r\n const isDisabled = disabledFields?.includes(FormFields.OFFSET);\r\n\r\n if (isDisabled || !isSelected) return value;\r\n\r\n return (\r\n {\r\n const allowedRange = 100;\r\n return value > allowedRange || value < allowedRange * -1\r\n ? `Offset should be in +${allowedRange} and -${allowedRange} range`\r\n : undefined;\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Min',\r\n accessor: (projectDashboardCurve) =>\r\n projectDashboardCurve.getIn(['curve', 'minValue']),\r\n Cell: ({ row, value, state }) => {\r\n const { selectedRowIds } = state;\r\n\r\n const isSelected = !!selectedRowIds[row.id];\r\n const isDisabled = disabledFields?.includes(FormFields.MIN_VALUE);\r\n\r\n if (isDisabled || !isSelected) return value;\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Max',\r\n accessor: (projectDashboardCurve) =>\r\n projectDashboardCurve.getIn(['curve', 'maxValue']),\r\n Cell: ({ row, value, state }) => {\r\n const { selectedRowIds } = state;\r\n\r\n const isSelected = !!selectedRowIds[row.id];\r\n const isDisabled = disabledFields?.includes(FormFields.MAX_VALUE);\r\n\r\n if (isDisabled || !isSelected) return value;\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Unit',\r\n accessor: (projectDashboardCurve) =>\r\n projectDashboardCurve.getIn(['curve', 'unit']),\r\n Cell: ({ row, value, state }) => {\r\n const { selectedRowIds } = state;\r\n\r\n const isSelected = !!selectedRowIds[row.id];\r\n const isDisabled = disabledFields?.includes(FormFields.UNIT);\r\n\r\n if (isDisabled || !isSelected) return value;\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [fieldName, disabledFields, maxSelectedItems],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ isSelected, ...rest }) => (\r\n \r\n ),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableRowRootDisabled: {\r\n opacity: theme.palette.action.disabledOpacity,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectDashboardCurvesTable);\r\n","import { useCallback } from 'react';\r\nimport { Map, List } from 'immutable';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport projectDashboardService from 'services/projectDashboard.service';\r\n\r\nconst useProjectDashboardCheetahJobCurves = (\r\n projectId,\r\n projectDashboardId,\r\n cheetahJobId,\r\n) => {\r\n const getProjectDashboardCheetahJobCurves = useCallback(() => {\r\n if (!cheetahJobId) return;\r\n\r\n return projectDashboardService\r\n .getProjectDashboardCheetahJobCurves(\r\n projectId,\r\n projectDashboardId,\r\n cheetahJobId,\r\n )\r\n .then((projectDashboardCheetahJobCurves) =>\r\n List(projectDashboardCheetahJobCurves).map(Map),\r\n );\r\n }, [cheetahJobId, projectId, projectDashboardId]);\r\n\r\n return useRequest(getProjectDashboardCheetahJobCurves);\r\n};\r\n\r\nexport default useProjectDashboardCheetahJobCurves;\r\n","import { useFormikContext } from 'formik';\r\nimport { useEffect, useMemo } from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { ProjectDashboardFormFields as FormFields } from 'features/projects/dashboard/dashboard.constants';\r\nimport ProjectDashboardCurvesTable from 'features/projects/dashboard/components/ProjectDashboardCurvesTable';\r\nimport useProjectDashboardCheetahJobCurves from 'features/projects/dashboard/hooks/useProjectDashboardCheetahJobCurves';\r\nimport { getInitialSelectedProjectDashboardCurveRowIds } from 'features/projects/dashboard/components/ProjectDashboardCurvesTable';\r\n\r\nconst ProjectDashboardCheetahJobCurvesTableContainer = ({\r\n classes,\r\n projectId,\r\n cheetahJobId,\r\n setDataState,\r\n projectDashboardId,\r\n ...rest\r\n}) => {\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const [projectDashboardCheetahJobCurves = EMPTY_LIST, dataState] =\r\n useProjectDashboardCheetahJobCurves(\r\n projectId,\r\n projectDashboardId,\r\n cheetahJobId,\r\n );\r\n\r\n useEffect(() => {\r\n setDataState(dataState);\r\n }, [dataState, setDataState]);\r\n\r\n useEffect(() => {\r\n if (!projectDashboardCheetahJobCurves) return;\r\n if (!cheetahJobId) return;\r\n\r\n setFieldValue(\r\n FormFields.PROJECT_DASHBOARD_CURVES,\r\n projectDashboardCheetahJobCurves.toJS(),\r\n );\r\n\r\n return () => {\r\n setFieldValue(FormFields.PROJECT_DASHBOARD_CURVES, EMPTY_LIST.toJS());\r\n };\r\n }, [\r\n cheetahJobId,\r\n setFieldValue,\r\n projectDashboardId,\r\n projectDashboardCheetahJobCurves,\r\n ]);\r\n\r\n const initialState = useMemo(\r\n () => ({\r\n selectedRowIds: getInitialSelectedProjectDashboardCurveRowIds(\r\n projectDashboardCheetahJobCurves,\r\n ),\r\n }),\r\n [projectDashboardCheetahJobCurves],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n Data Sensors ({projectDashboardCheetahJobCurves.size})\r\n \r\n \r\n Select up to eight sensors:\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProjectDashboardCheetahJobCurvesTableContainer;\r\n","import { Map, List } from 'immutable';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\nimport { getSummarizedDataState } from 'altus-datastate';\r\n\r\nimport mappers from 'mappers';\r\nimport projectDashboardService from 'services/projectDashboard.service';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nconst useProjectDashboardSimulation = (\r\n projectId,\r\n projectDashboardId,\r\n simulationId,\r\n) => {\r\n const getProjectDashboardSimulationCurves = useCallback(() => {\r\n if (!simulationId) return;\r\n\r\n return projectDashboardService\r\n .getProjectDashboardCurvesBySource(\r\n projectId,\r\n projectDashboardId,\r\n CheetahJobSource.SIMULATION,\r\n )\r\n .then((curves) => List(curves).map(Map));\r\n }, [projectId, simulationId, projectDashboardId]);\r\n\r\n const getProjectDashboardSimulations = useCallback(\r\n () =>\r\n projectDashboardService\r\n .getProjectDashboardSimulations(projectId, projectDashboardId)\r\n .then((simulations) => List(simulations).map(mappers.Simulation.from)),\r\n [projectId, projectDashboardId],\r\n );\r\n\r\n const [\r\n projectDashboardSimulationCurves,\r\n getProjectDashboardSimulationCurvesDataState,\r\n ] = useRequest(getProjectDashboardSimulationCurves);\r\n\r\n const [simulations, getProjectDashboardSimulationsDataState] = useRequest(\r\n getProjectDashboardSimulations,\r\n );\r\n\r\n const dataState = useMemo(\r\n () =>\r\n getSummarizedDataState([\r\n getProjectDashboardSimulationsDataState,\r\n getProjectDashboardSimulationCurvesDataState,\r\n ]),\r\n [\r\n getProjectDashboardSimulationsDataState,\r\n getProjectDashboardSimulationCurvesDataState,\r\n ],\r\n );\r\n\r\n return {\r\n dataState,\r\n simulations,\r\n projectDashboardSimulationCurves,\r\n };\r\n};\r\n\r\nexport default useProjectDashboardSimulation;\r\n","import { Field, useFormikContext } from 'formik';\r\nimport { MenuItem } from '@material-ui/core';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { ProjectDashboardFormFields as FormFields } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nconst ProjectDashboardSimulationSelectField = ({ simulations }) => {\r\n const { values, setFieldValue } = useFormikContext();\r\n\r\n return (\r\n \r\n setFieldValue(FormFields.SIMULATION_ID, event.target.value)\r\n }\r\n component={TextFieldFormik}\r\n value={values?.[FormFields.SIMULATION_ID] ?? EMPTY_STRING}\r\n >\r\n \r\n No simulation\r\n \r\n {simulations.map((simulation) => (\r\n \r\n {simulation.get('name')}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default ProjectDashboardSimulationSelectField;\r\n","import { useEffect, useMemo } from 'react';\r\nimport { getIn, useFormikContext } from 'formik';\r\nimport { Fade, Box, Grid, Typography } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { ProjectDashboardFormFields as FormFields } from 'features/projects/dashboard/dashboard.constants';\r\nimport useProjectDashboardSimulation from 'features/projects/dashboard/hooks/useProjectDashboardSimulation';\r\nimport ProjectDashboardCurvesTable from 'features/projects/dashboard/components/ProjectDashboardCurvesTable';\r\nimport ProjectDashboardSimulationSelectField from 'features/projects/dashboard/components/ProjectDashboardSimulationSelectField';\r\nimport { getInitialSelectedProjectDashboardCurveRowIds } from 'features/projects/dashboard/components/ProjectDashboardCurvesTable';\r\n\r\nconst disabledFormFields = [FormFields.UNIT];\r\n\r\nconst ProjectDashboardSimulationCurvesTableContainer = ({\r\n projectId,\r\n setDataState,\r\n projectDashboardId,\r\n ...rest\r\n}) => {\r\n const { values, setFieldValue } = useFormikContext();\r\n\r\n const selectedSimulationId = getIn(values, FormFields.SIMULATION_ID);\r\n\r\n const {\r\n dataState,\r\n simulations = EMPTY_LIST,\r\n projectDashboardSimulationCurves = EMPTY_LIST,\r\n } = useProjectDashboardSimulation(\r\n projectId,\r\n projectDashboardId,\r\n selectedSimulationId,\r\n );\r\n\r\n useEffect(() => {\r\n setDataState(dataState);\r\n }, [setDataState, dataState]);\r\n\r\n useEffect(() => {\r\n if (!projectDashboardSimulationCurves.size) return;\r\n\r\n setFieldValue(\r\n FormFields.PROJECT_DASHBOARD_SIMULATION_CURVES,\r\n projectDashboardSimulationCurves.toJS(),\r\n );\r\n\r\n return () => {\r\n setFieldValue(\r\n FormFields.PROJECT_DASHBOARD_SIMULATION_CURVES,\r\n EMPTY_LIST.toJS(),\r\n );\r\n };\r\n }, [setFieldValue, projectDashboardSimulationCurves]);\r\n\r\n const initialState = useMemo(\r\n () => ({\r\n selectedRowIds: getInitialSelectedProjectDashboardCurveRowIds(\r\n projectDashboardSimulationCurves,\r\n ),\r\n }),\r\n [projectDashboardSimulationCurves],\r\n );\r\n\r\n return (\r\n \r\n \r\n Simulation\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProjectDashboardSimulationCurvesTableContainer;\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Field, Formik, useFormikContext, getIn } from 'formik';\r\nimport { Fragment, useCallback, useEffect, useMemo, useState } from 'react';\r\n\r\nimport {\r\n Box,\r\n Grid,\r\n Dialog,\r\n Button,\r\n Switch,\r\n Divider,\r\n ListItem,\r\n MenuItem,\r\n Typography,\r\n ListItemText,\r\n DialogContent,\r\n List as MuiList,\r\n ListItemSecondaryAction,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n BasePage,\r\n ModalHeader,\r\n ModalActions,\r\n BasePageTitle,\r\n LoadingButton,\r\n LoadingOverlay,\r\n} from 'altus-ui-components';\r\n\r\nimport { NotRequestedDataState, getSummarizedDataState } from 'altus-datastate';\r\n\r\nimport {\r\n CheetahJobSource,\r\n ProjectDashboardFormFields as FormFields,\r\n} from 'features/projects/dashboard/dashboard.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport { cheetahJobSourceToString } from 'mappers';\r\nimport { toProjectDashboardV2 } from 'utils/route.util';\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport { EMPTY_MAP, EMPTY_STRING } from 'app/app.constants';\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport useDashboards from 'features/projects/dashboard/hooks/useDashboards';\r\nimport DashboardImage from 'features/projects/dashboard/components/DashboardImage';\r\nimport useProjectDashboard from 'features/projects/dashboard/hooks/useProjectDashboard';\r\nimport useProjectDashboards from 'features/projects/dashboard/hooks/useProjectDashboards';\r\nimport CheetahJobStatusIndicator from 'features/data-exchange/components/CheetahJobStatusIndicator';\r\nimport ProjectDashboardCheetahJobCurvesTableContainer from 'features/projects/dashboard/components/ProjectDashboardCheetahJobCurvesTableContainer';\r\nimport ProjectDashboardSimulationCurvesTableContainer from 'features/projects/dashboard/components/ProjectDashboardSimulationCurvesTableContainer';\r\n\r\nconst NoSelectedProjectDashboard = () => (\r\n \r\n \r\n \r\n \r\n 1. Select relevant Project Dashboards by using on/off switches\r\n \r\n \r\n \r\n 2. Configure each Dashboard:\r\n \r\n \r\n \r\n - Select Data Source\r\n \r\n \r\n - Select Data Sensors\r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst SelectCheetahJobFormSection = ({\r\n source,\r\n cheetahJob,\r\n cheetahJobs,\r\n cheetahJobId,\r\n setFieldValue,\r\n}) => {\r\n const ValidCheetahJobSources = [\r\n CheetahJobSource.CHEETAH,\r\n CheetahJobSource.SM_LOCATION,\r\n CheetahJobSource.WARRIOR,\r\n CheetahJobSource.WITSML,\r\n ];\r\n\r\n const sourceOnChange = useCallback(\r\n (event) => {\r\n setFieldValue(FormFields.SOURCE, event.target.value);\r\n setFieldValue(FormFields.CHEETAH_JOB_ID, undefined);\r\n },\r\n [setFieldValue],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {ValidCheetahJobSources.map((cheetahJobSource) => (\r\n \r\n {cheetahJobSourceToString(cheetahJobSource)}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n {cheetahJobs.valueSeq().map((cheetahJob) => (\r\n \r\n \r\n \r\n \r\n \r\n {cheetahJob.get('displayName')}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst ProjectDashboardFormContainer = ({\r\n projectId,\r\n projectDashboard,\r\n projectDashboardId,\r\n setSelectedCurveRowIds,\r\n setSelectedSimulationCurveRowIds,\r\n}) => {\r\n const [dataState, setDataState] = useState(NotRequestedDataState);\r\n\r\n const { values, setFieldValue } = useFormikContext();\r\n\r\n const isUrlConfigurable = projectDashboard.get('isUrlConfigurable');\r\n\r\n // use setFieldValue instead of initialValues, since that will override the\r\n // FormFields.PROJECT_DASHBOARD_CURVES and FormFields.PROJECT_DASHBOARD_SIMULATION_CURVES fields\r\n useEffect(() => {\r\n if (!projectDashboard) return;\r\n\r\n const url = projectDashboard.get('url');\r\n const source = projectDashboard.get('source');\r\n const cheetahJobId = projectDashboard.get('cheetahJobId');\r\n const simulationId = projectDashboard.get('simulationId');\r\n const projectDashboardId = projectDashboard.get('projectDashboardId');\r\n\r\n setFieldValue(FormFields.URL, url);\r\n setFieldValue(FormFields.SOURCE, source);\r\n setFieldValue(FormFields.SIMULATION_ID, simulationId);\r\n setFieldValue(FormFields.CHEETAH_JOB_ID, cheetahJobId);\r\n setFieldValue(FormFields.PROJECT_DASHBOARD_ID, projectDashboardId);\r\n }, [setFieldValue, projectDashboard]);\r\n\r\n const selectedSource = getIn(values, FormFields.SOURCE);\r\n const selectedCheetahJobId = getIn(values, FormFields.CHEETAH_JOB_ID);\r\n\r\n const filter = useMemo(\r\n () => ({\r\n projectId,\r\n source: selectedSource,\r\n }),\r\n [selectedSource, projectId],\r\n );\r\n\r\n const {\r\n cheetahJobs,\r\n searchCheetahJobs,\r\n dataState: cheetahJobDataState,\r\n } = useCheetahJobs(filter);\r\n\r\n useEffect(() => {\r\n if (isNil(selectedSource)) return;\r\n\r\n searchCheetahJobs({\r\n includeProject: false,\r\n ...filter,\r\n });\r\n }, [filter, selectedSource, searchCheetahJobs]);\r\n\r\n const selectedCheetahJob = selectedCheetahJobId\r\n ? cheetahJobs.get(selectedCheetahJobId.toString())\r\n : null;\r\n\r\n const summarizedDataState = useMemo(\r\n () => getSummarizedDataState([dataState, cheetahJobDataState]),\r\n [dataState, cheetahJobDataState],\r\n );\r\n\r\n const isConfigurable = projectDashboard.get('isConfigurable');\r\n\r\n if (isUrlConfigurable)\r\n return (\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n {!isConfigurable && (\r\n \r\n Dashboard curves are not configurable\r\n \r\n )}\r\n {isConfigurable && (\r\n \r\n )}\r\n {projectDashboard.get('isSimulationConfigurable') && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst FormikFormContainerTitle = ({\r\n projectId,\r\n projectDashboard,\r\n projectDashboardId,\r\n toggleProjectDashboard,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n toggleProjectDashboard(projectDashboard.get('dashboardId'))\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n Open dashboard\r\n \r\n \r\n \r\n);\r\n\r\nconst SelectedProjectDashboardContainer = ({\r\n dataState,\r\n projectId,\r\n toggleModal,\r\n projectDashboardId,\r\n toggleProjectDashboard,\r\n}) => {\r\n const [selectedProjectDashboardCurveRowIds, setSelectedCurveRowIds] =\r\n useState(EMPTY_MAP.toJS());\r\n\r\n const [\r\n selectedProjectDashboardSimulationCurveRowIds,\r\n setSelectedSimulationCurveRowIds,\r\n ] = useState(EMPTY_MAP.toJS());\r\n\r\n const { projectDashboard, updateProjectDashboard } = useProjectDashboard(\r\n projectId,\r\n projectDashboardId,\r\n );\r\n\r\n const onSubmit = useCallback(\r\n (projectDashboard) => {\r\n const curves =\r\n projectDashboard[FormFields.PROJECT_DASHBOARD_CURVES] ?? [];\r\n\r\n const simulationCurves =\r\n projectDashboard[FormFields.PROJECT_DASHBOARD_SIMULATION_CURVES] ?? [];\r\n\r\n const selectedCurves = curves.filter(\r\n (_, index) => !!selectedProjectDashboardCurveRowIds[index.toString()],\r\n );\r\n\r\n const selectedSimulationCurves = simulationCurves.filter(\r\n (_, index) =>\r\n !!selectedProjectDashboardSimulationCurveRowIds[index.toString()],\r\n );\r\n\r\n updateProjectDashboard({\r\n ...projectDashboard,\r\n projectDashboardCurves: [\r\n ...selectedCurves,\r\n ...selectedSimulationCurves,\r\n ],\r\n });\r\n },\r\n [\r\n updateProjectDashboard,\r\n selectedProjectDashboardCurveRowIds,\r\n selectedProjectDashboardSimulationCurveRowIds,\r\n ],\r\n );\r\n\r\n const initialValues = useMemo(() => {\r\n if (!projectDashboard) return undefined;\r\n\r\n return EMPTY_MAP.toJS();\r\n }, [projectDashboard]);\r\n\r\n if (!projectDashboard) return ;\r\n\r\n return (\r\n \r\n {({ isValid, handleSubmit }) => (\r\n <>\r\n \r\n }\r\n >\r\n \r\n
\r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst ProjectDashboardsMenu = ({\r\n classes,\r\n dashboards,\r\n projectDashboards,\r\n toggleProjectDashboard,\r\n toggleProjectDashboards,\r\n selectedProjectDashboard,\r\n setSelectedProjectDashboardId,\r\n clearSelectedProjectDashboardId,\r\n}) => {\r\n const isAllSelected = projectDashboards.size === dashboards.size;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n toggleProjectDashboards(clearSelectedProjectDashboardId)\r\n }\r\n />\r\n \r\n \r\n {dashboards.valueSeq().map((dashboard) => {\r\n const dashboardId = dashboard.get('dashboardId');\r\n\r\n const projectDashboardId = projectDashboards\r\n .mapKeys((_, value) => value.get('dashboardId'))\r\n .getIn([dashboardId, 'projectDashboardId']);\r\n\r\n const isSelected =\r\n selectedProjectDashboard?.get('dashboardId') === dashboardId;\r\n\r\n return (\r\n \r\n setSelectedProjectDashboardId(projectDashboardId)}\r\n classes={{\r\n root: classes.listItemRoot,\r\n selected: classes.listItemSelected,\r\n }}\r\n >\r\n \r\n \r\n \r\n toggleProjectDashboard(\r\n dashboardId,\r\n setSelectedProjectDashboardId,\r\n )\r\n }\r\n />\r\n \r\n \r\n {isSelected && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst ProjectDashboardsModalContainer = ({\r\n isOpen,\r\n classes,\r\n projectId,\r\n toggleModal,\r\n project = EMPTY_MAP,\r\n projectDashboardId: initialProjectDashboardId,\r\n}) => {\r\n const [\r\n selectedProjectDashboardId = EMPTY_STRING,\r\n setSelectedProjectDashboardId,\r\n ] = useState(initialProjectDashboardId);\r\n\r\n const clearSelectedProjectDashboardId = useCallback(\r\n () => setSelectedProjectDashboardId(undefined),\r\n [],\r\n );\r\n\r\n const {\r\n dashboards,\r\n requestDashboards,\r\n dataState: requestDashboardsDataState,\r\n } = useDashboards();\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n requestDashboards();\r\n }\r\n }, [isOpen, requestDashboards]);\r\n\r\n const {\r\n toggleProjectDashboard,\r\n toggleProjectDashboards,\r\n projectDashboards = EMPTY_MAP,\r\n toggleProjectDashboardDataState,\r\n updateProjectDashboardDataState,\r\n toggleProjectDashboardsDataState,\r\n } = useProjectDashboards(projectId);\r\n\r\n const { projectDashboard: selectedProjectDashboard } = useProjectDashboard(\r\n projectId,\r\n selectedProjectDashboardId,\r\n );\r\n\r\n useEffect(() => {\r\n // reset selectedProjectDashboardId if selectedProjectDashboard does not exist\r\n if (!selectedProjectDashboard) {\r\n clearSelectedProjectDashboardId();\r\n }\r\n }, [selectedProjectDashboard, clearSelectedProjectDashboardId]);\r\n\r\n const summarizedDataState = getSummarizedDataState([\r\n requestDashboardsDataState,\r\n toggleProjectDashboardDataState,\r\n toggleProjectDashboardsDataState,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n dialogContentRoot: {\r\n padding: 0,\r\n display: 'flex',\r\n },\r\n dialogPaperScrollPaper: {\r\n height: '75vh',\r\n },\r\n listItemRoot: {\r\n '&$listItemSelected': {\r\n background: theme.palette.action.hover,\r\n },\r\n '&$listItemSelected:hover': {\r\n background: theme.palette.action.hover,\r\n },\r\n },\r\n listItemSelected: {\r\n borderLeft: `3px solid ${theme.palette.primary.main}`,\r\n },\r\n dashboardImageRoot: {\r\n objectFit: 'cover',\r\n position: 'absolute',\r\n },\r\n dashboardImageContainer: {\r\n position: 'relative',\r\n paddingBottom: '56.25%', // 16:9 ratio\r\n },\r\n dashboardImageListItem: {\r\n padding: 0,\r\n },\r\n dashboardsListContainer: {\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectDashboardsModalContainer);\r\n","import CloseIcon from '@material-ui/icons/Close';\r\nimport Settings from '@material-ui/icons/Settings';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, Grid, Drawer, IconButton, Typography } from '@material-ui/core';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport ProjectDashboardsList from 'features/projects/dashboard/components/ProjectDashboardsList';\r\nimport ProjectDashboardsModalContainer from 'features/projects/dashboard/components/ProjectDashboardsModal';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport { SystemPermission } from 'app/app.constants';\r\n\r\nconst ProjectDashboardsDrawer = ({\r\n isOpen,\r\n classes,\r\n project,\r\n projectId,\r\n toggleDrawer,\r\n projectDashboardId,\r\n taskId = 0,\r\n}) => {\r\n const title = project?.get('title');\r\n const wellboreName = project?.get('wellboreName');\r\n const facilityName = project?.get('facilityName');\r\n\r\n const [isModalOpen, toggleModal] = useToggle();\r\n\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${facilityName} - ${wellboreName}`}\r\n \r\n \r\n
\r\n \r\n \r\n {`${projectId}. - ${title}`}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {userPermissions.includes(\r\n SystemPermission.DASHBOARD_CONFIGURATION_ACCESS,\r\n ) && (\r\n \r\n \r\n Dashboard Configuration\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '15%',\r\n minWidth: 300,\r\n padding: `${theme.spacing(1)}px ${theme.spacing(2)}px`,\r\n },\r\n configurationLink: {\r\n cursor: 'pointer',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectDashboardsDrawer);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Link } from 'react-router-dom';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, IconButton, Typography, LinearProgress } from '@material-ui/core';\r\nimport UnarchiveIcon from '@material-ui/icons/Unarchive';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { TableRow, UserAvatar } from 'altus-ui-components';\r\n\r\nimport {\r\n formatDate,\r\n formatDuration,\r\n formatEstimatedDate,\r\n formatSource,\r\n} from 'utils/format.util';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { Grid } from 'app/components/withTooltip';\r\nimport { toProjectDetails } from 'utils/route.util';\r\nimport { durationFromStartAndEndTime } from 'utils/app.util';\r\nimport DashboardIcon from 'app/components/Icons/DashboardIcon';\r\nimport { Format, PROJECT_STATUS as ProjectStatus } from 'app/app.constants';\r\nimport ProjectTaskServiceChips from 'app/components/ProjectTaskServiceChips';\r\nimport ProjectTableRowDetail from 'features/projects/components/ProjectTableRowDetail';\r\nimport ProjectMapMarker from 'features/projects/components/WellMapLocations/ProjectMapMarker';\r\nimport ProjectDashboardsDrawer from 'features/projects/dashboard/components/ProjectDashboardsDrawer';\r\n\r\nconst ProjectTableRow = ({\r\n classes,\r\n item: project,\r\n displayLocationMarker,\r\n zoomInAndOutByProjectId,\r\n isArchiveProject = false,\r\n setArchiveProjects,\r\n ...rest\r\n}) => {\r\n const title = project.get('title');\r\n const projectId = project.get('id') || project.get('projectId');\r\n const status = project.get('status');\r\n const endTime = project.get('endTime');\r\n const progress = project.get('progress');\r\n const startTime = project.get('startTime');\r\n const source = project.get('source');\r\n const taskServices = project.get('taskServices');\r\n const initialOwner = project.get('owners').first();\r\n const [isOpen, toggleDrawer] = useToggle();\r\n\r\n const isExecuteOrReport = status > ProjectStatus.PLAN;\r\n\r\n const tableRowClasses = useMemo(\r\n () => ({\r\n root: classes.tableRowRoot,\r\n rootBackground: classes.tableRowRootBackground,\r\n }),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {displayLocationMarker && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {project.get('projectNumber')}\r\n \r\n \r\n \r\n \r\n \r\n {title || No objective set...}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!taskServices.size && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {\r\n {\r\n [ProjectStatus.PLAN]: (\r\n \r\n ),\r\n [ProjectStatus.EXECUTE]: (\r\n \r\n ),\r\n [ProjectStatus.REPORT]: (\r\n \r\n ),\r\n }[status]\r\n }\r\n {isExecuteOrReport && (\r\n (\r\n \r\n )}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isExecuteOrReport && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {isArchiveProject ? (\r\n \r\n setArchiveProjects(projectId, false)}\r\n style={{ cursor: 'pointer' }}\r\n />\r\n \r\n ) : (\r\n initialOwner && (\r\n \r\n )\r\n )}\r\n \r\n \r\n \r\n {status === ProjectStatus.EXECUTE && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableRowRoot: {\r\n height: 'auto',\r\n maxHeight: 'none',\r\n },\r\n tableRowRootBackground: {\r\n position: 'relative',\r\n padding: `${theme.spacing(1.25)}px ${theme.spacing(1.5)}px`,\r\n },\r\n metaRow: {\r\n display: 'inline-grid',\r\n },\r\n linearProgres: {\r\n height: '2px',\r\n position: 'absolute',\r\n width: '100%',\r\n bottom: 1,\r\n left: 0,\r\n },\r\n projectDetails: {\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectTableRow);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Link } from 'react-router-dom';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Typography, LinearProgress } from '@material-ui/core';\r\nimport { TableRow } from 'altus-ui-components';\r\nimport { Grid } from 'app/components/withTooltip';\r\nimport { toProjectDetails } from 'utils/route.util';\r\nimport { PROJECT_STATUS as ProjectStatus } from 'app/app.constants';\r\n\r\nconst ProjectsTableRowMobileView = ({\r\n classes,\r\n item: project,\r\n toggleProjectsList,\r\n displayLocationMarker,\r\n zoomInAndOutByProjectId,\r\n setArchiveProjects,\r\n ...rest\r\n}) => {\r\n const title = project.get('title');\r\n const projectId = project.get('id');\r\n const status = project.get('status');\r\n const progress = project.get('progress');\r\n\r\n const tableRowClasses = useMemo(\r\n () => ({\r\n root: classes.tableRowRoot,\r\n rootBackground: classes.tableRowRootBackground,\r\n }),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n toggleProjectsList ? toggleProjectsList(false) : null\r\n }\r\n to={toProjectDetails(projectId)}\r\n >\r\n \r\n \r\n \r\n {`${\r\n project.get('projectNumber')\r\n ? project.get('projectNumber')\r\n : ''\r\n } ${title || No objective set...}`}\r\n \r\n \r\n \r\n \r\n {`${project.get('fieldName')} • ${project.get(\r\n 'wellboreName',\r\n )}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {status === ProjectStatus.EXECUTE && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableRowRoot: {\r\n height: 'auto',\r\n maxHeight: 'none',\r\n minHeight: '5.2rem',\r\n },\r\n tableRowRootBackground: {\r\n position: 'relative',\r\n padding: `${theme.spacing(1.25)}px ${theme.spacing(1.5)}px`,\r\n },\r\n metaRow: {\r\n display: 'inline-grid',\r\n },\r\n linearProgres: {\r\n height: '2px',\r\n position: 'absolute',\r\n width: '100%',\r\n bottom: 1,\r\n left: 0,\r\n },\r\n projectDetails: {\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectsTableRowMobileView);\r\n","import { useCallback, useMemo, React } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport ProjectTableRow from 'features/projects/components/ProjectTableRow';\r\nimport ProjectsTableRowMobileView from 'features/mobile/projects/ProjectsTableRowMobileView';\r\n\r\nconst ProjectsTable = ({\r\n title,\r\n classes,\r\n projects,\r\n displayLocationMarkers = true,\r\n zoomInAndOutByProjectId,\r\n isArchiveProject,\r\n setArchiveProjects,\r\n isMobileAppView = false,\r\n toggleProjectsList,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 12,\r\n id: 'title',\r\n Header: (\r\n \r\n {title}\r\n \r\n ),\r\n },\r\n ],\r\n [title, classes, isMobileAppView],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => {\r\n return isMobileAppView ? (\r\n \r\n ) : (\r\n \r\n );\r\n },\r\n [\r\n setArchiveProjects,\r\n displayLocationMarkers,\r\n isArchiveProject,\r\n zoomInAndOutByProjectId,\r\n isMobileAppView,\r\n toggleProjectsList,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n fontSize: '1.125rem',\r\n },\r\n mobileAppTitle: {\r\n color: theme.mobile.NavBar.children.selected,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectsTable);\r\n","import { useMemo } from 'react';\r\nimport { Box, Grid } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport ProjectsTable from 'features/projects/components/ProjectsTable';\r\nimport { projectStatusToString } from 'features/projects/projects.mappers';\r\n\r\nconst ProjectsByStatus = ({\r\n projects = EMPTY_LIST,\r\n zoomInAndOutByProjectId,\r\n isArchiveProject,\r\n setArchiveProjects,\r\n isMobileAppView = false,\r\n toggleProjectsList,\r\n}) => {\r\n const projectsByStatus = useMemo(\r\n () =>\r\n projects\r\n .groupBy((project) => project.get('status'))\r\n .sortBy((_, status) => status),\r\n [projects],\r\n );\r\n\r\n return projectsByStatus.keySeq().map((status) => {\r\n const title = projectStatusToString(status);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n};\r\n\r\nexport default ProjectsByStatus;\r\n","import { EMPTY_MAP } from 'app/app.constants';\r\nimport GoogleMap from 'app/components/GoogleMap';\r\nimport ProjectMapMarker from 'features/projects/components/WellMapLocations/ProjectMapMarker';\r\n\r\nconst ProjectMapLocations = ({\r\n center,\r\n projects = EMPTY_MAP,\r\n isHovered,\r\n currentProjectId,\r\n}) => {\r\n return (\r\n \r\n {projects.valueSeq().map((project) => {\r\n const projectId = project.get('id');\r\n const location = project.get('location');\r\n\r\n if (!location) return null;\r\n\r\n const nortSouth =\r\n location.get('northSouth') ?? location.get('locationNorthSouth');\r\n const eastWest =\r\n location.get('eastWest') ?? location.get('locationEastWest');\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default ProjectMapLocations;\r\n","import 'layout/highcharts.styles.css';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst highchartsTheme = {\r\n chart: {\r\n plotBorderColor: theme.palette.grey[700],\r\n backgroundColor: theme.altus.background.dashboard,\r\n style: {\r\n color: theme.palette.text.primary,\r\n fontFamily: theme.typography.fontFamily,\r\n },\r\n },\r\n noData: {\r\n style: {\r\n ...theme.typography.body2,\r\n color: theme.palette.text.primary,\r\n },\r\n },\r\n title: {\r\n style: {\r\n color: theme.palette.grey[700],\r\n textTransform: 'uppercase',\r\n fontSize: '20px',\r\n },\r\n },\r\n subtitle: {\r\n style: {\r\n color: theme.palette.grey[700],\r\n textTransform: 'uppercase',\r\n },\r\n },\r\n xAxis: {\r\n title: {\r\n style: {\r\n color: theme.palette.grey[100],\r\n },\r\n },\r\n },\r\n yAxis: {\r\n title: {\r\n style: {\r\n color: theme.palette.grey[100],\r\n },\r\n },\r\n },\r\n tooltip: {\r\n animation: false,\r\n backgroundColor: alpha(theme.palette.common.black, 0.85),\r\n style: {\r\n color: theme.palette.grey[100],\r\n },\r\n },\r\n plotOptions: {\r\n series: {\r\n dataLabels: {\r\n color: theme.palette.grey[100],\r\n style: {\r\n fontSize: '13px',\r\n },\r\n },\r\n marker: {\r\n lineColor: theme.palette.grey[900],\r\n },\r\n },\r\n boxplot: {\r\n fillColor: theme.palette.grey[700],\r\n },\r\n candlestick: {\r\n lineColor: theme.palette.common.white,\r\n },\r\n errorbar: {\r\n color: theme.palette.common.white,\r\n },\r\n },\r\n legend: {\r\n backgroundColor: alpha(theme.palette.common.black, 0.5),\r\n itemStyle: {\r\n color: theme.palette.grey[300],\r\n },\r\n itemHoverStyle: {\r\n color: theme.palette.common.white,\r\n },\r\n itemHiddenStyle: {\r\n color: theme.palette.grey[700],\r\n },\r\n title: {\r\n style: {\r\n color: theme.palette.grey[400],\r\n },\r\n },\r\n },\r\n credits: {\r\n enabled: false,\r\n },\r\n labels: {\r\n style: {\r\n color: theme.palette.grey[600],\r\n },\r\n },\r\n drilldown: {\r\n activeAxisLabelStyle: {\r\n color: theme.palette.grey[100],\r\n },\r\n activeDataLabelStyle: {\r\n color: theme.palette.grey[100],\r\n },\r\n },\r\n navigation: {\r\n buttonOptions: {\r\n symbolStroke: theme.palette.grey[300],\r\n theme: {\r\n fill: theme.palette.grey[700],\r\n },\r\n },\r\n },\r\n exporting: {\r\n enabled: false,\r\n },\r\n scrollbar: {\r\n barBackgroundColor: theme.palette.grey[600],\r\n barBorderColor: 'transparent',\r\n barBorderRadius: 1,\r\n buttonArrowColor: 'transparent',\r\n buttonBackgroundColor: 'transparent',\r\n buttonBorderWidth: 0,\r\n enabled: true,\r\n height: 10,\r\n trackBackgroundColor: theme.palette.grey[800],\r\n trackBorderColor: 'transparent',\r\n trackBorderWidth: 0,\r\n },\r\n};\r\n\r\nexport default highchartsTheme;\r\n","import themes, { defaultThemeType } from 'layout/themes';\r\nimport { formatValue } from 'utils/format.util';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst fontColor = theme.palette.common.white;\r\nconst backgroundColor = theme.altus.background.dashboard;\r\nconst defaultFontSize = theme.typography.subtitle1.fontSize;\r\nconst subFontSize = theme.typography.subtitle2.fontSize;\r\nconst capFontSize = theme.typography.caption.fontSize;\r\n\r\nconst dashboardHighchartsTheme = {\r\n boost: {\r\n enabled: true,\r\n seriesThreshold: 1,\r\n },\r\n chart: {\r\n animation: false,\r\n fontSize: defaultFontSize,\r\n style: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n legend: {\r\n itemStyle: {\r\n color: fontColor,\r\n fontSize: subFontSize,\r\n },\r\n itemHoverStyle: {\r\n color: theme.palette.secondary.mainLight,\r\n },\r\n align: 'left',\r\n verticalAlign: 'top',\r\n borderRadius: 10,\r\n backgroundColor: theme.palette.secondary.darkGrey,\r\n layout: 'horizontal',\r\n borderWidth: 0,\r\n enabled: true,\r\n symbolHeight: 15,\r\n symbolWidth: 15,\r\n symbolRadius: 0,\r\n useHTML: true,\r\n labelFormatter: function () {\r\n const { name, unit } = this.options;\r\n return `${name} ${unit ? `(${unit})` : ''}`;\r\n },\r\n y: -10, // Negative y moves it up, positive y moves it down.\r\n },\r\n plotOptions: {\r\n line: {\r\n keys: ['x', 'depth', 'y'],\r\n },\r\n gauge: {\r\n keys: ['timestamp', 'depth', 'y'],\r\n },\r\n },\r\n title: {\r\n text: null,\r\n },\r\n tooltip: {\r\n animation: false,\r\n valueDecimals: 2,\r\n backgroundColor: theme.palette.secondary.darkGrey,\r\n borderColor: theme.palette.secondary.darkGrey,\r\n borderRadius: 20,\r\n borderWidth: 1,\r\n shared: true,\r\n split: false,\r\n style: {\r\n fontSize: defaultFontSize,\r\n },\r\n positioner: function () {\r\n return { x: 10, y: 50 };\r\n },\r\n headerFormat: `{point.x:%A, %B %d, %H:%M:%S}
`,\r\n pointFormatter: function () {\r\n const { series, y: value } = this;\r\n const { name, color, options } = series;\r\n const { unit } = options;\r\n\r\n const formattedValue = unit\r\n ? formatValue(value, unit)\r\n : formatValue(value);\r\n\r\n const pointFormat = `
\r\n ${name}: ${formattedValue}\r\n
`;\r\n\r\n return `${pointFormat}
`;\r\n },\r\n useHTML: true,\r\n },\r\n subtitle: {\r\n text: null,\r\n },\r\n yAxis: {\r\n crosshair: true,\r\n },\r\n xAxis: {\r\n crosshair: true,\r\n },\r\n // NB! It is not an official Highcharts option, but added here for easy access.\r\n style: {\r\n fontColor,\r\n backgroundColor,\r\n defaultFontSize,\r\n subFontSize,\r\n capFontSize,\r\n },\r\n};\r\n\r\nexport default dashboardHighchartsTheme;\r\n","import Highcharts from 'highcharts';\r\nimport { isMobileOnly } from 'react-device-detect';\r\n\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nimport dashboardHighchartsTheme from 'features/projects/dashboard/components/dashboards/winch/dashboard.highcharts.theme';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst { fontColor, defaultFontSize, capFontSize } =\r\n dashboardHighchartsTheme.style;\r\n\r\nconst winchHighchartsTheme = {\r\n chart: {\r\n panning: {\r\n enabled: true,\r\n type: 'xy',\r\n },\r\n spacingRight: -20,\r\n panKey: 'alt',\r\n zoomType: 'y',\r\n pinchType: 'y',\r\n resetZoomButton: {\r\n position: {\r\n align: 'left',\r\n verticalAlign: 'bottom',\r\n x: 5,\r\n y: -100,\r\n },\r\n },\r\n alignTicks: !isMobileOnly,\r\n spacingBottom: 2,\r\n overflow: 'hidden',\r\n },\r\n navigator: {\r\n enabled: true,\r\n margin: 2,\r\n xAxis: {\r\n labels: {\r\n align: 'left',\r\n style: {\r\n color: fontColor,\r\n fontWeight: 'normal',\r\n },\r\n x: 3,\r\n y: -4,\r\n },\r\n },\r\n series: {\r\n type: 'line',\r\n fillOpacity: 0.05,\r\n dataGrouping: {\r\n smoothed: true,\r\n },\r\n lineWidth: 1,\r\n marker: {\r\n enabled: false,\r\n },\r\n },\r\n handles: {\r\n enabled: false,\r\n },\r\n },\r\n navigation: {\r\n buttonOptions: {\r\n enabled: true,\r\n align: 'left',\r\n },\r\n },\r\n plotOptions: {\r\n gauge: {\r\n dataLabels: {\r\n allowOverlap: true,\r\n animation: false,\r\n padding: 10,\r\n shadow: true,\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n zIndex: 10,\r\n borderRadius: 5,\r\n backgroundColor: theme.palette.secondary.dark,\r\n borderColor: theme.palette.secondary.main,\r\n y: -18,\r\n formatter: function () {\r\n const { unit } = this.series.options;\r\n const yValue = this.y,\r\n formatted = Highcharts.numberFormat(yValue, 2);\r\n return `
${formatted} ${unit}
`;\r\n },\r\n },\r\n dial: {\r\n radius: '100%',\r\n borderWidth: 2,\r\n baseWidth: 20,\r\n baseLength: '0%', // of radius\r\n rearLength: '5%',\r\n },\r\n },\r\n series: {\r\n showInNavigator: true,\r\n animation: false,\r\n boostThreshold: 1,\r\n turboThreshold: 1,\r\n requireSorting: false,\r\n lineWidth: 1,\r\n symbol: 'square',\r\n allowPointSelect: true,\r\n marker: {\r\n enabled: true,\r\n symbol: 'square',\r\n // https://api.highcharts.com/highcharts/series.line.marker.radius\r\n radius: 0, // Make the legend , series and tool tip icons bigger.\r\n //https://api.highcharts.com/highcharts/series.line.marker.enabledThreshold\r\n enabledThreshold: 5,\r\n lineColor: null,\r\n states: {\r\n hover: {\r\n radius: 6,\r\n },\r\n },\r\n },\r\n events: {\r\n hide: function () {\r\n this.yAxis.update({\r\n visible: false,\r\n });\r\n },\r\n show: function () {\r\n this.yAxis.update({\r\n visible: true,\r\n });\r\n },\r\n },\r\n },\r\n },\r\n title: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n time: {\r\n useUTC: false,\r\n },\r\n rangeSelector: {\r\n floating: true,\r\n inputEnabled: false,\r\n buttonPosition: {\r\n align: 'left',\r\n x: 0,\r\n y: -100, // Negative y moves it up, positive y moves it down.\r\n },\r\n verticalAlign: 'bottom',\r\n labelStyle: {\r\n color: fontColor,\r\n fontSize: capFontSize,\r\n },\r\n },\r\n xAxis: {\r\n reversed: false,\r\n minRange: 36000,\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontWeight: 'normal',\r\n fontSize: capFontSize,\r\n },\r\n },\r\n tickWidth: 2,\r\n },\r\n};\r\n\r\nexport default Highcharts.merge(\r\n false,\r\n dashboardHighchartsTheme,\r\n winchHighchartsTheme,\r\n);\r\n","import { useHistory } from 'react-router-dom';\r\nimport { useRef, useState, useCallback, useEffect } from 'react';\r\n\r\nimport { Box, Grid } from '@material-ui/core';\r\n\r\nimport moment from 'moment';\r\nimport Highcharts from 'highcharts';\r\nimport gantt from 'highcharts/highcharts-gantt';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport { PROJECT_STATUS } from 'app/app.constants';\r\nimport { toProjectDetails } from 'utils/route.util';\r\nimport highchartsTheme from 'layout/highcharts.theme';\r\nimport winchHighchartsTheme from 'features/projects/dashboard/components/dashboards/winch/winch.highcharts.theme';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst { fontColor, defaultFontSize } = winchHighchartsTheme.style;\r\n\r\nconst ProjectsGanttChart = ({ projects }) => {\r\n const chartComponent = useRef(null);\r\n const history = useHistory();\r\n const baseDate = moment();\r\n const theme = useTheme();\r\n const oneWeekBefore = baseDate\r\n .clone()\r\n .subtract(1, 'weeks')\r\n .startOf('isoWeek')\r\n .toDate()\r\n .getTime();\r\n const fiveWeeksAfter = baseDate\r\n .clone()\r\n .add(5, 'weeks')\r\n .endOf('isoWeek')\r\n .toDate()\r\n .getTime();\r\n\r\n const formatDateTime = (date) => {\r\n const [year, month, day] = date;\r\n return moment({ year, month: month - 1, day })\r\n .toDate()\r\n .getTime();\r\n };\r\n\r\n useEffect(() => {\r\n if (chartComponent?.current && projects?.size) {\r\n const chart = chartComponent?.current?.chart;\r\n if (chart?.xAxis) {\r\n chart.xAxis[0]?.setExtremes(oneWeekBefore, fiveWeeksAfter);\r\n }\r\n }\r\n }, [fiveWeeksAfter, oneWeekBefore, projects]);\r\n\r\n const createSeries = useCallback(\r\n (projects) => {\r\n const chart = chartComponent.current.chart;\r\n\r\n if (chart?.series) {\r\n for (let i = chart.series.length - 1; i >= 0; i--) {\r\n chart.series[i].remove(false);\r\n }\r\n }\r\n\r\n const dataTest = projects.map((field) => {\r\n let fieldParent = {\r\n name: undefined,\r\n id: undefined,\r\n };\r\n\r\n const seriesData = field.map((project) => {\r\n fieldParent.name = project.get('fieldName');\r\n fieldParent.id = project.get('externalFieldId').toString();\r\n\r\n const projectToAdd = {\r\n name: project.get('projectNumber'),\r\n id: project.get('id').toString(),\r\n start: project.get('startTime')\r\n ? moment(project.get('startTime'))?.toDate().getTime()\r\n : formatDateTime(project.get('estimatedStart')),\r\n end: project.get('endTime')\r\n ? moment(project.get('endTime'))?.toDate().getTime()\r\n : formatDateTime(project.get('estimatedEnd')),\r\n parent: project.get('externalFieldId').toString(),\r\n projectId: project.get('projectId').toString(),\r\n projectNumber: project.get('projectNumber'),\r\n wellboreName: project.get('wellboreName'),\r\n color:\r\n project.get('status') === PROJECT_STATUS.PLAN\r\n ? theme.altus.components.GanttChart.status.plan\r\n : theme.altus.components.GanttChart.status.rest,\r\n };\r\n return projectToAdd;\r\n });\r\n\r\n const dataArray = Array.from(seriesData.values());\r\n dataArray.splice(0, 0, fieldParent);\r\n\r\n const serie = {\r\n name: fieldParent.name,\r\n data: dataArray,\r\n };\r\n\r\n return serie;\r\n });\r\n\r\n dataTest.map((serie) => {\r\n return chart.addSeries(serie, false);\r\n });\r\n\r\n chart.redraw();\r\n chart.reflow();\r\n },\r\n [theme],\r\n );\r\n\r\n useEffect(() => {\r\n if (projects.size) createSeries(projects);\r\n }, [projects, createSeries]);\r\n\r\n const [chartOptions] = useState(\r\n Highcharts.merge(false, highchartsTheme, {\r\n yAxis: {\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n },\r\n rangeSelector: {\r\n inputEnabled: true,\r\n enabled: true,\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n buttons: [\r\n {\r\n type: 'week',\r\n count: 1,\r\n text: '1w',\r\n title: 'View 1 week',\r\n },\r\n {\r\n type: 'month',\r\n count: 1,\r\n text: '1m',\r\n title: 'View 1 month',\r\n },\r\n {\r\n type: 'month',\r\n count: 3,\r\n text: '3m',\r\n title: 'View 3 months',\r\n },\r\n {\r\n type: 'month',\r\n count: 6,\r\n text: '6m',\r\n title: 'View 6 months',\r\n },\r\n {\r\n type: 'ytd',\r\n text: 'YTD',\r\n title: 'View year to date',\r\n },\r\n {\r\n type: 'year',\r\n count: 1,\r\n text: '1y',\r\n title: 'View 1 year',\r\n },\r\n {\r\n type: 'all',\r\n text: 'All',\r\n title: 'View all',\r\n },\r\n ],\r\n },\r\n scrollbar: {\r\n enabled: true,\r\n },\r\n navigator: {\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n enabled: true,\r\n liveRedraw: true,\r\n series: {\r\n type: 'gantt',\r\n pointPlacement: 0.5,\r\n pointPadding: 0.25,\r\n accessibility: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n xAxis: {\r\n plotBands: {\r\n color: fontColor,\r\n },\r\n showEmpty: false,\r\n tickColor: fontColor,\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n },\r\n accessibility: {\r\n keyboardNavigation: {\r\n seriesNavigation: {\r\n mode: 'serialize',\r\n },\r\n },\r\n },\r\n plotOptions: {\r\n series: {\r\n dataLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n if (this.point.projectId && this.point.projectNumber) {\r\n if (this.point.projectId === this.point.projectNumber) {\r\n return `${this.point.projectId} - ${this.point.wellboreName}`;\r\n } else {\r\n return `${this.point.projectId} - ${this.point.projectNumber} - ${this.point.wellboreName}`;\r\n }\r\n } else {\r\n return `${this.point.name}`;\r\n }\r\n },\r\n },\r\n point: {\r\n events: {\r\n click: function (e) {\r\n if (e.point.projectId && e.point.projectNumber)\r\n history.push(toProjectDetails(e.point.id));\r\n },\r\n },\r\n },\r\n },\r\n },\r\n }),\r\n );\r\n\r\n return projects?.size ? (\r\n \r\n ) : (\r\n \r\n No projects available\r\n \r\n );\r\n};\r\n\r\nexport default ProjectsGanttChart;\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { memo } from 'react';\r\nimport React from 'react';\r\nimport { ReceivedDataState, DataState } from 'altus-datastate';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { CircularProgress } from '@material-ui/core';\r\nimport { Grid } from '@material-ui/core';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport ProjectsGanttChart from 'features/projects/projectsGanttChart/ProjectsGanttChart';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nconst ProjectsGanttChartContainer = ({ projects, dataState }) => {\r\n ProjectsGanttChartContainer.defaultProps = {\r\n dataState: ReceivedDataState,\r\n };\r\n\r\n ProjectsGanttChartContainer.propTypes = {\r\n children: PropTypes.node,\r\n dataState: PropTypes.instanceOf(DataState),\r\n };\r\n\r\n const projectsGroupedByField = projects\r\n .filter((project) => {\r\n const [startYear, startMonth, startDay] = project.get('estimatedStart');\r\n const [endYear, endMonth, endDay] = project.get('estimatedEnd');\r\n\r\n if (\r\n !startYear ||\r\n !startMonth ||\r\n !startDay ||\r\n !endYear ||\r\n !endMonth ||\r\n !endDay\r\n ) {\r\n return null;\r\n } else {\r\n return project;\r\n }\r\n })\r\n .groupBy((project) => project.get('externalFieldId'));\r\n\r\n const categories = Object.keys(projectsGroupedByField.toJS()).map(\r\n (fieldId) => {\r\n return projects\r\n .find(\r\n (project) => project.get('externalFieldId').toString() === fieldId,\r\n )\r\n .get('fieldName');\r\n },\r\n );\r\n\r\n return dataState?.isLoading() ? (\r\n \r\n \r\n \r\n \r\n Loading...\r\n \r\n \r\n \r\n ) : (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n PROJECTS_ACTIONS.RECEIVE_GANTT_PROJECTS,\r\n PROJECTS_ACTIONS.GANTT_PROJECTS,\r\n ),\r\n })),\r\n memo,\r\n)(ProjectsGanttChartContainer);\r\n","import { compose } from 'redux';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useEffect, memo, useCallback, useState } from 'react';\r\nimport { useLocation, useHistory } from 'react-router-dom';\r\nimport { useMemo } from 'react';\r\n\r\nimport {\r\n getProjectsFromState,\r\n getFacilitiesFromState,\r\n getDepartmentsFromState,\r\n getProjectStatusesFromState,\r\n getGanttProjectsFromState,\r\n} from 'features/projects/projects.selectors';\r\n\r\nimport {\r\n archiveProject,\r\n getAllProjectsGantt,\r\n onLoad,\r\n onUnload,\r\n updateFilter,\r\n} from 'features/projects/projects.actions';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentClientOrganizationIdFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n PROJECT_VIEWS,\r\n PROJECTS_ACTIONS,\r\n} from 'features/projects/projects.constants';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport ProjectFilter from 'features/projects/components/ProjectFilter';\r\nimport ArchiveProjectFilter from 'features/projects/components/ArchiveProjectFilter';\r\nimport { getFieldsFromState } from 'features/wells/wellbore.selectors';\r\nimport ProjectsByStatus from 'features/projects/components/ProjectsByStatus';\r\nimport { EUROPE_MAP_CENTER_COORDS, PROJECT_STATUS } from 'app/app.constants';\r\nimport ProjectMapLocations from 'features/projects/components/WellMapLocations/ProjectMapLocations';\r\nimport ProjectsGanttChartContainer from 'features/projects/projectsGanttChart/ProjectsGanttChartContainer';\r\nimport { Filters } from 'features/projects/components/ProjectFilter';\r\n\r\nconst allStatuses = [\r\n PROJECT_STATUS.PLAN,\r\n PROJECT_STATUS.REPORT,\r\n PROJECT_STATUS.EXECUTE,\r\n];\r\n\r\nconst ProjectsContainer = ({\r\n classes,\r\n dataState,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchUpdateFilter,\r\n dispatchArchiveProject,\r\n dispatchLoadGanttProject,\r\n}) => {\r\n const location = useLocation();\r\n const history = useHistory();\r\n const isArchive = location?.state?.isArchive;\r\n const [isArchiveProject, setIsArchiveProject] = useState(isArchive ?? false);\r\n\r\n useHeader({\r\n subTitle: isArchiveProject ? 'Archived Projects' : breadcrumb,\r\n });\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(currentClientOrganizationId);\r\n\r\n if (isArchive) {\r\n history.replace({ pathname: '/projects', state: { isArchive: null } });\r\n }\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n currentClientOrganizationId,\r\n history,\r\n isArchive,\r\n ]);\r\n\r\n const filter = useMemo(\r\n () => ({\r\n [Filters.PROJECT_STATUS]: '',\r\n [Filters.FACILITY_ID]: '',\r\n [Filters.DEPARTMENT_ID]: '',\r\n [Filters.TEXT_SEARCH]: '',\r\n [Filters.GET_LOCATIONS]: true,\r\n [Filters.IS_ARCHIVE]: true,\r\n [Filters.PROJECT_STATUSES]: allStatuses,\r\n [Filters.GANTT_VIEW]: false,\r\n }),\r\n [],\r\n );\r\n\r\n const [currentFilter, setCurrentFilter] = useState();\r\n const currentFields = useSelector(getFieldsFromState);\r\n const currentProjects = useSelector(getProjectsFromState);\r\n const currentFacilities = useSelector(getFacilitiesFromState);\r\n const currentStatuses = useSelector(getProjectStatusesFromState);\r\n const currentGantProjects = useSelector(getGanttProjectsFromState);\r\n\r\n const currentDepartments = useSelector(getDepartmentsFromState);\r\n\r\n const [fields, setFields] = useState(currentFields);\r\n const [projects, setProjects] = useState(currentProjects);\r\n const [facilities, setFacilities] = useState(currentFacilities);\r\n const [departments, setDepartments] = useState(currentDepartments);\r\n\r\n const [statuses, setStatuses] = useState(currentStatuses);\r\n const search = new URLSearchParams(useLocation().search);\r\n const fieldId = search.get('fieldId');\r\n\r\n const [selectedView, setSelectedView] = useState(PROJECT_VIEWS.TABLE_VIEW);\r\n filter[Filters.GANTT_VIEW] = selectedView;\r\n\r\n const toggleViewChange = useCallback(\r\n (_event, value) => {\r\n filter[Filters.GANTT_VIEW] = value;\r\n setCurrentFilter(filter);\r\n\r\n if (!value) return;\r\n\r\n setSelectedView(value);\r\n },\r\n [filter],\r\n );\r\n\r\n useEffect(() => {\r\n setFields(currentFields);\r\n setProjects(currentProjects);\r\n setFacilities(currentFacilities);\r\n setDepartments(currentDepartments);\r\n setStatuses(currentStatuses);\r\n }, [\r\n currentFacilities,\r\n currentFields,\r\n currentProjects,\r\n currentStatuses,\r\n currentDepartments,\r\n projects,\r\n ]);\r\n\r\n const goBackToProjects = (event) => {\r\n event.preventDefault();\r\n setIsArchiveProject(false);\r\n dispatchOnLoad();\r\n };\r\n\r\n const updateProjectFilter = useCallback(\r\n (newSelected) => {\r\n const { Plan, Report, Execute } = newSelected;\r\n let selectedStatus = [];\r\n\r\n if (!Plan && !Report && !Execute) {\r\n filter[Filters.PROJECT_STATUSES] = allStatuses;\r\n setCurrentFilter(filter);\r\n dispatchUpdateFilter(filter);\r\n return;\r\n }\r\n\r\n if (Plan) selectedStatus.push(PROJECT_STATUS.PLAN);\r\n if (Report) selectedStatus.push(PROJECT_STATUS.REPORT);\r\n if (Execute) selectedStatus.push(PROJECT_STATUS.EXECUTE);\r\n\r\n filter[Filters.PROJECT_STATUSES] = selectedStatus;\r\n setCurrentFilter(filter);\r\n dispatchUpdateFilter(filter);\r\n },\r\n [dispatchUpdateFilter, filter],\r\n );\r\n\r\n const getArchiveProjects = useCallback(() => {\r\n filter[Filters.PROJECT_STATUSES] = undefined;\r\n dispatchUpdateFilter(filter);\r\n setIsArchiveProject(true);\r\n setCurrentFilter(filter);\r\n }, [dispatchUpdateFilter, filter]);\r\n\r\n const setArchiveProjects = useCallback(\r\n (projectId, isArchive) => {\r\n dispatchArchiveProject(projectId, isArchive, currentFilter);\r\n },\r\n [currentFilter, dispatchArchiveProject],\r\n );\r\n\r\n const renderProjectsTable = useCallback(() => {\r\n if (!projects.size && dataState.isLoading()) return null;\r\n\r\n if (!projects.size) {\r\n return (\r\n \r\n No projects available\r\n \r\n );\r\n }\r\n\r\n if (selectedView === PROJECT_VIEWS.CHART_VIEW) {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else if (selectedView === PROJECT_VIEWS.TABLE_VIEW) {\r\n return (\r\n \r\n );\r\n }\r\n }, [\r\n projects,\r\n dataState,\r\n selectedView,\r\n fields,\r\n currentGantProjects,\r\n dispatchLoadGanttProject,\r\n currentFilter,\r\n isArchiveProject,\r\n setArchiveProjects,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {isArchiveProject ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {renderProjectsTable()}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n content: {\r\n top: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n },\r\n createProjectBtn: {\r\n zIndex: 3,\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n PROJECTS_ACTIONS.PROJECTS_PAGE_LOADED,\r\n PROJECTS_ACTIONS.SEARCH_PROJECTS,\r\n PROJECTS_ACTIONS.RECEIVE_GANTT_PROJECTS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchUpdateFilter: updateFilter,\r\n dispatchArchiveProject: archiveProject,\r\n dispatchLoadGanttProject: getAllProjectsGantt,\r\n },\r\n ),\r\n memo,\r\n withStyles(styles),\r\n)(ProjectsContainer);\r\n","import { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { RouteContainer } from 'altus-ui-components';\r\n\r\nimport { getProjectById } from 'features/projects/projects.actions';\r\n\r\nconst DashboardContainer = ({\r\n routes,\r\n projectId,\r\n dispatchDashboardOnUnload,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getProjectById(projectId));\r\n }, [projectId, dispatch, dispatchDashboardOnUnload]);\r\n\r\n return ;\r\n};\r\n\r\nexport default DashboardContainer;\r\n","import { Helmet } from 'altus-ui-components';\r\n\r\nimport { APP_NAME } from 'app/app.constants';\r\n\r\nconst ProjectHelmet = ({ projectId, ...rest }) => {\r\n return ;\r\n};\r\n\r\nexport default ProjectHelmet;\r\n","import { useMemo } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { createProjectSelector } from 'features/projects/projects.selectors';\r\n\r\n/**\r\n * Hook that creates a memoized project selector and then selects a specified project from state\r\n */\r\nconst useProject = (projectId) => {\r\n const projectSelector = useMemo(\r\n () => createProjectSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n return useSelector(projectSelector);\r\n};\r\n\r\nexport default useProject;\r\n","import { useParams } from 'react-router-dom';\r\n\r\nimport useProject from 'features/projects/hooks/useProject';\r\n\r\n/**\r\n * Hook to get the projectId from the current URL that were matched by the , and then select the matching project from state.\r\n * The consumer needs to be in the context of a react-router Route component to work\r\n */\r\nconst useCurrentProject = () => {\r\n const { projectId } = useParams();\r\n\r\n return useProject(projectId);\r\n};\r\n\r\nexport default useCurrentProject;\r\n","export default __webpack_public_path__ + \"static/media/collaborate_logo.99ad2c8f.svg\";","import { Link } from 'react-router-dom';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport logo from 'assets/collaborate_logo.svg';\r\n\r\nconst Logo = ({ classes, rootUrl }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n logo: {\r\n display: 'flex',\r\n height: theme.spacing(3),\r\n paddingLeft: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(Logo);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { LogoAndAppTitle as LogoAndAppTitleCore } from 'altus-ui-components';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport config from 'infrastructure/config/index';\r\nimport { ENVIRONMENTS_NAMES, APP_SHORTNAME } from 'app/app.constants';\r\n\r\nimport Logo from 'app/components/ApplicationHeader/Logo';\r\n\r\nconst LogoAndAppTitle = ({ to = routePaths.root, classes, onClick }) => (\r\n \r\n onClick ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n )\r\n }\r\n classes={{\r\n environmentName: classes.environmentName,\r\n }}\r\n />\r\n);\r\n\r\nconst styles = (theme) => ({\r\n logoRoot: {\r\n height: theme.spacing(4) - 2,\r\n '&:hover': {\r\n opacity: 0.5,\r\n },\r\n },\r\n logo: {\r\n cursor: 'pointer',\r\n },\r\n environmentName: {\r\n color: theme.palette.environment[config.environmentName],\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(LogoAndAppTitle);\r\n","import { Typography } from '@material-ui/core';\r\n\r\nimport makeStyles from '@material-ui/styles/makeStyles';\r\n\r\nimport { projectStatusToString } from 'features/projects/projects.mappers';\r\n\r\nconst ProjectStatusText = ({ status }) => {\r\n const classes = useStyles(status);\r\n\r\n return (\r\n \r\n {projectStatusToString(status)}\r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: (status) => ({\r\n color: theme.palette.status[status],\r\n }),\r\n}));\r\n\r\nexport default ProjectStatusText;\r\n","import { useSelector } from 'react-redux';\r\nimport { LinearProgress } from '@material-ui/core';\r\n\r\nimport { PROJECT_STATUS } from 'app/app.constants';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\n\r\nconst ProjectLinearProgress = () => {\r\n const projectStatus = useSelector(getExecuteStatusFromState);\r\n\r\n const status = projectStatus.get('status');\r\n\r\n if (status !== PROJECT_STATUS.EXECUTE) return null;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProjectLinearProgress;\r\n","import { IconButton } from '@material-ui/core';\r\nimport { Fullscreen, FullscreenExit } from '@material-ui/icons';\r\nimport { useFullscreen } from 'altus-hooks';\r\n\r\nconst FullScreenButton = () => {\r\n const [isFullscreen, toggleFullscreen] = useFullscreen();\r\n const FullScreenIcon = isFullscreen ? FullscreenExit : Fullscreen;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FullScreenButton;\r\n","import withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { HeaderBase } from 'altus-ui-components';\r\n\r\nconst ApplicationHeaderBase = ({ classes, children }) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n headerBaseRoot: {\r\n maxHeight: theme.spacing(8),\r\n background: theme.altus.background.header,\r\n padding: `${theme.spacing(0.75)}px ${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ApplicationHeaderBase);\r\n","import { useSelector } from 'react-redux';\r\nimport { isDesktop } from 'react-device-detect';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { getApplicationHeaderFromState } from 'app/app.selectors';\r\n\r\nconst ApplicationHeaderTitle = ({ classes }) => {\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n\r\n const title = applicationHeader.get('title');\r\n const subTitle = applicationHeader.get('subTitle');\r\n\r\n return (\r\n \r\n {(isDesktop || title) && (\r\n \r\n \r\n {title ? title :  }\r\n \r\n \r\n )}\r\n \r\n \r\n {subTitle ? subTitle :  }\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ApplicationHeaderTitle);\r\n","import { useSelector } from 'react-redux';\r\nimport history from 'infrastructure/history';\r\nimport { isMobileSafari } from 'react-device-detect';\r\nimport { Grid, IconButton } from '@material-ui/core';\r\nimport { BrowserView, isDesktop, MobileView } from 'react-device-detect';\r\n\r\nimport {\r\n Close,\r\n InfoOutlined,\r\n AddBoxOutlined,\r\n CheckBoxOutlineBlank,\r\n TrendingDownOutlined,\r\n FeaturedVideoOutlined,\r\n HorizontalSplitOutlined,\r\n} from '@material-ui/icons';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { Logo } from 'altus-ui-components';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport DashboardIcon from 'app/components/Icons/DashboardIcon';\r\nimport { getApplicationHeaderFromState } from 'app/app.selectors';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport ProjectStatusText from 'features/projects/components/ProjectStatusText';\r\nimport ProjectLinearProgress from 'features/projects/components/ProjectLinearProgress';\r\nimport FullScreenButton from 'features/projects/dashboard/components/FullScreenButton';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\nimport ProjectDashboardsDrawer from 'features/projects/dashboard/components/ProjectDashboardsDrawer';\r\n\r\n// Hide the Actions for now as it is not relevant for May 1st 2021 release\r\nconst displayActions = false;\r\n\r\nconst DashboardHeader = ({ projectId, projectDashboardId }) => {\r\n const project = useCurrentProject();\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n\r\n useHeader({\r\n title: isDesktop ? project.get('fullTitle') : undefined,\r\n });\r\n\r\n const logoNavigation = applicationHeader.get('logoNavigation');\r\n\r\n const [isOpen, toggleDrawer] = useToggle();\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!isMobileSafari ? : null}\r\n \r\n \r\n {displayActions && (\r\n \r\n \r\n \r\n {!isMobileSafari ? : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {!!projectDashboardId && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n history.goBack()}\r\n aria-label=\"Close\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DashboardHeader;\r\n","import {\r\n IgcDockManagerPaneType,\r\n IgcSplitPaneOrientation,\r\n} from '@infragistics/igniteui-dockmanager';\r\n\r\nimport { DashboardName } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nexport const DefaultLayout = {\r\n rootPane: {\r\n size: 100,\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content0',\r\n size: 100,\r\n },\r\n ],\r\n },\r\n};\r\n\r\nexport const DashboardLayout = {\r\n [DashboardName.WINCH_COMBINED]: {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content0',\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n },\r\n ],\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content3',\r\n size: 75,\r\n },\r\n ],\r\n size: 75,\r\n },\r\n ],\r\n },\r\n },\r\n [DashboardName.WINCH_GRAPH_GAUGES]: {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content0',\r\n },\r\n ],\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n size: 75,\r\n },\r\n ],\r\n size: 75,\r\n },\r\n ],\r\n },\r\n },\r\n [DashboardName.BHA_GRAPH_GAUGES]: {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content0',\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n },\r\n ],\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content3',\r\n size: 75,\r\n },\r\n ],\r\n size: 75,\r\n },\r\n ],\r\n },\r\n },\r\n [DashboardName.WELL_GRAPH_GAUGES]: {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content0',\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n },\r\n ],\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content3',\r\n size: 75,\r\n },\r\n ],\r\n size: 75,\r\n },\r\n ],\r\n },\r\n },\r\n [DashboardName.WINCH_SURVEY_GAUGES]: {\r\n rootPane: {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.vertical,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content0',\r\n },\r\n ],\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.splitPane,\r\n orientation: IgcSplitPaneOrientation.horizontal,\r\n panes: [\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content1',\r\n size: 150,\r\n },\r\n {\r\n type: IgcDockManagerPaneType.contentPane,\r\n contentId: 'content2',\r\n size: 75,\r\n },\r\n ],\r\n size: 75,\r\n },\r\n ],\r\n },\r\n },\r\n};\r\n","import { Grid } from '@material-ui/core';\r\nimport { useResizeDetector } from 'react-resize-detector';\r\n\r\nconst DynamicDockManagerSlot = ({ index, children }) => {\r\n // When the DockManager is rendering the slots, there seems to be a delay before they get the correct width and height\r\n // Highcharts elements are mounted before the correct width and height is set, therefore they will not scale correctly\r\n const { ref, width, height } = useResizeDetector();\r\n\r\n const displayContent = !!width && !!height;\r\n\r\n return (\r\n \r\n {displayContent && children}\r\n \r\n );\r\n};\r\n\r\nexport default DynamicDockManagerSlot;\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Grid } from '@material-ui/core';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { defineCustomElements } from '@infragistics/igniteui-dockmanager/loader';\r\n\r\nimport 'features/projects/dashboard/components/DynamicDockManager/styles.css';\r\nimport DynamicDockManagerSlot from 'features/projects/dashboard/components/DynamicDockManager/DynamicDockManagerSlot';\r\n\r\ndefineCustomElements();\r\n\r\nconst renderSlots = (...slots) => {\r\n if (!slots) return null;\r\n\r\n return slots.map((children, index) => (\r\n \r\n {children}\r\n \r\n ));\r\n};\r\n\r\nconst DynamicDockManager = ({ layout, component, ...rest }) => {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n\r\n ref.current.layout = layout;\r\n }, [layout]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nDynamicDockManager.propTypes = {\r\n layout: PropTypes.object.isRequired,\r\n component: PropTypes.elementType.isRequired,\r\n};\r\n\r\nexport default compose(React.memo)(DynamicDockManager);\r\n","/* eslint jsx-a11y/iframe-has-title: \"off\" */\r\nimport { createPortal } from 'react-dom';\r\nimport { useRef, useEffect, useState } from 'react';\r\n\r\nconst DockManagerIFrame = ({ children, url }) => {\r\n const ref = useRef();\r\n const [document, setDocument] = useState();\r\n\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n\r\n setDocument(\r\n ref.current.contentDocument ?? ref.current.contentWindow.document,\r\n );\r\n }, []);\r\n\r\n return (\r\n \r\n {document && createPortal(children, document.body)}\r\n \r\n );\r\n};\r\n\r\nexport default DockManagerIFrame;\r\n","import { useEffect } from 'react';\r\n\r\nimport { ReceivedDataState } from 'altus-datastate';\r\n\r\nimport DockManagerIFrame from 'features/projects/dashboard/components/DynamicDockManager/DockManagerIFrame';\r\n\r\nconst IFrameDashboardController = ({ url, renderSlots, setDataState }) => {\r\n useEffect(() => {\r\n setDataState(ReceivedDataState);\r\n }, [setDataState]);\r\n\r\n return renderSlots();\r\n};\r\n\r\nexport default IFrameDashboardController;\r\n","import { invokeIfFunction } from 'utils/app.util';\r\n\r\nexport const updateSeriesData = (chartRef, readings, callback) => {\r\n const chart = chartRef.current.chart;\r\n\r\n if (!chart.series) return;\r\n\r\n readings.forEach((reading) => {\r\n const series = chart.series.filter(\r\n (serie) => serie.options.id === reading.id,\r\n );\r\n\r\n series.forEach((serie) => invokeIfFunction(callback, reading, serie));\r\n });\r\n\r\n chart.reflow();\r\n chart.redraw();\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport Highcharts from 'highcharts';\r\nimport Highstock from 'highcharts/highstock';\r\nimport { isMobileOnly } from 'react-device-detect';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nimport { updateSeriesData } from 'utils/dashboard.util';\r\nimport { maxTimeSpan } from 'features/projects/dashboard/dashboard.constants';\r\nimport DockManagerIFrame from 'features/projects/dashboard/components/DynamicDockManager/DockManagerIFrame';\r\nimport winchHighchartsTheme from 'features/projects/dashboard/components/dashboards/winch/winch.highcharts.theme';\r\nimport _first from 'lodash/first';\r\nimport _last from 'lodash/last';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst { backgroundColor, defaultFontSize } = winchHighchartsTheme.style;\r\n\r\nconst containerProps = {\r\n style: {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n};\r\n\r\nconst validSetExtremesTriggers = ['navigator', 'rangeSelectorButton'];\r\n\r\nconst DashboardLineChart = ({\r\n curves,\r\n onSetExtremes,\r\n registerDataPointsHandler,\r\n}) => {\r\n const theme = useTheme();\r\n const chartComponent = useRef(null);\r\n const start = useRef(null);\r\n const end = useRef(null);\r\n\r\n const onReceiveInitialData = useCallback(\r\n (readings) =>\r\n updateSeriesData(chartComponent, readings, (reading, serie) => {\r\n const s = _first(reading.data);\r\n const e = _last(reading.data);\r\n\r\n if (start.current === null || s?.[0] < start.current?.[0]) {\r\n start.current = s;\r\n }\r\n\r\n if (end.current === null || e?.[0] > end.current?.[0]) {\r\n end.current = e;\r\n }\r\n\r\n serie.setData(\r\n [start.current, ...reading.data, end.current],\r\n false, // do not redraw, updateSeriesData will handle that\r\n );\r\n }),\r\n [],\r\n );\r\n\r\n const onReceiveData = useCallback(\r\n (readings) =>\r\n updateSeriesData(chartComponent, readings, (reading, serie) => {\r\n const data = reading.data[0];\r\n if (!data || end.current === null || data[0] <= end.current[0]) return;\r\n\r\n serie.addPoint(\r\n data,\r\n false, // do not redraw, updateSeriesData will handle that\r\n );\r\n }),\r\n [],\r\n );\r\n\r\n const [chartOptions] = useState(\r\n Highcharts.merge(false, winchHighchartsTheme, {\r\n legend: {\r\n itemStyle: {\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n series: curves.toArray().map((curve) => ({\r\n id: curve.get('id'),\r\n name: curve.get('caption'),\r\n type: curve.get('type'),\r\n color: curve.get('color'),\r\n unit: curve.get('unit'),\r\n // When using dual or multiple y axes, this number defines which yAxis the particular series is connected to.\r\n yAxis: curve.get('id').toString(),\r\n })),\r\n yAxis: curves.toArray().map((curve) => ({\r\n id: curve.get('id').toString(),\r\n title: {\r\n text: curve.get('caption'),\r\n style: {\r\n color: backgroundColor,\r\n fontSize: defaultFontSize,\r\n },\r\n x: -30,\r\n },\r\n labels: {\r\n align: 'center',\r\n style: {\r\n color: curve.get('color'),\r\n fontSize: defaultFontSize,\r\n fontWeight: 'normal',\r\n },\r\n formatter: function () {\r\n return this.value;\r\n },\r\n },\r\n resize: {\r\n enabled: true,\r\n },\r\n lineWidth: 1,\r\n lineColor: curve.get('color'),\r\n gridLineColor: theme.palette.secondary.darkGrey,\r\n minRange: 1,\r\n softMin: curve.get('minValue'),\r\n softMax: curve.get('maxValue'),\r\n tickInterval: isMobileOnly ? curve.get('maxValue') / 10 : null,\r\n gridLineWidth: 1,\r\n opposite: true,\r\n margin: -15,\r\n })),\r\n xAxis: {\r\n events: {\r\n setExtremes: (event) => {\r\n if (!validSetExtremesTriggers.includes(event.trigger)) return;\r\n\r\n const eventMin = event.min ?? event.dataMin;\r\n const eventMax = event.max ?? event.dataMax;\r\n\r\n if (eventMax - eventMin > maxTimeSpan) {\r\n const min = eventMax - maxTimeSpan;\r\n const max = eventMax;\r\n\r\n return onSetExtremes({\r\n fromTimestamp: min,\r\n toTimestamp: max,\r\n }).then(onReceiveInitialData);\r\n }\r\n\r\n return onSetExtremes({\r\n fromTimestamp: eventMin,\r\n toTimestamp: eventMax,\r\n }).then(onReceiveInitialData);\r\n },\r\n afterSetExtremes: (event) => {\r\n const chart = chartComponent.current.chart;\r\n\r\n const eventMin = event.min ?? event.dataMin;\r\n const eventMax = event.max ?? event.dataMax;\r\n\r\n chart.xAxis.forEach((axis) => {\r\n if (eventMax - eventMin > maxTimeSpan) {\r\n var min = eventMax - maxTimeSpan;\r\n var max = eventMax;\r\n axis.setExtremes(min, max);\r\n }\r\n });\r\n },\r\n },\r\n },\r\n rangeSelector: {\r\n enabled: true,\r\n selected: 2, // The index of the button to appear pre-selected\r\n buttons: [\r\n {\r\n count: 1,\r\n type: 'minute',\r\n text: '1M',\r\n },\r\n {\r\n count: 5,\r\n type: 'minute',\r\n text: '5M',\r\n },\r\n {\r\n count: 10,\r\n type: 'minute',\r\n text: '10M',\r\n },\r\n {\r\n count: 1,\r\n type: 'hour',\r\n text: '1H',\r\n },\r\n {\r\n type: 'hour',\r\n count: 3,\r\n text: '3H',\r\n },\r\n {\r\n type: 'hour',\r\n count: 6,\r\n text: '6H',\r\n },\r\n ],\r\n },\r\n }),\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveInitialData, onReceiveData);\r\n }, [onReceiveData, onReceiveInitialData, registerDataPointsHandler]);\r\n\r\n // Use DockManagerIFrame to enable dragging of navigator within the context of DockManager\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nDashboardLineChart.propTypes = {\r\n onSetExtremes: PropTypes.func.isRequired,\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default DashboardLineChart;\r\n","import { HubConnectionState } from '@microsoft/signalr';\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst useStream = (\r\n connection,\r\n connectionState,\r\n createStream,\r\n onStartStreaming,\r\n onStopStreaming,\r\n) => {\r\n const [stream, setStream] = useState();\r\n\r\n const startStreaming = useCallback(() => {\r\n if (!createStream) return;\r\n\r\n createStream(connection).then((stream) =>\r\n setStream((currentStream) => {\r\n if (currentStream) {\r\n currentStream.complete();\r\n }\r\n\r\n invokeIfFunction(onStartStreaming, stream);\r\n\r\n return stream;\r\n }),\r\n );\r\n }, [connection, createStream, onStartStreaming]);\r\n\r\n const stopStreaming = useCallback(() => {\r\n setStream((currentStream) => {\r\n if (!currentStream) return;\r\n\r\n currentStream.complete();\r\n\r\n return null;\r\n });\r\n\r\n invokeIfFunction(onStopStreaming);\r\n }, [onStopStreaming]);\r\n\r\n useEffect(() => {\r\n switch (connectionState) {\r\n case HubConnectionState.Connected: {\r\n startStreaming();\r\n break;\r\n }\r\n\r\n case HubConnectionState.Reconnecting:\r\n case HubConnectionState.Disconnecting:\r\n case HubConnectionState.Disconnected: {\r\n stopStreaming();\r\n break;\r\n }\r\n\r\n default:\r\n break;\r\n }\r\n }, [connectionState, stopStreaming, startStreaming]);\r\n\r\n useEffect(() => {\r\n return () => stopStreaming();\r\n }, [stopStreaming]);\r\n\r\n return stream;\r\n};\r\n\r\nexport default useStream;\r\n","import { useDispatch } from 'react-redux';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport {\r\n LogLevel,\r\n HubConnectionState,\r\n HubConnectionBuilder,\r\n} from '@microsoft/signalr';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { FailedDataState } from 'altus-datastate';\r\n\r\nimport authSingleton from 'services/auth.service';\r\nimport config from 'infrastructure/config';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst useHubConnection = (url, setDataState) => {\r\n const [connectionState, setConnectionState] = useState(\r\n HubConnectionState.Connecting,\r\n );\r\n\r\n const [connection] = useState(\r\n new HubConnectionBuilder()\r\n .withUrl(url, {\r\n accessTokenFactory: async () => {\r\n const msalInstance = await authSingleton.getMsalInstance();\r\n const silentRequest = {\r\n scopes: [config.scope],\r\n };\r\n\r\n const token = await msalInstance.acquireTokenSilent(silentRequest);\r\n return token.accessToken;\r\n },\r\n })\r\n .withAutomaticReconnect()\r\n .configureLogging(LogLevel.Error)\r\n .build(),\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n\r\n const handleConnectionStateUpdate = (callback) => {\r\n if (isMounted) {\r\n setConnectionState(connection?.state);\r\n invokeIfFunction(callback);\r\n }\r\n };\r\n\r\n connection.onreconnecting(() =>\r\n handleConnectionStateUpdate(() =>\r\n dispatch(\r\n addNotification({\r\n message: 'Connection lost. Trying to reconnect...',\r\n variant: NOTIFICATION_VARIANTS.INFO,\r\n }),\r\n ),\r\n ),\r\n );\r\n\r\n connection.onreconnected(() =>\r\n handleConnectionStateUpdate(() =>\r\n dispatch(\r\n addNotification({\r\n message: 'Reconnected successfully!',\r\n variant: NOTIFICATION_VARIANTS.SUCCESS,\r\n }),\r\n ),\r\n ),\r\n );\r\n\r\n connection.onclose(() =>\r\n handleConnectionStateUpdate(() =>\r\n dispatch(\r\n addNotification({\r\n message: 'Connection stopped',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n ),\r\n ),\r\n );\r\n\r\n connection\r\n .start()\r\n .then(handleConnectionStateUpdate)\r\n .catch(() => invokeIfFunction(setDataState, FailedDataState));\r\n\r\n return () => {\r\n connection.stop();\r\n isMounted = false;\r\n };\r\n }, [connection, setDataState, dispatch]);\r\n\r\n return [connection, connectionState];\r\n};\r\n\r\nexport default useHubConnection;\r\n","import { useLocation } from 'react-router-dom';\r\nimport { useMemo } from 'react';\r\nimport _isNil from 'lodash/isNil';\r\n\r\nconst useQueryParams = () => {\r\n const { search } = useLocation();\r\n const searchParams = useMemo(() => new URLSearchParams(search), [search]);\r\n let results = {};\r\n searchParams.entries().forEach(([k, v]) => {\r\n results[k] = null;\r\n if (!_isNil(v)) {\r\n const n = Number(v);\r\n results[k] = isNaN(n) ? v : n;\r\n }\r\n });\r\n\r\n return results;\r\n};\r\n\r\nexport default useQueryParams;\r\n","import throttle from 'lodash/throttle';\r\nimport { HubConnectionState } from '@microsoft/signalr';\r\nimport { useCallback, useMemo, useContext } from 'react';\r\n\r\nimport { LoadingDataState, ReceivedDataState } from 'altus-datastate';\r\n\r\nimport config from 'infrastructure/config';\r\nimport useStream from 'features/projects/dashboard/hooks/useStream';\r\nimport useHubConnection from 'features/projects/dashboard/hooks/useHubConnection';\r\nimport useProjectDashboard from 'features/projects/dashboard/hooks/useProjectDashboard';\r\nimport { ProjectDashboardContext } from 'features/projects/dashboard/ProjectDashboardContainer';\r\nimport useQueryParams from 'features/projects/dashboard/hooks/useQueryParams';\r\nimport _isNil from 'lodash/isNil';\r\n\r\nconst projectDashboardHubUrl = `${config.dashboardHubsBaseUrl}/project`;\r\n\r\nconst ProjectDashboardHub = {\r\n SetExtremes: 'SetExtremes',\r\n GetInitialReadings: 'GetInitialReadings',\r\n StartStreamingReadings: 'StartStreamingReadings',\r\n ReceiveInitialReadings: 'ReceiveInitialReadings',\r\n};\r\n\r\nconst useProjectDashboardHubConnection = (projectId, projectDashboardId) => {\r\n const setDataState = useContext(ProjectDashboardContext);\r\n const { taskId = null } = useQueryParams();\r\n\r\n const { curves, projectDashboard } = useProjectDashboard(\r\n projectId,\r\n projectDashboardId,\r\n );\r\n\r\n const [connection, connectionState] = useHubConnection(\r\n projectDashboardHubUrl,\r\n setDataState,\r\n );\r\n\r\n const createStream = useCallback(\r\n (connection) =>\r\n connection\r\n .invoke(\r\n ProjectDashboardHub.GetInitialReadings,\r\n projectId,\r\n projectDashboardId,\r\n taskId,\r\n )\r\n .then(() => {\r\n // only start live-streaming if the connection is not based on a completed task with a given start/end\r\n if (_isNil(taskId)) {\r\n return connection.stream(\r\n ProjectDashboardHub.StartStreamingReadings,\r\n projectId,\r\n projectDashboardId,\r\n );\r\n }\r\n })\r\n .finally(() => setDataState(ReceivedDataState)),\r\n [projectId, setDataState, projectDashboardId, taskId],\r\n );\r\n\r\n const stream = useStream(connection, connectionState, createStream);\r\n\r\n const registerDataPointsHandler = useCallback(\r\n (onReceiveInitialDataPoints, onReceiveDataPoint) => {\r\n if (onReceiveInitialDataPoints) {\r\n connection.on(\r\n ProjectDashboardHub.ReceiveInitialReadings,\r\n onReceiveInitialDataPoints,\r\n );\r\n }\r\n\r\n if (!stream) return;\r\n\r\n if (onReceiveDataPoint) {\r\n stream.subscribe({\r\n next: onReceiveDataPoint,\r\n error: (error) => {\r\n setDataState(ReceivedDataState);\r\n console.error(error);\r\n },\r\n });\r\n }\r\n },\r\n [stream, connection, setDataState],\r\n );\r\n\r\n const setExtremes = useCallback(\r\n (request) => {\r\n if (connection.state !== HubConnectionState.Connected) {\r\n return Promise.reject();\r\n }\r\n\r\n setDataState(LoadingDataState);\r\n\r\n return connection\r\n .invoke(\r\n ProjectDashboardHub.SetExtremes,\r\n projectId,\r\n projectDashboardId,\r\n request,\r\n taskId,\r\n )\r\n .finally(() => setDataState(ReceivedDataState));\r\n },\r\n [projectId, connection, projectDashboardId, setDataState, taskId],\r\n );\r\n\r\n const setExtremesThrottled = useMemo(\r\n () => throttle(setExtremes, 500),\r\n [setExtremes],\r\n );\r\n\r\n return {\r\n curves,\r\n connection,\r\n setDataState,\r\n projectDashboard,\r\n registerDataPointsHandler,\r\n setExtremes: setExtremesThrottled,\r\n };\r\n};\r\n\r\nexport default useProjectDashboardHubConnection;\r\n","import DashboardLineChart from 'features/projects/dashboard/components/charts/DashboardLineChart';\r\nimport useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\n\r\nconst GenericDashboardController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, setExtremes, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n\r\n return renderSlots(\r\n ,\r\n );\r\n};\r\n\r\nexport default GenericDashboardController;\r\n","import moment from 'moment';\r\nimport uniq from 'lodash/uniq';\r\nimport isNil from 'lodash/isNil';\r\nimport Highcharts from 'highcharts';\r\n\r\nimport { Format, UNITS as Units } from 'app/app.constants';\r\nimport { formatDate, formatValue } from 'utils/format.util';\r\nimport dashboardHighchartsTheme from 'features/projects/dashboard/components/dashboards/winch/dashboard.highcharts.theme';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst { fontColor, defaultFontSize } = dashboardHighchartsTheme.style;\r\n\r\nexport const firstColumnWidth = 35;\r\nexport const secondColumnWidth = 55;\r\nexport const secondColumnLeft = 45;\r\n\r\nexport const getDefaultYAxisOptions = (curve) => ({\r\n id: curve.get('id').toString(),\r\n opposite: true,\r\n margin: 0,\r\n title: {\r\n text: curve.get('caption'),\r\n style: {\r\n color: curve.get('color'),\r\n fontSize: defaultFontSize,\r\n },\r\n y: 40,\r\n },\r\n labels: {\r\n align: 'center',\r\n style: {\r\n color: curve.get('color'),\r\n fontSize: defaultFontSize,\r\n },\r\n y: -10,\r\n },\r\n resize: {\r\n enabled: true,\r\n },\r\n lineWidth: 1,\r\n lineColor: curve.get('color'),\r\n gridLineColor: theme.palette.secondary.darkGrey,\r\n min: curve.get('minValue'),\r\n max: curve.get('maxValue'),\r\n startOnTick: true,\r\n endOnTick: true,\r\n autoRotationLimit: 0,\r\n rotation: 0,\r\n maxPadding: 0,\r\n minPadding: 0,\r\n offset: 0,\r\n tickPositioner: function () {\r\n var minValues = [this.options.min, this.min, this.dataMin];\r\n var maxValues = [this.options.max, this.max, this.dataMax];\r\n\r\n if (minValues.every(isNil)) {\r\n return [];\r\n }\r\n\r\n if (maxValues.every(isNil)) {\r\n return [];\r\n }\r\n\r\n var min = minValues.find((value) => !isNil(value));\r\n var max = maxValues.find((value) => !isNil(value));\r\n\r\n return [Math.floor(min), Math.ceil(max)];\r\n },\r\n});\r\n\r\nconst loggingDashboardHighchartsTheme = {\r\n chart: {\r\n events: {\r\n load: function () {\r\n // Add up/down buttons\r\n const chart = this;\r\n const renderer = chart.renderer;\r\n\r\n renderer\r\n .button('▲', 0, 0, function () {\r\n const xAxis = chart.xAxis[0];\r\n\r\n const currentMin = xAxis.min;\r\n const currentMax = xAxis.max;\r\n const delta = (currentMax - currentMin) / 2;\r\n\r\n xAxis.setExtremes(currentMin - delta, currentMax - delta);\r\n })\r\n .attr({\r\n zIndex: 3,\r\n })\r\n .align({\r\n align: 'left',\r\n verticalAlign: 'bottom',\r\n x: 50,\r\n y: -115,\r\n })\r\n .add();\r\n\r\n renderer\r\n .button('▼', 0, 0, function () {\r\n const xAxis = chart.xAxis[0];\r\n\r\n const currentMin = xAxis.min;\r\n const currentMax = xAxis.max;\r\n const delta = (currentMax - currentMin) / 2;\r\n\r\n xAxis.setExtremes(currentMin + delta, currentMax + delta);\r\n })\r\n .attr({\r\n zIndex: 3,\r\n })\r\n .align({\r\n align: 'left',\r\n verticalAlign: 'bottom',\r\n x: 77,\r\n y: -115,\r\n })\r\n .add();\r\n },\r\n },\r\n alignTicks: true,\r\n inverted: true,\r\n zoomType: 'x',\r\n resetZoomButton: {\r\n position: {\r\n align: 'left',\r\n verticalAlign: 'bottom',\r\n x: 70,\r\n y: -100,\r\n },\r\n },\r\n },\r\n plotOptions: {\r\n line: {\r\n keys: ['timestamp', 'x', 'y'],\r\n },\r\n series: {\r\n animation: false,\r\n requireSorting: false,\r\n marker: {\r\n states: {\r\n hover: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n rangeSelector: {\r\n enabled: true,\r\n allButtonsEnabled: true,\r\n },\r\n tooltip: {\r\n shared: true,\r\n outside: true,\r\n crosshairs: true,\r\n positioner: function () {\r\n return { x: 10, y: this.chart.plotTop };\r\n },\r\n formatter: function () {\r\n const depthUnitFromSeries = this.points[0].series.userOptions.depthUnit;\r\n const depthUnit =\r\n Units[\r\n Object.keys(Units).find((key) => Units[key] === depthUnitFromSeries)\r\n ];\r\n const value = formatValue(this.x, depthUnit);\r\n\r\n let format = `Depth: ${value}`;\r\n\r\n const uniqueTimestamps = uniq(\r\n this.points.map((point) => point.point.timestamp),\r\n );\r\n\r\n const allPointsHaveSameTimestamp = uniqueTimestamps.length === 1;\r\n\r\n if (allPointsHaveSameTimestamp) {\r\n const commonTimestamp = uniqueTimestamps[0];\r\n\r\n const formattedTimestamp = formatDate(\r\n moment(commonTimestamp),\r\n Format.time_long,\r\n );\r\n\r\n format += `
Time: ${formattedTimestamp}`;\r\n }\r\n\r\n this.points.forEach((point) => {\r\n const { series, y: value } = point;\r\n const { color, options } = series;\r\n const { unit, caption } = options;\r\n\r\n const formattedValue = unit\r\n ? formatValue(value, unit)\r\n : formatValue(value);\r\n\r\n format += `
${caption}: ${formattedValue}`;\r\n });\r\n\r\n return format;\r\n },\r\n },\r\n};\r\n\r\nexport default Highcharts.merge(\r\n false,\r\n dashboardHighchartsTheme,\r\n loggingDashboardHighchartsTheme,\r\n);\r\n","export const SensorOffset = {\r\n DEFAULT: 0,\r\n};\r\nexport const SENSOR_NAME_DEPTH = 'DEPTH';\r\n","import {\r\n SENSOR_NAME_DEPTH,\r\n SensorOffset,\r\n} from 'features/projects/dashboard/components/dashboards/logging/helpers/constants';\r\n\r\nexport const convertCurvesToOffsetConfiguration = (curves) => {\r\n return Array.from(curves)\r\n ?.filter((x) => x.get('name') !== SENSOR_NAME_DEPTH)\r\n .map((x) => ({ name: x.get('name'), offset: x.get('offset') }))\r\n .reduce((acc, curr) => {\r\n acc = { ...{ [curr.name]: curr.offset }, ...acc };\r\n return acc;\r\n }, {});\r\n};\r\nconst getAllOffsetsAsArray = (offsetConfiguration) => {\r\n return Object.keys(offsetConfiguration).map(\r\n (key) => offsetConfiguration[key],\r\n );\r\n};\r\nconst findExtreme = (offsetConfiguration, minMaxFn) => {\r\n if (!offsetConfiguration || Object.keys(offsetConfiguration).length === 0) {\r\n return SensorOffset.DEFAULT;\r\n } else {\r\n const allOffsets = getAllOffsetsAsArray(offsetConfiguration);\r\n return minMaxFn(...allOffsets);\r\n }\r\n};\r\nexport const findMinimumOffset = (offsetConfiguration) =>\r\n findExtreme(offsetConfiguration, Math.min);\r\nexport const findMaximumOffset = (offsetConfiguration) =>\r\n findExtreme(offsetConfiguration, Math.max);\r\n\r\nexport const createNewEventWithOffset = (event, curves) => {\r\n const newEvent = { ...event };\r\n const offsetConfiguration = convertCurvesToOffsetConfiguration(curves);\r\n newEvent.min = event.min - findMaximumOffset(offsetConfiguration);\r\n newEvent.max = event.max - findMinimumOffset(offsetConfiguration);\r\n return newEvent;\r\n};\r\n","import cloneDeep from 'lodash/cloneDeep';\r\nimport { SensorOffset } from 'features/projects/dashboard/components/dashboards/logging/helpers/constants';\r\n\r\nconst calcDepthIncludingOffset = (sensor, depth, offsetCfg) => {\r\n return offsetCfg[sensor.name]\r\n ? depth + offsetCfg[sensor.name]\r\n : depth + SensorOffset.DEFAULT;\r\n};\r\n\r\nexport const introduceOffsetOnX = (readings, offsetCfg) => {\r\n return readings.map((originalSensor) => {\r\n const sensor = cloneDeep(originalSensor);\r\n sensor.data = sensor.data.map(([time, depth, value]) => [\r\n time,\r\n calcDepthIncludingOffset(sensor, depth, offsetCfg),\r\n value,\r\n ]);\r\n return sensor;\r\n });\r\n};\r\n","/*eslint no-unused-vars: [\"error\", { \"argsIgnorePattern\": \"^_\" }]*/\r\nimport PropTypes from 'prop-types';\r\nimport sortBy from 'lodash/sortBy';\r\nimport Highcharts from 'highcharts';\r\nimport { useCallback, useEffect } from 'react';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport { updateSeriesData } from 'utils/dashboard.util';\r\nimport { convertCurvesToOffsetConfiguration } from 'features/projects/dashboard/components/dashboards/logging/helpers/common';\r\nimport { introduceOffsetOnX } from 'features/projects/dashboard/components/dashboards/logging/common/LoggingDashboard/helpers/utils';\r\n\r\nconst LoggingDashboard = ({\r\n data,\r\n chart,\r\n options,\r\n curves,\r\n registerDataPointsHandler,\r\n}) => {\r\n const onReceiveInitialData = useCallback(\r\n (readings) => {\r\n const offsetConfiguration = convertCurvesToOffsetConfiguration(curves);\r\n let readingsWithOffset = introduceOffsetOnX(\r\n readings,\r\n offsetConfiguration,\r\n );\r\n updateSeriesData(chart, readingsWithOffset, (reading, serie) => {\r\n const data = reading.data;\r\n\r\n if (!data.length) return;\r\n\r\n // TODO: Sort data in backend if necessary\r\n const sorted = sortBy(data, ([_timestamp, depth, _value]) => depth);\r\n\r\n serie.setData(sorted, false);\r\n });\r\n },\r\n [chart, curves],\r\n );\r\n\r\n const onReceiveData = useCallback(\r\n (readings) => {\r\n const offsetConfiguration = convertCurvesToOffsetConfiguration(curves);\r\n let readingsWithOffset = introduceOffsetOnX(\r\n readings,\r\n offsetConfiguration,\r\n );\r\n updateSeriesData(chart, readingsWithOffset, (reading, serie) => {\r\n const data = reading.data[0];\r\n\r\n if (!data) return;\r\n\r\n serie.addPoint(data, false);\r\n });\r\n },\r\n [chart, curves],\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveInitialData, onReceiveData);\r\n }, [onReceiveData, onReceiveInitialData, registerDataPointsHandler]);\r\n\r\n useEffect(() => {\r\n if (!data) return;\r\n\r\n onReceiveInitialData(data);\r\n }, [data, onReceiveInitialData]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nLoggingDashboard.propTypes = {\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default LoggingDashboard;\r\n","import { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Highcharts from 'highcharts';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nimport {\r\n firstColumnWidth,\r\n secondColumnLeft,\r\n secondColumnWidth,\r\n getDefaultYAxisOptions,\r\n} from 'features/projects/dashboard/components/dashboards/logging/helpers/logging.highcharts.theme';\r\n\r\nimport LoggingDashboard from 'features/projects/dashboard/components/dashboards/logging/common/LoggingDashboard';\r\nimport loggingDashboardHighchartsTheme from 'features/projects/dashboard/components/dashboards/logging/helpers/logging.highcharts.theme';\r\nimport { createNewEventWithOffset } from 'features/projects/dashboard/components/dashboards/logging/helpers/common';\r\n\r\nconst curveOptions = [\r\n {\r\n offset: 120,\r\n width: `${firstColumnWidth}%`,\r\n },\r\n {\r\n offset: 80,\r\n width: `${firstColumnWidth}%`,\r\n },\r\n {\r\n offset: 40,\r\n width: `${firstColumnWidth}%`,\r\n },\r\n {\r\n offset: 0,\r\n width: `${firstColumnWidth}%`,\r\n },\r\n {\r\n offset: 0,\r\n width: `${secondColumnWidth}%`,\r\n left: `${secondColumnLeft}%`,\r\n },\r\n {\r\n offset: 40,\r\n width: `${secondColumnWidth}%`,\r\n left: `${secondColumnLeft}%`,\r\n },\r\n {\r\n offset: 80,\r\n width: `${secondColumnWidth}%`,\r\n left: `${secondColumnLeft}%`,\r\n },\r\n {\r\n offset: 120,\r\n width: `${secondColumnWidth}%`,\r\n left: `${secondColumnLeft}%`,\r\n },\r\n];\r\n\r\nconst CaliperDashboard = ({\r\n data,\r\n curves,\r\n depthUnit,\r\n measuredDepth,\r\n onSetExtremes,\r\n registerDataPointsHandler,\r\n}) => {\r\n const chartComponent = useRef(null);\r\n useEffect(() => {\r\n const chart = chartComponent.current.chart;\r\n\r\n if (!measuredDepth) return;\r\n\r\n chart.xAxis[0].update({\r\n softMax: measuredDepth,\r\n });\r\n }, [measuredDepth]);\r\n\r\n const chartOptions = useMemo(\r\n () =>\r\n Highcharts.merge(false, loggingDashboardHighchartsTheme, {\r\n series: curves.toArray().map((curve) => ({\r\n id: curve.get('id'),\r\n name: curve.get('caption'),\r\n caption: curve.get('caption'),\r\n type: curve.get('type'),\r\n color: curve.get('color'),\r\n unit: curve.get('unit'),\r\n depthUnit,\r\n // When using dual or multiple y axes, this number defines which yAxis the particular series is connected to.\r\n yAxis: curve.get('id').toString(),\r\n })),\r\n xAxis: [\r\n {\r\n id: 0,\r\n events: {\r\n setExtremes: (event) => {\r\n const newEvent = createNewEventWithOffset(event, curves);\r\n onSetExtremes(newEvent.min, newEvent.max);\r\n },\r\n },\r\n },\r\n {\r\n id: 1,\r\n linkedTo: 0,\r\n opposite: true,\r\n },\r\n ],\r\n yAxis: curves\r\n .sortBy((curve) => curve.get('isDiameter'))\r\n .toArray()\r\n .map((curve, index) => ({\r\n ...getDefaultYAxisOptions(curve, index),\r\n ...curveOptions[index],\r\n })),\r\n }),\r\n [curves, onSetExtremes, depthUnit],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nCaliperDashboard.propTypes = {\r\n onSetExtremes: PropTypes.func.isRequired,\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default CaliperDashboard;\r\n","import { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport projectService from 'services/project.service';\r\n\r\nconst useProjectWellbore = (projectId) => {\r\n const getProjectWellbore = useCallback(\r\n () =>\r\n projectService\r\n .getWellboreByProject(projectId)\r\n .then(mappers.Wellbore.from),\r\n [projectId],\r\n );\r\n\r\n return useRequest(getProjectWellbore);\r\n};\r\n\r\nexport default useProjectWellbore;\r\n","import { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport projectService from 'services/project.service';\r\n\r\nconst useProjectWellboreTrajectory = (projectId) => {\r\n const getProjectWellboreTrajectory = useCallback(\r\n () =>\r\n projectService\r\n .getWellboreTrajectoryByProject(projectId)\r\n .then((projectWellboreTrajectory) =>\r\n mappers.Trajectory.from(projectWellboreTrajectory),\r\n ),\r\n [projectId],\r\n );\r\n\r\n return useRequest(getProjectWellboreTrajectory);\r\n};\r\n\r\nexport default useProjectWellboreTrajectory;\r\n","import PropTypes from 'prop-types';\r\nimport Highcharts from 'highcharts';\r\nimport { useEffect, useMemo, useRef } from 'react';\r\n\r\nimport {\r\n firstColumnWidth,\r\n secondColumnLeft,\r\n secondColumnWidth,\r\n getDefaultYAxisOptions,\r\n} from 'features/projects/dashboard/components/dashboards/logging/helpers/logging.highcharts.theme';\r\n\r\nimport LoggingDashboard from 'features/projects/dashboard/components/dashboards/logging/common/LoggingDashboard';\r\nimport loggingDashboardHighchartsTheme from 'features/projects/dashboard/components/dashboards/logging/helpers/logging.highcharts.theme';\r\nimport { createNewEventWithOffset } from 'features/projects/dashboard/components/dashboards/logging/helpers/common';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst CCLCurveName = 'CCL';\r\n\r\nconst curveOptions = [\r\n {\r\n offset: 0,\r\n width: `${firstColumnWidth}%`,\r\n },\r\n {\r\n offset: 40,\r\n width: `${firstColumnWidth}%`,\r\n },\r\n {\r\n offset: 0,\r\n left: `${firstColumnWidth + 1}%`,\r\n width: `${secondColumnWidth - secondColumnLeft - 2}%`,\r\n },\r\n {\r\n offset: 0,\r\n left: `${secondColumnLeft}%`,\r\n width: `${secondColumnWidth}%`,\r\n },\r\n];\r\n\r\n// Since we might have duplicated series, we need to differentiate between the series using the index\r\nconst generateYAxisId = (curve, index) => `${curve.get('id')}-${index}`;\r\n\r\nconst CorrelationDashboard = ({\r\n data,\r\n curves,\r\n measuredDepth,\r\n onSetExtremes,\r\n depthUnit,\r\n registerDataPointsHandler,\r\n}) => {\r\n const chartComponent = useRef(null);\r\n const theme = useTheme();\r\n\r\n const CCLCurve = useMemo(\r\n () => curves.find((curve) => curve.get('name') === CCLCurveName),\r\n [curves],\r\n );\r\n\r\n const chartOptions = useMemo(() => {\r\n const allCurves = curves\r\n .update((curves) => (CCLCurve ? curves.push(CCLCurve) : curves)) // duplicate CCL curve if exists\r\n .sortBy((curve) => curve.get('name') === CCLCurveName);\r\n\r\n return Highcharts.merge(false, loggingDashboardHighchartsTheme, {\r\n series: allCurves.toArray().map((curve, index) => ({\r\n id: curve.get('id'),\r\n name: curve.get('caption'),\r\n caption: curve.get('caption'),\r\n type: curve.get('type'),\r\n color: curve.get('color'),\r\n unit: curve.get('unit'),\r\n depthUnit,\r\n // When using dual or multiple y axes, this number defines which yAxis the particular series is connected to.\r\n yAxis: generateYAxisId(curve, index),\r\n })),\r\n xAxis: [\r\n {\r\n id: 0,\r\n events: {\r\n setExtremes: (event) => {\r\n const newEvent = createNewEventWithOffset(event, curves);\r\n onSetExtremes(newEvent.min, newEvent.max);\r\n },\r\n },\r\n },\r\n {\r\n id: 1,\r\n linkedTo: 0,\r\n opposite: true,\r\n },\r\n ],\r\n yAxis: allCurves.toArray().map((curve, index) => ({\r\n ...getDefaultYAxisOptions(curve, index),\r\n ...curveOptions[index],\r\n id: generateYAxisId(curve, index),\r\n })),\r\n });\r\n }, [curves, CCLCurve, onSetExtremes, depthUnit]);\r\n\r\n useEffect(() => {\r\n const chart = chartComponent.current.chart;\r\n\r\n if (chart.yAxis[2]) {\r\n const CCLmin = CCLCurve.get('minValue') ?? 0;\r\n const CCLmax = CCLCurve.get('maxValue') ?? 0;\r\n\r\n chart.yAxis[2].update(\r\n {\r\n endOnTick: false,\r\n title: {\r\n y: -5,\r\n },\r\n labels: {\r\n enabled: false,\r\n },\r\n gridLineDashStyle: 'longdash',\r\n plotBands: [\r\n {\r\n from: CCLmin,\r\n to: CCLmax,\r\n thickness: '100%',\r\n color: theme.palette.secondary.darkGrey,\r\n },\r\n ],\r\n tickPositions: [CCLmin, CCLmax],\r\n },\r\n false, // do not redraw yet\r\n );\r\n }\r\n\r\n chart.redraw();\r\n }, [curves, CCLCurve, theme]);\r\n\r\n useEffect(() => {\r\n const chart = chartComponent.current.chart;\r\n\r\n if (!measuredDepth) return;\r\n\r\n chart.xAxis[0].update({\r\n softMax: measuredDepth,\r\n });\r\n }, [measuredDepth]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nCorrelationDashboard.propTypes = {\r\n onSetExtremes: PropTypes.func.isRequired,\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default CorrelationDashboard;\r\n","import PropTypes from 'prop-types';\r\nimport Highcharts from 'highcharts';\r\nimport Highstock from 'highcharts/highstock';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport { useCallback, useEffect, useRef, useMemo } from 'react';\r\n\r\nimport { updateSeriesData } from 'utils/dashboard.util';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\nimport DockManagerIFrame from 'features/projects/dashboard/components/DynamicDockManager/DockManagerIFrame';\r\nimport winchHighchartsTheme from 'features/projects/dashboard/components/dashboards/winch/winch.highcharts.theme';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst fontColor = theme.palette.common.white;\r\nconst capFontSize = theme.typography.caption.fontSize;\r\n\r\nconst validSetExtremesTriggers = ['navigator', 'rangeSelectorButton'];\r\n\r\nconst LoggingNavigatorChart = ({\r\n curves,\r\n onSetExtremes,\r\n registerDataPointsHandler,\r\n}) => {\r\n const chartComponent = useRef(null);\r\n const onReceiveInitialData = useCallback(\r\n (readings) =>\r\n updateSeriesData(chartComponent, readings, (reading, serie) =>\r\n serie.setData(\r\n reading.data,\r\n false, // do not redraw, updateSeriesData will handle that\r\n ),\r\n ),\r\n [],\r\n );\r\n\r\n const onReceiveData = useCallback(\r\n (readings) =>\r\n updateSeriesData(chartComponent, readings, (reading, serie) => {\r\n const data = reading.data[0];\r\n\r\n if (!data) return;\r\n\r\n serie.addPoint(\r\n data,\r\n false, // do not redraw, updateSeriesData will handle that\r\n );\r\n }),\r\n [],\r\n );\r\n\r\n const chartOptions = useMemo(\r\n () =>\r\n Highcharts.merge(false, winchHighchartsTheme, {\r\n chart: {\r\n height: 250,\r\n },\r\n lang: {\r\n noData: null,\r\n },\r\n legend: {\r\n enabled: false,\r\n },\r\n plotOptions: {\r\n line: {\r\n keys: ['x', 'depth', 'y'],\r\n },\r\n },\r\n series: curves.toArray().map((curve) => ({\r\n lineWidth: 0,\r\n marker: {\r\n enabled: false,\r\n states: {\r\n hover: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n id: curve.get('id'),\r\n name: curve.get('caption'),\r\n type: curve.get('type'),\r\n color: curve.get('color'),\r\n unit: curve.get('unit'),\r\n })),\r\n tooltip: {\r\n enabled: false,\r\n },\r\n yAxis: {\r\n height: 0,\r\n gridLineWidth: 0,\r\n labels: {\r\n enabled: false,\r\n },\r\n },\r\n navigator: {\r\n enabled: true,\r\n height: 160,\r\n xAxis: {\r\n ordinal: false,\r\n width: '95%',\r\n lineWidth: 1,\r\n tickInterval: 3_600_000, // 1 hour\r\n },\r\n yAxis: {\r\n softMin: 0,\r\n reversed: true,\r\n labels: {\r\n enabled: true,\r\n align: 'right',\r\n },\r\n },\r\n series: {\r\n fillOpacity: 0.0,\r\n lineWidth: 10,\r\n },\r\n },\r\n xAxis: {\r\n lineWidth: 0,\r\n tickLength: 0,\r\n labels: {\r\n enabled: false,\r\n },\r\n events: {\r\n setExtremes: (event) => {\r\n if (!validSetExtremesTriggers.includes(event.trigger)) return;\r\n\r\n const min = event.min > event.max ? event.dataMin : event.min;\r\n const max = event.max < event.min ? event.dataMax : event.max;\r\n\r\n onSetExtremes(min, max);\r\n },\r\n },\r\n },\r\n rangeSelector: {\r\n buttons: [\r\n {\r\n count: 1,\r\n type: 'minute',\r\n text: '1M',\r\n },\r\n {\r\n count: 5,\r\n type: 'minute',\r\n text: '5M',\r\n },\r\n {\r\n count: 10,\r\n type: 'minute',\r\n text: '10M',\r\n },\r\n {\r\n count: 1,\r\n type: 'hour',\r\n text: '1H',\r\n },\r\n {\r\n type: 'hour',\r\n count: 3,\r\n text: '3H',\r\n },\r\n {\r\n type: 'hour',\r\n count: 6,\r\n text: '6H',\r\n },\r\n ],\r\n floating: true,\r\n inputEnabled: false,\r\n buttonPosition: {\r\n align: 'right',\r\n x: -10,\r\n y: -180, // Negative y moves it up, positive y moves it down.\r\n },\r\n verticalAlign: 'bottom',\r\n labelStyle: {\r\n color: fontColor,\r\n fontSize: capFontSize,\r\n },\r\n },\r\n }),\r\n [curves, onSetExtremes],\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveInitialData, onReceiveData);\r\n }, [onReceiveData, onReceiveInitialData, registerDataPointsHandler]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nLoggingNavigatorChart.propTypes = {\r\n onSetExtremes: PropTypes.func.isRequired,\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default LoggingNavigatorChart;\r\n","import { compose } from 'redux';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useMemo, useRef, useState } from 'react';\r\n\r\nimport useProjectWellbore from 'features/projects/hooks/useProjectWellbore';\r\nimport useProjectWellboreTrajectory from 'features/wells/hooks/useProjectWellboreTrajectory';\r\nimport CaliperDashboard from './components/CaliperDashboard';\r\nimport CorrelationDashboard from './components/CorrelationDashboard';\r\nimport LoggingNavigatorChart from './components/LoggingNavigatorChart';\r\n\r\n// TODO: Add to Dashboard db?\r\nconst maxNumberOfCurvesByComponent = {\r\n [CaliperDashboard]: 8,\r\n [CorrelationDashboard]: 3,\r\n};\r\n\r\nconst LoggingDashboardContainer = ({\r\n classes,\r\n projectId,\r\n setExtremes,\r\n curves: allCurves,\r\n registerDataPointsHandler,\r\n component: DashboardComponent,\r\n}) => {\r\n const depthCurves = useMemo(\r\n () => allCurves?.filter((curve) => curve.get('isDepth')),\r\n [allCurves],\r\n );\r\n\r\n const depthUnit = useMemo(\r\n () =>\r\n depthCurves.size > 0\r\n ? depthCurves\r\n ?.find((curve) => curve.get('abbreviation') === 'WD')\r\n .get('unit')\r\n : null,\r\n [depthCurves],\r\n );\r\n\r\n const curves = useMemo(\r\n () =>\r\n allCurves\r\n ?.filter((curve) => !curve.get('isDepth'))\r\n .take(maxNumberOfCurvesByComponent[DashboardComponent]),\r\n [allCurves, DashboardComponent],\r\n );\r\n\r\n const [wellbore] = useProjectWellbore(projectId);\r\n const [wellboreTrajectory] = useProjectWellboreTrajectory(projectId);\r\n\r\n const fromTimestampRef = useRef();\r\n const toTimestampRef = useRef();\r\n const fromDepthRef = useRef();\r\n const toDepthRef = useRef();\r\n\r\n const [depthData, setDepthData] = useState();\r\n\r\n const onSetTimeExtremes = useCallback(\r\n (fromTimestamp, toTimestamp) =>\r\n setExtremes({\r\n toDepth: toDepthRef.current,\r\n fromDepth: fromDepthRef.current,\r\n toTimestamp,\r\n fromTimestamp,\r\n }).then((readings) => {\r\n fromTimestampRef.current = fromTimestamp;\r\n toTimestampRef.current = toTimestamp;\r\n setDepthData(readings);\r\n }),\r\n [setExtremes],\r\n );\r\n\r\n const onSetDepthExtremes = useCallback(\r\n (fromDepth, toDepth) => {\r\n setExtremes({\r\n toDepth,\r\n fromDepth,\r\n toTimestamp: toTimestampRef.current,\r\n fromTimestamp: fromTimestampRef.current,\r\n }).then((readings) => {\r\n fromDepthRef.current = fromDepth;\r\n toDepthRef.current = toDepth;\r\n setDepthData(readings);\r\n });\r\n },\r\n [setExtremes],\r\n );\r\n\r\n const measuredDepth = useMemo(\r\n () =>\r\n wellboreTrajectory?.getIn(['measuredDepth', 'value']) ??\r\n wellbore?.getIn(['md', 'value']),\r\n [wellbore, wellboreTrajectory],\r\n );\r\n\r\n if (!allCurves) {\r\n return (\r\n \r\n \r\n \r\n No data to display\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n chart: {\r\n overflow: 'hidden',\r\n },\r\n navigator: {\r\n height: 300,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(LoggingDashboardContainer);\r\n","import CaliperDashboard from 'features/projects/dashboard/components/dashboards/logging/components/CaliperDashboard';\r\nimport useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\nimport LoggingDashboardContainer from 'features/projects/dashboard/components/dashboards/logging/LoggingDashboardContainer';\r\n\r\nconst CaliperDashboardController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, setExtremes, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n\r\n return renderSlots(\r\n ,\r\n );\r\n};\r\n\r\nexport default CaliperDashboardController;\r\n","import useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\nimport CorrelationDashboard from 'features/projects/dashboard/components/dashboards/logging/components/CorrelationDashboard';\r\nimport LoggingDashboardContainer from 'features/projects/dashboard/components/dashboards/logging/LoggingDashboardContainer';\r\n\r\nconst CorrelationDashboardController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, setExtremes, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n\r\n return renderSlots(\r\n ,\r\n );\r\n};\r\n\r\nexport default CorrelationDashboardController;\r\n","import { HubConnectionState } from '@microsoft/signalr';\r\nimport { useEffect, useContext, useCallback } from 'react';\r\n\r\nimport { ReceivedDataState } from 'altus-datastate';\r\n\r\nimport config from 'infrastructure/config';\r\nimport useStream from 'features/projects/dashboard/hooks/useStream';\r\nimport useHubConnection from 'features/projects/dashboard/hooks/useHubConnection';\r\nimport { ProjectDashboardContext } from 'features/projects/dashboard/ProjectDashboardContainer';\r\n\r\nconst metalMillingHubUrl = `${config.dashboardHubsBaseUrl}/metal-milling`;\r\n\r\nconst MetalMillingHub = {\r\n StartFetchingMetalMillingData: 'StartFetchingMetalMillingData',\r\n};\r\n\r\nconst useMetalMillingHubConnection = (projectId, projectDashboardId) => {\r\n const setDataState = useContext(ProjectDashboardContext);\r\n\r\n const [connection, connectionState] = useHubConnection(\r\n metalMillingHubUrl,\r\n setDataState,\r\n );\r\n\r\n const createStream = useCallback(\r\n (connection) =>\r\n Promise.resolve(\r\n connection.stream(\r\n MetalMillingHub.StartFetchingMetalMillingData,\r\n projectId,\r\n projectDashboardId,\r\n ),\r\n ),\r\n [projectId, projectDashboardId],\r\n );\r\n\r\n const stream = useStream(connection, connectionState, createStream);\r\n\r\n const registerDataPointsHandler = useCallback(\r\n (callback) => {\r\n if (!stream) return;\r\n\r\n stream.subscribe({\r\n next: callback,\r\n error: console.error,\r\n });\r\n },\r\n [stream],\r\n );\r\n\r\n useEffect(() => {\r\n // Metal milling dashboard doesnt need any initial data - set dataState as received as soon as connection is connected\r\n if (connectionState === HubConnectionState.Connected) {\r\n setDataState(ReceivedDataState);\r\n }\r\n }, [setDataState, connectionState]);\r\n\r\n return {\r\n registerDataPointsHandler,\r\n };\r\n};\r\n\r\nexport default useMetalMillingHubConnection;\r\n","import React, { useRef, useCallback, useEffect, useState } from 'react';\r\n\r\nimport Highcharts from 'highcharts';\r\nimport HighchartsMore from 'highcharts/highcharts-more';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport { alpha } from '@material-ui/core/styles';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nHighchartsMore(Highcharts);\r\n\r\nconst TelemetryGauge = ({ registerDataPointsHandler }) => {\r\n const chartComponent = useRef(null);\r\n const theme = useTheme();\r\n\r\n const [options] = useState({\r\n chart: {\r\n type: 'gauge',\r\n backgroundColor: alpha(theme.palette.common.black, 0),\r\n },\r\n tooltip: {\r\n enabled: false,\r\n },\r\n title: {\r\n text: 'Q - Telemetry Rotation',\r\n style: {\r\n color: theme.palette.common.white,\r\n fontSize: 15,\r\n },\r\n },\r\n subtitle: {\r\n text: '0 °',\r\n style: {\r\n fontSize: 30,\r\n color: theme.palette.common.white,\r\n fontWeight: 'bold',\r\n },\r\n },\r\n pane: {\r\n startAngle: 0,\r\n endAngle: 360,\r\n background: {\r\n backgroundColor: alpha(theme.palette.common.black, 0),\r\n borderWidth: 0,\r\n },\r\n },\r\n // the value axis\r\n yAxis: {\r\n min: 0,\r\n max: 360,\r\n minorTickInterval: 'auto',\r\n minorTickWidth: 1,\r\n minorTickLength: 10,\r\n minorTickPosition: 'inside',\r\n minorTickColor: alpha(theme.palette.common.black, 0),\r\n lineColor: theme.palette.secondary.cssGray,\r\n lineWidth: 2,\r\n tickPixelInterval: 30,\r\n tickWidth: 2,\r\n tickPosition: 'inside',\r\n tickLength: 10,\r\n tickColor: alpha(theme.palette.common.black, 0),\r\n labels: {\r\n enabled: false,\r\n step: 2,\r\n rotation: 'auto',\r\n },\r\n },\r\n plotOptions: {\r\n series: {\r\n states: {\r\n inactive: {\r\n opacity: 1,\r\n },\r\n },\r\n },\r\n tooltip: {\r\n visible: false,\r\n },\r\n dataLabels: {\r\n enabled: false,\r\n },\r\n gauge: {\r\n dial: {\r\n radius: '100%',\r\n backgroundColor: theme.palette.common.white,\r\n borderColor: alpha(theme.palette.common.black, 0),\r\n borderWidth: 1,\r\n baseWidth: 5,\r\n baseLength: '100%', // of radius\r\n rearLength: '0%',\r\n },\r\n pivot: {\r\n backgroundColor: theme.palette.common.white,\r\n radius: 7,\r\n },\r\n },\r\n },\r\n series: [\r\n {\r\n data: [0],\r\n dataLabels: {\r\n formatter: function () {\r\n return null;\r\n },\r\n },\r\n dial: {\r\n radius: '100%',\r\n backgroundColor: theme.palette.secondary.cssGray,\r\n borderColor: theme.palette.secondary.cssGray,\r\n baseWidth: 2,\r\n baseLength: '100%', // of radius\r\n rearLength: '0%',\r\n },\r\n },\r\n {\r\n data: [90],\r\n dataLabels: {\r\n formatter: function () {\r\n return null;\r\n },\r\n },\r\n dial: {\r\n radius: '100%',\r\n backgroundColor: theme.palette.secondary.cssGray,\r\n borderColor: theme.palette.secondary.cssGray,\r\n baseWidth: 2,\r\n baseLength: '100%', // of radius\r\n rearLength: '0%',\r\n },\r\n },\r\n {\r\n data: [180],\r\n dataLabels: {\r\n formatter: function () {\r\n return null;\r\n },\r\n },\r\n dial: {\r\n radius: '100%',\r\n backgroundColor: theme.palette.secondary.cssGray,\r\n borderColor: theme.palette.secondary.cssGray,\r\n baseWidth: 2,\r\n baseLength: '100%', // of radius\r\n rearLength: '0%',\r\n },\r\n },\r\n {\r\n data: [270],\r\n dataLabels: {\r\n formatter: function () {\r\n return null;\r\n },\r\n },\r\n dial: {\r\n radius: '100%',\r\n backgroundColor: theme.palette.secondary.cssGray,\r\n borderColor: theme.palette.secondary.cssGray,\r\n baseWidth: 2,\r\n baseLength: '100%', // of radius\r\n rearLength: '0%',\r\n },\r\n },\r\n {\r\n name: 'real_series',\r\n data: [],\r\n dataLabels: {\r\n formatter: function () {\r\n return null;\r\n },\r\n },\r\n symbol: 'square',\r\n lineWidth: 1,\r\n },\r\n ],\r\n });\r\n\r\n const updateSeriesData = useCallback((data) => {\r\n const chart = chartComponent.current.chart;\r\n\r\n const matchingSeries = chart.series.filter(\r\n (series) => series.name === 'real_series',\r\n );\r\n chart.setTitle(null, { text: `${Math.floor(data)} °` });\r\n matchingSeries[0].setData([Math.floor(data)]);\r\n\r\n chart.redraw();\r\n chart.reflow();\r\n }, []);\r\n\r\n const onReceiveData = useCallback(\r\n (data) => {\r\n updateSeriesData(data.qTelemetryRotation);\r\n },\r\n [updateSeriesData],\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveData);\r\n }, [onReceiveData, registerDataPointsHandler]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default TelemetryGauge;\r\n","import React, { useEffect, useCallback, useState } from 'react';\r\n\r\nimport { Grid, withStyles, Typography } from '@material-ui/core';\r\n\r\nconst MetalMillingROP = ({ classes, registerDataPointsHandler }) => {\r\n const [data, setData] = useState(0);\r\n\r\n const onReceiveData = useCallback((data) => {\r\n setData(data);\r\n }, []);\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveData);\r\n }, [onReceiveData, registerDataPointsHandler]);\r\n\r\n return (\r\n \r\n \r\n ROP\r\n \r\n \r\n \r\n {`${data.rop} mm/min`}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n ropContainer_wrap: {\r\n border: '2px solid gray',\r\n borderRadius: 10,\r\n paddingTop: 10,\r\n paddingBottom: 10,\r\n width: '30%',\r\n },\r\n ropMetric: {\r\n color: theme.altus.components.Dashboards.metalMilling.ropMetric,\r\n align: 'center',\r\n fontWeight: 'bold',\r\n },\r\n ropTitle: {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MetalMillingROP);\r\n","import { Mesh } from 'three';\r\nimport * as THREE from 'three';\r\nimport { useFrame } from '@react-three/fiber';\r\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\r\nimport { useRef, useState, useMemo, useEffect, useCallback } from 'react';\r\n\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\n\r\nconst modelUrl = `${PUBLIC_ASSETS_URL}/images/dashboard/drillModel.obj`;\r\n\r\nconst DrillModel = ({ registerDataPointsHandler }) => {\r\n const modelRef = useRef();\r\n const [position] = useState([50, 0, 0]);\r\n const [rpm, setRpm] = useState(0);\r\n\r\n const [obj, setObj] = useState();\r\n const mat = new THREE.MeshStandardMaterial({\r\n metalness: 1,\r\n roughness: 0.4,\r\n });\r\n\r\n const ObjToPrimitive = () => {\r\n useMemo(() => new OBJLoader().load(modelUrl, setObj), []);\r\n\r\n if (obj) {\r\n obj.traverse((child) => {\r\n if (child instanceof Mesh) {\r\n child.material = mat;\r\n }\r\n });\r\n return ;\r\n }\r\n };\r\n\r\n useFrame(() => {\r\n modelRef.current.rotation.x += 0.03 * (rpm / 100);\r\n });\r\n\r\n const onReceiveData = useCallback(\r\n (data) => setRpm(data.bitRpm ?? 0),\r\n [setRpm],\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveData);\r\n }, [registerDataPointsHandler, onReceiveData]);\r\n\r\n return (\r\n \r\n {ObjToPrimitive()}\r\n \r\n );\r\n};\r\n\r\nexport default DrillModel;\r\n","import { Suspense } from 'react';\r\n\r\nimport { Canvas } from '@react-three/fiber';\r\n\r\nimport DrillModel from 'features/projects/dashboard/components/dashboards/metalMilling/DrillModel/DrillModel';\r\n\r\nconst DrillModelContainer = ({ registerDataPointsHandler }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DrillModelContainer;\r\n","const DEFAULT_MIN_VALUE = 0;\r\n\r\nexport const ARM = {\r\n MAX_VALUE: 150,\r\n MIN_VALUE: DEFAULT_MIN_VALUE,\r\n};\r\n\r\nexport const BITRPM = {\r\n MAX_VALUE: 200,\r\n MIN_VALUE: DEFAULT_MIN_VALUE,\r\n};\r\n\r\nexport const DDRRPM = {\r\n MAX_VALUE: 5000,\r\n MIN_VALUE: DEFAULT_MIN_VALUE,\r\n};\r\n\r\nexport const TORQUE = {\r\n MAX_VALUE: 120,\r\n MIN_VALUE: DEFAULT_MIN_VALUE,\r\n};\r\n\r\nexport const WHEEL = {\r\n MAX_VALUE: 150,\r\n MIN_VALUE: DEFAULT_MIN_VALUE,\r\n};\r\n\r\nexport const WOP = {\r\n // THIS IS WOB\r\n MAX_VALUE: 600,\r\n MIN_VALUE: 0,\r\n};\r\n\r\nexport const WOPRPM = {\r\n MAX_VALUE: 200,\r\n MIN_VALUE: DEFAULT_MIN_VALUE,\r\n};\r\n\r\nexport const QTELROT = {\r\n MAX_VALUE: 360,\r\n MIN_VALUE: DEFAULT_MIN_VALUE,\r\n};\r\n\r\n// chart gradients\r\n\r\nexport const TORQUE_GRADIENT = [\r\n {\r\n from: 0,\r\n to: 35,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'red'],\r\n [1, 'green'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 35,\r\n to: 80,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'green'],\r\n [1, 'red'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 80,\r\n to: 120,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.1, 'red'],\r\n [1, 'red'],\r\n ],\r\n },\r\n },\r\n];\r\n\r\nexport const WOB_GRADIENT = [\r\n {\r\n from: 0,\r\n to: 20,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.8, 'red'],\r\n [1, 'green'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 20,\r\n to: 200,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'green'],\r\n [1, 'yellow'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 200,\r\n to: 350,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'yellow'],\r\n [1, 'red'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 350,\r\n to: 600,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.1, 'red'],\r\n [1, 'red'],\r\n ],\r\n },\r\n },\r\n];\r\n\r\nexport const BITRPM_GRADIENT = [\r\n {\r\n from: 0,\r\n to: 84,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'red'],\r\n [1, 'yellow'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 84,\r\n to: 140,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'yellow'],\r\n [1, 'green'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 140,\r\n to: 200,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.1, 'green'],\r\n [1, 'green'],\r\n ],\r\n },\r\n },\r\n];\r\n\r\nexport const TRACWHEEL_GRADIENT = [\r\n {\r\n from: 0,\r\n to: 150,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [1, 'green'],\r\n [1, 'green'],\r\n ],\r\n },\r\n },\r\n];\r\n\r\nexport const TRACARM_GRADIENT = [\r\n {\r\n from: 0,\r\n to: 140,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'green'],\r\n [1, 'red'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 140,\r\n to: 150,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'red'],\r\n [1, 'red'],\r\n ],\r\n },\r\n },\r\n];\r\n\r\nexport const DDRRPM_GRADIENT = [\r\n {\r\n from: 0,\r\n to: 2000,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'red'],\r\n [1, 'yellow'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 2000,\r\n to: 4000,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.9, 'yellow'],\r\n [1, 'green'],\r\n ],\r\n },\r\n },\r\n {\r\n from: 4000,\r\n to: 5000,\r\n color: {\r\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\r\n stops: [\r\n [0.1, 'green'],\r\n [1, 'green'],\r\n ],\r\n },\r\n },\r\n];\r\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\r\n\r\nimport Highcharts from 'highcharts';\r\nimport HighchartsMore from 'highcharts/highcharts-more';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport HighchartsBullet from 'highcharts/modules/bullet';\r\nimport { Grid, withStyles, Typography } from '@material-ui/core';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nHighchartsMore(Highcharts);\r\nHighchartsBullet(Highcharts);\r\n\r\nconst MetalMillingChart = ({\r\n classes,\r\n type,\r\n value,\r\n target,\r\n min,\r\n max,\r\n chartGradient,\r\n}) => {\r\n const chartComponent = useRef(null);\r\n const theme = useTheme();\r\n\r\n const updateSeriesData = useCallback((data) => {\r\n const chart = chartComponent.current.chart;\r\n\r\n const matchingSeries = chart.series.filter(\r\n (series) => series.name === 'value',\r\n );\r\n let dataToSet = {\r\n target: data,\r\n };\r\n matchingSeries[0].setData([dataToSet]);\r\n\r\n chart.redraw();\r\n chart.reflow();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (target) {\r\n updateSeriesData(target);\r\n }\r\n }, [target, updateSeriesData]);\r\n\r\n const [chartOptions] = useState({\r\n chart: {\r\n inverted: true,\r\n type: 'bullet',\r\n backgroundColor: '',\r\n marginTop: 0,\r\n marginLeft: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n },\r\n title: {\r\n text: '',\r\n },\r\n xAxis: {\r\n labels: {\r\n enabled: false,\r\n style: {\r\n color: theme.palette.common.white,\r\n fontSize: '50px',\r\n },\r\n },\r\n },\r\n tooltip: {\r\n enabled: true,\r\n },\r\n yAxis: {\r\n labels: {\r\n enabled: false,\r\n },\r\n height: '50%',\r\n top: '25%',\r\n min: min,\r\n max: max,\r\n gridLineWidth: 0,\r\n plotBands: chartGradient,\r\n title: '',\r\n },\r\n series: [\r\n {\r\n name: 'value',\r\n data: [\r\n {\r\n target: target,\r\n },\r\n ],\r\n labels: {},\r\n },\r\n ],\r\n plotOptions: {\r\n series: {\r\n borderWidth: 0,\r\n color: theme.palette.common.black,\r\n targetOptions: {\r\n height: 5,\r\n width: '1000%',\r\n color: theme.palette.common.white,\r\n },\r\n },\r\n },\r\n credits: {\r\n enabled: false,\r\n },\r\n exporting: {\r\n enabled: false,\r\n },\r\n legend: {\r\n enabled: false,\r\n align: 'right',\r\n verticalAlign: 'middle',\r\n layout: 'vertical',\r\n itemStyle: {\r\n fontSize: 40,\r\n color: theme.palette.common.white,\r\n },\r\n symbolPadding: 0,\r\n symbolWidth: 0,\r\n symbolHeight: 0,\r\n squareSymbol: false,\r\n },\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n {type}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {value}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n font: {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MetalMillingChart);\r\n","import { useEffect, useState } from 'react';\r\nimport { Grid, withStyles, Typography } from '@material-ui/core';\r\n\r\nimport {\r\n ARM,\r\n WOP,\r\n WHEEL,\r\n DDRRPM,\r\n TORQUE,\r\n WOPRPM,\r\n WOB_GRADIENT,\r\n BITRPM_GRADIENT,\r\n DDRRPM_GRADIENT,\r\n TORQUE_GRADIENT,\r\n TRACARM_GRADIENT,\r\n TRACWHEEL_GRADIENT,\r\n} from 'features/projects/dashboard/components/dashboards/metalMilling/constants';\r\n\r\nimport MetalMillingChart from 'features/projects/dashboard/components/dashboards/metalMilling/MetalMillingChart';\r\n\r\nconst initialData = {\r\n arm: 0,\r\n wob: 0,\r\n wheel: 0,\r\n torque: 0,\r\n ddrRpm: 0,\r\n bitRpm: 0,\r\n};\r\n\r\nconst MetalMillingChartsContainer = ({\r\n classes,\r\n registerDataPointsHandler,\r\n}) => {\r\n const [data, setData] = useState(initialData);\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(setData);\r\n }, [setData, registerDataPointsHandler]);\r\n\r\n return (\r\n \r\n \r\n TRAC\r\n \r\n \r\n \r\n \r\n DDR\r\n \r\n \r\n \r\n \r\n BIT\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n height: '100%',\r\n },\r\n graphsContainer: {\r\n overflow: 'auto',\r\n border: '2px solid gray',\r\n borderRadius: 10,\r\n paddingTop: 10,\r\n paddingBottom: 10,\r\n height: '100%',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MetalMillingChartsContainer);\r\n","import { Box, Grid, withStyles } from '@material-ui/core';\r\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\r\n\r\nimport TelemetryGauge from 'features/projects/dashboard/components/dashboards/metalMilling/TelemetryGauge';\r\nimport MetalMillingROP from 'features/projects/dashboard/components/dashboards/metalMilling/MetalMillingROP';\r\nimport DrillModelContainer from 'features/projects/dashboard/components/dashboards/metalMilling/DrillModelContainer';\r\nimport MetalMillingChartsContainer from 'features/projects/dashboard/components/dashboards/metalMilling/MetalMillingChartsContainer';\r\n\r\nconst MetalMillingDashBoardContainer = ({\r\n classes,\r\n registerDataPointsHandler,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n icon: {\r\n fill: theme.altus.components.Dashboards.metalMilling.icon,\r\n fontSize: theme.typography.h2.fontSize,\r\n },\r\n container: {\r\n maxWidth: 'none',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MetalMillingDashBoardContainer);\r\n","import useMetalMillingHubConnection from 'features/projects/dashboard/hooks/useMetalMillingHubConnection';\r\nimport MetalMillingDashboardContainer from 'features/projects/dashboard/components/dashboards/metalMilling/MetalMillingDashboardContainer';\r\n\r\nconst MetalMillingDashboardController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { registerDataPointsHandler } = useMetalMillingHubConnection(\r\n projectId,\r\n projectDashboardId,\r\n );\r\n\r\n return renderSlots(\r\n ,\r\n );\r\n};\r\n\r\nexport default MetalMillingDashboardController;\r\n","import { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport takeLast from 'lodash/last';\r\nimport Highcharts from 'highcharts';\r\nimport takeFirst from 'lodash/first';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nimport { updateSeriesData } from 'utils/dashboard.util';\r\nimport winchHighchartsTheme from 'features/projects/dashboard/components/dashboards/winch/winch.highcharts.theme';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst { fontColor, defaultFontSize } = winchHighchartsTheme.style;\r\n\r\nconst DashboardGaugeChart = ({\r\n curve,\r\n startAngle = 0,\r\n registerDataPointsHandler,\r\n}) => {\r\n const theme = useTheme();\r\n const chartComponent = useRef(null);\r\n\r\n const onReceiveDataPoints = useCallback(\r\n (take) => (readings) =>\r\n updateSeriesData(chartComponent, readings, (reading, serie) => {\r\n const data = take(reading.data);\r\n\r\n if (!data) return;\r\n\r\n serie.setData(\r\n [data],\r\n false, // do not redraw, updateSeriesData will handle that\r\n );\r\n }),\r\n [],\r\n );\r\n\r\n const onReceiveInitialData = useMemo(\r\n () => onReceiveDataPoints(takeLast),\r\n [onReceiveDataPoints],\r\n );\r\n\r\n const onReceiveData = useMemo(\r\n () => onReceiveDataPoints(takeFirst),\r\n [onReceiveDataPoints],\r\n );\r\n\r\n const [chartOptions] = useState(\r\n Highcharts.merge(false, winchHighchartsTheme, {\r\n chart: {\r\n type: 'gauge',\r\n style: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n title: {\r\n text: null,\r\n },\r\n series: [\r\n {\r\n id: curve.get('id'),\r\n unit: curve.get('unit'),\r\n name: curve.get('name'),\r\n data: [[null, null, 0]], // [timestamp, depth, y]\r\n },\r\n ],\r\n subtitle: {\r\n text: null,\r\n },\r\n pane: {\r\n startAngle,\r\n background: {\r\n borderWidth: 1,\r\n outerRadius: '105%',\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n },\r\n plotOptions: {\r\n gauge: {\r\n dial: {\r\n borderColor: curve.get('color'),\r\n backgroundColor: curve.get('color'),\r\n },\r\n },\r\n },\r\n yAxis: {\r\n minorTickInterval: 'auto',\r\n minorTickWidth: 0,\r\n minorTickLength: 0,\r\n minorTickPosition: 'inside',\r\n minorTickColor: theme.palette.secondary.main,\r\n lineWidth: 0,\r\n tickPixelInterval: 100,\r\n tickWidth: 2,\r\n tickPosition: 'inside',\r\n tickLength: 25,\r\n tickColor: theme.palette.secondary.main,\r\n tickmarkPlacement: 'on',\r\n gridZIndex: 4,\r\n labels: {\r\n step: 2,\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n formatter: function () {\r\n return this.value;\r\n },\r\n showFirstLabel: false,\r\n },\r\n softMax: curve.get('maxValue'),\r\n softMin: curve.get('minValue'),\r\n title: {\r\n align: 'middle',\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n text: curve.get('caption'),\r\n },\r\n },\r\n tooltip: {\r\n enabled: false,\r\n },\r\n }),\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveInitialData, onReceiveData);\r\n }, [onReceiveData, onReceiveInitialData, registerDataPointsHandler]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nDashboardGaugeChart.propTypes = {\r\n startAngle: PropTypes.number,\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default DashboardGaugeChart;\r\n","import PropTypes from 'prop-types';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport highchartsTheme from 'layout/highcharts.theme';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport DashboardGaugeChart from 'features/projects/dashboard/components/charts/DashboardGaugeChart';\r\n\r\nconst filterSimulationCurves = (curve) =>\r\n curve.get('source') !== CheetahJobSource.SIMULATION;\r\n\r\nconst DashboardGaugeChartsContainer = ({\r\n curves,\r\n classes,\r\n registerDataPointsHandler,\r\n}) => {\r\n if (!curves) {\r\n return (\r\n \r\n \r\n \r\n No data to display\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {curves\r\n .take(8)\r\n .filter(filterSimulationCurves)\r\n .map((curve) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nDashboardGaugeChartsContainer.propTypes = {\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '100%',\r\n overflow: 'auto',\r\n padding: theme.spacing(1),\r\n },\r\n gaugeContainer: {\r\n overflow: 'auto',\r\n height: '100%',\r\n },\r\n noData: {\r\n ...highchartsTheme.noData.style,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(DashboardGaugeChartsContainer);\r\n","import * as THREE from 'three';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst ThreeJsManager = (canvasNode) => {\r\n const renderer = new THREE.WebGLRenderer({\r\n alpha: true,\r\n antialias: true,\r\n canvas: canvasNode,\r\n });\r\n\r\n // Set transparent background\r\n const alpha = 0;\r\n renderer.setClearColor(theme.palette.common.white, alpha);\r\n\r\n // Assign the renderer instance to a global variable\r\n window.renderer = renderer;\r\n\r\n const scenesInfo = {};\r\n\r\n const addScene = (sceneKey, sceneInfo) => {\r\n if (scenesInfo[sceneKey]) {\r\n disposeScene(sceneKey);\r\n }\r\n\r\n scenesInfo[sceneKey] = sceneInfo;\r\n };\r\n\r\n const updateScene = (sceneKey, sceneUpdater) => {\r\n const sceneInfo = scenesInfo[sceneKey];\r\n\r\n if (!sceneInfo) return;\r\n\r\n invokeIfFunction(sceneUpdater, sceneInfo);\r\n };\r\n\r\n const disposeScene = (sceneKey) => {\r\n const sceneInfo = scenesInfo[sceneKey];\r\n\r\n if (!sceneInfo) return;\r\n\r\n const { scene, camera } = sceneInfo;\r\n\r\n scene.children.forEach((child) => {\r\n invokeIfFunction(child?.dispose);\r\n scene.remove(child);\r\n });\r\n\r\n invokeIfFunction(camera?.dispose);\r\n invokeIfFunction(scene?.geometry?.dispose);\r\n invokeIfFunction(scene?.geometry?.map?.dispose);\r\n invokeIfFunction(scene?.geometry?.texture?.dispose);\r\n\r\n delete scenesInfo[sceneKey];\r\n };\r\n\r\n const renderScene = ({ scene, camera, domElement }) => {\r\n if (!renderer || !scene || !camera || !domElement) {\r\n //Do nothing\r\n return;\r\n }\r\n\r\n const canvas = renderer.domElement;\r\n\r\n const {\r\n left: domElementLeft,\r\n right: domElementRight,\r\n top: domElementTop,\r\n bottom: domElementBottom,\r\n width: domElementWidth,\r\n height: domElementHeight,\r\n } = domElement.getBoundingClientRect();\r\n\r\n const { width: canvasWidth, height: canvasHeight } =\r\n canvas.getBoundingClientRect();\r\n\r\n const isOffscreen =\r\n domElementTop < 0 ||\r\n domElementBottom > canvasHeight ||\r\n domElementLeft < 0 ||\r\n domElementRight > canvasWidth;\r\n\r\n if (isOffscreen) {\r\n // Don't render if the domElement of the scene is offscreen.\r\n return;\r\n }\r\n\r\n camera.aspect = domElementWidth / domElementHeight;\r\n camera.updateProjectionMatrix();\r\n\r\n const positiveYUpBottom = canvasHeight - domElementBottom;\r\n\r\n renderer.setScissor(\r\n domElementLeft,\r\n positiveYUpBottom,\r\n domElementWidth,\r\n domElementHeight,\r\n );\r\n renderer.setViewport(\r\n domElementLeft,\r\n positiveYUpBottom,\r\n domElementWidth,\r\n domElementHeight,\r\n );\r\n\r\n renderer.render(scene, camera);\r\n };\r\n\r\n const resizeRendererToDisplaySize = (renderer) => {\r\n const canvas = renderer.domElement;\r\n\r\n const clientWidth = canvas.clientWidth;\r\n const clientHeight = canvas.clientHeight;\r\n\r\n const needResize =\r\n canvas.width !== clientWidth || canvas.height !== clientHeight;\r\n\r\n if (needResize) {\r\n renderer.setSize(clientWidth, clientHeight, false);\r\n }\r\n\r\n return needResize;\r\n };\r\n\r\n //Animation loop.\r\n let frameId;\r\n const render = () => {\r\n resizeRendererToDisplaySize(renderer);\r\n\r\n renderer.setScissorTest(false);\r\n renderer.clear(true, true);\r\n renderer.setScissorTest(true);\r\n\r\n Object.values(scenesInfo).forEach(renderScene);\r\n\r\n frameId = requestAnimationFrame(render);\r\n };\r\n\r\n render();\r\n\r\n const dispose = () => {\r\n if (!renderer) return;\r\n\r\n cancelAnimationFrame(frameId);\r\n\r\n Object.keys(scenesInfo).forEach(disposeScene);\r\n\r\n renderer.dispose();\r\n renderer.forceContextLoss();\r\n };\r\n\r\n return {\r\n dispose,\r\n addScene,\r\n updateScene,\r\n disposeScene,\r\n };\r\n};\r\n\r\nexport default ThreeJsManager;\r\n","import ThreeJsManager from 'app/threeJs/ThreeJsManager';\r\n\r\nimport {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useContext,\r\n useCallback,\r\n} from 'react';\r\n\r\n// Components outside the provider will get {} when using the context.\r\nconst ThreeJsContext = createContext({});\r\n\r\n// Components inside the ThreeJsContext will share the same canvas, which will be transparent and take the whole viewport.\r\n// We 'escape' the React world by using a plain JS function called the ThreeJsManager, which is in charge of keeping track of the scenes\r\n// and, more importantly, running the 'animation loop'.\r\n// The ThreeJSManager is accessed by the children using the context API, and can then call for example addScene() or disposeScene().\r\n// When adding a scene, the manager expects not only the THREE.Scene instance, but also the dom element that will tell where in the viewport\r\n// that scene should be rendered.\r\n// Ref.: https://threejsfundamentals.org/threejs/lessons/threejs-multiple-scenes.html\r\nexport const useThreeJsManager = () => {\r\n const manager = useContext(ThreeJsContext);\r\n\r\n return manager;\r\n};\r\n\r\nconst ThreeJsManagerProvider = ({ children }) => {\r\n const [manager, setManager] = useState();\r\n\r\n const canvasRef = useCallback((canvasNode) => {\r\n if (canvasNode) {\r\n setManager(ThreeJsManager(canvasNode));\r\n }\r\n }, []);\r\n\r\n useEffect(() => () => manager?.dispose(), [manager]);\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default ThreeJsManagerProvider;\r\n","import projectService from 'services/project.service';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport { PROJECT_WELLBORE_ACTIONS } from 'features/projects/wellbore/projectWellbore.constants';\r\n\r\nexport const projectWellboreOnLoad = (projectId) => (dispatch) => {\r\n const payload = Promise.all([\r\n dispatch(getProjectWellbore(projectId)),\r\n dispatch(getProjectWellboreTrajectory(projectId)),\r\n ]);\r\n\r\n dispatch({\r\n type: PROJECT_WELLBORE_ACTIONS.PROJECT_WELLBORE_ON_LOAD,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getProjectWellbore = (projectId) => (dispatch) => {\r\n const payload = projectService\r\n .getWellboreByProject(projectId)\r\n .then((wellbore) => {\r\n dispatch(receiveProjectWellbore(wellbore));\r\n\r\n return wellbore;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: PROJECT_WELLBORE_ACTIONS.GET_PROJECT_WELLBORE,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getProjectWellboreTrajectory = (projectId) => (dispatch) => {\r\n const payload = projectService\r\n .getWellboreTrajectoryByProject(projectId)\r\n .then((trajectory) => {\r\n dispatch(receiveProjectWellboreTrajectory(trajectory));\r\n\r\n return trajectory;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: PROJECT_WELLBORE_ACTIONS.GET_PROJECT_WELLBORE_TRAJECTORY,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveProjectWellbore = (wellbore) => ({\r\n payload: wellbore,\r\n type: PROJECT_WELLBORE_ACTIONS.RECEIVE_PROJECT_WELLBORE,\r\n});\r\n\r\nexport const receiveProjectWellboreTrajectory = (wellboreTrajectory) => ({\r\n payload: wellboreTrajectory,\r\n type: PROJECT_WELLBORE_ACTIONS.RECEIVE_PROJECT_WELLBORE_TRAJECTORY,\r\n});\r\n\r\nexport const syncProjectWellboreTrajectoryWithLatest =\r\n (projectId) => (dispatch) => {\r\n const payload = () =>\r\n projectService\r\n .syncProjectWellboreTrajectoryWithLatest(projectId)\r\n .then((trajectory) =>\r\n dispatch(receiveProjectWellboreTrajectory(trajectory)),\r\n );\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: PROJECT_WELLBORE_ACTIONS.SYNC_PROJECT_WELLBORE_TRAJECTORY_WITH_LATEST,\r\n notification: {\r\n info: 'Updating...',\r\n success: 'Project survey successfully updated',\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const askProjectWellboreUpdateConfirmation =\r\n ({ onConfirm, onCancel }) =>\r\n (dispatch, getState) => {\r\n const projectStatus = getExecuteStatusFromState(getState());\r\n const simulationsRunCount = projectStatus.get('simulationsRunCount', 0);\r\n\r\n if (!simulationsRunCount) {\r\n return onConfirm();\r\n }\r\n\r\n // If there are some run simulations in the project, ask for confirmation before dispatching the action.\r\n dispatch({\r\n type: PROJECT_WELLBORE_ACTIONS.UPDATE_PROJECT_WELLBORE_CONFIRMATION_DIALOG,\r\n confirmationDialog: {\r\n description: `Updating the project wellbore will clear the results of ${simulationsRunCount} simulation(s). Are you sure you want to proceed?`,\r\n title: 'Warning',\r\n onCancel,\r\n onConfirm,\r\n },\r\n });\r\n };\r\n","import { useRef, useEffect } from 'react';\r\n\r\nexport const between = (x, min, max) => {\r\n const val = x === null || x === undefined ? 0 : x;\r\n return val >= min && val <= max;\r\n};\r\n\r\nexport const usePrevious = (value) => {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n return ref.current;\r\n};\r\n\r\nexport const distanceFromCenter = (x, y) => {\r\n return x - y;\r\n};\r\n\r\nexport const convertMetric = (value, unit) => {\r\n switch (unit) {\r\n case 'ft':\r\n return value / 3.2808;\r\n case 'in':\r\n return value / 39.3701;\r\n case 'cm':\r\n return value / 100;\r\n case 'mm':\r\n return value / 1000;\r\n case 'm':\r\n return value;\r\n\r\n default:\r\n break;\r\n }\r\n};\r\n","import * as THREE from 'three';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nexport const createTextSprite = (text, fontSize = 70) => {\r\n const scale = 30;\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n context.font = `Bold ${fontSize}px Arial`;\r\n const textMetrics = context.measureText(text);\r\n canvas.width = textMetrics.width + 10;\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n const texture = new THREE.Texture(canvas);\r\n\r\n context.font = `Bold ${fontSize}px Arial`;\r\n context.fillStyle = theme.palette.secondary.light;\r\n context.fillText(text, 10, fontSize);\r\n\r\n texture.minFilter = THREE.LinearFilter;\r\n texture.magFilter = THREE.LinearFilter;\r\n texture.needsUpdate = true;\r\n\r\n const sprite = new THREE.Sprite(\r\n new THREE.SpriteMaterial({\r\n map: texture,\r\n transparent: true,\r\n depthTest: true,\r\n depthWrite: true,\r\n }),\r\n );\r\n sprite.material.alphaTest = 0.1;\r\n sprite.name = text;\r\n sprite.scale.set(scale, scale, scale);\r\n sprite.geometry.computeBoundingBox();\r\n\r\n return sprite;\r\n};\r\n","/* eslint-disable */\r\n/** disabling eslint to ignore exhaustive deps check as it was causing redundant hook execution\r\n */\r\nimport * as THREE from 'three';\r\nimport { useThree } from '@react-three/fiber';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { createTextSprite } from 'app/components/WellboreContextualization/RenderNippleText';\r\n\r\nconst objectUp = new THREE.Object3D().up;\r\nconst reusableVector = new THREE.Vector3();\r\nconst reusableMatrix = new THREE.Matrix4();\r\n\r\nconst orientationMultiplier = new THREE.Matrix4().set(\r\n 1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n 0,\r\n -1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n);\r\nconst RenderNipples = ({\r\n v1,\r\n v2,\r\n length,\r\n material,\r\n radius = 30,\r\n outerRadius,\r\n name,\r\n nippleText,\r\n nippleTextRef,\r\n}) => {\r\n const meshRef = useRef();\r\n const { scene } = useThree();\r\n const direction = reusableVector.subVectors(v1, v2);\r\n useEffect(() => {\r\n if (!v1 || !v2) return;\r\n reusableMatrix.lookAt(v1, v2, objectUp);\r\n reusableMatrix.multiply(orientationMultiplier);\r\n }, [v1, v2]);\r\n\r\n useEffect(() => {\r\n if (meshRef.current) {\r\n meshRef.current.applyMatrix4(reusableMatrix);\r\n meshRef.current.rotateX(Math.PI / 2);\r\n meshRef.current.position.set(\r\n (v1.x + v2.x) / 2,\r\n (v1.y + v2.y) / 2,\r\n (v1.z + v2.z) / 2,\r\n );\r\n\r\n const text = createTextSprite(nippleText, 40);\r\n text.position.set(\r\n meshRef.current.position.x,\r\n meshRef.current.position.y + 40,\r\n meshRef.current.position.z,\r\n );\r\n if (nippleTextRef.current.length) {\r\n for (const existingSprite of nippleTextRef.current) {\r\n if (\r\n checkIntersection(text, existingSprite) &&\r\n text.name !== existingSprite.name\r\n ) {\r\n text.position.set(\r\n text.position.x,\r\n text.position.y + 50,\r\n text.position.z,\r\n );\r\n }\r\n }\r\n }\r\n nippleTextRef.current.push(text);\r\n scene.add(text);\r\n }\r\n }, [meshRef, v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, nippleText, scene]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default RenderNipples;\r\n\r\nconst getGeometry = (length, outerRadius, radius) => {\r\n const arcShape = new THREE.Shape()\r\n .moveTo(0, 0)\r\n .absarc(0, 0, outerRadius, 0, Math.PI * 2);\r\n\r\n const holePath = new THREE.Path()\r\n .moveTo(0, 0)\r\n .absarc(0, 0, radius, 0, Math.PI * 2);\r\n\r\n arcShape.holes.push(holePath);\r\n\r\n const geometry = new THREE.ExtrudeBufferGeometry(arcShape, {\r\n depth: length,\r\n bevelEnabled: true,\r\n bevelSegments: 2,\r\n steps: 2,\r\n bevelSize: 1,\r\n bevelThickness: 1,\r\n });\r\n return geometry;\r\n};\r\n\r\nexport const checkIntersection = (sprite1, sprite2) => {\r\n sprite1.updateMatrixWorld();\r\n sprite2.updateMatrixWorld();\r\n const box1 = new THREE.Box3().setFromObject(sprite1);\r\n const box2 = new THREE.Box3().setFromObject(sprite2);\r\n\r\n return box1.intersectsBox(box2);\r\n};\r\n\r\nexport const createNewNipple = ({ length, material, radius, outerRadius }) => {\r\n material.side = THREE.DoubleSide;\r\n\r\n const arcShape = new THREE.Shape()\r\n .moveTo(0, 0)\r\n .absarc(0, 0, outerRadius, 0, Math.PI * 2);\r\n\r\n const holePath = new THREE.Path()\r\n .moveTo(0, 0)\r\n .absarc(0, 0, radius, 0, Math.PI * 2);\r\n\r\n arcShape.holes.push(holePath);\r\n\r\n const geometry = getGeometry(length, outerRadius, radius);\r\n\r\n material.needsUpdate = true;\r\n const mesh = new THREE.Mesh(geometry, material);\r\n\r\n return mesh;\r\n};\r\n","import * as THREE from 'three';\r\nimport ThreeJsUtils from 'app/threeJs/ThreeJsUtils';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport {\r\n between,\r\n convertMetric,\r\n} from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\r\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\r\nimport { WellboreSectionType } from 'features/wells/sections/wellboreSection.constants';\r\nimport {\r\n checkIntersection,\r\n createNewNipple,\r\n} from 'app/components/WellboreContextualization/RenderNipples';\r\nimport { createTextSprite } from 'app/components/WellboreContextualization/RenderNippleText';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst upVector = new THREE.Vector3(0, 1, 0);\r\nconst startVector = new THREE.Vector3();\r\nconst endVector = new THREE.Vector3();\r\nconst TrajectoryCylinderPrefix = 'trajectory-cylinder';\r\nconst src = `${PUBLIC_ASSETS_URL}/textures/envMap.hdr`;\r\n\r\nconst cylinderList = [];\r\nconst nippleList = [];\r\nconst existingSprites = [];\r\n\r\nconst loaderRGBE = new RGBELoader();\r\nloaderRGBE.setDataType(THREE.UnsignedByteType);\r\nconst envMap = loaderRGBE.load(src);\r\nenvMap.encoding = THREE.sRGBEncoding;\r\nenvMap.minFilter = THREE.NearestFilter;\r\nenvMap.magFilter = THREE.LinearFilter;\r\nenvMap.wrapS = THREE.ClampToEdgeWrapping;\r\nenvMap.wrapT = THREE.ClampToEdgeWrapping;\r\nconst loader = new THREE.TextureLoader();\r\nconst metalAOMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_ambientOcclusion.jpg`,\r\n);\r\nconst metalDispMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_height.png`,\r\n);\r\nconst metalNormalMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_normal.jpg`,\r\n);\r\nconst metalMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_basecolor.jpg`,\r\n);\r\nconst metalRoughnessMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_roughness.jpg`,\r\n);\r\nconst metalMetalnessMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_metallic.jpg`,\r\n);\r\n\r\nconst Materials = {\r\n maximumWorkingDepth: new THREE.MeshBasicMaterial({\r\n color:\r\n theme.altus.components.ContextualizedWell.trajectory.maximumWorkingDepth,\r\n }),\r\n targetDepth: new THREE.MeshBasicMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.targetDepth,\r\n }),\r\n dhsv: new THREE.MeshBasicMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.dhsv,\r\n }),\r\n currentDepth: new THREE.MeshStandardMaterial({\r\n metalness: 1,\r\n roughness: 0.5,\r\n color: theme.altus.components.ContextualizedWell.trajectory.depth,\r\n map: metalMap,\r\n aoMap: metalAOMap,\r\n displacementMap: metalDispMap,\r\n normalMap: metalNormalMap,\r\n roughnessMap: metalRoughnessMap,\r\n metalnessMap: metalMetalnessMap,\r\n envMapIntensity: 4,\r\n }),\r\n grid: new THREE.MeshBasicMaterial({\r\n color: theme.palette.secondary.darkgrey,\r\n }),\r\n base: new THREE.MeshStandardMaterial({\r\n color: theme.palette.grey[100],\r\n side: THREE.DoubleSide,\r\n metalness: 1,\r\n roughness: 0.4,\r\n map: metalMap,\r\n aoMap: metalAOMap,\r\n displacementMap: metalDispMap,\r\n normalMap: metalNormalMap,\r\n roughnessMap: metalRoughnessMap,\r\n metalnessMap: metalMetalnessMap,\r\n envMapIntensity: 4,\r\n }),\r\n cable: new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.base,\r\n roughness: 0,\r\n metalness: 1,\r\n side: THREE.DoubleSide,\r\n envMapIntensity: 2,\r\n }),\r\n};\r\n\r\nconst WellGraphAndGuagesTrajectoryScene = ({\r\n zoom,\r\n theme,\r\n maxTVD,\r\n domElement,\r\n maxNorthEast,\r\n hideAxisLabels,\r\n trajectoryPoints,\r\n hideGrid = false,\r\n disableOrbitControls = false,\r\n displayCardinalPoints,\r\n depthsOfInterest = [],\r\n wellboreSections,\r\n}) => {\r\n const scene = new THREE.Scene();\r\n const cylinderArray = [];\r\n\r\n const light = new THREE.AmbientLight(0x000000, 1);\r\n scene.add(light);\r\n\r\n const renderer = window.renderer;\r\n const pmremGenerator = new THREE.PMREMGenerator(renderer);\r\n pmremGenerator.compileEquirectangularShader();\r\n const envMapPMREM = createPMREM(pmremGenerator, envMap);\r\n scene.environment = envMapPMREM;\r\n\r\n const { camera, orbitControls } = setupCamera({\r\n domElement,\r\n maxNorthEast: maxNorthEast * 1.33,\r\n maxTVD,\r\n zoom,\r\n disableOrbitControls,\r\n scene,\r\n trajectoryPoints,\r\n });\r\n\r\n if (!hideGrid) {\r\n const {\r\n grid,\r\n gridLength,\r\n tickInterval: gridTickInterval,\r\n } = ThreeJsUtils.createGrid({\r\n max: maxNorthEast < 100 ? maxNorthEast * 100 : maxNorthEast,\r\n });\r\n scene.add(grid);\r\n\r\n if (displayCardinalPoints) {\r\n const cardinalPointsLabels = createCardinalPointsLabels({\r\n gridLength,\r\n theme,\r\n });\r\n\r\n cardinalPointsLabels.forEach((label) => {\r\n scene.add(label);\r\n });\r\n }\r\n\r\n const yAxis = createYAxis({ maxTVD });\r\n scene.add(yAxis);\r\n\r\n if (!hideAxisLabels) {\r\n const yAxisLabels = createYAxisLabels({\r\n maxTVD,\r\n theme,\r\n tickInterval: gridTickInterval,\r\n });\r\n yAxisLabels.forEach((label) => {\r\n scene.add(label);\r\n });\r\n }\r\n }\r\n\r\n trajectoryPoints.forEach((previousPoint, index) => {\r\n const currentPoint = trajectoryPoints.get(index + 1);\r\n\r\n // Bottom reached\r\n if (!currentPoint) return false;\r\n\r\n wellboreSections.forEach((value) => {\r\n if (\r\n between(\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n value.getIn(['top', 'value']),\r\n value.getIn(['top', 'unit']),\r\n ),\r\n convertMetric(\r\n value.getIn(['bottom', 'value']),\r\n value.getIn(['bottom', 'unit']),\r\n ),\r\n ) &&\r\n value.get('type') !== WellboreSectionType.OPEN_HOLE\r\n ) {\r\n cylinderList.push({\r\n key: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n value: {\r\n previousPoint,\r\n maxTVD,\r\n currentPoint,\r\n index,\r\n thetaStart: 0,\r\n radius:\r\n convertMetric(\r\n value.getIn(['innerDiameter', 'value']),\r\n value.getIn(['innerDiameter', 'unit']),\r\n ) * 100,\r\n },\r\n });\r\n }\r\n for (const nippleValue of value.get('wellboreSectionNipples').values()) {\r\n if (\r\n nippleValue.get('isNipple') &&\r\n between(\r\n convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n )\r\n ) {\r\n const index = nippleList.findIndex(\r\n (nip) =>\r\n nip.key ===\r\n convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n );\r\n\r\n if (index === -1) {\r\n nippleList.push({\r\n key: convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n value: {\r\n startVector,\r\n endVector,\r\n length: convertMetric(\r\n nippleValue.get('length').roundedValue,\r\n nippleValue.get('length').unit,\r\n ),\r\n radius:\r\n convertMetric(\r\n nippleValue.get('innerDiameter').roundedValue,\r\n nippleValue.get('innerDiameter').unit,\r\n ) * 100,\r\n outerRadius:\r\n convertMetric(\r\n value.get('innerDiameter').roundedValue,\r\n value.get('innerDiameter').unit,\r\n ) * 99,\r\n thetaStart: 0,\r\n name: `nipple-${convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n )}`,\r\n material: Materials.cable,\r\n spriteText: nippleValue.get('type'),\r\n top: convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n cylinderList.forEach((cylinder) => {\r\n const object = createTrajectoryCylinder(cylinder.value);\r\n scene.add(object);\r\n cylinderArray.push(object);\r\n });\r\n\r\n cylinderArray.forEach((cylinder) => {\r\n if (!cylinder.name.startsWith('trajectory')) return;\r\n\r\n nippleList.forEach((nipple) => {\r\n if (\r\n between(\r\n nipple.key,\r\n cylinder.data.measuredDepthStart,\r\n cylinder.data.measuredDepthEnd,\r\n )\r\n ) {\r\n const nippleInScene = scene.getObjectByName(\r\n `nipple-${nipple.value.top}`,\r\n );\r\n if (!nippleInScene) {\r\n const diff =\r\n nipple.value.top -\r\n (cylinder.data.measuredDepthStart +\r\n cylinder.data.measuredDepthEnd) /\r\n 2;\r\n const newNipple = createNewNipple(nipple.value);\r\n newNipple.name = nipple.value.name;\r\n newNipple.position.y += nipple.value.length / 2;\r\n cylinder.add(newNipple);\r\n newNipple.translateY(diff);\r\n newNipple.rotateX(Math.PI / 2);\r\n cylinder.updateMatrixWorld();\r\n\r\n const text = createTextSprite(nipple.value.spriteText, 40);\r\n newNipple.add(text);\r\n text.position.y += nipple.value.outerRadius + 20;\r\n if (existingSprites) {\r\n for (const existingSprite of existingSprites) {\r\n if (\r\n checkIntersection(text, existingSprite) &&\r\n text.name !== existingSprite.name\r\n ) {\r\n text.position.set(\r\n text.position.x,\r\n text.position.y + existingSprite.scale.y / 2,\r\n text.position.z,\r\n );\r\n }\r\n }\r\n }\r\n existingSprites.push(text);\r\n }\r\n }\r\n });\r\n });\r\n\r\n const marker = maybeCreateMarker({\r\n previousPoint,\r\n currentPoint,\r\n depthsOfInterest,\r\n });\r\n\r\n if (marker) {\r\n scene.add(marker);\r\n }\r\n });\r\n\r\n return { scene, camera, domElement, orbitControls };\r\n};\r\n\r\nconst setupCamera = ({\r\n domElement,\r\n maxNorthEast,\r\n maxTVD,\r\n zoom = 2,\r\n disableOrbitControls = false,\r\n}) => {\r\n const clientWidth = domElement.clientWidth;\r\n const clientHeight = domElement.clientHeight;\r\n\r\n const camera = new THREE.PerspectiveCamera(\r\n 50,\r\n clientWidth / clientHeight,\r\n 0.1,\r\n (maxNorthEast + maxTVD) * 4,\r\n );\r\n\r\n camera.up = upVector;\r\n camera.position.z = zoom * maxNorthEast;\r\n camera.position.y = 2 * maxTVD;\r\n\r\n const orbitControls = new OrbitControls(camera, domElement);\r\n\r\n orbitControls.maxDistance =\r\n maxNorthEast < 100\r\n ? (zoom + 2) * maxNorthEast * 100\r\n : (zoom + 2) * maxNorthEast;\r\n orbitControls.enablePan = true;\r\n orbitControls.screenSpacePanning = true;\r\n orbitControls.enableKeys = false;\r\n orbitControls.enabled = !disableOrbitControls;\r\n\r\n return { camera, orbitControls };\r\n};\r\n\r\nconst createYAxis = ({ maxTVD }) => {\r\n startVector.set(0, 0, 0);\r\n endVector.set(0, maxTVD, 0);\r\n\r\n const yLine = ThreeJsUtils.createCylinder({\r\n v1: startVector,\r\n v2: endVector,\r\n material: Materials.grid,\r\n radius: 3,\r\n });\r\n\r\n return yLine;\r\n};\r\n\r\nconst createYAxisLabels = ({ maxTVD, theme, tickInterval }) => {\r\n const yTicks = ThreeJsUtils.getTicks({ max: maxTVD, tickInterval });\r\n const { fontFamily } = theme;\r\n\r\n return yTicks.map((tick) => {\r\n const yAxisLabel = ThreeJsUtils.createTextSprite({\r\n text: tick,\r\n fontFamily,\r\n });\r\n\r\n yAxisLabel.position.set(-50, maxTVD - tick, -50);\r\n\r\n return yAxisLabel;\r\n });\r\n};\r\n\r\nconst createCardinalPointsLabels = ({ gridLength, theme }) => {\r\n const { fontFamily } = theme;\r\n const middle = gridLength / 2.0;\r\n\r\n const northLabel = ThreeJsUtils.createTextSprite({ text: 'N', fontFamily });\r\n northLabel.position.z = -middle;\r\n\r\n const southLabel = ThreeJsUtils.createTextSprite({ text: 'S', fontFamily });\r\n southLabel.position.z = middle;\r\n southLabel.position.x = 0;\r\n\r\n const westLabel = ThreeJsUtils.createTextSprite({ text: 'W', fontFamily });\r\n westLabel.position.z = 0;\r\n westLabel.position.x = -middle;\r\n\r\n const eastLabel = ThreeJsUtils.createTextSprite({ text: 'E', fontFamily });\r\n eastLabel.position.z = 0;\r\n eastLabel.position.x = middle;\r\n\r\n return [northLabel, southLabel, westLabel, eastLabel];\r\n};\r\n\r\nconst createTrajectoryCylinder = ({\r\n previousPoint,\r\n currentPoint,\r\n maxTVD,\r\n thetaStart,\r\n radius,\r\n}) => {\r\n startVector.set(\r\n convertMetric(\r\n previousPoint.getIn(['eastWest', 'value']),\r\n previousPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['northSouth', 'value']),\r\n previousPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n endVector.set(\r\n convertMetric(\r\n currentPoint.getIn(['eastWest', 'value']),\r\n currentPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['northSouth', 'value']),\r\n currentPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n const cylinder = ThreeJsUtils.createSemiCylinder({\r\n v1: startVector,\r\n v2: endVector,\r\n material: Materials.base,\r\n radius,\r\n thetaStart,\r\n });\r\n\r\n const measuredDepthStart = convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n );\r\n const measuredDepthEnd = convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n );\r\n cylinder.name = `${TrajectoryCylinderPrefix}-${measuredDepthStart}`;\r\n cylinder.data = {\r\n ...cylinder.data,\r\n measuredDepth: measuredDepthEnd,\r\n measuredDepthStart,\r\n measuredDepthEnd,\r\n };\r\n\r\n return cylinder;\r\n};\r\n\r\nconst maybeCreateMarker = ({\r\n previousPoint,\r\n currentPoint,\r\n depthsOfInterest,\r\n}) => {\r\n const depthOfInterest = depthsOfInterest.find(\r\n ({ depth }) =>\r\n depth &&\r\n depth >=\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ) &&\r\n depth <=\r\n convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n );\r\n\r\n if (!depthOfInterest) return;\r\n\r\n const depthOfInterestCylinder = ThreeJsUtils.createCylinder({\r\n v1: startVector,\r\n v2: endVector,\r\n length: 10,\r\n radius: 80,\r\n material: depthOfInterest.material,\r\n });\r\n\r\n depthOfInterestCylinder.name = depthOfInterest.name;\r\n\r\n return depthOfInterestCylinder;\r\n};\r\n\r\nfunction createPMREM(pmremGenerator, texture) {\r\n const envMap = pmremGenerator.fromEquirectangular(texture).texture;\r\n texture.dispose();\r\n pmremGenerator.dispose();\r\n\r\n return envMap;\r\n}\r\n\r\nexport { Materials, TrajectoryCylinderPrefix };\r\n\r\nexport default WellGraphAndGuagesTrajectoryScene;\r\n","import * as THREE from 'three';\r\nimport ThreeJsUtils from 'app/threeJs/ThreeJsUtils';\r\nimport {\r\n between,\r\n convertMetric,\r\n} from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport { Materials } from 'app/components/WellGraphAndGuages/WellGraphAndGuagesTrajectoryScene';\r\n\r\nexport const BHACablePrefix = 'bha-cable';\r\nexport const BHAPrefix = 'BHA';\r\nexport const BHATool = 'BHATool';\r\nexport const ToolStringGroupName = 'ToolStringGroup';\r\nconst startVector = new THREE.Vector3();\r\nconst endVector = new THREE.Vector3();\r\n\r\nexport const renderCable = ({\r\n trajectoryPoints,\r\n maxTVD,\r\n toolsByToolstringToolId,\r\n BHA_LENGTH,\r\n currentDepth,\r\n}) => {\r\n const toolStringGroup = new THREE.Group();\r\n toolStringGroup.name = ToolStringGroupName;\r\n trajectoryPoints.forEach((previousPoint, index) => {\r\n const currentPoint = trajectoryPoints.get(index + 1);\r\n\r\n // Bottom reached\r\n if (!currentPoint) return false;\r\n\r\n if (\r\n currentDepth.value &&\r\n convertMetric(currentDepth.value, currentDepth.unit) >\r\n convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n )\r\n ) {\r\n const cable = createCable({\r\n previousPoint,\r\n maxTVD: convertMetric(maxTVD.value, maxTVD.unit),\r\n currentPoint,\r\n });\r\n cable.position.y += convertMetric(BHA_LENGTH.value, BHA_LENGTH.unit) / 4;\r\n toolStringGroup.add(cable);\r\n } else if (\r\n currentDepth.value &&\r\n between(\r\n convertMetric(currentDepth.value, currentDepth.unit),\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n )\r\n ) {\r\n const BHA = createToolString({\r\n BHA_LENGTH,\r\n maxTVD: convertMetric(maxTVD.value, maxTVD.unit),\r\n previousPoint,\r\n currentPoint,\r\n toolsByToolstringToolId,\r\n currentDepth: convertMetric(currentDepth.value, currentDepth.unit),\r\n measuredDepthStart: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n measuredDepthEnd: convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n });\r\n toolStringGroup.add(BHA);\r\n }\r\n });\r\n return toolStringGroup;\r\n};\r\n\r\nexport const createCable = ({ previousPoint, currentPoint, maxTVD }) => {\r\n startVector.set(\r\n convertMetric(\r\n previousPoint.getIn(['eastWest', 'value']),\r\n previousPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['northSouth', 'value']),\r\n previousPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n endVector.set(\r\n convertMetric(\r\n currentPoint.getIn(['eastWest', 'value']),\r\n currentPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['northSouth', 'value']),\r\n currentPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n const cylinder = ThreeJsUtils.createCylinder({\r\n v1: startVector,\r\n v2: endVector,\r\n material: Materials.cable,\r\n radius: 0.2,\r\n });\r\n\r\n const measuredDepth = convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n );\r\n cylinder.name = `${BHACablePrefix}-${measuredDepth}`;\r\n cylinder.data = {\r\n ...cylinder.data,\r\n measuredDepth,\r\n };\r\n\r\n return cylinder;\r\n};\r\nexport const createToolString = ({\r\n BHA_LENGTH,\r\n previousPoint,\r\n currentPoint,\r\n maxTVD,\r\n toolsByToolstringToolId,\r\n currentDepth,\r\n measuredDepthStart,\r\n measuredDepthEnd,\r\n}) => {\r\n if (previousPoint && currentPoint) {\r\n startVector.set(\r\n convertMetric(\r\n previousPoint.getIn(['eastWest', 'value']),\r\n previousPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['northSouth', 'value']),\r\n previousPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n endVector.set(\r\n convertMetric(\r\n currentPoint.getIn(['eastWest', 'value']),\r\n currentPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['northSouth', 'value']),\r\n currentPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n }\r\n\r\n const cylinder = ThreeJsUtils.createToolString({\r\n v1: startVector,\r\n v2: endVector,\r\n BHA_LENGTH,\r\n material: Materials.cable,\r\n toolsByToolstringToolId,\r\n });\r\n cylinder.name = `${BHAPrefix}`;\r\n cylinder.position.y += convertMetric(BHA_LENGTH.value, BHA_LENGTH.unit) / 2;\r\n const diff = currentDepth - (measuredDepthStart + measuredDepthEnd) / 2;\r\n cylinder.translateY(diff);\r\n\r\n return cylinder;\r\n};\r\n","import * as THREE from 'three';\r\nimport * as d3Scale from 'd3-scale';\r\nimport * as MuiColors from '@material-ui/core/colors';\r\nimport { BHATool } from 'app/components/WellGraphAndGuages/RenderCableAndBHAScene';\r\nimport { convertMetric } from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\r\n\r\nconst DefaultCylinderRadius = 30;\r\nconst DefaultFontSize = 70;\r\nconst DefaultTickInterval = 500;\r\n\r\n// Object instantiation is expensive, so reuse vectors, matrices and materials as much as posible.\r\nconst objectUp = new THREE.Object3D().up;\r\nconst reusableVector = new THREE.Vector3();\r\nconst reusableMatrix = new THREE.Matrix4();\r\n\r\nconst orientationMultiplier = new THREE.Matrix4().set(\r\n 1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n 0,\r\n -1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n);\r\n\r\nconst createCylinder = ({\r\n v1,\r\n v2,\r\n length,\r\n material,\r\n radius = DefaultCylinderRadius,\r\n}) => {\r\n const direction = reusableVector.subVectors(v1, v2);\r\n\r\n reusableMatrix.lookAt(v1, v2, objectUp);\r\n reusableMatrix.multiply(orientationMultiplier);\r\n\r\n const geometry = new THREE.CylinderBufferGeometry(\r\n radius,\r\n radius,\r\n length ?? direction.length(),\r\n 16,\r\n 1,\r\n );\r\n\r\n const mesh = new THREE.Mesh(geometry, material);\r\n\r\n mesh.applyMatrix4(reusableMatrix);\r\n mesh.position.set((v1.x + v2.x) / 2, (v1.y + v2.y) / 2, (v1.z + v2.z) / 2);\r\n\r\n return mesh;\r\n};\r\n\r\nconst createGrid = ({\r\n max,\r\n min = 0,\r\n axisColor = MuiColors.grey[700],\r\n gridColor = MuiColors.grey[800],\r\n tickInterval = DefaultTickInterval,\r\n}) => {\r\n const xTicks = getTicks({ min, max: max + tickInterval, tickInterval });\r\n const numTicks = (xTicks.length - 1) * 2;\r\n const length = xTicks[xTicks.length - 1] * 2;\r\n\r\n const grid = new THREE.GridHelper(length, numTicks, axisColor, gridColor);\r\n\r\n return { grid, gridLength: length, numTicks, tickInterval };\r\n};\r\n\r\nconst getTicks = ({ max, min = 0, tickInterval = DefaultTickInterval }) => {\r\n const scale = d3Scale.scaleLinear().domain([min, max]);\r\n const ticks = scale.ticks(Math.ceil(max / tickInterval));\r\n\r\n return ticks;\r\n};\r\n\r\nconst createTextSprite = ({ text, fontFamily, fontSize = DefaultFontSize }) => {\r\n const scale = 60;\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n const texture = new THREE.Texture(canvas);\r\n\r\n context.font = `${fontSize}px ${fontFamily}`;\r\n context.fillStyle = MuiColors.blueGrey[100];\r\n context.fillText(text, 0, fontSize);\r\n\r\n texture.minFilter = THREE.LinearFilter;\r\n texture.needsUpdate = true;\r\n\r\n const sprite = new THREE.Sprite(new THREE.SpriteMaterial({ map: texture }));\r\n sprite.scale.set(scale * 10, scale * 5, 1.0);\r\n\r\n return sprite;\r\n};\r\n\r\nconst createSemiCylinder = ({\r\n v1,\r\n v2,\r\n length,\r\n material,\r\n radius = DefaultCylinderRadius,\r\n thetaStart,\r\n}) => {\r\n material.side = THREE.DoubleSide;\r\n const direction = reusableVector.subVectors(v1, v2);\r\n\r\n reusableMatrix.lookAt(v1, v2, objectUp);\r\n reusableMatrix.multiply(orientationMultiplier);\r\n\r\n const geometry = new THREE.CylinderBufferGeometry(\r\n radius,\r\n radius,\r\n length ?? direction.length(),\r\n 16,\r\n 1,\r\n true,\r\n thetaStart,\r\n Math.PI,\r\n );\r\n\r\n material.needsUpdate = true;\r\n const mesh = new THREE.Mesh(geometry, material);\r\n\r\n mesh.applyMatrix4(reusableMatrix);\r\n mesh.position.set((v1.x + v2.x) / 2, (v1.y + v2.y) / 2, (v1.z + v2.z) / 2);\r\n mesh.data = {\r\n startVector: v1,\r\n endVector: v2,\r\n };\r\n\r\n return mesh;\r\n};\r\n\r\nconst createNipple = ({ v1, v2, length, material, radius, outerRadius }) => {\r\n material.side = THREE.DoubleSide;\r\n const direction = reusableVector.subVectors(v1, v2);\r\n\r\n reusableMatrix.lookAt(v1, v2, objectUp);\r\n reusableMatrix.multiply(orientationMultiplier);\r\n\r\n const arcShape = new THREE.Shape()\r\n .moveTo(0, 0)\r\n .absarc(0, 0, outerRadius, 0, Math.PI * 2);\r\n\r\n const holePath = new THREE.Path()\r\n .moveTo(0, 0)\r\n .absarc(0, 0, radius, 0, Math.PI * 2);\r\n\r\n arcShape.holes.push(holePath);\r\n\r\n const geometry = new THREE.ExtrudeBufferGeometry(arcShape, {\r\n depth: length ?? direction.length(),\r\n bevelEnabled: true,\r\n bevelSegments: 2,\r\n steps: 2,\r\n bevelSize: 1,\r\n bevelThickness: 1,\r\n });\r\n\r\n material.needsUpdate = true;\r\n const mesh = new THREE.Mesh(geometry, material);\r\n\r\n mesh.applyMatrix4(reusableMatrix);\r\n mesh.rotateX(Math.PI / 2);\r\n mesh.position.set((v1.x + v2.x) / 2, (v1.y + v2.y) / 2, (v1.z + v2.z) / 2);\r\n\r\n return mesh;\r\n};\r\n\r\nconst createToolString = ({ v1, v2, material, toolsByToolstringToolId }) => {\r\n const tools = new THREE.Group();\r\n const toolObjects = new THREE.Group();\r\n const defaultToolObjects = new THREE.Group();\r\n const loader = new OBJLoader();\r\n let posX = 0;\r\n Object.values(toolsByToolstringToolId).forEach((tool, index) => {\r\n if (tool.sequence === index + 1) {\r\n posX = (\r\n posX -\r\n convertMetric(tool.length.roundedValue, tool.length.unit) / 2\r\n ).toFixed(2);\r\n if (tool.tool3DObjectUrl) {\r\n loader.load(\r\n tool.tool3DObjectUrl,\r\n (toolObj) => {\r\n toolObj.traverse((child) => {\r\n if (child.isMesh) {\r\n child.material = material;\r\n }\r\n });\r\n const boundingBox = new THREE.Box3().setFromObject(toolObj);\r\n\r\n // Compute the center of the bounding box\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n\r\n // Translate all children (meshes) to re-center the group\r\n toolObj.children.forEach((child) => {\r\n child.position.sub(center);\r\n });\r\n toolObj.scale.set(0.001, 0.001, 0.001);\r\n toolObj.key = `${index}-${tool.sequence}`;\r\n toolObj.name = `${BHATool}-${posX}`;\r\n toolObj.position.set(\r\n convertMetric(tool.length.roundedValue, tool.length.unit) / 2,\r\n 0,\r\n 0,\r\n );\r\n toolObjects.add(toolObj);\r\n },\r\n undefined,\r\n (error) => {\r\n console.error('An error occurred:', error);\r\n },\r\n );\r\n } else {\r\n const geometry = new THREE.CylinderBufferGeometry(\r\n (convertMetric(\r\n tool.outerDiameter.roundedValue,\r\n tool.outerDiameter.unit,\r\n ) /\r\n 2) *\r\n 100,\r\n (convertMetric(\r\n tool.outerDiameter.roundedValue,\r\n tool.outerDiameter.unit,\r\n ) /\r\n 2) *\r\n 100,\r\n convertMetric(tool.length.roundedValue, tool.length.unit) * 100,\r\n 16,\r\n 1,\r\n );\r\n const mesh = new THREE.Mesh(geometry, material);\r\n mesh.position.set(0, posX, 0);\r\n mesh.name = `${BHATool}-${posX}`;\r\n defaultToolObjects.add(mesh);\r\n }\r\n }\r\n });\r\n reusableMatrix.lookAt(v1, v2, objectUp);\r\n reusableMatrix.multiply(orientationMultiplier);\r\n toolObjects.scale.set(100, 100, 100);\r\n toolObjects.rotateZ(Math.PI / 2);\r\n tools.add(defaultToolObjects);\r\n tools.add(toolObjects);\r\n tools.applyMatrix4(reusableMatrix);\r\n tools.position.set((v1.x + v2.x) / 2, (v1.y + v2.y) / 2, (v1.z + v2.z) / 2);\r\n\r\n return tools;\r\n};\r\n\r\nconst ThreeJsUtils = {\r\n objectUp,\r\n getTicks,\r\n createGrid,\r\n createCylinder,\r\n reusableMatrix,\r\n reusableVector,\r\n createTextSprite,\r\n createSemiCylinder,\r\n createNipple,\r\n createToolString,\r\n\r\n DefaultFontSize,\r\n DefaultTickInterval,\r\n DefaultCylinderRadius,\r\n};\r\n\r\nexport default ThreeJsUtils;\r\n","import * as THREE from 'three';\r\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\r\n\r\nimport ThreeJsUtils from 'app/threeJs/ThreeJsUtils';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst upVector = new THREE.Vector3(0, 1, 0);\r\nconst startVector = new THREE.Vector3();\r\nconst endVector = new THREE.Vector3();\r\nconst TrajectoryCylinderPrefix = 'trajectory-cylinder';\r\nconst Materials = {\r\n maximumWorkingDepth: new THREE.MeshBasicMaterial({\r\n color:\r\n theme.altus.components.ContextualizedWell.trajectory.maximumWorkingDepth,\r\n }),\r\n targetDepth: new THREE.MeshBasicMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.targetDepth,\r\n }),\r\n dhsv: new THREE.MeshBasicMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.dhsv,\r\n }),\r\n currentDepth: new THREE.MeshBasicMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.depth,\r\n }),\r\n grid: new THREE.MeshBasicMaterial({\r\n color: theme.palette.secondary.darkgrey,\r\n }),\r\n base: new THREE.MeshBasicMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.base,\r\n }),\r\n};\r\n\r\nconst WellboreTrajectoryScene = ({\r\n zoom,\r\n theme,\r\n maxTVD,\r\n domElement,\r\n maxNorthEast,\r\n hideAxisLabels,\r\n trajectoryPoints,\r\n hideGrid = false,\r\n disableOrbitControls = false,\r\n displayCardinalPoints,\r\n depthsOfInterest = [],\r\n}) => {\r\n const scene = new THREE.Scene();\r\n\r\n const camera = setupCamera({\r\n domElement,\r\n maxNorthEast: maxNorthEast * 1.33,\r\n maxTVD,\r\n zoom,\r\n disableOrbitControls,\r\n });\r\n\r\n if (!hideGrid) {\r\n const {\r\n grid,\r\n gridLength,\r\n tickInterval: gridTickInterval,\r\n } = ThreeJsUtils.createGrid({\r\n max: maxNorthEast < 100 ? maxNorthEast * 100 : maxNorthEast,\r\n });\r\n scene.add(grid);\r\n\r\n if (displayCardinalPoints) {\r\n // This hasn't been requested as a feature yet, but I have turned it on to get oriented while debugging.\r\n const cardinalPointsLabels = createCardinalPointsLabels({\r\n gridLength,\r\n theme,\r\n });\r\n\r\n cardinalPointsLabels.forEach((label) => {\r\n scene.add(label);\r\n });\r\n }\r\n\r\n const yAxis = createYAxis({ maxTVD });\r\n scene.add(yAxis);\r\n\r\n if (!hideAxisLabels) {\r\n const yAxisLabels = createYAxisLabels({\r\n maxTVD,\r\n theme,\r\n tickInterval: gridTickInterval,\r\n });\r\n yAxisLabels.forEach((label) => {\r\n scene.add(label);\r\n });\r\n }\r\n }\r\n\r\n trajectoryPoints.forEach((previousPoint, index) => {\r\n const currentPoint = trajectoryPoints.get(index + 1);\r\n\r\n // Bottom reached\r\n if (!currentPoint) return false;\r\n\r\n const trajectoryCylinder = createTrajectoryCylinder({\r\n previousPoint,\r\n maxTVD,\r\n currentPoint,\r\n index,\r\n });\r\n\r\n scene.add(trajectoryCylinder);\r\n\r\n const marker = maybeCreateMarker({\r\n previousPoint,\r\n currentPoint,\r\n depthsOfInterest,\r\n });\r\n\r\n if (marker) {\r\n scene.add(marker);\r\n }\r\n });\r\n\r\n return { scene, camera, domElement };\r\n};\r\n\r\nconst setupCamera = ({\r\n domElement,\r\n maxNorthEast,\r\n maxTVD,\r\n zoom = 2,\r\n disableOrbitControls = false,\r\n}) => {\r\n const clientWidth = domElement.clientWidth;\r\n const clientHeight = domElement.clientHeight;\r\n\r\n const camera = new THREE.PerspectiveCamera(\r\n 50,\r\n clientWidth / clientHeight,\r\n 0.1,\r\n (maxNorthEast + maxTVD) * 4,\r\n );\r\n\r\n camera.up = upVector;\r\n camera.position.z = zoom * maxNorthEast;\r\n camera.position.y = 2 * maxTVD;\r\n\r\n const orbitControls = new OrbitControls(camera, domElement);\r\n\r\n orbitControls.maxDistance =\r\n maxNorthEast < 100\r\n ? (zoom + 2) * maxNorthEast * 100\r\n : (zoom + 2) * maxNorthEast;\r\n orbitControls.enablePan = false;\r\n orbitControls.enableKeys = false;\r\n orbitControls.enabled = !disableOrbitControls;\r\n\r\n return camera;\r\n};\r\n\r\nconst createYAxis = ({ maxTVD }) => {\r\n startVector.set(0, 0, 0);\r\n endVector.set(0, maxTVD, 0);\r\n\r\n const yLine = ThreeJsUtils.createCylinder({\r\n v1: startVector,\r\n v2: endVector,\r\n material: Materials.grid,\r\n radius: 3,\r\n });\r\n\r\n return yLine;\r\n};\r\n\r\nconst createYAxisLabels = ({ maxTVD, theme, tickInterval }) => {\r\n const yTicks = ThreeJsUtils.getTicks({ max: maxTVD, tickInterval });\r\n const { fontFamily } = theme;\r\n\r\n return yTicks.map((tick) => {\r\n const yAxisLabel = ThreeJsUtils.createTextSprite({\r\n text: tick,\r\n fontFamily,\r\n });\r\n\r\n yAxisLabel.position.set(-50, maxTVD - tick, -50);\r\n\r\n return yAxisLabel;\r\n });\r\n};\r\n\r\nconst createCardinalPointsLabels = ({ gridLength, theme }) => {\r\n const { fontFamily } = theme;\r\n const middle = gridLength / 2.0;\r\n\r\n const northLabel = ThreeJsUtils.createTextSprite({ text: 'N', fontFamily });\r\n northLabel.position.z = -middle;\r\n\r\n const southLabel = ThreeJsUtils.createTextSprite({ text: 'S', fontFamily });\r\n southLabel.position.z = middle;\r\n southLabel.position.x = 0;\r\n\r\n const westLabel = ThreeJsUtils.createTextSprite({ text: 'W', fontFamily });\r\n westLabel.position.z = 0;\r\n westLabel.position.x = -middle;\r\n\r\n const eastLabel = ThreeJsUtils.createTextSprite({ text: 'E', fontFamily });\r\n eastLabel.position.z = 0;\r\n eastLabel.position.x = middle;\r\n\r\n return [northLabel, southLabel, westLabel, eastLabel];\r\n};\r\n\r\nconst createTrajectoryCylinder = ({ previousPoint, currentPoint, maxTVD }) => {\r\n startVector.set(\r\n previousPoint.getIn(['eastWest', 'value']),\r\n maxTVD - previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['northSouth', 'value']),\r\n );\r\n\r\n endVector.set(\r\n currentPoint.getIn(['eastWest', 'value']),\r\n maxTVD - currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['northSouth', 'value']),\r\n );\r\n\r\n const cylinder = ThreeJsUtils.createCylinder({\r\n v1: startVector,\r\n v2: endVector,\r\n material: Materials.base,\r\n });\r\n\r\n const measuredDepth = currentPoint.getIn(['measuredDepth', 'value']);\r\n cylinder.name = `${TrajectoryCylinderPrefix}-${measuredDepth}`;\r\n cylinder.data = {\r\n measuredDepth,\r\n };\r\n\r\n return cylinder;\r\n};\r\n\r\nconst maybeCreateMarker = ({\r\n previousPoint,\r\n currentPoint,\r\n depthsOfInterest,\r\n}) => {\r\n const depthOfInterest = depthsOfInterest.find(\r\n ({ depth }) =>\r\n depth &&\r\n depth >= previousPoint.getIn(['measuredDepth', 'value']) &&\r\n depth <= currentPoint.getIn(['measuredDepth', 'value']),\r\n );\r\n\r\n if (!depthOfInterest) return;\r\n\r\n const depthOfInterestCylinder = ThreeJsUtils.createCylinder({\r\n v1: startVector,\r\n v2: endVector,\r\n length: 10,\r\n radius: 80,\r\n material: depthOfInterest.material,\r\n });\r\n\r\n depthOfInterestCylinder.name = depthOfInterest.name;\r\n\r\n return depthOfInterestCylinder;\r\n};\r\n\r\nexport { Materials, TrajectoryCylinderPrefix };\r\n\r\nexport default WellboreTrajectoryScene;\r\n","import takeRight from 'lodash/takeRight';\r\nimport Stop from '@material-ui/icons/Stop';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ArrowDropUp from '@material-ui/icons/ArrowDropUp';\r\nimport ArrowDropDown from '@material-ui/icons/ArrowDropDown';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\n\r\nconst getLegendIcon = (data = []) => {\r\n if (!data.length) {\r\n return Stop;\r\n }\r\n\r\n try {\r\n if (data.length >= 2) {\r\n const [point = [], last = []] = takeRight(data, 2);\r\n\r\n if (last[1] > point[1]) {\r\n return ArrowDropUp;\r\n } else if (last[1] < point[1]) {\r\n return ArrowDropDown;\r\n }\r\n return Stop;\r\n }\r\n return Stop;\r\n } catch (error) {\r\n return Stop;\r\n }\r\n};\r\n\r\nconst WellboreTrajectoryLegends = ({ legends, classes }) => (\r\n \r\n {legends\r\n .filter((legend) => legend.depth)\r\n .map(({ name, unit, color, data: values, depth }) => {\r\n const Icon = getLegendIcon(values);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${name} (${formatValue(depth, unit, 0.1)})`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n);\r\n\r\nconst styles = () => ({\r\n legendIcon: {\r\n display: 'flex',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(WellboreTrajectoryLegends);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Iterable } from 'immutable';\r\nimport { Box } from '@material-ui/core';\r\nimport useTheme from '@material-ui/styles/useTheme';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useEffect, useState, memo, useMemo } from 'react';\r\n\r\nimport WellboreTrajectoryScene, {\r\n Materials,\r\n TrajectoryCylinderPrefix,\r\n} from 'app/components/WellboreTrajectory/WellboreTrajectoryScene';\r\n\r\nimport { QuantityShape } from 'utils/app.util';\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport { useThreeJsManager } from 'app/threeJs/ThreeJsManagerProvider';\r\nimport WellboreTrajectoryLegends from 'app/components/WellboreTrajectory/WellboreTrajectoryLegends';\r\n\r\nconst WellboreTrajectory = ({\r\n classes,\r\n sceneKey,\r\n hideAxisLabels,\r\n hideLegends,\r\n targetDepth,\r\n currentDepth,\r\n hideGrid = false,\r\n disableOrbitControls = false,\r\n trajectory = EMPTY_MAP,\r\n wellboreDetail = EMPTY_MAP,\r\n}) => {\r\n const theme = useTheme();\r\n const [domElement, setDomElement] = useState();\r\n const threeJsManager = useThreeJsManager();\r\n\r\n const maxTVD = trajectory.get('verticalDepth');\r\n const trajectoryPoints = trajectory.get('trajectoryPoints', EMPTY_LIST);\r\n const maxNorthEast = trajectory.get('maximumNorthEast');\r\n\r\n const rootRef = useCallback((node) => {\r\n if (node) {\r\n setDomElement(node);\r\n }\r\n }, []);\r\n\r\n const dhsvDepth = wellboreDetail.get('downHoleSafetyValveDepth');\r\n const maximumWorkingDepth = wellboreDetail.get('maximumWorkingDepth');\r\n\r\n const depthsOfInterest = useMemo(\r\n () => [\r\n {\r\n depth: dhsvDepth?.value,\r\n name: 'DHSV',\r\n unit: dhsvDepth?.unit,\r\n material: Materials.dhsv,\r\n color: theme.altus.components.ContextualizedWell.trajectory.dhsv,\r\n },\r\n {\r\n depth: targetDepth?.value,\r\n name: 'Target depth',\r\n unit: targetDepth?.unit,\r\n material: Materials.targetDepth,\r\n color: theme.altus.components.ContextualizedWell.trajectory.targetDepth,\r\n },\r\n {\r\n depth: maximumWorkingDepth?.value,\r\n name: 'Max working depth',\r\n unit: maximumWorkingDepth?.unit,\r\n material: Materials.maximumWorkingDepth,\r\n color:\r\n theme.altus.components.ContextualizedWell.trajectory\r\n .maximumWorkingDepth,\r\n },\r\n ],\r\n [dhsvDepth, maximumWorkingDepth, targetDepth, theme],\r\n );\r\n\r\n const trajectoryScene = useMemo(() => {\r\n // The scene gets created only when we get the trajectory\r\n if (!domElement || !maxNorthEast || !trajectoryPoints.size || !maxTVD) {\r\n return;\r\n }\r\n\r\n return WellboreTrajectoryScene({\r\n theme,\r\n domElement,\r\n hideAxisLabels,\r\n depthsOfInterest,\r\n trajectoryPoints,\r\n maxTVD: maxTVD.value,\r\n maxNorthEast: maxNorthEast.value,\r\n hideGrid,\r\n disableOrbitControls,\r\n });\r\n }, [\r\n theme,\r\n maxTVD,\r\n hideGrid,\r\n domElement,\r\n maxNorthEast,\r\n hideAxisLabels,\r\n depthsOfInterest,\r\n trajectoryPoints,\r\n disableOrbitControls,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!trajectoryScene || !threeJsManager) return;\r\n\r\n const { addScene, disposeScene } = threeJsManager;\r\n\r\n disposeScene(sceneKey);\r\n addScene(sceneKey, trajectoryScene);\r\n\r\n // The scene will be disposed whenever this component gets unmounted.\r\n // For example, if an operation gets \"filtered away\", then this will be unmounted and the effect will cleanup the scene resources.\r\n return () => disposeScene(sceneKey);\r\n }, [threeJsManager, sceneKey, trajectoryScene]);\r\n\r\n useEffect(() => {\r\n // Then, whenever we get a new currentDepth, we just re-paint the necessary cylinders, but no need to recreate the scene.\r\n if (!threeJsManager) return;\r\n\r\n const { updateScene } = threeJsManager;\r\n\r\n const trajectoryColorUpdater = (sceneInfo) => {\r\n const { scene } = sceneInfo;\r\n\r\n scene.traverse((cylinder) => {\r\n // Each cylinder has a name property set with a prefix. We can use that prefix to get all of the trajectory cylinders in the scene.\r\n if (!cylinder.name.startsWith(TrajectoryCylinderPrefix)) return;\r\n\r\n // We also store what's the \"measuredDepth\" that the cylinder is representing. Based on that and the current depth, we choose\r\n // which color it should use.\r\n cylinder.material =\r\n cylinder.data.measuredDepth <= currentDepth?.value\r\n ? Materials.currentDepth\r\n : Materials.base;\r\n });\r\n };\r\n\r\n updateScene(sceneKey, trajectoryColorUpdater);\r\n }, [threeJsManager, trajectoryScene, sceneKey, currentDepth]);\r\n\r\n const legends = useMemo(\r\n () => [\r\n {\r\n depth: currentDepth?.value,\r\n name: 'Current depth',\r\n unit: currentDepth?.unit,\r\n color: theme.altus.components.ContextualizedWell.trajectory.depth,\r\n },\r\n ...depthsOfInterest,\r\n ],\r\n [currentDepth, depthsOfInterest, theme],\r\n );\r\n\r\n return (\r\n {\r\n // Do not propagate click events that happen on the scene (like when clicking to orbit around)\r\n if (!disableOrbitControls) {\r\n event.stopPropagation();\r\n }\r\n }}\r\n >\r\n {!hideLegends && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n height: '100%',\r\n cursor: 'pointer',\r\n display: 'inline-block',\r\n position: 'relative',\r\n },\r\n legend: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n bottom: theme.spacing(1),\r\n },\r\n});\r\n\r\nWellboreTrajectory.propTypes = {\r\n sceneKey: PropTypes.number,\r\n targetDepth: QuantityShape,\r\n currentDepth: QuantityShape,\r\n hideLegends: PropTypes.bool,\r\n trajectory: PropTypes.instanceOf(Iterable),\r\n wellboreDetail: PropTypes.instanceOf(Iterable),\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(WellboreTrajectory);\r\n","import { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport projectWellboreDetailsService from 'services/projectWellboreDetail.service';\r\n\r\nconst useLatestProjectWellboreDetail = (projectId) => {\r\n const getLatestProjectWellboreDetail = useCallback(\r\n () =>\r\n projectWellboreDetailsService\r\n .getLatestProjectWellboreDetail(projectId)\r\n .then((projectWellboreDetail) =>\r\n projectWellboreDetail.wellboreDetail\r\n ? mappers.WellboreDetail.from(projectWellboreDetail.wellboreDetail)\r\n : undefined,\r\n ),\r\n [projectId],\r\n );\r\n\r\n return useRequest(getLatestProjectWellboreDetail);\r\n};\r\n\r\nexport default useLatestProjectWellboreDetail;\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Grid, CircularProgress } from '@material-ui/core';\r\n\r\nimport { getSummarizedDataState } from 'altus-datastate';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport WellboreTrajectory from 'app/components/WellboreTrajectory/WellboreTrajectory';\r\nimport useProjectWellboreTrajectory from 'features/wells/hooks/useProjectWellboreTrajectory';\r\nimport useLatestProjectWellboreDetail from 'features/projects/hooks/useLatestProjectWellboreDetails';\r\n\r\nconst ProjectWellboreTrajectoryContainer = ({\r\n projectId,\r\n targetDepth,\r\n children = null,\r\n ...rest\r\n}) => {\r\n const [latestWellboreDetails = EMPTY_MAP, wellDetailsDataState] =\r\n useLatestProjectWellboreDetail(projectId);\r\n\r\n const [trajectory = EMPTY_MAP, trajectoryDataState] =\r\n useProjectWellboreTrajectory(projectId);\r\n\r\n const dataState = getSummarizedDataState([\r\n wellDetailsDataState,\r\n trajectoryDataState,\r\n ]);\r\n\r\n if (dataState.isLoading()) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (!trajectory.size) return children;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nProjectWellboreTrajectoryContainer.propTypes = {\r\n children: PropTypes.node,\r\n projectId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n};\r\n\r\nexport default compose()(ProjectWellboreTrajectoryContainer);\r\n","import { compose } from 'redux';\r\nimport takeLast from 'lodash/last';\r\nimport PropTypes from 'prop-types';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { EMPTY_QUANTITY } from 'app/app.constants';\r\nimport ThreeJsManagerProvider from 'app/threeJs/ThreeJsManagerProvider';\r\nimport { getProjectWellbore } from 'features/projects/wellbore/projectWellbore.actions';\r\nimport { getTargetDepthFromState } from 'features/projects/activities/activities.selectors';\r\nimport ProjectWellboreTrajectoryContainer from 'app/components/WellboreTrajectory/ProjectWellboreTrajectoryContainer';\r\n\r\nconst DashboardWellboreTrajectoryContainer = ({\r\n curve,\r\n projectId,\r\n registerDataPointsHandler,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getProjectWellbore(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n const targetDepth = useSelector(getTargetDepthFromState);\r\n\r\n const [currentDepth, setCurrentDepth] = useState(EMPTY_QUANTITY);\r\n\r\n const onReceiveInitialData = useCallback(\r\n (readings) => {\r\n if (!curve) return;\r\n\r\n const reading = readings.find(\r\n (reading) => reading.name === curve.get('name'),\r\n );\r\n\r\n var latestDepthData = takeLast(reading.data);\r\n\r\n if (!latestDepthData) return;\r\n\r\n const [_timestamp, _depth, value] = latestDepthData;\r\n\r\n setCurrentDepth({\r\n hasValue: true,\r\n unit: curve.get('unit'),\r\n value: value,\r\n });\r\n },\r\n [curve, setCurrentDepth],\r\n );\r\n\r\n const onReceiveData = useCallback(\r\n (readings) => {\r\n if (!curve) return;\r\n\r\n const reading = readings.find(\r\n (reading) => reading.name === curve.get('name'),\r\n );\r\n\r\n if (!reading) return;\r\n if (!reading.data[0]) return;\r\n\r\n const [_timestamp, _depth, value] = reading.data[0];\r\n\r\n setCurrentDepth({\r\n hasValue: true,\r\n unit: curve.get('unit'),\r\n value: value,\r\n });\r\n },\r\n [curve],\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveInitialData, onReceiveData);\r\n }, [onReceiveData, onReceiveInitialData, registerDataPointsHandler]);\r\n\r\n return (\r\n \r\n \r\n \r\n Well Trajectory Not Available\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nDashboardWellboreTrajectoryContainer.propTypes = {\r\n curveId: PropTypes.number,\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default compose()(DashboardWellboreTrajectoryContainer);\r\n","export default __webpack_public_path__ + \"static/media/in_progress_icon.784790bf.svg\";","export default __webpack_public_path__ + \"static/media/TaskCompletedIcon.a5306af9.svg\";","export default __webpack_public_path__ + \"static/media/task_planned.f6c1ff93.svg\";","import Info from '@material-ui/icons/Info';\r\nimport Check from '@material-ui/icons/Check';\r\nimport Close from '@material-ui/icons/Close';\r\nimport Pause from '@material-ui/icons/Pause';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport InProgressIcon from 'assets/in_progress_icon.svg';\r\nimport TaskCompletedIcon from 'assets/TaskCompletedIcon.svg';\r\nimport TaskPlannedIcon from 'assets/task_planned.svg';\r\n\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\n\r\nconst styles = (theme) => {\r\n return {\r\n workItemCompleted: {\r\n color: theme.altus.status.execute,\r\n },\r\n workItemFailed: {\r\n color: theme.palette.error.main,\r\n },\r\n circularProgress: {\r\n display: 'flex',\r\n color: theme.altus.status.execute,\r\n },\r\n };\r\n};\r\n\r\nconst WorkItemStatusContainer = ({\r\n status,\r\n classes,\r\n isWaiting,\r\n isPointInTime,\r\n isMobile = false,\r\n}) => {\r\n if (!isMobile) {\r\n switch (status) {\r\n case WORK_ITEM_STATUS.STARTED:\r\n return \"Work;\r\n case WORK_ITEM_STATUS.PAUSED:\r\n return ;\r\n case WORK_ITEM_STATUS.COMPLETED:\r\n if (isPointInTime) {\r\n return ;\r\n }\r\n if (isWaiting) {\r\n return ;\r\n }\r\n return ;\r\n case WORK_ITEM_STATUS.SKIPPED:\r\n return ;\r\n case WORK_ITEM_STATUS.FAILED:\r\n return ;\r\n case WORK_ITEM_STATUS.NOT_SET:\r\n case WORK_ITEM_STATUS.PLANNED:\r\n return ;\r\n default:\r\n return null;\r\n }\r\n } else {\r\n switch (status) {\r\n case WORK_ITEM_STATUS.STARTED:\r\n return \"Work;\r\n case WORK_ITEM_STATUS.PAUSED:\r\n return ;\r\n case WORK_ITEM_STATUS.COMPLETED:\r\n if (isPointInTime) {\r\n return ;\r\n }\r\n if (isWaiting) {\r\n return ;\r\n }\r\n return \"Work;\r\n case WORK_ITEM_STATUS.SKIPPED:\r\n return ;\r\n case WORK_ITEM_STATUS.FAILED:\r\n return ;\r\n case WORK_ITEM_STATUS.NOT_SET:\r\n case WORK_ITEM_STATUS.PLANNED:\r\n return \"Work;\r\n default:\r\n return null;\r\n }\r\n }\r\n};\r\n\r\nexport default toJSComponent(withStyles(styles)(WorkItemStatusContainer));\r\n","import { Set } from 'immutable';\r\nimport { useMemo } from 'react';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { formatDuration } from 'utils/format.util';\r\nimport { getWorkItemStatusDisplayName } from 'utils/app.util';\r\nimport { WORK_ITEM_STATUS as WorkItemStatus } from 'app/app.constants';\r\nimport WorkItemStatusIcon from 'features/projects/components/WorkItemStatus';\r\n\r\nconst maxActivityCount = 3;\r\n\r\nconst ProjectExecutionStatusTable = ({ status }) => {\r\n const totalActivities = status.getIn(['total', 'activities']);\r\n const currentActivityNumber = status.getIn(['current', 'activityNumber']);\r\n\r\n const items = useMemo(() => {\r\n const nextActivity = status.getIn(['next', 'activity']);\r\n const currentActivity = status.getIn(['current', 'activity']);\r\n const previousActivity = status.getIn(['previous', 'activity']);\r\n\r\n const taskActivities = status.getIn(['activeTask', 'activities']);\r\n\r\n const initialActivity = currentActivity ?? previousActivity ?? nextActivity;\r\n\r\n const activeTask = status.get('activeTask');\r\n\r\n if (!initialActivity) {\r\n return activeTask?.get('status') === WorkItemStatus.COMPLETED\r\n ? taskActivities.takeLast(maxActivityCount)\r\n : taskActivities.take(maxActivityCount);\r\n }\r\n\r\n const initialSequence = initialActivity.get('sequence');\r\n\r\n return taskActivities\r\n .reduce((result, _, index, items) => {\r\n const sequence = index + 1;\r\n const initialIndex = initialSequence - 1;\r\n\r\n // Immutable.js Collections will return the last element if getting by index < 0\r\n const prevIndex = Math.max(initialIndex - sequence, 0);\r\n\r\n var previous = prevIndex !== initialIndex ? items.get(prevIndex) : null;\r\n var next = items.get(initialIndex + sequence);\r\n\r\n return result\r\n .add(previous)\r\n .add(next)\r\n .filter(Boolean)\r\n .take(maxActivityCount);\r\n }, Set.of(initialActivity))\r\n .sortBy((x) => x.get('sequence'));\r\n }, [status]);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'placeholder',\r\n Header: ,\r\n Cell: ({ row }) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 6,\r\n id: 'activity',\r\n Header: () => {\r\n if (!currentActivityNumber) return 'Activity';\r\n\r\n return `Activity (${currentActivityNumber}/${totalActivities})`;\r\n },\r\n disableSortBy: true,\r\n accessor: (activity) => activity.get('name'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Depth',\r\n disableSortBy: true,\r\n accessor: (activity) => activity.get('targetDepth'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Duration',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n\r\n if (activity.get('isPointInTime')) return null;\r\n\r\n const isTimerActive =\r\n activity.get('status') === WorkItemStatus.STARTED;\r\n\r\n return (\r\n formatDuration(elapsedTime)}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Status',\r\n disableSortBy: true,\r\n accessor: (activity) =>\r\n getWorkItemStatusDisplayName(activity.get('status')),\r\n },\r\n ],\r\n [totalActivities, currentActivityNumber],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProjectExecutionStatusTable;\r\n","import { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Box, Grid, LinearProgress, Typography } from '@material-ui/core';\r\n\r\nimport { getProjectStatus } from 'features/projects/activities/activities.actions';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport ProjectExecutionStatusTable from 'features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusTable';\r\n\r\nconst ProjectExecutionStatusContainer = ({ projectId }) => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getProjectStatus(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n const projectStatus = useSelector(getExecuteStatusFromState);\r\n\r\n if (!projectStatus.get('id')) return null;\r\n\r\n const tasksProgress = projectStatus.get('progress');\r\n const totalTasks = projectStatus.getIn(['total', 'tasks']);\r\n const currentTask = projectStatus.getIn(['current', 'task']);\r\n const currentTaskProgress = projectStatus.get('currentTaskProgress');\r\n\r\n const activeTask = projectStatus.get('activeTask');\r\n const percentComplete = currentTask ? currentTaskProgress : tasksProgress;\r\n\r\n if (!activeTask)\r\n return (\r\n \r\n No tasks scheduled\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {`${activeTask.get('title')} (${activeTask.get(\r\n 'sequence',\r\n )}/${totalTasks})`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProjectExecutionStatusContainer;\r\n","import { useMemo } from 'react';\r\n\r\nimport DashboardLineChart from 'features/projects/dashboard/components/charts/DashboardLineChart';\r\nimport useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\nimport DashboardGaugeChartsContainer from 'features/projects/dashboard/components/charts/DashboardGaugeChartsContainer';\r\nimport DashboardWellboreTrajectoryContainer from 'features/projects/dashboard/components/dashboards/DashboardWellboreTrajectoryContainer';\r\nimport ProjectExecutionStatusContainer from 'features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusContainer';\r\n\r\nconst WinchCombinedDashboardController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, setExtremes, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n\r\n const depthCurve = useMemo(\r\n () => curves.find((curve) => curve.get('isDepth')),\r\n [curves],\r\n );\r\n\r\n return renderSlots(\r\n ,\r\n ,\r\n ,\r\n ,\r\n );\r\n};\r\n\r\nexport default WinchCombinedDashboardController;\r\n","import DashboardLineChart from 'features/projects/dashboard/components/charts/DashboardLineChart';\r\nimport useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\nimport DashboardGaugeChartsContainer from 'features/projects/dashboard/components/charts/DashboardGaugeChartsContainer';\r\nimport ProjectExecutionStatusContainer from 'features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusContainer';\r\n\r\nconst WinchLineAndGaugeDashboardController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, setExtremes, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n\r\n return renderSlots(\r\n ,\r\n ,\r\n ,\r\n );\r\n};\r\n\r\nexport default WinchLineAndGaugeDashboardController;\r\n","import { useMemo } from 'react';\r\n\r\nimport useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\nimport DashboardGaugeChartsContainer from 'features/projects/dashboard/components/charts/DashboardGaugeChartsContainer';\r\nimport DashboardWellboreTrajectoryContainer from 'features/projects/dashboard/components/dashboards/DashboardWellboreTrajectoryContainer';\r\nimport ProjectExecutionStatusContainer from 'features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusContainer';\r\n\r\nconst WinchWellboreAndGaugeDashboardController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n\r\n const depthCurve = useMemo(\r\n () => curves.find((curve) => curve.get('isDepth')),\r\n [curves],\r\n );\r\n\r\n return renderSlots(\r\n ,\r\n ,\r\n ,\r\n );\r\n};\r\n\r\nexport default WinchWellboreAndGaugeDashboardController;\r\n","import { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport { createSelector } from 'utils/app.util';\r\nimport toolstringMapper from 'features/projects/tasks/task/toolstring/toolstring.mappers';\r\n\r\nexport const getToolstringTemplatesFromState = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'toolstring',\r\n 'data',\r\n 'toolstringTemplates',\r\n ]),\r\n (toolstrings) => toolstrings?.toList() || EMPTY_LIST,\r\n);\r\n\r\nexport const getTaskToolstringsFromState = createSelector(\r\n (state, taskId) => {\r\n return state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'toolstring',\r\n 'data',\r\n 'toolstringsByTaskId',\r\n taskId.toString(),\r\n ]);\r\n },\r\n (toolstrings) => toolstrings?.toList() || EMPTY_LIST,\r\n);\r\n\r\nconst getToolstringSelector = (state, toolstringId) => {\r\n const initialToolstring = toolstringMapper.Toolstring.initial();\r\n\r\n if (!toolstringId) {\r\n return initialToolstring;\r\n }\r\n\r\n return state.getIn(\r\n [\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'toolstring',\r\n 'data',\r\n 'toolstringById',\r\n toolstringId.toString(),\r\n ],\r\n toolstringMapper.Toolstring.initial(),\r\n );\r\n};\r\n\r\nexport const createGetToolstringSelector = (toolstringId) =>\r\n createSelector(\r\n (state) => getToolstringSelector(state, toolstringId),\r\n (toolstring) => toolstring,\r\n );\r\n\r\nexport const createGetToolstringToolsSelector = (toolstringId) =>\r\n createSelector(createGetToolstringSelector(toolstringId), (toolstring) =>\r\n toolstring\r\n .get('toolsByToolstringToolId')\r\n .toList()\r\n .sortBy((tool) => tool.get('sequence')),\r\n );\r\n\r\nexport const getToolstringFromState = createSelector(\r\n getToolstringSelector,\r\n (toolstring) => toolstring,\r\n);\r\n\r\nexport const getTaskFromState = createSelector(\r\n (state) =>\r\n state.getIn(['projects', 'plan', 'task', 'toolstring', 'data', 'task']),\r\n (task) => task,\r\n);\r\n\r\nexport const getTaskByIdFromState = createSelector(\r\n (state, taskId) =>\r\n state\r\n .getIn(['projects', 'plan', 'tasks', 'data'], EMPTY_LIST)\r\n .find((task) => task?.get('id')?.toString() === taskId?.toString()),\r\n (task) => task,\r\n);\r\n\r\nexport const getToolstringToolsFromState = createSelector(\r\n getToolstringFromState,\r\n (toolstring) => {\r\n const toolsList = toolstring\r\n .get('toolsByToolstringToolId')\r\n .toList()\r\n .sortBy((tool) => tool.get('sequence'));\r\n\r\n return toolstringMapper.ToolstringTool.thirdPartyDataVerification(\r\n toolsList,\r\n );\r\n },\r\n);\r\n\r\nexport const getCablesFromState = createSelector(\r\n (state) =>\r\n state.getIn(['projects', 'plan', 'task', 'toolstring', 'data', 'cables']),\r\n (cables) => cables,\r\n);\r\n\r\nexport const getToolstringItemsByIdFromState = createSelector(\r\n getToolstringFromState,\r\n (toolstring) => toolstring.get('toolsByToolstringToolId'),\r\n);\r\n\r\nconst getToolstringSectionsSelector = (state, toolstringId) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'toolstring',\r\n 'data',\r\n 'toolstringSectionsByToolstringId',\r\n toolstringId?.toString(),\r\n ]);\r\n\r\nexport const createGetToolstringSectionsSelector = (toolstringId) =>\r\n createSelector(\r\n (state) => getToolstringSectionsSelector(state, toolstringId),\r\n (toolstringSections) => toolstringSections,\r\n );\r\n\r\nexport const createGetToolstringSectionsItemsSelector = (toolstringId) =>\r\n createSelector(\r\n createGetToolstringSectionsSelector(toolstringId),\r\n createGetToolstringSelector(toolstringId),\r\n (toolstringSections, toolstringItemsById) =>\r\n toolstringSections?.map((section) =>\r\n section.update('items', (items) =>\r\n items?.map((itemId) =>\r\n toolstringItemsById.get(itemId.toString(), EMPTY_MAP),\r\n ),\r\n ),\r\n ),\r\n );\r\n\r\nexport const getToolstringSectionsFromState = createSelector(\r\n getToolstringSectionsSelector,\r\n getToolstringItemsByIdFromState,\r\n (toolstringSections, toolstringItemsById) =>\r\n toolstringSections?.map((section) =>\r\n section.update('items', (items) =>\r\n items?.map((itemId) =>\r\n toolstringItemsById.get(itemId.toString(), EMPTY_MAP),\r\n ),\r\n ),\r\n ),\r\n);\r\n\r\nexport const getToolstringsByTaskFromState = createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'toolString', 'data', 'toolstringsByTaskId']),\r\n (toolstrings) => toolstrings?.toList() || EMPTY_LIST,\r\n);\r\n\r\nexport const getToolStringByIdFromState = createSelector((state) =>\r\n state.getIn(\r\n ['projects', 'plan', 'task', 'toolstring', 'data', 'toolstringById'],\r\n toolstringMapper.Toolstring.initial(),\r\n ),\r\n);\r\n\r\nexport const getTaskCablesFromState = createSelector(\r\n (state) => state.getIn(['projects', 'plan', 'tasks', 'cables']),\r\n (cables) => cables,\r\n);\r\n\r\nexport const getPlannedToolstringToolsWithStatusFromState = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'toolstring',\r\n 'data',\r\n 'plannedToolstringToolsWithStatus',\r\n ]),\r\n (tools) => tools,\r\n);\r\n","export const ACTIONS = {\r\n REQUEST_CREATE_PROJECT_WELLBORE_SECTION:\r\n 'REQUEST_CREATE_PROJECT_WELLBORE_SECTION',\r\n REQUEST_UPDATE_PROJECT_WELLBORE_SECTION:\r\n 'REQUEST_UPDATE_PROJECT_WELLBORE_SECTION',\r\n REQUEST_DELETE_PROJECT_WELLBORE_SECTION:\r\n 'REQUEST_DELETE_PROJECT_WELLBORE_SECTION',\r\n REQUEST_PROJECT_WELLBORE_SECTIONS: 'REQUEST_PROJECT_WELLBORE_SECTIONS',\r\n REQUEST_CREATE_PROJECT_WELLBORE_SECTION_NIPPLE:\r\n 'REQUEST_CREATE_PROJECT_WELLBORE_SECTION_NIPPLE',\r\n REQUEST_UPDATE_PROJECT_WELLBORE_SECTION_NIPPLE:\r\n 'REQUEST_UPDATE_PROJECT_WELLBORE_SECTION_NIPPLE',\r\n REQUEST_DELETE_PROJECT_WELLBORE_SECTION_NIPPLE:\r\n 'REQUEST_DELETE_PROJECT_WELLBORE_SECTION_NIPPLE',\r\n\r\n UPDATE_PROJECT_WELLBORE_SECTIONS_CONFIRMATION_DIALOG:\r\n 'UPDATE_PROJECT_WELLBORE_SECTIONS_CONFIRMATION_DIALOG',\r\n\r\n SYNC_PROJECT_WELLBORE_SECTIONS_WITH_LATEST:\r\n 'SYNC_PROJECT_WELLBORE_SECTIONS_WITH_LATEST',\r\n };\r\n","import {\r\n deleteWellboreSection,\r\n deleteWellboreSectionNipple,\r\n receiveWellboreSectionNipples,\r\n receiveWellboreSections,\r\n} from 'features/wells/sections/wellboreSection.actions';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { FormikFormStatus } from 'app/app.constants';\r\nimport projectWellboreSectionService from 'services/projectWellboreSection.service';\r\nimport { ACTIONS } from 'features/projects/wellbore/sections/projectWellboreSection.constants';\r\nimport { askProjectWellboreUpdateConfirmation } from 'features/projects/wellbore/projectWellbore.actions';\r\n\r\nexport const requestProjectWellboreSections =\r\n (projectId, wellboreDetailId) => (dispatch) => {\r\n const payload = projectWellboreSectionService\r\n .getProjectWellboreSections(projectId, wellboreDetailId)\r\n .then((wellboreSections) => {\r\n dispatch(receiveWellboreSections(wellboreSections));\r\n });\r\n\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_PROJECT_WELLBORE_SECTIONS,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestCreateProjectWellboreSection =\r\n (projectId, wellboreDetailId, wellboreSection, formik, callback) =>\r\n (dispatch) => {\r\n const { setStatus, setSubmitting } = formik;\r\n\r\n const payload = () =>\r\n projectWellboreSectionService\r\n .createProjectWellboreSection(\r\n projectId,\r\n wellboreDetailId,\r\n wellboreSection,\r\n )\r\n .then(() =>\r\n dispatch(requestProjectWellboreSections(projectId, wellboreDetailId)),\r\n )\r\n .then(() => {\r\n setSubmitting(false);\r\n setStatus(FormikFormStatus.SUCCESS);\r\n invokeIfFunction(callback);\r\n })\r\n .catch((error) => {\r\n setSubmitting(false);\r\n setStatus(FormikFormStatus.ERROR);\r\n throw error;\r\n });\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_CREATE_PROJECT_WELLBORE_SECTION,\r\n notification: {\r\n success: 'Section successfully created',\r\n },\r\n }),\r\n onCancel: () => setSubmitting(false),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestUpdateProjectWellboreSection =\r\n (projectId, wellboreSectionId, wellboreDetailId, wellboreSection) =>\r\n (dispatch) => {\r\n const payload = () =>\r\n projectWellboreSectionService\r\n .updateProjectWellboreSection(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSection,\r\n )\r\n .then(() =>\r\n dispatch(requestProjectWellboreSections(projectId, wellboreDetailId)),\r\n );\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_UPDATE_PROJECT_WELLBORE_SECTION,\r\n notification: {\r\n success: 'Section successfully updated',\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestDeleteProjectWellboreSection =\r\n (projectId, wellboreSectionId, wellboreDetailId) => (dispatch) => {\r\n const payload = () =>\r\n projectWellboreSectionService\r\n .deleteProjectWellboreSection(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n )\r\n .then(() => dispatch(deleteWellboreSection(wellboreSectionId)));\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_DELETE_PROJECT_WELLBORE_SECTION,\r\n notification: {\r\n success: 'Section successfully deleted',\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestCreateProjectWellboreSectionNipple =\r\n (projectId, wellboreSectionId, wellboreSectionNipple, formik, callback) =>\r\n (dispatch) => {\r\n const { setStatus, setSubmitting } = formik;\r\n\r\n const payload = () =>\r\n projectWellboreSectionService\r\n .createProjectWellboreSectionNipple(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreSectionNipple,\r\n )\r\n .then(({ wellboreSectionNipples }) =>\r\n dispatch(\r\n receiveWellboreSectionNipples(\r\n wellboreSectionId,\r\n wellboreSectionNipples,\r\n ),\r\n ),\r\n )\r\n .then(() => {\r\n setSubmitting(false);\r\n setStatus(FormikFormStatus.SUCCESS);\r\n invokeIfFunction(callback);\r\n })\r\n .catch((error) => {\r\n setSubmitting(false);\r\n setStatus(FormikFormStatus.ERROR);\r\n throw error;\r\n });\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_CREATE_PROJECT_WELLBORE_SECTION_NIPPLE,\r\n notification: {\r\n info: 'Saving...',\r\n success: 'Nipple section successfully created',\r\n },\r\n }),\r\n onCancel: () => setSubmitting(false),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestUpdateProjectWellboreSectionNipple =\r\n (\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSectionNippleId,\r\n wellboreSectionNipple,\r\n ) =>\r\n (dispatch) => {\r\n const payload = () =>\r\n projectWellboreSectionService\r\n .updateProjectWellboreSectionNipple(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSectionNippleId,\r\n wellboreSectionNipple,\r\n )\r\n .then(({ wellboreSectionNipples }) =>\r\n dispatch(\r\n receiveWellboreSectionNipples(\r\n wellboreSectionId,\r\n wellboreSectionNipples,\r\n ),\r\n ),\r\n );\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_UPDATE_PROJECT_WELLBORE_SECTION_NIPPLE,\r\n notification: {\r\n info: 'Saving...',\r\n success: 'Nipple section successfully updated',\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestDeleteProjectWellboreSectionNipple =\r\n (projectId, wellboreSectionId, wellboreDetailId, wellboreSectionNippleId) =>\r\n (dispatch) => {\r\n const payload = () =>\r\n projectWellboreSectionService\r\n .deleteProjectWellboreSectionNipple(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSectionNippleId,\r\n )\r\n .then(() =>\r\n dispatch(\r\n deleteWellboreSectionNipple(\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n ),\r\n ),\r\n );\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_DELETE_PROJECT_WELLBORE_SECTION_NIPPLE,\r\n notification: {\r\n info: 'Deleting...',\r\n success: 'Nipple section successfully deleted',\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const syncProjectWellboreSectionWithLatest =\r\n (projectId, wellboreDetailId) => (dispatch) => {\r\n const payload = () =>\r\n projectWellboreSectionService\r\n .syncProjectWellboreSectionsWithLatest(projectId, wellboreDetailId)\r\n .then((sections) => dispatch(receiveWellboreSections(sections)));\r\n\r\n dispatch(\r\n askProjectWellboreUpdateConfirmation({\r\n onConfirm: () =>\r\n dispatch({\r\n payload,\r\n type: ACTIONS.SYNC_PROJECT_WELLBORE_SECTIONS_WITH_LATEST,\r\n notification: {\r\n info: 'Updating...',\r\n success: 'Project well sections successfully updated',\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n return payload;\r\n };\r\n","import { convertMetric } from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport { Cylinder } from '@react-three/drei';\r\nimport { compose } from 'redux';\r\nimport * as THREE from 'three';\r\nimport React from 'react';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst Toolstring = ({ BHA_LENGTH }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose()(Toolstring);\r\n","/**\r\n * GitHub Repo : https://github.com/Sean-Bradley/THREE-CSGMesh\r\n * License : MIT\r\n *\r\n * Original work copyright (c) 2011 Evan Wallace (http://madebyevan.com/), under the MIT license.\r\n * THREE.js rework by thrax\r\n *\r\n * # class CSG\r\n * Holds a binary space partition tree representing a 3D solid. Two solids can\r\n * be combined using the `union()`, `subtract()`, and `intersect()` methods.\r\n *\r\n * Differences Copyright 2020-2022 Sean Bradley : https://sbcode.net/threejs/\r\n * - Started with CSGMesh.js and csg-lib.js from https://github.com/manthrax/THREE-CSGMesh\r\n * - Converted to TypeScript by adding type annotations to all variables\r\n * - Converted var to const and let\r\n * - Some Refactoring\r\n * - support for three r141\r\n * - updated for three r150\r\n */\r\n/* eslint-disable */\r\n\r\nimport * as THREE from 'three';\r\n\r\n// # class CSG\r\n// Holds a binary space partition tree representing a 3D solid. Two solids can\r\n// be combined using the `union()`, `subtract()`, and `intersect()` methods.\r\n\r\nclass CSG {\r\n polygons;\r\n\r\n constructor() {\r\n this.polygons = [];\r\n }\r\n clone() {\r\n let csg = new CSG();\r\n csg.polygons = this.polygons.map((p) => p.clone());\r\n return csg;\r\n }\r\n\r\n toPolygons() {\r\n return this.polygons;\r\n }\r\n\r\n union(csg) {\r\n let a = new Node(this.clone().polygons);\r\n let b = new Node(csg.clone().polygons);\r\n a.clipTo(b);\r\n b.clipTo(a);\r\n b.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n a.build(b.allPolygons());\r\n return CSG.fromPolygons(a.allPolygons());\r\n }\r\n\r\n subtract(csg) {\r\n let a = new Node(this.clone().polygons);\r\n let b = new Node(csg.clone().polygons);\r\n a.invert();\r\n a.clipTo(b);\r\n b.clipTo(a);\r\n b.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n a.build(b.allPolygons());\r\n a.invert();\r\n return CSG.fromPolygons(a.allPolygons());\r\n }\r\n\r\n intersect(csg) {\r\n let a = new Node(this.clone().polygons);\r\n let b = new Node(csg.clone().polygons);\r\n a.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n a.clipTo(b);\r\n b.clipTo(a);\r\n a.build(b.allPolygons());\r\n a.invert();\r\n return CSG.fromPolygons(a.allPolygons());\r\n }\r\n\r\n // Return a new CSG solid with solid and empty space switched. This solid is\r\n // not modified.\r\n inverse() {\r\n let csg = this.clone();\r\n csg.polygons.forEach((p) => p.flip());\r\n return csg;\r\n }\r\n\r\n // Construct a CSG solid from a list of `Polygon` instances.\r\n static fromPolygons = function (polygons) {\r\n let csg = new CSG();\r\n csg.polygons = polygons;\r\n return csg;\r\n };\r\n\r\n static fromGeometry = function (geom, objectIndex) {\r\n let polys = [];\r\n let posattr = geom.attributes.position;\r\n let normalattr = geom.attributes.normal;\r\n let uvattr = geom.attributes.uv;\r\n let colorattr = geom.attributes.color;\r\n let index;\r\n if (geom.index) index = geom.index.array;\r\n else {\r\n index = new Array((posattr.array.length / posattr.itemSize) | 0);\r\n for (let i = 0; i < index.length; i++) index[i] = i;\r\n }\r\n let triCount = (index.length / 3) | 0;\r\n polys = new Array(triCount);\r\n for (let i = 0, pli = 0, l = index.length; i < l; i += 3, pli++) {\r\n let vertices = new Array(3);\r\n for (let j = 0; j < 3; j++) {\r\n let vi = index[i + j];\r\n let vp = vi * 3;\r\n let vt = vi * 2;\r\n let x = posattr.array[vp];\r\n let y = posattr.array[vp + 1];\r\n let z = posattr.array[vp + 2];\r\n let nx = normalattr.array[vp];\r\n let ny = normalattr.array[vp + 1];\r\n let nz = normalattr.array[vp + 2];\r\n //let u = uvattr.array[vt]\r\n //let v = uvattr.array[vt + 1]\r\n vertices[j] = new Vertex(\r\n {\r\n x: x,\r\n y: y,\r\n z: z,\r\n },\r\n {\r\n x: nx,\r\n y: ny,\r\n z: nz,\r\n },\r\n uvattr && {\r\n x: uvattr.array[vt],\r\n y: uvattr.array[vt + 1],\r\n z: 0,\r\n },\r\n colorattr && {\r\n x: colorattr.array[vt],\r\n y: colorattr.array[vt + 1],\r\n z: colorattr.array[vt + 2],\r\n },\r\n );\r\n }\r\n polys[pli] = new Polygon(vertices, objectIndex);\r\n }\r\n\r\n return CSG.fromPolygons(polys);\r\n };\r\n\r\n static ttvv0 = new THREE.Vector3();\r\n static tmpm3 = new THREE.Matrix3();\r\n\r\n static fromMesh = function (mesh, objectIndex) {\r\n let csg = CSG.fromGeometry(mesh.geometry, objectIndex);\r\n CSG.tmpm3.getNormalMatrix(mesh.matrix);\r\n for (let i = 0; i < csg.polygons.length; i++) {\r\n let p = csg.polygons[i];\r\n for (let j = 0; j < p.vertices.length; j++) {\r\n let v = p.vertices[j];\r\n v.pos.copy(\r\n CSG.ttvv0\r\n .copy(new THREE.Vector3(v.pos.x, v.pos.y, v.pos.z))\r\n .applyMatrix4(mesh.matrix),\r\n );\r\n v.normal.copy(\r\n CSG.ttvv0\r\n .copy(new THREE.Vector3(v.normal.x, v.normal.y, v.normal.z))\r\n .applyMatrix3(CSG.tmpm3),\r\n );\r\n }\r\n }\r\n return csg;\r\n };\r\n\r\n static nbuf3 = (ct) => {\r\n return {\r\n top: 0,\r\n array: new Float32Array(ct),\r\n write: function (v) {\r\n this.array[this.top++] = v.x;\r\n this.array[this.top++] = v.y;\r\n this.array[this.top++] = v.z;\r\n },\r\n };\r\n };\r\n static nbuf2 = (ct) => {\r\n return {\r\n top: 0,\r\n array: new Float32Array(ct),\r\n write: function (v) {\r\n this.array[this.top++] = v.x;\r\n this.array[this.top++] = v.y;\r\n },\r\n };\r\n };\r\n\r\n static toGeometry = function (csg) {\r\n let ps = csg.polygons;\r\n let geom;\r\n let g2;\r\n\r\n let triCount = 0;\r\n ps.forEach((p) => (triCount += p.vertices.length - 2));\r\n geom = new THREE.BufferGeometry();\r\n\r\n let vertices = CSG.nbuf3(triCount * 3 * 3);\r\n let normals = CSG.nbuf3(triCount * 3 * 3);\r\n\r\n let uvs;\r\n let colors;\r\n const grps = {};\r\n\r\n ps.forEach((p) => {\r\n let pvs = p.vertices;\r\n let pvlen = pvs.length;\r\n if (p.shared !== undefined) {\r\n if (!grps[p.shared]) grps[p.shared] = [];\r\n }\r\n\r\n if (pvlen) {\r\n if (pvs[0].color !== undefined) {\r\n if (!colors) colors = CSG.nbuf3(triCount * 3 * 3);\r\n }\r\n if (pvs[0].uv !== undefined) {\r\n if (!uvs) uvs = CSG.nbuf2(triCount * 2 * 3);\r\n }\r\n }\r\n for (let j = 3; j <= pvlen; j++) {\r\n p.shared !== undefined &&\r\n grps[p.shared].push(\r\n vertices.top / 3,\r\n vertices.top / 3 + 1,\r\n vertices.top / 3 + 2,\r\n );\r\n vertices.write(pvs[0].pos);\r\n vertices.write(pvs[j - 2].pos);\r\n vertices.write(pvs[j - 1].pos);\r\n normals.write(pvs[0].normal);\r\n normals.write(pvs[j - 2].normal);\r\n normals.write(pvs[j - 1].normal);\r\n uvs &&\r\n pvs[0].uv &&\r\n (uvs.write(pvs[0].uv) ||\r\n uvs.write(pvs[j - 2].uv) ||\r\n uvs.write(pvs[j - 1].uv));\r\n colors &&\r\n (colors.write(pvs[0].color) ||\r\n colors.write(pvs[j - 2].color) ||\r\n colors.write(pvs[j - 1].color));\r\n }\r\n });\r\n geom.setAttribute('position', new THREE.BufferAttribute(vertices.array, 3));\r\n geom.setAttribute('normal', new THREE.BufferAttribute(normals.array, 3));\r\n uvs && geom.setAttribute('uv', new THREE.BufferAttribute(uvs.array, 2));\r\n colors &&\r\n geom.setAttribute('color', new THREE.BufferAttribute(colors.array, 3));\r\n if (Object.keys(grps).length) {\r\n let index = [];\r\n let gbase = 0;\r\n for (let gi = 0; gi < Object.keys(grps).length; gi++) {\r\n const key = Number(Object.keys(grps)[gi]);\r\n geom.addGroup(gbase, grps[key].length, gi);\r\n gbase += grps[key].length;\r\n index = index.concat(grps[key]);\r\n }\r\n geom.setIndex(index);\r\n }\r\n g2 = geom;\r\n\r\n return geom;\r\n };\r\n\r\n static toMesh = function (csg, toMatrix, toMaterial) {\r\n let geom = CSG.toGeometry(csg);\r\n\r\n let inv = new THREE.Matrix4().copy(toMatrix).invert();\r\n geom.applyMatrix4(inv);\r\n geom.computeBoundingSphere();\r\n geom.computeBoundingBox();\r\n let m = new THREE.Mesh(geom, toMaterial);\r\n m.matrix.copy(toMatrix);\r\n m.matrix.decompose(m.position, m.quaternion, m.scale);\r\n m.rotation.setFromQuaternion(m.quaternion);\r\n m.updateMatrixWorld();\r\n m.castShadow = m.receiveShadow = true;\r\n return m;\r\n };\r\n}\r\n\r\n// # class Vector\r\n\r\n// Represents a 3D vector.\r\n//\r\n// Example usage:\r\n//\r\n// new CSG.Vector(1, 2, 3);\r\n\r\nclass Vector {\r\n x;\r\n y;\r\n z;\r\n\r\n constructor(x = 0, y = 0, z = 0) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n }\r\n copy(v) {\r\n this.x = v.x;\r\n this.y = v.y;\r\n this.z = v.z;\r\n return this;\r\n }\r\n clone() {\r\n return new Vector(this.x, this.y, this.z);\r\n }\r\n negate() {\r\n this.x *= -1;\r\n this.y *= -1;\r\n this.z *= -1;\r\n return this;\r\n }\r\n add(a) {\r\n this.x += a.x;\r\n this.y += a.y;\r\n this.z += a.z;\r\n return this;\r\n }\r\n sub(a) {\r\n this.x -= a.x;\r\n this.y -= a.y;\r\n this.z -= a.z;\r\n return this;\r\n }\r\n times(a) {\r\n this.x *= a;\r\n this.y *= a;\r\n this.z *= a;\r\n return this;\r\n }\r\n dividedBy(a) {\r\n this.x /= a;\r\n this.y /= a;\r\n this.z /= a;\r\n return this;\r\n }\r\n lerp(a, t) {\r\n return this.add(Vector.tv0.copy(a).sub(this).times(t));\r\n }\r\n unit() {\r\n return this.dividedBy(this.length());\r\n }\r\n length() {\r\n return Math.sqrt(this.x ** 2 + this.y ** 2 + this.z ** 2);\r\n }\r\n normalize() {\r\n return this.unit();\r\n }\r\n cross(b) {\r\n let a = this;\r\n const ax = a.x,\r\n ay = a.y,\r\n az = a.z;\r\n const bx = b.x,\r\n by = b.y,\r\n bz = b.z;\r\n\r\n this.x = ay * bz - az * by;\r\n this.y = az * bx - ax * bz;\r\n this.z = ax * by - ay * bx;\r\n\r\n return this;\r\n }\r\n dot(b) {\r\n return this.x * b.x + this.y * b.y + this.z * b.z;\r\n }\r\n\r\n //Temporaries used to avoid internal allocation..\r\n static tv0 = new Vector();\r\n static tv1 = new Vector();\r\n}\r\n\r\n// # class Vertex\r\n\r\n// Represents a vertex of a polygon. Use your own vertex class instead of this\r\n// one to provide additional features like texture coordinates and vertex\r\n// colors. Custom vertex classes need to provide a `pos` property and `clone()`,\r\n// `flip()`, and `interpolate()` methods that behave analogous to the ones\r\n// defined by `CSG.Vertex`. This class provides `normal` so convenience\r\n// functions like `CSG.sphere()` can return a smooth vertex normal, but `normal`\r\n// is not used anywhere else.\r\n\r\nclass Vertex {\r\n pos;\r\n normal;\r\n uv;\r\n color;\r\n constructor(pos, normal, uv, color) {\r\n this.pos = new Vector().copy(pos);\r\n this.normal = new Vector().copy(normal);\r\n uv && (this.uv = new Vector().copy(uv)) && (this.uv.z = 0);\r\n color && (this.color = new Vector().copy(color));\r\n }\r\n\r\n clone() {\r\n return new Vertex(this.pos, this.normal, this.uv, this.color);\r\n }\r\n\r\n // Invert all orientation-specific data (e.g. vertex normal). Called when the\r\n // orientation of a polygon is flipped.\r\n flip() {\r\n this.normal.negate();\r\n }\r\n\r\n // Create a new vertex between this vertex and `other` by linearly\r\n // interpolating all properties using a parameter of `t`. Subclasses should\r\n // override this to interpolate additional properties.\r\n interpolate(other, t) {\r\n return new Vertex(\r\n this.pos.clone().lerp(other.pos, t),\r\n this.normal.clone().lerp(other.normal, t),\r\n this.uv && other.uv && this.uv.clone().lerp(other.uv, t),\r\n this.color && other.color && this.color.clone().lerp(other.color, t),\r\n );\r\n }\r\n}\r\n\r\n// # class Plane\r\n\r\n// Represents a plane in 3D space.\r\n\r\nclass Plane {\r\n normal;\r\n w;\r\n constructor(normal, w) {\r\n this.normal = normal;\r\n this.w = w;\r\n }\r\n\r\n clone() {\r\n return new Plane(this.normal.clone(), this.w);\r\n }\r\n\r\n flip() {\r\n this.normal.negate();\r\n this.w = -this.w;\r\n }\r\n\r\n // Split `polygon` by this plane if needed, then put the polygon or polygon\r\n // fragments in the appropriate lists. Coplanar polygons go into either\r\n // `coplanarFront` or `coplanarBack` depending on their orientation with\r\n // respect to this plane. Polygons in front or in back of this plane go into\r\n // either `front` or `back`.\r\n splitPolygon(polygon, coplanarFront, coplanarBack, front, back) {\r\n const COPLANAR = 0;\r\n const FRONT = 1;\r\n const BACK = 2;\r\n const SPANNING = 3;\r\n\r\n // Classify each point as well as the entire polygon into one of the above\r\n // four classes.\r\n let polygonType = 0;\r\n let types = [];\r\n for (let i = 0; i < polygon.vertices.length; i++) {\r\n let t = this.normal.dot(polygon.vertices[i].pos) - this.w;\r\n let type =\r\n t < -Plane.EPSILON ? BACK : t > Plane.EPSILON ? FRONT : COPLANAR;\r\n polygonType |= type;\r\n types.push(type);\r\n }\r\n\r\n // Put the polygon in the correct list, splitting it when necessary.\r\n switch (polygonType) {\r\n case COPLANAR:\r\n (this.normal.dot(polygon.plane.normal) > 0\r\n ? coplanarFront\r\n : coplanarBack\r\n ).push(polygon);\r\n break;\r\n case FRONT:\r\n front.push(polygon);\r\n break;\r\n case BACK:\r\n back.push(polygon);\r\n break;\r\n case SPANNING:\r\n let f = [],\r\n b = [];\r\n for (let i = 0; i < polygon.vertices.length; i++) {\r\n let j = (i + 1) % polygon.vertices.length;\r\n let ti = types[i],\r\n tj = types[j];\r\n let vi = polygon.vertices[i],\r\n vj = polygon.vertices[j];\r\n if (ti != BACK) f.push(vi);\r\n if (ti != FRONT) b.push(ti != BACK ? vi.clone() : vi);\r\n if ((ti | tj) == SPANNING) {\r\n let t =\r\n (this.w - this.normal.dot(vi.pos)) /\r\n this.normal.dot(Vector.tv0.copy(vj.pos).sub(vi.pos));\r\n let v = vi.interpolate(vj, t);\r\n f.push(v);\r\n b.push(v.clone());\r\n }\r\n }\r\n if (f.length >= 3) front.push(new Polygon(f, polygon.shared));\r\n if (b.length >= 3) back.push(new Polygon(b, polygon.shared));\r\n break;\r\n }\r\n }\r\n\r\n // `Plane.EPSILON` is the tolerance used by `splitPolygon()` to decide if a\r\n // point is on the plane.\r\n static EPSILON = 1e-5;\r\n\r\n static fromPoints = function (a, b, c) {\r\n let n = Vector.tv0\r\n .copy(b)\r\n .sub(a)\r\n .cross(Vector.tv1.copy(c).sub(a))\r\n .normalize();\r\n return new Plane(n.clone(), n.dot(a));\r\n };\r\n}\r\n\r\n// # class Polygon\r\n\r\n// Represents a convex polygon. The vertices used to initialize a polygon must\r\n// be coplanar and form a convex loop. They do not have to be `Vertex`\r\n// instances but they must behave similarly (duck typing can be used for\r\n// customization).\r\n//\r\n// Each convex polygon has a `shared` property, which is shared between all\r\n// polygons that are clones of each other or were split from the same polygon.\r\n// This can be used to define per-polygon properties (such as surface color).\r\n\r\nclass Polygon {\r\n vertices;\r\n shared;\r\n plane;\r\n\r\n constructor(vertices, shared) {\r\n this.vertices = vertices;\r\n this.shared = shared;\r\n this.plane = Plane.fromPoints(\r\n vertices[0].pos,\r\n vertices[1].pos,\r\n vertices[2].pos,\r\n );\r\n }\r\n clone() {\r\n return new Polygon(\r\n this.vertices.map((v) => v.clone()),\r\n this.shared,\r\n );\r\n }\r\n flip() {\r\n this.vertices.reverse().forEach((v) => v.flip());\r\n this.plane.flip();\r\n }\r\n}\r\n\r\n// # class Node\r\n\r\n// Holds a node in a BSP tree. A BSP tree is built from a collection of polygons\r\n// by picking a polygon to split along. That polygon (and all other coplanar\r\n// polygons) are added directly to that node and the other polygons are added to\r\n// the front and/or back subtrees. This is not a leafy BSP tree since there is\r\n// no distinction between internal and leaf nodes.\r\n\r\nclass Node {\r\n plane;\r\n front;\r\n back;\r\n polygons;\r\n\r\n constructor(polygons) {\r\n this.polygons = [];\r\n if (polygons) this.build(polygons);\r\n }\r\n clone() {\r\n let node = new Node();\r\n node.plane = this.plane && this.plane.clone();\r\n node.front = this.front && this.front.clone();\r\n node.back = this.back && this.back.clone();\r\n node.polygons = this.polygons.map((p) => p.clone());\r\n return node;\r\n }\r\n\r\n // Convert solid space to empty space and empty space to solid space.\r\n invert() {\r\n for (let i = 0; i < this.polygons.length; i++) this.polygons[i].flip();\r\n\r\n this.plane && this.plane.flip();\r\n this.front && this.front.invert();\r\n this.back && this.back.invert();\r\n let temp = this.front;\r\n this.front = this.back;\r\n this.back = temp;\r\n }\r\n\r\n // Recursively remove all polygons in `polygons` that are inside this BSP\r\n // tree.\r\n clipPolygons(polygons) {\r\n if (!this.plane) return polygons.slice();\r\n let front = [],\r\n back = [];\r\n for (let i = 0; i < polygons.length; i++) {\r\n this.plane.splitPolygon(polygons[i], front, back, front, back);\r\n }\r\n if (this.front) front = this.front.clipPolygons(front);\r\n if (this.back) back = this.back.clipPolygons(back);\r\n else back = [];\r\n //return front;\r\n return front.concat(back);\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n // `bsp`.\r\n clipTo(bsp) {\r\n this.polygons = bsp.clipPolygons(this.polygons);\r\n if (this.front) this.front.clipTo(bsp);\r\n if (this.back) this.back.clipTo(bsp);\r\n }\r\n\r\n // Return a list of all polygons in this BSP tree.\r\n allPolygons() {\r\n let polygons = this.polygons.slice();\r\n if (this.front) polygons = polygons.concat(this.front.allPolygons());\r\n if (this.back) polygons = polygons.concat(this.back.allPolygons());\r\n return polygons;\r\n }\r\n\r\n // Build a BSP tree out of `polygons`. When called on an existing tree, the\r\n // new polygons are filtered down to the bottom of the tree and become new\r\n // nodes there. Each set of polygons is partitioned using the first polygon\r\n // (no heuristic is used to pick a good split).\r\n build(polygons) {\r\n if (!polygons.length) return;\r\n if (!this.plane) this.plane = polygons[0].plane.clone();\r\n let front = [],\r\n back = [];\r\n for (let i = 0; i < polygons.length; i++) {\r\n this.plane.splitPolygon(\r\n polygons[i],\r\n this.polygons,\r\n this.polygons,\r\n front,\r\n back,\r\n );\r\n }\r\n if (front.length) {\r\n if (!this.front) this.front = new Node();\r\n this.front.build(front);\r\n }\r\n if (back.length) {\r\n if (!this.back) this.back = new Node();\r\n this.back.build(back);\r\n }\r\n }\r\n\r\n static fromJSON = function (json) {\r\n return CSG.fromPolygons(\r\n json.polygons.map(\r\n (p) =>\r\n new Polygon(\r\n p.vertices.map((v) => new Vertex(v.pos, v.normal, v.uv)),\r\n p.shared,\r\n ),\r\n ),\r\n );\r\n };\r\n}\r\n\r\nexport { CSG, Vertex, Vector, Polygon, Plane };\r\n\r\n// Return a new CSG solid representing space in either this solid or in the\r\n// solid `csg`. Neither this solid nor the solid `csg` are modified.\r\n//\r\n// A.union(B)\r\n//\r\n// +-------+ +-------+\r\n// | | | |\r\n// | A | | |\r\n// | +--+----+ = | +----+\r\n// +----+--+ | +----+ |\r\n// | B | | |\r\n// | | | |\r\n// +-------+ +-------+\r\n//\r\n// Return a new CSG solid representing space in this solid but not in the\r\n// solid `csg`. Neither this solid nor the solid `csg` are modified.\r\n//\r\n// A.subtract(B)\r\n//\r\n// +-------+ +-------+\r\n// | | | |\r\n// | A | | |\r\n// | +--+----+ = | +--+\r\n// +----+--+ | +----+\r\n// | B |\r\n// | |\r\n// +-------+\r\n//\r\n// Return a new CSG solid representing space both this solid and in the\r\n// solid `csg`. Neither this solid nor the solid `csg` are modified.\r\n//\r\n// A.intersect(B)\r\n//\r\n// +-------+\r\n// | |\r\n// | A |\r\n// | +--+----+ = +--+\r\n// +----+--+ | +--+\r\n// | B |\r\n// | |\r\n// +-------+\r\n//\r\n","import React, { useRef } from 'react';\r\nimport * as THREE from 'three';\r\nimport { CSG } from 'app/components/WellboreTrajectoryDetailed3DView/CSGMesh.js';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst Nipple = ({ innerRadius, outerRadius, position, length, id }) => {\r\n const cylinderRef = useRef();\r\n const theme = useTheme();\r\n\r\n const arcShape = new THREE.Shape().absarc(\r\n 0,\r\n 0,\r\n outerRadius,\r\n 0,\r\n Math.PI,\r\n true,\r\n );\r\n\r\n const innerShape = new THREE.Shape();\r\n innerShape.absarc(0, 0, -innerRadius, 0, Math.PI);\r\n\r\n const outerGeometry = new THREE.ExtrudeBufferGeometry(arcShape, {\r\n steps: 1,\r\n depth: length,\r\n bevelEnabled: false,\r\n });\r\n\r\n const innerGeometry = new THREE.ExtrudeBufferGeometry(innerShape, {\r\n steps: 1,\r\n depth: length,\r\n bevelEnabled: false,\r\n });\r\n\r\n const bspA = CSG.fromGeometry(outerGeometry, 0);\r\n const bspB = CSG.fromGeometry(innerGeometry, 1);\r\n\r\n let bspResult = bspA.subtract(bspB);\r\n bspResult = CSG.toGeometry(bspResult);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Nipple;\r\n","import { Grid, CircularProgress } from '@material-ui/core';\r\nimport { Html } from '@react-three/drei';\r\nimport React from 'react';\r\n\r\nconst Loader = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Loader;\r\n","import { CSG } from 'app/components/WellboreTrajectoryDetailed3DView/CSGMesh.js';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { compose } from 'redux';\r\nimport * as THREE from 'three';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst objectUp = new THREE.Object3D().up;\r\nconst reusableMatrix = new THREE.Matrix4();\r\nconst orientationMultiplier = new THREE.Matrix4().set(\r\n 1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n 0,\r\n -1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n);\r\n\r\nconst Pipe = ({\r\n startVector = new THREE.Vector3(),\r\n endVector = new THREE.Vector3(),\r\n radius,\r\n outerRadius,\r\n position,\r\n length,\r\n}) => {\r\n const cylinderRef = useRef();\r\n\r\n const curve = new THREE.CatmullRomCurve3(\r\n [startVector, new THREE.Vector3(0, 0, 0), endVector],\r\n false,\r\n 'catmullrom',\r\n 0.5,\r\n );\r\n\r\n const position1 = curve.getPointAt(0.5);\r\n\r\n const arcShape = new THREE.Shape().absarc(\r\n 0,\r\n 0,\r\n outerRadius,\r\n 0,\r\n Math.PI,\r\n true,\r\n );\r\n\r\n const innerShape = new THREE.Shape();\r\n innerShape.absarc(0, 0, -radius, 0, Math.PI);\r\n\r\n const outerGeometry = new THREE.ExtrudeBufferGeometry(arcShape, {\r\n steps: 1,\r\n depth: length,\r\n bevelEnabled: false,\r\n });\r\n\r\n const innerGeometry = new THREE.ExtrudeBufferGeometry(innerShape, {\r\n steps: 1,\r\n depth: length,\r\n bevelEnabled: false,\r\n });\r\n\r\n const bspA = CSG.fromGeometry(outerGeometry, 0);\r\n const bspB = CSG.fromGeometry(innerGeometry, 1);\r\n\r\n // Subtract one bsp from the other via .subtract... other supported modes are .union and .intersect\r\n\r\n let bspResult = bspA.subtract(bspB);\r\n bspResult = CSG.toGeometry(bspResult);\r\n\r\n useEffect(() => {\r\n reusableMatrix.lookAt(startVector, endVector, objectUp);\r\n reusableMatrix.multiply(orientationMultiplier);\r\n }, [startVector, endVector]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose()(Pipe);\r\n","import * as THREE from 'three';\r\nimport { Cylinder } from '@react-three/drei';\r\nimport React, { useRef, useEffect, useState } from 'react';\r\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\r\nimport { convertMetric } from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst BHA = ({ BHA_LENGTH, maxOD, toolsByToolstringToolId }) => {\r\n const tools = useRef([]);\r\n const [_obj, setObj] = useState(null);\r\n\r\n useEffect(() => {\r\n tools.current = [];\r\n let posX = 0;\r\n const loader = new OBJLoader();\r\n Object.values(toolsByToolstringToolId).forEach((tool, index) => {\r\n if (\r\n tool.sequence === index + 1 &&\r\n convertMetric(\r\n tool.outerDiameter.roundedValue,\r\n tool.outerDiameter.unit,\r\n ) <= maxOD.value\r\n ) {\r\n posX -= convertMetric(tool.length.roundedValue, tool.length.unit);\r\n if (tool.tool3DObjectUrl) {\r\n loader.load(\r\n tool.tool3DObjectUrl,\r\n (toolObj) => {\r\n setObj(toolObj);\r\n toolObj.traverse((child) => {\r\n if (child.isMesh) {\r\n child.material = new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.bha.main,\r\n roughness: 0,\r\n metalness: 1,\r\n });\r\n }\r\n });\r\n const boundingBox = new THREE.Box3().setFromObject(toolObj);\r\n\r\n // Compute the center of the bounding box\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n\r\n // Translate all children (meshes) to re-center the group\r\n toolObj.children.forEach((child) => {\r\n child.position.sub(center);\r\n });\r\n tools.current.push(\r\n <>\r\n \r\n ,\r\n );\r\n },\r\n undefined,\r\n (error) => {\r\n console.error('An error occurred:', error);\r\n },\r\n );\r\n } else {\r\n tools.current.push(\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n );\r\n }\r\n }\r\n });\r\n }, [\r\n toolsByToolstringToolId,\r\n BHA_LENGTH.roundedValue,\r\n BHA_LENGTH.unit,\r\n maxOD.value,\r\n ]);\r\n\r\n return (\r\n <>\r\n {tools && tools.current && tools.current.length ? (\r\n {tools.current}\r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default BHA;\r\n","/* eslint-disable */\r\n/** disabling eslint to ignore exhaustive deps check as it was causing redundant hook execution\r\n * and gave out of memory exception\r\n */\r\nimport {\r\n between,\r\n convertMetric,\r\n distanceFromCenter,\r\n usePrevious,\r\n} from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport Toolstring from 'app/components/WellboreTrajectoryDetailed3DView/Toolstring';\r\nimport Nipple from 'app/components/WellboreTrajectoryDetailed3DView/Nipple';\r\nimport Loader from 'app/components/WellboreTrajectoryDetailed3DView/Loader';\r\nimport Pipe from 'app/components/WellboreTrajectoryDetailed3DView/Pipe';\r\nimport BHA from 'app/components/WellboreTrajectoryDetailed3DView/BHA';\r\nimport React, { useRef, useEffect, useState, Suspense } from 'react';\r\nimport { EMPTY_LIST, EMPTY_QUANTITY } from 'app/app.constants';\r\nimport { useThree } from '@react-three/fiber';\r\nimport * as THREE from 'three';\r\n\r\n/** Commented lines in this component include code for mocking currentDepth and\r\n * hence have not removed them for now */\r\nconst WellboreTrajectoryDetailed3DView = ({\r\n trajectory,\r\n // targetDepth,\r\n cDepth,\r\n wellboreSections,\r\n BHA_LENGTH,\r\n maxOD,\r\n toolsByToolstringToolId,\r\n}) => {\r\n const wellboreRef = useRef();\r\n const groupRef = useRef();\r\n const pipeGroupRef = useRef();\r\n const pipes = useRef([]);\r\n const nipples = useRef([]);\r\n const { scene } = useThree();\r\n\r\n const trajectoryPoints = trajectory.get('trajectoryPoints', EMPTY_LIST);\r\n\r\n const [radius, setRadius] = useState(null);\r\n const [pipeSections, setPipeSections] = useState(0);\r\n const [currentDepth, setCurrentDepth] = useState(EMPTY_QUANTITY);\r\n const previousDepth = usePrevious(\r\n convertMetric(\r\n currentDepth.value ? currentDepth.value : 0,\r\n currentDepth.unit ? currentDepth.unit : cDepth.unit,\r\n ),\r\n );\r\n\r\n const [inclination, setInclination] = useState(EMPTY_QUANTITY);\r\n\r\n useEffect(() => {\r\n setCurrentDepth(cDepth);\r\n }, [cDepth]);\r\n\r\n useEffect(() => {\r\n if (wellboreSections)\r\n wellboreSections.forEach((value, key) => {\r\n // adding pipe at default position when current depth is null.\r\n if (!currentDepth.hasValue || !currentDepth.value) {\r\n pipes.current.push(\r\n ,\r\n );\r\n } else if (\r\n currentDepth.hasValue &&\r\n between(\r\n convertMetric(currentDepth.value, currentDepth.unit),\r\n convertMetric(value.get('top').roundedValue, value.get('top').unit),\r\n convertMetric(\r\n value.get('bottom').roundedValue,\r\n value.get('bottom').unit,\r\n ),\r\n ) &&\r\n value.get('innerDiameter').hasValue\r\n ) {\r\n setPipeSections(\r\n Math.floor(\r\n (convertMetric(BHA_LENGTH.roundedValue, BHA_LENGTH.unit) * 3) /\r\n (convertMetric(currentDepth.value, currentDepth.unit) -\r\n previousDepth),\r\n ),\r\n );\r\n setRadius(\r\n convertMetric(\r\n value.get('innerDiameter').roundedValue,\r\n value.get('innerDiameter').unit,\r\n ) / 2,\r\n );\r\n for (const nippleValue of value\r\n .get('wellboreSectionNipples')\r\n .values()) {\r\n if (\r\n nippleValue.get('isNipple') &&\r\n (between(\r\n convertMetric(\r\n nippleValue.get('top').roundedValue,\r\n nippleValue.get('top').unit,\r\n ),\r\n convertMetric(currentDepth.value, currentDepth.unit),\r\n convertMetric(currentDepth.value, currentDepth.unit) +\r\n convertMetric(BHA_LENGTH.roundedValue, BHA_LENGTH.unit) * 2,\r\n ) ||\r\n between(\r\n convertMetric(\r\n nippleValue.get('top').roundedValue,\r\n nippleValue.get('top').unit,\r\n ),\r\n convertMetric(currentDepth.value, currentDepth.unit) -\r\n convertMetric(BHA_LENGTH.roundedValue, BHA_LENGTH.unit) * 2,\r\n convertMetric(currentDepth.value, currentDepth.unit),\r\n ))\r\n ) {\r\n let object = scene.getObjectByName(\r\n `Nipple-${nippleValue.get('wellboreSectionNippleId')}`,\r\n );\r\n const data = {\r\n hasValue: true,\r\n length: convertMetric(\r\n nippleValue.get('length').roundedValue,\r\n nippleValue.get('length').unit,\r\n ),\r\n width:\r\n convertMetric(\r\n nippleValue.get('innerDiameter').roundedValue,\r\n nippleValue.get('innerDiameter').unit,\r\n ) / 2,\r\n offset:\r\n convertMetric(\r\n value.get('innerDiameter').roundedValue,\r\n value.get('innerDiameter').unit,\r\n ) / 2,\r\n positionX:\r\n convertMetric(\r\n nippleValue.get('top').roundedValue,\r\n nippleValue.get('top').unit,\r\n ) - currentDepth.value,\r\n };\r\n if (!object) {\r\n nipples.current.push(\r\n ,\r\n );\r\n } else {\r\n object.position.x = data.positionX;\r\n }\r\n } else {\r\n if (nipples.current.length)\r\n nipples.current = nipples.current.filter(\r\n (nipple) =>\r\n Number(nipple.key) !==\r\n nippleValue.get('wellboreSectionNippleId'),\r\n );\r\n let object = scene.getObjectByName(\r\n `Nipple-${nippleValue.get('wellboreSectionNippleId')}`,\r\n );\r\n if (object) {\r\n scene.remove(object);\r\n object = null;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }, [wellboreSections, currentDepth]);\r\n\r\n useEffect(() => {\r\n if (\r\n pipeSections &&\r\n pipeSections > 0 &&\r\n convertMetric(currentDepth.value, currentDepth.unit) - previousDepth !== 0\r\n ) {\r\n pipes.current = [];\r\n for (let i = 0; i < pipeSections; i++) {\r\n let distance = 0,\r\n x = 0;\r\n if (i < Math.floor(pipeSections / 2)) {\r\n distance = distanceFromCenter(Math.ceil(pipeSections / 2), i);\r\n x =\r\n -(\r\n convertMetric(BHA_LENGTH.roundedValue, BHA_LENGTH.unit) / 2 +\r\n convertMetric(BHA_LENGTH.roundedValue, BHA_LENGTH.unit)\r\n ) +\r\n (convertMetric(currentDepth.value, currentDepth.unit) -\r\n previousDepth) *\r\n distance;\r\n } else {\r\n distance = distanceFromCenter(i, Math.floor(pipeSections / 2));\r\n x =\r\n convertMetric(BHA_LENGTH.roundedValue, BHA_LENGTH.unit) / 2 +\r\n convertMetric(BHA_LENGTH.roundedValue, BHA_LENGTH.unit) -\r\n (convertMetric(currentDepth.value, currentDepth.unit) -\r\n previousDepth) *\r\n distance;\r\n }\r\n pipes.current.push(\r\n ,\r\n );\r\n }\r\n } else {\r\n if (wellboreSections) {\r\n wellboreSections.forEach((value, key) => {\r\n if (\r\n currentDepth.hasValue &&\r\n between(\r\n convertMetric(currentDepth.value, currentDepth.unit),\r\n convertMetric(\r\n value.get('top').roundedValue,\r\n value.get('top').unit,\r\n ),\r\n convertMetric(\r\n value.get('bottom').roundedValue,\r\n value.get('bottom').unit,\r\n ),\r\n ) &&\r\n value.get('innerDiameter').hasValue\r\n ) {\r\n pipes.current.push(\r\n ,\r\n );\r\n }\r\n });\r\n }\r\n }\r\n }, [pipeSections, currentDepth]);\r\n\r\n useEffect(() => {\r\n if (pipeGroupRef && pipeGroupRef.current) {\r\n if (\r\n convertMetric(currentDepth.value, currentDepth.unit) - previousDepth >\r\n 0 &&\r\n pipeGroupRef.current.position.x >\r\n -(\r\n 2 *\r\n (convertMetric(currentDepth.value, currentDepth.unit) -\r\n previousDepth)\r\n )\r\n ) {\r\n pipeGroupRef.current.position.x -=\r\n convertMetric(currentDepth.value, currentDepth.unit) - previousDepth;\r\n } else {\r\n pipeGroupRef.current.position.x = 0;\r\n }\r\n if (\r\n groupRef &&\r\n groupRef.current &&\r\n groupRef.current.rotation.z !==\r\n THREE.MathUtils.degToRad(inclination.value)\r\n ) {\r\n groupRef.current.rotation.z = THREE.MathUtils.degToRad(\r\n inclination.value,\r\n );\r\n }\r\n }\r\n }, [currentDepth, pipeGroupRef, groupRef, inclination.value]);\r\n\r\n useEffect(() => {\r\n trajectoryPoints.forEach((previousPoint, index) => {\r\n const currentPoint = trajectoryPoints.get(index + 1);\r\n\r\n // Bottom reached\r\n if (!currentPoint) return false;\r\n\r\n if (\r\n between(\r\n convertMetric(currentDepth.value, currentDepth.unit),\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n )\r\n ) {\r\n setInclination({\r\n unit: 'degree',\r\n value: currentPoint.get('inclination'),\r\n hasValue: true,\r\n });\r\n }\r\n });\r\n }, [currentDepth, trajectoryPoints]);\r\n\r\n return (\r\n }>\r\n \r\n \r\n \r\n \r\n {nipples && nipples.current.length ? (\r\n <>{nipples.current}\r\n ) : null}\r\n {pipes && pipes.current.length ? (\r\n <>\r\n {pipes.current}\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default WellboreTrajectoryDetailed3DView;\r\n","import React from 'react';\r\n\r\nimport { styled } from '@material-ui/styles';\r\nimport { SwipeableDrawer as Drawer } from '@material-ui/core';\r\n\r\nconst drawerBleeding = 0;\r\nconst StyledBox = styled('div')(({ theme }) => ({\r\n backgroundColor: theme.mobile.Drawer.background.dark,\r\n}));\r\n\r\nconst Puller = styled('div')(({ theme }) => ({\r\n width: 130,\r\n height: '0.5rem',\r\n backgroundColor: theme.mobile.Drawer.puller.main,\r\n borderRadius: 5,\r\n position: 'absolute',\r\n top: 12,\r\n left: 'calc(50% - 65px)',\r\n}));\r\n\r\nconst MobileDrawerBase = ({ children, open, toggleOpen }) => {\r\n return (\r\n toggleOpen(false)}\r\n disableSwipeToOpen={false}\r\n variant=\"temporary\"\r\n ModalProps={{\r\n keepMounted: false,\r\n }}\r\n PaperProps={{\r\n square: false,\r\n style: {\r\n overflow: 'hidden',\r\n backgroundColor: 'transparent',\r\n borderRadius: '25px 25px 0 0',\r\n },\r\n }}\r\n >\r\n \r\n \r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default MobileDrawerBase;\r\n","import React from 'react';\r\nimport Box from '@material-ui/core/Box';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nconst MobileNavigationHelpTooltip = ({ classes, data }) => {\r\n return (\r\n \r\n \r\n {data.title}\r\n \r\n {data.data.map((help) => (\r\n \r\n \r\n {help.navType}\r\n {help.content}\r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default MobileNavigationHelpTooltip;\r\n","import React from 'react';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Box from '@material-ui/core/Box';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useViewMode } from 'app/hooks/useViewMode';\r\nimport MobileDrawerBase from 'app/components/Mobile/MobileDrawerBase';\r\nimport MobileNavigationHelpTooltip from 'app/components/Mobile/MobileNavigationHelpTooltip';\r\nimport { useState } from 'react';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nconst HtmlTooltip = ({ className, ...props }) => (\r\n \r\n);\r\n\r\nconst NavigationHelpTooltip = ({ classes, data }) => {\r\n const viewMode = useViewMode();\r\n const [drawerOpen, setDrawerOpen] = useState(false);\r\n return viewMode === 'mobile' ? (\r\n <>\r\n setDrawerOpen(true)}\r\n className={classes.MobileTooltipIcon}\r\n />\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {data.title}\r\n {data.data.map((help) => (\r\n \r\n \r\n \r\n {help.navType}\r\n \r\n \r\n {help.content}\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n }\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tooltipIcon: {\r\n '&:hover': {\r\n color: theme.palette.action.selected,\r\n },\r\n },\r\n MobileTooltipIcon: {\r\n position: 'absolute',\r\n top: theme.spacing(0),\r\n left: theme.spacing(2),\r\n zIndex: 2,\r\n fontSize: 'xx-large',\r\n '&:hover': {\r\n color: theme.palette.action.selected,\r\n },\r\n },\r\n tooltip: {\r\n backgroundColor:\r\n theme.altus.components.ContextualizedWell.tooltip.background.main,\r\n fontSize: theme.typography.pxToRem(12),\r\n },\r\n container: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n marginTop: theme.typography.pxToRem(3),\r\n },\r\n title: {\r\n color: 'inherit',\r\n fontSize: theme.typography.pxToRem(14),\r\n },\r\n navType: {\r\n color: 'inherit',\r\n fontSize: theme.typography.pxToRem(12),\r\n },\r\n content: {\r\n color: alpha(theme.palette.common.white, 0.7),\r\n fontSize: theme.typography.pxToRem(12),\r\n },\r\n drawerContent: {\r\n color: alpha(theme.palette.common.white, 0.7),\r\n fontSize: theme.typography.pxToRem(12),\r\n padding: theme.spacing(3),\r\n },\r\n drawerTitle: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n },\r\n drawerNavType: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n image: {\r\n height: theme.typography.pxToRem(45),\r\n width: 'auto',\r\n marginLeft: theme.typography.pxToRem(10),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(NavigationHelpTooltip);\r\n","import * as THREE from 'three';\r\nimport { useEffect, useState } from 'react';\r\nimport { useThree } from '@react-three/fiber';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\r\n\r\nconst Environment = () => {\r\n const [envMap, setEnvMap] = useState(null);\r\n const { scene, gl } = useThree();\r\n const src = `${PUBLIC_ASSETS_URL}/textures/envMap.hdr`;\r\n\r\n useEffect(() => {\r\n const loader = new RGBELoader();\r\n loader.load(src, (texture) => {\r\n setEnvMap(texture);\r\n });\r\n\r\n return () => setEnvMap(null);\r\n }, [src]);\r\n\r\n useEffect(() => {\r\n if (!envMap || !scene || !gl) return;\r\n\r\n const pmremGenerator = new THREE.PMREMGenerator(gl);\r\n pmremGenerator.compileEquirectangularShader();\r\n const envMapPMREM = createPMREM(pmremGenerator, envMap);\r\n scene.environment = envMapPMREM;\r\n\r\n return () => (scene.environment = null);\r\n }, [scene, envMap, gl]);\r\n\r\n return null;\r\n};\r\n\r\nconst createPMREM = (pmremGenerator, texture) => {\r\n const envMap = pmremGenerator.fromEquirectangular(texture).texture;\r\n texture.dispose();\r\n pmremGenerator.dispose();\r\n\r\n return envMap;\r\n};\r\n\r\nexport default Environment;\r\n","import WellboreTrajectoryDetailed3DView from 'app/components/WellboreTrajectoryDetailed3DView/WellboreTrajectoryDetailed3DView';\r\nimport useLatestProjectWellboreDetail from 'features/projects/hooks/useLatestProjectWellboreDetails';\r\nimport WellboreTrajectoryLegends from 'app/components/WellboreTrajectory/WellboreTrajectoryLegends';\r\nimport NavigationHelpTooltip from 'app/components/WellboreContextualization/NavigationHelpTooltip';\r\nimport useProjectWellboreTrajectory from 'features/wells/hooks/useProjectWellboreTrajectory';\r\nimport { getTargetDepthFromState } from 'features/projects/activities/activities.selectors';\r\nimport { getProjectWellbore } from 'features/projects/wellbore/projectWellbore.actions';\r\nimport Environment from 'app/components/WellboreTrajectoryDetailed3DView/Environment';\r\nimport { convertMetric } from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport React, {\r\n useCallback,\r\n useEffect,\r\n useState,\r\n Suspense,\r\n useMemo,\r\n} from 'react';\r\nimport Loader from 'app/components/WellboreTrajectoryDetailed3DView/Loader';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport {\r\n EMPTY_MAP,\r\n EMPTY_QUANTITY,\r\n PUBLIC_ASSETS_URL,\r\n} from 'app/app.constants';\r\nimport { Grid, CircularProgress, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { OrbitControls } from '@react-three/drei';\r\nimport { Canvas } from '@react-three/fiber';\r\nimport takeLast from 'lodash/last';\r\nimport * as THREE from 'three';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst WellboreTrajectoryDetailed3DContainer = ({\r\n classes,\r\n curve,\r\n projectId,\r\n BHA_LENGTH,\r\n hideHelp = false,\r\n wellboreSections,\r\n registerDataPointsHandler,\r\n children = null,\r\n materialMap,\r\n maxOD,\r\n toolsByToolstringToolId,\r\n}) => {\r\n const theme = useTheme();\r\n const [_domElement, setDomElement] = useState();\r\n const [help, setHelp] = useState();\r\n const rootRef = useCallback((node) => {\r\n if (node) {\r\n setDomElement(node);\r\n }\r\n }, []);\r\n const [currentDepth, setCurrentDepth] = useState(EMPTY_QUANTITY);\r\n\r\n /** Mocking the current depth simulation for gradual change\r\n * Keep these lines commented while pushing to dev\r\n */\r\n // const [currentDepth, setCurrentDepth] = useState({\r\n // unit: 'm',\r\n // value: 1210,\r\n // hasValue: true,\r\n // });\r\n\r\n // useEffect(() => {\r\n // if (currentDepth && targetDepth && currentDepth.value <= targetDepth.value) {\r\n // setTimeout(() => setCurrentDepth({ ...currentDepth, value: currentDepth.value + 0.3 }), 1000)\r\n // }\r\n // }, [currentDepth])\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getProjectWellbore(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n const targetDepth = useSelector(getTargetDepthFromState);\r\n\r\n const onReceiveInitialData = useCallback(\r\n (readings) => {\r\n if (!curve) return;\r\n\r\n const reading = readings.find(\r\n (reading) => reading.name === curve.get('name'),\r\n );\r\n\r\n var latestDepthData = takeLast(reading.data);\r\n\r\n if (!latestDepthData) return;\r\n\r\n const [_timestamp, _depth, value] = latestDepthData;\r\n\r\n setCurrentDepth({\r\n hasValue: true,\r\n unit: curve.get('unit'),\r\n value: value,\r\n });\r\n },\r\n [curve, setCurrentDepth],\r\n );\r\n\r\n const onReceiveData = useCallback(\r\n (readings) => {\r\n if (!curve) return;\r\n\r\n const reading = readings.find(\r\n (reading) => reading.name === curve.get('name'),\r\n );\r\n\r\n if (!reading) return;\r\n if (!reading.data[0]) return;\r\n\r\n const [_timestamp, _depth, value] = reading.data[0];\r\n\r\n setCurrentDepth({\r\n hasValue: true,\r\n unit: curve.get('unit'),\r\n value: value,\r\n });\r\n },\r\n [curve],\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveInitialData, onReceiveData);\r\n }, [onReceiveData, onReceiveInitialData, registerDataPointsHandler]);\r\n\r\n const [latestWellboreDetails = EMPTY_MAP, wellDetailsDataState] =\r\n useLatestProjectWellboreDetail(projectId);\r\n\r\n const [trajectory = EMPTY_MAP, trajectoryDataState] =\r\n useProjectWellboreTrajectory(projectId);\r\n\r\n const dataState = getSummarizedDataStateFromState([\r\n wellDetailsDataState,\r\n trajectoryDataState,\r\n ]);\r\n\r\n const legends = useMemo(\r\n () => [\r\n {\r\n depth: currentDepth?.value,\r\n name: 'Current depth',\r\n unit: currentDepth?.unit,\r\n color: theme.altus.components.ContextualizedWell.trajectory.depth,\r\n },\r\n ],\r\n [currentDepth, theme],\r\n );\r\n\r\n useEffect(() => {\r\n prepareHelpData();\r\n }, []);\r\n\r\n const prepareHelpData = () => {\r\n setHelp({\r\n title: 'HOW TO INTERACT WITH 3D BHA?',\r\n data: [\r\n {\r\n navType: '1- Dragging around the BHA:',\r\n content: 'Use simple dragging to go up and down on the BHA',\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/navigate.png`,\r\n },\r\n {\r\n navType: '2- Zoom in and out:',\r\n content: (\r\n
    \r\n
  • \r\n Touchpad: Use two fingers and move them closer to zoom in\r\n further to zoom out\r\n
  • \r\n
  • \r\n Mouse: Scroll forward to zoom in and backward to zoom out.\r\n
  • \r\n
\r\n ),\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/zoomIn.png`,\r\n },\r\n ],\r\n });\r\n };\r\n\r\n if (dataState.isLoading()) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (!trajectory.size) return children;\r\n\r\n return (\r\n <>\r\n {\r\n // Do not propagate click events that happen on the scene (like when clicking to orbit around)\r\n event.stopPropagation();\r\n }}\r\n >\r\n {!hideHelp && (\r\n \r\n {help && }\r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n }>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n height: '100%',\r\n cursor: 'pointer',\r\n display: 'inline-block',\r\n position: 'relative',\r\n },\r\n legend: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n bottom: theme.spacing(1),\r\n },\r\n help: {\r\n position: 'absolute',\r\n top: theme.spacing(5),\r\n left: theme.spacing(1),\r\n zIndex: 1,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(WellboreTrajectoryDetailed3DContainer);\r\n","import {\r\n createGetToolstringSelector,\r\n getToolstringsByTaskFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\nimport { requestProjectWellboreSections } from 'features/projects/wellbore/sections/projectWellboreSection.actions';\r\nimport { getToolstringsForTask } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { createProjectWellboreSectionsSelector } from 'features/projects/projects.selectors';\r\nimport WellboreTrajectoryDetailed3DContainer from './WellboreTrajectoryDetailed3DContainer';\r\nimport { getToolstring } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { getProjectWellbore } from 'features/projects/wellbore/projectWellbore.actions';\r\nimport { getAllTasksFromState } from 'features/projects/tasks/tasks.selectors';\r\nimport { Grid, CircularProgress, Typography } from '@material-ui/core';\r\nimport { EMPTY_QUANTITY, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { getAllTasks } from 'features/projects/tasks/tasks.actions';\r\nimport useProject from 'features/projects/hooks/useProject';\r\nimport React, { useEffect, useMemo, useState, useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport toolstringService from 'services/toolstring.service';\r\n\r\nconst WellboreTrajectoryDataFetchContainer = ({\r\n classes,\r\n projectId,\r\n taskId: taskIdFromQuery,\r\n ...rest\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [toolsByToolstringToolId, setToolsByToolstringToolId] = useState(null);\r\n const [BHA_LENGTH, setBHALength] = useState(EMPTY_QUANTITY);\r\n const [toolStringId, setToolStringId] = useState(null);\r\n const [maxOD, setMaxOD] = useState(EMPTY_QUANTITY);\r\n const [taskId, setTaskId] = useState(null);\r\n const [unplannedToolString, setUnPlannedToolString] = useState(false);\r\n\r\n useEffect(() => {\r\n dispatch(getProjectWellbore(projectId));\r\n dispatch(getAllTasks(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n const project = useProject(projectId);\r\n const tasks = useSelector(getAllTasksFromState);\r\n\r\n useEffect(() => {\r\n dispatch(requestProjectWellboreSections(projectId));\r\n }, [projectId, dispatch]);\r\n\r\n const projectWellboreSectionsSelector = useMemo(\r\n () => createProjectWellboreSectionsSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const wellboreSections = useSelector(projectWellboreSectionsSelector);\r\n\r\n useEffect(() => {\r\n if (project && project.size && tasks.size && !taskIdFromQuery) {\r\n tasks.forEach((task) => {\r\n if (task.get('status') === WORK_ITEM_STATUS.STARTED) {\r\n dispatch(getToolstringsForTask(projectId, task.get('taskId')));\r\n }\r\n });\r\n }\r\n }, [project, tasks, projectId, dispatch, taskIdFromQuery]);\r\n\r\n const toolstrings = useSelector(getToolstringsByTaskFromState);\r\n\r\n const getPlannedToolstring = useCallback(\r\n () =>\r\n toolstringService\r\n .getPlannedToolstring(projectId, taskIdFromQuery)\r\n .then((toolstring) => {\r\n setToolStringId(toolstring?.toolStringId);\r\n setTaskId(taskIdFromQuery);\r\n setUnPlannedToolString(false);\r\n }),\r\n [projectId, taskIdFromQuery],\r\n );\r\n\r\n useEffect(() => {\r\n if (!taskIdFromQuery) {\r\n toolstrings.forEach((tool) => {\r\n const id = tool.find(\r\n (toolstring) => toolstring?.get('isPlanned') === true,\r\n );\r\n if (id && id.size) {\r\n setToolStringId(id.get('id'));\r\n setTaskId(id.get('taskId'));\r\n setUnPlannedToolString(false);\r\n }\r\n });\r\n } else {\r\n getPlannedToolstring();\r\n }\r\n }, [toolstrings, taskIdFromQuery, getPlannedToolstring]);\r\n\r\n useEffect(() => {\r\n if (toolStringId) dispatch(getToolstring(projectId, taskId, toolStringId));\r\n else {\r\n setUnPlannedToolString(true);\r\n }\r\n }, [projectId, taskId, toolStringId, dispatch]);\r\n\r\n const toolstring = useSelector(createGetToolstringSelector(toolStringId));\r\n\r\n useEffect(() => {\r\n const ts = toolstring.toJS();\r\n if (ts.maxOD && ts.totalLength) {\r\n setToolsByToolstringToolId(ts.toolsByToolstringToolId);\r\n setBHALength(ts.totalLength);\r\n setMaxOD(ts.maxOD);\r\n }\r\n }, [toolstring]);\r\n\r\n if (wellboreSections && BHA_LENGTH && maxOD && toolsByToolstringToolId)\r\n return (\r\n \r\n );\r\n\r\n if (unplannedToolString) {\r\n return (\r\n \r\n \r\n \r\n Please mark a BHA as planned from Simulations\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default WellboreTrajectoryDataFetchContainer;\r\n","import WellboreTrajectoryDataFetchContainer from 'app/components/WellboreTrajectoryDetailed3DView/WellboreTrajectoryDataFetchContainer';\r\nimport CorrelationDashboard from 'features/projects/dashboard/components/dashboards/logging/components/CorrelationDashboard';\r\nimport LoggingDashboardContainer from 'features/projects/dashboard/components/dashboards/logging/LoggingDashboardContainer';\r\nimport ProjectExecutionStatusContainer from 'features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusContainer';\r\nimport DashboardGaugeChartsContainer from 'features/projects/dashboard/components/charts/DashboardGaugeChartsContainer';\r\nimport useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\nimport React, { useMemo } from 'react';\r\nimport useQueryParams from 'features/projects/dashboard/hooks/useQueryParams';\r\n\r\nconst BHAGraphAndGuagesController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, setExtremes, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n const { taskId = null } = useQueryParams();\r\n\r\n const depthCurve = useMemo(\r\n () => curves.find((curve) => curve.get('isDepth')),\r\n [curves],\r\n );\r\n\r\n return renderSlots(\r\n ,\r\n ,\r\n ,\r\n ,\r\n );\r\n};\r\n\r\nexport default BHAGraphAndGuagesController;\r\n","/* eslint-disable */\r\n/** disabling eslint to ignore exhaustive deps check as we don't need\r\n * those variables as dependencies since it does not affect the execution\r\n * of the hook.\r\n */\r\nimport * as THREE from 'three';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Iterable } from 'immutable';\r\nimport { QuantityShape } from 'utils/app.util';\r\nimport ZoomIn from '@material-ui/icons/ZoomIn';\r\nimport { Box, Button } from '@material-ui/core';\r\nimport ZoomOut from '@material-ui/icons/ZoomOut';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n ToolStringGroupName,\r\n renderCable,\r\n} from 'app/components/WellGraphAndGuages/RenderCableAndBHAScene';\r\nimport { useThreeJsManager } from 'app/threeJs/ThreeJsManagerProvider';\r\nimport { useCallback, useEffect, useState, memo, useMemo } from 'react';\r\nimport WellGraphAndGuagesTrajectoryScene, {\r\n Materials,\r\n TrajectoryCylinderPrefix,\r\n} from 'app/components/WellGraphAndGuages/WellGraphAndGuagesTrajectoryScene';\r\nimport { convertMetric } from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport {\r\n EMPTY_LIST,\r\n EMPTY_MAP,\r\n EMPTY_QUANTITY,\r\n PUBLIC_ASSETS_URL,\r\n} from 'app/app.constants';\r\nimport NavigationHelpTooltip from 'app/components/WellboreContextualization/NavigationHelpTooltip';\r\nimport WellboreTrajectoryLegends from 'app/components/WellboreTrajectory/WellboreTrajectoryLegends';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst WellGraphAndGuagesTrajectory = ({\r\n classes,\r\n sceneKey,\r\n hideAxisLabels,\r\n hideLegends = false,\r\n hideHelp = false,\r\n targetDepth,\r\n cDepth,\r\n hideGrid = false,\r\n disableOrbitControls = false,\r\n trajectory = EMPTY_MAP,\r\n wellboreDetail = EMPTY_MAP,\r\n wellboreSections,\r\n BHA_LENGTH,\r\n toolsByToolstringToolId,\r\n}) => {\r\n const theme = useTheme();\r\n const [domElement, setDomElement] = useState();\r\n const [zoomEnabled, setZoomEnabled] = useState(false);\r\n const [camera, setCamera] = useState();\r\n const [controls, setControls] = useState();\r\n const [scene, setScene] = useState();\r\n const [cameraPosition, setCameraPosition] = useState();\r\n const [help, setHelp] = useState();\r\n const threeJsManager = useThreeJsManager();\r\n\r\n const maxTVD = trajectory.get('verticalDepth');\r\n const trajectoryPoints = trajectory.get('trajectoryPoints', EMPTY_LIST);\r\n const maxNorthEast = trajectory.get('maximumNorthEast');\r\n\r\n const rootRef = useCallback((node) => {\r\n if (node) {\r\n setDomElement(node);\r\n }\r\n }, []);\r\n\r\n const dhsvDepth = wellboreDetail.get('downHoleSafetyValveDepth');\r\n const maximumWorkingDepth = wellboreDetail.get('maximumWorkingDepth');\r\n\r\n const [currentDepth, setCurrentDepth] = useState(EMPTY_QUANTITY);\r\n\r\n useEffect(() => {\r\n setCurrentDepth(cDepth);\r\n }, [cDepth]);\r\n\r\n const depthsOfInterest = useMemo(\r\n () => [\r\n {\r\n depth: dhsvDepth?.value,\r\n name: 'DHSV',\r\n unit: dhsvDepth?.unit,\r\n material: Materials.dhsv,\r\n color: theme.altus.components.ContextualizedWell.trajectory.dhsv,\r\n },\r\n {\r\n depth: targetDepth?.value,\r\n name: 'Target depth',\r\n unit: targetDepth?.unit,\r\n material: Materials.targetDepth,\r\n color: theme.altus.components.ContextualizedWell.trajectory.targetDepth,\r\n },\r\n {\r\n depth: maximumWorkingDepth?.value,\r\n name: 'Max working depth',\r\n unit: maximumWorkingDepth?.unit,\r\n material: Materials.maximumWorkingDepth,\r\n color:\r\n theme.altus.components.ContextualizedWell.trajectory\r\n .maximumWorkingDepth,\r\n },\r\n ],\r\n [dhsvDepth, maximumWorkingDepth, targetDepth, theme],\r\n );\r\n\r\n const trajectoryScene = useMemo(() => {\r\n // The scene gets created only when we get the trajectory\r\n if (!domElement || !maxNorthEast || !trajectoryPoints.size || !maxTVD) {\r\n return;\r\n }\r\n\r\n return WellGraphAndGuagesTrajectoryScene({\r\n theme,\r\n domElement,\r\n hideAxisLabels,\r\n depthsOfInterest,\r\n trajectoryPoints,\r\n maxTVD: convertMetric(maxTVD.value, maxTVD.unit),\r\n maxNorthEast: convertMetric(maxNorthEast.value, maxNorthEast.unit),\r\n hideGrid,\r\n disableOrbitControls,\r\n wellboreSections,\r\n });\r\n }, [\r\n theme,\r\n maxTVD,\r\n hideGrid,\r\n domElement,\r\n maxNorthEast,\r\n hideAxisLabels,\r\n depthsOfInterest,\r\n trajectoryPoints,\r\n disableOrbitControls,\r\n wellboreSections,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!trajectoryScene || !threeJsManager) return;\r\n\r\n const { addScene, disposeScene } = threeJsManager;\r\n\r\n disposeScene(sceneKey);\r\n const { scene, camera, orbitControls } = trajectoryScene;\r\n setScene(scene);\r\n setCamera(camera);\r\n setControls(orbitControls);\r\n setCameraPosition(camera.position);\r\n addScene(sceneKey, trajectoryScene);\r\n\r\n // The scene will be disposed whenever this component gets unmounted.\r\n // For example, if an operation gets \"filtered away\", then this will be unmounted and the effect will cleanup the scene resources.\r\n return () => disposeScene(sceneKey);\r\n }, [threeJsManager, sceneKey, trajectoryScene]);\r\n\r\n useEffect(() => {\r\n if (\r\n !maxTVD ||\r\n !currentDepth.value ||\r\n !trajectoryPoints.size ||\r\n !threeJsManager\r\n )\r\n return;\r\n\r\n const { updateScene } = threeJsManager;\r\n\r\n const CableAndBHAUpdater = (sceneInfo) => {\r\n const { scene } = sceneInfo;\r\n\r\n let object = scene.getObjectByName(ToolStringGroupName);\r\n scene.remove(object);\r\n object = null;\r\n\r\n const toolstring = renderCable({\r\n trajectoryPoints,\r\n maxTVD,\r\n toolsByToolstringToolId,\r\n BHA_LENGTH,\r\n currentDepth,\r\n });\r\n\r\n scene.add(toolstring);\r\n };\r\n\r\n updateScene(sceneKey, CableAndBHAUpdater);\r\n }, [\r\n threeJsManager,\r\n sceneKey,\r\n currentDepth,\r\n trajectoryPoints,\r\n maxTVD,\r\n toolsByToolstringToolId,\r\n BHA_LENGTH,\r\n ]);\r\n\r\n useEffect(() => {\r\n // Then, whenever we get a new currentDepth, we just re-paint the necessary cylinders, but no need to recreate the scene.\r\n if (!threeJsManager) return;\r\n\r\n const { updateScene } = threeJsManager;\r\n\r\n const trajectoryColorUpdater = (sceneInfo) => {\r\n const { scene } = sceneInfo;\r\n\r\n scene.traverse((cylinder) => {\r\n // Each cylinder has a name property set with a prefix. We can use that prefix to get all of the trajectory cylinders in the scene.\r\n if (!cylinder.name.startsWith(TrajectoryCylinderPrefix)) return;\r\n\r\n // We also store what's the \"measuredDepth\" that the cylinder is representing. Based on that and the current depth, we choose\r\n // which color it should use.\r\n cylinder.material =\r\n cylinder.data.measuredDepth <=\r\n convertMetric(currentDepth?.value, currentDepth?.unit)\r\n ? Materials.currentDepth\r\n : Materials.base;\r\n cylinder.material.side = THREE.DoubleSide;\r\n });\r\n };\r\n\r\n updateScene(sceneKey, trajectoryColorUpdater);\r\n }, [threeJsManager, trajectoryScene, sceneKey, currentDepth]);\r\n\r\n const legends = useMemo(\r\n () => [\r\n {\r\n depth: currentDepth?.value,\r\n name: 'Current depth',\r\n unit: currentDepth?.unit,\r\n color: theme.altus.components.ContextualizedWell.trajectory.depth,\r\n },\r\n ...depthsOfInterest,\r\n ],\r\n [currentDepth, depthsOfInterest, theme],\r\n );\r\n\r\n useEffect(() => {\r\n if (!scene || !camera || !controls || !scene.getObjectByName('BHA')) {\r\n setZoomEnabled(false);\r\n return;\r\n }\r\n\r\n const object = scene.getObjectByName('BHA');\r\n if (zoomEnabled) {\r\n setCameraPosition(camera.position.clone());\r\n camera.position.set(\r\n object.position.x,\r\n object.position.y,\r\n object.position.z + 150,\r\n );\r\n camera.lookAt(object.position);\r\n controls.enabled = false;\r\n } else {\r\n camera.position.set(cameraPosition.x, cameraPosition.y, cameraPosition.z);\r\n if (object) camera.lookAt(object.position);\r\n controls.enabled = true;\r\n controls.update();\r\n }\r\n }, [zoomEnabled]);\r\n\r\n useEffect(() => {\r\n prepareHelpData();\r\n }, []);\r\n\r\n const prepareHelpData = () => {\r\n setHelp({\r\n title: 'HOW TO INTERACT WITH 3D WELL?',\r\n data: [\r\n {\r\n navType: '1- Dragging around the well:',\r\n content: 'Use simple dragging to go around the well',\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/navigate.png`,\r\n },\r\n {\r\n navType: '2- Zoom in and out:',\r\n content: (\r\n
    \r\n
  • \r\n Touchpad: Use two fingers and move them closer to zoom in\r\n further to zoom out\r\n
  • \r\n
  • \r\n Mouse: Scroll forward to zoom in and backward to zoom out.\r\n
  • \r\n
\r\n ),\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/zoomIn.png`,\r\n },\r\n {\r\n navType: '3- Navigate up and down:',\r\n content:\r\n 'Use control key and simple dragging to go up and down on the well.',\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/ctrl.png`,\r\n },\r\n ],\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (\r\n scene &&\r\n camera &&\r\n currentDepth.hasValue &&\r\n zoomEnabled &&\r\n scene.getObjectByName('BHA')\r\n ) {\r\n const object = scene.getObjectByName('BHA');\r\n camera.position.set(\r\n object.position.x,\r\n object.position.y,\r\n object.position.z + 150,\r\n );\r\n camera.lookAt(object.position);\r\n }\r\n }, [scene, camera, currentDepth, zoomEnabled]);\r\n\r\n return (\r\n <>\r\n setZoomEnabled(!zoomEnabled)}\r\n variant={zoomEnabled ? 'contained' : 'outlined'}\r\n >\r\n {zoomEnabled ? : }\r\n \r\n {\r\n // Do not propagate click events that happen on the scene (like when clicking to orbit around)\r\n if (!disableOrbitControls) {\r\n event.stopPropagation();\r\n }\r\n }}\r\n >\r\n {!hideHelp && (\r\n \r\n {help && }\r\n \r\n )}\r\n {!hideLegends && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n height: '100%',\r\n cursor: 'pointer',\r\n display: 'inline-block',\r\n position: 'relative',\r\n },\r\n legend: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n bottom: theme.spacing(1),\r\n },\r\n button: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n bottom: theme.spacing(1),\r\n zIndex: 1,\r\n },\r\n help: {\r\n position: 'absolute',\r\n top: theme.spacing(5),\r\n left: theme.spacing(1),\r\n },\r\n});\r\n\r\nWellGraphAndGuagesTrajectory.propTypes = {\r\n sceneKey: PropTypes.number,\r\n targetDepth: QuantityShape,\r\n currentDepth: QuantityShape,\r\n hideLegends: PropTypes.bool,\r\n trajectory: PropTypes.instanceOf(Iterable),\r\n wellboreDetail: PropTypes.instanceOf(Iterable),\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(WellGraphAndGuagesTrajectory);\r\n","import PropTypes from 'prop-types';\r\n// import { useState, useEffect } from 'react';\r\nimport { Grid, CircularProgress } from '@material-ui/core';\r\n\r\nimport { getSummarizedDataState } from 'altus-datastate';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport useProjectWellboreTrajectory from 'features/wells/hooks/useProjectWellboreTrajectory';\r\nimport useLatestProjectWellboreDetail from 'features/projects/hooks/useLatestProjectWellboreDetails';\r\nimport WellGraphAndGuagesTrajectory from 'app/components/WellGraphAndGuages/WellGraphAndGuagesTrajectory';\r\n\r\nconst ProjectWellGraphTrajectoryContainer = ({\r\n projectId,\r\n targetDepth,\r\n children = null,\r\n currentDepth,\r\n ...rest\r\n}) => {\r\n /** Mocking the current depth simulation for gradual change\r\n * Keep these lines commented while pushing to dev\r\n */\r\n // const [currentDepth, setCurrentDepth] = useState({\r\n // unit: 'm',\r\n // value: 1200,\r\n // hasValue: true,\r\n // });\r\n // useEffect(() => {\r\n // if (currentDepth && currentDepth.value <= 3500) {\r\n // setTimeout(() => setCurrentDepth({ ...currentDepth, value: currentDepth.value + 30 }), 1000)\r\n // } else {\r\n // setCurrentDepth({ ...currentDepth, value: 1203 })\r\n // }\r\n // }, [currentDepth])\r\n\r\n const [latestWellboreDetails = EMPTY_MAP, wellDetailsDataState] =\r\n useLatestProjectWellboreDetail(projectId);\r\n\r\n const [trajectory = EMPTY_MAP, trajectoryDataState] =\r\n useProjectWellboreTrajectory(projectId);\r\n\r\n const dataState = getSummarizedDataState([\r\n wellDetailsDataState,\r\n trajectoryDataState,\r\n ]);\r\n\r\n if (dataState.isLoading()) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (!trajectory.size) return children;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nProjectWellGraphTrajectoryContainer.propTypes = {\r\n children: PropTypes.node,\r\n projectId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n};\r\n\r\nexport default ProjectWellGraphTrajectoryContainer;\r\n","import takeLast from 'lodash/last';\r\nimport PropTypes from 'prop-types';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useCallback, useEffect, useState, useMemo } from 'react';\r\n\r\nimport { EMPTY_QUANTITY } from 'app/app.constants';\r\nimport ThreeJsManagerProvider from 'app/threeJs/ThreeJsManagerProvider';\r\nimport { getProjectWellbore } from 'features/projects/wellbore/projectWellbore.actions';\r\nimport { getTargetDepthFromState } from 'features/projects/activities/activities.selectors';\r\nimport ProjectWellGraphTrajectoryContainer from 'app/components/WellGraphAndGuages/ProjectWellGraphTrajectoryContainer';\r\nimport {\r\n createGetToolstringSelector,\r\n getToolstringsByTaskFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\nimport { requestProjectWellboreSections } from 'features/projects/wellbore/sections/projectWellboreSection.actions';\r\nimport { getToolstringsForTask } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { createProjectWellboreSectionsSelector } from 'features/projects/projects.selectors';\r\nimport { getToolstring } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { getAllTasksFromState } from 'features/projects/tasks/tasks.selectors';\r\nimport { Grid, CircularProgress, Typography } from '@material-ui/core';\r\nimport { getAllTasks } from 'features/projects/tasks/tasks.actions';\r\nimport useProject from 'features/projects/hooks/useProject';\r\nimport toolstringService from 'services/toolstring.service';\r\n\r\nconst WellGraphAndGuagesDataContainer = ({\r\n curve,\r\n projectId,\r\n registerDataPointsHandler,\r\n taskId: taskIdFromQuery,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [currentDepth, setCurrentDepth] = useState(EMPTY_QUANTITY);\r\n const [toolsByToolstringToolId, setToolsByToolstringToolId] = useState(null);\r\n const [BHA_LENGTH, setBHALength] = useState(EMPTY_QUANTITY);\r\n const [toolStringId, setToolStringId] = useState(null);\r\n const [maxOD, setMaxOD] = useState(EMPTY_QUANTITY);\r\n const [taskId, setTaskId] = useState(null);\r\n const [unplannedToolString, setUnPlannedToolString] = useState(false);\r\n\r\n useEffect(() => {\r\n dispatch(getProjectWellbore(projectId));\r\n dispatch(getAllTasks(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n const project = useProject(projectId);\r\n const tasks = useSelector(getAllTasksFromState);\r\n\r\n useEffect(() => {\r\n dispatch(requestProjectWellboreSections(projectId));\r\n }, [projectId, dispatch]);\r\n\r\n const projectWellboreSectionsSelector = useMemo(\r\n () => createProjectWellboreSectionsSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const wellboreSections = useSelector(projectWellboreSectionsSelector);\r\n\r\n useEffect(() => {\r\n if (\r\n project &&\r\n project.size &&\r\n project.get('taskServices')?.size &&\r\n tasks.size &&\r\n !taskIdFromQuery\r\n ) {\r\n tasks.forEach((task) =>\r\n project.get('taskServices').forEach((taskService) => {\r\n if (task.get('customTitle') === taskService.get('name')) {\r\n dispatch(getToolstringsForTask(projectId, task.get('taskId')));\r\n }\r\n }),\r\n );\r\n }\r\n }, [project, tasks, projectId, dispatch, taskIdFromQuery]);\r\n\r\n const toolstrings = useSelector(getToolstringsByTaskFromState);\r\n\r\n const getPlannedToolstring = useCallback(\r\n () =>\r\n toolstringService\r\n .getPlannedToolstring(projectId, taskIdFromQuery)\r\n .then((toolstring) => {\r\n setToolStringId(toolstring?.toolStringId);\r\n setTaskId(taskIdFromQuery);\r\n setUnPlannedToolString(false);\r\n }),\r\n [projectId, taskIdFromQuery],\r\n );\r\n\r\n useEffect(() => {\r\n if (!taskIdFromQuery) {\r\n toolstrings.forEach((tool) => {\r\n const id = tool.find(\r\n (toolstring) => toolstring?.get('isPlanned') === true,\r\n );\r\n if (id && id.size) {\r\n setToolStringId(id.get('id'));\r\n setTaskId(id.get('taskId'));\r\n setUnPlannedToolString(false);\r\n }\r\n });\r\n } else {\r\n getPlannedToolstring();\r\n }\r\n }, [toolstrings, taskIdFromQuery, getPlannedToolstring]);\r\n\r\n useEffect(() => {\r\n if (toolStringId) dispatch(getToolstring(projectId, taskId, toolStringId));\r\n else {\r\n setUnPlannedToolString(true);\r\n }\r\n }, [projectId, taskId, toolStringId, dispatch]);\r\n\r\n const toolstring = useSelector(createGetToolstringSelector(toolStringId));\r\n\r\n useEffect(() => {\r\n const ts = toolstring.toJS();\r\n if (ts.maxOD && ts.totalLength) {\r\n setToolsByToolstringToolId(ts.toolsByToolstringToolId);\r\n setBHALength(ts.totalLength);\r\n setMaxOD(ts.maxOD);\r\n }\r\n }, [toolstring]);\r\n\r\n const targetDepth = useSelector(getTargetDepthFromState);\r\n\r\n const onReceiveInitialData = useCallback(\r\n (readings) => {\r\n if (!curve) return;\r\n\r\n const reading = readings.find(\r\n (reading) => reading.name === curve.get('name'),\r\n );\r\n\r\n var latestDepthData = takeLast(reading.data);\r\n\r\n if (!latestDepthData) return;\r\n\r\n const [_timestamp, _depth, value] = latestDepthData;\r\n\r\n setCurrentDepth({\r\n hasValue: true,\r\n unit: curve.get('unit'),\r\n value: value,\r\n });\r\n },\r\n [curve, setCurrentDepth],\r\n );\r\n\r\n const onReceiveData = useCallback(\r\n (readings) => {\r\n if (!curve) return;\r\n\r\n const reading = readings.find(\r\n (reading) => reading.name === curve.get('name'),\r\n );\r\n\r\n if (!reading) return;\r\n if (!reading.data[0]) return;\r\n\r\n const [_timestamp, _depth, value] = reading.data[0];\r\n\r\n setCurrentDepth({\r\n hasValue: true,\r\n unit: curve.get('unit'),\r\n value: value,\r\n });\r\n },\r\n [curve],\r\n );\r\n\r\n useEffect(() => {\r\n registerDataPointsHandler(onReceiveInitialData, onReceiveData);\r\n }, [onReceiveData, onReceiveInitialData, registerDataPointsHandler]);\r\n\r\n if (wellboreSections && BHA_LENGTH && maxOD && toolsByToolstringToolId)\r\n return (\r\n \r\n \r\n \r\n \r\n Well Trajectory Not Available\r\n \r\n \r\n \r\n \r\n );\r\n\r\n if (unplannedToolString) {\r\n return (\r\n \r\n \r\n \r\n Please mark a BHA as planned from Simulations\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nWellGraphAndGuagesDataContainer.propTypes = {\r\n curveId: PropTypes.number,\r\n registerDataPointsHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default WellGraphAndGuagesDataContainer;\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\n\r\nimport {\r\n DefaultLayout,\r\n DashboardLayout,\r\n} from 'features/projects/dashboard/components/dashboards/configurableDashboard/layouts';\r\n\r\nimport { DashboardName } from 'features/projects/dashboard/dashboard.constants';\r\nimport DynamicDockManager from 'features/projects/dashboard/components/DynamicDockManager/DynamicDockManager';\r\nimport IFrameDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/IFrameDashboardController';\r\nimport GenericDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/GenericDashboardController';\r\nimport CaliperDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/CaliperDashboardController';\r\nimport CorrelationDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/CorrelationDashboardController';\r\nimport MetalMillingDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/MetalMillingDashboardController';\r\nimport WinchCombinedDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WinchCombinedDashboardController';\r\nimport WinchLineAndGaugeDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WinchLineAndGaugeDashboardController';\r\nimport WinchWellboreAndGaugeDashboardController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WinchWellboreAndGaugeDashboardController';\r\nimport BHAGraphAndGuagesController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/BHAGraphAndGuagesController';\r\nimport WellGraphAndGuagesController from 'features/projects/dashboard/components/dashboards/configurableDashboard/controllers/WellGraphAndGuagesController';\r\n\r\nconst DashboardComponent = {\r\n [DashboardName.IFRAME]: IFrameDashboardController,\r\n [DashboardName.CALIPER]: CaliperDashboardController,\r\n [DashboardName.CORRELATION]: CorrelationDashboardController,\r\n [DashboardName.METAL_MILLING]: MetalMillingDashboardController,\r\n [DashboardName.WINCH_COMBINED]: WinchCombinedDashboardController,\r\n [DashboardName.WINCH_GRAPH_GAUGES]: WinchLineAndGaugeDashboardController,\r\n [DashboardName.WINCH_SURVEY_GAUGES]: WinchWellboreAndGaugeDashboardController,\r\n [DashboardName.BHA_GRAPH_GAUGES]: BHAGraphAndGuagesController,\r\n [DashboardName.WELL_GRAPH_GAUGES]: WellGraphAndGuagesController,\r\n};\r\n\r\nconst ProjectDashboardDockManager = ({\r\n projectId,\r\n setDataState,\r\n projectDashboard,\r\n projectDashboardId,\r\n}) => {\r\n if (!projectDashboard) return null;\r\n\r\n const name = projectDashboard.get('name');\r\n const url = projectDashboard.get('url');\r\n\r\n const layout = DashboardLayout[name] ?? DefaultLayout;\r\n const component = DashboardComponent[name] ?? GenericDashboardController;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(React.memo)(ProjectDashboardDockManager);\r\n","import CorrelationDashboard from 'features/projects/dashboard/components/dashboards/logging/components/CorrelationDashboard';\r\nimport LoggingDashboardContainer from 'features/projects/dashboard/components/dashboards/logging/LoggingDashboardContainer';\r\nimport ProjectExecutionStatusContainer from 'features/projects/dashboard/components/ProjectExecutionStatusContainer/ProjectExecutionStatusContainer';\r\nimport DashboardGaugeChartsContainer from 'features/projects/dashboard/components/charts/DashboardGaugeChartsContainer';\r\nimport useProjectDashboardHubConnection from 'features/projects/dashboard/hooks/useProjectDashboardHubConnection';\r\nimport WellGraphAndGuagesDataContainer from 'app/components/WellGraphAndGuages/WellGraphAndGuagesDataContainer';\r\nimport React, { useMemo } from 'react';\r\nimport useQueryParams from 'features/projects/dashboard/hooks/useQueryParams';\r\n\r\nconst WellGraphAndGuagesController = ({\r\n projectId,\r\n renderSlots,\r\n projectDashboardId,\r\n}) => {\r\n const { curves, setExtremes, registerDataPointsHandler } =\r\n useProjectDashboardHubConnection(projectId, projectDashboardId);\r\n const { taskId = null } = useQueryParams();\r\n\r\n const depthCurve = useMemo(\r\n () => curves.find((curve) => curve.get('isDepth')),\r\n [curves],\r\n );\r\n\r\n return renderSlots(\r\n ,\r\n ,\r\n ,\r\n ,\r\n );\r\n};\r\n\r\nexport default WellGraphAndGuagesController;\r\n","import { useDispatch } from 'react-redux';\r\nimport Error from '@material-ui/icons/Error';\r\nimport { replace } from 'connected-react-router';\r\nimport { useEffect, useMemo, useState, createContext } from 'react';\r\n\r\nimport { usePrevious } from 'altus-hooks';\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\nimport { LoadingDataState, getSummarizedDataState } from 'altus-datastate';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport ProjectHelmet from 'app/components/ProjectHelmet';\r\nimport BasePageDense from 'app/components/BasePageDense';\r\nimport DashboardHeader from 'features/projects/dashboard/components/DashboardHeader';\r\nimport useProjectDashboard from 'features/projects/dashboard/hooks/useProjectDashboard';\r\nimport ProjectDashboardDockManager from 'features/projects/dashboard/components/dashboards/configurableDashboard/ProjectDashboardDockManager';\r\n\r\nexport const ProjectDashboardContext = createContext();\r\n\r\nconst ProjectDashboardContainer = ({ projectId, projectDashboardId }) => {\r\n const [dataState, setDataState] = useState(LoadingDataState);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const {\r\n projectDashboard,\r\n requestProjectDashboard,\r\n dataState: projectDashboardDataState,\r\n } = useProjectDashboard(projectId, projectDashboardId);\r\n\r\n useEffect(() => {\r\n requestProjectDashboard();\r\n }, [projectDashboardId, requestProjectDashboard]);\r\n\r\n useHeader({\r\n logoNavigation: '/operations',\r\n subTitle: projectDashboard?.get('title'),\r\n });\r\n\r\n const previousProjectDashboard = usePrevious(projectDashboard);\r\n\r\n useEffect(() => {\r\n // Navigate away from dashboard if toggling it off\r\n if (previousProjectDashboard && !projectDashboard) {\r\n dispatch(replace(routePaths.root));\r\n }\r\n }, [dispatch, projectDashboard, previousProjectDashboard]);\r\n\r\n const summarizedDataState = useMemo(\r\n () => getSummarizedDataState([dataState, projectDashboardDataState]),\r\n [dataState, projectDashboardDataState],\r\n );\r\n\r\n if (projectDashboardDataState.isError()) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProjectDashboardContainer;\r\n","import _isNil from 'lodash/isNil';\r\nimport { OrderedMap } from 'immutable';\r\nimport { createSelector } from 'reselect';\r\n\r\nconst getSimulationResultSelector = (state) =>\r\n state.getIn(['entity', 'simulationResult'], OrderedMap());\r\n\r\nconst getSimulationsSelector = (state) => state.getIn(['entity', 'simulation']);\r\n\r\nconst getSimulationFluidSelector = (state) =>\r\n state.getIn(['entity', 'simulationFluid']);\r\n\r\nconst getWellboreSectionSelector = (state) =>\r\n state.getIn(['entity', 'wellboreSection']);\r\n\r\nexport const getSimulationFromState = createSelector(\r\n (state, simulationId) =>\r\n state.getIn(['entity', 'simulation', simulationId?.toString()]),\r\n (simulation) => simulation,\r\n);\r\n\r\nexport const getSimulationsForTaskFromState = createSelector(\r\n getSimulationsSelector,\r\n (_, taskId) => taskId,\r\n (simulations, taskId) =>\r\n simulations\r\n .groupBy((simulation) => simulation.get('taskId').toString())\r\n .get(taskId.toString()),\r\n);\r\n\r\nexport const getSelectedCablesForTaskFromState = createSelector(\r\n getSimulationsForTaskFromState,\r\n (simulations) =>\r\n simulations?.map((simulation) => simulation.get('cable')).toList(),\r\n);\r\n\r\nexport const hasPlannedSimulationForTaskSelection = createSelector(\r\n getSimulationsForTaskFromState,\r\n (simulations) => simulations?.some((s) => s.get('isPlanned')),\r\n);\r\n\r\nexport const createSimulationResultsByDirectionSelector = (\r\n simulationId,\r\n direction = null,\r\n) =>\r\n createSelector([getSimulationResultSelector], (simulationResultEntity) =>\r\n simulationResultEntity\r\n ?.get(_isNil(direction) ? 'null' : direction)\r\n ?.filter(\r\n (result) =>\r\n result.get('simulationId')?.toString() === simulationId?.toString(),\r\n ),\r\n );\r\n\r\nexport const createSimulationResultsByDepthAndDirectionSelector = (\r\n simulationId,\r\n direction = null,\r\n) =>\r\n createSelector(\r\n createSimulationResultsByDirectionSelector(simulationId, direction),\r\n (simulationResults) =>\r\n simulationResults?.mapKeys((_key, result) =>\r\n result.getIn(['measuredDepth', 'value']),\r\n ),\r\n );\r\n\r\nexport const createSimulationWellboreSectionsSelector = (simulationId) =>\r\n createSelector(getWellboreSectionSelector, (wellboreSections) =>\r\n wellboreSections\r\n .filter(\r\n (section) => section?.get('simulationId') === Number(simulationId),\r\n )\r\n .groupBy((section) => section.get('simulationId').toString())\r\n .get(simulationId.toString()),\r\n );\r\n\r\nexport const createSimulationFluidsSelector = (simulationId) =>\r\n createSelector(getSimulationFluidSelector, (simulationFluids) =>\r\n simulationFluids\r\n .filter((fluid) => fluid.get('simulationId') === Number(simulationId))\r\n .groupBy((fluid) => fluid.get('simulationId').toString())\r\n .get(simulationId.toString()),\r\n );\r\n\r\n// added this utils code here because the tests were failing\r\n// since jest cannot parse scss files and the utils file imports the theme file\r\nconst getSimulationCompressionDepth = (simulationResults) => {\r\n const runInHole = simulationResults\r\n ?.find((result) => result.get('isCompressionDepthRunInHole'))\r\n ?.get('measuredDepth');\r\n\r\n const pullOutOfHole = simulationResults\r\n ?.find((result) => result.get('isCompressionDepthPullOutOfHole'))\r\n ?.get('measuredDepth');\r\n\r\n if (_isNil(runInHole) && _isNil(pullOutOfHole)) {\r\n return undefined;\r\n }\r\n\r\n return { runInHole, pullOutOfHole };\r\n};\r\n\r\nexport const createSimulationCompressionDepthByDirectionSelector = (\r\n simulationId,\r\n direction = null,\r\n) =>\r\n createSelector(\r\n createSimulationResultsByDirectionSelector(simulationId, direction),\r\n getSimulationCompressionDepth,\r\n );\r\n\r\nexport const createSimulationResultsCountSelector = () =>\r\n createSelector(\r\n getSimulationResultSelector,\r\n (simulationResults) => simulationResults?.size || 0,\r\n );\r\n","import _isNil from 'lodash/isNil';\r\n\r\nimport {\r\n SimulationDirection,\r\n SimulationResultSeries,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nexport const getSimulationChartSeries = (\r\n simulationResults,\r\n operationLoadPercent,\r\n direction,\r\n simulationResultDirection = undefined,\r\n suffix = simulationResultDirection !== undefined\r\n ? `BHA v${simulationResultDirection + 1}`\r\n : undefined,\r\n) =>\r\n [\r\n {\r\n index: 0,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.SURFACE_WEIGHT_RIH,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color: theme.altus.components.SimulationDashboard.series.SurfaceWeightRIH,\r\n name: getConcatenatedNameResult('Surface Weight RIH', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['runInHole', 'surfaceTension']),\r\n ),\r\n },\r\n events: toggleCompressionEvents,\r\n data: simulationResults\r\n .map((x) => x.getIn(['runInHole', 'surfaceTension', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 1,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.SURFACE_WEIGHT_POOH,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color:\r\n theme.altus.components.SimulationDashboard.series.SurfaceWeightPOOH,\r\n name: getConcatenatedNameResult('Surface Weight POOH', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'surfaceTension']),\r\n ),\r\n },\r\n events: toggleCompressionEvents,\r\n data: simulationResults\r\n .map((x) => x.getIn(['pullOutOfHole', 'surfaceTension', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 2,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.SURFACE_WEIGHT_SAFE_OPERATING_LOAD,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n name: getConcatenatedNameResult(\r\n operationLoadPercent\r\n ? `SW at Safe Operating Load (${operationLoadPercent}%)`\r\n : 'SW at Safe Operating Load',\r\n suffix,\r\n ),\r\n color:\r\n theme.altus.components.SimulationDashboard.series.SWSafeOperatingLoad,\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'workingLimit']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) => x.getIn(['pullOutOfHole', 'workingLimit', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 3,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.COMPRESSION_LIMIT,\r\n simulationResultDirection,\r\n ),\r\n visible: false,\r\n name: getConcatenatedNameResult('Compression Limit', suffix),\r\n color: theme.altus.components.SimulationDashboard.series.CompressionLimit,\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['runInHole', 'compressionLimit']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) => x.getIn(['runInHole', 'compressionLimit', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 4,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.WEAK_POINT_SAFETY_FACTOR,\r\n simulationResultDirection,\r\n ),\r\n visible: false,\r\n color: theme.altus.components.SimulationDashboard.series.WeakPoint,\r\n name: getConcatenatedNameResult('Weak Point with SF', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'weakPointLowSF']),\r\n ),\r\n },\r\n dashStyle: 'dot',\r\n data: simulationResults\r\n .map((x) => x.getIn(['pullOutOfHole', 'weakPointLowSF', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 5,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.WEAK_POINT,\r\n simulationResultDirection,\r\n ),\r\n visible: false,\r\n color: theme.altus.components.SimulationDashboard.series.WeakPoint,\r\n name: getConcatenatedNameResult('Weak Point', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'weakPointLow']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) => x.getIn(['pullOutOfHole', 'weakPointLow', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 7,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.MAX_SET_DOWN,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color: theme.altus.components.SimulationDashboard.series.MaxSetDown,\r\n name: getConcatenatedNameResult('Max. Set Down force', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['runInHole', 'maxSetDown']),\r\n ),\r\n },\r\n events: toggleCompressionEvents,\r\n data: simulationResults\r\n .map((x) => x.getIn(['runInHole', 'maxSetDown', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 8,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.MAX_PICKUP_FORCE_POOH,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color:\r\n theme.altus.components.SimulationDashboard.series.MaxPickupForcePOOH,\r\n name: getConcatenatedNameResult('Max. Pick-up Force POOH', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'maxPickupWeight']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) => x.getIn(['pullOutOfHole', 'maxPickupWeight', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 9,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.MIN_TRACTOR_PULL,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color: theme.altus.components.SimulationDashboard.series.MinTractorPull,\r\n name: getConcatenatedNameResult('Minimum Tractor Pull', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['runInHole', 'tractorForce']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) => x.getIn(['runInHole', 'tractorForce', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 10,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_RIH,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color:\r\n theme.altus.components.SimulationDashboard.series.CableHeadTensionRIH,\r\n name: getConcatenatedNameResult('Cable Head Tension RIH', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['runInHole', 'cableHeadTension']),\r\n ),\r\n },\r\n events: toggleCompressionEvents,\r\n data: simulationResults\r\n .map((x) => x.getIn(['runInHole', 'cableHeadTension', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 11,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.CABLE_HEAD_TENSION_POOH,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color:\r\n theme.altus.components.SimulationDashboard.series.CableHeadTensionPOOH,\r\n name: getConcatenatedNameResult('Cable Head Tension POOH', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'cableHeadTension']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) => x.getIn(['pullOutOfHole', 'cableHeadTension', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 13,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.SW_JAR_ACTIVATION,\r\n simulationResultDirection,\r\n ),\r\n visible: false,\r\n color: theme.altus.components.SimulationDashboard.series.JarActivation,\r\n name: getConcatenatedNameResult('SW at Jar Activation', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'surfaceWeightJarFiringLow']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) =>\r\n x.getIn(['pullOutOfHole', 'surfaceWeightJarFiringLow', 'value']),\r\n )\r\n .toArray(),\r\n },\r\n {\r\n index: 15,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.CHT_JAR_ACTIVATION,\r\n simulationResultDirection,\r\n ),\r\n visible: false,\r\n color: theme.altus.components.SimulationDashboard.series.JarActivation,\r\n name: getConcatenatedNameResult('CHT at Jar Activation', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'cableHeadTensionJarFiringLow']),\r\n ),\r\n },\r\n data: simulationResults\r\n .map((x) =>\r\n x.getIn(['pullOutOfHole', 'cableHeadTensionJarFiringLow', 'value']),\r\n )\r\n .toArray(),\r\n },\r\n {\r\n index: 17,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.STRETCH_RIH,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color: theme.altus.components.SimulationDashboard.series.StretchRIH,\r\n name: getConcatenatedNameResult('Stretch RIH', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['runInHole', 'stretch']),\r\n ),\r\n },\r\n events: toggleCompressionEvents,\r\n data: simulationResults\r\n .map((x) => x.getIn(['runInHole', 'stretch', 'value']))\r\n .toArray(),\r\n },\r\n {\r\n index: 18,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n id: createAlternativeSeriesId(\r\n SimulationResultSeries.STRETCH_POOH,\r\n simulationResultDirection,\r\n ),\r\n visible: true,\r\n color: theme.altus.components.SimulationDashboard.series.StretchPOOH,\r\n name: getConcatenatedNameResult('Stretch POOH', suffix),\r\n custom: {\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['pullOutOfHole', 'stretch']),\r\n ),\r\n },\r\n events: toggleCompressionEvents,\r\n data: simulationResults\r\n .map((x) => x.getIn(['pullOutOfHole', 'stretch', 'value']))\r\n .toArray(),\r\n },\r\n ].filter((series) => _isNil(direction) || series.direction === direction);\r\n\r\nconst createAlternativeSeriesId = (\r\n simulationResultSeries,\r\n simulationResultDirection,\r\n) => {\r\n return simulationResultDirection\r\n ? simulationResultSeries + 50 + simulationResultDirection\r\n : simulationResultSeries;\r\n};\r\n\r\nconst getConcatenatedNameResult = (labelName, suffix) =>\r\n `${labelName} ${suffix ? ` [${suffix}]` : ''}`;\r\n\r\nexport const getSimulationCompressionDepthSeries = (\r\n id,\r\n direction,\r\n simulationResults,\r\n key,\r\n) => {\r\n const compressionDepth = getSimulationCompressionDepth(simulationResults);\r\n const dir =\r\n direction === SimulationDirection.PULL_OUT_OF_HOLE\r\n ? 'pullOutOfHole'\r\n : 'runInHole';\r\n\r\n if (_isNil(compressionDepth?.[dir]) || !compressionDepth[dir].hasValue) {\r\n return null;\r\n }\r\n\r\n return {\r\n zIndex: 2,\r\n direction,\r\n id,\r\n visible: true,\r\n color: theme.palette.secondary.cssGray,\r\n name: 'Compression Depth',\r\n showInLegend: false,\r\n custom: {\r\n tooltip: false,\r\n unit: getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn([dir, key]),\r\n ),\r\n },\r\n marker: {\r\n symbol: 'triangle',\r\n enabled: false,\r\n },\r\n data: simulationResults\r\n .toArray()\r\n .filter((x) => x[0] >= compressionDepth[dir].value)\r\n .map((x, i) => ({\r\n x: x[0],\r\n y: x[1].getIn([dir, key, 'value']),\r\n marker: { enabled: i === 0, fillColor: theme.palette.error.main },\r\n })),\r\n };\r\n};\r\n\r\n// there is a copy of this function in simulation.selectors.js due to jest test failing\r\nexport const getSimulationCompressionDepth = (simulationResults) => {\r\n const runInHole = simulationResults\r\n ?.find((result) => result.get('isCompressionDepthRunInHole'))\r\n ?.get('measuredDepth');\r\n\r\n const pullOutOfHole = simulationResults\r\n ?.find((result) => result.get('isCompressionDepthPullOutOfHole'))\r\n ?.get('measuredDepth');\r\n\r\n if (_isNil(runInHole) && _isNil(pullOutOfHole)) {\r\n return undefined;\r\n }\r\n\r\n return { runInHole, pullOutOfHole };\r\n};\r\n\r\n// Helper to toggle show/hide compression series based on related series\r\nconst toggleCompressionEvents = {\r\n hide: (series) => {\r\n const compressionSeries = series?.target?.chart?.series?.find(\r\n (s) =>\r\n s.options.id ===\r\n series.target.options.id + SimulationResultSeries.COMPRESSION_DEPTH,\r\n );\r\n if (!_isNil(compressionSeries)) {\r\n compressionSeries.hide();\r\n }\r\n },\r\n show: (series) => {\r\n const compressionSeries = series?.target?.chart?.series?.find(\r\n (s) =>\r\n s.options.id ===\r\n series.target.options.id + SimulationResultSeries.COMPRESSION_DEPTH,\r\n );\r\n if (!_isNil(compressionSeries)) {\r\n compressionSeries.show();\r\n }\r\n },\r\n};\r\n","import moment from 'moment';\r\nimport { compose } from 'redux';\r\nimport Highcharts from 'highcharts';\r\nimport { alpha } from '@material-ui/core/styles';\r\nimport { useMemo, useEffect, useState } from 'react';\r\nimport { Box, Grid, Button } from '@material-ui/core';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport {\r\n requestSimulation,\r\n receiveSimulationResults,\r\n} from 'features/projects/tasks/task/simulation/simulation.actions';\r\n\r\nimport {\r\n getSimulationFromState,\r\n createSimulationResultsByDirectionSelector,\r\n} from 'features/projects/tasks/task/simulation/simulation.selectors';\r\n\r\nimport {\r\n EMPTY_MAP,\r\n EMPTY_LIST,\r\n UNITS as Units,\r\n TIME_UNITS as TimeUnits,\r\n} from 'app/app.constants';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport projectService from 'services/project.service';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport simulationService from 'services/simulation.service';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { receiveWellboreTrajectory } from 'features/wells/wellbore.actions';\r\nimport { getWellboreTrajectoryFromState } from 'features/wells/wellbore.selectors';\r\nimport DashboardHeader from 'features/projects/dashboard/components/DashboardHeader';\r\nimport { SimulationDirection } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { getSimulationChartSeries } from 'features/projects/tasks/task/simulation/simulation.utils';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst chartContainerProps = {\r\n style: {\r\n height: '100%',\r\n },\r\n};\r\n\r\nconst requestTimestampsByUser = (initial) => {\r\n const startTimeRIH = initial;\r\n\r\n const endTimeRIH = startTimeRIH\r\n .clone()\r\n .add(window.prompt('Run In Hole duration (hrs):', 1), TimeUnits.HOUR);\r\n\r\n const startTimePOOH = endTimeRIH\r\n .clone()\r\n .add(window.prompt('Duration at bottom (hrs):', 0.5), TimeUnits.HOUR);\r\n\r\n const endTimePOOH = startTimePOOH\r\n .clone()\r\n .add(window.prompt('Pull Out Of Hole duration (hrs):', 2), TimeUnits.HOUR);\r\n\r\n return {\r\n startTimeRIH: startTimeRIH.format(),\r\n endTimeRIH: endTimeRIH.format(),\r\n startTimePOOH: startTimePOOH.format(),\r\n endTimePOOH: endTimePOOH.format(),\r\n };\r\n};\r\n\r\nconst SimulationDashboardContainer = ({ taskId, projectId, simulationId }) => {\r\n const dispatch = useDispatch();\r\n const theme = useTheme();\r\n\r\n const project = useSelector(getCurrentProject);\r\n\r\n const [isDirectionHighlighted, toggleDirectionHighlight] = useToggle();\r\n\r\n const simulation = useSelector((state) =>\r\n getSimulationFromState(state, simulationId),\r\n );\r\n\r\n useHeader({\r\n title: project.get('title'),\r\n subTitle: simulation?.get('name'),\r\n });\r\n\r\n const wellboreId = project.get('wellboreId');\r\n\r\n const [isMultisetSimulation, setIsMultisetSimulation] = useState(false);\r\n\r\n const simulationResultSelector = useMemo(\r\n () => createSimulationResultsByDirectionSelector(simulationId),\r\n [simulationId],\r\n );\r\n\r\n // when it is simulation with set/retreive tool\r\n const simulationResultsRihSelector = useMemo(\r\n () =>\r\n createSimulationResultsByDirectionSelector(\r\n simulationId,\r\n SimulationDirection.RUN_IN_HOLE,\r\n ),\r\n [simulationId],\r\n );\r\n const simulationResultsPoohSelector = useMemo(\r\n () =>\r\n createSimulationResultsByDirectionSelector(\r\n simulationId,\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n ),\r\n [simulationId],\r\n );\r\n\r\n const simulationResults = useSelector(simulationResultSelector) ?? EMPTY_MAP;\r\n\r\n // when it is simulation with set/retreive tool\r\n const simulationResultsRihSimulationDirection =\r\n useSelector(simulationResultsRihSelector) ?? EMPTY_MAP;\r\n const simulationResultsPoohSimulationDirection =\r\n useSelector(simulationResultsPoohSelector) ?? EMPTY_MAP;\r\n\r\n useEffect(() => {\r\n if (\r\n simulationResultsRihSimulationDirection !== EMPTY_MAP &&\r\n simulationResultsPoohSimulationDirection !== EMPTY_MAP &&\r\n simulationResults === EMPTY_MAP\r\n ) {\r\n setIsMultisetSimulation(true);\r\n }\r\n }, [\r\n simulationResults,\r\n simulationResultsRihSimulationDirection,\r\n simulationResultsPoohSimulationDirection,\r\n ]);\r\n\r\n const wellboreTrajectorySelector = useMemo(\r\n () => getWellboreTrajectoryFromState(wellboreId),\r\n [wellboreId],\r\n );\r\n\r\n const wellboreTrajectory =\r\n useSelector(wellboreTrajectorySelector) ?? EMPTY_MAP;\r\n\r\n const simulationResultsRIH = useMemo(\r\n () =>\r\n simulationResults\r\n .mapKeys((_, result) => result.getIn(['runInHole', 'timestamp']))\r\n .sortBy((_, timestamp) => timestamp),\r\n [simulationResults],\r\n );\r\n\r\n const simulationResultsPOOH = useMemo(\r\n () =>\r\n simulationResults\r\n .mapKeys((_, result) => result.getIn(['pullOutOfHole', 'timestamp']))\r\n .sortBy((_, timestamp) => timestamp),\r\n [simulationResults],\r\n );\r\n\r\n const simulationResultsRIHSimulationRIH = useMemo(\r\n () =>\r\n simulationResultsRihSimulationDirection\r\n .mapKeys((_, result) => result.getIn(['runInHole', 'timestamp']))\r\n .sortBy((_, timestamp) => timestamp),\r\n [simulationResultsRihSimulationDirection],\r\n );\r\n\r\n const simulationResultsPOOHSimulationRIH = useMemo(\r\n () =>\r\n simulationResultsRihSimulationDirection\r\n .mapKeys((_, result) => result.getIn(['pullOutOfHole', 'timestamp']))\r\n .sortBy((_, timestamp) => timestamp),\r\n [simulationResultsRihSimulationDirection],\r\n );\r\n\r\n const simulationResultsRIHSimulationPOOH = useMemo(\r\n () =>\r\n simulationResultsPoohSimulationDirection\r\n .mapKeys((_, result) => result.getIn(['runInHole', 'timestamp']))\r\n .sortBy((_, timestamp) => timestamp),\r\n [simulationResultsPoohSimulationDirection],\r\n );\r\n\r\n const simulationResultsPOOHSimulationPOOH = useMemo(\r\n () =>\r\n simulationResultsPoohSimulationDirection\r\n .mapKeys((_, result) => result.getIn(['pullOutOfHole', 'timestamp']))\r\n .sortBy((_, timestamp) => timestamp),\r\n [simulationResultsPoohSimulationDirection],\r\n );\r\n\r\n const wellboreTrajectoryPointsRIH = useMemo(\r\n () =>\r\n wellboreTrajectory\r\n .get('trajectoryPoints', EMPTY_LIST)\r\n .toMap()\r\n .mapKeys((_, point) => point.get('timestampRunInHole'))\r\n .sortBy((_, timestamp) => timestamp),\r\n [wellboreTrajectory],\r\n );\r\n\r\n const wellboreTrajectoryPointsPOOH = useMemo(\r\n () =>\r\n wellboreTrajectory\r\n .get('trajectoryPoints', EMPTY_LIST)\r\n .toMap()\r\n .mapKeys((_, point) => point.get('timestampPullOutOfHole'))\r\n .sortBy((_, timestamp) => timestamp),\r\n [wellboreTrajectory],\r\n );\r\n\r\n const depthUnit = getQuantityUnitFromItems(\r\n isMultisetSimulation\r\n ? simulationResultsRihSimulationDirection\r\n : simulationResults,\r\n (result) => result.get('measuredDepth'),\r\n );\r\n\r\n const forceUnit = getQuantityUnitFromItems(\r\n isMultisetSimulation\r\n ? simulationResultsRihSimulationDirection\r\n : simulationResults,\r\n (result) => result.get('downHoleSetDownForce'),\r\n );\r\n\r\n const series = useMemo(\r\n () => [\r\n {\r\n yAxis: 1,\r\n name: 'Measured Depth',\r\n color: theme.altus.components.ContextualizedWell.trajectory.depth,\r\n unit: simulation?.getIn(['calculateFromDepth', 'unit']),\r\n data: isMultisetSimulation\r\n ? simulationResultsRIHSimulationRIH\r\n .concat(simulationResultsPOOHSimulationRIH)\r\n .concat(simulationResultsRIHSimulationPOOH)\r\n .concat(simulationResultsPOOHSimulationPOOH)\r\n .map((x) => x.getIn(['measuredDepth', 'value']))\r\n .toArray()\r\n : simulationResultsRIH\r\n .concat(simulationResultsPOOH)\r\n .map((x) => x.getIn(['measuredDepth', 'value']))\r\n .toArray(),\r\n },\r\n // single simulation result charts\r\n ...(!isMultisetSimulation\r\n ? getSimulationChartSeries(\r\n simulationResultsRIH,\r\n null,\r\n SimulationDirection.RUN_IN_HOLE,\r\n )\r\n : []),\r\n ...(!isMultisetSimulation\r\n ? getSimulationChartSeries(\r\n simulationResultsPOOH,\r\n simulation?.get('workingLimitSafetyFactor'),\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n )\r\n : []),\r\n // multiple simulation results charts\r\n ...(isMultisetSimulation\r\n ? getSimulationChartSeries(\r\n simulationResultsRIHSimulationRIH,\r\n null,\r\n SimulationDirection.RUN_IN_HOLE,\r\n SimulationDirection.RUN_IN_HOLE, // simulation direction result\r\n )\r\n : []),\r\n ...(isMultisetSimulation\r\n ? getSimulationChartSeries(\r\n simulationResultsPOOHSimulationRIH,\r\n simulation?.get('workingLimitSafetyFactor'),\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n SimulationDirection.RUN_IN_HOLE, // simulation direction result\r\n )\r\n : []),\r\n ...(isMultisetSimulation\r\n ? getSimulationChartSeries(\r\n simulationResultsRIHSimulationPOOH,\r\n null,\r\n SimulationDirection.RUN_IN_HOLE,\r\n SimulationDirection.PULL_OUT_OF_HOLE, // simulation direction result\r\n )\r\n : []),\r\n ...(isMultisetSimulation\r\n ? getSimulationChartSeries(\r\n simulationResultsPOOHSimulationPOOH,\r\n simulation?.get('workingLimitSafetyFactor'),\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n SimulationDirection.PULL_OUT_OF_HOLE, // simulation direction result\r\n )\r\n : []),\r\n {\r\n yAxis: 2,\r\n unit: Units.DEG,\r\n name: 'Dogleg Severity',\r\n visible: false,\r\n color: theme.altus.components.SimulationDashboard.series.yAxis,\r\n data: wellboreTrajectoryPointsRIH\r\n .concat(wellboreTrajectoryPointsPOOH)\r\n .map((x) => x.get('dogLegSeverity'))\r\n .toArray(),\r\n },\r\n ],\r\n [\r\n simulation,\r\n isMultisetSimulation,\r\n simulationResultsRIH,\r\n simulationResultsPOOH,\r\n simulationResultsRIHSimulationRIH,\r\n simulationResultsPOOHSimulationRIH,\r\n simulationResultsRIHSimulationPOOH,\r\n simulationResultsPOOHSimulationPOOH,\r\n wellboreTrajectoryPointsRIH,\r\n wellboreTrajectoryPointsPOOH,\r\n theme,\r\n ],\r\n );\r\n\r\n const plotBands = useMemo(() => {\r\n if (!isDirectionHighlighted) return [];\r\n\r\n if (isMultisetSimulation) {\r\n return [\r\n {\r\n color: alpha(\r\n theme.altus.components.SimulationDashboard.plotBands.RIH,\r\n 0.1,\r\n ),\r\n from: simulationResultsRIH.keySeq().first(),\r\n to: simulationResultsRIH.keySeq().last(),\r\n label: {\r\n text: 'RIH',\r\n },\r\n },\r\n {\r\n color: alpha(\r\n theme.altus.components.SimulationDashboard.plotBands.POOH,\r\n 0.1,\r\n ),\r\n from: simulationResultsPOOH.keySeq().first(),\r\n to: simulationResultsPOOH.keySeq().last(),\r\n label: {\r\n text: 'POOH',\r\n },\r\n },\r\n ];\r\n }\r\n\r\n return [\r\n {\r\n color: alpha(\r\n theme.altus.components.SimulationDashboard.plotBands.RIH,\r\n 0.1,\r\n ),\r\n from: simulationResultsRIHSimulationRIH.keySeq().first(),\r\n to: simulationResultsRIHSimulationRIH.keySeq().last(),\r\n label: {\r\n text: 'RIH [BHA v1]',\r\n },\r\n },\r\n {\r\n color: alpha(\r\n theme.altus.components.SimulationDashboard.plotBands.POOH,\r\n 0.1,\r\n ),\r\n from: simulationResultsPOOHSimulationRIH.keySeq().first(),\r\n to: simulationResultsPOOHSimulationRIH.keySeq().last(),\r\n label: {\r\n text: 'POOH [BHA v1]',\r\n },\r\n },\r\n {\r\n color: alpha(\r\n theme.altus.components.SimulationDashboard.plotBands.RIH,\r\n 0.1,\r\n ),\r\n from: simulationResultsRIHSimulationPOOH.keySeq().first(),\r\n to: simulationResultsRIHSimulationPOOH.keySeq().last(),\r\n label: {\r\n text: 'RIH [BHA v1]',\r\n },\r\n },\r\n {\r\n color: alpha(\r\n theme.altus.components.SimulationDashboard.plotBands.POOH,\r\n 0.1,\r\n ),\r\n from: simulationResultsPOOHSimulationPOOH.keySeq().first(),\r\n to: simulationResultsPOOHSimulationPOOH.keySeq().last(),\r\n label: {\r\n text: 'POOH [BHA v1]',\r\n },\r\n },\r\n ];\r\n }, [\r\n isMultisetSimulation,\r\n simulationResultsRIH,\r\n simulationResultsPOOH,\r\n simulationResultsRIHSimulationRIH,\r\n simulationResultsPOOHSimulationRIH,\r\n simulationResultsRIHSimulationPOOH,\r\n simulationResultsPOOHSimulationPOOH,\r\n isDirectionHighlighted,\r\n theme,\r\n ]);\r\n\r\n const options = useMemo(\r\n () => ({\r\n chart: {\r\n spacing: 25,\r\n alignTicks: false,\r\n backgroundColor: theme.palette.secondary.darkGrey,\r\n },\r\n series,\r\n legend: {\r\n shadow: false,\r\n align: 'right',\r\n layout: 'vertical',\r\n verticalAlign: 'top',\r\n backgroundColor: 'transparent',\r\n },\r\n tooltip: {\r\n shared: true,\r\n crosshairs: true,\r\n formatter() {\r\n let format = '';\r\n\r\n this.points.forEach((point) => {\r\n const { series, y } = point;\r\n const { color, name, userOptions } = series;\r\n const { unit } = userOptions;\r\n const currentUnit = unit ?? forceUnit;\r\n const formattedValue = formatValue(y, currentUnit);\r\n format += `
${name}: ${formattedValue}`;\r\n });\r\n\r\n return format;\r\n },\r\n },\r\n plotOptions: {\r\n line: {\r\n marker: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n title: {\r\n text: null,\r\n },\r\n time: {\r\n useUTC: false,\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n dateTimeLabelFormats: {\r\n month: '%e. %b',\r\n year: '%b',\r\n },\r\n gridLineWidth: 1,\r\n gridLineDashStyle: 'ShortDash',\r\n gridLineColor: theme.palette.secondary.main,\r\n title: {\r\n text: 'Time',\r\n },\r\n plotBands,\r\n max: isMultisetSimulation\r\n ? simulationResultsPOOHSimulationPOOH.keySeq().last()\r\n : simulationResultsPOOH.keySeq().last(),\r\n },\r\n yAxis: [\r\n {\r\n allowDecimals: false,\r\n gridLineDashStyle: 'ShortDash',\r\n gridLineColor: theme.palette.secondary.main,\r\n title: {\r\n text: `Forces (${forceUnit})`,\r\n },\r\n },\r\n {\r\n reversed: true,\r\n opposite: true,\r\n gridLineWidth: 0,\r\n allowDecimals: false,\r\n title: {\r\n text: `Measured Depth (${depthUnit})`,\r\n },\r\n },\r\n {\r\n opposite: true,\r\n gridLineWidth: 0,\r\n allowDecimals: false,\r\n title: {\r\n text: 'Dogleg Angle (deg)',\r\n },\r\n },\r\n ],\r\n }),\r\n [\r\n series,\r\n forceUnit,\r\n depthUnit,\r\n plotBands,\r\n isMultisetSimulation,\r\n simulationResultsPOOH,\r\n simulationResultsPOOHSimulationPOOH,\r\n theme,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(requestSimulation(projectId, taskId, simulationId));\r\n }, [taskId, projectId, simulationId, dispatch]);\r\n\r\n useEffect(() => {\r\n if (!wellboreId) return;\r\n\r\n const timestamps = requestTimestampsByUser(moment());\r\n\r\n simulationService\r\n .getSimulationResultsByTime(projectId, taskId, simulationId, timestamps)\r\n .then((results) => dispatch(receiveSimulationResults(results)));\r\n\r\n projectService\r\n .getWellboreTrajectoryByProjectByTime(projectId, timestamps)\r\n .then((trajectoryPoints) => {\r\n dispatch(receiveWellboreTrajectory(wellboreId, { trajectoryPoints }));\r\n });\r\n }, [taskId, dispatch, wellboreId, projectId, simulationId]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n Highlight RIH/POOH\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose()(SimulationDashboardContainer);\r\n","import Add from '@material-ui/icons/Add';\r\nimport { IconButton, MenuItem } from '@material-ui/core';\r\n\r\nimport { DropdownMenu } from 'altus-ui-components';\r\n\r\nconst UserRoleSelector = ({ addRoleToUser, user, roles }) => {\r\n if (!roles.size) return null;\r\n\r\n const missingRoleIds = roles\r\n .map((role) => role.get('roleId'))\r\n .toOrderedSet()\r\n .subtract(user.get('roles'));\r\n\r\n if (!missingRoleIds.size) return null;\r\n\r\n return (\r\n \r\n \r\n \r\n }\r\n >\r\n {missingRoleIds\r\n .map((roleId) => roles.get(roleId.toString()))\r\n .map((role) => (\r\n addRoleToUser(role.get('roleId'), user.get('id'))}\r\n >\r\n {role.get('name')}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default UserRoleSelector;\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Chip, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { UserAvatar, SortableList, BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getAllUsersFromState,\r\n getCurrentUserFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n addSystemRoleToUser,\r\n removeSystemRoleFromUser,\r\n userAccessOnLoadWithOrganizationType,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport { getInitials } from 'utils/app.util';\r\nimport { APP_ACTIONS, EMPTY_LIST } from 'app/app.constants';\r\nimport { AUTHORIZATION_ACTIONS } from 'authorization/authorization.constants';\r\nimport UserRoleSelector from 'features/settings/userAccess/UserRoleSelector.js';\r\nimport { getSystemRolesFromState } from 'authorization/authorization.selectors';\r\n\r\nclass UserAccessContainer extends PureComponent {\r\n componentDidMount() {\r\n const { dispatchUserAccessOnLoad, currentUser } = this.props;\r\n\r\n dispatchUserAccessOnLoad(currentUser.get('organizationType'));\r\n }\r\n\r\n columns = [\r\n {\r\n xs: 4,\r\n title: 'User name',\r\n getSortProperty: (user) => user.get('name'),\r\n },\r\n {\r\n xs: true,\r\n component: Grid,\r\n title: 'Access Roles',\r\n getSortProperty: (user) => {\r\n const { classes, dispatchRemoveRoleFromUser, roles } = this.props;\r\n\r\n return (\r\n \r\n {user\r\n .get('roles')\r\n .map((roleId) => roles.get(roleId.toString()))\r\n .filter(Boolean)\r\n .sortBy((role) => role.get('name'))\r\n .map((role, index) => (\r\n \r\n dispatchRemoveRoleFromUser(role, user)}\r\n />\r\n \r\n ))}\r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n actions = [\r\n {\r\n getValue: (user) => {\r\n const { roles, dispatchAddSystemRoleToUser } = this.props;\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n renderIcon = (user) => (\r\n \r\n );\r\n\r\n getKey = (user) => user.get('id');\r\n\r\n render() {\r\n const { Icon, breadcrumb, users, dataState } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nUserAccessContainer.defaultProps = {\r\n users: EMPTY_LIST,\r\n roles: EMPTY_LIST,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n chipRoot: {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n rolesColumn: {\r\n paddingTop: theme.spacing(1),\r\n paddingBottom: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n users: getAllUsersFromState(state),\r\n currentUser: getCurrentUserFromState(state),\r\n roles: getSystemRolesFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLES,\r\n APP_ACTIONS.GET_MAIN_VENDOR_USERS,\r\n ),\r\n }),\r\n {\r\n dispatchRemoveRoleFromUser: removeSystemRoleFromUser,\r\n dispatchAddSystemRoleToUser: addSystemRoleToUser,\r\n dispatchUserAccessOnLoad: userAccessOnLoadWithOrganizationType,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(UserAccessContainer);\r\n","import { PureComponent } from 'react';\r\n\r\nimport { OverviewContainer } from 'altus-ui-components';\r\n\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\n\r\nclass SettingsOverviewContainer extends PureComponent {\r\n renderContent = (routes) => {\r\n const { parentBreadcrumb, Icon } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { parentRoutes } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SettingsOverviewContainer;\r\n","import { compose } from 'redux';\r\nimport { PureComponent } from 'react';\r\nimport { Redirect, Switch } from 'react-router-dom';\r\n\r\nimport {\r\n NavTabsContainer,\r\n BasePageHeader,\r\n RouteContainer,\r\n} from 'altus-ui-components';\r\n\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\n\r\nclass AccessRolesContainer extends PureComponent {\r\n renderContent = (routes) => {\r\n const { path } = this.props;\r\n\r\n const indexRoute = routes[0];\r\n\r\n return (\r\n <>\r\n \r\n \r\n {indexRoute && }\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { Icon, breadcrumb, routes } = this.props;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default compose()(AccessRolesContainer);\r\n","import PropTypes from 'prop-types';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n InputAdornment,\r\n CircularProgress,\r\n TextField as MuiTextField,\r\n} from '@material-ui/core';\r\n\r\nconst TextField = ({\r\n meta,\r\n input,\r\n margin,\r\n loading,\r\n classes,\r\n fullwidth,\r\n InputProps,\r\n ...rest\r\n}) => {\r\n const { value, onChange: onChangeInput, onFocus: onFocusInput } = input;\r\n\r\n const invalidInput = meta && meta.dirty && meta.invalid;\r\n\r\n return (\r\n null : undefined,\r\n }}\r\n error={invalidInput}\r\n InputProps={\r\n loading\r\n ? {\r\n endAdornment: (\r\n \r\n \r\n \r\n ),\r\n ...InputProps,\r\n }\r\n : InputProps\r\n }\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nTextField.propTypes = {\r\n margin: PropTypes.string,\r\n fullWidth: PropTypes.bool,\r\n};\r\n\r\nTextField.defaultProps = {\r\n margin: 'normal',\r\n fullWidth: true,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n circularProgress: {\r\n color: theme.palette.common.white,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TextField);\r\n","import classNames from 'classnames';\r\nimport { useRef, useEffect, useState } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n InputLabel,\r\n FormControl,\r\n FormHelperText,\r\n TextareaAutosize,\r\n} from '@material-ui/core';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n 'resize': 'vertical',\r\n 'width': '100%',\r\n 'fontFamily': theme.typography.fontFamily,\r\n 'fontSize': '1rem',\r\n 'marginTop': 22,\r\n 'borderRadius': 3,\r\n 'background': 'transparent',\r\n 'color': theme.palette.text.primary,\r\n 'borderColor': theme.palette.text.secondary,\r\n '&:active': {\r\n borderColor: theme.palette.secondary.light,\r\n },\r\n '&:focus': {\r\n borderColor: theme.palette.secondary.light,\r\n },\r\n },\r\n rootNoLabel: {\r\n marginTop: 0,\r\n },\r\n formControlFullWidth: {\r\n minWidth: '100%',\r\n },\r\n});\r\n\r\nconst getHelperText = (value, maxLength, maxLengthWarning) => {\r\n if (value.length >= maxLengthWarning && value.length < maxLength)\r\n return `${maxLength - value.length} character(s) left`;\r\n else if (value.length === maxLength)\r\n return 'Max number of characters reached';\r\n};\r\n\r\nconst TextAreaField = ({\r\n meta,\r\n label,\r\n input,\r\n margin,\r\n classes,\r\n required,\r\n inputRef,\r\n maxLength,\r\n fullWidth,\r\n spellCheck,\r\n minRows,\r\n maxRows,\r\n disabled,\r\n maxLengthWarning,\r\n ...rest\r\n}) => {\r\n const textareaRef = useRef(null);\r\n const [cursorPosition, setCursorPosition] = useState(0);\r\n const { value, defaultValue, onChange } = input;\r\n\r\n const handleChange = (e) => {\r\n const currentCursorPosition = textareaRef.current.selectionStart;\r\n setCursorPosition(currentCursorPosition);\r\n onChange(e);\r\n };\r\n\r\n useEffect(() => {\r\n if (textareaRef.current) {\r\n textareaRef.current.selectionStart = cursorPosition;\r\n textareaRef.current.selectionEnd = cursorPosition;\r\n }\r\n }, [value, cursorPosition]);\r\n\r\n const helperText = getHelperText(\r\n value || defaultValue || '',\r\n maxLength,\r\n maxLengthWarning,\r\n );\r\n\r\n return (\r\n \r\n {label && {label}}\r\n \r\n {helperText && {helperText}}\r\n \r\n );\r\n};\r\n\r\nTextAreaField.defaultProps = {\r\n fullWidth: true,\r\n margin: 'normal',\r\n spellCheck: false,\r\n minRows: 5,\r\n maxRows: 10,\r\n};\r\n\r\nexport default withStyles(styles)(TextAreaField);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, InputLabel, Typography, FormControl } from '@material-ui/core';\r\n\r\nimport NavigationLink from 'app/components/NavigationLink';\r\n\r\nconst ReadOnlyField = ({\r\n to,\r\n value,\r\n label,\r\n classes,\r\n children,\r\n margin = 'normal',\r\n variant = 'subtitle1',\r\n TextComponent = to ? NavigationLink : Typography,\r\n ...rest\r\n}) => {\r\n return (\r\n \r\n {label}\r\n \r\n {value && (\r\n \r\n {value}\r\n \r\n )}\r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n marginTop: theme.spacing(2), // push content below InputLabel\r\n },\r\n text: {\r\n padding: '2px 0',\r\n whiteSpace: 'pre-wrap',\r\n fontWeight: theme.typography.fontWeightMedium,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ReadOnlyField);\r\n","import ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\n/* redux-form wrapper around the ReadOnlyField component\r\n */\r\nconst ReadOnlyFieldReduxForm = ({ input, ...rest }) => (\r\n \r\n);\r\n\r\nexport default ReadOnlyFieldReduxForm;\r\n","import { Grid } from '@material-ui/core';\r\nimport { Field } from 'redux-form/immutable';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport TextAreaField from 'app/components/form/TextAreaField';\r\nimport ReadOnlyFieldReduxForm from 'app/components/form/redux-form/ReadOnlyFieldReduxForm';\r\n\r\nconst RoleForm = ({ submit, form, isProtected = true }) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst RoleNameField = ({ name, isProtected }) => {\r\n if (isProtected)\r\n return (\r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default RoleForm;\r\n","import { compose } from 'redux';\r\nimport { PureComponent } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Paper, Typography } from '@material-ui/core';\r\n\r\nimport {\r\n hasAllPermissions,\r\n hasOneOrMorePermissions,\r\n} from 'utils/authorization.util';\r\n\r\nclass RoleAccessSummary extends PureComponent {\r\n isPermissionGroupVisible = (permissionGroup) => {\r\n const { rolePermissions } = this.props;\r\n const { hidden, permissions } = permissionGroup;\r\n\r\n if (hidden) return false;\r\n\r\n return hasOneOrMorePermissions(rolePermissions, permissions);\r\n };\r\n\r\n getGroupPermissionsSummary = (groupPermissions) => {\r\n const { rolePermissions, permissions } = this.props;\r\n\r\n const hasFullAccess = hasAllPermissions(rolePermissions, groupPermissions);\r\n\r\n if (hasFullAccess) return 'Full Access';\r\n\r\n return groupPermissions\r\n .filter((permissionId) => rolePermissions.has(permissionId))\r\n .map((permissionId) =>\r\n permissions.getIn([permissionId.toString(), 'name']),\r\n )\r\n .filter(Boolean)\r\n .join(', ');\r\n };\r\n\r\n renderPermissionGroup = (permissionGroup, groupIndex) => {\r\n const { classes } = this.props;\r\n const { title, permissions, permissionGroups } = permissionGroup;\r\n\r\n if (permissionGroups) {\r\n // render visible sub groups instead\r\n return this.renderVisiblePermissionGroups(permissionGroups);\r\n }\r\n\r\n return (\r\n \r\n \r\n {title}\r\n \r\n \r\n {this.getGroupPermissionsSummary(permissions)}\r\n \r\n \r\n );\r\n };\r\n\r\n renderVisiblePermissionGroups = (permissionGroups) =>\r\n permissionGroups\r\n .filter(this.isPermissionGroupVisible)\r\n .map(this.renderPermissionGroup);\r\n\r\n render() {\r\n const { classes, permissionGroups, rolePermissions } = this.props;\r\n\r\n const visiblePermissionGroups = permissionGroups.filter(\r\n this.isPermissionGroupVisible,\r\n );\r\n\r\n const hasAnyPermission =\r\n !rolePermissions.isEmpty() && !!visiblePermissionGroups.length;\r\n\r\n return (\r\n \r\n \r\n Access Rights Summary\r\n {!hasAnyPermission && (\r\n \r\n \r\n No permissions assigned yet\r\n \r\n \r\n )}\r\n {hasAnyPermission &&\r\n this.renderVisiblePermissionGroups(permissionGroups)}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n permissionGroupsContainer: {\r\n padding: theme.spacing(3),\r\n },\r\n\r\n permissionGroupRoot: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(RoleAccessSummary);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport debounce from 'lodash/debounce';\r\nimport { Grid } from '@material-ui/core';\r\nimport { PureComponent } from 'react';\r\nimport { reduxForm } from 'redux-form/immutable';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n projectRoleFormOnChange,\r\n initializeProjectRoleForm,\r\n projectRoleAccessRightsOnLoad,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport {\r\n PROJECT_ROLE_FORM,\r\n projectPermissionGroups,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport {\r\n getProjectRoleFromState,\r\n getProjectPermissionsFromState,\r\n getProjectRolePermissionsFromState,\r\n} from 'authorization/authorization.selectors';\r\n\r\nimport { EMPTY_MAP, EMPTY_SET } from 'app/app.constants';\r\nimport RoleForm from 'features/settings/accessRoles/RoleForm';\r\nimport RoleAccessSummary from 'features/settings/accessRoles/RoleAccessSummary';\r\n\r\nclass ProjectRoleOverview extends PureComponent {\r\n componentDidMount() {\r\n const { projectRoleId, dispatchOnLoad } = this.props;\r\n\r\n dispatchOnLoad(projectRoleId);\r\n }\r\n componentDidUpdate({ projectRole: previousProjectRole }) {\r\n const {\r\n initialized,\r\n projectRole: currentProjectRole,\r\n dispatchInitializeProjectRoleForm,\r\n } = this.props;\r\n\r\n if (!currentProjectRole) return;\r\n\r\n if (!initialized || currentProjectRole !== previousProjectRole) {\r\n dispatchInitializeProjectRoleForm(currentProjectRole);\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n projectRole,\r\n projectPermissions,\r\n projectRolePermissions,\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nProjectRoleOverview.defaultProps = {\r\n projectRole: EMPTY_MAP,\r\n projectRolePermissions: EMPTY_SET,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { projectRoleId }) => ({\r\n projectRole: getProjectRoleFromState(state, projectRoleId),\r\n projectPermissions: getProjectPermissionsFromState(state),\r\n projectRolePermissions: getProjectRolePermissionsFromState(\r\n state,\r\n projectRoleId,\r\n ),\r\n }),\r\n {\r\n dispatchInitializeProjectRoleForm: initializeProjectRoleForm,\r\n dispatchOnLoad: projectRoleAccessRightsOnLoad,\r\n },\r\n ),\r\n reduxForm({\r\n form: PROJECT_ROLE_FORM.ID,\r\n onChange: debounce(projectRoleFormOnChange, 1500),\r\n }),\r\n)(ProjectRoleOverview);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid, Button } from '@material-ui/core';\r\n\r\nimport { NavTabsContainer, DetailsHeader } from 'altus-ui-components';\r\n\r\nimport {\r\n getProjectRole,\r\n deleteProjectRoleAskConfirmation,\r\n} from 'authorization/authorization.actions';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport { getProjectRoleFromState } from 'authorization/authorization.selectors';\r\n\r\nclass ProjectRoleContainer extends PureComponent {\r\n componentDidMount() {\r\n const { projectRoleId, dispatchGetProjectRole } = this.props;\r\n\r\n dispatchGetProjectRole(projectRoleId);\r\n }\r\n\r\n render() {\r\n const {\r\n routes,\r\n projectRole,\r\n projectRoleId,\r\n dispatchDeleteProjectRole,\r\n } = this.props;\r\n\r\n const displayDeleteBtn = !projectRole.get('isProtected');\r\n\r\n return (\r\n \r\n \r\n {displayDeleteBtn && (\r\n \r\n dispatchDeleteProjectRole(projectRole)}\r\n >\r\n Delete\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nProjectRoleContainer.defaultProps = {\r\n projectRole: EMPTY_MAP,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { projectRoleId }) => ({\r\n projectRole: getProjectRoleFromState(state, projectRoleId),\r\n }),\r\n {\r\n dispatchGetProjectRole: getProjectRole,\r\n dispatchDeleteProjectRole: deleteProjectRoleAskConfirmation,\r\n },\r\n ),\r\n)(ProjectRoleContainer);\r\n","import SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\n\r\nconst NoRoleSelectedPage = () => (\r\n \r\n);\r\n\r\nexport default NoRoleSelectedPage;\r\n","import { compose } from 'redux';\r\nimport { PureComponent } from 'react';\r\nimport { reduxForm } from 'redux-form/immutable';\r\nimport { Dialog, DialogContent, Button } from '@material-ui/core';\r\n\r\nimport { LoadingButton } from 'altus-ui-components';\r\nimport { withModal, ModalHeader, ModalActions } from 'altus-ui-components';\r\n\r\nimport {\r\n CREATE_PROJECT_ROLE_FORM,\r\n CREATE_PROJECT_ROLE_MODAL_ID,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport RoleForm from 'features/settings/accessRoles/RoleForm';\r\n\r\nclass CreateProjectRoleModal extends PureComponent {\r\n onClose = () => {\r\n const { reset, toggleModal } = this.props;\r\n\r\n reset();\r\n toggleModal();\r\n };\r\n\r\n render() {\r\n const { open, valid, pristine, onSubmit, submitting, handleSubmit } =\r\n this.props;\r\n const submit = handleSubmit(onSubmit(this.onClose));\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Create\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default compose(\r\n withModal(CREATE_PROJECT_ROLE_MODAL_ID),\r\n reduxForm({\r\n form: CREATE_PROJECT_ROLE_FORM.ID,\r\n initialValues: {\r\n [CREATE_PROJECT_ROLE_FORM.NAME]: '',\r\n [CREATE_PROJECT_ROLE_FORM.DESCRIPTION]: '',\r\n },\r\n }),\r\n)(CreateProjectRoleModal);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid, Divider } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { matchPath, Redirect, Switch } from 'react-router-dom';\r\n\r\nimport {\r\n Menu,\r\n MenuHeader,\r\n LoadingOverlay,\r\n RouteContainer,\r\n MenuNavigationItem,\r\n withToggleModal,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n createProjectRoleOnSubmit,\r\n getProjectRoles,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport {\r\n AUTHORIZATION_ACTIONS,\r\n CREATE_PROJECT_ROLE_MODAL_ID,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { toProjectRole } from 'utils/route.util';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport NoRoleSelectedPage from 'features/settings/accessRoles/NoRoleSelectedPage';\r\nimport { getProjectRolesListFromState } from 'authorization/authorization.selectors';\r\nimport CreateProjectRoleModal from 'features/settings/accessRoles/projectRoles/CreateProjectRoleModal';\r\n\r\nclass ProjectRolesContainer extends PureComponent {\r\n componentDidMount() {\r\n const { dispatchGetProjectRoles } = this.props;\r\n\r\n dispatchGetProjectRoles();\r\n }\r\n\r\n onAdd = () => {\r\n const { dispatchToggleModal } = this.props;\r\n\r\n dispatchToggleModal({ modalId: CREATE_PROJECT_ROLE_MODAL_ID });\r\n };\r\n\r\n renderMenuItem = (projectRole) => {\r\n const { pathname } = this.props;\r\n\r\n // use the current path, and replace the base url with the correct role url\r\n const match = matchPath(pathname, {\r\n path: '/v2/settings/access-roles/project/:projectRoleId',\r\n });\r\n\r\n if (!match) return null;\r\n\r\n const roleId = projectRole.get('roleId');\r\n const projectRoleUrl = toProjectRole(roleId);\r\n\r\n const to = pathname.replace(match.url, projectRoleUrl);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n path,\r\n routes,\r\n classes,\r\n dataState,\r\n projectRoles,\r\n dispatchCreateProjectRoleOnSubmit,\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n this.renderMenuItem(item)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {!!projectRoles.size && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nProjectRolesContainer.defaultProps = {\r\n projectRoles: EMPTY_LIST,\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n menuContainer: {\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nexport default compose(\r\n withToggleModal,\r\n connect(\r\n (state) => ({\r\n projectRoles: getProjectRolesListFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n AUTHORIZATION_ACTIONS.GET_PROJECT_ROLES,\r\n ),\r\n }),\r\n {\r\n dispatchGetProjectRoles: getProjectRoles,\r\n dispatchCreateProjectRoleOnSubmit: createProjectRoleOnSubmit,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(ProjectRolesContainer);\r\n","import { compose } from 'redux';\r\nimport { PureComponent } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { getProjectRoleFromState } from 'authorization/authorization.selectors';\r\n\r\nclass ProjectRoleBreadcrumb extends PureComponent {\r\n render() {\r\n const { projectRole } = this.props;\r\n\r\n return projectRole ? projectRole.get('name') : '...';\r\n }\r\n}\r\n\r\nexport default compose(\r\n connect((state, { match }) => ({\r\n projectRole: getProjectRoleFromState(state, match.params.projectRoleId),\r\n })),\r\n)(ProjectRoleBreadcrumb);\r\n","import { compose } from 'redux';\r\nimport { PureComponent } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Grid,\r\n List,\r\n Switch,\r\n Divider,\r\n ListItem,\r\n ListItemText,\r\n ListItemSecondaryAction,\r\n} from '@material-ui/core';\r\n\r\nimport { EMPTY_SET } from 'app/app.constants';\r\nimport { hasAllPermissions } from 'utils/authorization.util';\r\n\r\nclass PermissionGroup extends PureComponent {\r\n hasAllPermissions = () => {\r\n const { rolePermissions, permissions } = this.props;\r\n\r\n return hasAllPermissions(rolePermissions, permissions);\r\n };\r\n\r\n handleToggle = (permissionId) => {\r\n const { rolePermissions, onAddPermissions, onRemovePermissions } =\r\n this.props;\r\n\r\n if (rolePermissions.has(permissionId)) {\r\n onRemovePermissions([permissionId]);\r\n } else {\r\n onAddPermissions([permissionId]);\r\n }\r\n };\r\n\r\n handleToggleAll = () => {\r\n const { permissions, onAddPermissions, onRemovePermissions } = this.props;\r\n\r\n const hasAllPermissions = this.hasAllPermissions();\r\n\r\n if (hasAllPermissions) {\r\n onRemovePermissions(permissions);\r\n } else {\r\n onAddPermissions(permissions);\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n classes,\r\n children,\r\n groupName,\r\n permissions,\r\n rolePermissions,\r\n permissionsById,\r\n groupDescription,\r\n showSubpermissions,\r\n } = this.props;\r\n\r\n const hasAllPermissions = this.hasAllPermissions();\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {showSubpermissions &&\r\n permissions.map((permissionId) => {\r\n const permission = permissionsById.get(permissionId.toString());\r\n\r\n if (!permission) return null;\r\n\r\n return (\r\n \r\n \r\n \r\n this.handleToggle(permissionId)}\r\n checked={rolePermissions.has(permissionId)}\r\n />\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n listItemBold: {\r\n fontWeight: theme.typography.fontWeightMedium,\r\n },\r\n listItemRoot: {\r\n paddingTop: theme.spacing(0.5),\r\n paddingBottom: theme.spacing(0.5),\r\n },\r\n children: {\r\n paddingLeft: theme.spacing(3),\r\n },\r\n subgroups: {\r\n paddingLeft: theme.spacing(1.5),\r\n },\r\n});\r\n\r\nPermissionGroup.defaultProps = {\r\n rolePermissions: EMPTY_SET,\r\n showSubpermissions: true,\r\n};\r\n\r\nexport default compose(withStyles(styles))(PermissionGroup);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getProjectPermissionsFromState,\r\n getProjectRolePermissionsFromState,\r\n} from 'authorization/authorization.selectors';\r\n\r\nimport {\r\n projectRoleAccessRightsOnLoad,\r\n assignPermissionsToProjectRole,\r\n unassignPermissionsFromProjectRole,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport PermissionGroup from 'features/settings/accessRoles/PermissionGroup';\r\nimport { projectPermissionGroups } from 'authorization/authorization.constants';\r\n\r\nclass ProjectRoleAccessRights extends PureComponent {\r\n componentDidMount() {\r\n const { projectRoleId, dispatchOnLoad } = this.props;\r\n\r\n dispatchOnLoad(projectRoleId);\r\n }\r\n\r\n addPermissions = (permissionIds) => {\r\n const { projectRoleId, dispatchAssignProjectPermissionsToProjectRole } =\r\n this.props;\r\n\r\n dispatchAssignProjectPermissionsToProjectRole(projectRoleId, permissionIds);\r\n };\r\n\r\n removePermissions = (permissionIds) => {\r\n const { projectRoleId, dispatchUnassignProjectPermissionsFromProjectRole } =\r\n this.props;\r\n\r\n dispatchUnassignProjectPermissionsFromProjectRole(\r\n projectRoleId,\r\n permissionIds,\r\n );\r\n };\r\n\r\n render() {\r\n const { classes, projectPermissions, projectRolePermissions } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n {projectPermissionGroups.map((permissionGroup, groupIndex) => {\r\n const {\r\n title,\r\n hidden,\r\n permissions,\r\n rootPermissionId,\r\n permissionGroups = [],\r\n showSubPermissions = false,\r\n } = permissionGroup;\r\n\r\n if (hidden) return null;\r\n\r\n const rootPermission = rootPermissionId\r\n ? projectPermissions.get(rootPermissionId.toString())\r\n : undefined;\r\n\r\n const groupDescription = rootPermission\r\n ? rootPermission.get('description')\r\n : undefined;\r\n\r\n return (\r\n \r\n {permissionGroups.map((subPermissionGroup, subGroupIndex) => {\r\n const { title, permissions } = subPermissionGroup;\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { projectRoleId }) => ({\r\n projectPermissions: getProjectPermissionsFromState(state),\r\n projectRolePermissions: getProjectRolePermissionsFromState(\r\n state,\r\n projectRoleId,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: projectRoleAccessRightsOnLoad,\r\n dispatchAssignProjectPermissionsToProjectRole:\r\n assignPermissionsToProjectRole,\r\n dispatchUnassignProjectPermissionsFromProjectRole:\r\n unassignPermissionsFromProjectRole,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(ProjectRoleAccessRights);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\n\r\nimport { UserAvatar, SortableList, BasePage } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { getUsersAssignedToSystemRole } from 'authorization/authorization.actions';\r\nimport { getUsersAssignedToSystemRoleFromState } from 'authorization/authorization.selectors';\r\n\r\nclass SystemRoleUsers extends PureComponent {\r\n componentDidMount() {\r\n const { dispatchGetUsersAssignedToSystemRole, systemRoleId } = this.props;\r\n dispatchGetUsersAssignedToSystemRole(systemRoleId);\r\n }\r\n\r\n columns = [\r\n {\r\n title: 'User name',\r\n getSortProperty: (user) => user.get('name'),\r\n },\r\n ];\r\n\r\n renderIcon = (user) => (\r\n \r\n );\r\n\r\n getKey = (user) => user.get('id');\r\n\r\n render() {\r\n const { users } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\nSystemRoleUsers.defaultProps = {\r\n users: EMPTY_LIST,\r\n};\r\nexport default compose(\r\n connect(\r\n (state, { systemRoleId }) => {\r\n const getUsersAssignedToSystemRoleSelector =\r\n getUsersAssignedToSystemRoleFromState(systemRoleId);\r\n\r\n return {\r\n users: getUsersAssignedToSystemRoleSelector(state),\r\n };\r\n },\r\n {\r\n dispatchGetUsersAssignedToSystemRole: getUsersAssignedToSystemRole,\r\n },\r\n ),\r\n)(SystemRoleUsers);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport debounce from 'lodash/debounce';\r\nimport { Grid } from '@material-ui/core';\r\nimport { PureComponent } from 'react';\r\nimport { reduxForm } from 'redux-form/immutable';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n systemRoleFormOnChange,\r\n initializeSystemRoleForm,\r\n systemRoleAccessRightsOnLoad,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport {\r\n SYSTEM_ROLE_FORM,\r\n systemPermissionGroups,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport {\r\n getSystemRoleFromState,\r\n getSystemAndProjectPermissionsFromState,\r\n getSystemAndProjectRolePermissionsFromState,\r\n} from 'authorization/authorization.selectors';\r\n\r\nimport { EMPTY_MAP, EMPTY_SET } from 'app/app.constants';\r\nimport RoleForm from 'features/settings/accessRoles/RoleForm';\r\nimport RoleAccessSummary from 'features/settings/accessRoles/RoleAccessSummary';\r\n\r\nclass SystemRoleOverview extends PureComponent {\r\n componentDidMount() {\r\n const { systemRoleId, dispatchOnLoad } = this.props;\r\n\r\n dispatchOnLoad(systemRoleId);\r\n }\r\n\r\n componentDidUpdate({ systemRole: previousSystemRole }) {\r\n const {\r\n initialized,\r\n systemRole: currentSystemRole,\r\n dispatchInitializeSystemRoleForm,\r\n } = this.props;\r\n\r\n if (!currentSystemRole) return;\r\n\r\n if (!initialized || currentSystemRole !== previousSystemRole) {\r\n dispatchInitializeSystemRoleForm(currentSystemRole);\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n systemRole,\r\n systemAndProjectPermissions,\r\n systemAndProjectRolePermissions,\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSystemRoleOverview.defaultProps = {\r\n systemRole: EMPTY_MAP,\r\n systemAndProjectPermissions: EMPTY_SET,\r\n systemAndProjectRolePermissions: EMPTY_SET,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { systemRoleId }) => ({\r\n systemRole: getSystemRoleFromState(state, systemRoleId),\r\n systemAndProjectPermissions: getSystemAndProjectPermissionsFromState(\r\n state,\r\n ),\r\n systemAndProjectRolePermissions: getSystemAndProjectRolePermissionsFromState(\r\n state,\r\n systemRoleId,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: systemRoleAccessRightsOnLoad,\r\n dispatchInitializeSystemRoleForm: initializeSystemRoleForm,\r\n },\r\n ),\r\n reduxForm({\r\n form: SYSTEM_ROLE_FORM.ID,\r\n onChange: debounce(systemRoleFormOnChange, 1500),\r\n }),\r\n)(SystemRoleOverview);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid, Button } from '@material-ui/core';\r\n\r\nimport { NavTabsContainer, DetailsHeader } from 'altus-ui-components';\r\n\r\nimport {\r\n getSystemRole,\r\n deleteSystemRoleAskConfirmation,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport { getSystemRoleFromState } from 'authorization/authorization.selectors';\r\n\r\nclass SystemRoleContainer extends PureComponent {\r\n componentDidMount() {\r\n const { systemRoleId, dispatchGetSystemRole } = this.props;\r\n\r\n dispatchGetSystemRole(systemRoleId);\r\n }\r\n\r\n render() {\r\n const {\r\n routes,\r\n systemRole,\r\n systemRoleId,\r\n dispatchDeleteSystemRole,\r\n } = this.props;\r\n\r\n const displayDeleteBtn = !systemRole.get('isProtected');\r\n\r\n return (\r\n \r\n \r\n {displayDeleteBtn && (\r\n dispatchDeleteSystemRole(systemRole)}\r\n >\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSystemRoleContainer.defaultProps = {\r\n systemRole: EMPTY_MAP,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { systemRoleId }) => ({\r\n systemRole: getSystemRoleFromState(state, systemRoleId),\r\n }),\r\n {\r\n dispatchGetSystemRole: getSystemRole,\r\n dispatchDeleteSystemRole: deleteSystemRoleAskConfirmation,\r\n },\r\n ),\r\n)(SystemRoleContainer);\r\n","import { compose } from 'redux';\r\nimport { PureComponent } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { getSystemRoleFromState } from 'authorization/authorization.selectors';\r\n\r\nclass SystemRoleBreadcrumb extends PureComponent {\r\n render() {\r\n const { systemRole } = this.props;\r\n\r\n return systemRole ? systemRole.get('name') : '...';\r\n }\r\n}\r\n\r\nexport default compose(\r\n connect((state, { match }) => ({\r\n systemRole: getSystemRoleFromState(state, match.params.systemRoleId),\r\n })),\r\n)(SystemRoleBreadcrumb);\r\n","import { compose } from 'redux';\r\nimport { PureComponent } from 'react';\r\nimport { reduxForm } from 'redux-form/immutable';\r\nimport { Dialog, DialogContent, Button } from '@material-ui/core';\r\n\r\nimport {\r\n withModal,\r\n ModalHeader,\r\n ModalActions,\r\n LoadingButton,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n CREATE_SYSTEM_ROLE_FORM,\r\n CREATE_SYSTEM_ROLE_MODAL_ID,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport RoleForm from 'features/settings/accessRoles/RoleForm';\r\n\r\nclass CreateSystemRoleModal extends PureComponent {\r\n onClose = () => {\r\n const { reset, toggleModal } = this.props;\r\n\r\n reset();\r\n toggleModal();\r\n };\r\n\r\n render() {\r\n const { open, valid, pristine, onSubmit, submitting, handleSubmit } =\r\n this.props;\r\n const submit = handleSubmit(onSubmit(this.onClose));\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Create\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default compose(\r\n withModal(CREATE_SYSTEM_ROLE_MODAL_ID),\r\n reduxForm({\r\n form: CREATE_SYSTEM_ROLE_FORM.ID,\r\n initialValues: {\r\n [CREATE_SYSTEM_ROLE_FORM.NAME]: '',\r\n [CREATE_SYSTEM_ROLE_FORM.DESCRIPTION]: '',\r\n },\r\n }),\r\n)(CreateSystemRoleModal);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid, Divider } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { matchPath, Redirect, Switch } from 'react-router-dom';\r\n\r\nimport {\r\n Menu,\r\n MenuHeader,\r\n LoadingOverlay,\r\n RouteContainer,\r\n MenuNavigationItem,\r\n withToggleModal,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n getSystemRoles,\r\n createSystemRoleOnSubmit,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport {\r\n AUTHORIZATION_ACTIONS,\r\n CREATE_SYSTEM_ROLE_MODAL_ID,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { toSystemRole } from 'utils/route.util';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport NoRoleSelectedPage from 'features/settings/accessRoles/NoRoleSelectedPage';\r\nimport { getSystemRolesListFromState } from 'authorization/authorization.selectors';\r\nimport CreateSystemRoleModal from 'features/settings/accessRoles/systemRoles/CreateSystemRoleModal';\r\n\r\nclass SystemRolesContainer extends PureComponent {\r\n componentDidMount() {\r\n const { dispatchGetSystemRoles } = this.props;\r\n\r\n dispatchGetSystemRoles();\r\n }\r\n\r\n onAdd = () => {\r\n const { dispatchToggleModal } = this.props;\r\n dispatchToggleModal({ modalId: CREATE_SYSTEM_ROLE_MODAL_ID });\r\n };\r\n\r\n renderMenuItem = (systemRole) => {\r\n const { pathname } = this.props;\r\n\r\n // use the current path, and replace the base url with the correct role url\r\n const match = matchPath(pathname, {\r\n path: '/v2/settings/access-roles/system/:systemRoleId',\r\n });\r\n\r\n if (!match) return null;\r\n\r\n const roleId = systemRole.get('roleId');\r\n const systemRoleUrl = toSystemRole(roleId);\r\n\r\n const to = pathname.replace(match.url, systemRoleUrl);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n path,\r\n routes,\r\n classes,\r\n dataState,\r\n systemRoles,\r\n dispatchCreateSystemRoleOnSubmit,\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n this.renderMenuItem(item)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {!!systemRoles.size && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSystemRolesContainer.defaultProps = {\r\n systemRoles: EMPTY_LIST,\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n menuContainer: {\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nexport default compose(\r\n withToggleModal,\r\n connect(\r\n (state) => ({\r\n systemRoles: getSystemRolesListFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n AUTHORIZATION_ACTIONS.GET_SYSTEM_ROLES,\r\n ),\r\n }),\r\n {\r\n dispatchGetSystemRoles: getSystemRoles,\r\n dispatchCreateSystemRoleOnSubmit: createSystemRoleOnSubmit,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(SystemRolesContainer);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getSystemAndProjectPermissionsFromState,\r\n getSystemAndProjectRolePermissionsFromState,\r\n} from 'authorization/authorization.selectors';\r\n\r\nimport {\r\n systemRoleAccessRightsOnLoad,\r\n assignSystemPermissionsToSystemRole,\r\n assignProjectPermissionsToSystemRole,\r\n unassignSystemPermissionsFromSystemRole,\r\n unassignProjectPermissionsFromSystemRole,\r\n} from 'authorization/authorization.actions';\r\n\r\nimport {\r\n PermissionType,\r\n systemPermissionGroups,\r\n} from 'authorization/authorization.constants';\r\n\r\nimport PermissionGroup from 'features/settings/accessRoles/PermissionGroup';\r\n\r\nclass SystemRoleAccessRights extends PureComponent {\r\n componentDidMount() {\r\n const { systemRoleId, dispatchOnLoad } = this.props;\r\n\r\n dispatchOnLoad(systemRoleId);\r\n }\r\n\r\n addSystemPermissions = (permissionIds) => {\r\n const { systemRoleId, dispatchAssignSystemPermissionsToSystemRole } =\r\n this.props;\r\n\r\n dispatchAssignSystemPermissionsToSystemRole(systemRoleId, permissionIds);\r\n };\r\n\r\n removeSystemPermissions = (permissionIds) => {\r\n const { systemRoleId, dispatchUnassignSystemPermissionsFromSystemRole } =\r\n this.props;\r\n\r\n dispatchUnassignSystemPermissionsFromSystemRole(\r\n systemRoleId,\r\n permissionIds,\r\n );\r\n };\r\n\r\n addProjectPermissions = (permissionIds) => {\r\n const { systemRoleId, dispatchAssignProjectPermissionsToSystemRole } =\r\n this.props;\r\n\r\n dispatchAssignProjectPermissionsToSystemRole(systemRoleId, permissionIds);\r\n };\r\n\r\n removeProjectPermissions = (permissionIds) => {\r\n const { systemRoleId, dispatchUnassignProjectPermissionsFromSystemRole } =\r\n this.props;\r\n\r\n dispatchUnassignProjectPermissionsFromSystemRole(\r\n systemRoleId,\r\n permissionIds,\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n classes,\r\n systemAndProjectPermissions,\r\n systemAndProjectRolePermissions,\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n {systemPermissionGroups.map((permissionGroup, groupIndex) => {\r\n const {\r\n title,\r\n hidden,\r\n permissions,\r\n rootPermissionId,\r\n showSubPermissions = false,\r\n rootPermissionType = PermissionType.SYSTEM,\r\n } = permissionGroup;\r\n if (hidden) return null;\r\n\r\n const rootPermission = rootPermissionId\r\n ? systemAndProjectPermissions.get(rootPermissionId.toString())\r\n : undefined;\r\n\r\n const groupDescription = rootPermission\r\n ? rootPermission.get('description')\r\n : undefined;\r\n\r\n const onAddPermissions =\r\n rootPermissionType === PermissionType.SYSTEM\r\n ? this.addSystemPermissions\r\n : this.addProjectPermissions;\r\n\r\n const onRemovePermissions =\r\n rootPermissionType === PermissionType.SYSTEM\r\n ? this.removeSystemPermissions\r\n : this.removeProjectPermissions;\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { systemRoleId }) => ({\r\n systemAndProjectPermissions:\r\n getSystemAndProjectPermissionsFromState(state),\r\n systemAndProjectRolePermissions:\r\n getSystemAndProjectRolePermissionsFromState(state, systemRoleId),\r\n }),\r\n {\r\n dispatchOnLoad: systemRoleAccessRightsOnLoad,\r\n dispatchAssignSystemPermissionsToSystemRole:\r\n assignSystemPermissionsToSystemRole,\r\n dispatchUnassignSystemPermissionsFromSystemRole:\r\n unassignSystemPermissionsFromSystemRole,\r\n dispatchAssignProjectPermissionsToSystemRole:\r\n assignProjectPermissionsToSystemRole,\r\n dispatchUnassignProjectPermissionsFromSystemRole:\r\n unassignProjectPermissionsFromSystemRole,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(SystemRoleAccessRights);\r\n","import { compose } from 'redux';\r\nimport { isImmutable, fromJS } from 'immutable';\r\nimport { Chip } from '@material-ui/core';\r\nimport { useCallback, useMemo, useRef } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { MultiSelectModal } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport TextFieldV2 from 'app/components/form/TextFieldV2';\r\n\r\nconst modalId = 'DEPARTMENT_SELECT_MODAL_ID';\r\n\r\nconst validate = () => true;\r\n\r\nconst getSubmitLabel = (selectedItems) =>\r\n selectedItems.size ? `Save (${selectedItems.size})` : 'Save';\r\n\r\nconst getDepartmentName = (department) => department.get('name');\r\n\r\nconst DepartmentSelectField = ({\r\n label,\r\n input,\r\n classes,\r\n disabled,\r\n departments,\r\n}) => {\r\n const { onChange, value = EMPTY_LIST, name } = input;\r\n\r\n const [isOpen, toggleModal] = useModal(modalId);\r\n const departmentsRef = useRef(\r\n isImmutable(departments) ? departments : fromJS(departments),\r\n );\r\n\r\n const renderValue = useCallback(() => {\r\n return value\r\n .sortBy((department) => department.get('name'))\r\n .map((department) => (\r\n \r\n ));\r\n }, [value, classes]);\r\n\r\n const initialSelectedItems = useMemo(() => {\r\n return value\r\n .map((department) => department.get('id'))\r\n .map((departmentId) =>\r\n departmentsRef.current.get(departmentId.toString()),\r\n )\r\n .toSet();\r\n }, [value]);\r\n\r\n const onSubmit = useCallback(\r\n (selectedDepartments) => {\r\n onChange(selectedDepartments);\r\n toggleModal();\r\n },\r\n [onChange, toggleModal],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {EMPTY_LIST.toArray()}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n chip: {\r\n height: 27,\r\n marginLeft: 0,\r\n margin: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(DepartmentSelectField);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport { Button, CircularProgress } from '@material-ui/core';\r\n\r\nimport { NotRequestedDataState } from 'altus-datastate';\r\n\r\nconst styles = (theme) => ({\r\n button: {\r\n color: theme.altus.button.progress,\r\n marginLeft: 15,\r\n },\r\n});\r\n\r\nconst LoadingButton = ({\r\n loadingText,\r\n submitting,\r\n dataState,\r\n children,\r\n disabled,\r\n classes,\r\n btnRef,\r\n ...rest\r\n}) => {\r\n const isLoading = dataState.isLoading() || submitting;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nLoadingButton.defaultProps = {\r\n dataState: NotRequestedDataState,\r\n};\r\n\r\nexport default withStyles(styles)(LoadingButton);\r\n","import { Set } from 'immutable';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { useCallback } from 'react';\r\nimport isFunction from 'lodash/isFunction';\r\n\r\nimport { EMPTY_SET } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { usePermissions } from 'app/hooks/authorization/usePermissions';\r\n\r\nconst HasPermission = ({\r\n render,\r\n children,\r\n permissions = EMPTY_SET,\r\n userPermissions = EMPTY_SET,\r\n}) => {\r\n const renderContent = useCallback(\r\n (hasPermission) => {\r\n if (render) return invokeIfFunction(render, hasPermission);\r\n\r\n if (isFunction(children)) return children(hasPermission);\r\n\r\n if (!hasPermission) return null;\r\n\r\n if (children) return children;\r\n\r\n return null;\r\n },\r\n [render, children],\r\n );\r\n\r\n const { hasPermission } = usePermissions(userPermissions, permissions);\r\n\r\n return renderContent(hasPermission);\r\n};\r\n\r\nHasPermission.propTypes = {\r\n render: PropTypes.func,\r\n userPermissions: PropTypes.instanceOf(Set).isRequired,\r\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\r\n permissions: PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.instanceOf(Set),\r\n PropTypes.arrayOf(PropTypes.number),\r\n ]),\r\n};\r\n\r\nexport default compose()(HasPermission);\r\n","import { useMemo } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { getCurrentProjectMemberFromState } from 'app/app.selectors';\r\nimport { usePermissions } from 'app/hooks/authorization/usePermissions';\r\nimport { getRequiredProjectPermissions } from 'utils/authorization.util';\r\nimport { getCurrentUserProjectPermissionsFromState } from 'authorization/authorization.selectors';\r\n\r\nexport const useProjectPermissions = (permissions) => {\r\n const currentProjectMember = useSelector(getCurrentProjectMemberFromState);\r\n\r\n const userPermissions = useSelector(\r\n getCurrentUserProjectPermissionsFromState,\r\n );\r\n\r\n const requiredPermissions = useMemo(\r\n () => getRequiredProjectPermissions(permissions),\r\n [permissions],\r\n );\r\n\r\n const { hasPermission, permissions: projectPermissions } = usePermissions(\r\n userPermissions,\r\n requiredPermissions,\r\n );\r\n\r\n return {\r\n hasPermission,\r\n userPermissions,\r\n projectPermissions,\r\n currentProjectMember,\r\n };\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport { useCallback } from 'react';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport HasPermission from 'app/components/HasPermission';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\n\r\nconst HasProjectPermission = ({ render, children, permissions }) => {\r\n const { userPermissions, projectPermissions, currentProjectMember } =\r\n useProjectPermissions(permissions);\r\n\r\n const renderContent = useCallback(\r\n (hasPermission) =>\r\n invokeIfFunction(\r\n render,\r\n hasPermission,\r\n userPermissions,\r\n projectPermissions,\r\n currentProjectMember,\r\n ),\r\n [render, userPermissions, projectPermissions, currentProjectMember],\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nHasProjectPermission.propTypes = {\r\n render: PropTypes.func,\r\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\r\n permissions: PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.instanceOf(Set),\r\n PropTypes.arrayOf(PropTypes.number),\r\n ]),\r\n};\r\n\r\nexport default HasProjectPermission;\r\n","import { Link } from 'react-router-dom';\r\nimport { createElement } from 'react';\r\n\r\nimport {\r\n Fab as MuiFab,\r\n Grid as MuiGrid,\r\n Paper as MuiPaper,\r\n Button as MuiButton,\r\n IconButton as MuiIconButton,\r\n StepButton as MuiStepButton,\r\n Typography as MuiTypography,\r\n} from '@material-ui/core';\r\n\r\nexport const withNavigation =\r\n (WrappedComponent) =>\r\n ({\r\n to,\r\n replace,\r\n linkClassName,\r\n linkComponent = Link,\r\n target,\r\n ...passThroughProps\r\n }) => {\r\n const styles = linkClassName\r\n ? undefined\r\n : { display: 'contents', color: 'inherit' };\r\n\r\n return to ? (\r\n createElement(\r\n linkComponent,\r\n {\r\n to,\r\n replace,\r\n style: styles,\r\n href: to,\r\n target,\r\n className: linkClassName,\r\n },\r\n ,\r\n )\r\n ) : (\r\n \r\n );\r\n };\r\n\r\nexport default withNavigation;\r\n\r\nexport const Fab = withNavigation(MuiFab);\r\nexport const Image = withNavigation('img');\r\nexport const Grid = withNavigation(MuiGrid);\r\nexport const Paper = withNavigation(MuiPaper);\r\nexport const Button = withNavigation(MuiButton);\r\nexport const IconButton = withNavigation(MuiIconButton);\r\nexport const StepButton = withNavigation(MuiStepButton);\r\nexport const Typography = withNavigation(MuiTypography);\r\n","import { Grid } from '@material-ui/core';\r\nimport { useSelector } from 'react-redux';\r\nimport Delete from '@material-ui/icons/Delete';\r\nimport FileCopy from '@material-ui/icons/FileCopy';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { getWorkItemStatusDisplayName } from 'utils/app.util';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { ProjectPermission, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { Button as NavigationButton } from 'app/components/withNavigation';\r\nimport { toWellbore, toProjectTasks, toProjectDetails } from 'utils/route.util';\r\n\r\nconst TaskDetails = ({\r\n task,\r\n taskId,\r\n classes,\r\n copyTask,\r\n projectId,\r\n deleteTask,\r\n TaskIdProps,\r\n TaskRunProps,\r\n displayProject,\r\n TaskFieldProps,\r\n TaskStatusProps,\r\n ReadOnlyFieldProps,\r\n displayCopyTaskBtn,\r\n displayNavigationBtn,\r\n displayDeleteTaskBtn,\r\n copyTaskDisabled,\r\n}) => {\r\n // TODO: Pass as prop, using useSelector currently to remove toJSComponent gradually\r\n const project = useSelector(getCurrentProject);\r\n\r\n return (\r\n \r\n \r\n {[\r\n ['Task', taskId, TaskIdProps],\r\n ['Run', task.get('runNumber'), TaskRunProps],\r\n displayProject && [\r\n 'Project',\r\n projectId,\r\n {\r\n to: toProjectDetails(projectId),\r\n },\r\n ],\r\n [\r\n 'Well',\r\n project.get('wellboreName'),\r\n {\r\n target: '_blank',\r\n to: toWellbore(project.get('fieldId'), project.get('wellboreId')),\r\n },\r\n ],\r\n ['Field', project.get('fieldName'), TaskFieldProps],\r\n [\r\n 'Status',\r\n getWorkItemStatusDisplayName(task.get('status')),\r\n TaskStatusProps,\r\n ],\r\n ]\r\n .filter((value) => value)\r\n .map(([label, value, props]) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n {[displayCopyTaskBtn, displayDeleteTaskBtn, displayNavigationBtn].some(\r\n (displayBtn) => displayBtn,\r\n ) && (\r\n \r\n \r\n {displayCopyTaskBtn && (\r\n \r\n copyTask(projectId, task.get('id'))}\r\n disabled={copyTaskDisabled}\r\n >\r\n \r\n Duplicate\r\n \r\n \r\n )}\r\n \r\n \r\n {displayDeleteTaskBtn && (\r\n \r\n deleteTask(projectId, taskId)}\r\n disabled={task.get('status') !== WORK_ITEM_STATUS.PLANNED}\r\n >\r\n \r\n Delete\r\n \r\n \r\n )}\r\n \r\n {displayNavigationBtn && (\r\n \r\n \r\n Open\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nTaskDetails.defaultProps = {\r\n displayCopyTaskBtn: true,\r\n displayDeleteTaskBtn: true,\r\n displayNavigationBtn: true,\r\n copyTaskDisabled: false,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TaskDetails);\r\n","import { useMemo } from 'react';\r\nimport { Field } from 'redux-form/immutable';\r\nimport { MenuItem } from '@material-ui/core';\r\n\r\nimport TextField from 'app/components/form/TextField';\r\nimport { EMPTY_LIST, EMPTY_STRING } from 'app/app.constants';\r\nimport { TaskType } from 'features/projects/tasks/tasks.constants';\r\n\r\nconst TaskTypeSelect = ({ taskTypes = EMPTY_LIST, ...rest }) => {\r\n const taskTypesById = useMemo(\r\n () => taskTypes.toMap().mapKeys((_, taskType) => taskType.get('id')),\r\n [taskTypes],\r\n );\r\n\r\n return (\r\n \r\n {Object.values(TaskType).map((taskType) => (\r\n \r\n {taskTypesById.getIn([taskType, 'name'], EMPTY_STRING)}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default TaskTypeSelect;\r\n","import { useCallback } from 'react';\r\nimport { isImmutable } from 'immutable';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport ReduxFormTextField from 'app/components/form/TextField';\r\nimport { EMPTY_QUANTITY, EMPTY_STRING } from 'app/app.constants';\r\n\r\nconst QuantityTextFieldReduxForm = ({\r\n meta,\r\n input,\r\n margin,\r\n fullwidth,\r\n InputProps,\r\n ...rest\r\n}) => {\r\n const { value: quantity = EMPTY_QUANTITY, onChange, ...restInput } = input;\r\n const quantityJS = isImmutable(quantity) ? quantity.toJS() : quantity;\r\n\r\n const { unit, value, hasValue } = quantityJS;\r\n\r\n const quantityOnChange = useCallback(\r\n (event) =>\r\n onChange({\r\n unit,\r\n value: event.target.value,\r\n hasValue: !!event.target.value,\r\n }),\r\n [unit, onChange],\r\n );\r\n\r\n return (\r\n {unit},\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default QuantityTextFieldReduxForm;\r\n","import { createElement } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst RunNumber = ({ classes, children, component, size, ...rest }) => {\r\n return children\r\n ? createElement(\r\n component,\r\n {\r\n noWrap: true,\r\n color: 'textPrimary',\r\n className: classes.root,\r\n style: {\r\n height: `${size}px`,\r\n width: `${size}px`,\r\n lineHeight: `${size}px`,\r\n },\r\n ...rest,\r\n },\r\n children,\r\n )\r\n : null;\r\n};\r\n\r\nRunNumber.defaultProps = {\r\n size: 32,\r\n component: Typography,\r\n variant: 'body2',\r\n};\r\n\r\nexport default withStyles((theme) => ({\r\n root: {\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 1,\r\n borderRadius: '50%',\r\n borderStyle: 'solid',\r\n textAlign: 'center',\r\n },\r\n}))(RunNumber);\r\n","import classNames from 'classnames';\r\nimport { isImmutable } from 'immutable';\r\nimport { Field } from 'redux-form/immutable';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { MenuItem, Checkbox, Chip } from '@material-ui/core';\r\n\r\nimport TextField from 'app/components/form/TextField';\r\nimport RunNumber from 'features/projects/components/RunNumber';\r\n\r\nconst TaskMultipleContingenciesSelect = ({\r\n task,\r\n input,\r\n tasks,\r\n label,\r\n classes,\r\n disabled,\r\n required,\r\n}) => {\r\n const { value, name } = input;\r\n\r\n const valueJS = (isImmutable(value) ? value.toJS() : value) || [];\r\n\r\n const filteredTasks = tasks.filter((element) => {\r\n return (\r\n element.status !== 32 && element.status !== 33 && element.status !== 33\r\n );\r\n });\r\n\r\n return (\r\n {\r\n return valueJS.map((taskId) => {\r\n const task = tasks.find((task) => task.id === taskId);\r\n\r\n return (\r\n \r\n );\r\n });\r\n },\r\n }}\r\n >\r\n {filteredTasks.map(({ id, title, runNumber, sequence }) => {\r\n const disabled = sequence <= task.sequence;\r\n\r\n return (\r\n \r\n departmentId === id)}\r\n />\r\n \r\n {runNumber}\r\n \r\n {title}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default withStyles((theme) => ({\r\n chip: {\r\n margin: 4,\r\n marginLeft: 0,\r\n height: 27,\r\n },\r\n selectMenu: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n runNumber: {\r\n marginRight: theme.spacing(1.5),\r\n },\r\n checkboxHidden: {\r\n visibility: 'hidden',\r\n },\r\n}))(TaskMultipleContingenciesSelect);\r\n","import { List } from 'immutable';\r\nimport { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport appService from 'services/app.service';\r\n\r\nconst useTaskTypes = () => {\r\n const getTaskTypes = useCallback(\r\n () =>\r\n appService\r\n .getTaskTypes()\r\n .then((taskTypes) => List(taskTypes).map(mappers.TaskType.from)),\r\n [],\r\n );\r\n\r\n return useRequest(getTaskTypes);\r\n};\r\n\r\nexport default useTaskTypes;\r\n","import PropTypes from 'prop-types';\r\nimport { EditorState, Modifier } from 'draft-js';\r\nimport { Grid } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { useEffect, useState } from 'react';\r\nimport { Editor } from 'react-draft-wysiwyg';\r\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst defaultFormat = (value) =>\r\n value instanceof EditorState ? value : EditorState.createEmpty();\r\n\r\nconst useStyles = makeStyles({\r\n editorClassFocus: () => ({\r\n width: '100%',\r\n paddingLeft: '10px',\r\n border: '1px solid #90caf9',\r\n borderRadius: '4px',\r\n fontSize: '1rem',\r\n }),\r\n editorClass: {\r\n width: '100%',\r\n paddingLeft: '10px',\r\n border: '1px solid #595959',\r\n borderRadius: '4px',\r\n fontSize: '1rem',\r\n flex: '1 1 auto',\r\n '& .DraftEditor-root': {\r\n display: 'flex',\r\n },\r\n },\r\n});\r\n\r\nconst EditorFormik = ({\r\n form,\r\n field,\r\n format = defaultFormat,\r\n destroyOnUnmount = false,\r\n toolbarHeight,\r\n label,\r\n showbarByDefault = false,\r\n xs = 6,\r\n editorXS,\r\n generalMarginTop = 12,\r\n editorMarginTop = 10,\r\n marginBottom = 0,\r\n disabled = false,\r\n labelMarginLeft = '0',\r\n minHeight = 4.5,\r\n maxHeight = 4.5,\r\n isRisk = false,\r\n ...rest\r\n}) => {\r\n const theme = useTheme();\r\n const { value, onChange, name, onBlur } = field;\r\n const { getFieldMeta, setFieldValue } = form;\r\n const [isFocused, setIsFocused] = useState(false);\r\n const [show, setShow] = useState(showbarByDefault);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (destroyOnUnmount) {\r\n // clear value and unregister field\r\n setFieldValue(name, EditorState.createEmpty());\r\n }\r\n };\r\n }, [name, setFieldValue, destroyOnUnmount]);\r\n\r\n const { touched, error } = getFieldMeta(name);\r\n\r\n const formattedValue = format ? format(value) : EditorState.createEmpty();\r\n\r\n const handleEditorStateChange = (editorState) => {\r\n onChange({ target: { name, value: editorState } });\r\n };\r\n\r\n const handleBlur = () => {\r\n if (!showbarByDefault) {\r\n setShow(false);\r\n }\r\n setIsFocused(false);\r\n if (onBlur) {\r\n onBlur({ target: { name } });\r\n }\r\n };\r\n\r\n const handleFocus = () => {\r\n setIsFocused(true);\r\n setShow(true);\r\n };\r\n const classes = useStyles({ minHeight, maxHeight });\r\n const editorClassName = isFocused\r\n ? classes.editorClassFocus\r\n : classes.editorClass;\r\n\r\n const handlePastedText = (text, _html, editorState) => {\r\n const currentContent = editorState.getCurrentContent();\r\n const selection = editorState.getSelection();\r\n\r\n const newContent = Modifier.replaceText(currentContent, selection, text);\r\n\r\n onChange({\r\n target: {\r\n name,\r\n value: EditorState.push(editorState, newContent, 'insert-characters'),\r\n },\r\n });\r\n\r\n return 'handled';\r\n };\r\n\r\n return (\r\n \r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nEditorFormik.propTypes = {\r\n format: PropTypes.func,\r\n destroyOnUnmount: PropTypes.bool,\r\n};\r\n\r\nexport default EditorFormik;\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { useState } from 'react';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { useMemo, useCallback } from 'react';\r\nimport Cancel from '@material-ui/icons/Cancel';\r\nimport Check from '@material-ui/icons/Check';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { IconButton, Grid } from '@material-ui/core';\r\nimport { MenuItem, Select } from '@material-ui/core';\r\n\r\nimport { TableRow, TableCell } from 'altus-ui-components';\r\n\r\nimport { invokeIfFunction, isValidJSON } from 'utils/app.util';\r\nimport { EditorState, convertFromRaw, convertToRaw } from 'draft-js';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { RiskSectionFormFields } from 'features/projects/components/RiskSectionsTable';\r\nimport {\r\n RiskConsequenceEnum,\r\n RiskMatrix,\r\n RiskProbabilityEnum,\r\n RiskStateEnum,\r\n} from 'app/app.constants';\r\n\r\nconst CreateRiskSectionRow = ({\r\n classes,\r\n columns,\r\n toggleCreateMode,\r\n createRiskSection,\r\n defaultRiskSection,\r\n}) => {\r\n const consequences = Object.values(RiskConsequenceEnum);\r\n const probabilities = Object.values(RiskProbabilityEnum);\r\n const states = Object.values(RiskStateEnum);\r\n const descriptionEditorState = !defaultRiskSection?.get('description')\r\n ? EditorState.createEmpty()\r\n : isValidJSON(defaultRiskSection?.get('description'))\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(defaultRiskSection?.get('description'))),\r\n )\r\n : EditorState.createEmpty();\r\n\r\n const mitigationEditorState = !defaultRiskSection?.get('mitigation')\r\n ? EditorState.createEmpty()\r\n : isValidJSON(defaultRiskSection?.get('mitigation'))\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(defaultRiskSection?.get('mitigation'))),\r\n )\r\n : EditorState.createEmpty();\r\n\r\n const initialValues = useMemo(\r\n () => ({\r\n [RiskSectionFormFields.RISK]: descriptionEditorState,\r\n [RiskSectionFormFields.MITIGATION]: mitigationEditorState,\r\n [RiskSectionFormFields.DESCRIPTION]: descriptionEditorState,\r\n [RiskSectionFormFields.CONSEQUENCE]: RiskConsequenceEnum.Major.id,\r\n [RiskSectionFormFields.PROBABILITY]: RiskProbabilityEnum.VeryLikely.id,\r\n [RiskSectionFormFields.STATE]: RiskStateEnum.Open.id,\r\n }),\r\n [descriptionEditorState, mitigationEditorState],\r\n );\r\n const onSubmit = useCallback(\r\n (riskSection, formik) => {\r\n const payload = {\r\n [RiskSectionFormFields.MITIGATION]: JSON.stringify(\r\n convertToRaw(riskSection.mitigation.getCurrentContent()),\r\n ),\r\n [RiskSectionFormFields.DESCRIPTION]: JSON.stringify(\r\n convertToRaw(riskSection.description.getCurrentContent()),\r\n ),\r\n [RiskSectionFormFields.RISK]: JSON.stringify(\r\n convertToRaw(riskSection.description.getCurrentContent()),\r\n ),\r\n [RiskSectionFormFields.CONSEQUENCE]: riskSection.consequence,\r\n [RiskSectionFormFields.PROBABILITY]: riskSection.probability,\r\n [RiskSectionFormFields.STATE]: riskSection.state,\r\n };\r\n createRiskSection(payload, formik, toggleCreateMode);\r\n formik.resetForm({ values: initialValues });\r\n toggleCreateMode();\r\n },\r\n [createRiskSection, toggleCreateMode, initialValues],\r\n );\r\n\r\n const [toolbarHeight, setToolbarHeight] = useState(0);\r\n const [color, setColor] = useState('red');\r\n const [probabilityId, setProbability] = useState(1);\r\n const [consequenceId, setConsequence] = useState(1);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const toolbar = document.querySelector('.rdw-editor-toolbar');\r\n if (toolbar) {\r\n const height = toolbar.offsetHeight;\r\n setToolbarHeight(height);\r\n }\r\n };\r\n\r\n handleResize();\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, []);\r\n\r\n const renderCell = (index, render) => {\r\n const column = columns[index];\r\n const paddingColumns = [0, 1];\r\n const cellClasses = paddingColumns.includes(index)\r\n ? classes.noPadding\r\n : classes.cell;\r\n\r\n return (\r\n \r\n {invokeIfFunction(render, column)}\r\n \r\n );\r\n };\r\n\r\n const handleChange = (event, formik) => {\r\n const { name, value } = event.target;\r\n\r\n if (name === RiskSectionFormFields.CONSEQUENCE) {\r\n setConsequence(value);\r\n setColor(RiskMatrix[value][probabilityId]);\r\n }\r\n\r\n if (name === RiskSectionFormFields.PROBABILITY) {\r\n setProbability(value);\r\n setColor(RiskMatrix[consequenceId][value]);\r\n }\r\n\r\n formik.handleChange(event);\r\n };\r\n\r\n return (\r\n \r\n {({ isValid, isSubmitting, handleSubmit, dirty, ...formik }) => (\r\n
\r\n \r\n {renderCell(0, () => (\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n ))}\r\n {renderCell(1, () => (\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n ))}\r\n {renderCell(\r\n 2,\r\n () => (\r\n \r\n \r\n \r\n ),\r\n 'rating',\r\n 'rating',\r\n 'rating',\r\n )}\r\n {renderCell(\r\n 3,\r\n () => (\r\n \r\n handleChange(event, formik)}\r\n >\r\n {consequences.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n \r\n ),\r\n 'consequence',\r\n 'Consequence',\r\n 'consequence',\r\n )}\r\n\r\n {renderCell(\r\n 4,\r\n () => (\r\n \r\n handleChange(event, formik)}\r\n >\r\n {probabilities.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n \r\n ),\r\n 'probability',\r\n 'Probability',\r\n 'probability',\r\n )}\r\n\r\n {renderCell(\r\n 5,\r\n () => (\r\n \r\n \r\n {states.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n \r\n ),\r\n 'state',\r\n 'State',\r\n 'state',\r\n )}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n saveButton: {\r\n padding: '1px !important',\r\n width: '20px',\r\n height: '18px',\r\n margin: '0 0 5px 0px',\r\n background: theme.palette.success.dark,\r\n '&:hover': {\r\n background: theme.palette.success.main,\r\n },\r\n },\r\n cancelButton: {\r\n padding: '0 0',\r\n width: '20px',\r\n height: '18px',\r\n },\r\n tableRowRoot: {\r\n height: 'fit-content',\r\n minHeight: '7.2rem',\r\n maxHeight: 'fit-content',\r\n display: 'flex !important',\r\n alignItems: 'stretch',\r\n flex: '1 1 auto',\r\n '&:hover': {\r\n background: theme.altus.components.SortableListRow.background,\r\n },\r\n '& [class*=\"TableCell-root\"]': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexWrap: 'wrap',\r\n },\r\n },\r\n cell: {},\r\n noPadding: {\r\n padding: '0 2px !important',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CreateRiskSectionRow);\r\n","import { Formik } from 'formik';\r\nimport { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\n\r\nconst EditableRichTextTableRowFormik = ({\r\n item,\r\n timeout,\r\n onSubmit,\r\n TableRowComponent = TableRow,\r\n classes,\r\n customStyle,\r\n ...rest\r\n}) => {\r\n const initialValues = useMemo(() => item.toJS(), [item]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableRowRoot: {\r\n height: 'fit-content',\r\n minHeight: '7.2rem',\r\n maxHeight: 'fit-content',\r\n display: 'flex !important',\r\n alignItems: 'stretch',\r\n flex: '1 1 auto',\r\n '&:hover': {\r\n background: theme.altus.components.SortableListRow.background,\r\n },\r\n '& [class*=\"TableCell-root\"]': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexWrap: 'wrap',\r\n },\r\n },\r\n tableCellRoot: {},\r\n});\r\n\r\nexport default compose(withStyles(styles))(EditableRichTextTableRowFormik);\r\n","import { withStyles } from '@material-ui/core';\r\nimport { TableCell } from 'altus-ui-components';\r\n\r\nconst RiskTableCellDense = ({ classes, column, ...rest }) => {\r\n const columnPadding = ['risk', 'mitigation'].includes(column?.id)\r\n ? classes.noPadding\r\n : classes.cell;\r\n return ;\r\n};\r\n\r\nconst styles = () => ({\r\n cell: {},\r\n noPadding: {\r\n padding: '0 2px !important',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(RiskTableCellDense);\r\n","import { useMemo, useCallback, useState, useEffect } from 'react';\r\nimport { IconButton, Grid, Button, Box, Typography } from '@material-ui/core';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { Map } from 'immutable';\r\nimport { Field } from 'formik';\r\nimport { MenuItem, Select } from '@material-ui/core';\r\n\r\nimport { compose } from 'redux';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport {\r\n EMPTY_LIST,\r\n RiskConsequenceEnum,\r\n RiskMatrix,\r\n RiskProbabilityEnum,\r\n RiskStateEnum,\r\n} from 'app/app.constants';\r\nimport CreateRiskSectionRow from 'features/projects/components/CreateRiskSectionRow';\r\nimport { EditorState, convertFromRaw, convertToRaw } from 'draft-js';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport EditableRichTextTableRowFormik from 'app/components/form/formik/EditableRichTextTableRowFormik';\r\nimport { isEqual } from 'lodash';\r\nimport { isValidJSON, sortRisks } from 'utils/app.util';\r\nimport RiskTableCellDense from 'features/projects/components/RiskTableCellDense';\r\n\r\nexport const RiskSectionFormFields = {\r\n RISK: 'description',\r\n MITIGATION: 'mitigation',\r\n CONSEQUENCE: 'consequence',\r\n PROBABILITY: 'probability',\r\n STATE: 'state',\r\n RATING: 'rating',\r\n DESCRIPTION: 'description',\r\n};\r\n\r\nconst RiskSectionsTable = ({\r\n createRiskSection,\r\n updateRiskSection,\r\n deleteRiskSection,\r\n defaultRiskSection = Map({\r\n risk: EditorState.createEmpty(),\r\n mitigation: EditorState.createEmpty(),\r\n }),\r\n riskSections = EMPTY_LIST,\r\n title = 'Risk',\r\n}) => {\r\n const [convertedRiskSections, setConvertedRiskSections] =\r\n useState(riskSections);\r\n const [isCreateMode, toggleCreateMode] = useToggle();\r\n const [currentRiskSections, setCurrentRiskSections] = useState(null);\r\n const consequences = Object.values(RiskConsequenceEnum);\r\n const probabilities = Object.values(RiskProbabilityEnum);\r\n const states = Object.values(RiskStateEnum);\r\n\r\n useEffect(() => {\r\n if (riskSections) {\r\n const convertedSections = riskSections.map((section) => {\r\n const descriptionEditorState =\r\n section?.get('description') &&\r\n isValidJSON(section?.get('description'))\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(section?.get('description'))),\r\n )\r\n : EditorState.createEmpty();\r\n\r\n const mitigationEditorState =\r\n section?.get('mitigation') && isValidJSON(section?.get('mitigation'))\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(section?.get('mitigation'))),\r\n )\r\n : EditorState.createEmpty();\r\n\r\n return section\r\n .set('description', descriptionEditorState)\r\n .set('mitigation', mitigationEditorState);\r\n });\r\n\r\n setConvertedRiskSections(convertedSections);\r\n }\r\n }, [riskSections]);\r\n\r\n const [toolbarHeight, setToolbarHeight] = useState(0);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const toolbar = document.querySelector('.rdw-editor-toolbar');\r\n if (toolbar) {\r\n const height = toolbar.offsetHeight;\r\n setToolbarHeight(height);\r\n } else {\r\n setToolbarHeight(44);\r\n }\r\n };\r\n\r\n handleResize();\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n setCurrentRiskSections([riskSections]);\r\n }, [riskSections]);\r\n\r\n const onSubmit = useCallback(\r\n (values, { forceUpdate = false }) => {\r\n const foundRisk = convertedRiskSections.find(\r\n (risk) => risk?.get('riskId') === values.riskId,\r\n );\r\n const description = JSON.stringify(\r\n convertToRaw(values.description.getCurrentContent()),\r\n );\r\n const mitigation = JSON.stringify(\r\n convertToRaw(values.mitigation.getCurrentContent()),\r\n );\r\n if (foundRisk) {\r\n const oldDescription = JSON.stringify(\r\n convertToRaw(foundRisk.get('description').getCurrentContent()),\r\n );\r\n const newMitigation = JSON.stringify(\r\n convertToRaw(foundRisk.get('mitigation').getCurrentContent()),\r\n );\r\n\r\n if (\r\n !isEqual(oldDescription, description) ||\r\n !isEqual(mitigation, newMitigation) ||\r\n forceUpdate\r\n ) {\r\n const risk = {\r\n description: description,\r\n mitigation: mitigation,\r\n riskId: values.riskId,\r\n created: values.created,\r\n modified: values.modified,\r\n consequence: values.consequence,\r\n probability: values.probability,\r\n state: values.state,\r\n };\r\n\r\n updateRiskSection(risk);\r\n }\r\n }\r\n },\r\n [convertedRiskSections, updateRiskSection],\r\n );\r\n\r\n const handleChange = useCallback(\r\n (currentRow) => (event) => {\r\n const { name, value } = event.target;\r\n const consequenceId = currentRow?.get(RiskSectionFormFields.CONSEQUENCE);\r\n const probabilityId = currentRow?.get(RiskSectionFormFields.PROBABILITY);\r\n let color = RiskMatrix[consequenceId][probabilityId] ?? 'red';\r\n let updatedRiskSection;\r\n\r\n if (name === RiskSectionFormFields.CONSEQUENCE) {\r\n color = RiskMatrix[value][probabilityId] ?? 'red';\r\n }\r\n\r\n if (name === RiskSectionFormFields.PROBABILITY) {\r\n color = RiskMatrix[consequenceId][value] ?? 'red';\r\n }\r\n\r\n convertedRiskSections.map((section) => {\r\n if (section.get('riskId') === currentRow.get('riskId')) {\r\n updatedRiskSection = section\r\n .set(name, value)\r\n .set(RiskSectionFormFields.RATING, color);\r\n return updatedRiskSection;\r\n }\r\n return section;\r\n });\r\n\r\n if (updatedRiskSection) {\r\n onSubmit(updatedRiskSection.toJS(), { forceUpdate: true });\r\n }\r\n },\r\n [convertedRiskSections, onSubmit],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 8,\r\n id: 'risk',\r\n Header: 'Risk',\r\n accessor: 'risk',\r\n Cell: () => (\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n ),\r\n },\r\n {\r\n xs: 8,\r\n id: 'mitigation',\r\n Header: 'Mitigation',\r\n accessor: 'mitigation',\r\n Cell: () => (\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'rating',\r\n Header: () => (\r\n \r\n
Rating
\r\n
\r\n ),\r\n accessor: 'rating',\r\n Cell: ({ row }) => {\r\n const consequenceId = row.original.get('consequence');\r\n const probabilityId = row.original.get('probability');\r\n const color = RiskMatrix[consequenceId][probabilityId] ?? 'red';\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'consequence',\r\n Header: () => (\r\n \r\n
Consequence
\r\n
\r\n ),\r\n accessor: 'consequence',\r\n Cell: ({ row }) => (\r\n <>\r\n \r\n \r\n {consequences.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n id: 'probability',\r\n Header: () => (\r\n \r\n
Probability
\r\n
\r\n ),\r\n accessor: 'probability',\r\n Cell: ({ row }) => (\r\n <>\r\n \r\n \r\n {probabilities.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 3,\r\n id: 'state',\r\n Header: () => (\r\n \r\n
State
\r\n
\r\n ),\r\n accessor: 'state',\r\n Cell: ({ row }) => (\r\n <>\r\n \r\n \r\n {states.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'actions',\r\n Header: ' ',\r\n Cell: ({ row }) => (\r\n \r\n {deleteRiskSection && (\r\n {\r\n deleteRiskSection(row.original.get('riskId'));\r\n }}\r\n style={{ marginLeft: 'auto' }}\r\n >\r\n \r\n \r\n )}\r\n \r\n ),\r\n },\r\n ],\r\n [\r\n consequences,\r\n deleteRiskSection,\r\n handleChange,\r\n isCreateMode,\r\n probabilities,\r\n states,\r\n toolbarHeight,\r\n ],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => {\r\n return ;\r\n },\r\n [onSubmit],\r\n );\r\n\r\n const initialState = useMemo(() => {\r\n if (!riskSections) {\r\n return { expanded: {} };\r\n }\r\n\r\n const arraySections = Array.isArray(riskSections)\r\n ? riskSections\r\n : riskSections.toArray();\r\n\r\n return {\r\n expanded: arraySections.reduce(\r\n (result, _riskSection, index) => ({\r\n ...result,\r\n [index]: true,\r\n }),\r\n {},\r\n ),\r\n };\r\n }, [riskSections]);\r\n\r\n return (\r\n <>\r\n {createRiskSection && (\r\n <>\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n Add risk\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n\r\n {isCreateMode && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default compose(RiskSectionsTable);\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport function useHandleToolbarHeight() {\r\n const [toolbarHeight, setToolbarHeight] = useState(0);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const toolbar = document.querySelector('.rdw-editor-toolbar');\r\n if (toolbar) {\r\n const height = toolbar.offsetHeight;\r\n setToolbarHeight(height);\r\n }\r\n };\r\n handleResize();\r\n window.addEventListener('resize', handleResize);\r\n\r\n // Clean up function\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, []);\r\n return toolbarHeight;\r\n}\r\n","import { compose } from 'redux';\r\nimport { useState } from 'react';\r\nimport { useEffect } from 'react';\r\nimport { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Field, change } from 'redux-form/immutable';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Paper, InputAdornment } from '@material-ui/core';\r\nimport { EditorState, convertToRaw } from 'draft-js';\r\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\r\nimport { convertFromRaw } from 'draft-js';\r\nimport { isEqual } from 'lodash';\r\n\r\nimport { TASK_FORMS, TaskType } from 'features/projects/tasks/tasks.constants';\r\n\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport TextField from 'app/components/form/TextField';\r\nimport DepartmentSelectField from 'app/components/DepartmentSelectField';\r\nimport TaskDetails from 'features/projects/tasks/components/TaskDetails';\r\nimport TaskTypeSelect from 'features/projects/tasks/components/TaskTypeSelect';\r\nimport QuantityTextFieldReduxForm from 'app/components/form/redux-form/QuantityTextFieldReduxForm';\r\nimport TaskMultipleContingenciesSelect from 'features/projects/tasks/task/details/components/TaskMultipleContingenciesSelect';\r\nimport useTaskTypes from 'features/projects/tasks/hooks/useTaskTypes';\r\nimport RiskSectionsTable from 'features/projects/components/RiskSectionsTable';\r\n\r\nimport { Field as FieldFormik, Formik } from 'formik';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { getRichEditorText } from 'utils/app.util';\r\nimport './styles.css';\r\nimport { useHandleToolbarHeight } from 'features/projects/tasks/hooks/useHandleToolbarHeight';\r\n\r\nconst { EDIT_TASK } = TASK_FORMS;\r\n\r\nconst EditTaskForm = ({\r\n task,\r\n tasks,\r\n classes,\r\n copyTask,\r\n disabled,\r\n projectId,\r\n updateTask,\r\n deleteTask,\r\n departments,\r\n taskRiskboreSections,\r\n createTaskRiskSection,\r\n updateTaskRiskSection,\r\n deleteTaskRiskSection,\r\n defaultTaskRiskSection,\r\n currentTaskId,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const type = task.get('type');\r\n const taskId = task.get('taskId');\r\n const currentId = currentTaskId ?? taskId;\r\n\r\n const [rawObjectiveJson, setRawObjectiveJson] = useState();\r\n const [rawDescriptionJson, setRawDescriptionJson] = useState();\r\n const [rawCommentsJson, setRawCommentsJson] = useState();\r\n const [changeFlag, setChangeFlag] = useState(false);\r\n const [objectiveEditorState, setObjectiveEditorState] = useState(\r\n EditorState.createEmpty(),\r\n );\r\n const [descriptionEditorState, setDescriptionEditorState] = useState(\r\n EditorState.createEmpty(),\r\n );\r\n const [commentsEditorState, setCommentsEditorState] = useState(\r\n EditorState.createEmpty(),\r\n );\r\n\r\n const updateContent = useCallback(\r\n (content, setContent, setEditorState, setContentState) => {\r\n if (task.get(content) && !setContent) {\r\n const rawContentState = JSON.parse(task.get(content));\r\n const newEditorState = EditorState.createWithContent(\r\n convertFromRaw(rawContentState),\r\n );\r\n setEditorState(newEditorState);\r\n setContentState(task.get(content));\r\n }\r\n },\r\n [task],\r\n );\r\n\r\n const updateValues = (values, key, rawJson, setRawJson, changeValue) => {\r\n const rawValue = convertToRaw(values[key].getCurrentContent());\r\n const JSONValue = JSON.stringify(rawValue);\r\n const oldTextValue = getRichEditorText(task.get(key));\r\n const newTextValue = getRichEditorText(JSONValue);\r\n\r\n if (\r\n !isEqual(JSONValue, task.get(key)) &&\r\n !isEqual(oldTextValue, newTextValue) &&\r\n newTextValue &&\r\n taskId === Number(currentId)\r\n ) {\r\n setRawJson(JSONValue);\r\n changeValue(JSONValue);\r\n setChangeFlag(!changeFlag);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (rawDescriptionJson || rawObjectiveJson || rawCommentsJson)\r\n updateTask({\r\n objective: rawObjectiveJson,\r\n description: rawDescriptionJson,\r\n comments: rawCommentsJson,\r\n });\r\n // eslint-disable-next-line\r\n }, [changeFlag]);\r\n\r\n useEffect(() => {\r\n updateContent(\r\n 'objective',\r\n rawObjectiveJson,\r\n setObjectiveEditorState,\r\n setRawObjectiveJson,\r\n );\r\n }, [task, rawObjectiveJson, updateContent]);\r\n\r\n useEffect(() => {\r\n updateContent(\r\n 'description',\r\n rawDescriptionJson,\r\n setDescriptionEditorState,\r\n setRawDescriptionJson,\r\n );\r\n }, [task, rawDescriptionJson, updateContent]);\r\n\r\n useEffect(() => {\r\n updateContent(\r\n 'comments',\r\n rawCommentsJson,\r\n setCommentsEditorState,\r\n setRawCommentsJson,\r\n );\r\n }, [task, rawCommentsJson, updateContent]);\r\n\r\n const changeObjective = (newValue) => {\r\n dispatch(change(EDIT_TASK.TASK_OBJECTIVE, 'objective', newValue));\r\n };\r\n\r\n const changeDescription = (newValue) => {\r\n dispatch(change(EDIT_TASK.TASK_DESCRIPTION, 'description', newValue));\r\n };\r\n\r\n const changeComments = (newValue) => {\r\n dispatch(change(EDIT_TASK.TASK_COMMENTS, 'comments', newValue));\r\n };\r\n\r\n const initialFormValues = {\r\n [EDIT_TASK.TASK_OBJECTIVE]: objectiveEditorState,\r\n [EDIT_TASK.TASK_DESCRIPTION]: descriptionEditorState,\r\n [EDIT_TASK.TASK_COMMENTS]: commentsEditorState,\r\n };\r\n\r\n const getRawJson = (key, values) => {\r\n if (values) {\r\n const rawValue = convertToRaw(values[key].getCurrentContent());\r\n const JSONValue = JSON.stringify(rawValue);\r\n const oldTextValue = getRichEditorText(task.get(key));\r\n const newTextValue = getRichEditorText(JSONValue);\r\n\r\n if (\r\n !isEqual(oldTextValue, newTextValue) &&\r\n newTextValue &&\r\n taskId === Number(currentId)\r\n ) {\r\n return JSONValue;\r\n }\r\n }\r\n\r\n return task.get(key);\r\n };\r\n\r\n const onSubmitObjective = (values) => {\r\n updateValues(\r\n values,\r\n 'objective',\r\n rawObjectiveJson,\r\n setRawObjectiveJson,\r\n changeObjective,\r\n );\r\n };\r\n const onSubmitDescription = (values) => {\r\n updateValues(\r\n values,\r\n 'description',\r\n rawDescriptionJson,\r\n setRawDescriptionJson,\r\n changeDescription,\r\n );\r\n };\r\n const onSubmitComments = (values) => {\r\n updateValues(\r\n values,\r\n 'comments',\r\n rawCommentsJson,\r\n setRawCommentsJson,\r\n changeComments,\r\n );\r\n };\r\n\r\n const callUpdateTask = () => {\r\n const objectiveValue = getRawJson('objective');\r\n const descriptionValue = getRawJson('description');\r\n const commentsValue = getRawJson('comments');\r\n updateTask({\r\n objective: objectiveValue,\r\n description: descriptionValue,\r\n comments: commentsValue,\r\n });\r\n };\r\n\r\n const toolbarHeight = useHandleToolbarHeight();\r\n\r\n const [taskTypes, taskTypesDataState] = useTaskTypes();\r\n\r\n var filteredTasks = tasks.filter((t) => t.sequence > task.get('sequence'));\r\n\r\n // if all tasks are completed, copy action should not be allowed\r\n var disableCopyTask =\r\n tasks.filter((t) => t.status === WORK_ITEM_STATUS.COMPLETED).length ===\r\n tasks.length;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {type === TaskType.SUB_SURFACE && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Hours\r\n ),\r\n }}\r\n />\r\n \r\n \r\n Min.\r\n ),\r\n }}\r\n />\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n content: {\r\n height: 'auto',\r\n },\r\n progressBarLess: {\r\n backgroundColor: theme.altus.status.report,\r\n },\r\n progressBarDisabled: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n progressBarMore: {\r\n backgroundColor: theme.palette.error.main,\r\n },\r\n paper: {\r\n padding: theme.spacing(2.5),\r\n background: theme.altus.background.panel,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(EditTaskForm);\r\n","export const TASK_ACTIONS = {\r\n TASK_PAGE_LOADED: 'TASK_PAGE_LOADED',\r\n};\r\n\r\nexport const TASK_MODALS = {\r\n ADD_CABLE_MODAL: 'ADD_CABLE_MODAL',\r\n SURFACE_EQUIPMENT_MODAL: 'SURFACE_EQUIPMENT_MODAL',\r\n SET_RETRIEVE_ITEM_MODAL: 'SET_RETRIEVE_ITEM_MODAL',\r\n};\r\n\r\nexport const DATA_AQUISITION_ACTIVE_TAB = {\r\n WELL: 'WELL',\r\n CABLE: 'CABLE',\r\n TOOLS: 'TOOLS',\r\n CONSUMABLES: 'CONSUMABLES',\r\n};\r\n","import { compose } from 'redux';\r\nimport debounce from 'lodash/debounce';\r\nimport { Grid } from '@material-ui/core';\r\nimport { reduxForm } from 'redux-form/immutable';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { useMemo, useEffect, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n taskDetailsOnLoad,\r\n updateTaskDetails,\r\n updateTaskServices,\r\n copyAndRedirectToTask,\r\n initializeEditTaskForm,\r\n deleteTaskAndRedirectToTasks,\r\n requestCreateRiskSection,\r\n requestUpdateRiskSection,\r\n requestDeleteRiskSection,\r\n requestTaskRiskSections,\r\n} from 'features/projects/tasks/task/details/taskDetails.actions';\r\n\r\nimport {\r\n TASK_FORMS,\r\n TASK_ACTIONS as TASKS_ACTIONS,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport {\r\n createTaskRiskSectionsForWellboreSelector,\r\n getAllTasksFromState,\r\n} from 'features/projects/tasks/tasks.selectors';\r\n\r\nimport {\r\n getAvailableServicesFromState,\r\n getSummarizedDataStateFromState,\r\n getAvailableDepartmentsFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { EMPTY_LIST, ProjectPermission } from 'app/app.constants';\r\nimport EditTaskForm from 'features/projects/tasks/components/EditTaskForm';\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/task/task.constants';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport { getTaskFromState } from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nconst TaskDetailsContainer = ({\r\n task,\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n dispatchCopyTask,\r\n tasks = EMPTY_LIST,\r\n dispatchDeleteTask,\r\n dispatchUpdateTask,\r\n dispatchUpdateTaskServices,\r\n dispatchInitializeEditTaskForm,\r\n dispatchRequestCreateTaskRiskSection,\r\n dispatchRequestUpdateTaskRiskSection,\r\n dispatchRequestDeleteTaskRiskSection,\r\n dispatchRequestTaskRiskSectionsForTaskRisk,\r\n}) => {\r\n const { hasPermission } = useProjectPermissions(ProjectPermission.EDIT_TASKS);\r\n\r\n const services = useSelector(getAvailableServicesFromState);\r\n const departments = useSelector(getAvailableDepartmentsFromState);\r\n\r\n const updateTaskDebounced = useMemo(\r\n () =>\r\n debounce(\r\n (objective) => dispatchUpdateTask(projectId, taskId, objective),\r\n 1000,\r\n ),\r\n [dispatchUpdateTask, projectId, taskId],\r\n );\r\n\r\n const updateTaskServices = useCallback(\r\n (services) => dispatchUpdateTaskServices(projectId, taskId, services),\r\n [taskId, projectId, dispatchUpdateTaskServices],\r\n );\r\n\r\n useEffect(() => {\r\n dispatchInitializeEditTaskForm(task, tasks);\r\n }, [task, tasks, dispatchInitializeEditTaskForm]);\r\n\r\n useEffect(() => {\r\n dispatchRequestTaskRiskSectionsForTaskRisk(taskId);\r\n }, [dispatchRequestTaskRiskSectionsForTaskRisk, taskId]);\r\n\r\n const createTaskRiskSection = useCallback(\r\n (risk, formik, callback) =>\r\n dispatchRequestCreateTaskRiskSection(taskId, risk, formik, callback),\r\n [dispatchRequestCreateTaskRiskSection, taskId],\r\n );\r\n\r\n const updateTaskRiskSection = useCallback(\r\n (risk) => {\r\n dispatchRequestUpdateTaskRiskSection(taskId, risk);\r\n },\r\n [dispatchRequestUpdateTaskRiskSection, taskId],\r\n );\r\n\r\n const deleteTaskRiskSection = useCallback(\r\n (riskId) => dispatchRequestDeleteTaskRiskSection(riskId, taskId),\r\n [dispatchRequestDeleteTaskRiskSection, taskId],\r\n );\r\n\r\n const taskRiskSectionsSelector = useMemo(\r\n () => createTaskRiskSectionsForWellboreSelector(),\r\n [],\r\n );\r\n\r\n const taskRiskboreSections = useSelector(taskRiskSectionsSelector);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n task: getTaskFromState(state),\r\n tasks: getAllTasksFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TASKS_ACTIONS.COPY_TASK,\r\n TASK_ACTIONS.TASK_PAGE_LOADED,\r\n TASKS_ACTIONS.CONFIRM_DELETE_TASK,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: taskDetailsOnLoad,\r\n dispatchUpdateTask: updateTaskDetails,\r\n dispatchCopyTask: copyAndRedirectToTask,\r\n dispatchUpdateTaskServices: updateTaskServices,\r\n dispatchDeleteTask: deleteTaskAndRedirectToTasks,\r\n dispatchInitializeEditTaskForm: initializeEditTaskForm,\r\n\r\n dispatchRequestCreateTaskRiskSection: requestCreateRiskSection,\r\n dispatchRequestUpdateTaskRiskSection: requestUpdateRiskSection,\r\n dispatchRequestDeleteTaskRiskSection: requestDeleteRiskSection,\r\n dispatchRequestTaskRiskSectionsForTaskRisk: requestTaskRiskSections,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n reduxForm({\r\n form: TASK_FORMS.EDIT_TASK.FORM_ID,\r\n }),\r\n withStyles(styles),\r\n)(TaskDetailsContainer);\r\n","import { getTaskActivities } from 'features/projects/activities/activities.actions';\r\nimport { getTaskById } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { TASK_ACTIVITIES_ACTIONS } from 'features/projects/tasks/task/activities/taskActivities.constants';\r\nimport toolstringService from 'services/toolstring.service';\r\nimport { addNotification } from 'altus-redux-middlewares';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\n\r\nexport const onLoad = (projectId, taskId) => (dispatch) => {\r\n dispatch({\r\n type: TASK_ACTIVITIES_ACTIONS.TASK_ACTIVITIES_PAGE_LOADED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getTaskActivities(projectId, taskId)),\r\n dispatch(getTaskById(projectId, taskId)),\r\n ]),\r\n });\r\n};\r\n\r\nexport const loadAndFilterPlannedToolstring =\r\n (projectId, taskId) => (dispatch) => {\r\n dispatch({\r\n type: TASK_ACTIVITIES_ACTIONS.TASK_ACTIVITIES_PLANNED_TOOLSTRING_LOADED,\r\n payload: () =>\r\n toolstringService\r\n .getPlannedToolstring(projectId, taskId)\r\n .then((toolstring) => dispatch(receivePlannedToolstring(toolstring)))\r\n .catch((error) => {\r\n if (error?.response?.body?.hasErrors) {\r\n var message = error.response.body.errors[0];\r\n\r\n dispatch(receiveNoPlannedToolstring());\r\n dispatch(\r\n addNotification({\r\n message,\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }\r\n }),\r\n });\r\n };\r\n\r\nconst receivePlannedToolstring = (toolstring) => (dispatch) => {\r\n dispatch({\r\n type: TASK_ACTIVITIES_ACTIONS.TASK_ACTIVITIES_RECEIVE_PLANNED_TOOLSTRING,\r\n payload: toolstring,\r\n });\r\n};\r\n\r\nconst receiveNoPlannedToolstring = () => (dispatch) => {\r\n dispatch({\r\n type: TASK_ACTIVITIES_ACTIONS.TASK_ACTIVITIES_RECEIVE_NO_TOOLSTRING,\r\n });\r\n};\r\n","import { useMemo } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport {\r\n createTaskActivitiesSelector,\r\n createTaskAllActivitiesSelector,\r\n} from 'features/projects/activities/activities.selectors';\r\n\r\nexport const useTaskActivities = (taskId) => {\r\n const activitiesSelector = useMemo(\r\n () => createTaskActivitiesSelector(taskId),\r\n [taskId],\r\n );\r\n\r\n const allActivitiesSelector = useMemo(\r\n () => createTaskAllActivitiesSelector(taskId),\r\n [taskId],\r\n );\r\n\r\n const activities = useSelector(activitiesSelector);\r\n const allActivities = useSelector(allActivitiesSelector);\r\n\r\n return activities || allActivities;\r\n};\r\n","import React from 'react';\r\nimport { stateToHTML } from 'draft-js-export-html';\r\n\r\nconst EditorStateViewer = ({ editorState }) => {\r\n const contentState = editorState.getCurrentContent();\r\n const html = stateToHTML(contentState);\r\n return
;\r\n};\r\n\r\nexport default EditorStateViewer;\r\n","import { Fragment } from 'react';\r\nimport ChatBubble from '@material-ui/icons/ChatBubble';\r\n\r\nimport {\r\n Box,\r\n Dialog,\r\n Button,\r\n IconButton,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { ModalHeader, ModalActions } from 'altus-ui-components';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport { getRichEditorText } from 'utils/app.util';\r\n\r\nconst ActivityCommentModal = ({ activity }) => {\r\n const [isOpen, toggleModal] = useToggle();\r\n\r\n const comments = activity.get('comments');\r\n\r\n if (!comments || !getRichEditorText(comments)) return null;\r\n\r\n return (\r\n \r\n {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n toggleModal();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ActivityCommentModal;\r\n","import { Map } from 'immutable';\r\nimport { formatValue } from 'utils/format.util';\r\nimport { TOOL_STATUS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nexport const formatToolstringTotalLength = (totalLength) => {\r\n if (!totalLength) return 'N/A';\r\n\r\n if (Map.isMap(totalLength))\r\n return formatValue(\r\n totalLength.get('value'),\r\n totalLength.get('unit'),\r\n 0.001,\r\n );\r\n\r\n return formatValue(totalLength.value, totalLength.unit, 0.001);\r\n};\r\n\r\nexport const formatToolstringTotalWeight = (totalWeight) => {\r\n if (!totalWeight) return 'N/A';\r\n\r\n if (Map.isMap(totalWeight))\r\n return formatValue(totalWeight.get('value'), totalWeight.get('unit'), 0.01);\r\n\r\n return formatValue(totalWeight.value, totalWeight.unit, 0.01);\r\n};\r\n\r\nexport const formatToolstringToolStatusString = (toolStatus) => {\r\n if (toolStatus === TOOL_STATUS.NOT_ASSIGNED) return 'N/A';\r\n if (toolStatus === TOOL_STATUS.SET) return 'Set Tool';\r\n if (toolStatus === TOOL_STATUS.RETRIEVE) return 'Retrieve Tool';\r\n};\r\n","import { compose } from 'redux';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { sortableElement } from 'react-sortable-hoc';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Chip, Typography } from '@material-ui/core';\r\n\r\nimport {\r\n TableRow,\r\n DragHandle,\r\n SortableTable,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST, ProjectPermission } from 'app/app.constants';\r\n\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport { WORK_ITEM_STATUS as WorkItemStatusType } from 'app/app.constants';\r\nimport { TOOL_STATUS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport ActivityCommentModal from 'features/projects/tasks/task/activities/ActivityCommentModal';\r\nimport { formatToolstringToolStatusString } from 'features/projects/tasks/task/toolstring/toolstring.util';\r\n\r\nconst SortableTableRow = sortableElement(TableRow);\r\n\r\nconst TaskActivitiesTable = ({\r\n onSortEnd,\r\n onRowClick,\r\n displayComments,\r\n activities = EMPTY_LIST,\r\n classes,\r\n ...rest\r\n}) => {\r\n const initialState = useMemo(\r\n () => ({\r\n hiddenColumns: displayComments ? [] : ['comments'],\r\n }),\r\n [displayComments],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const status = row.original.get('status');\r\n\r\n if (onSortEnd && status === WorkItemStatusType.PLANNED) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Activity',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n const itemStatus = activity.get('setOrRetrieveToolstringItemStatus');\r\n return (\r\n \r\n \r\n {activity.get('name')}\r\n \r\n {itemStatus !== TOOL_STATUS.NOT_ASSIGNED &&\r\n itemStatus !== TOOL_STATUS.NULL_ASSIGNED ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 6,\r\n Header: 'Description',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n if (!activity.get('description')) return null;\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Parallel Activity / Information',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n if (!activity.get('parallelActivity')) return null;\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Estimated Duration',\r\n accessor: (activity) => activity.get('estimatedTime'),\r\n },\r\n {\r\n id: 'comments',\r\n Header: ,\r\n Cell: ({ row }) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [onSortEnd, classes.name],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => {\r\n const isPlanned = item.get('status') === WorkItemStatusType.PLANNED;\r\n\r\n const TableRowComponent = isPlanned ? SortableTableRow : TableRow;\r\n\r\n return (\r\n \r\n );\r\n },\r\n [onRowClick, classes.tableRowRoot],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n tableRowRoot: {\r\n height: 'fit-content',\r\n maxHeight: 'fit-content',\r\n },\r\n name: {\r\n flexDirection: 'column',\r\n padding: '5px',\r\n },\r\n});\r\n\r\n// export default TaskActivitiesTable;\r\nexport default compose(withStyles(styles))(TaskActivitiesTable);\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nconst formatTime = (inputValue) => {\r\n let newValue = inputValue.replace(/[^0-9]/g, '');\r\n if (newValue.length >= 2) {\r\n newValue = `${newValue.substring(0, 2)}:${newValue.substring(2)}`;\r\n }\r\n return newValue.substring(0, 5);\r\n};\r\n\r\nconst TimeSpanReduxForm = ({ input, ...props }) => {\r\n const { value, onChange } = input;\r\n const inputRef = useRef(null);\r\n const [formattedValue, setFormattedValue] = useState(formatTime(value || ''));\r\n\r\n useEffect(() => {\r\n setFormattedValue(formatTime(value || ''));\r\n }, [value]);\r\n\r\n const handleInputChange = (event) => {\r\n const cursorPosition = inputRef.current.selectionStart;\r\n const newValue = formatTime(event.target.value);\r\n\r\n setFormattedValue(newValue);\r\n onChange(newValue);\r\n\r\n setTimeout(() => {\r\n if (cursorPosition <= 2) {\r\n inputRef.current.setSelectionRange(cursorPosition, cursorPosition);\r\n }\r\n }, 0);\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default TimeSpanReduxForm;\r\n","import { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { EditorState, Modifier } from 'draft-js';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Editor } from 'react-draft-wysiwyg';\r\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\r\n\r\nconst defaultFormat = (value) =>\r\n value instanceof EditorState ? value : EditorState.createEmpty();\r\n\r\nconst EditorReduxForm = ({\r\n input,\r\n meta,\r\n format = defaultFormat,\r\n toolbarHeight,\r\n label,\r\n showbarByDefault = false,\r\n xs = 6,\r\n editorXS = 0,\r\n generalMarginTop = 12,\r\n editorMarginTop = 10,\r\n marginBottom = 0,\r\n disabled = false,\r\n ...rest\r\n}) => {\r\n const { value, onChange, name, onBlur } = input;\r\n\r\n const [isFocused, setIsFocused] = useState(false);\r\n const [show, setShow] = useState(showbarByDefault);\r\n\r\n const formattedValue = format ? format(value) : EditorState.createEmpty();\r\n\r\n const handleEditorStateChange = (editorState) => {\r\n onChange(editorState);\r\n };\r\n\r\n const handleBlur = (event) => {\r\n if (!showbarByDefault) {\r\n setShow(false);\r\n }\r\n setIsFocused(false);\r\n onBlur(event);\r\n };\r\n\r\n const handleFocus = () => {\r\n setIsFocused(true);\r\n setShow(true);\r\n };\r\n\r\n const handlePastedText = (text, _html, editorState) => {\r\n const currentContent = editorState.getCurrentContent();\r\n const selection = editorState.getSelection();\r\n\r\n const newContent = Modifier.replaceText(currentContent, selection, text);\r\n\r\n onChange(EditorState.push(editorState, newContent, 'insert-characters'));\r\n return 'handled';\r\n };\r\n\r\n return (\r\n \r\n \r\n {label ? : <>}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nEditorReduxForm.propTypes = {\r\n format: PropTypes.func,\r\n destroyOnUnmount: PropTypes.bool,\r\n};\r\n\r\nexport default EditorReduxForm;\r\n","import { compose } from 'redux';\r\nimport { change } from 'redux-form/immutable';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { reduxForm, Field, formValueSelector } from 'redux-form/immutable';\r\n\r\nimport {\r\n Grid,\r\n Dialog,\r\n Button,\r\n TextField,\r\n DialogContent,\r\n InputAdornment,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n ModalHeader,\r\n ModalActions,\r\n LoadingButton,\r\n AutocompleteField,\r\n} from 'altus-ui-components';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n CREATE_ACTIVITY_MODE,\r\n CREATE_ACTIVITY_FORM,\r\n CREATE_ACTIVITY_MODAL_ID,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport { getActivityTypes } from 'features/projects/projects.actions';\r\nimport { getActivityTypes as getActivityTypesFromState } from 'features/projects/activities/activities.selectors';\r\nimport TimeSpanField from 'app/components/form/TimeSpanField';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\nimport { EditorState, convertFromRaw } from 'draft-js';\r\nimport QuantityTextFieldReduxForm from 'app/components/form/redux-form/QuantityTextFieldReduxForm';\r\n\r\nconst getActivityTypeOptionLabel = (activityType) => activityType.get('name');\r\n\r\nconst CreateActivityModalContainer = ({\r\n mode,\r\n valid,\r\n dispatch,\r\n submitting,\r\n handleSubmit,\r\n dispatchOnLoad,\r\n selectedActivityType,\r\n createActivity,\r\n showWaitingActivities = true,\r\n}) => {\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n }, [dispatchOnLoad]);\r\n\r\n const renderActivityTypeInput = useCallback((props) => {\r\n props.InputProps.startAdornment = (\r\n \r\n \r\n \r\n );\r\n\r\n return ;\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!selectedActivityType) return;\r\n\r\n let description;\r\n\r\n if (selectedActivityType.get('description')) {\r\n const rawContentState = JSON.parse(selectedActivityType.get('description'));\r\n const newEditorState = EditorState.createWithContent(\r\n convertFromRaw(rawContentState),\r\n );\r\n description = newEditorState;\r\n }\r\n\r\n dispatch(\r\n change(\r\n CREATE_ACTIVITY_FORM.ID,\r\n CREATE_ACTIVITY_FORM.DESCRIPTION,\r\n description,\r\n ),\r\n );\r\n }, [dispatch, selectedActivityType]);\r\n\r\n const currentActivityTypes = useSelector(getActivityTypesFromState);\r\n\r\n const activityTypes = showWaitingActivities\r\n ? currentActivityTypes\r\n : currentActivityTypes.filter(\r\n (activityType) => !activityType?.get('isWait'),\r\n );\r\n\r\n const [isOpen, toggleModal] = useModal(CREATE_ACTIVITY_MODAL_ID);\r\n\r\n const isQuickMode = mode === CREATE_ACTIVITY_MODE.QUICK; // user should not enter Title, Description or Target depth\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!isQuickMode && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Create\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => {\r\n const selector = formValueSelector(CREATE_ACTIVITY_FORM.ID);\r\n\r\n return {\r\n mode: selector(state, CREATE_ACTIVITY_FORM.MODE),\r\n selectedActivityType: selector(state, CREATE_ACTIVITY_FORM.TYPE),\r\n };\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, {\r\n dispatchOnLoad: getActivityTypes,\r\n }),\r\n reduxForm({\r\n form: CREATE_ACTIVITY_FORM.ID,\r\n }),\r\n)(CreateActivityModalContainer);\r\n","import classNames from 'classnames';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Fab, Slide, Typography } from '@material-ui/core';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\n\r\nimport { SLIDE_DIRECTIONS } from 'app/app.constants';\r\n\r\nconst styles = (theme) => ({\r\n relative: {\r\n position: 'relative',\r\n outline: 'none',\r\n },\r\n previousNext: {\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n },\r\n next: {\r\n right: -70,\r\n },\r\n previous: {\r\n left: -70,\r\n },\r\n index: {\r\n color: theme.palette.common.white,\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n textAlign: 'center',\r\n },\r\n buttonLabel: {\r\n position: 'absolute',\r\n bottom: -25,\r\n },\r\n});\r\n\r\nconst resolveSlideDirection = (direction, open, fullScreen) => {\r\n if (fullScreen) return 'up';\r\n\r\n switch (direction) {\r\n case SLIDE_DIRECTIONS.NEXT:\r\n return open ? 'left' : 'right';\r\n case SLIDE_DIRECTIONS.PREVIOUS:\r\n return open ? 'right' : 'left';\r\n\r\n default:\r\n return 'left';\r\n }\r\n};\r\n\r\nconst Transition = ({\r\n item,\r\n index,\r\n onNext,\r\n modalId,\r\n classes,\r\n noOfItems,\r\n nextLabel,\r\n direction,\r\n fullScreen,\r\n onPrevious,\r\n activeIndex,\r\n NextBtnProps,\r\n previousLabel,\r\n dispatchOnNext,\r\n PreviousBtnProps,\r\n dispatchOnPrevious,\r\n onRightLeftKeyDown,\r\n nextPreviousDirection,\r\n ...rest\r\n}) => {\r\n const Slider = (\r\n \r\n );\r\n\r\n if (!fullScreen) {\r\n const displayNextBtn = activeIndex >= 0 && activeIndex < noOfItems - 1;\r\n const displayPrevBtn = activeIndex > 0;\r\n\r\n const focusOnNext =\r\n !displayPrevBtn ||\r\n !nextPreviousDirection ||\r\n nextPreviousDirection === SLIDE_DIRECTIONS.NEXT;\r\n const focusOnPrev =\r\n !displayNextBtn || nextPreviousDirection === SLIDE_DIRECTIONS.PREVIOUS;\r\n\r\n return (\r\n
\r\n {displayPrevBtn && (\r\n \r\n dispatchOnPrevious({ onPrevious, modalId, item, index })\r\n }\r\n onKeyDown={onRightLeftKeyDown({ item, index })}\r\n className={classNames(classes.previous, classes.previousNext)}\r\n {...PreviousBtnProps}\r\n >\r\n \r\n Previous\r\n \r\n )}\r\n {displayNextBtn && (\r\n dispatchOnNext({ onNext, modalId, item, index })}\r\n onKeyDown={onRightLeftKeyDown({ item, index })}\r\n className={classNames(classes.next, classes.previousNext)}\r\n {...NextBtnProps}\r\n >\r\n \r\n Next\r\n \r\n )}\r\n {activeIndex >= 0 && noOfItems > 1 && (\r\n \r\n {`${activeIndex + 1} / ${noOfItems}`}\r\n \r\n )}\r\n\r\n {Slider}\r\n
\r\n );\r\n }\r\n\r\n return Slider;\r\n};\r\n\r\nexport default withStyles(styles)(Transition);\r\n","import CloseIcon from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, AppBar, Toolbar, Typography } from '@material-ui/core';\r\n\r\nimport { IconButton } from 'app/components/withTooltip';\r\n\r\nconst styles = () => ({\r\n title: {\r\n flex: 1,\r\n },\r\n relative: {\r\n position: 'relative',\r\n outline: 'none',\r\n },\r\n});\r\n\r\nconst ModalAppBar = ({\r\n title,\r\n classes,\r\n closeModal,\r\n onCancelClick,\r\n hideCloseButton,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n {!hideCloseButton && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(ModalAppBar);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\r\n\r\nimport { Button as NavigationButton } from 'app/components/withNavigation';\r\n\r\nconst styles = {\r\n backButtonIcon: {\r\n marginRight: 5,\r\n },\r\n};\r\n\r\nconst BackButton = ({ to, classes, children, ...rest }) => (\r\n \r\n \r\n {children}\r\n \r\n);\r\n\r\nBackButton.defaultProps = {\r\n children: 'Back',\r\n};\r\n\r\nexport default withStyles(styles)(BackButton);\r\n","import CloseIcon from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, AppBar, Typography } from '@material-ui/core';\r\n\r\nimport BackButton from 'app/components/BackButton';\r\nimport { IconButton } from 'app/components/withTooltip';\r\n\r\nconst styles = () => ({\r\n appBar: {\r\n position: 'relative',\r\n padding: 10,\r\n boxShadow: 'none',\r\n },\r\n title: {\r\n flex: 1,\r\n },\r\n rightToolbarItem: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nconst ModalAppBarFullscreen = ({\r\n title,\r\n classes,\r\n project,\r\n closeModal,\r\n onCancelClick,\r\n displayBackBtn,\r\n hideCloseButton,\r\n fullScreenSubTitle,\r\n fullScreenHideSubTitle,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {displayBackBtn && (\r\n \r\n )}\r\n \r\n \r\n \r\n {!fullScreenHideSubTitle && (\r\n \r\n \r\n {fullScreenSubTitle || (project && project.title)}\r\n \r\n \r\n )}\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n {!hideCloseButton && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(ModalAppBarFullscreen);\r\n","import isNil from 'lodash/isNil';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { MuiThemeProvider } from '@material-ui/core/styles';\r\nimport { cloneElement, Fragment, PureComponent } from 'react';\r\n\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n isModalOpen,\r\n getRouterParamsFromState,\r\n getModalDirectionFromState,\r\n getActiveModalIndexByModalId,\r\n} from 'app/app.selectors';\r\n\r\nimport themes from 'layout/themes';\r\nimport { toggleModal } from 'app/app.actions';\r\nimport Transition from 'app/components/Modal/Transition';\r\nimport ModalAppBar from 'app/components/Modal/ModalAppBar';\r\nimport { KEYS, APP_ACTIONS, THEMES } from 'app/app.constants';\r\nimport { invokeIfFunction, renderContent } from 'utils/app.util';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport ModalAppBarFullscreen from 'app/components/Modal/ModalAppBarFullscreen';\r\n\r\nclass ModalContainer extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleModal = this.toggleModal.bind(this);\r\n this.closeModal = this.closeModal.bind(this);\r\n this.onRightLeftKeyDown = this.onRightLeftKeyDown.bind(this);\r\n }\r\n\r\n toggleModal() {\r\n const { modalId, toggleModal } = this.props;\r\n toggleModal({ modalId });\r\n }\r\n\r\n closeModal() {\r\n const { modalId, closeModal } = this.props;\r\n closeModal(modalId);\r\n }\r\n\r\n onRightLeftKeyDown({ item, index }) {\r\n const { items, onNext, onPrevious } = this.props;\r\n\r\n return (event) => {\r\n switch (event.key) {\r\n case KEYS.ARROW_LEFT: {\r\n if (index > 0) {\r\n onPrevious({ item, index });\r\n }\r\n break;\r\n }\r\n case KEYS.ARROW_RIGHT: {\r\n if (index !== items.length - 1) {\r\n onNext({ item, index });\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n };\r\n }\r\n\r\n isModalOpen = (index) => {\r\n const { routeParams, modalId, activeIndex, open, isModalOpen } = this.props;\r\n\r\n const matchesActiveIndexRouteParam =\r\n this.allItems.length > 1 ? routeParams.index === index.toString() : true;\r\n\r\n const matchesModalIdRouteParams = !isNil(routeParams[modalId]);\r\n\r\n return (\r\n (this.allItems.length > 1\r\n ? isModalOpen && index === activeIndex\r\n : isModalOpen) ||\r\n !!open ||\r\n (matchesModalIdRouteParams && matchesActiveIndexRouteParam)\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n DialogProps,\r\n open,\r\n items,\r\n title,\r\n height,\r\n onNext,\r\n project,\r\n classes,\r\n modalId,\r\n Actions,\r\n onEnter,\r\n maxWidth,\r\n minWidth,\r\n children,\r\n nextLabel,\r\n direction,\r\n onPrevious,\r\n closeModal,\r\n fullScreen,\r\n isModalOpen,\r\n activeIndex,\r\n onSaveClick,\r\n NextBtnProps,\r\n toggleModal,\r\n CustomAppBar,\r\n BackdropProps,\r\n previousLabel,\r\n dialogClasses,\r\n onCancelClick,\r\n displayBackBtn,\r\n hideCloseButton,\r\n saveButtonTitle,\r\n PreviousBtnProps,\r\n dispatchOnNext,\r\n TriggerComponent,\r\n dispatchOnPrevious,\r\n fullScreenSubTitle,\r\n onClickDialogActions,\r\n nextPreviousDirection,\r\n fullScreenHideSubTitle,\r\n fullscreenHideCancelBtn,\r\n routeParams,\r\n ActionsProps,\r\n CustomAppBarProps,\r\n childrenProps,\r\n FullscreenCancelBtnProps,\r\n TransitionProps,\r\n onExit,\r\n ...rest\r\n } = this.props;\r\n\r\n this.allItems = Array.isArray(items) ? items : [items];\r\n\r\n return this.allItems.map((item, index) => {\r\n const modalOpen = this.isModalOpen(index);\r\n\r\n return (\r\n \r\n {TriggerComponent &&\r\n cloneElement(TriggerComponent, {\r\n onClick: this.toggleModal,\r\n })}\r\n\r\n invokeIfFunction(onEnter, item),\r\n onRightLeftKeyDown: this.onRightLeftKeyDown,\r\n noOfItems: this.allItems.length,\r\n nextPreviousDirection,\r\n dispatchOnPrevious,\r\n PreviousBtnProps,\r\n dispatchOnNext,\r\n previousLabel,\r\n NextBtnProps,\r\n activeIndex,\r\n fullScreen,\r\n onPrevious,\r\n nextLabel,\r\n direction,\r\n modalId,\r\n onNext,\r\n index,\r\n item,\r\n onExit,\r\n ...TransitionProps,\r\n }}\r\n BackdropProps={{\r\n classes: {\r\n root: classes.backdrop,\r\n },\r\n ...BackdropProps,\r\n }}\r\n {...DialogProps}\r\n {...rest}\r\n >\r\n \r\n {CustomAppBar && (\r\n \r\n )}\r\n {!CustomAppBar && (\r\n <>\r\n {fullScreen && (\r\n \r\n )}\r\n {!fullScreen && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n {renderContent(children, { item, index, ...childrenProps })}\r\n \r\n\r\n {Actions && (\r\n <>\r\n {fullScreen && (\r\n \r\n \r\n {!fullscreenHideCancelBtn && (\r\n \r\n Cancel\r\n \r\n )}\r\n \r\n )}\r\n {!fullScreen && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n );\r\n });\r\n }\r\n}\r\n\r\nModalContainer.defaultProps = {\r\n items: [{}],\r\n};\r\n\r\nconst mapStateToProps = (initialState, initialProps) => (state) => {\r\n const { modalId } = initialProps;\r\n\r\n return {\r\n project: getCurrentProject(state),\r\n isModalOpen: isModalOpen(state, modalId),\r\n routeParams: getRouterParamsFromState(state),\r\n nextPreviousDirection: getModalDirectionFromState(state),\r\n activeIndex: getActiveModalIndexByModalId(state, modalId),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggleModal: (params) => dispatch(toggleModal(params)),\r\n closeModal: (modalId) => dispatch(toggleModal({ modalId, value: false })),\r\n dispatchOnNext: ({ modalId, onNext, ...params }) => {\r\n invokeIfFunction(onNext, {\r\n params,\r\n goNext: () =>\r\n dispatch({\r\n type: APP_ACTIONS.MODAL_NEXT,\r\n modalId,\r\n }),\r\n });\r\n },\r\n dispatchOnPrevious: ({ modalId, onPrevious, ...params }) =>\r\n invokeIfFunction(onPrevious, {\r\n params,\r\n goPrevious: () =>\r\n dispatch({\r\n type: APP_ACTIONS.MODAL_PREVIOUS,\r\n modalId,\r\n }),\r\n }),\r\n };\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n content: {\r\n padding: theme.altus.components.ModalContainer.content.padding,\r\n height: '60vh',\r\n minWidth: 400,\r\n background: theme.palette.background.default,\r\n },\r\n relative: {\r\n position: 'relative',\r\n outline: 'none',\r\n },\r\n actionsFullscreen: {\r\n backgroundColor: theme.altus.background.navigation,\r\n height: '12vh',\r\n margin: 0,\r\n justifyContent: 'center',\r\n },\r\n cancelButton: {\r\n position: 'absolute',\r\n right: 15,\r\n },\r\n backdrop: {\r\n backgroundColor: theme.altus.background.backdrop,\r\n },\r\n paperScrollPaper: {\r\n maxHeight: 'calc(100vh - 96px)',\r\n },\r\n});\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(toJSComponent(withStyles(styles)(ModalContainer)));\r\n","import { KeyboardDateTimePicker } from '@material-ui/pickers';\r\n\r\nimport { Format } from 'app/app.constants';\r\n\r\nconst DateTimePickerField = ({\r\n meta,\r\n input,\r\n margin = 'normal',\r\n DateTimePickerProps,\r\n format = Format.time,\r\n inputVariant = 'standard',\r\n}) => {\r\n const { onChange, value } = input;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DateTimePickerField;\r\n","import { Grid } from '@material-ui/core';\r\nimport { Field } from 'redux-form/immutable';\r\n\r\nimport DateTimePickerField from 'app/components/form/DateTimePickerField';\r\n\r\nconst AdjustTimeField = ({ names, disabled, DateTimePickerProps, ...rest }) => {\r\n const [startTimeName, endTimeName] = names;\r\n const startTime = rest[startTimeName];\r\n const endTime = rest[endTimeName];\r\n\r\n return (\r\n \r\n {\r\n startTime.input.onChange(value);\r\n endTime.input.onChange(value);\r\n }}\r\n DateTimePickerProps={DateTimePickerProps}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default AdjustTimeField;\r\n","import { Grid } from '@material-ui/core';\r\nimport { Field } from 'redux-form/immutable';\r\n\r\nimport DateTimePickerField from 'app/components/form/DateTimePickerField';\r\n\r\nconst AdjustDurationField = ({\r\n names,\r\n disabled,\r\n endTimeProps,\r\n durationProps,\r\n startTimeProps,\r\n ...rest\r\n}) => {\r\n const [startTimeName] = names;\r\n const startTime = rest[startTimeName];\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*If item is stopped => edit end time when editing duration*/}\r\n {/*If item is active => edit start time when edititing duration*/}\r\n \r\n );\r\n};\r\n\r\nexport default AdjustDurationField;\r\n","export const PARTICIPANTSMODAL = 'PARTICIPANTSMODAL';\r\nexport const SITUATIONSMODAL = 'SITUATIONSMODAL';\r\n","import PropTypes from 'prop-types';\r\n\r\nimport { Switch } from '@material-ui/core';\r\n\r\nconst SwitchFormik = ({ field, form, ...rest }) => {\r\n const { value, onChange, name } = field;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nSwitchFormik.propTypes = {\r\n format: PropTypes.func,\r\n};\r\n\r\nexport default SwitchFormik;\r\n","import { useEffect, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers';\r\n\r\nimport { Format } from 'app/app.constants';\r\nimport { formatDate } from 'utils/format.util';\r\n\r\nconst DateTimePickerFormik = ({\r\n form,\r\n field,\r\n classes,\r\n margin = 'normal',\r\n DateTimePickerProps,\r\n format = Format.time,\r\n destroyOnUnmount = false,\r\n inputVariant = 'standard',\r\n disableFuture = false,\r\n ...rest\r\n}) => {\r\n const { value, name, onBlur } = field;\r\n const { getFieldMeta, setFieldValue } = form;\r\n\r\n useEffect(\r\n () => () => {\r\n if (destroyOnUnmount) {\r\n // clear value and unregister field\r\n setFieldValue(name, undefined);\r\n }\r\n },\r\n [name, setFieldValue, destroyOnUnmount],\r\n );\r\n\r\n const { error } = getFieldMeta(name);\r\n\r\n const onChangeHandler = useCallback(\r\n (value) => {\r\n return setFieldValue(name, formatDate(value));\r\n },\r\n [setFieldValue, name],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n customTextField: {\r\n '& input::placeholder': {\r\n fontSize: '10',\r\n },\r\n },\r\n root: {\r\n '& .MuiFormLabel-root': {\r\n fontSize: '10',\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(DateTimePickerFormik);\r\n","import Agent from 'infrastructure/agent';\r\nimport wellControlMappers from './wellControl.mapper';\r\n\r\nconst getWellControlDrillCategoriesAndSituations = (textSearch) =>\r\n Agent.get(`/wellcontroldrill?textSearch=${textSearch}`);\r\n\r\nconst updateActivityWcd = (projectId, taskId, activity) =>\r\n Agent.put(\r\n `/project/${projectId}/tasks/${taskId}/activities/${activity.id}`,\r\n wellControlMappers.activity.to(activity),\r\n );\r\n\r\nconst wellControlService = {\r\n updateActivityWcd,\r\n getWellControlDrillCategoriesAndSituations,\r\n};\r\n\r\nexport default wellControlService;\r\n","import { Field } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { IconButton, InputAdornment } from '@material-ui/core';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst SearchTextFieldFormik = ({ form, field, InputProps, ...rest }) => {\r\n const { name } = field;\r\n const { setFieldValue } = form;\r\n\r\n return (\r\n \r\n setFieldValue(name, undefined)}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nexport default SearchTextFieldFormik;\r\n","import React from 'react';\r\n\r\nimport {\r\n Box,\r\n Grid,\r\n Button,\r\n Dialog,\r\n Accordion,\r\n Typography,\r\n DialogContent,\r\n AccordionDetails,\r\n AccordionSummary,\r\n} from '@material-ui/core';\r\n\r\nimport { compose } from 'redux';\r\nimport { useState } from 'react';\r\nimport { Field, Formik, Form, useFormikContext } from 'formik';\r\n\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nimport { SITUATIONSMODAL } from 'features/wellControlDrillActivity/constants';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport SearchTextFieldFormik from 'app/components/form/formik/SearchTextFieldFormik';\r\nimport { useEffect } from 'react';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n};\r\n\r\nconst SituationsModal = ({\r\n isOpen,\r\n toggleModal,\r\n classes,\r\n categories,\r\n form,\r\n field,\r\n onSearch,\r\n}) => {\r\n const { value, name } = field;\r\n const { setFieldValue } = form;\r\n const [selectedSituationItems, setSelectedSituationItems] = useState([]);\r\n const { formValuesContext } = useFormikContext();\r\n\r\n const onAddHandler = () => {\r\n setFieldValue(name, selectedSituationItems);\r\n toggleModal({ modalId: SITUATIONSMODAL + form.values.id });\r\n };\r\n\r\n useEffect(() => {\r\n setSelectedSituationItems(value);\r\n }, [value]);\r\n\r\n const onSubmit = (formValues) => {\r\n const search = formValues ? formValues[Filters.TEXT_SEARCH] : '';\r\n onSearch(search);\r\n };\r\n\r\n const onKeyUp = (event) => {\r\n if (event.target?.value?.length === 0) {\r\n onSubmit(formValuesContext);\r\n }\r\n };\r\n\r\n const initialValues = {\r\n [Filters.TEXT_SEARCH]: '',\r\n };\r\n\r\n const shouldSubmit = ({ isValid }) => isValid;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Select situations\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {!categories?.length ? (\r\n \r\n No results...\r\n
\r\n ) : (\r\n categories.map((category, index) => {\r\n return (\r\n \r\n }\r\n >\r\n {category.get('title')}\r\n \r\n \r\n \r\n {category.get('situations').map((situation) => {\r\n return (\r\n {\r\n if (!selectedSituationItems.includes(situation))\r\n setSelectedSituationItems((current) => [\r\n ...current,\r\n situation.toJS(),\r\n ]);\r\n }}\r\n >\r\n \r\n {situation.get('title')}\r\n \r\n \r\n );\r\n })}\r\n
\r\n \r\n \r\n );\r\n })\r\n )}\r\n \r\n \r\n \r\n Selected items\r\n \r\n {selectedSituationItems.map((situation) => {\r\n return (\r\n {\r\n const selectedSituations = selectedSituationItems.filter(\r\n (x) => x !== situation,\r\n );\r\n return setSelectedSituationItems(selectedSituations);\r\n }}\r\n >\r\n {situation.title}\r\n \r\n );\r\n })}\r\n \r\n \r\n Save\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n addBtn: {\r\n position: 'absolute',\r\n bottom: 50,\r\n right: 50,\r\n },\r\n test2: {\r\n height: 'fit-content',\r\n },\r\n accordionDetails: {\r\n backgroundColor: 'transparent',\r\n boxShadow: 'none',\r\n width: '100%',\r\n },\r\n accordionHeader: {\r\n backgroundColor: theme.palette.secondary.darkGrey,\r\n },\r\n situationsItem: {\r\n backgroundColor: theme.palette.secondary.main,\r\n borderRadius: 16,\r\n paddingLeft: theme.spacing(3),\r\n paddingRight: theme.spacing(3),\r\n paddingTop: theme.spacing(1),\r\n paddingBottom: theme.spacing(1),\r\n width: 'fit-content',\r\n marginRight: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n cursor: 'pointer',\r\n height: 'fit-content',\r\n },\r\n situationsText: {\r\n cursor: 'pointer',\r\n },\r\n selected: {\r\n backgroundColor: theme.palette.secondary.darkGrey,\r\n height: '48px',\r\n alignItems: 'center',\r\n paddingLeft: '16px',\r\n marginBottom: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(SituationsModal);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getWellControlCategoriesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'wellControl', 'categories']),\r\n (categories) => categories,\r\n);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\n\r\nimport SituationsModal from 'features/wellControlDrillActivity/SituationsModal';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { WELL_CONTROL_ACTIONS } from 'features/wellControlDrillActivity/wellControl.constants';\r\nimport { loadCategoriesAndSituations } from 'features/wellControlDrillActivity/wellControl.actions';\r\nimport { getWellControlCategoriesFromState } from 'features/wellControlDrillActivity/wellControl.selectors';\r\nimport { useCallback } from 'react';\r\n\r\nconst SituationsModalContainer = ({\r\n form,\r\n field,\r\n isOpen,\r\n dataState,\r\n toggleModal,\r\n dispatchOnLoad,\r\n}) => {\r\n\r\n const onSearch = useCallback((txtSearch) => {\r\n dispatchOnLoad(txtSearch);\r\n }, [dispatchOnLoad]);\r\n \r\n useEffect(() => {\r\n onSearch('');\r\n }, [dispatchOnLoad, onSearch]);\r\n\r\n const categories = useSelector(getWellControlCategoriesFromState);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n WELL_CONTROL_ACTIONS.GET_ALL_CATEGORIES_AND_SITUATIONS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: loadCategoriesAndSituations,\r\n },\r\n ),\r\n)(SituationsModalContainer);\r\n","import { toggleModal } from 'app/app.actions';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport wellControlService from 'features/wellControlDrillActivity/wellControl.service';\r\nimport { WELL_CONTROL_ACTIONS } from 'features/wellControlDrillActivity/wellControl.constants';\r\nimport { getTaskActivities } from 'features/projects/activities/activities.actions';\r\nimport { EDIT_ACTIVITY_MODAL_ID } from 'features/projects/activities/activities.constants';\r\n\r\nexport const loadCategoriesAndSituations = (textSearch = '') => (dispatch) => {\r\n dispatch({\r\n type: WELL_CONTROL_ACTIONS.GET_ALL_CATEGORIES_AND_SITUATIONS,\r\n payload: () =>\r\n wellControlService.getWellControlDrillCategoriesAndSituations(textSearch),\r\n });\r\n};\r\n\r\nexport const updateActivityWcd = (formValues) => (dispatch) => {\r\n const { projectId, taskId, ...activity } = formValues;\r\n\r\n const payload = wellControlService\r\n .updateActivityWcd(projectId, taskId, activity)\r\n .then(() => {\r\n return dispatch(\r\n getTaskActivities(projectId, taskId, { silent: true }),\r\n ).then(() => {\r\n dispatch(toggleModal({ modalId: EDIT_ACTIVITY_MODAL_ID }));\r\n window.location.reload();\r\n });\r\n });\r\n\r\n dispatch({\r\n type: WELL_CONTROL_ACTIONS.UPDATE_WELL_CONTROLL_DRILL_ACTIVITY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating activity',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Activity successfully updated!',\r\n },\r\n payload,\r\n });\r\n};\r\n","import { compose } from 'redux';\r\nimport CheckBox from '@material-ui/icons/CheckBox';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport CheckBoxOutlineBlank from '@material-ui/icons/CheckBoxOutlineBlank';\r\n\r\nimport {\r\n Box,\r\n Grid,\r\n Button,\r\n Dialog,\r\n Typography,\r\n IconButton,\r\n DialogContent,\r\n DialogActions,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n Table,\r\n UserAvatar,\r\n LoadingButton,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport { useMultiselect } from 'altus-hooks';\r\n\r\nimport BasePageDense from 'app/components/BasePageDense';\r\nimport { PARTICIPANTSMODAL } from 'features/wellControlDrillActivity/constants';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport { useCallback } from 'react';\r\nimport { useState } from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nconst initialState = {\r\n pageSize: 25,\r\n sortBy: [\r\n {\r\n id: 'name',\r\n desc: false,\r\n },\r\n ],\r\n};\r\n\r\nconst AddParticipantsModal = ({\r\n users,\r\n isOpen,\r\n classes,\r\n dataState,\r\n toggleModal,\r\n form,\r\n field,\r\n}) => {\r\n const { clearSelection } = useMultiselect();\r\n\r\n const { value, name } = field;\r\n const { setFieldValue } = form;\r\n\r\n const [selectedValues, setSelectedValues] = useState([]);\r\n\r\n const checkIfSelected = useCallback(\r\n (user) => {\r\n const found = selectedValues.find((el) => el.id === user.get('id'));\r\n return found !== undefined;\r\n },\r\n [selectedValues],\r\n );\r\n\r\n useEffect(() => {\r\n setSelectedValues(value);\r\n }, [value]);\r\n\r\n const toggleSelection = useCallback(\r\n (user) => {\r\n const valueLocal = [...selectedValues];\r\n const found = valueLocal.find((el) => el.id === user.get('id'));\r\n if (found) {\r\n const index = valueLocal.indexOf(found);\r\n if (index > -1) {\r\n valueLocal.splice(index, 1);\r\n setSelectedValues(valueLocal);\r\n setFieldValue(name, valueLocal);\r\n }\r\n } else {\r\n valueLocal.push(user.toJS());\r\n setSelectedValues(valueLocal);\r\n setFieldValue(name, valueLocal);\r\n }\r\n },\r\n [setFieldValue, selectedValues, name],\r\n );\r\n\r\n const columns = [\r\n {\r\n id: 'avatar',\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const user = row.original;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (user) => user.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Job title',\r\n accessor: (user) => user.get('title'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Organization',\r\n accessor: (user) => user.get('organizationName'),\r\n },\r\n {\r\n id: 'actions',\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const user = row.original;\r\n\r\n return (\r\n \r\n toggleSelection(user)}\r\n >\r\n {checkIfSelected(user) ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Add field crew\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n toggleModal({ modalId: PARTICIPANTSMODAL });\r\n }}\r\n >\r\n {'Save and close'}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n dialogActionsRoot: {\r\n padding: theme.spacing(3),\r\n background: theme.altus.background.header,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(AddParticipantsModal);\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport { getFieldCrewFromState } from 'features/projects/team/team.selectors';\r\nimport AddParticipantsModal from 'features/wellControlDrillActivity/AddParticipantsModal';\r\n\r\nconst AddParticipantsModalContainer = ({\r\n isOpen,\r\n toggleModal,\r\n form,\r\n field,\r\n dataState,\r\n}) => {\r\n const users = useSelector(getFieldCrewFromState);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AddParticipantsModalContainer;\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { Field, Formik } from 'formik';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport PeopleIcon from '@material-ui/icons/People';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n Grid,\r\n Divider,\r\n TextField,\r\n Typography,\r\n MenuItem,\r\n} from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { EditorState, convertFromRaw, convertToRaw } from 'draft-js';\r\n\r\nimport {\r\n PARTICIPANTSMODAL,\r\n SITUATIONSMODAL,\r\n} from 'features/wellControlDrillActivity/constants';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport SwitchFormik from 'app/components/form/formik/SwitchFormik';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { TEAM_ACTIONS } from 'features/projects/team/team.constants';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { onLoadProjectFieldCrew } from 'features/projects/team/team.actions';\r\nimport DateTimePickerFormik from 'app/components/form/formik/DateTimePickerFormik';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\nimport { updateActivityWcd } from 'features/wellControlDrillActivity/wellControl.actions';\r\nimport { WELL_CONTROL_ACTIONS } from 'features/wellControlDrillActivity/wellControl.constants';\r\nimport { deleteActivityNoNotification } from 'features/projects/activities/activities.actions';\r\nimport SituationsModalContainer from 'features/wellControlDrillActivity/SituationsModalContainer';\r\nimport AddParticipantsModalContainer from 'features/wellControlDrillActivity/AddParticipantsModalContainer';\r\nimport { EditorContentToStringWithTry, isValidJSON } from 'utils/app.util';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { WellControlDrillResult } from 'app/app.constants';\r\n\r\nconst FormFields = {\r\n PROJECT_ID: 'projectId',\r\n TASK_ID: 'taskId',\r\n ACTIVITY_ID: 'id',\r\n START_TIME: 'startTime',\r\n END_TIME: 'endTime',\r\n EVALUATION: 'comments',\r\n SELECTED_SITUATIONS: 'wellControlDrillSituations',\r\n PARTICIPANTS: 'participants',\r\n TITLE: 'title',\r\n NAME: 'name',\r\n ACTIVITY_TYPE_ID: 'activityTypeId',\r\n FAILURE_BARRIER: 'failiureBarrier',\r\n FAILURE_ACTIVATE_BARRIER: 'failureActivateBarrier',\r\n FAILURE_ACTIVATE_SECOND_BARRIER: 'failureActivateSecondBarrier',\r\n MEET_EXPECTED_TIME: 'expectedTimeMet',\r\n DESCRIPTION: 'description',\r\n PARALLELACTIVITY: 'parallelActivity',\r\n WELL_CONTROL_DRILL_RESULT: 'wellControlDrillResult',\r\n};\r\n\r\nconst WellControlDrillActivityContainer = ({\r\n classes,\r\n dataState,\r\n activityForm,\r\n dispatchFieldCrewOnLoad,\r\n}) => {\r\n const activityCommentsEditorState = !activityForm?.comments\r\n ? // This fix reffers to bug #8451, when comment is NULL in DB it affects form behaviour\r\n null\r\n : isValidJSON(\r\n JSON.stringify(\r\n convertToRaw(activityForm?.comments?.getCurrentContent()),\r\n ),\r\n )\r\n ? EditorState.createWithContent(\r\n convertFromRaw(\r\n JSON.parse(\r\n JSON.stringify(\r\n convertToRaw(activityForm?.comments?.getCurrentContent()),\r\n ),\r\n ),\r\n ),\r\n )\r\n : null;\r\n\r\n const initialFormValues = {\r\n [FormFields.PROJECT_ID]: activityForm.projectId,\r\n [FormFields.TASK_ID]: activityForm.taskId,\r\n [FormFields.ACTIVITY_ID]: activityForm.id,\r\n [FormFields.START_TIME]: activityForm.activityStartTime,\r\n [FormFields.END_TIME]: activityForm.activityEndTime,\r\n [FormFields.EVALUATION]: activityCommentsEditorState,\r\n [FormFields.SELECTED_SITUATIONS]: activityForm.wellControlDrillSituations,\r\n [FormFields.PARTICIPANTS]: activityForm.participants,\r\n [FormFields.TITLE]: activityForm.title,\r\n [FormFields.NAME]: activityForm.type.name,\r\n [FormFields.ACTIVITY_TYPE_ID]: activityForm.type.id,\r\n [FormFields.FAILURE_BARRIER]: activityForm.failiureBarrier,\r\n [FormFields.FAILURE_ACTIVATE_BARRIER]: activityForm.failureActivateBarrier,\r\n [FormFields.FAILURE_ACTIVATE_SECOND_BARRIER]:\r\n activityForm.failureActivateSecondBarrier,\r\n [FormFields.MEET_EXPECTED_TIME]: activityForm.expectedTimeMet,\r\n [FormFields.DESCRIPTION]: EditorContentToStringWithTry(\r\n activityForm?.description,\r\n ),\r\n [FormFields.PARALLELACTIVITY]: EditorContentToStringWithTry(\r\n activityForm?.parallelActivity,\r\n ),\r\n [FormFields.WELL_CONTROL_DRILL_RESULT]: activityForm.wellControlDrillResult,\r\n };\r\n const dispatch = useDispatch();\r\n\r\n const handleClick = (values) => {\r\n const rawContentState = convertToRaw(values?.comments?.getCurrentContent());\r\n const evaluationStringified = JSON.stringify(rawContentState);\r\n const updatedValues = {\r\n ...values,\r\n comments: evaluationStringified,\r\n };\r\n\r\n dispatch(updateActivityWcd(updatedValues));\r\n };\r\n\r\n const handleDelete = () => {\r\n dispatch(\r\n deleteActivityNoNotification(\r\n activityForm.projectId,\r\n activityForm.taskId,\r\n activityForm.id,\r\n ),\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n dispatchFieldCrewOnLoad(activityForm.projectId);\r\n }, [dispatchFieldCrewOnLoad, activityForm.projectId]);\r\n\r\n const [isOpenParticipants, toggleModalParticipants] =\r\n useModal(PARTICIPANTSMODAL);\r\n\r\n const [isOpenSituations, toggleModalSituations] = useModal(SITUATIONSMODAL);\r\n\r\n return (\r\n \r\n {({ values }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n Code\r\n \r\n WCD\r\n \r\n \r\n \r\n Name\r\n \r\n Well control drill\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n ,\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n `${values.wellControlDrillSituations.length} selected`,\r\n }}\r\n />\r\n \r\n \r\n \r\n `${values.participants.length} selected`,\r\n }}\r\n />\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {WellControlDrillResult.map((result) => (\r\n \r\n {result.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Did the test include failure of barrier?\r\n \r\n \r\n \r\n No\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n Yes\r\n \r\n \r\n \r\n \r\n \r\n \r\n Did the test include failure to activate barrier?\r\n \r\n \r\n \r\n No\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n Yes\r\n \r\n \r\n \r\n \r\n \r\n \r\n Did the test include failure to activate second barrier?\r\n \r\n \r\n \r\n No\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n Yes\r\n \r\n \r\n \r\n \r\n \r\n \r\n Did the test meet expected time for securing the\r\n situation?\r\n \r\n \r\n \r\n No\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n Yes\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n handleDelete()}\r\n >\r\n Delete\r\n \r\n \r\n \r\n handleClick(values)}\r\n >\r\n Save and close\r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n width: '100%',\r\n height: '100%',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n contentContainer: {\r\n justifyContent: 'center',\r\n borderRadius: 3,\r\n flexDirection: 'column',\r\n },\r\n header: {\r\n backgroundColor: theme.palette.secondary.dark,\r\n padding: theme.spacing(2),\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n footer: {\r\n padding: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n WELL_CONTROL_ACTIONS.GET_ALL_CATEGORIES_AND_SITUATIONS,\r\n WELL_CONTROL_ACTIONS.UPDATE_WELL_CONTROLL_DRILL_ACTIVITY,\r\n TEAM_ACTIONS.PROJECT_FIELD_CREW_PAGE_LOADED,\r\n ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n ACTIVITIES_ACTIONS.CONFIRM_DELETE_ACTIVITY,\r\n ),\r\n }),\r\n {\r\n dispatchFieldCrewOnLoad: onLoadProjectFieldCrew,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(WellControlDrillActivityContainer);\r\n","import { Grid } from '@material-ui/core';\r\nimport { useSelector } from 'react-redux';\r\nimport { Field, Fields, formValueSelector } from 'redux-form/immutable';\r\n\r\nimport {\r\n EDIT_ACTIVITY_FORM,\r\n ACTIVITIES_ACTIONS,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport AdjustTimeField from 'app/components/form/AdjustTimeField';\r\nimport AdjustDurationField from 'app/components/form/AdjustDurationField';\r\nimport ReadOnlyFieldReduxForm from 'app/components/form/redux-form/ReadOnlyFieldReduxForm';\r\nimport WellControlDrillActivityContainer from 'features/wellControlDrillActivity/WellControlDrillActivityContainer';\r\nimport TimeSpanField from 'app/components/form/TimeSpanField';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\nimport QuantityTextFieldReduxForm from 'app/components/form/redux-form/QuantityTextFieldReduxForm';\r\n\r\nconst formSelector = formValueSelector(EDIT_ACTIVITY_FORM.ID);\r\n\r\nconst EditActivityForm = ({\r\n index,\r\n handleSubmit,\r\n disabled,\r\n displayComments,\r\n activityTypeId,\r\n activityForm,\r\n}) => {\r\n if (activityTypeId === EDIT_ACTIVITY_FORM.WELL_CONTROL_DRILL_TYPE_ID) {\r\n return ;\r\n }\r\n return (\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nconst ExecutionFields = ({\r\n isPointInTime,\r\n disabled,\r\n status,\r\n displayComments,\r\n}) => (\r\n <>\r\n {isPointInTime && (\r\n \r\n \r\n \r\n )}\r\n {!isPointInTime && (\r\n \r\n \r\n \r\n )}\r\n {displayComments && (\r\n \r\n \r\n \r\n )}\r\n \r\n);\r\n\r\nconst FormContent = ({ displayComments, disabled }) => {\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.UPDATE_ACTIVITY,\r\n ACTIVITIES_ACTIONS.CONFIRM_DELETE_ACTIVITY,\r\n ),\r\n );\r\n\r\n const status = useSelector((state) =>\r\n formSelector(state, EDIT_ACTIVITY_FORM.STATUS),\r\n );\r\n\r\n const isPointInTime = useSelector((state) =>\r\n formSelector(state, EDIT_ACTIVITY_FORM.IS_POINT_IN_TIME),\r\n );\r\n\r\n const disableEditing = dataState.isLoading() || disabled;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {status > WORK_ITEM_STATUS.PLANNED && (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditActivityForm;\r\n","import { connect } from 'react-redux';\r\nimport { Button, DialogActions } from '@material-ui/core';\r\n\r\nimport LoadingButton from 'app/components/LoadingButton';\r\n\r\nimport { NotRequestedDataState, anyLoadingDataState } from 'altus-datastate';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport {\r\n ACTIVITIES_ACTIONS,\r\n EDIT_ACTIVITY_FORM,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nconst EditActivityModalActions = ({\r\n valid,\r\n index,\r\n taskId,\r\n projectId,\r\n submitting,\r\n toggleModal,\r\n handleSubmit,\r\n editDataState,\r\n activityTypeId,\r\n item: activity,\r\n deleteDataState,\r\n autosaveDataState,\r\n downloadDataState,\r\n dispatchDeleteActivity,\r\n dispatchDownloadActivityReport,\r\n}) => {\r\n const loading = anyLoadingDataState([\r\n deleteDataState,\r\n editDataState,\r\n downloadDataState,\r\n ]);\r\n\r\n const isAutosaving = autosaveDataState.isLoading();\r\n\r\n if (activityTypeId === EDIT_ACTIVITY_FORM.WELL_CONTROL_DRILL_TYPE_ID) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n dispatchDeleteActivity(projectId, taskId, activity.id, index)\r\n }\r\n >\r\n Delete\r\n \r\n \r\n handleSubmit(projectId, taskId, false)}\r\n dataState={isAutosaving ? NotRequestedDataState : editDataState}\r\n >\r\n Save\r\n \r\n \r\n dispatchDownloadActivityReport(projectId, taskId, activity.id)\r\n }\r\n dataState={isAutosaving ? NotRequestedDataState : editDataState}\r\n >\r\n Save and Export PDF\r\n \r\n \r\n );\r\n};\r\n\r\nexport default connect(\r\n (_, initialProps) => (state) => {\r\n const { id } = initialProps.item;\r\n\r\n return {\r\n editDataState: getActionDataStateFromState(state, {\r\n type: ACTIVITIES_ACTIONS.UPDATE_ACTIVITY,\r\n id,\r\n }),\r\n deleteDataState: getActionDataStateFromState(state, {\r\n type: ACTIVITIES_ACTIONS.CONFIRM_DELETE_ACTIVITY,\r\n id,\r\n }),\r\n downloadDataState: getActionDataStateFromState(state, {\r\n type: ACTIVITIES_ACTIONS.DOWNLOAD_ACTIVITY_PDF,\r\n id,\r\n }),\r\n };\r\n },\r\n null,\r\n)(EditActivityModalActions);\r\n","import { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { reduxForm } from 'redux-form/immutable';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { NotRequestedDataState } from 'altus-datastate';\r\n\r\nimport {\r\n EDIT_ACTIVITY_FORM,\r\n ACTIVITIES_ACTIONS,\r\n EDIT_ACTIVITY_MODAL_ID,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport {\r\n getActivityPdf,\r\n onEnterEditActivityModal,\r\n} from 'features/projects/activities/activities.actions';\r\n\r\nimport {\r\n getActionDataStateFromState,\r\n getFormValuesFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { validateEditActivityForm } from 'features/projects/activities/activities.validation';\r\nimport { getAutosaveDataStateFromState } from 'features/projects/activities/activities.selectors';\r\nimport EditActivityForm from 'features/projects/activities/components/editActivity/EditActivityForm';\r\nimport EditActivityModalActions from 'features/projects/activities/components/editActivity/EditActivityModalActions';\r\n\r\nclass EditActivityModalContainer extends PureComponent {\r\n onNext = ({ goNext }) => {\r\n const { dirty, handleSubmit, taskId, projectId } = this.props;\r\n\r\n return dirty ? handleSubmit(projectId, taskId, true, goNext) : goNext();\r\n };\r\n\r\n onPrevious = ({ goPrevious }) => {\r\n const { dirty, handleSubmit, taskId, projectId } = this.props;\r\n\r\n return dirty\r\n ? handleSubmit(projectId, taskId, true, goPrevious)\r\n : goPrevious();\r\n };\r\n\r\n passResetIntoHandleSubmit = (...args) => {\r\n const { handleSubmit, reset } = this.props;\r\n handleSubmit(...args, reset);\r\n };\r\n\r\n render() {\r\n const {\r\n valid,\r\n taskId,\r\n classes,\r\n disabled,\r\n projectId,\r\n submitting,\r\n activities,\r\n handleSubmit,\r\n displayComments,\r\n autosaveDataState,\r\n dispatchDeleteActivity,\r\n dispatchDownloadActivityReport,\r\n updateActivityDataState,\r\n activityTypeId,\r\n activityForm,\r\n dispatchOnEnterEditActivityModal,\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nEditActivityModalContainer.defaultProps = {\r\n updateActivityDataState: NotRequestedDataState,\r\n};\r\n\r\nconst mapStateToProps = (state) => {\r\n const activityForm = getFormValuesFromState(state, EDIT_ACTIVITY_FORM.ID);\r\n\r\n const activityId =\r\n activityForm && activityForm.get(EDIT_ACTIVITY_FORM.ACTIVITY_ID);\r\n\r\n const activityTypeId = activityForm && activityForm.get('code');\r\n return {\r\n autosaveDataState: getAutosaveDataStateFromState(state),\r\n activityTypeId: activityTypeId,\r\n activityForm: activityForm,\r\n updateActivityDataState: activityId\r\n ? getActionDataStateFromState(state, {\r\n type: ACTIVITIES_ACTIONS.UPDATE_ACTIVITY,\r\n id: activityId,\r\n })\r\n : undefined,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnEnterEditActivityModal: onEnterEditActivityModal,\r\n dispatchDownloadActivityReport: getActivityPdf,\r\n};\r\n\r\nconst styles = () => ({\r\n content: {\r\n height: 'auto',\r\n padding: '25px 25px 75px 25px',\r\n },\r\n});\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n validate: validateEditActivityForm,\r\n form: EDIT_ACTIVITY_FORM.ID,\r\n })(withStyles(styles)(EditActivityModalContainer)),\r\n ),\r\n);\r\n// TODO convert to function from class\r\n","import moment from 'moment';\r\n\r\nimport { Format } from 'app/app.constants';\r\nimport { EDIT_ACTIVITY_FORM as FORM_FIELDS } from 'features/projects/activities/activities.constants';\r\n\r\nexport const validateEditActivityForm = (values) => {\r\n const errors = {};\r\n\r\n const endTimeValue = values.get(FORM_FIELDS.END_TIME);\r\n const startTimeValue = values.get(FORM_FIELDS.START_TIME);\r\n const previousActivityStartTimeValue = values.get(\r\n FORM_FIELDS.PREVIOUS_ACTIVITY_START_TIME,\r\n );\r\n\r\n const startTime = startTimeValue\r\n ? moment(startTimeValue, Format.datetime_local)\r\n : null;\r\n\r\n const endTime = endTimeValue\r\n ? moment(endTimeValue, Format.datetime_local)\r\n : endTimeValue;\r\n\r\n const previousActivityStartTime = previousActivityStartTimeValue\r\n ? moment(previousActivityStartTimeValue, Format.datetime_local)\r\n : previousActivityStartTimeValue;\r\n\r\n if (startTime?.isAfter(moment())) {\r\n errors[FORM_FIELDS.START_TIME] = 'Invalid start time';\r\n }\r\n\r\n if (endTime?.isAfter(moment())) {\r\n errors[FORM_FIELDS.END_TIME] = 'Invalid end time';\r\n }\r\n\r\n if (startTime && endTime && previousActivityStartTime) {\r\n if (startTime.isAfter(endTime)) {\r\n errors[FORM_FIELDS.START_TIME] =\r\n 'Start time must be before start time of following activity';\r\n }\r\n if (startTime.isBefore(previousActivityStartTime)) {\r\n errors[FORM_FIELDS.START_TIME] =\r\n 'Start time must be after start time of previous activity';\r\n }\r\n }\r\n\r\n if (startTime && previousActivityStartTime) {\r\n if (startTime.isBefore(previousActivityStartTime)) {\r\n errors[FORM_FIELDS.START_TIME] =\r\n 'Start date must be after start date of previous activity';\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n","import { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport {\r\n completeActivity,\r\n createActivityWithNotification,\r\n createNewPointInTimeActivity,\r\n deleteActivityWithNotification,\r\n goBack,\r\n pauseActivity,\r\n updateActivity,\r\n updateActivityTimes,\r\n duplicateActivityWithNotification,\r\n} from '../activities.actions';\r\n\r\nexport const useRealTimeNotifications = (projectId, taskId, connection) => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchGoBack = useCallback(\r\n (projectId, taskId) => dispatch(goBack(projectId, taskId, connection)),\r\n [connection, dispatch],\r\n );\r\n\r\n const dispatchCompleteActivity = useCallback(\r\n (projectId, taskId, activityId) =>\r\n dispatch(completeActivity(projectId, taskId, activityId, connection)),\r\n [connection, dispatch],\r\n );\r\n\r\n const dispatchCreateActivity = useCallback(\r\n () => dispatch(createActivityWithNotification(taskId, connection)),\r\n [connection, dispatch, taskId],\r\n );\r\n\r\n const dispatchDuplicateActivity = useCallback(\r\n (values) => {\r\n return dispatch(\r\n duplicateActivityWithNotification(taskId, connection, values),\r\n );\r\n },\r\n [connection, dispatch, taskId],\r\n );\r\n\r\n const dispatchDeleteActivity = useCallback(\r\n (projectId, taskId, activityId, index, isSubActivity = false) =>\r\n dispatch(\r\n deleteActivityWithNotification(\r\n projectId,\r\n taskId,\r\n activityId,\r\n index,\r\n isSubActivity,\r\n connection,\r\n ),\r\n ),\r\n [connection, dispatch],\r\n );\r\n\r\n const dispatchUpdateActivity = useCallback(\r\n (projectId, taskId, activity) =>\r\n dispatch(updateActivity(projectId, taskId, activity, connection)),\r\n [connection, dispatch],\r\n );\r\n\r\n const dispatchUpdateActivityTimes = useCallback(\r\n (projectId, taskId, autosave, values, formikPrimitives) =>\r\n dispatch(\r\n updateActivityTimes(\r\n projectId,\r\n taskId,\r\n autosave,\r\n values,\r\n formikPrimitives,\r\n connection,\r\n ),\r\n ),\r\n [connection, dispatch],\r\n );\r\n\r\n const dispatchPauseActivity = useCallback(\r\n (projectId, taskId, activityId, activityTypeId) =>\r\n dispatch(\r\n pauseActivity(\r\n projectId,\r\n taskId,\r\n activityId,\r\n activityTypeId,\r\n connection,\r\n ),\r\n ),\r\n [connection, dispatch],\r\n );\r\n\r\n const dispatchCreateNewPointInTimeActivity = useCallback(\r\n (projectId, taskId, activityId, activityTypeId) => {\r\n dispatch(\r\n createNewPointInTimeActivity(\r\n projectId,\r\n taskId,\r\n activityId,\r\n activityTypeId,\r\n connection,\r\n ),\r\n );\r\n },\r\n [connection, dispatch],\r\n );\r\n\r\n return [\r\n dispatchGoBack,\r\n dispatchCompleteActivity,\r\n dispatchCreateActivity,\r\n dispatchDeleteActivity,\r\n dispatchUpdateActivity,\r\n dispatchUpdateActivityTimes,\r\n dispatchPauseActivity,\r\n dispatchCreateNewPointInTimeActivity,\r\n dispatchDuplicateActivity,\r\n ];\r\n};\r\n","import { useDispatch } from 'react-redux';\r\nimport { useCallback } from 'react';\r\nimport EditActivityModalContainer from 'features/projects/activities/components/editActivity/EditActivityModalContainer';\r\nimport { updateActivityFormOnSubmitWithNotification } from 'features/projects/activities/activities.actions';\r\nimport { useRealTimeNotifications } from 'features/projects/activities/hooks/useRealTimeNotifications';\r\n\r\nexport const EditActivityModalContainerWithNotification = ({\r\n connection,\r\n taskId,\r\n projectId,\r\n ...props\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [, , , deleteActivity] = useRealTimeNotifications(\r\n projectId,\r\n taskId,\r\n connection,\r\n );\r\n\r\n const handleSubmitWithNotification = useCallback(\r\n (...args) =>\r\n dispatch(updateActivityFormOnSubmitWithNotification(connection)(...args)),\r\n [dispatch, connection],\r\n );\r\n\r\n const newProps = {\r\n handleSubmit: handleSubmitWithNotification,\r\n taskId: taskId,\r\n projectId: projectId,\r\n dispatchDeleteActivity: deleteActivity,\r\n ...props,\r\n };\r\n\r\n return ;\r\n};\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst SetAndRetrieveItemModalHeader = ({ title, closeModal, classes }) => (\r\n \r\n \r\n \r\n \r\n Set / Retrieve item\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n paddingRight: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n title: {\r\n overflow: 'hidden',\r\n padding: `0 ${theme.spacing(2)}px`,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(SetAndRetrieveItemModalHeader);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button } from '@material-ui/core';\r\n\r\nconst SetAndRetrieveItemModalHeader = ({\r\n closeModal,\r\n classes,\r\n saveValuePairs,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(SetAndRetrieveItemModalHeader);\r\n","import React from 'react';\r\nimport { useState } from 'react';\r\nimport { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Box,\r\n Chip,\r\n Grid,\r\n Button,\r\n Dialog,\r\n Select,\r\n MenuItem,\r\n Typography,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n getTaskActivities,\r\n deleteActivitySetOrRetrieveItems,\r\n updateActivitySetOrRetrieveItems,\r\n} from 'features/projects/activities/activities.actions';\r\n\r\nimport { formatToolstringToolStatusString } from 'features/projects/tasks/task/toolstring/toolstring.util';\r\nimport SetAndRetrieveItemModalHeader from 'features/projects/tasks/task/activities/SetAndRetrieveItem/SetAndRetrieveItemModalHeader';\r\nimport SetAndRetrieveItemModalFooter from 'features/projects/tasks/task/activities/SetAndRetrieveItem/SetAndRetrieveItemModalFooter';\r\n\r\nconst SetAndRetrieveItemModalContainer = ({\r\n open,\r\n classes,\r\n task,\r\n taskId,\r\n activities,\r\n projectId,\r\n toggleModal,\r\n plannedToolstringToolsWithStatus,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [rows, setRows] = useState([]);\r\n\r\n const onCloseModal = () => {\r\n dispatch(getTaskActivities(projectId, taskId));\r\n toggleModal();\r\n };\r\n\r\n useEffect(() => {\r\n const initializeRows = () => {\r\n return activities\r\n .filter((activity) => activity.setOrRetrieveToolstringItemId != null)\r\n .map((activity) => {\r\n const tool = plannedToolstringToolsWithStatus.find(\r\n (t) =>\r\n t.toolstringItemId === activity.setOrRetrieveToolstringItemId,\r\n );\r\n return {\r\n activityId: activity.id,\r\n toolId: tool ? tool.toolstringItemId : '',\r\n toolStatus: tool ? tool.toolStatus : '',\r\n };\r\n });\r\n };\r\n setRows(initializeRows());\r\n }, [activities, plannedToolstringToolsWithStatus]);\r\n\r\n const saveValuePairs = () => {\r\n dispatch(updateActivitySetOrRetrieveItems(projectId, taskId, rows));\r\n toggleModal();\r\n };\r\n\r\n const deleteValuePairs = (row) => {\r\n dispatch(\r\n deleteActivitySetOrRetrieveItems(projectId, taskId, row.activityId),\r\n );\r\n };\r\n\r\n const SelectingMenu = ({\r\n rows,\r\n setRows,\r\n plannedToolstringToolsWithStatus,\r\n activities,\r\n deleteValuePairs,\r\n }) => {\r\n const handleAddRow = () => {\r\n if (rows.length < plannedToolstringToolsWithStatus.length) {\r\n setRows([...rows, { activityId: '', toolId: '' }]);\r\n }\r\n };\r\n\r\n const handleActivityChange = (index, event) => {\r\n const updatedRows = rows.map((row, i) =>\r\n i === index ? { ...row, activityId: event.target.value } : row,\r\n );\r\n setRows(updatedRows);\r\n };\r\n\r\n const handleToolChange = (index, event) => {\r\n const toolId = event.target.value;\r\n const selectedTool = plannedToolstringToolsWithStatus.find(\r\n (tool) => tool.toolstringItemId === toolId,\r\n );\r\n\r\n const updatedRows = rows.map((row, i) =>\r\n i === index\r\n ? {\r\n ...row,\r\n toolId: toolId,\r\n toolStatus: selectedTool ? selectedTool.toolStatus : '',\r\n }\r\n : row,\r\n );\r\n\r\n setRows(updatedRows);\r\n };\r\n\r\n const isAddButtonDisabled =\r\n rows.length >= plannedToolstringToolsWithStatus.length;\r\n\r\n const getAvailableOptions = (options, selectedKey, currentIndex) => {\r\n const selectedIds = rows\r\n .map((row, index) => (index === currentIndex ? null : row[selectedKey]))\r\n .filter((id) => id !== null);\r\n return options.filter((option) => !selectedIds.includes(option.id));\r\n };\r\n\r\n const getAvailableOptionsTools = (options, selectedKey, currentIndex) => {\r\n const selectedIds = rows\r\n .map((row, index) => (index === currentIndex ? null : row[selectedKey]))\r\n .filter((id) => id !== null);\r\n\r\n return options.filter(\r\n (option) => !selectedIds.includes(option.toolstringItemId),\r\n );\r\n };\r\n\r\n const handleDeleteRow = (index) => {\r\n const updatedRows = rows.filter((_, i) => i !== index);\r\n setRows(updatedRows);\r\n deleteValuePairs(rows[index]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {rows.map((row, index) => (\r\n \r\n \r\n handleActivityChange(index, event)}\r\n displayEmpty\r\n fullWidth\r\n >\r\n {getAvailableOptions(activities, 'activityId', index).map(\r\n (activity) => {\r\n return (\r\n \r\n {activity.name}\r\n \r\n );\r\n },\r\n )}\r\n \r\n \r\n \r\n handleToolChange(index, event)}\r\n displayEmpty\r\n fullWidth\r\n >\r\n {getAvailableOptionsTools(\r\n plannedToolstringToolsWithStatus,\r\n 'toolId',\r\n index,\r\n ).map((tool) => (\r\n \r\n \r\n {tool.name}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n handleDeleteRow(index)}\r\n style={{ cursor: 'pointer' }}\r\n />\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n Add\r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Activity\r\n \r\n \r\n Matching Set/Retrieved Tool\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n minHeight: '50vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SetAndRetrieveItemModalContainer);\r\n","export const checkIfNotASubActivity = (activity) =>\r\n activity.get('parentActivityId') === null ||\r\n activity.get('parentActivityId') === 0;\r\n","import { compose } from 'redux';\r\nimport Add from '@material-ui/icons/Add';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { useEffect, useCallback, useMemo } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { Grid, Fab, Button } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n sortActivities,\r\n selectActivity,\r\n createActivity,\r\n getProjectStatus,\r\n refreshProjectStatus,\r\n toggleCreateActivityModal,\r\n} from 'features/projects/activities/activities.actions';\r\n\r\nimport {\r\n getTaskFromState,\r\n getPlannedToolstringToolsWithStatusFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { ProjectPermission, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { TASK_MODALS } from 'features/projects/tasks/task/task.constants';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport {\r\n loadAndFilterPlannedToolstring,\r\n onLoad,\r\n} from 'features/projects/tasks/task/activities/taskActivities.actions';\r\nimport { CREATE_ACTIVITY_MODE } from 'features/projects/activities/activities.constants';\r\nimport { useTaskActivities } from 'features/projects/activities/hooks/useTaskActivities';\r\nimport TaskActivitiesTable from 'features/projects/tasks/task/activities/TaskActivitiesTable';\r\nimport { TASK_ACTIVITIES_ACTIONS } from 'features/projects/tasks/task/activities/taskActivities.constants';\r\nimport CreateActivityModalContainer from 'features/projects/activities/components/CreateActivityModalContainer';\r\nimport { EditActivityModalContainerWithNotification } from 'features/projects/activities/components/editActivity/EditActivityModalContainerWithNotification';\r\nimport SetAndRetrieveItemModalContainer from 'features/projects/tasks/task/activities/SetAndRetrieveItem/SetAndRetrieveItemModalContainer';\r\nimport { checkIfNotASubActivity } from 'features/projects/tasks/task/activities/activityUtils';\r\nimport { TaskType } from 'features/projects/tasks/tasks.constants';\r\n\r\nimport useHubConnection from 'features/projects/dashboard/hooks/useHubConnection';\r\nimport config from 'infrastructure/config';\r\nimport { ProjectExecutionHub } from 'utils/activity.util';\r\n\r\nconst TaskActivitiesContainer = ({\r\n task,\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n dispatchOnLoad,\r\n dispatchSortActivities,\r\n dispatchSelectActivity,\r\n dispatchCreateActivity,\r\n dispatchRefreshProjectStatus,\r\n dispatchToggleCreateActivityModal,\r\n dispatchLoadAndFilterPlannedToolstring,\r\n}) => {\r\n const activities = useTaskActivities(taskId);\r\n\r\n const filteredTaskActivities = useMemo(() => {\r\n if (activities) {\r\n return activities\r\n .filter((x) => checkIfNotASubActivity(x))\r\n\r\n .sortBy((activity) => activity.get('sequence'))\r\n .map((activity, index) => activity.set('sequence', index + 1));\r\n }\r\n return activities;\r\n }, [activities]);\r\n\r\n const [connection, connectionState] = useHubConnection(\r\n `${config.dashboardHubsBaseUrl}/project-execution`,\r\n );\r\n\r\n useEffect(() => {\r\n if (connectionState === 'Connected') {\r\n connection.on(\r\n ProjectExecutionHub.SignalProjectReload,\r\n (argProjectId, argTaskId) =>\r\n dispatchRefreshProjectStatus(argProjectId, argTaskId),\r\n );\r\n connection.invoke(ProjectExecutionHub.RegisterOnProject, projectId);\r\n }\r\n }, [\r\n connectionState,\r\n connection,\r\n dispatchRefreshProjectStatus,\r\n projectId,\r\n taskId,\r\n ]);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId, taskId);\r\n if (task.get('type') !== TaskType.SURFACE)\r\n dispatchLoadAndFilterPlannedToolstring(projectId, taskId);\r\n }, [\r\n taskId,\r\n projectId,\r\n dispatchOnLoad,\r\n dispatchLoadAndFilterPlannedToolstring,\r\n task,\r\n ]);\r\n\r\n const [setRetrieveItemModal, toggleSetRetrieveItemModal] = useModal(\r\n TASK_MODALS.SET_RETRIEVE_ITEM_MODAL,\r\n );\r\n\r\n const onRowClick = useCallback(\r\n (activity) =>\r\n dispatchSelectActivity(filteredTaskActivities.toList().indexOf(activity)),\r\n [filteredTaskActivities, dispatchSelectActivity],\r\n );\r\n const onSortEnd = useCallback(\r\n (indices) => dispatchSortActivities(projectId, taskId, indices),\r\n [taskId, projectId, dispatchSortActivities],\r\n );\r\n\r\n const { hasPermission } = useProjectPermissions(\r\n ProjectPermission.EDIT_ACTIVITIES,\r\n );\r\n\r\n const plannedToolstringToolsWithStatus = useSelector(\r\n getPlannedToolstringToolsWithStatusFromState,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {task.get('type') !== TaskType.SURFACE ? (\r\n \r\n \r\n Set/Retrieve an item\r\n \r\n ) : null}\r\n \r\n \r\n \r\n WORK_ITEM_STATUS.STARTED}\r\n onClick={() =>\r\n dispatchToggleCreateActivityModal(CREATE_ACTIVITY_MODE.NORMAL)\r\n }\r\n >\r\n \r\n \r\n dispatchCreateActivity(taskId)}\r\n />\r\n \r\n \r\n \r\n \r\n {setRetrieveItemModal && (\r\n filteredTaskActivities.toJS()[key],\r\n )}\r\n open={setRetrieveItemModal}\r\n toggleModal={toggleSetRetrieveItemModal}\r\n plannedToolstringToolsWithStatus={plannedToolstringToolsWithStatus.toJS()}\r\n task={task}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n task: getTaskFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n TASK_ACTIVITIES_ACTIONS.TASK_ACTIVITIES_PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchSortActivities: sortActivities,\r\n dispatchCreateActivity: createActivity,\r\n dispatchSelectActivity: selectActivity,\r\n dispatchGetProjectStatus: getProjectStatus,\r\n dispatchRefreshProjectStatus: refreshProjectStatus,\r\n dispatchToggleCreateActivityModal: toggleCreateActivityModal,\r\n dispatchLoadAndFilterPlannedToolstring: loadAndFilterPlannedToolstring,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n createActivityBtn: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n setItem: {\r\n color: theme.palette.primary.newLight,\r\n height: 'fit-content',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(TaskActivitiesContainer);\r\n","import { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { SimulationFormFields as FormFields } from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nconst CreateSimulationForm = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CreateSimulationForm;\r\n","import { compose } from 'redux';\r\nimport { Formik, Form } from 'formik';\r\nimport { connect } from 'react-redux';\r\nimport { Dialog } from '@material-ui/core';\r\nimport { useCallback } from 'react';\r\nimport { Button, DialogContent } from '@material-ui/core';\r\n\r\nimport {\r\n ModalActions,\r\n ModalHeader,\r\n withModal,\r\n LoadingButton,\r\n} from 'altus-ui-components';\r\n\r\nimport { MODAL } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { submitCreateSimulation } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport CreateSimulationForm from 'features/projects/tasks/task/simulation/components/CreateSimulationForm';\r\nimport { getTaskFromState } from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nconst CreateSimulationModal = ({\r\n task,\r\n open,\r\n taskId,\r\n projectId,\r\n toggleModal,\r\n projectWellboreDetailId,\r\n dispatchCreateSimulation,\r\n}) => {\r\n const onSubmit = useCallback(\r\n (simulation, { setStatus, setSubmitting }) =>\r\n dispatchCreateSimulation(\r\n projectId,\r\n taskId,\r\n simulation,\r\n setSubmitting,\r\n setStatus,\r\n ),\r\n [dispatchCreateSimulation, projectId, taskId],\r\n );\r\n const initialName = `${task.get('title')} Simulation`;\r\n\r\n return (\r\n \r\n \r\n \r\n {({ handleSubmit, isSubmitting }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Create\r\n \r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default compose(\r\n withModal(MODAL.CREATE_SIMULATION_MODAL),\r\n connect(\r\n (state) => {\r\n return {\r\n task: getTaskFromState(state),\r\n };\r\n },\r\n {\r\n dispatchCreateSimulation: submitCreateSimulation,\r\n },\r\n ),\r\n)(CreateSimulationModal);\r\n","import SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\n\r\nconst NoSimulationSelectedPage = () => (\r\n \r\n);\r\n\r\nexport default NoSimulationSelectedPage;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport { Typography, Grid } from '@material-ui/core';\r\n\r\nconst CardNavigationItemData = ({ data }) => (\r\n \r\n {data.map(({ key, value }) => (\r\n \r\n \r\n \r\n {`${key}: `}\r\n \r\n \r\n \r\n {value}\r\n \r\n \r\n ))}\r\n \r\n);\r\n\r\nCardNavigationItemData.propTypes = {\r\n data: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\r\n .isRequired,\r\n }),\r\n ).isRequired,\r\n};\r\n\r\nCardNavigationItemData.defaultProps = {\r\n data: [],\r\n};\r\n\r\nexport default CardNavigationItemData;\r\n","import PropTypes from 'prop-types';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst CardNavigationItemHeader = ({ title, classes, renderHeaderAction }) => (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n {invokeIfFunction(renderHeaderAction)}\r\n \r\n \r\n);\r\n\r\nCardNavigationItemHeader.defaultProps = {\r\n title: '-',\r\n};\r\n\r\nCardNavigationItemHeader.propTypes = {\r\n title: PropTypes.string,\r\n renderHeaderAction: PropTypes.func,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CardNavigationItemHeader);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { CardActions, IconButton } from '@material-ui/core';\r\n\r\nconst CardNavigationItemActions = ({ classes, actions = [] }) => {\r\n if (!actions.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {actions?.map(({ Icon, onClick, title, disabled }, index) => (\r\n {\r\n event.preventDefault();\r\n onClick();\r\n }}\r\n >\r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n justifyContent: 'flex-end',\r\n },\r\n});\r\n\r\nCardNavigationItemActions.propTypes = {\r\n actions: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n disabled: PropTypes.bool,\r\n onClick: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n Icon: PropTypes.elementType.isRequired,\r\n }),\r\n ),\r\n};\r\n\r\nexport default compose(withStyles(styles))(CardNavigationItemActions);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useEffect, useRef } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { NavLink, useRouteMatch } from 'react-router-dom';\r\nimport { Grid, Card, CardContent, Divider } from '@material-ui/core';\r\n\r\nimport { scrollSmoothlyIntoViewIfNeeded } from 'utils/app.util';\r\nimport CardNavigationItemData from 'app/components/CardNavigationItem/CardNavigationItemData';\r\nimport CardNavigationItemHeader from 'app/components/CardNavigationItem/CardNavigationItemHeader';\r\nimport CardNavigationItemActions from 'app/components/CardNavigationItem/CardNavigationItemActions';\r\n\r\nconst CardNavigationItem = ({\r\n to,\r\n data,\r\n title,\r\n actions,\r\n classes,\r\n renderHeaderAction,\r\n selected = null,\r\n children,\r\n}) => {\r\n const ref = useRef(null);\r\n const isMatch = !!useRouteMatch(to);\r\n const isSelected = selected ?? isMatch;\r\n\r\n useEffect(() => {\r\n if (isSelected) {\r\n scrollSmoothlyIntoViewIfNeeded(ref.current);\r\n }\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCardNavigationItem.propTypes = {\r\n to: PropTypes.string,\r\n title: PropTypes.string,\r\n renderHeaderAction: PropTypes.func,\r\n data: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\r\n .isRequired,\r\n }),\r\n ).isRequired,\r\n actions: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n disabled: PropTypes.bool,\r\n onClick: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n Icon: PropTypes.elementType.isRequired,\r\n }),\r\n ).isRequired,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n '&:hover': {\r\n background: theme.palette.action.hover,\r\n },\r\n },\r\n rootSelected: {\r\n background: theme.palette.action.selected,\r\n },\r\n actions: {},\r\n});\r\n\r\nexport default compose(withStyles(styles))(CardNavigationItem);\r\n","import classNames from 'classnames';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\nconst styles = () => ({\r\n formControlLabelRoot: {\r\n flexGrow: 1,\r\n maxWidth: '100%',\r\n flexBasis: 0,\r\n },\r\n});\r\n\r\nconst RadioGroupField = ({\r\n classes,\r\n options,\r\n input,\r\n label,\r\n variant = 'primary',\r\n size = 'medium',\r\n row = true, // Default to true for backward compatibility\r\n}) => {\r\n const { onChange, value } = input;\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n \r\n {options.map((option) => {\r\n const {\r\n name,\r\n value,\r\n label,\r\n onClick,\r\n fullWidth,\r\n disabled,\r\n className,\r\n frozen,\r\n } = option;\r\n\r\n return (\r\n \r\n }\r\n classes={{\r\n root: classNames(className, {\r\n [classes.formControlLabelRoot]: fullWidth,\r\n }),\r\n }}\r\n style={{\r\n ...(frozen && {\r\n backgroundColor: 'transparent',\r\n cursor: 'default',\r\n pointerEvents: 'none',\r\n }),\r\n }}\r\n />\r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nRadioGroupField.defaultProps = {\r\n options: [],\r\n};\r\n\r\nexport default withStyles(styles)(RadioGroupField);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport RadioGroupField from 'app/components/form/RadioGroupField';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n checkedRadio: {\r\n '& .MuiTypography-root': {\r\n fontSize: '0.85rem',\r\n },\r\n '& svg:last-child': {\r\n color: theme.palette.success.main,\r\n },\r\n },\r\n}));\r\n\r\nexport const PlannedIndicator = ({\r\n simulation,\r\n onToggle = () => null,\r\n hidden = false,\r\n isDisabled = false,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n if (hidden) {\r\n return null;\r\n }\r\n\r\n const isPlanned = simulation?.get('isPlanned', false);\r\n const disabled = simulation.get('canResimulate', false) || isDisabled;\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import { useCallback, useMemo } from 'react';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport { Box, CardActions } from '@material-ui/core';\r\n\r\nimport { FavoriteButton } from 'altus-ui-components';\r\nimport CardNavigationItem from 'app/components/CardNavigationItem/CardNavigationItem';\r\nimport { PlannedIndicator } from 'features/projects/execution/components/PlannedIndicator';\r\n\r\nconst SimulationCardNavigationItem = ({\r\n to,\r\n onDelete,\r\n simulation,\r\n onDuplicate,\r\n simulationId,\r\n toggleFavorite,\r\n}) => {\r\n const data = useMemo(\r\n () => [\r\n {\r\n key: 'BHA',\r\n value: simulation.getIn(['toolstring', 'name']) || 'No BHA',\r\n },\r\n {\r\n key: 'Cable',\r\n value: simulation.getIn(['cable', 'name']) || 'No Cable',\r\n },\r\n ],\r\n [simulation],\r\n );\r\n\r\n const renderHeaderAction = useCallback(() => {\r\n return (\r\n toggleFavorite(simulationId)}\r\n />\r\n );\r\n }, [simulation, simulationId, toggleFavorite]);\r\n\r\n // TODO: we need to disable some actions buttons based on permissions.\r\n // Will do this later, since in this case we will probably need to refactor or add\r\n // another HasProjectPermission component with a render method that provides multiple permissions verification\r\n const actions = useMemo(\r\n () =>\r\n [\r\n {\r\n Icon: DuplicateIcon,\r\n title: 'Duplicate',\r\n onClick: () => onDuplicate(simulationId),\r\n },\r\n {\r\n Icon: DeleteIcon,\r\n title: 'Delete',\r\n disabled: simulation.get('isPlanned'),\r\n onClick: () => onDelete(simulationId),\r\n },\r\n ].filter((action) => !!action.onClick),\r\n [onDuplicate, onDelete, simulation, simulationId],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SimulationCardNavigationItem;\r\n","import { compose } from 'redux';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Grid, Divider } from '@material-ui/core';\r\nimport { useCallback, useEffect, useMemo } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Menu,\r\n withModal,\r\n MenuHeader,\r\n LoadingOverlay,\r\n RouteContainer,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n loadSimulations,\r\n requestDeleteSimulation,\r\n requestDuplicateSimulation,\r\n requestToggleSimulationFavorite,\r\n receiveSimulationsForTask,\r\n} from 'features/projects/tasks/task/simulation/simulation.actions';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { toTaskSimulation } from 'utils/route.util';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n MODAL,\r\n SimulationState,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport CreateSimulationModal from 'features/projects/tasks/task/simulation/components/CreateSimulationModal';\r\nimport { getSimulationsForTaskFromState } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport NoSimulationSelectedPage from 'features/projects/tasks/task/simulation/components/NoSimulationSelectedPage';\r\nimport SimulationCardNavigationItem from 'features/projects/tasks/task/simulation/components/SimulationCardNavigationItem';\r\n\r\nconst TaskSimulationsContainer = ({\r\n path,\r\n routes,\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n toggleModal,\r\n simulations,\r\n dispatchRequestDeleteSimulation,\r\n simulationId: currentSimulationId,\r\n dispatchRequestDuplicateSimulation,\r\n dispatchRequestToggleSimulationFavorite,\r\n}) => {\r\n const menuItems = useMemo(() => simulations.valueSeq(), [simulations]);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (projectId) {\r\n dispatch(\r\n loadSimulations(projectId, taskId, [\r\n SimulationState.NOT_COMPLETED,\r\n SimulationState.COMPLETED,\r\n SimulationState.OUTDATED,\r\n SimulationState.ERROR,\r\n SimulationState.PLANNED,\r\n ]),\r\n );\r\n }\r\n\r\n // Reset simulations list on unload\r\n return () => {\r\n dispatch(receiveSimulationsForTask([]));\r\n };\r\n }, [projectId, taskId, dispatch]);\r\n\r\n const onToggleFavorite = useCallback(\r\n (simulationId) =>\r\n dispatchRequestToggleSimulationFavorite(projectId, taskId, simulationId),\r\n [taskId, projectId, dispatchRequestToggleSimulationFavorite],\r\n );\r\n\r\n const onDeleteSimulation = useCallback(\r\n (simulationId) =>\r\n dispatchRequestDeleteSimulation(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationId === currentSimulationId\r\n ? toTaskSimulation(projectId, taskId)\r\n : null,\r\n ),\r\n [taskId, projectId, currentSimulationId, dispatchRequestDeleteSimulation],\r\n );\r\n\r\n const onDuplicateSimulation = useCallback(\r\n (simulationId) =>\r\n dispatchRequestDuplicateSimulation(projectId, taskId, simulationId),\r\n [taskId, projectId, dispatchRequestDuplicateSimulation],\r\n );\r\n\r\n const renderMenuItem = useCallback(\r\n (simulation) => {\r\n const simulationId = simulation.get('simulationId');\r\n const to = toTaskSimulation(projectId, taskId, simulationId);\r\n\r\n return (\r\n \r\n );\r\n },\r\n [\r\n taskId,\r\n projectId,\r\n onToggleFavorite,\r\n onDeleteSimulation,\r\n onDuplicateSimulation,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!simulations.size && !currentSimulationId && (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n menuContainer: {\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nTaskSimulationsContainer.defaultProps = {\r\n simulations: EMPTY_MAP,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { taskId }) => ({\r\n simulations: getSimulationsForTaskFromState(state, taskId),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.LOAD_SIMULATIONS,\r\n ),\r\n }),\r\n {\r\n dispatchRequestDeleteSimulation: requestDeleteSimulation,\r\n dispatchRequestDuplicateSimulation: requestDuplicateSimulation,\r\n dispatchRequestToggleSimulationFavorite: requestToggleSimulationFavorite,\r\n },\r\n ),\r\n withModal(MODAL.CREATE_SIMULATION_MODAL),\r\n withStyles(styles),\r\n)(TaskSimulationsContainer);\r\n","import SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\n\r\nconst NoToolstringSelectedPage = () => (\r\n \r\n);\r\n\r\nexport default NoToolstringSelectedPage;\r\n","import { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { TOOLSTRING_FORMS as FORM } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nconst CreateToolstringForm = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CreateToolstringForm;\r\n","import { withStyles } from '@material-ui/core';\r\nimport { TableCell } from 'altus-ui-components';\r\n\r\nconst TableCellDense = ({ classes, ...rest }) => (\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n cell: {\r\n padding: `0 ${theme.spacing(0.5)}px 0 0`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TableCellDense);\r\n","import { Grid, Typography } from '@material-ui/core';\r\n\r\nconst TableHeaderTitleCell = ({ title, subTitle, justifyContent, ...rest }) => (\r\n <>\r\n {title && (\r\n \r\n \r\n {title}\r\n \r\n \r\n )}\r\n {subTitle && (\r\n \r\n \r\n {subTitle}\r\n \r\n \r\n )}\r\n \r\n);\r\n\r\nexport default TableHeaderTitleCell;\r\n","import { withStyles } from '@material-ui/core';\r\nimport { TableHeaderCell } from 'altus-ui-components';\r\n\r\nconst TableHeaderCellDense = ({ classes, ...rest }) => (\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n cell: {\r\n padding: `0 ${theme.spacing(0.5)}px 0 0`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TableHeaderCellDense);\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { Grid, Collapse } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst TableRowExpandable = ({\r\n classes,\r\n renderDetails,\r\n isExpanded: defaultIsExpanded = false,\r\n hasLightBackground = false,\r\n ...rest\r\n}) => {\r\n const [isExpanded, toggleExpanded] = useToggle(defaultIsExpanded);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {invokeIfFunction(renderDetails, isExpanded)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme, paddingTop = 0, paddingBottom = 0) => ({\r\n tableRowExpanded: {\r\n marginBottom: 0,\r\n },\r\n detailsRoot: {\r\n paddingTop: theme.spacing(paddingTop),\r\n paddingBottom: theme.spacing(paddingBottom),\r\n background: theme.palette.table.row.main,\r\n },\r\n detailsRootLightBackground: {\r\n paddingTop: theme.spacing(paddingTop),\r\n paddingBottom: theme.spacing(paddingBottom),\r\n background: theme.palette.table.row.main,\r\n },\r\n collapseRoot: {\r\n width: '100%',\r\n },\r\n rootExpanded: {\r\n marginBottom: 2,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(TableRowExpandable);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { useMemo, memo } from 'react';\r\nimport { Collection, fromJS, isImmutable } from 'immutable';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP, UNITS } from 'app/app.constants';\r\nimport { formatFraction } from 'utils/format.util';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport TableHeaderTitleCell from 'app/components/TableHeaderTitleCell';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport { useEffect } from 'react';\r\nimport { receiveToolstringTemplateByID } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { useState } from 'react';\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('toolAssemblyTools')\r\n : row.original?.toolAssemblyTools;\r\n\r\nconst ToolstringTemplateToolsTable = ({ classes, templateId = 0 }) => {\r\n const [template, setTemplate] = useState(EMPTY_MAP);\r\n\r\n useEffect(() => {\r\n if (templateId) {\r\n receiveToolstringTemplateByID(templateId).payload.then(\r\n (toolstringTemplate) => {\r\n setTemplate(fromJS(toolstringTemplate));\r\n },\r\n );\r\n }\r\n }, [templateId]);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 1,\r\n id: 'expander',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 6,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 1,\r\n id: 'length',\r\n accessor: (tool) => tool.getIn(['length', 'value']),\r\n Header: () => ,\r\n Cell: ({ value }) => value?.toFixed(2),\r\n },\r\n {\r\n xs: 1,\r\n id: 'weight',\r\n accessor: (tool) => tool.getIn(['weight', 'value']),\r\n Header: () => ,\r\n Cell: ({ value }) => value?.toFixed(1),\r\n },\r\n {\r\n xs: 2,\r\n id: 'outerDiameter',\r\n accessor: (tool) => tool.getIn(['outerDiameter', 'value']),\r\n Header: () => (\r\n \r\n ),\r\n Cell: ({ value }) => formatFraction(value, '\"'),\r\n },\r\n {\r\n xs: 1,\r\n id: 'yieldValue',\r\n accessor: (tool) => tool.getIn(['yieldValue', 'value']),\r\n Header: () => ,\r\n Cell: ({ value }) => (value ? value?.toFixed(0) : null),\r\n },\r\n {\r\n xs: 2,\r\n id: 'topC',\r\n Header: 'Top C.',\r\n accessor: (tool) => tool.get('topConnectorName'),\r\n },\r\n {\r\n xs: 2,\r\n id: 'bottomC',\r\n Header: 'Bot. C',\r\n accessor: (tool) => tool.get('bottomConnectorName'),\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Total Length {'(m)'}\r\n \r\n \r\n {template.getIn(['totalLength', 'value'])?.toFixed(1)}\r\n \r\n \r\n \r\n \r\n Total Weight {'(lbs)'}\r\n \r\n \r\n {template.getIn(['totalWeight', 'value'])?.toFixed(1)}\r\n \r\n \r\n \r\n \r\n Max Outer Diameter {'(in)'}\r\n \r\n \r\n {formatFraction(\r\n template.getIn(['maxOD', 'value'])?.toFixed(1),\r\n '\"',\r\n )}\r\n \r\n \r\n \r\n \r\n Force {'(lbs)'}\r\n \r\n \r\n {template.getIn(['totalForce', 'value'])\r\n ? `${template.getIn(['totalForce', 'value'])?.toFixed(1)} ${\r\n UNITS.POUND_WEIGHT\r\n }`\r\n : 'N/A'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n scrollable: {\r\n overflowY: 'auto',\r\n },\r\n fontSizeTitle: {\r\n fontSize: '1rem',\r\n },\r\n titleContainer: {\r\n paddingTop: theme.spacing(6),\r\n paddingBottom: theme.spacing(6),\r\n justifyContent: 'flex-start',\r\n },\r\n titleBox: {\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nToolstringTemplateToolsTable.propTypes = {\r\n toolstringItems: PropTypes.instanceOf(Collection),\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(ToolstringTemplateToolsTable);\r\n","import { useCallback } from 'react';\r\n\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\nimport ToolstringTemplateToolsTable from 'features/projects/tasks/task/toolstring/components/ToolstringTemplateToolsTable';\r\n\r\nconst ToolstringTemplateTableRow = ({ item, ...rest }) => {\r\n const renderDetails = useCallback(\r\n (isRowExpanded) => {\r\n return isRowExpanded ? (\r\n \r\n ) : null;\r\n },\r\n [item],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ToolstringTemplateTableRow;\r\n","import { useMemo } from 'react';\r\nimport { Button } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport TableHeaderTitleCell from 'app/components/TableHeaderTitleCell';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport ToolstringTemplateTableRow from 'features/projects/tasks/task/toolstring/components/ToolstringTemplateTableRow';\r\n\r\nconst ToolstringTemplatesTable = ({ onCreate, templates }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 10,\r\n id: 'name',\r\n Header: ,\r\n accessor: (template) => template.get('name'),\r\n },\r\n {\r\n id: 'button',\r\n Cell: ({ row }) => (\r\n onCreate(row.original.get('id'))}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n size=\"small\"\r\n >\r\n Use\r\n \r\n ),\r\n },\r\n ],\r\n [onCreate],\r\n );\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ToolstringTemplatesTable;\r\n","import { compose } from 'redux';\r\nimport { Formik, Form } from 'formik';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Dialog, Grid, Button, DialogContent } from '@material-ui/core';\r\nimport * as yup from 'yup';\r\n\r\nimport {\r\n Tab,\r\n Tabs,\r\n withModal,\r\n ModalHeader,\r\n ModalActions,\r\n LoadingButton,\r\n LoadingOverlay,\r\n} from 'altus-ui-components';\r\n\r\n\r\nimport {\r\n submitCreateToolstringForTask,\r\n submitCreateToolstringFromTemplateForTask,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { MODAL } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport { getToolstringTemplatesFromState } from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\nimport CreateToolstringForm from 'features/projects/tasks/task/toolstring/components/create/CreateToolstringForm';\r\nimport ToolstringTemplatesTable from 'features/projects/tasks/task/toolstring/components/ToolstringTemplatesTable';\r\nimport { TOOLSTRING_FORMS as FORM } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nconst BHA_OPTIONS = {\r\n NEW: 1,\r\n TEMPLATE: 2,\r\n};\r\n\r\nconst bhaValidationSchema = yup.object().shape({\r\n [FORM.CREATE_TOOLSTRING_FORM.TOOLSTRING_NAME]: yup.string().required('Required'), \r\n});\r\n\r\nclass CreateToolstringModal extends PureComponent {\r\n state = {\r\n tab: BHA_OPTIONS.NEW,\r\n };\r\n\r\n onSubmitNew = (toolstring, { setSubmitting, setStatus }) => {\r\n const { taskId, projectId, dispatchCreateToolstringForTask } = this.props;\r\n\r\n dispatchCreateToolstringForTask(\r\n projectId,\r\n taskId,\r\n toolstring,\r\n setSubmitting,\r\n setStatus,\r\n );\r\n };\r\n\r\n onSubmitFromTemplate = (toolstringTemplateId) => {\r\n const { taskId, projectId, dispatchCreateToolstringFromTemplateForTask } =\r\n this.props;\r\n\r\n dispatchCreateToolstringFromTemplateForTask(\r\n projectId,\r\n taskId,\r\n toolstringTemplateId,\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n open,\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n toggleModal,\r\n bhaTemplates,\r\n dispatchGetTemplates,\r\n projectWellboreDetailId,\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n this.setState({ tab: value })}\r\n centered\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {this.state.tab === BHA_OPTIONS.TEMPLATE && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {this.state.tab === BHA_OPTIONS.NEW && (\r\n \r\n {({ handleSubmit, isSubmitting }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Create\r\n \r\n \r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = () => ({\r\n root: {\r\n height: '75vh',\r\n },\r\n});\r\n\r\nexport default compose(\r\n withStyles(styles),\r\n withModal(MODAL.CREATE_TOOLSTRING_MODAL_ID),\r\n connect(\r\n (state) => ({\r\n bhaTemplates: getToolstringTemplatesFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_TEMPLATES,\r\n ),\r\n }),\r\n {\r\n dispatchCreateToolstringForTask: submitCreateToolstringForTask,\r\n dispatchCreateToolstringFromTemplateForTask:\r\n submitCreateToolstringFromTemplateForTask,\r\n },\r\n ),\r\n)(CreateToolstringModal);\r\n","import { useMemo, useCallback } from 'react';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { IconButton } from '@material-ui/core';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\n\r\nimport { FavoriteButton } from 'altus-ui-components';\r\n\r\nimport CardNavigationItem from 'app/components/CardNavigationItem/CardNavigationItem';\r\n\r\nconst ToolstringCardNavigationItem = ({\r\n to,\r\n onEdit,\r\n classes,\r\n onDelete,\r\n toolstring,\r\n onDuplicate,\r\n toggleFavorite,\r\n}) => {\r\n const data = useMemo(\r\n () => [\r\n {\r\n key: 'Cable',\r\n value: toolstring.getIn(['cable', 'name']) || 'No Cable',\r\n },\r\n {\r\n key: 'Modified',\r\n value: toolstring.get('modified').fromNow(),\r\n },\r\n ],\r\n [toolstring],\r\n );\r\n\r\n const renderHeaderAction = useCallback(() => {\r\n if (toolstring.get('isPlanned')) {\r\n return (\r\n /* Wrap in IconButton so it looks/positions similarly to FavoriteButton */\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }, [toolstring, toggleFavorite, classes]);\r\n\r\n // TODO: we need to disable some actions buttons based on permissions.\r\n // Will do this later, since in this case we will probably need to refactor or add\r\n // another HasProjectPermission component with a render method that provides multiple permissions verification\r\n const actions = useMemo(\r\n () =>\r\n [\r\n {\r\n Icon: EditIcon,\r\n title: 'Edit',\r\n disabled: toolstring.get('isPlanned'),\r\n onClick: onEdit,\r\n },\r\n {\r\n Icon: DuplicateIcon,\r\n title: 'Duplicate',\r\n onClick: onDuplicate,\r\n },\r\n {\r\n Icon: DeleteIcon,\r\n title: 'Delete',\r\n disabled: toolstring.get('isPlanned'),\r\n onClick: onDelete,\r\n },\r\n ].filter((action) => !!action.onClick),\r\n [onEdit, onDuplicate, onDelete, toolstring],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n plannedIcon: {\r\n '&:disabled': {\r\n color: theme.palette.text.primary,\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ToolstringCardNavigationItem);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport routePaths from 'app/routePaths';\r\nimport { PureComponent } from 'react';\r\nimport { Grid, Box, Divider } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Switch, Redirect, matchPath } from 'react-router-dom';\r\n\r\nimport {\r\n Menu,\r\n MenuHeader,\r\n LoadingOverlay,\r\n RouteContainer,\r\n withToggleModal,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n requestToolstringTemplates,\r\n redirectToTaskToolstringEdit,\r\n requestToogleToolstringFavorite,\r\n requestTaskToolstringsPageOnLoad,\r\n requestDeleteToolstringAndRedirect,\r\n requestDuplicateToolstringAndRedirect,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { toTaskToolstring } from 'utils/route.util';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { MODAL } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport { getTaskToolstringsFromState } from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\nimport NoToolstringSelectedPage from 'features/projects/tasks/task/toolstring/components/NoToolstringSelectedPage';\r\nimport CreateToolstringModal from 'features/projects/tasks/task/toolstring/components/create/CreateToolstringModal';\r\nimport ToolstringCardNavigationItem from 'features/projects/tasks/task/toolstring/components/ToolstringCardNavigationItem';\r\n\r\nclass TaskToolstringsContainer extends PureComponent {\r\n componentDidMount() {\r\n const { dispatchOnLoad, projectId, taskId } = this.props;\r\n\r\n dispatchOnLoad(projectId, taskId);\r\n }\r\n\r\n toggleModal = () => {\r\n const { dispatchToggleModal, dispatchGetToolstringTemplates } = this.props;\r\n dispatchGetToolstringTemplates();\r\n dispatchToggleModal({ modalId: MODAL.CREATE_TOOLSTRING_MODAL_ID });\r\n };\r\n\r\n renderMenuItem = (toolstring) => {\r\n const {\r\n taskId,\r\n pathname,\r\n projectId,\r\n dispatchToggleToolstringFavorite,\r\n dispatchDeleteToolstringAndRedirect,\r\n dispatchRedirectToTaskToolstringEdit,\r\n dispatchDuplicateToolstringAndRedirect,\r\n } = this.props;\r\n\r\n const currentPathMatch = matchPath(pathname, {\r\n path: routePaths.plan.task.toolstring.index,\r\n });\r\n\r\n if (!currentPathMatch) return null;\r\n\r\n const { toolstringId: selectedToolstringId } = currentPathMatch.params;\r\n const toolstringId = toolstring.get('id');\r\n\r\n const to = toTaskToolstring(projectId, taskId, toolstringId);\r\n\r\n return (\r\n \r\n \r\n dispatchDuplicateToolstringAndRedirect(\r\n projectId,\r\n taskId,\r\n toolstring.get('id'),\r\n )\r\n }\r\n onDelete={() =>\r\n dispatchDeleteToolstringAndRedirect(\r\n projectId,\r\n taskId,\r\n toolstring.get('id'),\r\n selectedToolstringId,\r\n )\r\n }\r\n toggleFavorite={() =>\r\n dispatchToggleToolstringFavorite(projectId, taskId, toolstringId)\r\n }\r\n onEdit={() =>\r\n dispatchRedirectToTaskToolstringEdit(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n )\r\n }\r\n />\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { path, routes, taskId, classes, projectId, dataState, toolstrings } =\r\n this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n this.renderMenuItem(item)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {!!toolstrings.size && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = () => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n menuContainer: {\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nTaskToolstringsContainer.defaultProps = {\r\n toolstrings: EMPTY_LIST,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { taskId }) => ({\r\n toolstrings: getTaskToolstringsFromState(state, taskId),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.GET_TOOLSTRING_FOR_TASK,\r\n TOOLSTRING_ACTIONS.REQUEST_TASK_TOOLSTRINGS_PAGE_ON_LOAD,\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_FOR_TASK_AND_REDIRECT,\r\n TOOLSTRING_ACTIONS.REQUEST_DUPLICATE_TOOLSTRING_FOR_TASK_AND_REDIRECT,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: requestTaskToolstringsPageOnLoad,\r\n dispatchGetToolstringTemplates: requestToolstringTemplates,\r\n dispatchToggleToolstringFavorite: requestToogleToolstringFavorite,\r\n dispatchRedirectToTaskToolstringEdit: redirectToTaskToolstringEdit,\r\n dispatchDeleteToolstringAndRedirect: requestDeleteToolstringAndRedirect,\r\n dispatchDuplicateToolstringAndRedirect:\r\n requestDuplicateToolstringAndRedirect,\r\n },\r\n ),\r\n withToggleModal,\r\n withStyles(styles),\r\n)(TaskToolstringsContainer);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport TextFieldV2 from 'app/components/form/TextFieldV2';\r\n\r\nconst EditableTitle = ({\r\n value,\r\n classes,\r\n onChange,\r\n InputProps = {},\r\n ...rest\r\n}) => (\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n input: {\r\n ...theme.typography.h5,\r\n 'padding': theme.spacing(1),\r\n 'fontWeight': theme.typography.fontWeightMedium,\r\n '&:disabled': {\r\n color: theme.palette.text.primary,\r\n },\r\n '&:hover:not(:disabled) + $notchedOutline': {\r\n borderWidth: 1,\r\n },\r\n '&:focus:not(:disabled) + $notchedOutline': {\r\n borderWidth: 1,\r\n },\r\n },\r\n notchedOutline: {\r\n borderWidth: 0,\r\n },\r\n});\r\n\r\nEditableTitle.propTypes = {\r\n value: PropTypes.string,\r\n onChange: PropTypes.func,\r\n};\r\n\r\nexport default compose(withStyles(styles))(EditableTitle);\r\n","import { memo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Map } from 'immutable';\r\nimport PropTypes from 'prop-types';\r\nimport { Form, Formik, Field } from 'formik';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Box, Grid, Button, Tooltip } from '@material-ui/core';\r\n\r\nimport { FavoriteButton, LoadingButton } from 'altus-ui-components';\r\n\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nimport EditableTitle from 'app/components/EditableTitle';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n EMPTY_MAP,\r\n WORK_ITEM_STATUS,\r\n ProjectPermission,\r\n} from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { requestRunSimulation } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { hasPlannedSimulationForTaskSelection } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport { PlannedIndicator } from 'features/projects/execution/components/PlannedIndicator';\r\n\r\nconst FormFields = {\r\n name: 'name',\r\n};\r\n\r\nconst SimulationHeader = ({\r\n task,\r\n classes,\r\n actions = [],\r\n onNameChange,\r\n togglePlanned,\r\n toggleFavorite,\r\n simulation = EMPTY_MAP,\r\n isEnableSimulationRunButton = true,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const taskId = simulation.get('taskId');\r\n const projectId = simulation.get('projectId');\r\n const simulationId = simulation.get('simulationId');\r\n const isPlanned = simulation.get('isPlanned', false);\r\n const canResimulate = simulation.get('canResimulate', false);\r\n const runSimulationDataState = useSelector((state) =>\r\n getActionDataStateFromState(state, ACTIONS.REQUEST_RUN_SIMULATION),\r\n );\r\n const hasExistingPlanned = useSelector((state) =>\r\n taskId ? hasPlannedSimulationForTaskSelection(state, taskId) : false,\r\n );\r\n\r\n const taskStatus = task?.get('status');\r\n const disableEditing = taskStatus && taskStatus >= WORK_ITEM_STATUS.COMPLETED;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {({ field }) => (\r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n {actions.map(\r\n ({ Icon, onClick, title, disabled, disabledTooltip }, index) => (\r\n \r\n
\r\n }\r\n classes={{\r\n label: classes.label,\r\n }}\r\n >\r\n {title}\r\n \r\n
\r\n \r\n ),\r\n )}\r\n {isEnableSimulationRunButton && (\r\n \r\n \r\n \r\n \r\n dispatch(\r\n requestRunSimulation(projectId, taskId, simulationId),\r\n )\r\n }\r\n >\r\n Simulate Run\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n label: {\r\n // this will prevent uppercase on action labels\r\n textTransform: 'none',\r\n },\r\n checkedRadio: {\r\n '& svg:last-child': {\r\n color: theme.altus.components.SimulationDashboard.header.checked,\r\n },\r\n },\r\n});\r\n\r\nSimulationHeader.propTypes = {\r\n simulation: PropTypes.instanceOf(Map),\r\n toggleFavorite: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(SimulationHeader);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getToolImagesFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolImages']),\r\n (toolImages) => toolImages,\r\n);\r\n\r\nexport const getToolImportsFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolImports']),\r\n (toolImports) => toolImports,\r\n);\r\n\r\nexport const getToolsSearchResultFromState = createSelector(\r\n (state) => state.getIn(['tool', 'search']),\r\n (tools) => tools.toList(),\r\n);\r\n\r\nexport const getCablesFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'cables']),\r\n (cables) => cables.toList(),\r\n);\r\n\r\nexport const getToolGroupsFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolGroups']),\r\n (toolGroups) => toolGroups,\r\n);\r\n\r\nexport const getToolConnectorsFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolConnectors']),\r\n (toolConnectors) => toolConnectors,\r\n);\r\n\r\nexport const getToolTopConnectorsFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolTopConnectors']),\r\n (toolTopConnectors) => toolTopConnectors,\r\n);\r\n\r\nexport const getToolSuppliersFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolSuppliers']),\r\n (toolSuppliers) => toolSuppliers,\r\n);\r\n\r\nexport const getToolBottomConnectorsFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolBottomConnectors']),\r\n (toolBottomConnectors) => toolBottomConnectors,\r\n);\r\n\r\nexport const getToolProjectHistoryFromState = createSelector(\r\n (state) => state.getIn(['tool', 'data', 'toolProjectHistory']),\r\n (projects) => projects,\r\n);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport PropTypes from 'prop-types';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, CircularProgress } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst CablePickerModalTable = ({\r\n loading,\r\n onSelectCable,\r\n cables = EMPTY_LIST,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: true,\r\n id: 'referenceNumber',\r\n Header: 'M3 Item No.',\r\n accessor: (cable) => cable.get('referenceNumber'),\r\n },\r\n {\r\n xs: 3,\r\n id: 'cableName',\r\n Header: 'Cable',\r\n accessor: (cable) => cable.get('name'),\r\n },\r\n {\r\n xs: 1,\r\n id: 'cableType',\r\n Header: 'Type',\r\n accessor: (cable) => cable.get('typeName'),\r\n },\r\n {\r\n xs: true,\r\n id: 'nominalDiameter',\r\n Header: 'Nominal Dia.',\r\n sortType: 'basic',\r\n accessor: (cable) =>\r\n `${cable?.getIn(\r\n ['nominalDiameter', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['nominalDiameter', 'unit'])}`,\r\n },\r\n {\r\n xs: true,\r\n id: 'weightInAir',\r\n Header: 'Weight in Air',\r\n sortType: 'basic',\r\n accessor: (cable) =>\r\n `${cable?.getIn(\r\n ['weightInAir', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['weightInAir', 'unit'])}`,\r\n },\r\n {\r\n xs: true,\r\n id: 'stretch',\r\n Header: 'Stretch',\r\n sortType: 'basic',\r\n accessor: (cable) => {\r\n const weightKey = cable.get('stretch')\r\n ? 'stretch'\r\n : 'stretchCoefficient';\r\n const roundedValue = cable?.getIn([weightKey, 'roundedValue'], null);\r\n const unit = cable?.getIn([weightKey, 'unit']);\r\n return `${roundedValue} ${unit}`;\r\n },\r\n },\r\n {\r\n xs: true,\r\n id: 'strength',\r\n Header: 'Breaking Strength',\r\n sortType: 'basic',\r\n accessor: (cable) =>\r\n `${cable?.getIn(['strength', 'roundedValue'], null)} ${cable?.getIn([\r\n 'strength',\r\n 'unit',\r\n ])}`,\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n action: {\r\n paddingTop: theme.spacing(1),\r\n paddingBottom: theme.spacing(1),\r\n },\r\n});\r\n\r\nCablePickerModalTable.propTypes = {\r\n cables: PropTypes.instanceOf(List),\r\n};\r\n\r\nexport default compose(withStyles(styles))(CablePickerModalTable);\r\n","import { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst CablePickerModalHeader = ({ onClose }) => (\r\n \r\n \r\n Select Cable\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CablePickerModalHeader;\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport CablePickerModalTable from 'features/projects/tool/components/CablePickerModalTable';\r\nimport CablePickerModalHeader from 'features/projects/tool/components/CablePickerModalHeader';\r\n\r\nconst CablePickerModal = ({\r\n open,\r\n cables,\r\n onClose,\r\n onEnter,\r\n classes,\r\n loading,\r\n onSelectCable,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '75vh',\r\n },\r\n content: {\r\n padding: `0px ${theme.spacing(3)}px`,\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CablePickerModal);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { TOOL_ACTIONS } from 'features/projects/tool/tool.constants';\r\nimport { getCablesFromState } from 'features/projects/tool/tool.selector';\r\nimport CablePickerModal from 'features/projects/tool/components/CablePickerModal';\r\nimport { requestCablesByProject } from 'features/projects/tool/tool.actions';\r\n\r\nconst CablePickerModalContainer = ({\r\n open,\r\n cables,\r\n toggleModal,\r\n onSelectCable,\r\n dispatchOnLoad,\r\n loadingDataState,\r\n projectId,\r\n}) => (\r\n dispatchOnLoad(projectId)}\r\n onSelectCable={onSelectCable}\r\n loading={loadingDataState.isLoading()}\r\n />\r\n);\r\n\r\nCablePickerModalContainer.defaultProps = {\r\n cables: EMPTY_LIST,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n cables: getCablesFromState(state),\r\n loadingDataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOL_ACTIONS.REQUEST_CABLES_BY_PROJECT,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: (projectId) => requestCablesByProject(projectId),\r\n },\r\n ),\r\n)(CablePickerModalContainer);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport { Typography, LinearProgress, Grid, Fade } from '@material-ui/core';\r\n\r\nconst SimulationLinearProgress = ({ classes, runSimulationDataState }) => {\r\n if (!runSimulationDataState.isLoading()) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Simulating run... please wait\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n position: 'absolute',\r\n zIndex: theme.zIndex.modal,\r\n color: theme.palette.common.white,\r\n background: `${theme.palette.common.black}0004d`,\r\n },\r\n progress: {\r\n height: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SimulationLinearProgress);\r\n","import { compose } from 'redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { toWellbore } from 'utils/route.util';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst projectDetails = [\r\n {\r\n label: 'Project',\r\n accessor: (project) => project.get('id'),\r\n },\r\n {\r\n label: 'Client',\r\n accessor: (project) => project.get('operator'),\r\n },\r\n {\r\n label: 'Field',\r\n accessor: (project) => project.get('fieldName'),\r\n },\r\n {\r\n label: 'Facility',\r\n accessor: (project) => project.get('facilityName'),\r\n },\r\n {\r\n label: 'Well',\r\n accessor: (project) => project.get('wellboreName'),\r\n to: (project) =>\r\n toWellbore(project.get('fieldId'), project.get('wellboreId')),\r\n target: '_blank',\r\n },\r\n];\r\n\r\nconst TaskSimulationDetails = ({\r\n classes,\r\n task = EMPTY_MAP,\r\n project = EMPTY_MAP,\r\n}) => (\r\n \r\n {projectDetails.map(({ accessor, to, label, target }, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingRight: theme.spacing(3),\r\n paddingLeft: theme.spacing(3),\r\n },\r\n field: {\r\n paddingRight: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(TaskSimulationDetails);\r\n","import { compose } from 'redux';\r\nimport { InputAdornment } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\r\n\r\nimport TextFieldV2 from 'app/components/form/TextFieldV2';\r\n\r\nconst TextFieldCustomSelect = ({\r\n value,\r\n onClick,\r\n classes,\r\n disabled,\r\n InputProps,\r\n ...rest\r\n}) => {\r\n const handleOnClick = () => !disabled && onClick();\r\n\r\n return (\r\n \r\n \r\n \r\n ),\r\n ...InputProps,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n inputHover: {\r\n '&:hover:not(:disabled)': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(TextFieldCustomSelect);\r\n","import { Map } from 'immutable';\r\nimport PropTypes from 'prop-types';\r\nimport { Grid, Divider } from '@material-ui/core';\r\n\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst details = [\r\n {\r\n label: 'Type',\r\n accessor: (cable) => cable.get('typeName'),\r\n render: ({ value, label }) => (\r\n \r\n ),\r\n },\r\n {\r\n label: (cable) =>\r\n `Nominal Diameter (${cable?.getIn(['nominalDiameter', 'unit'], null)})`,\r\n accessor: (cable) =>\r\n `${cable?.getIn(['nominalDiameter', 'roundedValue'], null)}`,\r\n render: ({ value, label }) => (\r\n \r\n ),\r\n },\r\n {\r\n label: (cable) =>\r\n `Weight in Air (${cable?.getIn(['weightInAir', 'unit'], null)})`,\r\n accessor: (cable) =>\r\n `${cable?.getIn(['weightInAir', 'roundedValue'], null)}`,\r\n render: ({ value }) => (\r\n \r\n ),\r\n },\r\n {\r\n label: (cable) =>\r\n `Stretch coef.(${cable?.getIn(\r\n ['stretch', 'unit'],\r\n cable?.getIn(['stretchCoefficient', 'unit']),\r\n )})`,\r\n accessor: (cable) => {\r\n const weightKey = cable.get('stretch') ? 'stretch' : 'stretchCoefficient';\r\n const roundedValue = cable?.getIn([weightKey, 'roundedValue'], null);\r\n const unit = cable?.getIn([weightKey, 'unit']);\r\n return `${roundedValue} ${unit}`;\r\n },\r\n render: ({ value, label }) => (\r\n \r\n ),\r\n },\r\n {\r\n label: (cable) =>\r\n `Breaking Strength (${cable?.getIn(['strength', 'unit'], 'kgf')})`,\r\n accessor: (cable) => `${cable?.getIn(['strength', 'roundedValue'], null)}`,\r\n render: ({ value }) => (\r\n \r\n ),\r\n },\r\n {\r\n label: (cable) =>\r\n `Safe Working Load (${cable?.getIn(['safeWorkingLoad', 'unit'], 'kgf')})`,\r\n accessor: (cable) =>\r\n `${cable?.getIn(['safeWorkingLoad', 'roundedValue'], null)}`,\r\n render: ({ value }) => (\r\n \r\n ),\r\n },\r\n];\r\n\r\nconst CableDetails = ({ cable }) => (\r\n \r\n {details.map(({ accessor, render, label }, index) => (\r\n \r\n {render({ value: accessor(cable), label })}\r\n \r\n \r\n ))}\r\n \r\n);\r\n\r\nCableDetails.propTypes = {\r\n toolstring: PropTypes.instanceOf(Map),\r\n};\r\n\r\nexport default CableDetails;\r\n","import { Map } from 'immutable';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Grid, Tooltip } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport TextFieldCustomSelect from 'app/components/TextFieldCustomSelect';\r\nimport CableDetails from 'features/projects/tool/components/CableDetails';\r\n\r\nconst TaskSimulationCableSelect = ({\r\n classes,\r\n onClick,\r\n disabled,\r\n selectedCable,\r\n}) => (\r\n : 'No Cable'}\r\n >\r\n \r\n {disabled && (\r\n \r\n )}\r\n {!disabled && (\r\n \r\n )}\r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n cableTooltip: {\r\n padding: theme.spacing(1),\r\n background: theme.palette.background.paper,\r\n maxWidth: 200,\r\n },\r\n});\r\n\r\nTaskSimulationCableSelect.propTypes = {\r\n disabled: PropTypes.bool,\r\n onClick: PropTypes.func.isRequired,\r\n selectedCable: PropTypes.instanceOf(Map),\r\n};\r\n\r\nexport default compose(withStyles(styles))(TaskSimulationCableSelect);\r\n","import _isNil from 'lodash/isNil';\r\nimport { useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Highcharts from 'highcharts';\r\nimport { Collection } from 'immutable';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport {\r\n getSimulationChartSeries,\r\n getSimulationCompressionDepthSeries,\r\n} from 'features/projects/tasks/task/simulation/simulation.utils';\r\nimport {\r\n SimulationCharts,\r\n SimulationDirection,\r\n SimulationResultSeries,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst SimulationResultsChart = ({\r\n tab,\r\n simulationResults,\r\n simulationResultsRih = EMPTY_MAP,\r\n simulationResultsPooh = EMPTY_MAP,\r\n operationLoadPercent,\r\n}) => {\r\n const theme = useTheme();\r\n const { label, activeSeries } = tab;\r\n const chartRef = useRef(null);\r\n const tabKey = useRef(null);\r\n const [chartOptions, setChartOptions] = useState({ series: {}, chart: {} });\r\n\r\n useEffect(() => {\r\n const depthUnit = getQuantityUnitFromItems(\r\n simulationResults !== EMPTY_MAP\r\n ? simulationResults\r\n : simulationResultsRih,\r\n (result) => result.get('measuredDepth'),\r\n );\r\n\r\n const xLabel = (tab) => {\r\n const path = SimulationCharts.find((c) => c.key === tab.key)?.unit;\r\n if (!_isNil(path)) {\r\n const u = getQuantityUnitFromItems(\r\n simulationResults !== EMPTY_MAP\r\n ? simulationResults\r\n : simulationResultsRih,\r\n (result) => result.getIn(path),\r\n );\r\n return `${label} (${u})`;\r\n }\r\n return label;\r\n };\r\n\r\n let simulationChartSeries;\r\n\r\n if (simulationResults !== EMPTY_MAP) {\r\n simulationChartSeries = getSimulationChartSeries(\r\n simulationResults,\r\n operationLoadPercent,\r\n )\r\n .filter((series) => activeSeries?.includes(series.id))\r\n .map((series) =>\r\n tab.key === tabKey.current\r\n ? { id: series.id, data: series.data } // Only update data when tab is unchanged\r\n : series,\r\n ); // Set series to initial configuration on a new tab\r\n } else {\r\n let simulationChartSeriesRih;\r\n let simulationChartSeriesPooh;\r\n\r\n if (simulationResultsRih !== EMPTY_MAP) {\r\n simulationChartSeriesRih = getSimulationChartSeries(\r\n simulationResultsRih,\r\n operationLoadPercent,\r\n undefined,\r\n SimulationDirection.RUN_IN_HOLE,\r\n )\r\n .filter((series) => activeSeries?.includes(series.id))\r\n .map((series) =>\r\n tab.key === tabKey.current\r\n ? { id: series.id, data: series.data } // Only update data when tab is unchanged\r\n : series,\r\n ); // Set series to initial configuration on a new tab\r\n }\r\n\r\n if (simulationResultsPooh !== EMPTY_MAP) {\r\n simulationChartSeriesPooh = getSimulationChartSeries(\r\n simulationResultsPooh,\r\n operationLoadPercent,\r\n undefined,\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n )\r\n .filter((series) => activeSeries?.includes(series.id))\r\n .map((series) =>\r\n tab.key === tabKey.current\r\n ? { id: series.id, data: series.data } // Only update data when tab is unchanged\r\n : series,\r\n ); // Set series to initial configuration on a new tab\r\n }\r\n\r\n simulationChartSeries = [\r\n ...simulationChartSeriesRih,\r\n ...simulationChartSeriesPooh,\r\n ];\r\n }\r\n\r\n // Add compression depth if it is defined on the tab\r\n if (!_isNil(tab.compressionDepth)) {\r\n tab.compressionDepth.forEach((compression) => {\r\n const compressionSeries = getSimulationCompressionDepthSeries(\r\n compression.series + SimulationResultSeries.COMPRESSION_DEPTH,\r\n compression.direction,\r\n simulationResults, // TODO check what results to display\r\n compression.value,\r\n );\r\n if (!_isNil(compressionSeries)) {\r\n simulationChartSeries = [...simulationChartSeries, compressionSeries];\r\n }\r\n });\r\n }\r\n\r\n var result = {\r\n series: simulationChartSeries,\r\n chart: {\r\n inverted: true,\r\n backgroundColor: theme.palette.grey[800],\r\n },\r\n yAxis: [\r\n {\r\n allowDecimals: false,\r\n gridLineDashStyle: 'ShortDash',\r\n gridLineColor: theme.palette.grey[700],\r\n title: {\r\n text: xLabel(tab),\r\n },\r\n plotLines: [\r\n {\r\n value: 0,\r\n width: 2,\r\n color: theme.palette.grey[300],\r\n },\r\n ],\r\n },\r\n ],\r\n xAxis: {\r\n min: 0,\r\n gridLineWidth: 1,\r\n allowDecimals: false,\r\n gridLineDashStyle: 'ShortDash',\r\n gridLineColor: theme.palette.grey[700],\r\n max: simulationResults.keySeq().last(), // TODO check what results to display\r\n title: {\r\n text: `Tool Depth (${depthUnit})`,\r\n },\r\n },\r\n legend: {\r\n shadow: false,\r\n align: 'right',\r\n layout: 'vertical',\r\n verticalAlign: 'top',\r\n backgroundColor: 'transparent',\r\n },\r\n tooltip: {\r\n shared: true,\r\n crosshairs: true,\r\n formatter() {\r\n let format = `Depth: ${formatValue(this.x, depthUnit)}`;\r\n\r\n this.points.forEach((point) => {\r\n const { series, y } = point;\r\n const {\r\n color,\r\n name,\r\n options: {\r\n custom: { unit, tooltip = true },\r\n },\r\n } = series;\r\n if (tooltip) {\r\n const formattedValue = formatValue(y, unit);\r\n format += `
${name}: ${formattedValue}`;\r\n }\r\n });\r\n\r\n return format;\r\n },\r\n positioner: function (w, h, point) {\r\n this.chart.pointer.chartPosition = null;\r\n return this.getPosition(w, h, point);\r\n },\r\n },\r\n plotOptions: {\r\n line: {\r\n marker: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n title: {\r\n text: null,\r\n },\r\n };\r\n\r\n setChartOptions(result);\r\n tabKey.current = tab.key;\r\n }, [\r\n tab,\r\n label,\r\n theme.palette.grey,\r\n tab.key,\r\n tab.compressionDepth,\r\n activeSeries,\r\n operationLoadPercent,\r\n simulationResults,\r\n simulationResultsRih,\r\n simulationResultsPooh,\r\n ]);\r\n\r\n // reset tab key to reset the data filtered only in case simulationData have changed\r\n useEffect(() => {\r\n tabKey.current = null;\r\n }, [simulationResults, simulationResultsRih, simulationResultsPooh]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nSimulationResultsChart.propTypes = {\r\n simulationResults: PropTypes.instanceOf(Collection),\r\n simulationResultsRih: PropTypes.instanceOf(Collection),\r\n simulationResultsPooh: PropTypes.instanceOf(Collection),\r\n tab: PropTypes.shape({\r\n key: PropTypes.string,\r\n title: PropTypes.string,\r\n label: PropTypes.string,\r\n activeSeries: PropTypes.arrayOf(\r\n PropTypes.oneOf(Object.values(SimulationResultSeries)),\r\n ),\r\n }).isRequired,\r\n};\r\n\r\nexport default SimulationResultsChart;\r\n","import TableHeaderTitleCell from 'app/components/TableHeaderTitleCell';\r\n\r\nconst QuantityTableHeaderTitleCell = ({ unit, ...rest }) => {\r\n const subTitle = unit ? `(${unit})` : undefined;\r\n\r\n return ;\r\n};\r\n\r\nexport default QuantityTableHeaderTitleCell;\r\n","import { withStyles } from '@material-ui/core';\r\nimport { TableCell } from 'altus-ui-components';\r\n\r\nconst SimulationResultsTableCell = ({ classes, ...rest }) => (\r\n \r\n);\r\n\r\nconst styles = () => ({\r\n cell: {\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SimulationResultsTableCell);\r\n","import { withStyles } from '@material-ui/core';\r\nimport { TableHeaderCell } from 'altus-ui-components';\r\n\r\nconst SimulationResultsTableHeaderCell = ({ classes, ...rest }) => (\r\n \r\n);\r\n\r\nconst styles = () => ({\r\n cell: {\r\n justifyContent: 'center',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SimulationResultsTableHeaderCell);\r\n","import { memo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableHeaderRow } from 'altus-ui-components';\r\nimport SimulationResultsTableHeaderCell from 'features/projects/tasks/task/simulation/components/SimulationResultsTableHeaderCell';\r\n\r\nconst SimulationResultsTableHeader = ({ classes, headerGroups }) => (\r\n \r\n {headerGroups.map((headerGroup) => {\r\n const { headers, getHeaderGroupProps } = headerGroup;\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n headersContainer: {\r\n top: 0,\r\n zIndex: 2,\r\n position: 'sticky',\r\n marginBottom: theme.spacing(0.5),\r\n borderBottom: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n headerRow: {\r\n border: 'none',\r\n margin: 0,\r\n },\r\n});\r\n\r\nexport default compose(memo, withStyles(styles))(SimulationResultsTableHeader);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { useMemo, memo } from 'react';\r\nimport { Collection } from 'immutable';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { formatValue } from 'utils/format.util';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport TableHeaderTitleCell from 'app/components/TableHeaderTitleCell';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport SimulationResultsTableCell from 'features/projects/tasks/task/simulation/components/SimulationResultsTableCell';\r\nimport SimulationResultsTableHeader from 'features/projects/tasks/task/simulation/components/SimulationResultsTableHeader';\r\n\r\nconst SimulationResultsTable = ({ simulationResults = EMPTY_MAP }) => {\r\n const depthUnit = getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.get('measuredDepth'),\r\n );\r\n\r\n const forceUnit = getQuantityUnitFromItems(simulationResults, (result) =>\r\n result.getIn(['runInHole', 'surfaceTension']),\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 4,\r\n Header: '',\r\n id: 'column1',\r\n columns: [\r\n {\r\n xs: 2,\r\n id: 'measuredDepth',\r\n Header: () => (\r\n \r\n ),\r\n accessor: (simulationResult) =>\r\n formatValue(simulationResult.getIn(['measuredDepth', 'value'])),\r\n },\r\n {\r\n xs: 2,\r\n id: 'runInHole.tractorForce',\r\n Header: () => (\r\n \r\n ),\r\n accessor: (simulationResult) =>\r\n formatValue(\r\n simulationResult.getIn(['runInHole', 'tractorForce', 'value']),\r\n ),\r\n },\r\n ],\r\n },\r\n {\r\n xs: 4,\r\n id: 'surfaceTension',\r\n Header: () => ,\r\n columns: [\r\n {\r\n xs: 2,\r\n id: 'runInHole.surfaceTension',\r\n Header: () => (\r\n \r\n ),\r\n accessor: (simulationResult) =>\r\n formatValue(\r\n simulationResult.getIn([\r\n 'runInHole',\r\n 'surfaceTension',\r\n 'value',\r\n ]),\r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'pullOutOfHole.surfaceTension',\r\n Header: () => (\r\n \r\n ),\r\n accessor: (simulationResult) =>\r\n formatValue(\r\n simulationResult.getIn([\r\n 'pullOutOfHole',\r\n 'surfaceTension',\r\n 'value',\r\n ]),\r\n ),\r\n },\r\n ],\r\n },\r\n {\r\n xs: 4,\r\n id: 'column3',\r\n Header: () => ,\r\n columns: [\r\n {\r\n xs: 2,\r\n id: 'runInHole.cableHeadTension',\r\n Header: () => (\r\n \r\n ),\r\n accessor: (simulationResult) =>\r\n formatValue(\r\n simulationResult.getIn([\r\n 'runInHole',\r\n 'cableHeadTension',\r\n 'value',\r\n ]),\r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'pullOutOfHole.cableHeadTension',\r\n Header: () => (\r\n \r\n ),\r\n accessor: (simulationResult) =>\r\n formatValue(\r\n simulationResult.getIn([\r\n 'pullOutOfHole',\r\n 'cableHeadTension',\r\n 'value',\r\n ]),\r\n ),\r\n },\r\n ],\r\n },\r\n {\r\n xs: 2,\r\n Header: '',\r\n id: 'column4',\r\n columns: [\r\n {\r\n xs: 2,\r\n id: 'pullOutOfHole.maxPickupWeight',\r\n Header: () => (\r\n \r\n ),\r\n accessor: (simulationResult) =>\r\n formatValue(\r\n simulationResult.getIn([\r\n 'pullOutOfHole',\r\n 'maxPickupWeight',\r\n 'value',\r\n ]),\r\n ),\r\n },\r\n ],\r\n },\r\n ],\r\n [depthUnit, forceUnit],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nSimulationResultsTable.propTypes = {\r\n simulationResults: PropTypes.instanceOf(Collection),\r\n};\r\n\r\nexport default compose(memo)(SimulationResultsTable);\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { useSelector } from 'react-redux';\r\nimport { Link, generatePath } from 'react-router-dom';\r\nimport { memo, useState, useRef } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Fullscreen, FullscreenExit } from '@material-ui/icons';\r\nimport { Grid, Typography, IconButton } from '@material-ui/core';\r\n\r\nimport { useFullscreen } from 'altus-hooks';\r\nimport { Tab, Tabs } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { simulationDashboardRoutes } from 'app/routes';\r\nimport DashboardIcon from 'app/components/Icons/DashboardIcon';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\nimport SimulationResultsChart from 'features/projects/tasks/task/simulation/components/SimulationResultsChart';\r\nimport SimulationResultsTable from 'features/projects/tasks/task/simulation/components/SimulationResultsTable';\r\nimport {\r\n SimulationCharts,\r\n SimulationDirection,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { createSimulationResultsByDepthAndDirectionSelector } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\n\r\nconst tabs = SimulationCharts.map(({ title, ...rest }) => ({\r\n title,\r\n label: title,\r\n ...rest,\r\n}));\r\n\r\nconst SimulationResultsContainer = ({\r\n taskId,\r\n classes,\r\n projectId,\r\n simulation,\r\n simulationId,\r\n}) => {\r\n const fullScreenRef = useRef(null);\r\n const [activeTab, setActiveTab] = useState(tabs[0]);\r\n const [isFullscreen, toggleFullscreen] = useFullscreen(fullScreenRef);\r\n // table tabs\r\n const [activeTableTab, setActiveTableTab] = useState(\r\n SimulationDirection.RUN_IN_HOLE,\r\n );\r\n\r\n // for regular simulations without Set/Retreive\r\n const simulationResultsByDepth =\r\n useSelector(\r\n createSimulationResultsByDepthAndDirectionSelector(simulationId),\r\n ) ?? EMPTY_MAP;\r\n\r\n // for simulations with Set/Retreive\r\n const simulationResultsByDepthRih =\r\n useSelector(\r\n createSimulationResultsByDepthAndDirectionSelector(\r\n simulationId,\r\n SimulationDirection.RUN_IN_HOLE,\r\n ),\r\n ) ?? EMPTY_MAP;\r\n const simulationResultsByDepthPooh =\r\n useSelector(\r\n createSimulationResultsByDepthAndDirectionSelector(\r\n simulationId,\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n ),\r\n ) ?? EMPTY_MAP;\r\n\r\n if (\r\n !simulationResultsByDepth.size &&\r\n !simulationResultsByDepthRih.size &&\r\n !simulationResultsByDepthPooh.size\r\n ) {\r\n return (\r\n \r\n \r\n Click Simulate Run to display the results...\r\n \r\n \r\n );\r\n }\r\n\r\n const workingLimitSafetyFactor = simulation?.get('workingLimitSafetyFactor');\r\n\r\n const activeTableTabHandler = (activeTableTab) => {\r\n switch (activeTableTab) {\r\n default:\r\n return null;\r\n case SimulationDirection.RUN_IN_HOLE:\r\n return (\r\n \r\n );\r\n case SimulationDirection.PULL_OUT_OF_HOLE:\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n setActiveTab(tab)}\r\n >\r\n {tabs.map((tab, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n {isFullscreen ? : }\r\n \r\n \r\n \r\n validRoutes.map((route) => (\r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Multiple result set */}\r\n {simulationResultsByDepthRih !== EMPTY_MAP &&\r\n simulationResultsByDepthPooh !== EMPTY_MAP &&\r\n simulationResultsByDepth === EMPTY_MAP && (\r\n \r\n setActiveTableTab(tab)}\r\n >\r\n \r\n \r\n \r\n {activeTableTabHandler(activeTableTab)}\r\n \r\n )}\r\n\r\n {/* Single result set */}\r\n {simulationResultsByDepthRih === EMPTY_MAP &&\r\n simulationResultsByDepthPooh === EMPTY_MAP &&\r\n simulationResultsByDepth !== EMPTY_MAP && (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n noResultsMessage: {\r\n color: theme.palette.text.hint,\r\n },\r\n chart: {\r\n overflow: 'hidden',\r\n '& > div': {\r\n width: '100%',\r\n overflow: 'hidden',\r\n },\r\n },\r\n chartFullscreen: {\r\n '& > div': {\r\n height: '100%',\r\n },\r\n },\r\n chartRegular: {\r\n '& > div': {\r\n height: 750,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(memo, withStyles(styles))(SimulationResultsContainer);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Collection } from 'immutable';\r\nimport { MenuItem } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport TextFieldV2 from 'app/components/form/TextFieldV2';\r\n\r\nconst TaskSimulationToolstringSelect = ({\r\n disabled,\r\n onToolstringChange,\r\n selectedToolstringId,\r\n toolstrings = EMPTY_LIST,\r\n}) => {\r\n if (disabled) {\r\n return (\r\n x.get('id') === selectedToolstringId)\r\n ?.get('name') || 'No BHA selected'\r\n }\r\n />\r\n );\r\n }\r\n\r\n return (\r\n \r\n {toolstrings.map((toolstring) => (\r\n \r\n {toolstring.get('name')}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nTaskSimulationToolstringSelect.propTypes = {\r\n disabled: PropTypes.bool,\r\n onToolstringChange: PropTypes.func.isRequired,\r\n toolstrings: PropTypes.instanceOf(Collection),\r\n selectedToolstringId: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n ]),\r\n};\r\n\r\nexport default compose()(TaskSimulationToolstringSelect);\r\n","import {\r\n Grid,\r\n List,\r\n ListItem,\r\n Checkbox,\r\n ListItemText,\r\n ListItemIcon,\r\n} from '@material-ui/core';\r\n\r\nlet isPageLoaded = false;\r\n\r\nconst SimulationExportModalChartSelect = ({\r\n isChartSelected,\r\n availableCharts,\r\n onToggleChartSelect,\r\n unCheckItems,\r\n}) => {\r\n\r\n return (\r\n \r\n {availableCharts.map((chart) => {\r\n let check = isChartSelected(chart);\r\n\r\n if (!isPageLoaded && unCheckItems.includes(chart.chartType)) {\r\n isPageLoaded = true;\r\n check = false;\r\n }\r\n\r\n return (\r\n onToggleChartSelect(chart)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n};\r\n\r\nexport default SimulationExportModalChartSelect;\r\n","import { compose } from 'redux';\r\nimport { useMemo, useState } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ExportPdfIcon from '@material-ui/icons/PictureAsPdf';\r\n\r\nimport {\r\n Box,\r\n Button,\r\n Card,\r\n CardContent,\r\n Dialog,\r\n DialogContent,\r\n Grid,\r\n Typography,\r\n ListItem,\r\n Checkbox,\r\n ListItemText,\r\n ListItemIcon,\r\n} from '@material-ui/core';\r\n\r\nimport { ModalActions } from 'altus-ui-components';\r\nimport { useMultiselect } from 'altus-hooks';\r\n\r\nimport { UnitSystem } from 'app/app.constants';\r\nimport SimulationExportModalChartSelect from 'features/projects/tasks/task/simulation/components/SimulationExportModalChartSelect';\r\nimport { SimulationChartsType } from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nconst SimulationExportModal = ({\r\n open,\r\n onClose,\r\n classes,\r\n onExport,\r\n availableCharts,\r\n}) => {\r\n const unCheckItems = [SimulationChartsType.OVERVIEW];\r\n const [collapseAssemblies, setCollapseAssemblies] = useState(false);\r\n const toggleCollapseAssemblies = () => {\r\n setCollapseAssemblies(!collapseAssemblies);\r\n };\r\n const availableChartsSorted = useMemo(() => {\r\n return availableCharts\r\n ? availableCharts.sort((A, B) => A.chartType - B.chartType)\r\n : availableCharts;\r\n }, [availableCharts]);\r\n\r\n const {\r\n selectedItems: selectedCharts,\r\n isSelected: isChartSelected,\r\n toggleSelect: onToggleChartSelect,\r\n } = useMultiselect(availableChartsSorted);\r\n\r\n return (\r\n \r\n \r\n \r\n Export Simulation\r\n \r\n \r\n \r\n \r\n \r\n Include Details\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Toolstring Details\r\n \r\n \r\n toggleCollapseAssemblies()}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n onExport({\r\n details: selectedCharts,\r\n unitSystem: UnitSystem.METRIC,\r\n collapseAssemblies,\r\n })\r\n }\r\n disabled={!selectedCharts.size}\r\n >\r\n Export\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '65vh',\r\n },\r\n content: {\r\n padding: `0px ${theme.spacing(3)}px`,\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n actions: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n card: {\r\n marginTop: theme.spacing(2),\r\n },\r\n title: {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(SimulationExportModal);\r\n","import { compose } from 'redux';\r\nimport { Set } from 'immutable';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport reportsService from 'services/reports.service';\r\nimport { downloadSimulationPdfReport } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport SimulationExportModal from 'features/projects/tasks/task/simulation/components/SimulationExportModal';\r\n\r\nconst SimulationExportModalContainer = ({\r\n open,\r\n taskId,\r\n projectId,\r\n toggleModal,\r\n simulationId,\r\n dispatchDownloadSimulationPdfReport,\r\n}) => {\r\n const getAvailableCharts = useCallback(\r\n () =>\r\n reportsService.getSimulationReportAvailableCharts(projectId).then(Set),\r\n [projectId],\r\n );\r\n\r\n const [availableCharts, dataState] = useRequest(getAvailableCharts);\r\n\r\n const onExportSimulation = useCallback(\r\n (exportSelection) => {\r\n dispatchDownloadSimulationPdfReport(\r\n taskId,\r\n projectId,\r\n simulationId,\r\n exportSelection.details.map((chart) => chart.chartType).toArray(),\r\n exportSelection.collapseAssemblies,\r\n );\r\n toggleModal();\r\n },\r\n [\r\n taskId,\r\n projectId,\r\n toggleModal,\r\n simulationId,\r\n dispatchDownloadSimulationPdfReport,\r\n ],\r\n );\r\n\r\n if (dataState.isLoading()) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchDownloadSimulationPdfReport: downloadSimulationPdfReport,\r\n }),\r\n)(SimulationExportModalContainer);\r\n","import isNil from 'lodash/isNil';\r\nimport convert from 'convert-units';\r\nimport findKey from 'lodash/findKey';\r\n\r\nimport {\r\n UNITS,\r\n CUSTOM_UNITS,\r\n METERS_PER_FEET,\r\n CONVERT_ALIASES,\r\n CONVERT_SYSTEMS,\r\n UNITS_BY_CATEGORY,\r\n CUSTOM_UNIT_SYSTEM,\r\n} from 'app/app.constants';\r\n\r\nconst CUSTOM_UNIT_CONVERSION = {\r\n [UNITS.M_MIN]: {\r\n [CONVERT_SYSTEMS.IMPERIAL]: {\r\n [UNITS.FT_MIN]: (meters) => meters / METERS_PER_FEET,\r\n },\r\n },\r\n [UNITS.FT_MIN]: {\r\n [CONVERT_SYSTEMS.METRIC]: {\r\n [UNITS.M_MIN]: (feet) => feet * METERS_PER_FEET,\r\n },\r\n },\r\n};\r\n\r\nconst getSystemByMeasure = (measure, settings, system) => {\r\n return system === CUSTOM_UNIT_SYSTEM ? settings[measure] : system;\r\n};\r\n\r\nexport const getConversion = (from, system, settings) => {\r\n const defaultConversion = [from, (value) => value];\r\n\r\n try {\r\n const { measure } = CUSTOM_UNITS[from];\r\n const toSystem = getSystemByMeasure(measure, settings, system);\r\n const conversions = CUSTOM_UNIT_CONVERSION[from][toSystem];\r\n\r\n return conversions ? Object.entries(conversions)[0] : defaultConversion;\r\n } catch (e) {\r\n return defaultConversion;\r\n }\r\n};\r\n\r\nexport const getCorrectedUnit = (unit) =>\r\n findKey(CONVERT_ALIASES, (aliases) => aliases.includes(unit)) || unit;\r\n\r\nexport const getUnitAlias = (unit) =>\r\n CONVERT_ALIASES[unit] ? CONVERT_ALIASES[unit][0] : unit;\r\n\r\nexport const convertUnit = ({ settings, value, from, to, system }) => {\r\n if ([value, from].some((param) => isNil(param))) {\r\n return [value, from];\r\n }\r\n\r\n let convertFrom = from;\r\n let toSystem = system;\r\n\r\n try {\r\n convertFrom = getCorrectedUnit(convertFrom);\r\n\r\n const { measure } = convert().describe(convertFrom);\r\n\r\n toSystem = getSystemByMeasure(measure, settings, system);\r\n\r\n const convertTo = to || UNITS_BY_CATEGORY[measure][toSystem];\r\n\r\n const convertedValue = convertTo\r\n ? convert(value).from(convertFrom).to(convertTo)\r\n : value;\r\n\r\n const convertedUnit = getUnitAlias(convertTo);\r\n\r\n return [convertedValue, convertedUnit];\r\n } catch (e) {\r\n const [conversionUnit, conversionFunc] = getConversion(\r\n convertFrom,\r\n system,\r\n settings,\r\n );\r\n\r\n return conversionFunc\r\n ? [conversionFunc(value), conversionUnit]\r\n : [value, from];\r\n }\r\n};\r\n","import isNil from 'lodash/isNil';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { createElement } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\n\r\nimport { renderContent } from 'utils/app.util';\r\nimport { formatValue } from 'utils/format.util';\r\nimport { convertUnit } from 'utils/conversion.util';\r\nimport { getCurrentUserFromState } from 'app/app.selectors';\r\nimport { USE_PROJECT_DEFAULT_UNIT_SYSTEM } from 'app/app.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\n\r\nconst MetricImperial = ({\r\n to,\r\n from,\r\n value,\r\n dispatch,\r\n formatFn,\r\n component,\r\n renderValue,\r\n defaultValue,\r\n userMeasurementSystem,\r\n projectMeasurementSystem,\r\n userMeasurementPreferences,\r\n projectMeasurementPreferences,\r\n ...rest\r\n}) => {\r\n if ([value, from].some((param) => isNil(param))) {\r\n return defaultValue ? createElement(component, rest, defaultValue) : null;\r\n }\r\n\r\n const system =\r\n userMeasurementSystem === USE_PROJECT_DEFAULT_UNIT_SYSTEM\r\n ? projectMeasurementSystem\r\n : userMeasurementSystem;\r\n\r\n const settings =\r\n userMeasurementSystem === USE_PROJECT_DEFAULT_UNIT_SYSTEM\r\n ? projectMeasurementPreferences\r\n : userMeasurementPreferences;\r\n\r\n const [result_value, result_unit] = convertUnit({\r\n settings,\r\n system,\r\n value,\r\n from,\r\n to,\r\n });\r\n\r\n return renderValue\r\n ? renderContent(renderValue, {\r\n convertedValue: result_value,\r\n convertedUnit: result_unit,\r\n })\r\n : createElement(component, rest, formatFn(result_value, result_unit));\r\n};\r\n\r\nMetricImperial.defaultProps = {\r\n component: Typography,\r\n formatFn: (...params) => formatValue(...params, 0.001),\r\n};\r\n\r\nMetricImperial.propTypes = {\r\n value: PropTypes.number,\r\n from: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default connect((state) => ({\r\n projectMeasurementPreferences: getCurrentProject(state).get('units'),\r\n projectMeasurementSystem: getCurrentProject(state).get('unit'),\r\n userMeasurementPreferences: getCurrentUserFromState(state).get('units'),\r\n userMeasurementSystem: getCurrentUserFromState(state).get('unit'),\r\n}))(toJSComponent(MetricImperial));\r\n","import { Grid, Typography } from '@material-ui/core';\r\n\r\nimport { UNITS } from 'app/app.constants';\r\nimport MetricImperial from 'app/components/MetricImperial';\r\n\r\nexport const ToolDetails = ({ tool }) => (\r\n \r\n \r\n \r\n \r\n {tool.name}\r\n \r\n \r\n \r\n \r\n Length:\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Weight:\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Outer diameter:\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Type:\r\n \r\n \r\n {tool.toolGroupName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default ToolDetails;\r\n","import PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport loadImage from 'blueimp-load-image';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { Image } from 'app/components/withTooltip';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\n\r\nconst ToolImageContainer = ({\r\n style,\r\n title,\r\n classes,\r\n toolName,\r\n className,\r\n ImageProps,\r\n highlighted,\r\n orientation,\r\n toolImageUrl,\r\n TooltipProps,\r\n onHoverScale,\r\n onHoverDarken,\r\n assembly = false,\r\n}) => {\r\n const defaultImage = `${PUBLIC_ASSETS_URL}/images/tools/placeholder${\r\n orientation ?? ''\r\n }.png`;\r\n\r\n const [image, setImage] = useState(defaultImage);\r\n\r\n const setDefaultImage = useCallback(\r\n () => setImage(defaultImage),\r\n [defaultImage],\r\n );\r\n\r\n useEffect(() => {\r\n let isSubscribed = true;\r\n if (toolImageUrl) {\r\n loadImage(toolImageUrl, {\r\n orientation,\r\n crossOrigin: true,\r\n })\r\n .then((response) => {\r\n if (isSubscribed) {\r\n try {\r\n if (orientation) {\r\n response.image.toBlob((blob) => {\r\n if (blob) {\r\n var imageUrl;\r\n try {\r\n imageUrl = URL.createObjectURL(blob);\r\n } catch {\r\n setDefaultImage();\r\n }\r\n if (isSubscribed) {\r\n setImage(imageUrl);\r\n }\r\n } else {\r\n setDefaultImage();\r\n }\r\n });\r\n } else {\r\n setImage(toolImageUrl);\r\n }\r\n } catch {\r\n setDefaultImage();\r\n }\r\n }\r\n })\r\n .catch(() => {\r\n isSubscribed && setDefaultImage();\r\n });\r\n }\r\n return () => (isSubscribed = false);\r\n }, [orientation, setDefaultImage, toolImageUrl]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n onHighlight: {\r\n filter: 'brightness(120%)',\r\n transform: 'scale(2.0)',\r\n transition: 'transform .3s',\r\n },\r\n onHighlightAssembly: {\r\n filter: 'brightness(120%)',\r\n transition: 'transform .3s',\r\n },\r\n onHoverScale: {\r\n '&:hover': {\r\n filter: 'brightness(120%)',\r\n transform: 'scale(2.0)',\r\n transition: 'transform .3s',\r\n },\r\n },\r\n onHoverDarken: {\r\n '&:hover': {\r\n opacity: theme.palette.action.hoverOpacity,\r\n },\r\n },\r\n});\r\n\r\nToolImageContainer.propTypes = {\r\n title: PropTypes.node,\r\n toolName: PropTypes.string,\r\n highlighted: PropTypes.bool,\r\n onHoverScale: PropTypes.bool,\r\n onHoverDarken: PropTypes.bool,\r\n toolImageUrl: PropTypes.string,\r\n orientation: PropTypes.oneOf(Object.values(ExifOrientation)),\r\n};\r\n\r\nexport default withStyles(styles)(ToolImageContainer);\r\n","import { Grid } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\n\r\nimport { Typography } from 'app/components/withNavigation';\r\n\r\nconst ToolstringPreviewEmpty = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n No tools added yet\r\n \r\n \r\n \r\n);\r\n\r\nexport default ToolstringPreviewEmpty;\r\n","import PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Grid, Typography } from 'app/components/withNavigation';\r\n\r\n/**\r\n * Thumb icon to be used in the MUI Switch component for the Toolstring breakpoints.\r\n * Same as default thumb icon (taken from source code), but with the 'BR' text in it.\r\n * Ref.: https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/Switch/Switch.js\r\n */\r\nconst BreakpointThumbIcon = ({ classes, darkText, color }) => (\r\n \r\n \r\n BR\r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n borderRadius: '50%',\r\n width: theme.spacing(2),\r\n height: theme.spacing(2),\r\n boxShadow: theme.shadows[1],\r\n backgroundColor: 'currentColor',\r\n },\r\n rootPrimary: {\r\n backgroundColor: theme.palette.primary.dark,\r\n },\r\n thumbText: {\r\n fontSize: theme.spacing(1),\r\n },\r\n thumbTextDark: {\r\n color: theme.palette.secondary.dark,\r\n },\r\n});\r\n\r\nBreakpointThumbIcon.defaultProps = {\r\n color: 'default',\r\n};\r\n\r\nBreakpointThumbIcon.propTypes = {\r\n darkText: PropTypes.bool,\r\n color: PropTypes.oneOf(['default', 'primary']),\r\n};\r\n\r\nexport default withStyles(styles)(BreakpointThumbIcon);\r\n","import { memo } from 'react';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Grid, Switch } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport BreakpointThumbIcon from 'features/projects/tasks/task/toolstring/components/BreakpointThumbIcon';\r\n\r\nconst ToolstringPreviewBreakpoint = ({\r\n classes,\r\n toggleable,\r\n hasBreakpoint,\r\n onToggleBreakpoint,\r\n}) => (\r\n \r\n \r\n {!toggleable && hasBreakpoint && }\r\n {toggleable && (\r\n }\r\n icon={}\r\n />\r\n )}\r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n breakpointAnchor: {\r\n position: 'relative',\r\n },\r\n breakpoint: {\r\n zIndex: 5,\r\n left: '60%',\r\n position: 'absolute',\r\n padding: theme.spacing(1),\r\n transform: 'translateY(-50%)',\r\n },\r\n toggleable: {\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n});\r\n\r\nToolstringPreviewBreakpoint.propTypes = {\r\n hasBreakpoint: PropTypes.bool,\r\n onToggleBreakpoint: PropTypes.func,\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(ToolstringPreviewBreakpoint);\r\n","import { createContext, useState, useContext, useCallback } from 'react';\r\n\r\n// Components outside the provider will get [] when using the context.\r\nconst ToolstringItemHighlightContext = createContext([]);\r\n\r\nexport const useHighlightedToolstringItem = () => {\r\n const [highlightedItemId, setHighlightedItemId] = useContext(\r\n ToolstringItemHighlightContext,\r\n );\r\n\r\n const isItemHighlighted = useCallback(\r\n (itemId) => highlightedItemId === itemId,\r\n [highlightedItemId],\r\n );\r\n\r\n return {\r\n isItemHighlighted,\r\n highlightedItemId,\r\n setHighlightedItemId,\r\n };\r\n};\r\n\r\nconst ToolstringItemHighlightProvider = ({ children }) => {\r\n const highlightedItemState = useState();\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default ToolstringItemHighlightProvider;\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Iterable } from 'immutable';\r\nimport { memo, Fragment } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport ToolDetails from 'features/projects/tool/components/ToolDetails';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport ToolstringPreviewEmpty from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewEmpty';\r\nimport ToolstringPreviewBreakpoint from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewBreakpoint';\r\nimport { useHighlightedToolstringItem } from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\n\r\nconst ToolstringPreviewImages = ({\r\n classes,\r\n toolstringItems = EMPTY_LIST,\r\n hideToolDetails,\r\n hideBreakpoints,\r\n onToggleBreakpoint,\r\n}) => {\r\n const { isItemHighlighted, setHighlightedItemId } =\r\n useHighlightedToolstringItem();\r\n\r\n if (!toolstringItems.size) {\r\n return ;\r\n }\r\n\r\n const toggleableBreakpoints = !!onToggleBreakpoint;\r\n\r\n return (\r\n \r\n {toolstringItems.valueSeq().map((toolstringTool, index) => {\r\n const isLastTool = index === toolstringItems.size - 1;\r\n const showBreakpoint = !isLastTool && !hideBreakpoints;\r\n const tooltip = ;\r\n const hasBreakpoint = toolstringTool.get('hasEndBreakpoint');\r\n const toolstringItemId = toolstringTool.get('toolstringItemId');\r\n\r\n /* Put the mouse events in the grid so that the hoverable area is larger */\r\n if (\r\n toolstringTool.get('toolAssemblyTools') &&\r\n toolstringTool.get('toolAssemblyTools').size\r\n ) {\r\n const tools = toolstringTool.get('toolAssemblyTools');\r\n\r\n return tools.map((tool, toolIndex) => (\r\n \r\n \r\n invokeIfFunction(setHighlightedItemId, toolstringItemId)\r\n }\r\n onMouseLeave={() => invokeIfFunction(setHighlightedItemId)}\r\n >\r\n \r\n \r\n \r\n ));\r\n } else\r\n return (\r\n \r\n \r\n invokeIfFunction(setHighlightedItemId, toolstringItemId)\r\n }\r\n onMouseLeave={() => invokeIfFunction(setHighlightedItemId)}\r\n >\r\n \r\n \r\n {showBreakpoint && (\r\n onToggleBreakpoint(toolstringTool)}\r\n />\r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n image: {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n },\r\n});\r\n\r\nToolstringPreviewImages.propTypes = {\r\n hideToolDetails: PropTypes.bool,\r\n hideBreakpoints: PropTypes.bool,\r\n onToggleBreakpoint: PropTypes.func,\r\n toolstringItems: PropTypes.instanceOf(Iterable),\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(ToolstringPreviewImages);\r\n","import { Grid, Typography } from '@material-ui/core';\r\n\r\nimport {\r\n formatToolstringTotalLength,\r\n formatToolstringTotalWeight,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.util';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\n\r\nconst ToolstringDataValue = ({ value, label, renderValue }) => (\r\n \r\n \r\n {`${label}: `}\r\n \r\n \r\n {!value && (\r\n \r\n N/A\r\n \r\n )}\r\n {!!value && {renderValue(value)}}\r\n \r\n \r\n);\r\n\r\nconst ToolstringPreviewDetails = ({ toolstring }) => {\r\n const dataValues = [\r\n {\r\n value: toolstring.get('totalLength'),\r\n label: 'Total length',\r\n renderValue: (value) => formatToolstringTotalLength(value),\r\n },\r\n {\r\n value: toolstring.get('totalWeight'),\r\n label: 'Total weight',\r\n renderValue: (value) => formatToolstringTotalWeight(value),\r\n },\r\n {\r\n value: toolstring.get('maxOD'),\r\n label: 'Max OD',\r\n renderValue: (value) => formatValue(value.value, value.unit),\r\n //TODO should be formatFaction for inches\r\n },\r\n {\r\n value: toolstring.get('totalVolume'),\r\n label: 'Disp. Vol.',\r\n renderValue: (value) => formatValue(value.value, value.unit),\r\n //TODO was Units.M_3, should be converted\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {dataValues.map((dataValue, index) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default ToolstringPreviewDetails;\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, CircularProgress } from '@material-ui/core';\r\n\r\nimport { ReceivedDataState, DataState } from 'altus-datastate';\r\n\r\nconst ToolstringPreviewContainer = ({\r\n classes,\r\n dataState,\r\n children,\r\n ...rest\r\n}) => {\r\n if (dataState.isLoading()) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '96%',\r\n paddingTop: (prop) => (prop.paddingTopPreview ? theme.spacing(2) : 0),\r\n },\r\n progress: {\r\n color: theme.palette.text.hint,\r\n },\r\n});\r\n\r\nToolstringPreviewContainer.defaultProps = {\r\n dataState: ReceivedDataState,\r\n};\r\n\r\nToolstringPreviewContainer.propTypes = {\r\n children: PropTypes.node,\r\n dataState: PropTypes.instanceOf(DataState),\r\n};\r\nexport default compose(withStyles(styles))(ToolstringPreviewContainer);\r\n","import { compose } from 'redux';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { Grid, Tooltip } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Fab } from 'app/components/withNavigation';\r\nimport { toTaskToolstringEdit } from 'utils/route.util';\r\nimport ToolstringPreviewImages from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewImages';\r\nimport ToolstringPreviewDetails from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewDetails';\r\nimport ToolstringPreviewContainer from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewContainer';\r\n\r\nconst TaskSimulationToolstringPreview = ({\r\n taskId,\r\n classes,\r\n canEdit,\r\n projectId,\r\n dataState,\r\n toolstring,\r\n toolstringId,\r\n isDataVerified,\r\n toolstringTools: toolstringItems,\r\n paddingTopPreview,\r\n}) => (\r\n \r\n \r\n\r\n \r\n {!!canEdit && !!toolstringId && (\r\n \r\n \r\n \r\n )}\r\n {!isDataVerified && (\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n editIconAnchor: {\r\n position: 'relative',\r\n },\r\n editIcon: {\r\n right: 0,\r\n zIndex: 10,\r\n position: 'absolute',\r\n top: theme.spacing(1),\r\n },\r\n warningIcon: {\r\n left: 0,\r\n zIndex: 10,\r\n position: 'absolute',\r\n top: theme.spacing(1),\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(TaskSimulationToolstringPreview);\r\n","import { compose } from 'redux';\r\nimport _isNil from 'lodash/isNil';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n getToolstringFromState,\r\n getToolstringToolsFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport { EMPTY_MAP, ProjectPermission } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { getToolstring } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport TaskSimulationToolstringPreview from 'features/projects/tasks/task/simulation/components/TaskSimulationToolstringPreview';\r\n\r\nconst TaskSimulationToolstringContainer = ({\r\n taskId,\r\n classes,\r\n dataState,\r\n projectId,\r\n toolstringId,\r\n toolDataIsVerified,\r\n setToolDataIsVerified,\r\n dispatchGetToolstring,\r\n simulation = EMPTY_MAP,\r\n toolstring = EMPTY_MAP,\r\n toolstringTools = EMPTY_MAP,\r\n}) => {\r\n useEffect(() => {\r\n if (!toolstringId) return;\r\n dispatchGetToolstring(projectId, taskId, toolstringId);\r\n }, [projectId, taskId, toolstringId, dispatchGetToolstring]);\r\n\r\n useEffect(() => {\r\n const checkToolDataVerification = (tools) => {\r\n for (const tool of tools) {\r\n if (tool.toolAssemblyTools && tool.toolAssemblyTools.length > 0) {\r\n if (!checkToolDataVerification(tool.toolAssemblyTools)) {\r\n return false;\r\n }\r\n } else if (_isNil(tool.dataVerified)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n const allToolsVerified = checkToolDataVerification(toolstringTools.toJS());\r\n setToolDataIsVerified(allToolsVerified);\r\n }, [toolstringTools, setToolDataIsVerified]);\r\n\r\n return (\r\n (\r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n toolstringContainer: {\r\n height: `calc(100% - ${theme.spacing(15)}px)`,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { toolstringId }) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.GET_TOOLSTRING_FOR_TASK,\r\n ),\r\n toolstring: getToolstringFromState(state, toolstringId),\r\n toolstringTools: getToolstringToolsFromState(state, toolstringId),\r\n }),\r\n {\r\n dispatchGetToolstring: getToolstring,\r\n },\r\n ),\r\n\r\n withStyles(styles),\r\n)(TaskSimulationToolstringContainer);\r\n","import _isNil from 'lodash/isNil';\r\nimport { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { Grid, Divider, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport ExportPdfIcon from '@material-ui/icons/PictureAsPdf';\r\n\r\nimport {\r\n BasePage,\r\n LoadingOverlay,\r\n NavTabsContainer,\r\n} from 'altus-ui-components';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { NotRequestedDataState } from 'altus-datastate';\r\n\r\nimport {\r\n loadSimulation,\r\n requestDeleteSimulation,\r\n requestUpdateSimulation,\r\n requestDuplicateSimulation,\r\n requestToggleSimulationPlanned,\r\n requestToggleSimulationFavorite,\r\n} from 'features/projects/tasks/task/simulation/simulation.actions';\r\n\r\nimport {\r\n getTaskFromState,\r\n getTaskToolstringsFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport {\r\n ACTIONS,\r\n SimulationState,\r\n MODAL as SIMULATION_MODAL,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nimport {\r\n getActionDataStateFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { EMPTY_MAP, EMPTY_LIST } from 'app/app.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\nimport { MODAL as CABLE_MODAL } from 'features/projects/tool/tool.constants';\r\nimport SimulationHeader from 'features/projects/tasks/task/simulation/components/SimulationHeader';\r\nimport CablePickerModalContainer from 'features/projects/tool/components/CablePickerModalContainer';\r\nimport { getSimulationFromState } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport RunSimulationProgressBar from 'features/projects/tasks/task/simulation/components/SimulationLinearProgress';\r\nimport SimulationProjectInformation from 'features/projects/tasks/task/simulation/components/TaskSimulationDetails';\r\nimport TaskSimulationCableSelect from 'features/projects/tasks/task/simulation/components/TaskSimulationCableSelect';\r\nimport SimulationResultsContainer from 'features/projects/tasks/task/simulation/components/SimulationResultsContainer';\r\nimport TaskSimulationToolstringSelect from 'features/projects/tasks/task/simulation/components/TaskSimulationToolstringSelect';\r\nimport SimulationExportModalContainer from 'features/projects/tasks/task/simulation/components/SimulationExportModalContainer';\r\nimport TaskSimulationToolstringContainer from 'features/projects/tasks/task/simulation/components/TaskSimulationToolstringContainer';\r\n\r\nconst TaskSimulationContainer = ({\r\n routes,\r\n taskId,\r\n classes,\r\n dataState,\r\n projectId,\r\n simulationId,\r\n dispatchOnLoad,\r\n task = EMPTY_MAP,\r\n project = EMPTY_MAP,\r\n simulation = EMPTY_MAP,\r\n toolstrings = EMPTY_LIST,\r\n dispatchUpdateSimulation,\r\n dispatchDeleteSimulation,\r\n dispatchDuplicateSimulation,\r\n dispatchToggleSimulationPlanned,\r\n dispatchToggleSimulationFavorite,\r\n runSimulationDataState = NotRequestedDataState,\r\n}) => {\r\n const cable = simulation.get('cable');\r\n const toolstringId = simulation.get('toolstringId');\r\n const cableId = simulation.get('cableId');\r\n const isEnableSimulationRunButton = [cableId, toolstringId].every(\r\n (v) => !_isNil(v),\r\n );\r\n\r\n const [toolDataIsVerified, setToolDataIsVerified] = useState(null);\r\n\r\n const [isCablePickerModalOpen, toggleCablePickerModal] = useModal(\r\n CABLE_MODAL.CABLE_PICKER_MODAL_ID,\r\n );\r\n const [isSimulationExportModalOpen, toggleSimulationExportModal] = useModal(\r\n SIMULATION_MODAL.SIMULATION_EXPORT_MODAL_ID,\r\n );\r\n\r\n useEffect(\r\n () => dispatchOnLoad(projectId, taskId, simulationId),\r\n [projectId, taskId, simulationId, dispatchOnLoad],\r\n );\r\n\r\n const onToggleFavorite = useCallback(\r\n () => dispatchToggleSimulationFavorite(projectId, taskId, simulationId),\r\n [taskId, projectId, simulationId, dispatchToggleSimulationFavorite],\r\n );\r\n\r\n const onTogglePlanned = useCallback(\r\n () =>\r\n dispatchToggleSimulationPlanned(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulation.get('state') === SimulationState.PLANNED,\r\n ),\r\n [\r\n taskId,\r\n projectId,\r\n simulationId,\r\n simulation,\r\n dispatchToggleSimulationPlanned,\r\n ],\r\n );\r\n\r\n const onUpdateSimulation = useCallback(\r\n (simulation) =>\r\n dispatchUpdateSimulation(projectId, taskId, simulationId, simulation),\r\n [taskId, projectId, simulationId, dispatchUpdateSimulation],\r\n );\r\n\r\n const onToolstringChange = useCallback(\r\n (event) =>\r\n onUpdateSimulation({\r\n toolstringId: event.target.value,\r\n }),\r\n [onUpdateSimulation],\r\n );\r\n\r\n const onCableChange = useCallback(\r\n (cable) => {\r\n onUpdateSimulation({\r\n cableId: cable.get('id'),\r\n });\r\n toggleCablePickerModal();\r\n },\r\n [onUpdateSimulation, toggleCablePickerModal],\r\n );\r\n\r\n const isPlanned = simulation.get('isPlanned');\r\n const headerActions = [\r\n {\r\n Icon: DeleteIcon,\r\n title: 'Delete',\r\n disabled: isPlanned,\r\n onClick: () =>\r\n dispatchDeleteSimulation(projectId, taskId, simulationId, simulationId),\r\n },\r\n {\r\n Icon: DuplicateIcon,\r\n title: 'Duplicate',\r\n onClick: () =>\r\n dispatchDuplicateSimulation(projectId, taskId, simulationId),\r\n },\r\n {\r\n Icon: ExportPdfIcon,\r\n title: 'Export',\r\n disabledTooltip: !toolDataIsVerified\r\n ? 'Some of the tools in the BHA are unverified'\r\n : 'Re-simulate with latest changes to export',\r\n // Has to be completed or planned to be able to generate a valid report.\r\n disabled:\r\n [\r\n SimulationState.NOT_COMPLETED,\r\n SimulationState.OUTDATED,\r\n SimulationState.ERROR,\r\n ].includes(simulation.get('state')) || !toolDataIsVerified,\r\n onClick: toggleSimulationExportModal,\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n section: {\r\n marginBottom: theme.spacing(2),\r\n border: `2px solid ${theme.palette.divider}`,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (_initialState, { simulationId, taskId }) => {\r\n return (state) => ({\r\n task: getTaskFromState(state),\r\n project: getCurrentProject(state),\r\n simulation: getSimulationFromState(state, simulationId),\r\n toolstrings: getTaskToolstringsFromState(state, taskId),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.LOAD_SIMULATION,\r\n ACTIONS.REQUEST_UPDATE_SIMULATION,\r\n ACTIONS.DOWNLOAD_SIMULATION_PDF_REPORT,\r\n ),\r\n runSimulationDataState: getActionDataStateFromState(\r\n state,\r\n ACTIONS.REQUEST_RUN_SIMULATION,\r\n ),\r\n });\r\n },\r\n {\r\n dispatchOnLoad: loadSimulation,\r\n dispatchUpdateSimulation: requestUpdateSimulation,\r\n dispatchDeleteSimulation: requestDeleteSimulation,\r\n dispatchDuplicateSimulation: requestDuplicateSimulation,\r\n dispatchToggleSimulationPlanned: requestToggleSimulationPlanned,\r\n dispatchToggleSimulationFavorite: requestToggleSimulationFavorite,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(TaskSimulationContainer);\r\n","import { compose } from 'redux';\r\nimport { Map } from 'immutable';\r\nimport PropTypes from 'prop-types';\r\nimport LockOpenIcon from '@material-ui/icons/LockOpen';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Chip, Button, Box } from '@material-ui/core';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\n\r\nimport { BasePageTitle, FavoriteButton } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nconst TaskToolstringHeader = ({\r\n classes,\r\n actions,\r\n toolstring,\r\n toggleFavorite,\r\n}) => {\r\n const isPlanned = toolstring.get('isPlanned');\r\n\r\n return (\r\n \r\n {isPlanned ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n : }\r\n />\r\n \r\n {actions.map(({ Icon, onClick, title, disabled }, index) => (\r\n }\r\n classes={{\r\n label: classes.label,\r\n }}\r\n >\r\n {title}\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n paddingLeft: theme.spacing(1),\r\n },\r\n label: {\r\n textTransform: 'none',\r\n },\r\n});\r\n\r\nTaskToolstringHeader.defaultProps = {\r\n toolstring: EMPTY_MAP,\r\n};\r\n\r\nTaskToolstringHeader.propTypes = {\r\n toolstring: PropTypes.instanceOf(Map),\r\n actions: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n disabled: PropTypes.bool,\r\n onClick: PropTypes.func,\r\n title: PropTypes.string,\r\n Icon: PropTypes.elementType,\r\n }),\r\n ),\r\n};\r\n\r\nexport default compose(withStyles(styles))(TaskToolstringHeader);\r\n","import { memo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport {\r\n formatToolstringTotalLength,\r\n formatToolstringTotalWeight,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.util';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { formatValue, formatQuantity } from 'utils/format.util';\r\n\r\nconst TaskToolstringTotals = ({\r\n toolstring = EMPTY_MAP,\r\n maxAvailableHeight,\r\n}) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default compose(memo)(TaskToolstringTotals);\r\n","import { memo } from 'react';\r\nimport { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { useHighlightedToolstringItem } from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\n\r\nconst ToolstringToolsTableRow = ({ item, classes, ...rest }) => {\r\n const { setHighlightedItemId, isItemHighlighted } =\r\n useHighlightedToolstringItem();\r\n\r\n return (\r\n \r\n invokeIfFunction(setHighlightedItemId, item.get('toolstringItemId'))\r\n }\r\n onMouseLeave={() => invokeIfFunction(setHighlightedItemId)}\r\n classes={{\r\n root: classNames({\r\n [classes.highlighted]: isItemHighlighted(\r\n item.get('toolstringItemId'),\r\n ),\r\n }),\r\n }}\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n highlighted: {\r\n background: theme.palette.table.row.hover,\r\n },\r\n});\r\n\r\nexport default compose(memo, withStyles(styles))(ToolstringToolsTableRow);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { useMemo, memo } from 'react';\r\nimport { Collection, Map } from 'immutable';\r\nimport { Grid, IconButton, Tooltip, Chip } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ShowAttachments from '@material-ui/icons/Link';\r\nimport HideAttachments from '@material-ui/icons/LinkOff';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport TaskToolstringTotals from 'features/projects/tasks/task/toolstring/components/TaskToolstringTotals';\r\nimport ToolstringToolsTableRow from 'features/projects/tasks/task/toolstring/components/ToolstringToolsTableRow';\r\nimport { ToolType } from 'features/projects/tool/tool.constants';\r\nimport { formatToolstringToolStatusString } from 'features/projects/tasks/task/toolstring/toolstring.util';\r\nimport { TOOL_STATUS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nconst getSubRows = (row) => {\r\n if (row.original) return;\r\n\r\n return row.get('attachedTools').size > 0\r\n ? row.get('attachedTools')\r\n : row.get('toolAssemblyTools');\r\n};\r\n\r\nconst ToolstringToolsTable = ({\r\n classes,\r\n toolstring = EMPTY_MAP,\r\n maxAvailableHeight = { value: 0.0 },\r\n toolstringTools = EMPTY_MAP,\r\n}) => {\r\n const lengthUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('length'),\r\n );\r\n\r\n const weightUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('weight'),\r\n );\r\n\r\n const diameterUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('outerDiameter'),\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 0.5,\r\n id: 'expander',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const hasAttachments = row.original.get('attachedTools')?.size > 0;\r\n if (!row.canExpand && !hasAttachments)\r\n return ;\r\n\r\n const [less, more] = hasAttachments\r\n ? [, ]\r\n : [, ];\r\n\r\n const title = hasAttachments\r\n ? 'Toggle Attached Tools'\r\n : row.getToggleRowExpandedProps().title;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? less : more}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 0.5,\r\n id: 'dataVerified',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n\r\n if (row.canExpand) {\r\n const toolAssemblyTools = tool.get('toolAssemblyTools', EMPTY_LIST);\r\n const hasNullDataVerified = toolAssemblyTools.some(\r\n (tool) => tool.get('dataVerified') === null,\r\n );\r\n if (hasNullDataVerified) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n } else if (!tool.get('dataVerified')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n },\r\n },\r\n {\r\n xs: 5,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n id: 'accumulatedLength',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['accumulatedLength', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'toolLength',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['length', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'toolWeight',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['weight', 'value']), '', 0.1),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'outerDiameter',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['outerDiameter', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'statusChip',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n const toolStatus = tool.get('toolStatus');\r\n\r\n if (\r\n toolStatus === TOOL_STATUS.NOT_ASSIGNED ||\r\n toolStatus === TOOL_STATUS.NULL_ASSIGNED\r\n )\r\n return null;\r\n return ;\r\n },\r\n },\r\n ],\r\n [lengthUnit, weightUnit, diameterUnit, classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n scrollable: {\r\n overflowY: 'auto',\r\n },\r\n totals: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nToolstringToolsTable.propTypes = {\r\n maxAvailableHeight: PropTypes.object,\r\n toolstring: PropTypes.instanceOf(Map),\r\n toolstringTools: PropTypes.instanceOf(Collection),\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(ToolstringToolsTable);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { memo, Fragment } from 'react';\r\nimport { Iterable, fromJS } from 'immutable';\r\nimport { Grid, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { EMPTY_LIST, UNITS } from 'app/app.constants';\r\nimport { Typography } from 'app/components/withNavigation';\r\nimport ToolDetails from 'features/projects/tool/components/ToolDetails';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport ToolstringPreviewEmpty from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewEmpty';\r\nimport ToolstringPreviewBreakpoint from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewBreakpoint';\r\nimport { useHighlightedToolstringItem } from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\n\r\nconst ToolstringPreviewSections = ({\r\n classes,\r\n hideToolDetails,\r\n onToggleBreakpoint,\r\n toolstringSections = EMPTY_LIST,\r\n showBreakPoint = true,\r\n}) => {\r\n const { isItemHighlighted, setHighlightedItemId } =\r\n useHighlightedToolstringItem();\r\n if (!toolstringSections.size) {\r\n return ;\r\n }\r\n\r\n const toggleableBreakpoints = !!onToggleBreakpoint;\r\n\r\n return (\r\n \r\n {toolstringSections.valueSeq().map((toolstringSection, sectionIndex) => {\r\n const isLastSection = sectionIndex === toolstringSections.size - 1;\r\n const itemsInSection = toolstringSection.get('items');\r\n const lastSectionItem = itemsInSection.last();\r\n\r\n let flatItems = [];\r\n itemsInSection.forEach((item) => {\r\n const assemblyTools = item.get('toolAssemblyTools');\r\n if (assemblyTools && assemblyTools.size > 0) {\r\n assemblyTools.forEach((assemblyItem) => {\r\n flatItems.push(\r\n assemblyItem.set(\r\n 'parentToolstringItemId',\r\n item.get('toolstringItemId'),\r\n ),\r\n );\r\n });\r\n } else {\r\n flatItems.push(item.set('isTopLevel', true));\r\n }\r\n });\r\n flatItems = fromJS(flatItems);\r\n\r\n const maxLength = flatItems\r\n .maxBy((item) => item.getIn(['length', 'roundedValue']))\r\n .getIn(['length', 'roundedValue']);\r\n\r\n let sumRatios = 0;\r\n const itemsWithInitialRatios = flatItems.map((item) => {\r\n const lengthValue = item.getIn(['length', 'roundedValue']);\r\n const ratio = (lengthValue / maxLength) * 100;\r\n sumRatios += ratio;\r\n return item.set('initialRatio', ratio);\r\n });\r\n\r\n const totalRatio = 100;\r\n const itemsWithRatioFlat = itemsWithInitialRatios.map((item) => {\r\n const initialRatio = item.get('initialRatio');\r\n const adjustedRatio = (initialRatio / sumRatios) * totalRatio;\r\n return item.set('ratio', adjustedRatio).delete('initialRatio');\r\n });\r\n\r\n const updatedItemsInSection = itemsInSection.map((topLevelItem) => {\r\n const topLevelItemId = topLevelItem.get('toolstringItemId');\r\n let updatedTopLevelItem = itemsWithRatioFlat.find(\r\n (flatItem) =>\r\n flatItem.get('toolstringItemId') === topLevelItemId &&\r\n flatItem.get('isTopLevel'),\r\n );\r\n updatedTopLevelItem = updatedTopLevelItem\r\n ? updatedTopLevelItem\r\n : topLevelItem;\r\n\r\n if (\r\n topLevelItem.get('toolAssemblyTools') &&\r\n topLevelItem.get('toolAssemblyTools').size > 0\r\n ) {\r\n const updatedAssemblyTools = topLevelItem\r\n .get('toolAssemblyTools')\r\n .map((assemblyItem) => {\r\n const assemblyItemId = assemblyItem.get('toolAssemblyToolId');\r\n const updatedAssemblyItem = itemsWithRatioFlat.find(\r\n (flatItem) =>\r\n flatItem.get('toolAssemblyToolId') === assemblyItemId,\r\n );\r\n return updatedAssemblyItem\r\n ? updatedAssemblyItem\r\n .delete('parentToolstringItemId')\r\n .delete('isTopLevel')\r\n : assemblyItem;\r\n });\r\n return updatedTopLevelItem.set(\r\n 'toolAssemblyTools',\r\n updatedAssemblyTools,\r\n );\r\n } else {\r\n return updatedTopLevelItem;\r\n }\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {`${toolstringSection.get('length')?.toFixed(3)} ${\r\n UNITS.METER\r\n }`}\r\n \r\n \r\n \r\n \r\n {updatedItemsInSection.map((toolstringItem, index) => {\r\n const tooltip = ;\r\n const toolstringItemId =\r\n toolstringItem.get('toolstringItemId');\r\n\r\n const isLastToolInSection =\r\n index === updatedItemsInSection.size - 1;\r\n\r\n /* Put the mouse events in the grid so that the hoverable area is larger */\r\n if (\r\n toolstringItem.get('toolAssemblyTools') &&\r\n toolstringItem.get('toolAssemblyTools').size\r\n ) {\r\n const tools = toolstringItem.get('toolAssemblyTools');\r\n return (\r\n \r\n {tools.map((tool, toolIndex) => (\r\n \r\n invokeIfFunction(\r\n setHighlightedItemId,\r\n toolstringItemId,\r\n )\r\n }\r\n onMouseLeave={() =>\r\n invokeIfFunction(setHighlightedItemId)\r\n }\r\n >\r\n \r\n \r\n ))}\r\n {showBreakPoint &&\r\n toggleableBreakpoints &&\r\n !isLastToolInSection && (\r\n \r\n onToggleBreakpoint(toolstringItem)\r\n }\r\n />\r\n )}\r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n invokeIfFunction(\r\n setHighlightedItemId,\r\n toolstringItemId,\r\n )\r\n }\r\n onMouseLeave={() =>\r\n invokeIfFunction(setHighlightedItemId)\r\n }\r\n >\r\n \r\n \r\n {showBreakPoint &&\r\n toggleableBreakpoints &&\r\n !isLastToolInSection && (\r\n \r\n onToggleBreakpoint(toolstringItem)\r\n }\r\n />\r\n )}\r\n \r\n );\r\n })}\r\n \r\n {}\r\n \r\n {!isLastSection && (\r\n \r\n {/* This is to align \"on\" breakpoints with the \"off\" ones. Margin left is classes.section.marginRight + classes.section.paddingRight */}\r\n \r\n \r\n onToggleBreakpoint(lastSectionItem)\r\n }\r\n />\r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n image: {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n },\r\n sectionContainer: {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n },\r\n section: {\r\n borderRight: `1px solid ${theme.altus.components.ToolstringPreview.lengthSection.main}`,\r\n paddingRight: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n marginTop: theme.spacing(0.25),\r\n marginBottom: theme.spacing(0.25),\r\n position: 'relative',\r\n '&::before': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: -theme.spacing(0.25),\r\n right: -theme.spacing(1),\r\n width: theme.spacing(2),\r\n height: theme.spacing(0.25),\r\n borderBottom: `1px solid ${theme.altus.components.ToolstringPreview.lengthSection.main}`,\r\n },\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n bottom: -theme.spacing(0.25),\r\n right: -theme.spacing(1),\r\n width: theme.spacing(2),\r\n height: theme.spacing(0.25),\r\n borderBottom: `1px solid ${theme.altus.components.ToolstringPreview.lengthSection.main}`,\r\n },\r\n },\r\n sectionLengthText: {\r\n color: theme.altus.components.ToolstringPreview.lengthSection.main,\r\n },\r\n});\r\n\r\nToolstringPreviewSections.propTypes = {\r\n hideToolDetails: PropTypes.bool,\r\n onToggleBreakpoint: PropTypes.func,\r\n toolstringSections: PropTypes.instanceOf(Iterable),\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(ToolstringPreviewSections);\r\n","import { compose } from 'redux';\r\nimport { memo, Fragment } from 'react';\r\nimport { Grid, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { UNITS } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { Typography } from 'app/components/withNavigation';\r\nimport ToolDetails from 'features/projects/tool/components/ToolDetails';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport ToolstringPreviewEmpty from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewEmpty';\r\nimport ToolstringPreviewBreakpoint from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewBreakpoint';\r\nimport { useHighlightedToolstringItem } from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\n\r\nconst ToolAssemblyCreatorToolstringPreviewSection = ({\r\n classes,\r\n hideToolDetails,\r\n onToggleBreakpoint,\r\n toolstringSections = [],\r\n}) => {\r\n const { setHighlightedItemId } = useHighlightedToolstringItem();\r\n\r\n if (toolstringSections.length === 0) {\r\n return ;\r\n }\r\n\r\n const toggleableBreakpoints = !!onToggleBreakpoint;\r\n\r\n return (\r\n \r\n {toolstringSections.map((toolstringSection, sectionIndex) => {\r\n const isLastSection = sectionIndex === toolstringSections.size - 1;\r\n const itemsInSection = toolstringSection.items;\r\n const lastSectionItem = itemsInSection[itemsInSection.length - 1];\r\n let toolstringLength = 0;\r\n itemsInSection.map((tool) => {\r\n return (toolstringLength += tool.length.value\r\n ? tool.length.value\r\n : tool.length / 1000);\r\n });\r\n // return null;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {`${toolstringLength.toFixed(3)} ${UNITS.METER}`}\r\n \r\n \r\n \r\n \r\n {itemsInSection.map((toolstringItem, index) => {\r\n const tooltip = ;\r\n const toolstringItemId = toolstringItem.toolstringItemId;\r\n\r\n const isLastToolInSection = index === itemsInSection.size - 1;\r\n /* Put the mouse events in the grid so that the hoverable area is larger */\r\n if (\r\n toolstringItem.toolAssemblyTools &&\r\n toolstringItem.toolAssemblyTools.length > 0\r\n ) {\r\n const tools = toolstringItem.toolAssemblyTools;\r\n return tools.map((tool, toolIndex) => (\r\n \r\n \r\n invokeIfFunction(\r\n setHighlightedItemId,\r\n toolstringItemId,\r\n )\r\n }\r\n onMouseLeave={() =>\r\n invokeIfFunction(setHighlightedItemId)\r\n }\r\n >\r\n \r\n \r\n \r\n ));\r\n }\r\n return (\r\n \r\n \r\n invokeIfFunction(\r\n setHighlightedItemId,\r\n toolstringItemId,\r\n )\r\n }\r\n onMouseLeave={() =>\r\n invokeIfFunction(setHighlightedItemId)\r\n }\r\n >\r\n \r\n \r\n {toggleableBreakpoints && !isLastToolInSection && (\r\n \r\n onToggleBreakpoint(toolstringItem)\r\n }\r\n />\r\n )}\r\n \r\n );\r\n })}\r\n \r\n {/** Placeholder to align the BHA */}\r\n \r\n \r\n {!isLastSection && (\r\n \r\n {/* This is to align \"on\" breakpoints with the \"off\" ones. Margin left is classes.section.marginRight + classes.section.paddingRight */}\r\n \r\n \r\n onToggleBreakpoint(lastSectionItem)\r\n }\r\n />\r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n image: {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n },\r\n sectionContainer: {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n },\r\n section: {\r\n borderRight: `1px solid ${theme.altus.components.ToolstringPreview.lengthSection.main}`,\r\n paddingRight: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n marginTop: theme.spacing(0.25),\r\n marginBottom: theme.spacing(0.25),\r\n position: 'relative',\r\n '&::before': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: -theme.spacing(0.25),\r\n right: -theme.spacing(1),\r\n width: theme.spacing(2),\r\n height: theme.spacing(0.25),\r\n borderBottom: `1px solid ${theme.altus.components.ToolstringPreview.lengthSection.main}`,\r\n },\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n bottom: -theme.spacing(0.25),\r\n right: -theme.spacing(1),\r\n width: theme.spacing(2),\r\n height: theme.spacing(0.25),\r\n borderBottom: `1px solid ${theme.altus.components.ToolstringPreview.lengthSection.main}`,\r\n },\r\n },\r\n sectionLengthText: {\r\n color: theme.altus.components.ToolstringPreview.lengthSection.main,\r\n },\r\n});\r\n\r\nexport default compose(\r\n memo,\r\n withStyles(styles),\r\n)(ToolAssemblyCreatorToolstringPreviewSection);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { useCallback } from 'react';\r\n\r\nimport { requestToggleToolstringItemBreakpoint } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport ToolstringPreviewSections from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewSections';\r\nimport ToolstringPreviewContainer from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewContainer';\r\nimport ToolAssemblyCreatorToolstringPreviewSection from 'features/equipment/toolAssemblies/components/ToolAssemblyCreatorToolstringPreviewSection';\r\n\r\nconst TaskToolstringPreview = ({\r\n taskId,\r\n editable,\r\n projectId,\r\n dataState,\r\n toolstringId,\r\n toolAssemblyCreator = false,\r\n toolstringSections = toolAssemblyCreator ? [] : EMPTY_MAP,\r\n dispatchToggleToolstringItemBreakpoint,\r\n placeHolderAlignBha,\r\n paddingTopPreview,\r\n showBreakPoint,\r\n}) => {\r\n const onToggleBreakpoint = useCallback(\r\n (toolstringItem) =>\r\n dispatchToggleToolstringItemBreakpoint(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem.get('toolstringItemId'),\r\n ),\r\n [taskId, projectId, toolstringId, dispatchToggleToolstringItemBreakpoint],\r\n );\r\n\r\n return (\r\n \r\n {toolAssemblyCreator ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nTaskToolstringPreview.propTypes = {\r\n editable: PropTypes.bool,\r\n taskId: PropTypes.string.isRequired,\r\n projectId: PropTypes.string.isRequired,\r\n toolstringId: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.GET_TOOLSTRING_FOR_TASK,\r\n ),\r\n }),\r\n {\r\n dispatchToggleToolstringItemBreakpoint:\r\n requestToggleToolstringItemBreakpoint,\r\n },\r\n ),\r\n)(TaskToolstringPreview);\r\n","import { compose } from 'redux';\r\nimport { useMemo } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { TOOLSTRING_FORMS as FORM } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nconst TaskToolstringComments = ({\r\n classes,\r\n toolstring,\r\n onUpdateToolstring,\r\n}) => {\r\n const toolstringJS = useMemo(() => toolstring.toJS(), [toolstring]);\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingTop: theme.spacing(2),\r\n paddingLeft: theme.spacing(2),\r\n },\r\n field: {\r\n '&:disabled': {\r\n color: theme.palette.text.primary,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(TaskToolstringComments);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Tooltip, IconButton } from '@material-ui/core';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { requestUpdateToolstring } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nconst TaskToolstringDetailsHeader = ({ classes, toolstring }) => {\r\n const cableName = toolstring.getIn(['cable', 'name']);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {!cableName && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: `${theme.spacing(2)}px 0px`,\r\n },\r\n field: {\r\n paddingLeft: theme.spacing(4),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchUpdateToolString: requestUpdateToolstring,\r\n }),\r\n withStyles(styles),\r\n)(TaskToolstringDetailsHeader);\r\n","export const Styles = (theme) => ({\r\n content: {\r\n padding: `0px ${theme.spacing(3)}px`,\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n actions: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n card: {\r\n marginTop: theme.spacing(2),\r\n },\r\n title: {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n","import { compose } from 'redux';\r\nimport { useState } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ExportPdfIcon from '@material-ui/icons/PictureAsPdf';\r\nimport { Styles } from 'features/projects/tasks/task/toolstring/common/styles';\r\n\r\nimport {\r\n Box,\r\n Button,\r\n Card,\r\n CardContent,\r\n Dialog,\r\n DialogContent,\r\n Grid,\r\n Typography,\r\n ListItem,\r\n Checkbox,\r\n ListItemText,\r\n ListItemIcon,\r\n} from '@material-ui/core';\r\nimport { ModalActions } from 'altus-ui-components';\r\n\r\nconst TaskToolstringExportModal = ({ open, onClose, classes, onExport }) => {\r\n const [collapseAssemblies, setCollapseAssemblies] = useState(false);\r\n const toggleCollapseAssemblies = () => {\r\n setCollapseAssemblies(!collapseAssemblies);\r\n };\r\n return (\r\n \r\n \r\n \r\n Export Toolstring\r\n \r\n \r\n \r\n \r\n \r\n \r\n Toolstring Details\r\n \r\n \r\n toggleCollapseAssemblies()}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n onExport({\r\n collapseAssemblies,\r\n })\r\n }\r\n >\r\n Export\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(withStyles(Styles))(TaskToolstringExportModal);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { downloadToolstringPdfReport } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport TaskToolstringExportModal from 'features/projects/tasks/task/toolstring/TaskToolstringExportModal';\r\n\r\nconst TaskToolstringExportModalContainer = ({\r\n open,\r\n taskId,\r\n projectId,\r\n toggleModal,\r\n toolstringId,\r\n dispatchDownloadToolstringPdfReport,\r\n}) => {\r\n const onExportToolstring = useCallback(\r\n (exportSelection) => {\r\n dispatchDownloadToolstringPdfReport(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n exportSelection.collapseAssemblies,\r\n );\r\n toggleModal();\r\n },\r\n [\r\n taskId,\r\n projectId,\r\n toggleModal,\r\n toolstringId,\r\n dispatchDownloadToolstringPdfReport,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchDownloadToolstringPdfReport: downloadToolstringPdfReport,\r\n }),\r\n)(TaskToolstringExportModalContainer);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport { useMemo, useCallback, useEffect } from 'react';\r\nimport PictureAsPdf from '@material-ui/icons/PictureAsPdf';\r\n\r\nimport { LoadingOverlay, NoContentBasePage } from 'altus-ui-components';\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n requestUpdateToolstring,\r\n requestGetTaskToolstring,\r\n redirectToTaskToolstringEdit,\r\n requestTaskToolstringSections,\r\n requestToogleToolstringFavorite,\r\n requestDeleteToolstringAndRedirect,\r\n requestDuplicateToolstringAndRedirect,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport {\r\n getTaskByIdFromState,\r\n getToolstringFromState,\r\n getToolstringToolsFromState,\r\n getToolstringSectionsFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport {\r\n getCurrentUserFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport {\r\n MODAL,\r\n TOOLSTRING_ACTIONS,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport TaskToolstringHeader from 'features/projects/tasks/task/toolstring/components/TaskToolstringHeader';\r\nimport ToolstringToolsTable from 'features/projects/tasks/task/toolstring/components/ToolstringToolsTable';\r\nimport TaskToolstringPreview from 'features/projects/tasks/task/toolstring/components/TaskToolstringPreview';\r\nimport TaskToolstringComments from 'features/projects/tasks/task/toolstring/components/TaskToolstringComments';\r\nimport TaskToolstringDetailsHeader from 'features/projects/tasks/task/toolstring/components/TaskToolstringDetailsHeader';\r\nimport ToolstringItemHighlightProvider from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\nimport useLatestProjectWellboreDetail from 'features/projects/hooks/useLatestProjectWellboreDetails';\r\nimport TaskToolstringExportModalContainer from 'features/projects/tasks/task/toolstring/TaskToolstringExportModalContainer';\r\n\r\nconst NoToolsMessage = () => (\r\n \r\n);\r\n\r\nconst TaskToolstringContainer = ({\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n toolstring = EMPTY_MAP,\r\n toolstringId,\r\n toolstringTools,\r\n toolstringSections,\r\n dispatchGetToolstring,\r\n dispatchUpdateToolstring,\r\n dispatchToolstringSections,\r\n dispatchToggleToolstringFavorite,\r\n dispatchDeleteToolstringAndRedirect,\r\n dispatchRedirectToTaskToolstringEdit,\r\n dispatchDuplicateToolstringAndRedirect,\r\n}) => {\r\n useEffect(() => {\r\n dispatchGetToolstring(projectId, taskId, toolstringId);\r\n dispatchToolstringSections(projectId, taskId, toolstringId);\r\n }, [\r\n dispatchGetToolstring,\r\n dispatchToolstringSections,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ]);\r\n\r\n const [isToolstringExportModalOpen, toggleToolstringExportModal] = useModal(\r\n MODAL.SIMULATION_EXPORT_MODAL_ID,\r\n );\r\n\r\n const [latestWellboreDetail = EMPTY_MAP] =\r\n useLatestProjectWellboreDetail(projectId);\r\n\r\n const onUpdateToolstring = useCallback(\r\n (toolstring) =>\r\n dispatchUpdateToolstring(projectId, taskId, toolstringId, toolstring),\r\n [taskId, projectId, toolstringId, dispatchUpdateToolstring],\r\n );\r\n\r\n const onToggleFavorite = useCallback(\r\n () => dispatchToggleToolstringFavorite(projectId, taskId, toolstringId),\r\n [taskId, projectId, toolstringId, dispatchToggleToolstringFavorite],\r\n );\r\n\r\n const actions = useMemo(() => {\r\n const toolstringId = toolstring.get('id');\r\n\r\n return [\r\n {\r\n Icon: DeleteIcon,\r\n title: 'Delete',\r\n disabled: toolstring.get('isPlanned'),\r\n onClick: () =>\r\n dispatchDeleteToolstringAndRedirect(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringId,\r\n ),\r\n },\r\n {\r\n Icon: DuplicateIcon,\r\n title: 'Duplicate',\r\n onClick: () =>\r\n dispatchDuplicateToolstringAndRedirect(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n ),\r\n },\r\n {\r\n Icon: PictureAsPdf,\r\n title: 'Export',\r\n onClick: toggleToolstringExportModal,\r\n },\r\n {\r\n Icon: EditIcon,\r\n title: 'Edit',\r\n disabled: toolstring.get('isPlanned'),\r\n onClick: () =>\r\n dispatchRedirectToTaskToolstringEdit(projectId, taskId, toolstringId),\r\n },\r\n ];\r\n }, [\r\n taskId,\r\n projectId,\r\n toolstring,\r\n toggleToolstringExportModal,\r\n dispatchDeleteToolstringAndRedirect,\r\n dispatchRedirectToTaskToolstringEdit,\r\n dispatchDuplicateToolstringAndRedirect,\r\n ]);\r\n\r\n const isEmptyToolstring = !toolstringTools.size;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {isEmptyToolstring && }\r\n {!isEmptyToolstring && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: theme.spacing(3),\r\n },\r\n toolstringContainer: {\r\n // This feels hacky, but couldn't figure out any other way of making the toolstring fit in the available height.\r\n height: `calc(100% - ${theme.spacing(12)}px)`,\r\n },\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { toolstringId, taskId }) => {\r\n return {\r\n currentUser: getCurrentUserFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n TOOLSTRING_ACTIONS.DOWNLOAD_TOOLSTRING_PDF_REPORT,\r\n ),\r\n toolstring: getToolstringFromState(state, toolstringId),\r\n toolstringSections: getToolstringSectionsFromState(state, toolstringId),\r\n toolstringTools: getToolstringToolsFromState(state, toolstringId),\r\n project: getCurrentProject(state),\r\n task: getTaskByIdFromState(state, taskId),\r\n };\r\n },\r\n {\r\n dispatchGetToolstring: requestGetTaskToolstring,\r\n dispatchUpdateToolstring: requestUpdateToolstring,\r\n dispatchToolstringSections: requestTaskToolstringSections,\r\n dispatchToggleToolstringFavorite: requestToogleToolstringFavorite,\r\n dispatchRedirectToTaskToolstringEdit: redirectToTaskToolstringEdit,\r\n dispatchDeleteToolstringAndRedirect: requestDeleteToolstringAndRedirect,\r\n dispatchDuplicateToolstringAndRedirect:\r\n requestDuplicateToolstringAndRedirect,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(TaskToolstringContainer);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\n\r\nconst ToolImageTableCell = ({ classes, ...rest }) => (\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '100%',\r\n maxWidth: '100%',\r\n minWidth: '100%',\r\n maxHeight: 'inherit',\r\n objectFit: 'contain',\r\n padding: `${theme.spacing(0.5)}px 0`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ToolImageTableCell);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { List, isImmutable } from 'immutable';\r\nimport { IconButton } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Fab,\r\n Grid,\r\n Tooltip,\r\n Typography,\r\n CircularProgress,\r\n} from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport {\r\n ToolType,\r\n ExifOrientation,\r\n ToolCategoryType,\r\n} from 'features/projects/tool/tool.constants';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\nimport ToolImageTableCell from 'app/components/ToolImageTableCell';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 30,\r\n};\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('toolAssemblyTools')?.toArray()\r\n : row.original?.toolAssemblyTools?.toArray();\r\n\r\nconst getHiddenColumns = (activeCategory) => {\r\n var hiddenColumns = [];\r\n\r\n if (activeCategory.value !== ToolCategoryType.Assemblies) {\r\n hiddenColumns = [...hiddenColumns, 'toolAssemblyTools', 'sequence'];\r\n }\r\n if (activeCategory.value !== ToolCategoryType.ThirdParty) {\r\n hiddenColumns = [...hiddenColumns, 'supplier'];\r\n }\r\n return hiddenColumns;\r\n};\r\n\r\nconst ToolPickerModalTable = ({\r\n classes,\r\n tools = EMPTY_LIST,\r\n loading,\r\n onAddTool,\r\n activeCategory,\r\n}) => {\r\n const initialState = useMemo(\r\n () => ({\r\n ...defaultInitialState,\r\n hiddenColumns: getHiddenColumns(activeCategory),\r\n sortBy: [\r\n {\r\n id:\r\n activeCategory.value === ToolCategoryType.Assemblies\r\n ? 'sequence'\r\n : 'toolName',\r\n desc: false,\r\n },\r\n ],\r\n }),\r\n [activeCategory],\r\n );\r\n\r\n const lengthUnit = getQuantityUnitFromItems(tools, (result) =>\r\n result.get('length'),\r\n );\r\n\r\n const weightUnit = getQuantityUnitFromItems(tools, (result) =>\r\n result.get('weight'),\r\n );\r\n\r\n const diameterUnit = getQuantityUnitFromItems(tools, (result) =>\r\n result.get('outerDiameter'),\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n const thirdPary =\r\n tool.get('m3ItemNumber') === ThirdPartyLabel ? true : false;\r\n\r\n if (!row.canExpand) {\r\n if (!tool.get('dataVerified')) {\r\n if (thirdPary) return null;\r\n return (\r\n \r\n \r\n \r\n );\r\n } else return null;\r\n } else return null;\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolItemNo',\r\n Header: 'Item no.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n Cell: ({ row, value }) => (\r\n \r\n {value\r\n ? activeCategory.value !== ToolCategoryType.ThirdParty\r\n ? `#${value}`\r\n : value\r\n : null}\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n id: 'toolImage',\r\n Header: 'Tool',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n\r\n const toolStringItems = tool.get('toolAssemblyTools');\r\n\r\n if (\r\n tool.get('toolAssemblyTools') &&\r\n tool.get('toolAssemblyTools').size\r\n ) {\r\n return (\r\n \r\n {toolStringItems.reverse().map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolOuterDiameter',\r\n sortType: 'basic',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['outerDiameter', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolLength',\r\n sortType: 'basic',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['length', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolWeight',\r\n sortType: 'basic',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['weight', 'value']), '', 0.1),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'topConnectorDescription',\r\n Header: 'Top C.',\r\n sortType: 'basic',\r\n accessor: (tool) => tool.get('topConnectorDescription'),\r\n Cell: ({ value }) => value ?? '',\r\n },\r\n {\r\n xs: 1,\r\n id: 'bottomConnectorDescription',\r\n Header: 'Bottom C.',\r\n sortType: 'basic',\r\n accessor: (tool) => tool.get('bottomConnectorDescription'),\r\n Cell: ({ value }) => value ?? '',\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolAssemblyTools',\r\n Header: 'Components',\r\n sortType: 'basic',\r\n accessor: (tool) => tool.get('toolAssemblyTools'),\r\n Cell: ({ value }) => (\r\n \r\n {value && value.size ? `${value.size}` : null}\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'supplier',\r\n Header: 'Supplier',\r\n sortType: 'basic',\r\n accessor: (tool) => tool.get('supplier'),\r\n },\r\n {\r\n xs: 1,\r\n id: 'sequence',\r\n Header: 'Sequence',\r\n accessor: (tool) => tool.get('sequence'),\r\n },\r\n {\r\n id: 'actions',\r\n xs: 1,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n const isToolInsideAssembly =\r\n !!row.depth && tool.get('type') === ToolType.TOOL;\r\n\r\n if (isToolInsideAssembly) return ;\r\n\r\n return (\r\n \r\n onAddTool(tool)}\r\n >\r\n Add\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [lengthUnit, weightUnit, diameterUnit, classes, onAddTool, activeCategory],\r\n );\r\n\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nToolPickerModalTable.propTypes = {\r\n tools: PropTypes.instanceOf(List),\r\n};\r\n\r\nconst styles = (theme) => ({\r\n rowActionCell: {\r\n paddingRght: '10px',\r\n },\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ToolPickerModalTable);\r\n","import RefreshIcon from '@material-ui/icons/Refresh';\r\nimport { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst ToolPickerModalHeader = ({ onRefreshTools, onClose }) => (\r\n \r\n \r\n Add Tools\r\n \r\n \r\n \r\n }\r\n disabled // disabled by default until implementation of equipment service\r\n >\r\n Refresh M3\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default ToolPickerModalHeader;\r\n","import { useFormikContext } from 'formik';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { MultiSelectModal } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { Typography } from 'app/components/withTooltip';\r\nimport TextFieldV2 from 'app/components/form/TextFieldV2';\r\n\r\nconst defaultValidate = () => true;\r\n\r\nconst defaultGetSubmitLabel = (selectedItems) =>\r\n selectedItems.size ? `Select (${selectedItems.size})` : 'Select';\r\n\r\nconst MultiSelectTextFieldFormik = ({\r\n label,\r\n field,\r\n items,\r\n getKey,\r\n getName,\r\n disabled,\r\n validate = defaultValidate,\r\n getSubmitLabel = defaultGetSubmitLabel,\r\n}) => {\r\n const { setFieldValue } = useFormikContext();\r\n const { value = EMPTY_LIST, name } = field;\r\n\r\n const [isOpen, toggleModal] = useToggle();\r\n\r\n const itemsById = items.toMap().mapKeys((_, item) => getKey(item));\r\n\r\n const renderValue = useCallback(\r\n () => (\r\n \r\n {value.size ? `${value.size} selected` : All}\r\n \r\n ),\r\n [value],\r\n );\r\n\r\n const initialSelectedItems = useMemo(\r\n () => value.map((itemId) => itemsById.get(itemId)).toSet(),\r\n [value, itemsById],\r\n );\r\n\r\n const onSubmit = useCallback(\r\n (selectedItems) => {\r\n setFieldValue(name, selectedItems.map(getKey));\r\n toggleModal();\r\n },\r\n [setFieldValue, toggleModal, getKey, name],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {EMPTY_LIST.toArray()}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MultiSelectTextFieldFormik;\r\n","import { Grid } from '@material-ui/core';\r\nimport { Formik, Form, Field } from 'formik';\r\n\r\nimport { Tab, Tabs } from 'altus-ui-components';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { ToolCategoryType } from 'features/projects/tool/tool.constants';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport MultiSelectTextFieldFormik from 'app/components/form/formik/MultiSelectTextFieldFormik';\r\n\r\nexport const Filters = {\r\n projectId: 'projectId',\r\n textSearch: 'textSearch',\r\n categoryId: 'categoryId',\r\n toolGroupIds: 'toolGroupIds',\r\n serialSearch: 'serialSearch',\r\n supplierSearch: 'supplierSearch',\r\n topConnectorIds: 'topConnectorIds',\r\n bottomConnectorIds: 'bottomConnectorIds',\r\n};\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst validateSerialSearch = (value) => {\r\n let error;\r\n if (value && value.length < 3) {\r\n error = 'Enter at least 3 characters';\r\n }\r\n return error;\r\n};\r\n\r\nconst ToolPickerModalFilters = ({\r\n loading,\r\n onSearch,\r\n suppliers,\r\n toolGroups,\r\n activeFilters,\r\n topConnectors,\r\n activeCategory,\r\n toolCategories,\r\n bottomConnectors,\r\n onChangeCategory,\r\n}) => (\r\n \r\n
\r\n \r\n \r\n \r\n onChangeCategory(category)}\r\n >\r\n {toolCategories.map((category, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeCategory.value !== ToolCategoryType.ThirdParty && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeCategory.value === ToolCategoryType.ThirdParty && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n
\r\n);\r\n\r\nexport default ToolPickerModalFilters;\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport ToolPickerModalTable from 'features/projects/tool/components/ToolPickerModalTable';\r\nimport ToolPickerModalHeader from 'features/projects/tool/components/ToolPickerModalHeader';\r\nimport ToolPickerModalFilters from 'features/projects/tool/components/ToolPickerModalFilters';\r\n\r\nconst ToolPickerModal = ({\r\n open,\r\n tools,\r\n onExit,\r\n onEnter,\r\n classes,\r\n loading,\r\n onSearch,\r\n onAddTool,\r\n suppliers,\r\n toolGroups,\r\n toggleModal,\r\n activeFilters,\r\n topConnectors,\r\n onRefreshTools,\r\n activeCategory,\r\n toolCategories,\r\n bottomConnectors,\r\n onChangeCategory,\r\n enabledToolCategoryTypes,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '75vh',\r\n },\r\n content: {\r\n padding: `0px ${theme.spacing(3)}px`,\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n filters: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ToolPickerModal);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { memo, useCallback, useState, useMemo, useEffect } from 'react';\r\n\r\nimport {\r\n getToolGroupsFromState,\r\n getToolSuppliersFromState,\r\n getToolsSearchResultFromState,\r\n getToolTopConnectorsFromState,\r\n getToolBottomConnectorsFromState,\r\n} from 'features/projects/tool/tool.selector';\r\n\r\nimport {\r\n requestToolsSearch,\r\n toolPickerModalOnLoad,\r\n requestRefreshToolsWithM3,\r\n requestToolGroupsByCategory,\r\n} from 'features/projects/tool/tool.actions';\r\n\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { TOOL_ACTIONS } from 'features/projects/tool/tool.constants';\r\nimport { ToolCategoryType } from 'features/projects/tool/tool.constants';\r\nimport ToolPickerModal from 'features/projects/tool/components/ToolPickerModal';\r\nimport { Filters } from 'features/projects/tool/components/ToolPickerModalFilters';\r\n\r\nconst toolCategories = [\r\n { label: 'MWL Tools', value: ToolCategoryType.MWL },\r\n { label: 'EWL Tools', value: ToolCategoryType.EWL },\r\n { label: '3rd party', value: ToolCategoryType.ThirdParty },\r\n { label: 'Tool Assemblies', value: ToolCategoryType.Assemblies },\r\n];\r\n\r\nconst ToolPickerModalContainer = ({\r\n open,\r\n tools = EMPTY_LIST,\r\n onExit,\r\n onAddTool,\r\n suppliers = EMPTY_MAP,\r\n toolGroups = EMPTY_MAP,\r\n topConnectors = EMPTY_MAP,\r\n onToggleModal,\r\n dispatchOnLoad,\r\n bottomConnectors = EMPTY_MAP,\r\n dispatchOnSearch,\r\n loadingDataState,\r\n dispatchOnRefreshTools,\r\n enabledToolCategoryTypes,\r\n dispatchOnChangeCategory,\r\n projectId,\r\n}) => {\r\n const initialFilters = useMemo(\r\n () => ({\r\n [Filters.textSearch]: '',\r\n [Filters.toolGroupIds]: EMPTY_LIST,\r\n [Filters.topConnectorIds]: EMPTY_LIST,\r\n [Filters.bottomConnectorIds]: EMPTY_LIST,\r\n [Filters.projectId]: projectId,\r\n }),\r\n [projectId],\r\n );\r\n\r\n const [activeFilters, setFilters] = useState(initialFilters);\r\n const [activeCategory, setActiveCategory] = useState(toolCategories[0]);\r\n const enabledToolCategories = useMemo(\r\n () =>\r\n toolCategories.filter((category) =>\r\n enabledToolCategoryTypes.includes(category.value),\r\n ),\r\n [enabledToolCategoryTypes],\r\n );\r\n\r\n useEffect(() => {\r\n if (open) {\r\n dispatchOnSearch({\r\n [Filters.categoryId]: activeCategory.value,\r\n [Filters.projectId]: projectId,\r\n });\r\n } else {\r\n // Cleanup filters and category when closing\r\n setActiveCategory(toolCategories[0]);\r\n setFilters(initialFilters);\r\n }\r\n }, [open, activeCategory, dispatchOnSearch, projectId, initialFilters]);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.textSearch]: filterValues[Filters.textSearch],\r\n [Filters.serialSearch]: filterValues[Filters.serialSearch],\r\n [Filters.categoryId]: activeCategory.value,\r\n [Filters.toolGroupIds]: filterValues[Filters.toolGroupIds].toArray(),\r\n [Filters.topConnectorIds]:\r\n filterValues[Filters.topConnectorIds].toArray(),\r\n [Filters.bottomConnectorIds]:\r\n filterValues[Filters.bottomConnectorIds].toArray(),\r\n [Filters.supplierSearch]: filterValues[Filters.supplierSearch],\r\n [Filters.projectId]: projectId,\r\n getByStatus: true, // filter by un/servicable\r\n });\r\n setFilters(filterValues);\r\n },\r\n [dispatchOnSearch, activeCategory.value, projectId],\r\n );\r\n\r\n const onChangeCategory = useCallback(\r\n (newCategory) => {\r\n setActiveCategory(newCategory);\r\n dispatchOnChangeCategory(newCategory.value);\r\n setFilters(initialFilters);\r\n },\r\n [dispatchOnChangeCategory, initialFilters],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n toolGroups: getToolGroupsFromState(state),\r\n tools: getToolsSearchResultFromState(state),\r\n suppliers: getToolSuppliersFromState(state),\r\n topConnectors: getToolTopConnectorsFromState(state),\r\n bottomConnectors: getToolBottomConnectorsFromState(state),\r\n loadingDataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOL_ACTIONS.REQUEST_TOOLS_SEARCH,\r\n TOOL_ACTIONS.TOOL_PICKER_MODAL_ON_LOAD,\r\n TOOL_ACTIONS.REQUEST_REFRESH_ALL_TOOLS_WITH_M3,\r\n TOOL_ACTIONS.REQUEST_TOOL_GROUPS_BY_CATEGORY,\r\n TOOL_ACTIONS.REQUEST_TOOL_GROUPS,\r\n ),\r\n }),\r\n {\r\n dispatchOnSearch: requestToolsSearch,\r\n dispatchOnLoad: toolPickerModalOnLoad,\r\n dispatchOnRefreshTools: requestRefreshToolsWithM3,\r\n dispatchOnChangeCategory: requestToolGroupsByCategory,\r\n },\r\n ),\r\n memo,\r\n)(ToolPickerModalContainer);\r\n","import { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport projectService from 'services/project.service';\r\n\r\nconst UseFacilityProjectDecks = (projectId) => {\r\n const getFacilityProjectDecks = useCallback(\r\n () =>\r\n projectService\r\n .getFacilityDecksByProjectId(projectId)\r\n .then((facility) =>\r\n facility,\r\n ),\r\n [projectId],\r\n );\r\n\r\n return useRequest(getFacilityProjectDecks);\r\n};\r\n\r\nexport default UseFacilityProjectDecks;","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, AppBar, Button, Typography } from '@material-ui/core';\r\n\r\nconst TaskToolstringEditorAppBar = ({ classes, onClose, toolstringName }) => (\r\n \r\n \r\n \r\n \r\n \r\n {toolstringName}\r\n \r\n \r\n \r\n \r\n EDITING BHA\r\n \r\n \r\n \r\n \r\n Exit BHA Editor\r\n \r\n \r\n
\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n boxShadow: 'none',\r\n },\r\n toolstringName: {\r\n paddingLeft: theme.spacing(1),\r\n },\r\n});\r\n\r\nTaskToolstringEditorAppBar.propTypes = {\r\n toolstringName: PropTypes.string,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default compose(withStyles(styles))(TaskToolstringEditorAppBar);\r\n","import { Formik } from 'formik';\r\nimport { useMemo } from 'react';\r\n\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\n\r\nconst EditableTableRowFormik = ({\r\n item,\r\n timeout,\r\n onSubmit,\r\n TableRowComponent = TableRow,\r\n ...rest\r\n}) => {\r\n const initialValues = useMemo(() => item.toJS(), [item]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditableTableRowFormik;\r\n","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useEffect, useState } from 'react';\r\nimport { Autocomplete } from '@material-ui/lab';\r\nimport ClearIcon from '@material-ui/icons/Close';\r\nimport { TextField, IconButton } from '@material-ui/core';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst DEFAULT_INPUT_VALUE = '';\r\nexport const AutocompleteTextField = ({\r\n autoCompleteValue,\r\n setAutocompleteValue,\r\n form,\r\n formFieldName,\r\n setInitialFieldValue,\r\n valueSelectorFromAutocomplete,\r\n getOptionLabel,\r\n fetchAutocompleteDataAction,\r\n placeholder,\r\n keepChangeAfterOnBlur = false,\r\n id,\r\n disabled = false,\r\n clearInputValue = null,\r\n}) => {\r\n const theme = useTheme();\r\n const [options, setOptions] = useState([]);\r\n const [inputValue, setInputValue] = useState(DEFAULT_INPUT_VALUE);\r\n const [autoCompleteLengthError, setAutoCompleteLengthError] = useState('');\r\n const dispatch = useDispatch();\r\n\r\n const { getFieldMeta } = form;\r\n const { touched, error, value } = getFieldMeta(formFieldName);\r\n\r\n const onInputChange = (event, newInputValue) => {\r\n if (event?.type === 'blur' && keepChangeAfterOnBlur) {\r\n setInputValue(value === null ? DEFAULT_INPUT_VALUE : value);\r\n return;\r\n }\r\n\r\n setInputValue(newInputValue);\r\n };\r\n\r\n useEffect(() => {\r\n setInitialFieldValue(setInputValue);\r\n }, [setInitialFieldValue, setInputValue]);\r\n\r\n useEffect(() => {\r\n let active = true;\r\n\r\n if (inputValue === '') {\r\n setOptions(autoCompleteValue ? [autoCompleteValue] : []);\r\n return undefined;\r\n }\r\n\r\n if (inputValue.length > 0) {\r\n if (\r\n autoCompleteValue &&\r\n valueSelectorFromAutocomplete(autoCompleteValue) === inputValue\r\n )\r\n return undefined;\r\n fetchAutocompleteDataAction(inputValue).then((response) => {\r\n if (active) {\r\n let newOptions = [];\r\n\r\n if (autoCompleteValue) {\r\n newOptions = [autoCompleteValue];\r\n }\r\n\r\n if (response) {\r\n newOptions = [...newOptions, ...response];\r\n }\r\n\r\n setOptions(newOptions);\r\n }\r\n });\r\n }\r\n\r\n return () => {\r\n active = false;\r\n };\r\n }, [\r\n dispatch,\r\n inputValue,\r\n autoCompleteValue,\r\n fetchAutocompleteDataAction,\r\n valueSelectorFromAutocomplete,\r\n ]);\r\n\r\n return (\r\n x}\r\n getOptionLabel={getOptionLabel}\r\n renderInput={(params) => {\r\n return (\r\n \r\n {inputValue && (\r\n {\r\n setInputValue('');\r\n setAutocompleteValue(null);\r\n form.setFieldValue(formFieldName, '');\r\n\r\n if (clearInputValue) {\r\n clearInputValue();\r\n }\r\n }}\r\n size=\"small\"\r\n disabled={disabled}\r\n style={{\r\n position: 'absolute',\r\n right: '25px',\r\n zIndex: '100',\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n }}\r\n onChange={(event) => {\r\n if (event.target.value.length && event.target.value.length < 1) {\r\n setAutoCompleteLengthError('Min 1 character required');\r\n } else {\r\n setAutoCompleteLengthError('');\r\n }\r\n }}\r\n />\r\n );\r\n }}\r\n // Invoked when text field is changed (i.e. user entering search value)\r\n onInputChange={(event, newInputValue) =>\r\n onInputChange(event, newInputValue)\r\n }\r\n // Invoked when text field is changed (i.e. user entering search value)\r\n onChange={(event, newValue) => {\r\n setOptions(newValue ? [newValue, ...options] : options);\r\n setAutocompleteValue(newValue);\r\n const newFormFieldValue = valueSelectorFromAutocomplete(newValue);\r\n form.setFieldValue(formFieldName, newFormFieldValue);\r\n }}\r\n />\r\n );\r\n};\r\n","import { Field } from 'formik';\r\nimport { useCallback, useState } from 'react';\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\nimport { AutocompleteTextField } from 'app/components/form/AutocompleteTextField';\r\nimport { findM3ItemsBySerialNumberAndStatus } from 'features/equipment/equipment.actions';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\n\r\nexport const AutocompleteTextFieldAdapter = ({\r\n form,\r\n placeholder,\r\n keepChangeAfterOnBlur = false,\r\n InputProps,\r\n ...props\r\n}) => {\r\n const [m3ItemNumber, setM3ItemNumber] = useState(null);\r\n const [isThirdPartyTool, setThirdPartyTool] = useState(false);\r\n const [autoCompleteValue, setAutocompleteValue] = useState(null);\r\n\r\n const setInitialFieldValue = useCallback(\r\n (form) => (setInputFieldValue) => {\r\n if (form?.values?.m3ItemNumber) {\r\n if (form?.values?.m3ItemNumber === ThirdPartyLabel) {\r\n setThirdPartyTool(true);\r\n } else {\r\n setM3ItemNumber(form?.values?.m3ItemNumber);\r\n }\r\n }\r\n // for cables referenceNumber\r\n else if (form?.values?.referenceNumber) {\r\n setM3ItemNumber(form?.values?.referenceNumber);\r\n }\r\n\r\n if (form?.values?.serialNo) {\r\n setInputFieldValue(form?.values?.serialNo);\r\n }\r\n },\r\n [],\r\n );\r\n const getOptionLabel = useCallback(\r\n (selectedValue) => selectedValue?.serialNumber,\r\n [],\r\n );\r\n const valueSelectorFromAutocomplete = useCallback(\r\n (selectedValue) => selectedValue?.serialNumber,\r\n [],\r\n );\r\n\r\n return (\r\n
\r\n {!isThirdPartyTool && (\r\n \r\n findM3ItemsBySerialNumberAndStatus(m3ItemNumber, value)\r\n }\r\n placeholder={placeholder}\r\n id={'auto-complete-serial-number-m3'}\r\n />\r\n )}\r\n {isThirdPartyTool && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n","import { AutocompleteTextFieldAdapter } from 'app/components/form/formik/TableRowAutocompleteTextFieldFormik/components/AutocompleteTextFieldAdapter';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\n\r\nconst TableRowAutocompleteTextFieldFormik = (props) => {\r\n const { keepChangeAfterOnBlur = false, ...rest } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\nexport default TableRowAutocompleteTextFieldFormik;\r\n","import { useEffect, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { KeyboardDatePicker } from '@material-ui/pickers';\r\n\r\nimport { Format } from 'app/app.constants';\r\nimport { formatDate } from 'utils/format.util';\r\n\r\nconst DatePickerFormik = ({\r\n form,\r\n field,\r\n classes,\r\n margin = 'normal',\r\n DateTimePickerProps,\r\n format = Format.date,\r\n destroyOnUnmount = false,\r\n inputVariant = 'standard',\r\n disableFuture = false,\r\n minDate = undefined,\r\n disabled = false,\r\n placeholder,\r\n ...rest\r\n}) => {\r\n const { value, name, onBlur } = field;\r\n const { getFieldMeta, setFieldValue } = form;\r\n\r\n useEffect(\r\n () => () => {\r\n if (destroyOnUnmount) {\r\n setFieldValue(name, undefined);\r\n }\r\n },\r\n [name, setFieldValue, destroyOnUnmount],\r\n );\r\n\r\n const { _ } = getFieldMeta(name);\r\n\r\n const onChangeHandler = useCallback(\r\n (value) => {\r\n // formatDate(value) returns a string\r\n // replace it with just value to return a moment.js object\r\n return setFieldValue(name, formatDate(value));\r\n },\r\n [setFieldValue, name],\r\n );\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n customTextField: {\r\n '& input::placeholder': {\r\n fontSize: '10',\r\n },\r\n },\r\n root: {\r\n '& .MuiFormLabel-root': {\r\n fontSize: '10',\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(DatePickerFormik);\r\n","import { useState, useEffect } from 'react';\r\nimport TextField from 'app/components/form/TextFieldV2';\r\n\r\nconst timeToSeconds = (time) => {\r\n if (time) {\r\n const [hours, minutes] = time.split(':');\r\n return (parseInt(hours, 10) * 60 + parseInt(minutes, 10)) * 60;\r\n }\r\n return 0;\r\n};\r\n\r\nconst secondsToTime = (seconds) => {\r\n if (seconds) {\r\n const hours = Math.floor(seconds / 3600);\r\n const minutes = Math.floor((seconds % 3600) / 60);\r\n return `${hours.toString().padStart(2, '0')}:${minutes\r\n .toString()\r\n .padStart(2, '0')}`;\r\n }\r\n return '';\r\n};\r\n\r\nconst TimeSpanFormik = ({ field, form, ...props }) => {\r\n const { value, name } = field;\r\n const { setFieldValue } = form;\r\n\r\n const [formattedValue, setFormattedValue] = useState(\r\n secondsToTime(value || ''),\r\n );\r\n\r\n useEffect(() => {\r\n setFieldValue(name, timeToSeconds(formattedValue));\r\n }, [formattedValue, name, setFieldValue]);\r\n\r\n const handleKeyDown = (e) => {\r\n let newValue =\r\n e.key === 'Backspace' || e.key === 'Delete'\r\n ? formattedValue.slice(0, -1)\r\n : formattedValue + e.key;\r\n\r\n if (!e.key.match(/[0-9]|Backspace|Delete/)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (newValue.length === 2 && formattedValue.length === 1) {\r\n newValue += ':';\r\n } else if (newValue.length === 2 && formattedValue.length === 3) {\r\n newValue = newValue.slice(0, -1);\r\n } else if (newValue.replace(/:/g, '').length > 4) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n setFormattedValue(newValue);\r\n e.preventDefault();\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default TimeSpanFormik;\r\n","export default __webpack_public_path__ + \"static/media/Red.d4511525.svg\";","export default __webpack_public_path__ + \"static/media/Green.043abb86.svg\";","export default __webpack_public_path__ + \"static/media/Orange.d1a8ad54.svg\";","export const AssetHistoryForm = {\r\n ID: 'assetHistoryModal',\r\n MODE: 'mode',\r\n TYPE_OF_EVENT: 'typeOfEvent',\r\n TYPE_OF_TEST: 'typeOfTest',\r\n RESULT: 'result',\r\n DATE: 'date',\r\n TIME: 'time',\r\n DESCRIPTION: 'description',\r\n TYPE: 'type',\r\n CABLE_CUT: 'cableCut',\r\n CABLE_SIGNAL: 'cableSignal',\r\n CABLE_RESISTANCE: 'cableResistance',\r\n WRAP_TEST: 'wrapTest',\r\n STORAGE_TYPE: 'storageType',\r\n\r\n //BOP TEST\r\n BOP_RAM: 'bopRam',\r\n BOP_LEAK_TYPE: 'bopLeakType',\r\n BOP_LEAK_TYPE_DESCRIPTION: 'bopLeakTypeDescription',\r\n BOP_LEAK_TYPE_DESCRIPTION_VALIDATION: 'bopLeakTypeDescriptionValidation',\r\n\r\n //CABLE TORSION TEST\r\n CABLE_TORSION_WRAP: 'cableTorsionWrap',\r\n\r\n //CABLE WRAP TEST\r\n CABLE_WRAP_TEST_STRAND: 'strandsPassed',\r\n CABLE_WRAP_TEST_STRAND_PASS_X: 'strandsPassedPassX',\r\n CABLE_WRAP_TEST_STRAND_OUT_Y: 'strandsPassedOutY',\r\n\r\n //CABLE TORTURE TEST\r\n CABLE_TORTURE_TEST_OUTER_ARMOUR_DUCTILITY_SCORE: 'outerArmourDuctilityScore',\r\n CABLE_TORTURE_TEST_INNER_ARMOUR_DUCTILITY_SCORE: 'innerArmourDuctilityScore',\r\n\r\n //CABLE CONTINUITY TEST\r\n CABLE_CONTINUITY_TEST_RESISTANCE: 'resistance',\r\n\r\n //CABLE INSULATION TEST\r\n CABLE_INSULATION_TEST_RESISTANCE: 'cableInsulationResistance',\r\n\r\n //SIL2 TEST\r\n ASSET_SIL2_TEST_BOP: 'assetSil2Bop',\r\n ASSET_SIL2_TEST_BCS: 'assetSil2Bcs',\r\n ASSET_SIL2_TEST_CABIN: 'assetSil2Cabin',\r\n\r\n //CABLE WRAP BRAIDED MONO TEST\r\n CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_PASS_X:\r\n 'cableWrapBraidedMonoTestInnerStrandPassX',\r\n CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_OUT_OF_Y:\r\n 'cableWrapBraidedMonoTestInnerStrandOutY',\r\n CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_PASS_X:\r\n 'cableWrapBraidedMonoTestOuterStrandPassX',\r\n CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_OUT_OF_Y:\r\n 'cableWrapBraidedMonoTestOuterStrandOutY',\r\n\r\n //CABLE BREAK TEST\r\n CABLE_BREAK_TEST_FORCE: 'cableBreakTestForceNumber',\r\n\r\n //CABLE CUT MAINTENANCE\r\n CABLE_CUT_MAINTENANCE_DISTANCE: 'distanceQuantity',\r\n\r\n //CABLE SERVICE MAINTENANCE\r\n CABLE_SERVICE_MAINTENANCE_CABLE_LENGTH: 'cableLengthQuantity',\r\n CABLE_SERVICE_MAINTENANCE_MAX_OD: 'maxODQuantity',\r\n\r\n //CABLE SPOOLING MAINTENANCE\r\n CABLE_SPOOLING_DRUM_ITEM_NUMBER: 'drumItemNumber',\r\n CABLE_SPOOLING_DRUM_SERIAL_NUMBER: 'drumSerialNumber',\r\n};\r\n\r\nexport default AssetHistoryForm;\r\n","import React from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Field, useFormikContext } from 'formik';\r\n\r\nimport { Grid } from '@material-ui/core';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport {\r\n BOP_LEAK_TYPE,\r\n BOP_RAM,\r\n TEST_ASSET_RESULT,\r\n} from 'features/equipment/equipment.constants';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { editorStateToString, getRichEditorText } from 'utils/app.util';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst FormFields = AssetHistoryForm;\r\n\r\nexport const BopTestFormComponent = () => {\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n const { values, setFieldValue } = useFormikContext();\r\n const isFail = String(TEST_ASSET_RESULT.FAIL) === values[FormFields.RESULT];\r\n const isOtherSelected =\r\n BOP_LEAK_TYPE.find((type) => type.name === 'Other')?.id ===\r\n values[FormFields.BOP_LEAK_TYPE];\r\n const bopLeakTypeDescription = values[FormFields.BOP_LEAK_TYPE_DESCRIPTION];\r\n\r\n useEffect(() => {\r\n if (bopLeakTypeDescription && isOtherSelected) {\r\n const json = editorStateToString(bopLeakTypeDescription);\r\n var value = getRichEditorText(json);\r\n setFieldValue(FormFields.BOP_LEAK_TYPE_DESCRIPTION_VALIDATION, value);\r\n }\r\n }, [bopLeakTypeDescription, isOtherSelected, setFieldValue]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {isFail ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n {isOtherSelected && (\r\n \r\n {({ form, ...formik }) => {\r\n return (\r\n <>\r\n \r\n {/* Check for errors in BOP_LEAK_TYPE_DESCRIPTION_VALIDATION instead of BOP_LEAK_TYPE_DESCRIPTION */}\r\n {form.errors[\r\n FormFields.BOP_LEAK_TYPE_DESCRIPTION_VALIDATION\r\n ] && (\r\n
\r\n {\r\n form.errors[\r\n FormFields.BOP_LEAK_TYPE_DESCRIPTION_VALIDATION\r\n ]\r\n }\r\n
\r\n )}\r\n \r\n );\r\n }}\r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default BopTestFormComponent;\r\n","import React from 'react';\r\nimport BopTestFormComponent from 'features/equipment/assets/components/BopTestFormComponent';\r\n\r\nexport const BopTestCustomComponent = () => (\r\n <>\r\n \r\n \r\n);\r\n\r\nexport default BopTestCustomComponent;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\n\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nexport const CableTorsionTestFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableTorsionTestFormComponent;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\n\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst CableWrapStrandFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableWrapStrandFormComponent;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\n\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst CableTortureStrandFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableTortureStrandFormComponent;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\n\r\nimport { Grid, InputAdornment } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst CableContinuityFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n ohm,\r\n }}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableContinuityFormComponent;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\n\r\nimport { Grid, InputAdornment } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst CableInsulationFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n giga ohm,\r\n }}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableInsulationFormComponent;\r\n","import React from 'react';\r\n\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst Sil2FormComponent = ({\r\n sil2TestBopItems,\r\n sil2TestBcsItems,\r\n sil2TestCabinItems,\r\n}) => {\r\n const getId = (item) =>\r\n `${item.get('externalId')};${item.get('m3ItemNumber')};${item.get(\r\n 'serialNo',\r\n )}`;\r\n const getName = (item) => `[${item.get('serialNo')}] ${item.get('name')}`;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Sil2FormComponent;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\n\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst CableWrapBraidedMonoTestFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableWrapBraidedMonoTestFormComponent;\r\n","import { useEffect, useCallback } from 'react';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport { EMPTY_QUANTITY, EMPTY_STRING } from 'app/app.constants';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst createDefaultQuantity = (unit) => ({\r\n ...EMPTY_QUANTITY,\r\n unit,\r\n});\r\n\r\nconst QuantityTextFieldFormik = ({\r\n form,\r\n field,\r\n InputProps,\r\n useRoundedValue = false,\r\n destroyOnUnmount = false,\r\n minValue = null,\r\n ...rest\r\n}) => {\r\n const { setFieldValue } = form;\r\n const { name, value: fieldValue = EMPTY_QUANTITY } = field;\r\n const { unit, value, roundedValue, hasValue } = fieldValue;\r\n\r\n const onChange = useCallback(\r\n (event) => {\r\n let inputValue = event.target.value;\r\n\r\n if (minValue !== null && inputValue < minValue) {\r\n inputValue = minValue;\r\n }\r\n\r\n setFieldValue(name, {\r\n unit,\r\n value: inputValue,\r\n hasValue: !!inputValue,\r\n });\r\n },\r\n [name, unit, setFieldValue, minValue],\r\n );\r\n\r\n useEffect(\r\n () => () => {\r\n if (destroyOnUnmount) {\r\n // clear value and unregister field\r\n setFieldValue(name, createDefaultQuantity(unit));\r\n }\r\n },\r\n [name, unit, setFieldValue, destroyOnUnmount],\r\n );\r\n\r\n const checkForRoundedValue = useCallback(() => {\r\n if (hasValue) {\r\n if (useRoundedValue) {\r\n return roundedValue;\r\n } else {\r\n return value;\r\n }\r\n } else {\r\n if (minValue !== null) {\r\n return minValue;\r\n }\r\n \r\n return EMPTY_STRING;\r\n }\r\n }, [hasValue, useRoundedValue, roundedValue, value, minValue]);\r\n\r\n return (\r\n {unit},\r\n ...InputProps,\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default QuantityTextFieldFormik;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nconst CableBreakTestFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableBreakTestFormComponent;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport { useFormikContext } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport {\r\n ASSET_HISTORY_TEST_TYPES,\r\n ASSET_HISTORY_RESULTS,\r\n} from 'features/equipment/equipment.constants';\r\nimport RedIcon from 'assets/Red.svg';\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport OrangeIcon from 'assets/Orange.svg';\r\nimport { AssetTestType } from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { BopTestCustomComponent } from 'features/equipment/assets/components/BopTestCustomComponent';\r\nimport CableTorsionTestFormComponent from 'features/equipment/assets/components/equipmentTest/CableTorsionTestFormComponent';\r\nimport CableWrapStrandFormComponent from 'features/equipment/assets/components/equipmentTest/CableWrapStrandFormComponent';\r\nimport CableTortureStrandFormComponent from 'features/equipment/assets/components/equipmentTest/CableTortureStrandFormComponent';\r\nimport CableContinuityFormComponent from 'features/equipment/assets/components/equipmentTest/CableContinuityFormComponent';\r\nimport CableInsulationFormComponent from 'features/equipment/assets/components/equipmentTest/CableInsulationFormComponent';\r\nimport Sil2FormComponent from 'features/equipment/assets/components/equipmentTest/Sil2FormComponent';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport CableWrapBraidedMonoTestFormComponent from 'features/equipment/assets/components/equipmentTest/CableWrapBraidedMonoTestFormComponent';\r\nimport CableBreakTestFormComponent from 'features/equipment/assets/components/equipmentTest/CableBreakTestFormComponent';\r\n\r\nconst TestForm = ({\r\n testTypesItems = ASSET_HISTORY_TEST_TYPES.filter(\r\n (item) => item.showByDefault,\r\n ),\r\n defaultTestTypeValue,\r\n sil2TestBopItems,\r\n sil2TestBcsItems,\r\n sil2TestCabinItems,\r\n selectedCustomUnitsOfMeasure,\r\n unitsOfMeasurePreference,\r\n projectMeasurementSystem,\r\n}) => {\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n const resultIcons = {\r\n Pass: GreenIcon,\r\n Warning: OrangeIcon,\r\n Fail: RedIcon,\r\n };\r\n const { values, setFieldValue } = useFormikContext();\r\n const [strandInnerSections, setInnerStrandSections] = useState([]);\r\n const [cableWrapStrands, setCableWrapStrands] = useState([]);\r\n const [strandOuterSections, setOuterStrandSections] = useState([]);\r\n\r\n useEffect(() => {\r\n const combinedSections = [...strandInnerSections, ...strandOuterSections];\r\n setFieldValue('testStrands', combinedSections);\r\n }, [setFieldValue, strandInnerSections, strandOuterSections]);\r\n\r\n useEffect(() => {\r\n const combinedSections = [...cableWrapStrands];\r\n setFieldValue(AssetHistoryForm.CABLE_WRAP_TEST_STRAND, combinedSections);\r\n }, [setFieldValue, cableWrapStrands, strandOuterSections]);\r\n\r\n const selectedTestType = values[AssetHistoryForm.TYPE_OF_TEST];\r\n\r\n const testTypeComponents = React.useMemo(\r\n () => ({\r\n [AssetTestType.BOP_TEST]: {\r\n CustomComponent: BopTestCustomComponent,\r\n },\r\n [AssetTestType.CABLE_TORSION_TEST]: {\r\n CustomComponent: CableTorsionTestFormComponent,\r\n },\r\n [AssetTestType.CABLE_WRAP_TEST]: {\r\n CustomComponent: CableWrapStrandFormComponent,\r\n },\r\n [AssetTestType.CABLE_TORTURE_TEST]: {\r\n CustomComponent: CableTortureStrandFormComponent,\r\n },\r\n [AssetTestType.CABLE_CONTINUITY_TEST]: {\r\n CustomComponent: CableContinuityFormComponent,\r\n },\r\n [AssetTestType.CABLE_INSULATION_TEST]: {\r\n CustomComponent: CableInsulationFormComponent,\r\n },\r\n [AssetTestType.SIL2_TEST]: {\r\n CustomComponent: Sil2FormComponent,\r\n },\r\n [AssetTestType.CABLE_WRAP_BRAIDED_MONO_TEST]: {\r\n CustomComponent: CableWrapBraidedMonoTestFormComponent,\r\n },\r\n [AssetTestType.CABLE_BREAK_TEST]: {\r\n CustomComponent: CableBreakTestFormComponent,\r\n },\r\n }),\r\n [],\r\n );\r\n\r\n const SelectedComponent = testTypeComponents[selectedTestType] || {\r\n CustomComponent: () => null,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {defaultTestTypeValue ? null : (\r\n \r\n )}\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TestForm;\r\n","export const CableSpoolingStorageTypeEnum = {\r\n addToStorageReel: { value: 0, label: 'Add to Storage Reel' },\r\n addToSpecificDrum: { value: 1, label: 'Add to Specific Drum' },\r\n};\r\n","import * as yup from 'yup';\r\n\r\nimport {\r\n ASSET_HISTORY_EVENT_TYPES_ITEM,\r\n ASSET_HISTORY_MAINTENANCE_TYPE,\r\n ASSET_HISTORY_TEST_TYPE,\r\n TEST_ASSET_RESULT,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport { validateTimeString } from 'utils/app.util';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport { CableSpoolingStorageTypeEnum } from 'features/equipment/assets/components/equipmentMaintenance/utils/constants';\r\n\r\nconst timeErrorMessage = 'Invalid time format, it should be in format HH:MM';\r\nconst FormFields = AssetHistoryForm;\r\n\r\nconst AssetHistoryYupValidator = yup.object().shape({\r\n [FormFields.TYPE_OF_EVENT]: yup\r\n .string()\r\n .required('Type of Event is required'),\r\n [FormFields.TYPE_OF_TEST]: yup.string().when(FormFields.TYPE_OF_EVENT, {\r\n is: '1',\r\n then: yup.string().required('Type of Test is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n [FormFields.RESULT]: yup.string().when(FormFields.TYPE_OF_EVENT, {\r\n is: '1',\r\n then: yup.string().required('Result is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n [FormFields.BOP_LEAK_TYPE]: yup\r\n .string()\r\n .when([FormFields.TYPE_OF_TEST, FormFields.RESULT], {\r\n is: (testType, result) =>\r\n testType === String(ASSET_HISTORY_TEST_TYPE.BOP_TEST) &&\r\n String(TEST_ASSET_RESULT.FAIL) === result,\r\n then: yup.string().required('Bop type of leak is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n [FormFields.BOP_RAM]: yup\r\n .string()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.BOP_TEST) === typeOfTest,\r\n then: yup.string().required('Bop Ram set is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n [FormFields.BOP_LEAK_TYPE_DESCRIPTION_VALIDATION]: yup\r\n .string()\r\n .when([FormFields.BOP_LEAK_TYPE, FormFields.RESULT], {\r\n is: (bopLeakType, result) =>\r\n bopLeakType === '6' && String(TEST_ASSET_RESULT.FAIL) === result,\r\n then: yup.string().required('Bop type of leak description is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n [FormFields.TIME]: yup\r\n .string()\r\n .required('Required')\r\n .test('is-valid-time', timeErrorMessage, (value) =>\r\n validateTimeString(value),\r\n ),\r\n [FormFields.CABLE_TORSION_WRAP]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_TORSION_TEST) === typeOfTest,\r\n then: yup\r\n .number()\r\n .integer('Cable Torsion wrap must be an integer')\r\n .required('Cable Torsion wrap is required'),\r\n otherwise: yup.number().integer().notRequired(),\r\n }),\r\n [FormFields.CABLE_WRAP_TEST_STRAND_PASS_X]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_TEST) === typeOfTest,\r\n then: yup\r\n .number()\r\n .integer('Cable Strand Pass X must be an integer')\r\n .required('Cable Strand Pass X is required'),\r\n otherwise: yup.number().integer().notRequired(),\r\n }),\r\n [FormFields.CABLE_WRAP_TEST_STRAND_OUT_Y]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_TEST) === typeOfTest,\r\n then: yup\r\n .number()\r\n .integer('Cable Strand Out Y must be an integer')\r\n .required('Cable Strand Out Y is required'),\r\n otherwise: yup.number().integer().notRequired(),\r\n }),\r\n\r\n //Cable Torture Test\r\n [FormFields.CABLE_TORTURE_TEST_OUTER_ARMOUR_DUCTILITY_SCORE]: yup\r\n .number()\r\n .min(0, 'Ductility score must be at least 0')\r\n .max(10, 'Ductility score must not exceed 10')\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_TORTURE_TEST) === typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Outer armour ductility score must be at least 0')\r\n .max(10, 'Outer armour ductility score must not exceed 10')\r\n .required('Outer armour ductility score is required'),\r\n otherwise: yup.number().min(0).max(10).notRequired(),\r\n }),\r\n [FormFields.CABLE_TORTURE_TEST_INNER_ARMOUR_DUCTILITY_SCORE]: yup\r\n .number()\r\n .min(0, 'Inner armour ductility score must be at least 0')\r\n .max(10, 'Inner armour ductility score must not exceed 10')\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_TORTURE_TEST) === typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Inner armour ductility score must be at least 0')\r\n .max(10, 'Inner armour ductility score must not exceed 10')\r\n .required('Inner armour ductility score is required'),\r\n otherwise: yup.number().min(0).max(10).notRequired(),\r\n }),\r\n\r\n [FormFields.CABLE_CONTINUITY_TEST_RESISTANCE]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_CONTINUITY_TEST) === typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Resistance must be a non-negative number')\r\n .required('Resistance is required'),\r\n otherwise: yup.number().notRequired(),\r\n }),\r\n [FormFields.CABLE_INSULATION_TEST_RESISTANCE]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_INSULATION_TEST) === typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Resistance must be a non-negative number')\r\n .required('Resistance is required'),\r\n otherwise: yup.number().notRequired(),\r\n }),\r\n\r\n //SIL 2\r\n [FormFields.ASSET_SIL2_TEST_BOP]: yup\r\n .string()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.SIL2_TEST) === typeOfTest,\r\n then: yup.string().required('BOP is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n [FormFields.ASSET_SIL2_TEST_BCS]: yup\r\n .string()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.SIL2_TEST) === typeOfTest,\r\n then: yup.string().required('BCS is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n [FormFields.ASSET_SIL2_TEST_CABIN]: yup\r\n .string()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.SIL2_TEST) === typeOfTest,\r\n then: yup.string().required('Cabin is required'),\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n\r\n // CABLE WRAP BRAIDED MONO TEST\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_PASS_X]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_BRAIDED_MONO_TEST) ===\r\n typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Cable Inner Strand Pass X must be a non-negative number')\r\n .integer('Cable Inner Strand Pass X must be an integer')\r\n .required('Cable Inner Strand Pass X is required'),\r\n otherwise: yup.number().integer().notRequired(),\r\n }),\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_PASS_X]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_BRAIDED_MONO_TEST) ===\r\n typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Cable Outer Strand Pass X must be a non-negative number')\r\n .integer('Cable Outer Strand Pass X must be an integer')\r\n .required('Cable Outer Strand Pass X is required'),\r\n otherwise: yup.number().integer().notRequired(),\r\n }),\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_OUT_OF_Y]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_BRAIDED_MONO_TEST) ===\r\n typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Cable Inner Strand Out Y must be a non-negative number')\r\n .integer('Cable Inner Strand Out Y must be an integer')\r\n .required('Cable Inner Strand Out Y is required'),\r\n otherwise: yup.number().integer().notRequired(),\r\n }),\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_OUT_OF_Y]: yup\r\n .number()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_WRAP_BRAIDED_MONO_TEST) ===\r\n typeOfTest,\r\n then: yup\r\n .number()\r\n .min(0, 'Cable Outer Strand Out Y must be a non-negative number')\r\n .integer('Cable Outer Strand Out Y must be an integer')\r\n .required('Cable Outer Strand Out Y is required'),\r\n otherwise: yup.number().integer().notRequired(),\r\n }),\r\n\r\n //CABLE BREAK FORCE\r\n [FormFields.CABLE_BREAK_TEST_FORCE]: yup\r\n .object()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST) &&\r\n String(ASSET_HISTORY_TEST_TYPE.CABLE_BREAK_TEST) === typeOfTest,\r\n then: yup\r\n .object()\r\n .test(\r\n 'is-valid-value',\r\n 'Force is required',\r\n (value) => value?.value > 0,\r\n ),\r\n otherwise: yup.object(),\r\n }),\r\n // CABLE CUT MAINTENANCE DISTANCE\r\n [FormFields.CABLE_CUT_MAINTENANCE_DISTANCE]: yup\r\n .object()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE) &&\r\n String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_CUT) === typeOfTest,\r\n then: yup\r\n .object()\r\n .test(\r\n 'is-valid-value',\r\n 'Distance is required',\r\n (value) => value?.value > 0,\r\n ),\r\n otherwise: yup.object(),\r\n }),\r\n // CABLE SERVICE MAINTENANCE CABLE LENGTH\r\n [FormFields.CABLE_SERVICE_MAINTENANCE_CABLE_LENGTH]: yup\r\n .object()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE) &&\r\n String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_SERVICE) === typeOfTest,\r\n then: yup\r\n .object()\r\n .test(\r\n 'is-valid-value',\r\n 'Cable Length is required',\r\n (value) => value?.value > 0,\r\n ),\r\n otherwise: yup.object(),\r\n }),\r\n // CABLE SERVICE MAINTENANCE MAX OD\r\n [FormFields.CABLE_SERVICE_MAINTENANCE_MAX_OD]: yup\r\n .object()\r\n .when([FormFields.TYPE_OF_EVENT, FormFields.TYPE_OF_TEST], {\r\n is: (typeOfEvent, typeOfTest) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE) &&\r\n String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_SERVICE) === typeOfTest,\r\n then: yup\r\n .object()\r\n .test(\r\n 'is-valid-value',\r\n 'Max. Outer Diameter is required',\r\n (value) => value?.value > 0,\r\n ),\r\n otherwise: yup.object(),\r\n }),\r\n // CABLE SPOOLING MAINTENANCE ITEM NUMBER\r\n [FormFields.CABLE_SPOOLING_DRUM_ITEM_NUMBER]: yup\r\n .string()\r\n .when(\r\n [\r\n FormFields.TYPE_OF_EVENT,\r\n FormFields.TYPE_OF_TEST,\r\n FormFields.STORAGE_TYPE,\r\n ],\r\n {\r\n is: (typeOfEvent, typeOfTest, storageType) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE) &&\r\n String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_SPOOLING) ===\r\n typeOfTest &&\r\n storageType === CableSpoolingStorageTypeEnum.addToSpecificDrum.value,\r\n then: yup.string().required('Item number is required'),\r\n otherwise: yup.string().notRequired(),\r\n },\r\n ),\r\n // CABLE SPOOLING MAINTENANCE SERIAL NUMBER\r\n [FormFields.CABLE_SPOOLING_DRUM_SERIAL_NUMBER]: yup\r\n .string()\r\n .when(\r\n [\r\n FormFields.TYPE_OF_EVENT,\r\n FormFields.TYPE_OF_TEST,\r\n FormFields.STORAGE_TYPE,\r\n ],\r\n {\r\n is: (typeOfEvent, typeOfTest, storageType) =>\r\n typeOfEvent === String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE) &&\r\n String(ASSET_HISTORY_MAINTENANCE_TYPE.CABLE_SPOOLING) ===\r\n typeOfTest &&\r\n storageType === CableSpoolingStorageTypeEnum.addToSpecificDrum.value,\r\n then: yup.string().required('Serial number is required'),\r\n otherwise: yup.string().notRequired(),\r\n },\r\n ),\r\n});\r\n\r\nexport default AssetHistoryYupValidator;\r\n","import {\r\n EMPTY_QUANTITY_LENGTH,\r\n EMPTY_QUANTITY_WITH_UNIT,\r\n} from 'app/app.constants';\r\nimport AssetHistoryForm from './AssetHistoryForm';\r\nimport { getUnitForProperty } from 'features/equipment/equipment.helpers';\r\nimport { EDITABLE_TOOL_PROPERTIES } from 'features/equipment/equipment.constants';\r\nimport { CableSpoolingStorageTypeEnum } from 'features/equipment/assets/components/equipmentMaintenance/utils/constants';\r\n\r\nconst FormFields = AssetHistoryForm;\r\n\r\nconst AssetHistoryInitialFormValues = (\r\n defaultEventValue,\r\n defaultTestTypeValue,\r\n forceUnit,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n storageType = CableSpoolingStorageTypeEnum.addToSpecificDrum.value,\r\n) => ({\r\n [FormFields.TYPE_OF_EVENT]: defaultEventValue,\r\n [FormFields.TYPE_OF_TEST]: defaultTestTypeValue,\r\n [FormFields.RESULT]: '',\r\n [FormFields.DATE]: new Date(),\r\n [FormFields.TIME]: '',\r\n [FormFields.DESCRIPTION]: '',\r\n [FormFields.TYPE]: '',\r\n [FormFields.CABLE_CUT]: EMPTY_QUANTITY_LENGTH,\r\n [FormFields.CABLE_SIGNAL]: EMPTY_QUANTITY_WITH_UNIT('cs'),\r\n [FormFields.CABLE_RESISTANCE]: EMPTY_QUANTITY_WITH_UNIT('ohm'),\r\n [FormFields.WRAP_TEST]: EMPTY_QUANTITY_WITH_UNIT('WT'),\r\n [FormFields.STORAGE_TYPE]: storageType,\r\n\r\n //BOP TEST\r\n [FormFields.BOP_RAM]: '',\r\n [FormFields.BOP_LEAK_TYPE_DESCRIPTION]: '',\r\n [FormFields.CABLE_TORSION_WRAP]: '',\r\n\r\n //CABLE WRAP TEST\r\n [FormFields.CABLE_WRAP_TEST_STRAND]: '',\r\n [FormFields.CABLE_WRAP_TEST_STRAND_PASS_X]: '',\r\n [FormFields.CABLE_WRAP_TEST_STRAND_OUT_Y]: '',\r\n\r\n //CABLE TORTURE TEST\r\n [FormFields.CABLE_TORTURE_TEST_INNER_ARMOUR_DUCTILITY_SCORE]: '',\r\n [FormFields.CABLE_TORTURE_TEST_OUTER_ARMOUR_DUCTILITY_SCORE]: '',\r\n\r\n //CABLE CONTINUITY TEST\r\n [FormFields.CABLE_CONTINUITY_TEST_RESISTANCE]: '',\r\n\r\n //SIL2 TEST\r\n [FormFields.ASSET_SIL2_TEST_BOP]: '',\r\n [FormFields.ASSET_SIL2_TEST_BCS]: '',\r\n [FormFields.ASSET_SIL2_TEST_CABIN]: '',\r\n\r\n //CABLE WRAP BRAIDED MONO TEST\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_PASS_X]: '',\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_INNER_STRAND_OUT_OF_Y]: '',\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_PASS_X]: '',\r\n [FormFields.CABLE_WRAP_BRAIDED_MONO_TEST_OUTER_STRAND_OUT_OF_Y]: '',\r\n\r\n //CABLE BREAK TEST\r\n [FormFields.CABLE_BREAK_TEST_FORCE]: EMPTY_QUANTITY_WITH_UNIT(forceUnit),\r\n\r\n //CABLE CUT MAINTENANCE\r\n [FormFields.CABLE_CUT_MAINTENANCE_DISTANCE]: EMPTY_QUANTITY_WITH_UNIT(\r\n getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.LENGTH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n ),\r\n\r\n //CABLE SERVICE MAINTENANCE\r\n [FormFields.CABLE_SERVICE_MAINTENANCE_CABLE_LENGTH]: EMPTY_QUANTITY_WITH_UNIT(\r\n getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.LENGTH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n ),\r\n [FormFields.CABLE_SERVICE_MAINTENANCE_MAX_OD]: EMPTY_QUANTITY_WITH_UNIT(\r\n getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n ),\r\n\r\n //CABLE SPOOLING MAINTENANCE\r\n [FormFields.CABLE_SPOOLING_DRUM_ITEM_NUMBER]: '',\r\n [FormFields.CABLE_SPOOLING_DRUM_SERIAL_NUMBER]: '',\r\n});\r\n\r\nexport default AssetHistoryInitialFormValues;\r\n","import { formatDateTimeFromSeconds } from 'utils/app.util';\r\n\r\nconst AssetHistoryFormValues = (\r\n formValues,\r\n serialNumber,\r\n assetId,\r\n task,\r\n toolstringId,\r\n taskId,\r\n externalToolId,\r\n description,\r\n bopLeakTypeDescription,\r\n) => {\r\n var assetSil2Bop = {};\r\n var assetSil2Bcs = {};\r\n var assetSil2Cabin = {};\r\n if (formValues.assetSil2Bop) {\r\n const splitedFormValues = formValues.assetSil2Bop.split(';');\r\n assetSil2Bop.surfaceId = splitedFormValues[0];\r\n assetSil2Bop.itemNumber = splitedFormValues[1];\r\n assetSil2Bop.serialNumber = splitedFormValues[2];\r\n }\r\n if (formValues.assetSil2Bcs) {\r\n const splitedFormValues = formValues.assetSil2Bcs.split(';');\r\n assetSil2Bcs.surfaceId = splitedFormValues[0];\r\n assetSil2Bcs.itemNumber = splitedFormValues[1];\r\n assetSil2Bcs.serialNumber = splitedFormValues[2];\r\n }\r\n if (formValues.assetSil2Cabin) {\r\n const splitedFormValues = formValues.assetSil2Cabin.split(';');\r\n assetSil2Cabin.surfaceId = splitedFormValues[0];\r\n assetSil2Cabin.itemNumber = splitedFormValues[1];\r\n assetSil2Cabin.serialNumber = splitedFormValues[2];\r\n }\r\n\r\n return {\r\n serialNumber: serialNumber,\r\n assetId: assetId,\r\n startDate: formatDateTimeFromSeconds(formValues.date, formValues.time),\r\n time: formatDateTimeFromSeconds(formValues.date, formValues.time),\r\n typeOfEvent: formValues.typeOfEvent,\r\n externalToolId: externalToolId,\r\n externalTaskId: task?.get('externalId'),\r\n\r\n // complaint and maintenance\r\n description,\r\n storageType: formValues.storageType,\r\n\r\n // test\r\n comment: description,\r\n testType: formValues.typeOfTest,\r\n result: formValues.result,\r\n cableCut: formValues.cableCut,\r\n cableSignal: formValues.cableSignal,\r\n cableResistance: formValues.cableResistance,\r\n torqueInnerStrand: formValues.torqueInnerStrand,\r\n torqueOuterStrand: formValues.torqueOuterStrand,\r\n wrapTest: formValues.wrapTest,\r\n\r\n //BOP TEST\r\n bopRam: formValues.bopRam,\r\n bopLeakType: formValues.bopLeakType,\r\n bopLeakTypeDescription: bopLeakTypeDescription,\r\n\r\n //STRING TEST\r\n toolstringId: toolstringId,\r\n taskId: taskId,\r\n\r\n //CABLE TORSION TEST\r\n cableTorsionWrap: parseInt(formValues.cableTorsionWrap),\r\n strandsPassed: {\r\n item1: parseInt(formValues.strandsPassedPassX),\r\n item2: parseInt(formValues.strandsPassedOutY),\r\n },\r\n\r\n //CABLE TORTURE TEST\r\n outerArmourDuctilityScore: formValues.outerArmourDuctilityScore,\r\n innerArmourDuctilityScore: formValues.innerArmourDuctilityScore,\r\n\r\n //CABLE CONTINUITY TEST\r\n resistance: formValues.resistance,\r\n\r\n //CABLE INSULATION TEST\r\n cableInsulationResistance: formValues.cableInsulationResistance,\r\n\r\n //SIL2 TEST\r\n assetSil2Bop: assetSil2Bop,\r\n assetSil2Bcs: assetSil2Bcs,\r\n assetSil2Cabin: assetSil2Cabin,\r\n\r\n // CABLE WRAP BRAIDED MONO\r\n cableWrapBraidedMonoTestInnerStrand: {\r\n item1: parseInt(formValues.cableWrapBraidedMonoTestInnerStrandPassX),\r\n item2: parseInt(formValues.cableWrapBraidedMonoTestInnerStrandOutY),\r\n },\r\n cableWrapBraidedMonoTestOuterStrand: {\r\n item1: parseInt(formValues.cableWrapBraidedMonoTestOuterStrandPassX),\r\n item2: parseInt(formValues.cableWrapBraidedMonoTestOuterStrandOutY),\r\n },\r\n\r\n //CABLE BREAK TEST\r\n cableBreakTestForceNumber: formValues.cableBreakTestForceNumber,\r\n\r\n // CABLE CUT MAINTENANCE\r\n distanceQuantity: formValues.distanceQuantity,\r\n\r\n // CABLE SERVICE MAINTENANCE\r\n cableLengthQuantity: formValues.cableLengthQuantity,\r\n maxODQuantity: formValues.maxODQuantity,\r\n\r\n //CABLE SPOOLING MAINTENANCE\r\n drumItemNumber: formValues.drumItemNumber,\r\n drumSerialNumber: formValues.drumSerialNumber,\r\n };\r\n};\r\n\r\nexport default AssetHistoryFormValues;\r\n","import { EMPTY_MAP } from 'app/app.constants';\r\nimport { createSelector } from 'utils/app.util';\r\n\r\nexport const getToolGroupsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'toolGroups']),\r\n (toolGroups) => toolGroups,\r\n);\r\n\r\nexport const getToolsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'tools']),\r\n (toolGroups) => toolGroups,\r\n);\r\n\r\nexport const getToolAssembliesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'toolAssemblies']),\r\n (toolAssemblies) => toolAssemblies,\r\n);\r\n\r\nexport const getToolSuppliersFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'toolSuppliers']),\r\n (toolSuppliers) => toolSuppliers,\r\n);\r\n\r\nexport const getCablesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'cables']),\r\n (toolSuppliers) => toolSuppliers,\r\n);\r\n\r\nexport const getToolFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'tool']),\r\n (tool) => tool,\r\n);\r\n\r\nexport const getToolConnectorsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'toolConnectors']),\r\n (toolConnectors) => toolConnectors,\r\n);\r\n\r\nexport const getBhaTemplatesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'bhaTemplates']),\r\n (tool) => tool,\r\n);\r\n\r\nexport const getEquipmentTemplatesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'equipmentTemplates']),\r\n (equipment) => equipment,\r\n);\r\n\r\nexport const getUnitsOfMeasurePreference = createSelector(\r\n (state) => state.getIn(['common', 'currentUser', 'unit']),\r\n (currentUser) => currentUser,\r\n);\r\n\r\nexport const getSurfaceEquipmentFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'surfaceEquipments']),\r\n (tool) => tool,\r\n);\r\n\r\nexport const getSurfaceEquipmentCategoriesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'surfaceEquipmentCategories']),\r\n (tool) => tool,\r\n);\r\n\r\nexport const getSurfaceEquipmentByIdFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'surfaceEquipment']),\r\n (tool) => tool,\r\n);\r\n\r\nexport const getSurfaceEquipmentGroupsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'surfaceEquipmentGroups']),\r\n (toolGroups) => toolGroups,\r\n);\r\n\r\nexport const getAssetHistoryFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'assetHistory']),\r\n (assetHistory) => assetHistory,\r\n);\r\n\r\nexport const getCableFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'cable']),\r\n (tool) => tool,\r\n);\r\n\r\nexport const getCableTestDetailsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'cableTestDetails']),\r\n (tool) => tool,\r\n);\r\n\r\nexport const getTemplateForEditFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'bhaTemplateToEdit']),\r\n (template) => template,\r\n);\r\n\r\nexport const getTemplateSectionsForEditFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'bhaTemplateSectionsToEdit']),\r\n (templateSections) => templateSections,\r\n);\r\n\r\nexport const getTemplateToolstringToolsFromState = createSelector(\r\n getTemplateForEditFromState,\r\n (toolstring) => {\r\n if (!toolstring || !toolstring.has('toolsByToolstringToolId')) {\r\n return EMPTY_MAP;\r\n }\r\n\r\n const toolStringItems = toolstring.get('toolsByToolstringToolId');\r\n if (!toolStringItems || typeof toolStringItems.toList !== 'function') {\r\n return EMPTY_MAP;\r\n }\r\n\r\n return toolStringItems.toList().sortBy((tool) => tool.get('sequence'));\r\n },\r\n);\r\n\r\nexport const getEquipmentAssetsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'equipment', 'assets']),\r\n (projects) => projects,\r\n);\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nconst CableCutMaintenanceFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableCutMaintenanceFormComponent;\r\n","import React from 'react';\r\nimport { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nconst CableServiceMaintenanceFormComponent = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableServiceMaintenanceFormComponent;\r\n","import { useCallback } from 'react';\r\nimport AssetHistoryForm from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport { searchM3Items } from 'features/equipment/equipment.actions';\r\nimport { AutocompleteTextField } from 'app/components/form/AutocompleteTextField';\r\n\r\nconst AutoCompleteDrumItemNumberAdapter = ({\r\n form,\r\n autoCompleteItemNumber,\r\n setAutoCompleteItemNumber,\r\n clearInputValue = null,\r\n}) => {\r\n const getOptionLabel = useCallback((option) => option.m3ItemNumber, []);\r\n const valueSelectorFromAutocomplete = useCallback(\r\n (newValue) => (newValue ? newValue.m3ItemNumber : null),\r\n [],\r\n );\r\n // There are no initial values here so this is NO-OP\r\n const setInitialFieldValue = useCallback(() => {}, []);\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AutoCompleteDrumItemNumberAdapter;\r\n","import { AutocompleteTextField } from 'app/components/form/AutocompleteTextField';\r\nimport { findM3ItemsBySerialNumber } from 'features/equipment/equipment.actions';\r\nimport { useCallback, useState } from 'react';\r\nimport AssetHistoryForm from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\n\r\nconst AutoCompleteDrumSerialNumberAdapter = ({\r\n form,\r\n placeholder = '',\r\n keepChangeAfterOnBlur = false,\r\n InputProps,\r\n autoCompleteValue,\r\n setAutocompleteValue,\r\n ...props\r\n}) => {\r\n const [m3ItemNumber, setM3ItemNumber] = useState(null);\r\n\r\n const setInitialFieldValue = useCallback(\r\n (form) => (setInputFieldValue) => {\r\n if (form?.values?.drumItemNumber) {\r\n setM3ItemNumber(form?.values?.drumItemNumber);\r\n }\r\n // for cables referenceNumber\r\n else if (form?.values?.referenceNumber) {\r\n setM3ItemNumber(form?.values?.referenceNumber);\r\n }\r\n\r\n if (form?.values?.serialNo) {\r\n setInputFieldValue(form?.values?.drumSerialNumber);\r\n }\r\n },\r\n [],\r\n );\r\n const getOptionLabel = useCallback(\r\n (selectedValue) => selectedValue?.serialNumber,\r\n [],\r\n );\r\n const valueSelectorFromAutocomplete = useCallback(\r\n (selectedValue) => selectedValue?.serialNumber,\r\n [],\r\n );\r\n return (\r\n \r\n findM3ItemsBySerialNumber(m3ItemNumber, value)\r\n }\r\n placeholder={placeholder}\r\n id={'auto-complete-serial-number-m3'}\r\n />\r\n );\r\n};\r\n\r\nexport default AutoCompleteDrumSerialNumberAdapter;\r\n","import RadioGroupField from 'app/components/form/RadioGroupField';\r\n\r\nconst RadioGroupFieldFormik = ({\r\n field,\r\n options,\r\n disabled,\r\n ...props\r\n}) => {\r\n const updatedOptions = options.map((o) => ({ ...o, disabled }));\r\n\r\n return ;\r\n};\r\n\r\nexport default RadioGroupFieldFormik;\r\n","import React, { useCallback, useEffect, useMemo } from 'react';\r\nimport { Field, useFormikContext } from 'formik';\r\nimport { Grid, Typography } from '@material-ui/core';\r\n\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport AutoCompleteDrumItemNumberAdapter from './AutoCompleteDrumItemNumberAdapter';\r\nimport AutoCompleteDrumSerialNumberAdapter from './AutoCompleteDrumSerialNumberAdapter';\r\nimport { useState } from 'react';\r\nimport { ASSET_HISTORY_EVENT_TYPES_ITEM } from 'features/equipment/equipment.constants';\r\nimport RadioGroupFieldFormik from 'app/components/form/formik/RadioGroupFieldFormik';\r\nimport { CableSpoolingStorageTypeEnum } from 'features/equipment/assets/components/equipmentMaintenance/utils/constants';\r\n\r\nconst CableSpoolingMaintenanceFormComponent = ({ form }) => {\r\n const [autoCompleteItemNumber, setAutoCompleteItemNumber] = useState(null);\r\n const [autoCompleteValue, setAutocompleteValue] = useState(null);\r\n const { setFieldValue, values: formValues } = useFormikContext();\r\n\r\n const FormFields = AssetHistoryForm;\r\n const options = [\r\n CableSpoolingStorageTypeEnum.addToStorageReel,\r\n CableSpoolingStorageTypeEnum.addToSpecificDrum,\r\n ];\r\n const storageTypeValue = formValues[FormFields.STORAGE_TYPE];\r\n const typeOfEventValue = formValues[FormFields.TYPE_OF_EVENT];\r\n const isAddToSpecificDrum = useMemo(\r\n () =>\r\n storageTypeValue === CableSpoolingStorageTypeEnum.addToSpecificDrum.value,\r\n [storageTypeValue],\r\n );\r\n\r\n const isEventOfMaintenanceType = useMemo(\r\n () =>\r\n String(typeOfEventValue) ===\r\n String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE),\r\n [typeOfEventValue],\r\n );\r\n\r\n const clearInputValue = useCallback(() => {\r\n setAutocompleteValue(null);\r\n setFieldValue(AssetHistoryForm.CABLE_SPOOLING_DRUM_SERIAL_NUMBER, '');\r\n }, [setFieldValue]);\r\n\r\n useEffect(() => {\r\n if (autoCompleteItemNumber !== null) {\r\n clearInputValue();\r\n }\r\n }, [autoCompleteItemNumber, clearInputValue]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {({ form, ...formik }) => {\r\n formik.field.onChange = (e) => {\r\n form.setFieldValue(\r\n FormFields.STORAGE_TYPE,\r\n Number(e.target.value),\r\n );\r\n };\r\n return (\r\n isEventOfMaintenanceType && (\r\n \r\n )\r\n );\r\n }}\r\n \r\n \r\n \r\n {isAddToSpecificDrum ? (\r\n \r\n \r\n \r\n \r\n {'Drum Item Number'}\r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n {'Drum Serial Number'}\r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default CableSpoolingMaintenanceFormComponent;\r\n","import React from 'react';\r\n\r\nimport { useFormikContext } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { ASSET_HISTORY_MAINTENANCE_TYPES } from 'features/equipment/equipment.constants';\r\nimport { AssetMaintenanceType } from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { AssetHistoryForm } from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport CableCutMaintenanceFormComponent from 'features/equipment/assets/components/equipmentMaintenance/CableCutMaintenanceFormComponent';\r\nimport CableServiceMaintenanceFormComponent from 'features/equipment/assets/components/equipmentMaintenance/CableServiceMaintenanceFormComponent';\r\nimport CableSpoolingMaintenanceFormComponent from 'features/equipment/assets/components/equipmentMaintenance/CableSpoolingMaintenanceFormComponent';\r\n\r\nconst MaintenanceForm = ({\r\n form,\r\n maintenanceTypeItems = ASSET_HISTORY_MAINTENANCE_TYPES.filter(\r\n (item) => item.showByDefault,\r\n ),\r\n defaultMaintenanceTypeValue,\r\n selectedCustomUnitsOfMeasure,\r\n unitsOfMeasurePreference,\r\n projectMeasurementSystem,\r\n}) => {\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n const { values } = useFormikContext();\r\n\r\n const selectedMaintenanceType = values[AssetHistoryForm.TYPE_OF_TEST];\r\n\r\n const maintenanceTypeComponents = React.useMemo(\r\n () => ({\r\n [AssetMaintenanceType.CABLE_CUT]: {\r\n CustomComponent: CableCutMaintenanceFormComponent,\r\n },\r\n [AssetMaintenanceType.CABLE_SERVICE]: {\r\n CustomComponent: CableServiceMaintenanceFormComponent,\r\n },\r\n [AssetMaintenanceType.CABLE_SPOOLING]: {\r\n CustomComponent: CableSpoolingMaintenanceFormComponent,\r\n },\r\n }),\r\n [],\r\n );\r\n\r\n const SelectedComponent = maintenanceTypeComponents[\r\n selectedMaintenanceType\r\n ] || {\r\n CustomComponent: () => null,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {defaultMaintenanceTypeValue ? null : (\r\n \r\n )}\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MaintenanceForm;\r\n","import React, { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n Grid,\r\n Dialog,\r\n Button,\r\n DialogContent,\r\n withStyles,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { ModalHeader, ModalActions, LoadingButton } from 'altus-ui-components';\r\nimport { Form, Formik, Field, useFormikContext, ErrorMessage } from 'formik';\r\nimport { convertToRaw } from 'draft-js';\r\n\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport DatePickerFormik from 'app/components/form/formik/DatePickerFormik';\r\nimport TimeSpanFormik from 'app/components/form/formik/TimeSpanFormik';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { Avatar as TooltipAvatar } from 'app/components/withTooltip';\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentUserFromState,\r\n getCurrentClientSelectedUom,\r\n} from 'app/app.selectors';\r\nimport { createAssetHistory } from 'features/equipment/equipment.actions';\r\nimport {\r\n EQUIPMENT_ACTIONS,\r\n ASSET_HISTORY_EVENT_TYPES,\r\n ASSET_HISTORY_EVENT_TYPES_ITEM,\r\n} from 'features/equipment/equipment.constants';\r\nimport { useParams } from 'react-router-dom';\r\nimport { getTaskById } from 'features/projects/tasks/tasks.selectors';\r\n\r\nimport TestForm from 'features/equipment/assets/components/TestForm';\r\nimport { useViewMode } from 'app/hooks/useViewMode';\r\nimport AssetHistoryYupValidator from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryYupValidator';\r\nimport AssetHistoryInitialFormValues from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryInitialFormValues';\r\nimport AssetHistoryForm from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryForm';\r\nimport AssetHistoryFormValues from 'features/equipment/assets/components/equipmentTest/form-utils/AssetHistoryFormValues';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { getUnitsOfMeasurePreference } from 'features/equipment/equipment.selectors';\r\nimport { getUnitForCustomUnit } from 'features/equipment/equipment.helpers';\r\nimport {\r\n CONVERT_MEASURES,\r\n USE_PROJECT_DEFAULT_UNIT_SYSTEM,\r\n} from 'app/app.constants';\r\nimport MaintenanceForm from 'features/equipment/assets/components/MaintenanceForm';\r\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\r\n\r\nexport const AssetTestType = {\r\n GENERIC: '1',\r\n CABLE: '2',\r\n BOP_TEST: '3',\r\n TEST_STRING: '4',\r\n CABLE_TORSION_TEST: '5',\r\n CABLE_WRAP_TEST: '6',\r\n CABLE_TORTURE_TEST: '7',\r\n CABLE_CONTINUITY_TEST: '8',\r\n CABLE_INSULATION_TEST: '9',\r\n SIL2_TEST: '10',\r\n CABLE_WRAP_BRAIDED_MONO_TEST: '11',\r\n CABLE_BREAK_TEST: '12',\r\n};\r\nexport const AssetMaintenanceType = {\r\n GENERIC: '1',\r\n CABLE_CUT: '2',\r\n CABLE_SERVICE: '3',\r\n CABLE_SPOOLING: '4',\r\n};\r\n\r\nconst CreateAssetHistoryModalContainer = ({\r\n toggleModal,\r\n isOpen,\r\n user,\r\n classes,\r\n serialNumber,\r\n assetId,\r\n externalToolId,\r\n equipmentType,\r\n getAssetAfterRefresh = true,\r\n assetHistoryEventTypes = ASSET_HISTORY_EVENT_TYPES,\r\n testTypesItems,\r\n toolstringId,\r\n defaultEventValue = '',\r\n defaultTestTypeValue = '',\r\n modalTitle = 'New Event',\r\n sil2TestBopItems,\r\n sil2TestBcsItems,\r\n sil2TestCabinItems,\r\n maintenanceTypeItems,\r\n}) => {\r\n const isMobile = useViewMode() === 'mobile';\r\n const { taskId } = useParams();\r\n const task = useSelector(getTaskById(taskId));\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n const dispatch = useDispatch();\r\n\r\n const projectMeasurementSystem = useSelector(getCurrentProject);\r\n const measurePreferences = useSelector(getCurrentClientSelectedUom);\r\n const unitsOfMeasurePreference = useSelector(getUnitsOfMeasurePreference);\r\n\r\n const selectedCustomUnitsOfMeasure =\r\n USE_PROJECT_DEFAULT_UNIT_SYSTEM === unitsOfMeasurePreference\r\n ? projectMeasurementSystem\r\n : measurePreferences;\r\n\r\n const forceUnit = getUnitForCustomUnit(\r\n CONVERT_MEASURES.FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n projectMeasurementSystem,\r\n );\r\n\r\n const convertEditorContentToJson = (editorContent) => {\r\n return editorContent\r\n ? JSON.stringify(convertToRaw(editorContent.getCurrentContent()))\r\n : null;\r\n };\r\n\r\n const FormFields = AssetHistoryForm;\r\n\r\n const initialFormValues = useMemo(() => {\r\n return AssetHistoryInitialFormValues(\r\n defaultEventValue,\r\n defaultTestTypeValue,\r\n forceUnit,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n );\r\n }, [\r\n defaultEventValue,\r\n defaultTestTypeValue,\r\n forceUnit,\r\n selectedCustomUnitsOfMeasure,\r\n unitsOfMeasurePreference,\r\n ]);\r\n\r\n const AssetFormContent = ({ defaultTestTypeValue }) => {\r\n const form = useFormikContext();\r\n const { values } = form;\r\n\r\n const showTestFields =\r\n String(values[FormFields.TYPE_OF_EVENT]) ===\r\n String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST);\r\n const showMaintenanceFields =\r\n String(values[FormFields.TYPE_OF_EVENT]) ===\r\n String(ASSET_HISTORY_EVENT_TYPES_ITEM.MAINTENANCE);\r\n\r\n return (\r\n <>\r\n {showTestFields && (\r\n <>\r\n \r\n \r\n )}\r\n {showMaintenanceFields && (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const handleSubmit = (formValues) => {\r\n const description = convertEditorContentToJson(formValues?.description);\r\n const bopLeakTypeDescription = convertEditorContentToJson(\r\n formValues?.bopLeakTypeDescription,\r\n );\r\n\r\n const assetHistory = AssetHistoryFormValues(\r\n formValues,\r\n serialNumber,\r\n assetId,\r\n task,\r\n toolstringId,\r\n taskId,\r\n externalToolId,\r\n description,\r\n bopLeakTypeDescription,\r\n );\r\n\r\n dispatch(\r\n createAssetHistory(assetHistory, equipmentType, getAssetAfterRefresh),\r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n {(formik) => {\r\n const { isValid, isSubmitting } = formik;\r\n return (\r\n
\r\n {!isMobile ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {modalTitle}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {defaultEventValue ? null : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {(msg) =>
{msg}
}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n

\r\n \r\n \r\n {!user.get('avatar') && user.get('initials')}\r\n \r\n {user.get('name')}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n CANCEL\r\n \r\n \r\n SAVE\r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n triggerIconRoot: {\r\n height: 45,\r\n width: 45,\r\n marginRight: 10,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n opacity: 0.7,\r\n },\r\n },\r\n gridBackground: {\r\n background: theme.altus.components.ApplicationSidebar.background,\r\n },\r\n gridBackgroundMobile: {\r\n position: 'absolute',\r\n bottom: 0,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n },\r\n backButtonIcon: {\r\n color: theme.palette.primary.newLight,\r\n width: '90%',\r\n height: '90%',\r\n },\r\n statusHeader: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n paddingLeft: theme.spacing(2),\r\n paddingTop: theme.spacing(2),\r\n },\r\n containedButton: {\r\n minHeight: theme.spacing(8),\r\n minWidth: theme.spacing(20),\r\n marginBottom: theme.spacing(2),\r\n },\r\n containedButtonGrey: {\r\n minHeight: theme.spacing(8),\r\n minWidth: theme.spacing(20),\r\n marginBottom: theme.spacing(2),\r\n backgroundColor: theme.palette.secondary.lighter,\r\n color: theme.palette.secondary.dark,\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_ASSET_HISTORY,\r\n ),\r\n user: getCurrentUserFromState(state),\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps),\r\n withStyles(styles),\r\n)(CreateAssetHistoryModalContainer);\r\n","import { Field } from 'formik';\r\nimport { useState } from 'react';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { isImmutable, Map } from 'immutable';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport DeleteIcon from '@material-ui/icons/Close';\r\nimport { memo, useCallback } from 'react';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { sortableElement } from 'react-sortable-hoc';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ShowAttachments from '@material-ui/icons/Link';\r\nimport HideAttachments from '@material-ui/icons/LinkOff';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport AttachIcon from '@material-ui/icons/InsertLink';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, IconButton, Typography, Tooltip, Chip } from '@material-ui/core';\r\nimport MoreVert from '@material-ui/icons/MoreVert';\r\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\r\nimport PlaylistAddIcon from '@material-ui/icons/PlaylistAdd';\r\nimport { useModal } from 'altus-modal';\r\nimport { Menu, MenuItem, Select } from '@material-ui/core';\r\nimport { useDispatch } from 'react-redux';\r\nimport _isNil from 'lodash/isNil';\r\n\r\nimport {\r\n DragHandle,\r\n SortableTable,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n ToolType,\r\n ToolCategoryType,\r\n} from 'features/projects/tool/tool.constants';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowAutocompleteTextFieldFormik from 'app/components/form/formik/TableRowAutocompleteTextFieldFormik';\r\nimport ToolstringToolsTableRow from 'features/projects/tasks/task/toolstring/components/ToolstringToolsTableRow';\r\nimport { TASK_URLS } from 'features/projects/activities/activities.constants';\r\nimport {\r\n MODAL,\r\n EquipmentType,\r\n ASSET_HISTORY_TEST_TYPES,\r\n ASSET_HISTORY_EQUIPMENT_TYPE,\r\n} from 'features/equipment/equipment.constants';\r\nimport { TOOL_STATUS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport { updateToolStringToolStatus } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { TOOLSTRING_OPTION_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport { formatToolstringToolStatusString } from 'features/projects/tasks/task/toolstring/toolstring.util';\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\n\r\nconst getSubRows = (row) => {\r\n const immutable = isImmutable(row);\r\n let tools = immutable\r\n ? row.get('toolAssemblyTools')\r\n : row.original?.toolAssemblyTools;\r\n const attachments = immutable\r\n ? row.get('attachedTools')\r\n : row.original?.attachedTools;\r\n\r\n if (tools && !Array.isArray(tools)) {\r\n tools = tools?.toArray();\r\n }\r\n\r\n return attachments?.size > 0 ? attachments.toArray() : tools;\r\n};\r\n\r\nconst SortableFormikRow = sortableElement(EditableTableRowFormik);\r\n\r\nconst getConnectorName = (item) => item.get('name', '').toUpperCase();\r\n\r\nconst TaskToolstringEditorToolsTable = ({\r\n classes,\r\n toolConnectors,\r\n toolstringTools,\r\n onDuplicateItem,\r\n onAddToolAttachments,\r\n onSortToolstringTool,\r\n updateItemProperties,\r\n onDeleteToolstringTool,\r\n onAddToolAssemblyTools,\r\n onDeleteToolAssemblyTool,\r\n onDeleteToolstringAttachment,\r\n hiddenColumns = [],\r\n showCustomActions,\r\n widthSerialColumn = 1,\r\n templateEditor,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n hideDragHandle,\r\n disabledSerialNumbers = false,\r\n disableToolStatus = false,\r\n}) => {\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_ASSET_HISTORY_TEST);\r\n const [serialNumber, setSerialNumber] = useState();\r\n const [toolId, setToolId] = useState();\r\n\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleModal();\r\n };\r\n const lengthUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('length'),\r\n );\r\n\r\n const weightUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('weight'),\r\n );\r\n\r\n const forceUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('yieldValue'),\r\n );\r\n\r\n const diameterUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('outerDiameter'),\r\n );\r\n\r\n const ToolStatusMenu = ({ toolstringItemId, status }) => {\r\n const [value, setValue] = useState(status);\r\n const dispatch = useDispatch();\r\n\r\n const handleChange = (event) => {\r\n setValue(event.target.value);\r\n dispatch(\r\n updateToolStringToolStatus(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItemId,\r\n event.target.value,\r\n ),\r\n );\r\n };\r\n\r\n return (\r\n \r\n N/A\r\n Set\r\n Retrieve\r\n \r\n\r\n // readonly\r\n );\r\n };\r\n\r\n const DropdownMenu = ({ externalToolId, serialNumber }) => {\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const open = Boolean(anchorEl);\r\n const showOptions = externalToolId && serialNumber;\r\n const handleClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n const complaintMenuItem = () => {\r\n return (\r\n {\r\n handleClose();\r\n window.open(\r\n TASK_URLS.ADD_COMPLAINT_URL,\r\n '_blank',\r\n 'noopener,noreferrer',\r\n );\r\n }}\r\n >\r\n \r\n Add Complaint\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!showOptions ? (\r\n \r\n {complaintMenuItem()}\r\n
\r\n ) : (\r\n \r\n {\r\n setSerialNumber(serialNumber);\r\n setToolId(externalToolId);\r\n handleClose();\r\n openModal();\r\n }}\r\n >\r\n {} Add Event to\r\n Asset\r\n \r\n {\r\n handleClose();\r\n window.open(\r\n `/equipment/${externalToolId}/assethistory/${serialNumber}`,\r\n '_blank',\r\n 'noopener,noreferrer',\r\n );\r\n }}\r\n >\r\n {}\r\n Open Asset History\r\n \r\n {complaintMenuItem()}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const columns = [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const hasAttachments = row.original.get('attachedTools')?.size > 0;\r\n const [less, more] = hasAttachments\r\n ? [, ]\r\n : [, ];\r\n\r\n const title = hasAttachments\r\n ? 'Toggle Attached Tools'\r\n : row.getToggleRowExpandedProps().title;\r\n\r\n const actions = [\r\n {\r\n visible: row.depth > 0, // placeholder to keep DragHandle left aligned\r\n content: null,\r\n },\r\n {\r\n visible: row.depth < 2 && !hideDragHandle,\r\n content: ,\r\n },\r\n {\r\n visible: hasAttachments || row.canExpand,\r\n content: (\r\n \r\n {row.isExpanded ? less : more}\r\n \r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {actions\r\n .filter((action) => action.visible)\r\n .map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n if (row.canExpand) {\r\n const toolAssemblyTools = tool.get('toolAssemblyTools');\r\n if (_isNil(toolAssemblyTools)) {\r\n return null;\r\n }\r\n const hasNullDataVerified = toolAssemblyTools?.some(\r\n (tool) => tool.get('dataVerified') === null,\r\n );\r\n if (hasNullDataVerified) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n } else if (!tool.get('dataVerified')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolItemNo',\r\n Header: 'Item No.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n Cell: ({ value, row }) => (\r\n \r\n {value\r\n ? row.original.get('toolGroupCategory') !==\r\n ToolCategoryType.ThirdParty\r\n ? `#${value}`\r\n : value\r\n : null}\r\n \r\n ),\r\n },\r\n {\r\n xs: widthSerialColumn,\r\n id: 'serialNo',\r\n Header: 'Serial No.',\r\n accessor: (tool) => tool.get('serialNo'),\r\n Cell: ({ value, row }) => {\r\n const hideAssemblySerialNumber =\r\n hiddenColumns.includes('hideAssemblySerialNumber') && row?.canExpand;\r\n\r\n const hasAttachedTools = row.original.get('attachedTools')?.size > 0;\r\n\r\n if (hideAssemblySerialNumber && !hasAttachedTools) {\r\n return null;\r\n }\r\n\r\n if (row.original.get('type') === ToolType.ASSEMBLY) {\r\n return null;\r\n }\r\n\r\n if (hiddenColumns.includes('hideSerialNumbers')) {\r\n return value;\r\n }\r\n\r\n if (_isNil(row.original.get('m3ItemNumber'))) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolAccumulatedLength',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['accumulatedLength', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolFishNeck',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['fishNeck', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolLength',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['length', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolWeight',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['weight', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolOuterDiameter',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['outerDiameter', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'yieldValue',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['yieldValue', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n\r\n {\r\n xs: 1,\r\n id: 'topC',\r\n Header: 'Top C.',\r\n Cell: ({ row }) => {\r\n const connectorId = row.original.get('topToolConnectorId');\r\n\r\n if (!toolConnectors?.size || !connectorId) return null;\r\n\r\n return getConnectorName(toolConnectors.get(connectorId));\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'botC',\r\n Header: 'Bot. C.',\r\n Cell: ({ row }) => {\r\n const connectorId = row.original.get('bottomToolConnectorId');\r\n\r\n if (!toolConnectors?.size || !connectorId) return null;\r\n\r\n return getConnectorName(toolConnectors.get(connectorId));\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'supplier',\r\n Header: 'Supplier',\r\n accessor: (tool) => tool.get('supplier'),\r\n Cell: ({ value: supplier, row }) => {\r\n const isAssembly = row.original.get('type') === ToolType.ASSEMBLY;\r\n\r\n if (isAssembly) return null;\r\n\r\n return (\r\n \r\n {supplier || 'Altus Inc.'}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'status',\r\n Header: 'Tool Status',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n const toolStatus = tool.get('toolStatus');\r\n\r\n // disable setting tool status for tool assembly tools\r\n const isToolstringAssemblyTool =\r\n tool.get('type') === ToolType.ASSEMBLY_TOOL;\r\n\r\n if (\r\n _isNil(tool.get('toolAssemblyTools')) ||\r\n !toolStatus ||\r\n isToolstringAssemblyTool\r\n ) {\r\n return null;\r\n }\r\n\r\n if (disableToolStatus) {\r\n if (\r\n toolStatus === TOOL_STATUS.NOT_ASSIGNED ||\r\n toolStatus === TOOL_STATUS.NULL_ASSIGNED\r\n )\r\n return null;\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const { original: toolstringItem } = row;\r\n const externalToolId = toolstringItem.get('toolId');\r\n const serialNumber = toolstringItem.get('serialNo');\r\n\r\n const isToolstringAssembly =\r\n toolstringItem.get('type') === ToolType.ASSEMBLY;\r\n\r\n const isToolstringAssemblyTool =\r\n toolstringItem.get('type') === ToolType.ASSEMBLY_TOOL;\r\n\r\n const isToolstringAttachment =\r\n toolstringItem.get('type') === ToolType.ATTACHMENT;\r\n\r\n const actions = [\r\n {\r\n id: TOOLSTRING_OPTION_ACTIONS.ADD_TOOL,\r\n visible: isToolstringAssembly && !templateEditor,\r\n content: (\r\n onAddToolAssemblyTools(toolstringItem)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n {\r\n id: TOOLSTRING_OPTION_ACTIONS.ATTACH_TOOL,\r\n visible: !isToolstringAssembly && !isToolstringAttachment,\r\n content: (\r\n onAddToolAttachments(toolstringItem)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n {\r\n visible: true,\r\n content: (\r\n onDuplicateItem(toolstringItem)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n {\r\n id: TOOLSTRING_OPTION_ACTIONS.ASSET_HISTORY,\r\n visible: false,\r\n content: (\r\n
\r\n \r\n
\r\n ),\r\n },\r\n {\r\n id: TOOLSTRING_OPTION_ACTIONS.REMOVE_TOOL,\r\n visible: true,\r\n content: (\r\n \r\n isToolstringAttachment\r\n ? onDeleteToolstringAttachment(toolstringItem)\r\n : isToolstringAssemblyTool\r\n ? onDeleteToolAssemblyTool(toolstringItem)\r\n : onDeleteToolstringTool(toolstringItem)\r\n }\r\n >\r\n \r\n \r\n ),\r\n },\r\n ];\r\n\r\n const filteredActions = showCustomActions\r\n ? actions.filter((action) => showCustomActions.includes(action.id))\r\n : actions.filter((action) => action.visible);\r\n\r\n return (\r\n \r\n {filteredActions.map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n const visibleColumns = columns.filter(\r\n (column) => !hiddenColumns.includes(column.id),\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateItemProperties],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n item.equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.TOOL ||\r\n item.equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.BHA ||\r\n item.equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.ALL,\r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n scrollable: {\r\n overflowY: 'auto',\r\n },\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nTaskToolstringEditorToolsTable.propTypes = {\r\n toolstring: PropTypes.instanceOf(Map),\r\n};\r\n\r\nexport default compose(\r\n memo,\r\n withStyles(styles),\r\n)(TaskToolstringEditorToolsTable);\r\n","import { useMemo } from 'react';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { Grid, Fab, Typography } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst FormFields = {\r\n name: 'name',\r\n};\r\n\r\nconst TaskToolstringEditorContentHeader = ({\r\n toolstring,\r\n onAddTools,\r\n onUpdateToolstring,\r\n}) => {\r\n const initialValues = useMemo(\r\n () => ({\r\n [FormFields.name]: toolstring.get('name'),\r\n }),\r\n [toolstring],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n Add Tool\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default TaskToolstringEditorContentHeader;\r\n","import { Map } from 'immutable';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, DialogContent } from '@material-ui/core';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport TaskToolstringPreview from 'features/projects/tasks/task/toolstring/components/TaskToolstringPreview';\r\nimport ToolstringItemHighlightProvider from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\nimport TaskToolstringEditorToolsTable from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorToolsTable';\r\nimport TaskToolstringEditorContentHeader from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorDetailsHeader';\r\n\r\nconst TaskToolstringEditorContent = ({\r\n taskId,\r\n classes,\r\n projectId,\r\n onAddTools,\r\n toolstring,\r\n toolstringId,\r\n templateEditor = false,\r\n toolConnectors,\r\n toolstringTools,\r\n onDuplicateItem,\r\n onAddToolAttachments,\r\n toolstringSections,\r\n onUpdateToolstring,\r\n onSortToolstringTool,\r\n updateItemProperties,\r\n onDeleteToolstringTool,\r\n onAddToolAssemblyTools,\r\n onDeleteToolAssemblyTool,\r\n onDeleteToolstringAttachment,\r\n showHeader = true,\r\n hiddenColumns,\r\n height,\r\n placeHolderAlignBha,\r\n columns = 2,\r\n paddingTopPreview,\r\n widthSerialColumn,\r\n showBreakPoint,\r\n showCustomActions,\r\n hideDragHandle,\r\n disabledSerialNumbers = false,\r\n disableToolStatus = false,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {showHeader && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\nTaskToolstringEditorContent.defaultProps = {\r\n toolstring: EMPTY_MAP,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n paddingBottom: 0,\r\n },\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n [theme.breakpoints.up('xs')]: {\r\n // Mobile\r\n toolstringPreview: {\r\n height: '81%',\r\n },\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n // Tablet\r\n toolstringPreview: {\r\n height: '88%',\r\n },\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n // Desktop\r\n toolstringPreview: {\r\n height: '88%',\r\n },\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n // HD\r\n toolstringPreview: {\r\n height: '95%',\r\n },\r\n },\r\n [theme.breakpoints.up('xl')]: {\r\n // Full HD\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n },\r\n [theme.breakpoints.up('xxl')]: {\r\n // 2K\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n },\r\n [theme.breakpoints.up('xxxl')]: {\r\n // 4K\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n },\r\n});\r\n\r\nTaskToolstringEditorContent.propTypes = {\r\n taskId: PropTypes.string.isRequired,\r\n projectId: PropTypes.string.isRequired,\r\n toolstringId: PropTypes.string.isRequired,\r\n toolstring: PropTypes.instanceOf(Map).isRequired,\r\n};\r\n\r\nexport default compose(withStyles(styles))(TaskToolstringEditorContent);\r\n","import { compose } from 'redux';\r\nimport BlockIcon from '@material-ui/icons/Block';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Divider, Dialog, Grid, Button } from '@material-ui/core';\r\n\r\nimport { ModalActions, NoContentBasePage } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport TaskToolstringTotals from 'features/projects/tasks/task/toolstring/components/TaskToolstringTotals';\r\nimport TaskToolstringEditorAppBar from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorAppBar';\r\nimport TaskToolstringEditorContent from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorContent';\r\n\r\nconst TaskToolstringEditor = ({\r\n open,\r\n taskId,\r\n classes,\r\n onClose,\r\n onEnter,\r\n children,\r\n projectId,\r\n onAddTools,\r\n toolstring = EMPTY_MAP,\r\n toolstringId,\r\n templateEditor,\r\n toolConnectors,\r\n toolstringTools,\r\n onDuplicateItem,\r\n onAddToolAttachments,\r\n toolstringSections,\r\n onUpdateToolstring,\r\n maxAvailableHeight,\r\n onSortToolstringTool,\r\n updateItemProperties,\r\n onDeleteToolstringTool,\r\n onAddToolAssemblyTools,\r\n onDeleteToolAssemblyTool,\r\n onDeleteToolstringAttachment,\r\n}) => {\r\n const hiddenColumns = ['serialNo'];\r\n if (toolstring.get('isPlanned')) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n actions: {\r\n padding: `${theme.spacing(2)}px ${theme.spacing(4)}px`,\r\n },\r\n saveButton: {\r\n paddingRight: theme.spacing(5),\r\n paddingLeft: theme.spacing(5),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(TaskToolstringEditor);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { memo, useCallback, useState, useEffect } from 'react';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\nimport { getSummarizedDataState } from 'altus-datastate';\r\n\r\nimport {\r\n requestUpdateToolstring,\r\n redirectToTaskToolstring,\r\n requestGetTaskToolstring,\r\n requestSortToolstringTools,\r\n requestCreateToolstringTool,\r\n requestDeleteToolstringTool,\r\n requestUpdateToolstringItem,\r\n requestTaskToolstringSections,\r\n requestDuplicateToolstringItem,\r\n requestSortToolstringAssemblyTools,\r\n requestCreateToolstringAssemblyTool,\r\n requestDeleteToolstringAssemblyTool,\r\n requestCreateToolAttachment,\r\n requestDeleteToolstringAttachment,\r\n requestSortToolstringAttachments,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport {\r\n getToolstringFromState,\r\n getToolstringToolsFromState,\r\n getToolstringSectionsFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { requestToolConnectors } from 'features/projects/tool/tool.actions';\r\nimport {\r\n MODAL,\r\n ToolCategoryType,\r\n ToolType,\r\n} from 'features/projects/tool/tool.constants';\r\nimport { getToolConnectorsFromState } from 'features/projects/tool/tool.selector';\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\nimport ToolPickerModalContainer from 'features/projects/tool/components/ToolPickerModalContainer';\r\nimport UseFacilityProjectDecks from 'features/projects/hooks/useFacilityProjectDecks';\r\nimport TaskToolstringEditor from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditor';\r\n\r\nconst toolstringItemCategories = [\r\n ToolCategoryType.MWL,\r\n ToolCategoryType.EWL,\r\n ToolCategoryType.ThirdParty,\r\n ToolCategoryType.Assemblies,\r\n];\r\n\r\nconst toolstringAssemblyToolCategories = [\r\n ToolCategoryType.MWL,\r\n ToolCategoryType.EWL,\r\n ToolCategoryType.ThirdParty,\r\n];\r\n\r\nconst TaskToolstringEditorContainer = ({\r\n taskId,\r\n projectId,\r\n dataState,\r\n toolstringId,\r\n toolstringTools,\r\n toolstringSections,\r\n toolstring = EMPTY_MAP,\r\n toolConnectors = EMPTY_MAP,\r\n dispatchGetToolstring,\r\n dispatchUpdateToolstring,\r\n dispatchGetToolConnectors,\r\n dispatchToolstringSections,\r\n dispatchSortToolstringTools,\r\n dispatchCreateToolstringTool,\r\n dispatchDeleteToolstringTool,\r\n dispatchUpdateToolstringItem,\r\n dispatchDuplicateToolstringItem,\r\n dispatchRedirectToTaskToolstring,\r\n dispatchSortToolstringAssemblyTools,\r\n dispatchDeleteToolstringAssemblyTool,\r\n dispatchCreateToolstringAssemblyTool,\r\n dispatchCreateToolstringAttachment,\r\n dispatchDeleteToolstringAttachment,\r\n dispatchSortToolstringAttachments,\r\n}) => {\r\n const [latestWellboreDetail = EMPTY_MAP, projectWellboreDetailsDataState] =\r\n UseFacilityProjectDecks(projectId);\r\n\r\n const summarizedDataState = getSummarizedDataState(\r\n dataState,\r\n projectWellboreDetailsDataState,\r\n );\r\n\r\n const [facilityDeckValue, setFacilityDeckValue] = useState(null);\r\n\r\n useEffect(() => {\r\n if (\r\n Array.isArray(latestWellboreDetail) &&\r\n latestWellboreDetail?.length > 0\r\n ) {\r\n setFacilityDeckValue(latestWellboreDetail[0]?.maximumRigupHeight, 'N/A');\r\n }\r\n }, [facilityDeckValue, latestWellboreDetail]);\r\n\r\n const [selectedToolstringAssembly, setSelectedToolstringAssembly] =\r\n useState();\r\n\r\n const [selectedToolAttachmentOwner, setSelectedToolAttachmentOwner] =\r\n useState();\r\n\r\n const [toolstringItemModalOpen, toggleToolstringItemModal] = useModal(\r\n MODAL.TOOL_PICKER_MODAL_ID,\r\n );\r\n\r\n const [toolstringAssemblyToolModalOpen, toggleToolAssemblyToolModal] =\r\n useModal(MODAL.TOOL_ASSEMBLY_TOOL_PICKER_MODAL_ID);\r\n\r\n const [toolstringAttachToolModalOpen, toggleToolstringAttachToolModalOpen] =\r\n useModal(MODAL.ATTACH_TOOL_PICKER_MODAL_ID);\r\n\r\n const onAddToolstringAssemblyTools = useCallback(\r\n (toolstringAssembly) => {\r\n toggleToolAssemblyToolModal();\r\n\r\n // we need to keep track of which ToolstringAssembly triggered the ToolPickerModalContainer\r\n setSelectedToolstringAssembly(toolstringAssembly);\r\n },\r\n [toggleToolAssemblyToolModal],\r\n );\r\n\r\n const onEnter = useCallback(() => {\r\n dispatchGetToolstring(projectId, taskId, toolstringId);\r\n dispatchToolstringSections(projectId, taskId, toolstringId);\r\n dispatchGetToolConnectors();\r\n }, [\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n dispatchGetToolstring,\r\n dispatchGetToolConnectors,\r\n dispatchToolstringSections,\r\n ]);\r\n\r\n const onClose = useCallback(() => {\r\n dispatchRedirectToTaskToolstring(projectId, taskId, toolstringId);\r\n }, [projectId, taskId, toolstringId, dispatchRedirectToTaskToolstring]);\r\n\r\n const onAddToolstringItem = useCallback(\r\n (tool) => {\r\n dispatchCreateToolstringTool(projectId, taskId, toolstringId, tool);\r\n },\r\n [projectId, taskId, toolstringId, dispatchCreateToolstringTool],\r\n );\r\n\r\n const onAddToolstringAssemblyTool = useCallback(\r\n (tool) => {\r\n dispatchCreateToolstringAssemblyTool(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n selectedToolstringAssembly.get('toolstringItemId'),\r\n tool,\r\n );\r\n },\r\n [\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n selectedToolstringAssembly,\r\n dispatchCreateToolstringAssemblyTool,\r\n ],\r\n );\r\n\r\n const onDuplicateItem = useCallback(\r\n (tool) => {\r\n dispatchDuplicateToolstringItem(projectId, taskId, toolstringId, tool);\r\n },\r\n [projectId, taskId, toolstringId, dispatchDuplicateToolstringItem],\r\n );\r\n\r\n const onAddToolAttachments = (tool) => {\r\n toggleToolstringAttachToolModalOpen();\r\n setSelectedToolAttachmentOwner(tool);\r\n };\r\n\r\n const onAttachTool = (tool) =>\r\n dispatchCreateToolstringAttachment(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n selectedToolAttachmentOwner,\r\n tool,\r\n );\r\n\r\n const updateItemProperties = useCallback(\r\n (toolstringItem) => {\r\n dispatchUpdateToolstringItem(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n );\r\n },\r\n [projectId, taskId, toolstringId, dispatchUpdateToolstringItem],\r\n );\r\n\r\n const onExitAddTool = useCallback(() => {\r\n dispatchGetToolstring(projectId, taskId, toolstringId);\r\n }, [projectId, taskId, toolstringId, dispatchGetToolstring]);\r\n\r\n const onUpdateToolstring = useCallback(\r\n (values) => {\r\n dispatchUpdateToolstring(projectId, taskId, toolstringId, values);\r\n },\r\n [projectId, taskId, toolstringId, dispatchUpdateToolstring],\r\n );\r\n\r\n const onDeleteToolstringItem = useCallback(\r\n (toolstringTool) => {\r\n dispatchDeleteToolstringTool(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringTool.get('toolstringItemId'),\r\n );\r\n },\r\n [projectId, taskId, toolstringId, dispatchDeleteToolstringTool],\r\n );\r\n\r\n const onDeleteToolAssemblyTool = useCallback(\r\n (toolAssemblyTool) => {\r\n dispatchDeleteToolstringAssemblyTool(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolAssemblyTool.get('toolstringItemId'),\r\n toolAssemblyTool.get('toolAssemblyToolId'),\r\n );\r\n },\r\n [projectId, taskId, toolstringId, dispatchDeleteToolstringAssemblyTool],\r\n );\r\n\r\n const onDeleteToolstringAttachment = (toolStringAttachment) =>\r\n dispatchDeleteToolstringAttachment(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolStringAttachment.get('attachmentOwnerId'),\r\n toolStringAttachment.get('toolstringItemId'),\r\n );\r\n\r\n const onSortToolstringItem = useCallback(\r\n (item) => {\r\n const { oldIndex, newIndex, collection, nodes } = item;\r\n const type = nodes?.[oldIndex]?.node?.getAttribute('data-tool-type');\r\n\r\n if (oldIndex === newIndex || type === undefined) return;\r\n\r\n const toolType = Number(type);\r\n if (toolType === ToolType.TOOL || toolType === ToolType.ASSEMBLY) {\r\n const sortedToolstringItem = toolstringTools.get(oldIndex);\r\n const affectedToolstringItem = toolstringTools.get(newIndex);\r\n\r\n dispatchSortToolstringTools(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n sortedToolstringItem,\r\n affectedToolstringItem,\r\n );\r\n } else if (toolType === ToolType.ASSEMBLY_TOOL) {\r\n const toolstringAssembly = toolstringTools.get(collection);\r\n const toolAssemblyTools = toolstringAssembly.get('toolAssemblyTools');\r\n\r\n const sortedToolstringAssemblyTool = toolAssemblyTools.get(oldIndex);\r\n const affectedToolstringAssemblyTool = toolAssemblyTools.get(newIndex);\r\n\r\n dispatchSortToolstringAssemblyTools(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringAssembly.get('toolstringItemId'),\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n );\r\n } else if (toolType === ToolType.ATTACHMENT) {\r\n const owner = toolstringTools.get(collection);\r\n const sortedToolStringAttachment = owner.getIn([\r\n 'attachedTools',\r\n oldIndex,\r\n ]);\r\n const affectedToolStringAttachment = owner.getIn([\r\n 'attachedTools',\r\n newIndex,\r\n ]);\r\n\r\n dispatchSortToolstringAttachments(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n owner.get('toolstringItemId'),\r\n sortedToolStringAttachment,\r\n affectedToolStringAttachment,\r\n );\r\n } else {\r\n throw new Error(`Unknown tool type ${toolType}`);\r\n }\r\n },\r\n [\r\n toolstringTools,\r\n dispatchSortToolstringTools,\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n dispatchSortToolstringAssemblyTools,\r\n dispatchSortToolstringAttachments,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { toolstringId }) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TOOLS,\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ITEM,\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ASSEMBLY_TOOL,\r\n TOOLSTRING_ACTIONS.REQUEST_DELETE_TOOLSTRING_ATTACHMENT,\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n TOOLSTRING_ACTIONS.REQUEST_DUPLICATE_TOOLSTRING_ITEM,\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_ASSEMBLY_TOOLS,\r\n ),\r\n toolConnectors: getToolConnectorsFromState(state),\r\n toolstring: getToolstringFromState(state, toolstringId),\r\n toolstringTools: getToolstringToolsFromState(state, toolstringId),\r\n toolstringSections: getToolstringSectionsFromState(state, toolstringId),\r\n }),\r\n {\r\n dispatchGetToolstring: requestGetTaskToolstring,\r\n dispatchGetToolConnectors: requestToolConnectors,\r\n dispatchUpdateToolstring: requestUpdateToolstring,\r\n dispatchSortToolstringTools: requestSortToolstringTools,\r\n dispatchToolstringSections: requestTaskToolstringSections,\r\n dispatchUpdateToolstringItem: requestUpdateToolstringItem,\r\n dispatchDeleteToolstringTool: requestDeleteToolstringTool,\r\n dispatchCreateToolstringTool: requestCreateToolstringTool,\r\n dispatchRedirectToTaskToolstring: redirectToTaskToolstring,\r\n dispatchDuplicateToolstringItem: requestDuplicateToolstringItem,\r\n dispatchSortToolstringAssemblyTools: requestSortToolstringAssemblyTools,\r\n dispatchCreateToolstringAssemblyTool: requestCreateToolstringAssemblyTool,\r\n dispatchDeleteToolstringAssemblyTool: requestDeleteToolstringAssemblyTool,\r\n dispatchCreateToolstringAttachment: requestCreateToolAttachment,\r\n dispatchDeleteToolstringAttachment: requestDeleteToolstringAttachment,\r\n dispatchSortToolstringAttachments: requestSortToolstringAttachments,\r\n },\r\n ),\r\n memo,\r\n)(TaskToolstringEditorContainer);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Route, Switch } from 'react-router-dom';\r\n\r\nimport {\r\n clearWellbores,\r\n wellboreContainerOnLoad,\r\n} from 'features/wells/wellbore.actions';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport NavigationAppBar from 'app/components/NavigationAppBar';\r\n\r\nconst WellboreContainer = ({\r\n routes,\r\n fieldId,\r\n wellboreId,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n}) => {\r\n useEffect(() => {\r\n dispatchOnLoad(fieldId, wellboreId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [fieldId, wellboreId, dispatchOnLoad, dispatchOnUnload]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchOnUnload: clearWellbores,\r\n dispatchOnLoad: wellboreContainerOnLoad,\r\n }),\r\n)(WellboreContainer);\r\n","import List from '@material-ui/core/List';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport EventIcon from '@material-ui/icons/FlashOn';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\n\r\nconst styles = (theme) => ({\r\n eventItem: {\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n centerRow: { justifyContent: 'center', display: 'inline-flex' },\r\n eventlist: {\r\n width: '100%',\r\n },\r\n author: {\r\n color: theme.palette.text.secondary,\r\n textAlign: 'right',\r\n },\r\n eventText: {\r\n color: theme.palette.text.primary,\r\n fontSize: '1rem',\r\n },\r\n created: {\r\n textAlign: 'right',\r\n fontSize: 10,\r\n },\r\n emptyIcon: {\r\n fontSize: 150,\r\n color: theme.palette.action.disabled,\r\n },\r\n noEvents: { marginTop: '15vh' },\r\n});\r\n\r\nconst EventList = (props) => {\r\n const { classes, events, currentUser, kind } = props;\r\n\r\n if (events.length === 0) {\r\n return (\r\n \r\n \r\n \r\n There are currently no events for this {kind}\r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n {events.map((event) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${\r\n event.author.id === currentUser.id ? 'You' : event.author.name\r\n } ${event.text}`}\r\n }\r\n />\r\n \r\n \r\n {event.author.avatar ? (\r\n \r\n ) : (\r\n {event.author.initials}\r\n )}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(EventList);\r\n","import classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { anyLoadingDataState } from 'altus-datastate';\r\n\r\nimport { renderContent } from 'utils/app.util';\r\nimport LoadingDimmer from 'app/components/LoadingDimmer';\r\nimport { setSubPage, setHeaderValues } from 'app/app.actions';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n minHeight: 0,\r\n position: 'relative',\r\n },\r\n scrollIndividually: {\r\n overflow: 'auto',\r\n },\r\n subRoot: {\r\n height: '100%',\r\n overflow: 'auto',\r\n },\r\n gridItem: {\r\n height: 'fit-content',\r\n padding: `${theme.spacing(2)}px ${theme.spacing(2)}px`,\r\n },\r\n stickyGridItem: {\r\n [theme.breakpoints.up('md')]: {\r\n position: 'sticky',\r\n top: 0,\r\n },\r\n },\r\n leftRoot: {},\r\n rightRoot: {},\r\n mainRoot: {},\r\n});\r\n\r\nclass BasePage extends PureComponent {\r\n componentDidMount() {\r\n const {\r\n title,\r\n subPage,\r\n subTitle,\r\n dispatchSetSubPage,\r\n dispatchSetHeaderValues,\r\n } = this.props;\r\n\r\n dispatchSetSubPage(subPage);\r\n\r\n dispatchSetHeaderValues({ title, subTitle });\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const { subTitle, title, dispatchSetHeaderValues } = this.props;\r\n const { title: newTitle, subTitle: newSubTitle } = prevProps;\r\n\r\n if (newTitle !== title) {\r\n dispatchSetHeaderValues({ title });\r\n }\r\n if (newSubTitle !== subTitle) {\r\n dispatchSetHeaderValues({ subTitle });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n const { dispatchSetSubPage } = this.props;\r\n\r\n dispatchSetSubPage();\r\n }\r\n\r\n render() {\r\n const {\r\n classes,\r\n children,\r\n dataState,\r\n RootProps,\r\n subRootRef,\r\n loadingText,\r\n LeftContent,\r\n RootContent,\r\n RightContent,\r\n SubRootProps,\r\n MainRootProps,\r\n RootContentProps,\r\n LeftRootProps: { sticky: leftContentSticky, ...LeftRootProps },\r\n RightRootProps: { sticky: rightContentSticky, ...RightRootProps },\r\n LeftContentProps,\r\n RightContentProps,\r\n } = this.props;\r\n const isLoading = anyLoadingDataState(dataState);\r\n\r\n return (\r\n \r\n {isLoading && }\r\n <>\r\n {renderContent(RootContent, RootContentProps)}\r\n \r\n \r\n {renderContent(LeftContent, LeftContentProps)}\r\n \r\n \r\n {renderContent(children)}\r\n \r\n \r\n {renderContent(RightContent, RightContentProps)}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nBasePage.defaultProps = {\r\n loadingText: 'Loading',\r\n subRootRef: () => {},\r\n LeftRootProps: {},\r\n RightRootProps: {},\r\n MainRootProps: {},\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetSubPage: setSubPage,\r\n dispatchSetHeaderValues: setHeaderValues,\r\n};\r\n\r\nexport default connect(\r\n null,\r\n mapDispatchToProps,\r\n)(toJSComponent(withStyles(styles)(BasePage)));\r\n","import { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\n\r\nimport {\r\n getCurrentUserFromState,\r\n getActionDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { pages } from 'app/routePaths';\r\nimport EventList from 'app/components/EventList';\r\nimport BasePage from 'app/components/NewBasePage';\r\nimport { onLoad } from 'features/wells/events/wellEvents.actions';\r\nimport { getWellEventsFromState } from 'features/wells/wellbore.selectors';\r\nimport { WELL_EVENTS_PAGE_LOADED } from 'features/wells/events/wellEvents.constants';\r\n\r\nclass WellEventsContainer extends PureComponent {\r\n componentDidMount() {\r\n const { dispatchOnLoad, fieldId, wellboreId } = this.props;\r\n\r\n dispatchOnLoad(fieldId, wellboreId);\r\n }\r\n\r\n render() {\r\n const { dataState, events, currentUser } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state) => ({\r\n events: getWellEventsFromState(state),\r\n currentUser: getCurrentUserFromState(state),\r\n dataState: getActionDataStateFromState(state, WELL_EVENTS_PAGE_LOADED),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n },\r\n)(toJSComponent(WellEventsContainer));\r\n","import wellboreService from 'services/wellbore.service';\r\n\r\nimport { WELL_EVENTS_PAGE_LOADED } from 'features/wells/events/wellEvents.constants';\r\n\r\nexport const onLoad = (fieldId, wellId) => (dispatch) =>\r\n dispatch({\r\n type: WELL_EVENTS_PAGE_LOADED,\r\n payload: () => wellboreService.getWellboreEvents(fieldId, wellId),\r\n });\r\n","import { useMemo } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport {\r\n getWellboreByIdFromState,\r\n getWellboreDetailByIdFromState,\r\n} from 'features/wells/wellbore.selectors';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nconst useWellbore = (wellboreId) => {\r\n const wellboreSelector = useMemo(\r\n () => getWellboreByIdFromState(wellboreId),\r\n [wellboreId],\r\n );\r\n\r\n const wellbore = useSelector(wellboreSelector) ?? EMPTY_MAP;\r\n\r\n const wellboreDetailSelector = useMemo(\r\n () => getWellboreDetailByIdFromState(wellbore.get('wellboreDetailId')),\r\n [wellbore],\r\n );\r\n\r\n const wellboreDetail =\r\n useSelector(wellboreDetailSelector) ?? wellbore.get('wellboreDetail');\r\n\r\n return {\r\n wellbore,\r\n wellboreDetail,\r\n };\r\n};\r\n\r\nexport default useWellbore;\r\n","import { compose } from 'redux';\r\n\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\n\r\nconst WellboreBreadcrumb = ({ wellboreId }) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n\r\n return wellbore?.get('name') ?? '...';\r\n};\r\n\r\nexport default compose()(WellboreBreadcrumb);\r\n","export const WELL_OVERVIEW_ACTIONS = {\r\n UPLOAD_WELLBORE_TRAJECTORY: 'UPLOAD_WELLBORE_TRAJECTORY',\r\n GET_WELLBORE_TRAJECTORY_PREVIEW: 'GET_WELLBORE_TRAJECTORY_PREVIEW',\r\n GET_WELLCOM_TRAJECTORY_SURVEY: 'GET_WELLCOM_TRAJECTORY_SURVEY',\r\n DOWNLOAD_TRAJECTORY_TEAMPLTE_TXT: 'DOWNLOAD_TRAJECTORY_TEAMPLTE_TXT',\r\n DOWNLOAD_TRAJECTORY_TEAMPLTE_CSV: 'DOWNLOAD_TRAJECTORY_TEAMPLTE_CSV',\r\n DOWNLOAD_TRAJECTORY_SURVEY_TXT: 'DOWNLOAD_TRAJECTORY_SURVEY_TXT',\r\n DOWNLOAD_TRAJECTORY_SURVEY_CSV: 'DOWNLOAD_TRAJECTORY_SURVEY_CSV',\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport ViewColumn from '@material-ui/icons/ViewColumn';\r\nimport ThreeDRotation from '@material-ui/icons/ThreeDRotation';\r\nimport { ToggleButton, ToggleButtonGroup } from '@material-ui/lab';\r\n\r\nexport const TrajectoryViewType = {\r\n THREE_D: 1,\r\n TABLE: 2,\r\n};\r\n\r\nconst WellboreTrajectoryViewToggle = ({ viewType, setViewType }) => (\r\n {\r\n if (!value) return;\r\n\r\n setViewType(value);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nWellboreTrajectoryViewToggle.propTypes = {\r\n viewType: PropTypes.oneOf(Object.values(TrajectoryViewType)).isRequired,\r\n setViewType: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default WellboreTrajectoryViewToggle;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\n\r\nconst IntegrityRiskMatrixValueComponent = ({ color, value }) => {\r\n return (\r\n \r\n \r\n {value}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IntegrityRiskMatrixValueComponent;\r\n","import React from 'react';\r\nimport { Box, Typography, withStyles } from '@material-ui/core';\r\n\r\nconst VerticalProgressContainer = withStyles({\r\n root: {\r\n height: '20px',\r\n width: '100%',\r\n background: 'linear-gradient(to left, #f00, #0f0)',\r\n position: 'relative',\r\n },\r\n})(Box);\r\n\r\nconst Marker = withStyles({\r\n root: {\r\n position: 'absolute',\r\n top: '0',\r\n height: '20px',\r\n width: '4px',\r\n backgroundColor: '#fff',\r\n },\r\n})(Box);\r\n\r\nconst IntegrityMatrixDetailsComponent = ({ value, title }) => {\r\n const markerPosition = `${value}%`;\r\n\r\n return (\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n {value}%\r\n \r\n \r\n {/* */}\r\n \r\n );\r\n};\r\n\r\nexport default IntegrityMatrixDetailsComponent;\r\n","import React from 'react';\r\nimport { Box, Typography, withStyles } from '@material-ui/core';\r\n\r\nconst HorizontalProgressContainer = withStyles({\r\n root: {\r\n height: '20px',\r\n width: '100%',\r\n background: 'linear-gradient(to left, #00f, #09f)',\r\n position: 'relative',\r\n },\r\n})(Box);\r\n\r\nconst Marker = withStyles({\r\n root: {\r\n position: 'absolute',\r\n top: '0',\r\n height: '20px',\r\n width: '4px',\r\n backgroundColor: '#fff',\r\n },\r\n})(Box);\r\n\r\nconst IntegrityMatrixComplianceComponent = ({ value }) => {\r\n const markerPosition = `${value}%`;\r\n\r\n return (\r\n \r\n \r\n Compliance\r\n \r\n \r\n \r\n \r\n {value}%\r\n \r\n \r\n \r\n * Document(s) is required in order to be compliant.\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IntegrityMatrixComplianceComponent;\r\n","import { React, useEffect, useState } from 'react';\r\nimport { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport {\r\n Table,\r\n TableRow,\r\n TableBody,\r\n TableCell,\r\n Typography,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { useTheme } from '@material-ui/core/styles';\r\nimport { alpha } from '@material-ui/core/styles';\r\nimport {\r\n RISK_PRINCIPLE_TYPES,\r\n WellIntegrityRiskMatrix as RiskMatrix,\r\n RULE_TYPES_ENUM,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport IntegrityRiskMatrixValueComponent from './IntegrityRiskMatrixValueComponent';\r\nimport IntegrityMatrixDetailsComponent from './IntegrityMatrixDetailsComponent';\r\nimport IntegrityMatrixComplianceComponent from './IntegrityMatrixComplianceComponent';\r\n\r\nconst IntegrityRiskMatrix = ({\r\n classes,\r\n filteredIntegrities,\r\n title,\r\n finalScore,\r\n}) => {\r\n const theme = useTheme();\r\n const getBackgroundColor = (value) => {\r\n switch (value) {\r\n case 'Red':\r\n return theme.altus.components.RiskMatrix.background.red;\r\n case 'Yellow':\r\n return theme.altus.components.RiskMatrix.background.yellow;\r\n case 'Green':\r\n return theme.altus.components.RiskMatrix.background.green;\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n const [matrix, setMatrix] = useState(List([]));\r\n const [integrityScore, setIntegrityScore] = useState(0);\r\n const [complainaceScore, setComplainceScore] = useState(0);\r\n const [complaince, setCompliance] = useState([]);\r\n\r\n useEffect(() => {\r\n if (filteredIntegrities?.size !== 0) {\r\n const integrities = filteredIntegrities.get(0);\r\n const grid = ruleGrid(integrities, []);\r\n setIntegrityScore(\r\n integrities.riskPrincipleScore\r\n ? integrities.riskPrincipleScore.score * 10\r\n : 0,\r\n );\r\n setMatrix(grid);\r\n }\r\n }, [filteredIntegrities]);\r\n\r\n useEffect(\r\n () => {\r\n let numberOfComplaince = complaince.length;\r\n let numberOfDocumentsAvailable = 0;\r\n let complaincePercentage = 0;\r\n complaince.length &&\r\n complaince.forEach(\r\n (rule) => rule.noOfAttachments > 0 && numberOfDocumentsAvailable++,\r\n );\r\n\r\n complaincePercentage =\r\n (numberOfDocumentsAvailable / numberOfComplaince) * 100;\r\n\r\n setComplainceScore(complaincePercentage);\r\n },\r\n // eslint-disable-next-line\r\n [matrix],\r\n );\r\n\r\n const ruleGrid = (data, initialGrid) => {\r\n const weightCategories = [0, 20, 40, 60, 80, 100]; // 5 rows\r\n const numRows = weightCategories.length - 1; // 5 rows (0-4)\r\n const numCols = 5; // 5 columns\r\n const minScore = 0;\r\n const maxScore = 100;\r\n\r\n const minThreshold = data.riskPrincipleThreshold.minThreshold;\r\n const maxThreshold = data.riskPrincipleThreshold.maxThreshold;\r\n\r\n const columnRange = (maxScore - minScore) / numCols; // Range of scores per column\r\n const rowRange = (maxScore - minScore) / numRows; // Range of weights per row\r\n\r\n // Initialize grid\r\n initialGrid = Array.from({ length: numRows }, () => Array(numCols).fill(0));\r\n\r\n //Complaince List\r\n let complainceList = [];\r\n\r\n // Helper function to map score thresholds\r\n const mapScoreThreshold = (\r\n score,\r\n minThreshold,\r\n maxThreshold,\r\n minScore,\r\n maxScore,\r\n ) => {\r\n if (score === null || score === undefined) return minScore;\r\n const normalized =\r\n ((score - minThreshold) / (maxThreshold - minThreshold)) *\r\n (maxScore - minScore);\r\n return Math.min(Math.max(normalized, minScore), maxScore);\r\n };\r\n\r\n // Recursive function to process nested categories\r\n const processCategories = (category) => {\r\n if (category.details.length > 0) {\r\n processDetails(category.details, category.weight / 100);\r\n }\r\n\r\n if (category.categories.length > 0) {\r\n category.categories.forEach((subCategory) =>\r\n processCategories(subCategory),\r\n );\r\n }\r\n };\r\n\r\n // Recursive function to process nested details\r\n const processDetails = (detailsArray, parentWeight = 1) => {\r\n detailsArray.length > 0 &&\r\n detailsArray.forEach((rule) => {\r\n complainceList = [\r\n ...complainceList,\r\n {\r\n title: rule.title,\r\n type: rule.integrityDetailType,\r\n noOfAttachments: rule.noOfAttachments,\r\n },\r\n ];\r\n if (rule.integrityDetailType === RULE_TYPES_ENUM.RULE_PICKLIST) {\r\n const weight = (rule.weight || 0) * parentWeight;\r\n const score = rule.value?.score;\r\n\r\n if (score !== null && score !== undefined) {\r\n const mappedScore = mapScoreThreshold(\r\n score,\r\n minThreshold,\r\n maxThreshold,\r\n minScore,\r\n maxScore,\r\n );\r\n\r\n // Calculate row and column indices\r\n const rowIndex = Math.floor(weight / rowRange);\r\n const colIndex = Math.floor(mappedScore / columnRange);\r\n\r\n const validRow = Math.min(rowIndex, numRows - 1);\r\n const validCol = Math.min(colIndex, numCols - 1);\r\n\r\n initialGrid[validRow][validCol] += 1;\r\n }\r\n }\r\n });\r\n };\r\n\r\n processCategories(data);\r\n\r\n setCompliance(complainceList);\r\n\r\n return initialGrid.reverse(); // Return updated grid\r\n };\r\n\r\n const getIntersectionNumber = (rowIndex, cellIndex) => {\r\n if (matrix !== EMPTY_LIST) {\r\n if (rowIndex === 0) cellIndex = cellIndex - 1;\r\n return Number(matrix[rowIndex][cellIndex - 1]);\r\n }\r\n };\r\n\r\n const ReversedRiskMatrix = [...RiskMatrix];\r\n ReversedRiskMatrix[0] = ['', ...ReversedRiskMatrix[0].slice(1).reverse()];\r\n for (let i = 1; i < ReversedRiskMatrix.length; i++) {\r\n ReversedRiskMatrix[i] = [\r\n ReversedRiskMatrix[i][0],\r\n ...ReversedRiskMatrix[i].slice(1).reverse(),\r\n ];\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Registered: 2024/11/21\r\n \r\n \r\n {`Risk score: ${finalScore}`}\r\n \r\n \r\n \r\n \r\n \r\n {matrix !== EMPTY_LIST &&\r\n ReversedRiskMatrix.slice(1).map((row, rowIndex) => {\r\n return (\r\n \r\n {row.map((cell, cellIndex) => {\r\n const [symbol, name] = cell.split('-');\r\n\r\n if (cell === 'N/A')\r\n return (\r\n \r\n );\r\n\r\n if (cellIndex === 0) {\r\n return (\r\n \r\n \r\n {symbol}\r\n
\r\n {name}\r\n
\r\n \r\n );\r\n }\r\n\r\n if (cellIndex === 1 && rowIndex === 0) {\r\n return (\r\n \r\n Weight\r\n \r\n );\r\n }\r\n\r\n const number = getIntersectionNumber(\r\n rowIndex,\r\n cellIndex,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n
\r\n );\r\n })}\r\n
\r\n \r\n \r\n \r\n Likelihood\r\n \r\n \r\n \r\n {ReversedRiskMatrix[0].map((header, index) => {\r\n if (header === 'N/A') {\r\n return ;\r\n }\r\n const [symbol, name] = header.split('-');\r\n const cellClasses = [classes.roundedCell];\r\n cellClasses.push(\r\n classes.myToolbar,\r\n classes.centeredContent,\r\n classes.borderNone,\r\n classes.columnWidth,\r\n );\r\n\r\n if (index === 0) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n {symbol}\r\n
\r\n {name}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n myToolbar: {\r\n borderRadius: '4px',\r\n border: 'none',\r\n },\r\n tableSpacing: {\r\n width: '100%',\r\n maxWidth: '100%',\r\n },\r\n columnWidth: {\r\n width: '100%',\r\n },\r\n roundedCell: {\r\n border: '0.5px solid white',\r\n },\r\n coloredCell: (props) => ({\r\n backgroundColor: props.color,\r\n }),\r\n centeredContent: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n verticalAlign: 'middle',\r\n },\r\n consequence: {\r\n writingMode: 'vertical-lr',\r\n transform: 'rotate(180deg)',\r\n textAlign: 'center',\r\n verticalAlign: 'middle',\r\n },\r\n borderNone: {\r\n border: 'none',\r\n },\r\n headerRowSpacing: {\r\n borderSpacing: '0px !important',\r\n },\r\n riskMatrixContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n riskMatrixDetails: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n },\r\n riskMatrixDetailsContents: {\r\n paddingBottom: theme.spacing(2),\r\n paddingLeft: theme.spacing(15),\r\n },\r\n riskMatrixDetailsContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n },\r\n riskScore: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n alignItems: 'flex-end',\r\n padding: theme.spacing(1),\r\n },\r\n riskScoreBox: {\r\n background: alpha(theme.palette.primary.newLight, 0.12),\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n padding: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(IntegrityRiskMatrix);\r\n","import { createSelector } from 'utils/app.util';\r\nimport { INTEGRITY_TYPE_ENUM } from './integrityManagement.constants';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nexport const getIntegrityManagementIntegritiesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'integrityManagement', 'integrities']),\r\n (integrities) => integrities,\r\n);\r\n\r\nexport const getIntegrityManagementIntegritiesFromStateByRiskPrinciple =\r\n createSelector(\r\n [\r\n getIntegrityManagementIntegritiesFromState,\r\n (_, riskPrincipleType) => riskPrincipleType,\r\n ],\r\n (integrities, riskPrincipleType) =>\r\n (integrities || EMPTY_LIST).filter(\r\n (item) =>\r\n item.integrityType === INTEGRITY_TYPE_ENUM.RISK_PRINCIPLE &&\r\n item.title === riskPrincipleType,\r\n ),\r\n );\r\n\r\nexport const getIntegrityManagementWellIntegrityAttachmentsFromState =\r\n createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'integrityManagement', 'integrityAttachments']),\r\n (attachments) => attachments,\r\n );\r\n\r\nexport const getIntegrityManagementAvailableFilesState = createSelector(\r\n (state) => state.getIn(['entity', 'integrityManagement', 'availableFiles']),\r\n (availableFiles) => availableFiles,\r\n);\r\n\r\nexport const getIntegrityManagementWellRiskScoresTrendState = createSelector(\r\n (state, externalWellboreId) =>\r\n state.getIn([\r\n 'entity',\r\n 'integrityManagement',\r\n `riskScoreTrend,${externalWellboreId}`,\r\n ]),\r\n (riskTrendScores) => riskTrendScores,\r\n);\r\n\r\nexport const getIntegrityManagementWellIntegrityHistoryFromState =\r\n createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'integrityManagement', 'integrityHistory']),\r\n (history) => history,\r\n );\r\n\r\nexport const getSelectedIntegrityRule = createSelector(\r\n (state) => state.getIn(['entity', 'integrityManagement', 'selectedRule']),\r\n (selectedRule) => selectedRule,\r\n);\r\n","import Agent from 'infrastructure/agent';\r\nimport integrityManagementMappers from 'features/settings/integrityManagement/helpers/integrityManagement.mappers';\r\n\r\n// These Endpoints will change according to the risk principles\r\nconst getIntegrityManagementIntegrities = () =>\r\n Agent.get('/integritymanagement');\r\n\r\nconst getIntegrityManagementIntegrity = (integrityId) =>\r\n Agent.get(`/integritymanagement/${integrityId}`);\r\n\r\nconst addNewIntegrityManagementIntegrity = (integrity) =>\r\n Agent.post(\r\n '/integritymanagement',\r\n integrityManagementMappers.integrities.to(integrity),\r\n );\r\n\r\nconst updateIntegrityManagementIntegrity = (integrity) =>\r\n Agent.put(\r\n '/integritymanagement',\r\n integrityManagementMappers.integrities.to(integrity),\r\n );\r\n\r\nconst deleteIntegrityManagementIntegrity = (integrityId) =>\r\n Agent.delete(`/integritymanagement/${integrityId}`);\r\n\r\nconst getIntegrityManagementIntegritiesForWell = (externalWellboreId) =>\r\n Agent.get(`/integritymanagement/well/${externalWellboreId}`);\r\n\r\nconst addNewIntegrityWellData = (wellboreId, integrity) =>\r\n Agent.post(\r\n '/integritymanagement/well',\r\n integrityManagementMappers.integrities.create(wellboreId, integrity),\r\n );\r\n\r\nconst getIntegrityManagementWellIntegrityAttachments = (\r\n externalWellboreId,\r\n integrityId,\r\n) =>\r\n Agent.get(\r\n `/integritymanagement/attachments/${externalWellboreId}/${integrityId}`,\r\n );\r\n\r\nconst getIntegrityManagementAvailableFiles = (externalWellboreId) =>\r\n Agent.get(`/integritymanagement/well/${externalWellboreId}/files`);\r\n\r\nconst uploadAndUpdateIntegrityManagementWellAttachments = (\r\n externalWellboreId,\r\n integrityId,\r\n files,\r\n meta,\r\n) =>\r\n // technically attachments are fields so we need to see how to send them\r\n Agent.files.post(\r\n `/integritymanagement/attachments/upload/${externalWellboreId}/${integrityId}`,\r\n files,\r\n meta,\r\n );\r\n\r\nconst modifyIntegrityManagementWellAttachments = (\r\n externalWellboreId,\r\n integrityId,\r\n attachments,\r\n) =>\r\n Agent.post(\r\n '/integritymanagement/attachments',\r\n integrityManagementMappers.attachments.to(\r\n externalWellboreId,\r\n integrityId,\r\n attachments,\r\n ),\r\n );\r\n\r\nconst getIntegrityManagementRiskScoreTrendForWell = (externalWellboreId) =>\r\n Agent.get(`/integritymanagement/well/${externalWellboreId}/risktrend`);\r\n\r\nconst previewIntegrityManagementProjectAttachments = (projectId, fileId) =>\r\n Agent.get(`/project/${projectId}/files/${fileId}/preview`);\r\n\r\nconst previewIntegrityManagementWellboreAttachments = (\r\n fieldId,\r\n wellboreId,\r\n wellboreFileId,\r\n) =>\r\n Agent.get(\r\n `/field/${fieldId}/wellbore/${wellboreId}/files/${wellboreFileId}/preview`,\r\n );\r\n\r\nconst getIntegrityManagementWellIntegrityHistory = (\r\n externalWellboreId,\r\n integrityId,\r\n) =>\r\n Agent.get(\r\n `/integritymanagement/history/${externalWellboreId}/${integrityId}`,\r\n );\r\n\r\nconst getRuleById = (ruleId) =>\r\n Agent.get(`/integritymanagement/rule/${ruleId}`);\r\n\r\nconst integrityManagementService = {\r\n getIntegrityManagementIntegrities,\r\n getIntegrityManagementIntegrity,\r\n deleteIntegrityManagementIntegrity,\r\n addNewIntegrityManagementIntegrity,\r\n updateIntegrityManagementIntegrity,\r\n getIntegrityManagementIntegritiesForWell,\r\n addNewIntegrityWellData,\r\n getIntegrityManagementWellIntegrityAttachments,\r\n getIntegrityManagementAvailableFiles,\r\n uploadAndUpdateIntegrityManagementWellAttachments,\r\n modifyIntegrityManagementWellAttachments,\r\n getIntegrityManagementRiskScoreTrendForWell,\r\n previewIntegrityManagementProjectAttachments,\r\n previewIntegrityManagementWellboreAttachments,\r\n getIntegrityManagementWellIntegrityHistory,\r\n getRuleById,\r\n};\r\n\r\nexport default integrityManagementService;\r\n","import moment from 'moment';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport {\r\n IntegrityForm,\r\n INTEGRITY_TYPE_ENUM,\r\n INTEGRITY_MANAGEMENT_ACTIONS,\r\n UPLOAD_ATTACHMENT_FORM,\r\n ATTACHMENTS_DATE_FORMAT,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport integrityManagementService from 'features/settings/integrityManagement/helpers/integrityManagement.service';\r\nimport integrityManagementMappers from 'features/settings/integrityManagement/helpers/integrityManagement.mappers';\r\n\r\nexport const loadIntegrityManagementIntegrities = () => (dispatch) => {\r\n const payload =\r\n integrityManagementService.getIntegrityManagementIntegrities();\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES,\r\n payload,\r\n });\r\n return payload;\r\n};\r\n\r\nexport const deleteIntegrityManagementIntegrity =\r\n (integrityId) => (dispatch) => {\r\n dispatch({\r\n integrityId,\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.DELETE_INTEGRITY_MANAGEMENT_INTEGRITY,\r\n confirmationDialog: {\r\n title: 'Delete integrity',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this integrity?',\r\n },\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting integrity',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Integrity successfully Deleted!',\r\n [NOTIFICATION_VARIANTS.ERROR]:\r\n 'Cannot delete category with category / rule',\r\n },\r\n payload: () => {\r\n return integrityManagementService\r\n .deleteIntegrityManagementIntegrity(integrityId)\r\n .then(() => {\r\n dispatch(loadIntegrityManagementIntegrities());\r\n });\r\n },\r\n });\r\n };\r\n\r\nexport const addNewIntegrityManagementIntegrity =\r\n (formValues) => (dispatch) => {\r\n const { ...integrity } = formValues;\r\n\r\n const integrityType =\r\n integrity[IntegrityForm.INTEGRITY_TYPE] === INTEGRITY_TYPE_ENUM.CATEGORY\r\n ? 'Category'\r\n : 'Rule';\r\n\r\n const payload = integrityManagementService\r\n .addNewIntegrityManagementIntegrity(integrity)\r\n .then(() => dispatch(loadIntegrityManagementIntegrities()));\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.ADD_NEW_INTEGRITY_MANAGEMENT_INTEGRITY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]: `Error creating ${integrityType}.`,\r\n [NOTIFICATION_VARIANTS.INFO]: `Adding new ${integrityType}...`,\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `New ${integrityType} successfully added!`,\r\n },\r\n payload,\r\n });\r\n };\r\n\r\nexport const updateIntegrityManagementIntegrity =\r\n (formValues) => (dispatch) => {\r\n const { ...integrity } = formValues;\r\n\r\n const integrityType =\r\n integrity[IntegrityForm.INTEGRITY_TYPE] === INTEGRITY_TYPE_ENUM.CATEGORY\r\n ? 'Category'\r\n : 'Rule';\r\n\r\n const payload = integrityManagementService\r\n .updateIntegrityManagementIntegrity(integrity)\r\n .then(() => dispatch(loadIntegrityManagementIntegrities()));\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.UPDATE_INTEGRITY_MANAGEMENT_INTEGRITY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]: `Error updating ${integrityType}.`,\r\n [NOTIFICATION_VARIANTS.INFO]: `Updating ${integrityType}...`,\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `${integrityType} successfully updated!`,\r\n },\r\n payload,\r\n });\r\n };\r\n\r\nexport const loadIntegrityManagementIntegritiesForWell =\r\n (externalWellboreId) => (dispatch) => {\r\n const payload =\r\n integrityManagementService.getIntegrityManagementIntegritiesForWell(\r\n externalWellboreId,\r\n );\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL,\r\n payload,\r\n });\r\n return payload;\r\n };\r\n\r\nexport const addNewIntegrityManagementWellData =\r\n (wellboreId, formValues, toggleModal) => (dispatch) => {\r\n const { ...integrity } = formValues;\r\n\r\n const payload = integrityManagementService\r\n .addNewIntegrityWellData(wellboreId, integrity)\r\n .then(() => {\r\n return dispatch(\r\n loadIntegrityManagementIntegritiesForWell(wellboreId),\r\n ).then(() => {\r\n toggleModal();\r\n });\r\n });\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.ADD_NEW_INTEGRITY_MANAGEMENT_RULE_DATA,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Error updating rule data.',\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating rule data.',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'New rule data successfully added!',\r\n },\r\n payload,\r\n });\r\n };\r\n\r\nexport const loadIntegrityManagementWellIntegrityAttachments =\r\n (externalWellboreId, integrityId) => (dispatch) => {\r\n const payload =\r\n integrityManagementService.getIntegrityManagementWellIntegrityAttachments(\r\n externalWellboreId,\r\n integrityId,\r\n );\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const loadIntegrityManagementAvailableFiles =\r\n (externalWellboreId) => (dispatch) => {\r\n const payload =\r\n integrityManagementService.getIntegrityManagementAvailableFiles(\r\n externalWellboreId,\r\n );\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_AVAILABLE_FILES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const updateIntegrityManagementWellAttachments =\r\n (externalWellboreId, integrityId, attachments, toggleModal) => (dispatch) => {\r\n const payload = integrityManagementService\r\n .modifyIntegrityManagementWellAttachments(\r\n externalWellboreId,\r\n integrityId,\r\n attachments,\r\n )\r\n .then(() => {\r\n dispatch(\r\n loadIntegrityManagementWellIntegrityAttachments(\r\n externalWellboreId,\r\n integrityId,\r\n ),\r\n );\r\n })\r\n .then(() => {\r\n dispatch(loadIntegrityManagementAvailableFiles(externalWellboreId));\r\n })\r\n .then(() => {\r\n toggleModal();\r\n });\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.UPDATE_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Error updating attachments.',\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating attachments...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Attachments successfully updated!',\r\n },\r\n payload,\r\n });\r\n };\r\n\r\nexport const uploadAndUpdateIntegrityManagementWellAttachments =\r\n (externalWellboreId, integrityId, attachments, files, toggleModal) =>\r\n (dispatch) => {\r\n const fileContents = files.map((file) => file.content);\r\n\r\n var details = files.map((file) => ({\r\n name: file.name,\r\n reportingDate: moment(file.reportingDate, ATTACHMENTS_DATE_FORMAT).format(\r\n 'YYYY-MM-DDTHH:mm:ss',\r\n ),\r\n }));\r\n\r\n var attachmentsForBackend = attachments?.map(\r\n integrityManagementMappers.attachments.mapAttachment,\r\n );\r\n\r\n // Initialize the form with files and metadata\r\n const meta = {\r\n [UPLOAD_ATTACHMENT_FORM.FILES]: fileContents,\r\n [UPLOAD_ATTACHMENT_FORM.ATTACHMENTS]: JSON.stringify(\r\n attachmentsForBackend,\r\n ),\r\n [UPLOAD_ATTACHMENT_FORM.FILE_DETAILS]: JSON.stringify(details),\r\n };\r\n\r\n const payload = integrityManagementService\r\n .uploadAndUpdateIntegrityManagementWellAttachments(\r\n externalWellboreId,\r\n integrityId,\r\n fileContents,\r\n meta,\r\n )\r\n .then(() => {\r\n dispatch(\r\n loadIntegrityManagementWellIntegrityAttachments(\r\n externalWellboreId,\r\n integrityId,\r\n ),\r\n );\r\n })\r\n .then(() => {\r\n dispatch(loadIntegrityManagementAvailableFiles(externalWellboreId));\r\n })\r\n .then(() => {\r\n toggleModal();\r\n });\r\n\r\n dispatch({\r\n files,\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.UPDATE_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]:\r\n 'Error uploading and updating attachments.',\r\n [NOTIFICATION_VARIANTS.INFO]: 'Uploading and updating attachments...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `The ${\r\n files.length > 1 ? 'Attachments' : 'Attachment'\r\n } ${\r\n files.length > 1 ? 'were' : 'was'\r\n } successfully uploaded and updated.`,\r\n },\r\n payload,\r\n });\r\n };\r\n\r\nexport const loadIntegrityManagementRiskTrendScoresForWell =\r\n (externalWellboreId) => async (dispatch) => {\r\n if (!externalWellboreId) {\r\n return;\r\n }\r\n\r\n const payload =\r\n await integrityManagementService.getIntegrityManagementRiskScoreTrendForWell(\r\n externalWellboreId,\r\n );\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.GET_INTEGRITY_MANAGEMENT_RISK_SCORE_TREND_FOR_WELL,\r\n payload: {\r\n externalWellboreId,\r\n scores: payload,\r\n },\r\n });\r\n };\r\n\r\nexport const getIntegrityRuleDetails = (ruleId) => async (dispatch) => {\r\n if (!ruleId) return;\r\n\r\n const payload = await integrityManagementService.getRuleById(ruleId);\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.GET_RULE_BY_ID,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const previewIntegrityManagementProjectDocument =\r\n (projectId, fileId) => async () => {\r\n if (!projectId || !fileId) {\r\n return;\r\n }\r\n\r\n const payload =\r\n await integrityManagementService.previewIntegrityManagementProjectAttachments(\r\n projectId,\r\n fileId,\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const previewIntegrityManagementWellboreDocument =\r\n (fieldId, wellboreId, fileId) => async () => {\r\n if (!fieldId || !wellboreId || !fileId) {\r\n return;\r\n }\r\n\r\n const payload =\r\n await integrityManagementService.previewIntegrityManagementWellboreAttachments(\r\n fieldId,\r\n wellboreId,\r\n fileId,\r\n );\r\n\r\n return payload;\r\n };\r\n\r\nexport const loadIntegrityManagementWellIntegrityHistory =\r\n (externalWellboreId, integrityId) => (dispatch) => {\r\n const payload =\r\n integrityManagementService.getIntegrityManagementWellIntegrityHistory(\r\n externalWellboreId,\r\n integrityId,\r\n );\r\n\r\n dispatch({\r\n type: INTEGRITY_MANAGEMENT_ACTIONS.GET_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_HISTORY,\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n","import moment from 'moment';\r\nimport { compose } from 'redux';\r\nimport Highcharts from 'highcharts';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport * as colors from '@material-ui/core/colors';\r\nimport { useEffect, useState, useRef } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport { getIntegrityManagementWellRiskScoresTrendState } from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport { loadIntegrityManagementRiskTrendScoresForWell } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\n\r\nconst WellIntegrityRiskTrendChart = ({\r\n riskTrendScores,\r\n dispatchLoadIntegrityRiskScoreTrendForWell,\r\n externalWellboreId,\r\n}) => {\r\n const [chartData, setChartData] = useState([]);\r\n\r\n useEffect(() => {\r\n if (externalWellboreId) {\r\n dispatchLoadIntegrityRiskScoreTrendForWell(externalWellboreId);\r\n }\r\n }, [dispatchLoadIntegrityRiskScoreTrendForWell, externalWellboreId]);\r\n\r\n useEffect(() => {\r\n if (riskTrendScores && riskTrendScores.size > 0) {\r\n var newRiskTrendScores = riskTrendScores\r\n .toJS()\r\n .map(({ totalScoreDate, totalScoreCalculation }) => [\r\n moment(totalScoreDate).valueOf(), // Convert to timestamp\r\n totalScoreCalculation, // TODO maybe round the value\r\n ])\r\n .sort((a, b) => a[0] - b[0]); // order by datetime just in case\r\n\r\n setChartData(newRiskTrendScores);\r\n }\r\n }, [riskTrendScores]);\r\n\r\n const gridColor = colors.grey[800];\r\n const labelColor = colors.grey[300];\r\n const purpleColor = colors.purple[400];\r\n\r\n const chartComponent = useRef(null);\r\n\r\n const chartOptions = {\r\n chart: {\r\n type: 'line',\r\n zoomType: 'x',\r\n backgroundColor: 'transparent',\r\n plotBorderWidth: 1,\r\n plotBorderColor: gridColor,\r\n },\r\n title: {\r\n text: null,\r\n },\r\n legend: {\r\n enabled: false,\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n gridLineColor: gridColor,\r\n gridLineWidth: 1,\r\n labels: {\r\n style: { color: labelColor },\r\n format: '{value:%d %b %Y}',\r\n },\r\n },\r\n yAxis: {\r\n title: {\r\n style: { color: labelColor },\r\n text: 'Risk Score',\r\n },\r\n min: 0,\r\n // TODO check what is the MAX risk score\r\n gridLineColor: gridColor,\r\n gridLineWidth: 1,\r\n labels: {\r\n style: { color: labelColor },\r\n },\r\n },\r\n series: [\r\n {\r\n name: 'Risk Score',\r\n data: chartData,\r\n color: purpleColor,\r\n },\r\n ],\r\n };\r\n\r\n return (\r\n \r\n {externalWellboreId && chartData.length > 0 && (\r\n \r\n )}\r\n {(!externalWellboreId || chartData.length === 0) && (\r\n \r\n No risk trend data available.\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { externalWellboreId }) => ({\r\n riskTrendScores: getIntegrityManagementWellRiskScoresTrendState(\r\n state,\r\n externalWellboreId,\r\n ),\r\n }),\r\n {\r\n dispatchLoadIntegrityRiskScoreTrendForWell:\r\n loadIntegrityManagementRiskTrendScoresForWell,\r\n },\r\n ),\r\n)(WellIntegrityRiskTrendChart);\r\n","import { List } from 'immutable';\r\n\r\nexport const hasEmptyIdItem = (data) => {\r\n // Recursive arrow function to check for empty ids\r\n const recursiveCheck = (items) =>\r\n items.some(\r\n (item) =>\r\n item.integrityId === '' ||\r\n item.integrityId === null ||\r\n (item.categories && recursiveCheck(item.categories)) ||\r\n (item.details && recursiveCheck(item.details)),\r\n );\r\n\r\n return recursiveCheck(data);\r\n};\r\n\r\nexport const getCombinedTopLevelEntries = (data, targetId) => {\r\n // Helper function to recursively search for the target item or category\r\n function findTarget(entries) {\r\n for (const entry of entries) {\r\n // Check if this entry is the target item\r\n if (entry.integrityId === targetId) {\r\n return entry;\r\n }\r\n\r\n // If not, search in nested categories (if they exist)\r\n if (entry.categories && entry.categories.length > 0) {\r\n const found = findTarget(entry.categories);\r\n if (found) return found;\r\n }\r\n }\r\n return null; // Return null if not found\r\n }\r\n\r\n // Try to find the target item or category\r\n const targetItem = findTarget(data);\r\n\r\n if (!targetItem) return List(); // Return an empty Immutable List if not found\r\n\r\n // Combine details and categories of the found target\r\n const combinedEntries = [\r\n // this is actually rules\r\n ...(targetItem.details || []).map((detail) => ({\r\n integrityId: detail.integrityId,\r\n integrityDetailId: detail.integrityDetailId,\r\n title: detail.title,\r\n integrityDetailType: detail.integrityDetailType,\r\n userId: detail.userId,\r\n weight: detail.weight,\r\n score: detail.score,\r\n value: detail.value,\r\n })),\r\n ...(targetItem.categories || []).map((category) => ({\r\n integrityId: category.integrityId,\r\n title: category.title,\r\n weight: category.weight,\r\n integrityType: category.integrityType,\r\n userId: category.userId,\r\n parentId: category.parentId,\r\n })),\r\n ];\r\n\r\n return List(combinedEntries);\r\n};\r\n\r\nexport const removeEmptyIdItems = (data) => {\r\n // Filter the items, removing those with an empty or null id\r\n const filteredData = data\r\n .filter((item) => item.integrityId !== '' && item.integrityId !== null)\r\n .map((item) => ({\r\n ...item,\r\n // Recursively clean categories and details\r\n categories: item.categories\r\n ? removeEmptyIdItems(item.categories).toArray()\r\n : [],\r\n details: item.details ? removeEmptyIdItems(item.details).toArray() : [],\r\n }));\r\n\r\n // Return an Immutable List of the filtered data\r\n return List(filteredData);\r\n};\r\n\r\nexport const removeItemsByIntegrityId = (data, idToRemove) => {\r\n // Filter out items with the specific integrityId and also remove categories and details\r\n const filteredData = data\r\n .filter((item) => item.integrityId !== idToRemove) // Remove the item if it matches idToRemove\r\n .map((item) => ({\r\n ...item,\r\n // If categories or details exist, recursively clean them by removing items with idToRemove\r\n categories: item.categories\r\n ? removeItemsByIntegrityId(item.categories, idToRemove).toArray() // Convert List to array\r\n : [],\r\n details: item.details\r\n ? removeItemsByIntegrityId(item.details, idToRemove).toArray() // Convert List to array\r\n : [],\r\n }));\r\n\r\n // Return an Immutable List of the filtered data, top-level only\r\n return List(filteredData);\r\n};\r\n\r\nexport const addItemToCategory = (data, targetId, newItem) => {\r\n // Ensure the new item has an empty or null id\r\n if (newItem.integrityId !== '' && newItem.integrityId !== null) {\r\n throw new Error('New item must have an empty or null id.');\r\n }\r\n\r\n // Helper function to recursively search and add item\r\n function recursiveAdd(categories) {\r\n for (const category of categories) {\r\n // If the target ID is found, add the new item to the categories array\r\n if (category.integrityId === targetId) {\r\n category.categories = category.categories || [];\r\n category.categories.push(newItem);\r\n return true; // Item added successfully\r\n }\r\n\r\n // Recursively search in nested categories\r\n if (category.categories && recursiveAdd(category.categories)) {\r\n return true;\r\n }\r\n }\r\n return false; // Target ID not found in this branch\r\n }\r\n\r\n // Start the recursive search and addition process\r\n recursiveAdd(data);\r\n\r\n return { data }; // Return the updated data structure and itemAdded flag\r\n};\r\n\r\nexport const updateTitleForNullId = (list, newTitle) => {\r\n // Recursive function to traverse and update\r\n const updateRecursive = (obj) => {\r\n if (obj.integrityId === null) {\r\n // Update the object when id is null\r\n return { ...obj, title: newTitle };\r\n }\r\n\r\n // Check if it has categories and recursively update them\r\n if (obj.categories) {\r\n return {\r\n ...obj,\r\n categories: obj.categories.map(updateRecursive),\r\n };\r\n }\r\n\r\n // Check if it has rules and recursively update them\r\n if (obj.rules) {\r\n return {\r\n ...obj,\r\n rules: obj.rules.map(updateRecursive),\r\n };\r\n }\r\n\r\n // Return the object if no changes are needed\r\n return obj;\r\n };\r\n\r\n // Map through the Immutable List and update the necessary object\r\n return list.map(updateRecursive);\r\n};\r\n\r\nexport const calculateFinalScore = (integrities, wellbore) => {\r\n let score = 1;\r\n\r\n if (wellbore.getIn(['wellRiskScore', 'score'])) {\r\n score = wellbore.getIn(['wellRiskScore', 'score']);\r\n } else {\r\n integrities?.forEach((integrity) => {\r\n const currentScore = integrity.riskPrincipleScore?.score || 1;\r\n score *= currentScore;\r\n });\r\n }\r\n\r\n return score.toFixed(3);\r\n};\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { useState, memo } from 'react';\r\nimport { Tab, Tabs, Grid } from '@material-ui/core';\r\n\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport IntegrityRiskMatrix from 'features/wells/integrity/IntegrityRiskMatrix';\r\nimport {\r\n INTEGRITY_MANAGEMENT_ACTIONS,\r\n RISK_PRINCIPLE_TYPES,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport {\r\n getIntegrityManagementIntegritiesFromState,\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport { useEffect } from 'react';\r\nimport { loadIntegrityManagementIntegritiesForWell } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\nimport WellIntegrityRiskTrendChart from 'features/wells/overview/components/WellIntegrityRiskTrendChart';\r\nimport { calculateFinalScore } from 'features/settings/integrityManagement/helpers/integrityManagement.collections';\r\n\r\nconst WellIntegrityGraphs = ({\r\n wellboreId,\r\n integrities,\r\n filteredIntegritiesLikelihood,\r\n filteredIntegritiesConsequence,\r\n dispatchLoadIntegrityManagementForWell,\r\n}) => {\r\n const INTEGRITY_GRAPHS_TABS = {\r\n RISK_TREND_CHART: 'RISK_TREND_CHART',\r\n LATEST_RISK_SCORE_LIKELIHOOD: 'LATEST_RISK_SCORE_LIKELIHOOD',\r\n LATEST_RISK_SCORE_CONSEQUENCE: 'LATEST_RISK_SCORE_CONSEQUENCE',\r\n };\r\n\r\n const { wellbore } = useWellbore(wellboreId);\r\n const [finalScore, setFinalScore] = useState(0);\r\n const [externalWellboreId, setExternalWellboreId] = useState(null);\r\n\r\n const [activeTab, setActiveTab] = useState(\r\n INTEGRITY_GRAPHS_TABS.RISK_TREND_CHART,\r\n );\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n // for loading integrities\r\n useEffect(() => {\r\n if (wellbore?.get('externalWellboreExternalId')) {\r\n dispatchLoadIntegrityManagementForWell(\r\n wellbore.get('externalWellboreExternalId'),\r\n );\r\n setExternalWellboreId(wellbore.get('externalWellboreExternalId'));\r\n }\r\n }, [dispatchLoadIntegrityManagementForWell, wellbore]);\r\n\r\n // for calculating score for matrix\r\n useEffect(() => {\r\n setFinalScore(calculateFinalScore(integrities, wellbore));\r\n }, [integrities, wellbore]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTab === INTEGRITY_GRAPHS_TABS.RISK_TREND_CHART && (\r\n \r\n \r\n \r\n )}\r\n {activeTab === INTEGRITY_GRAPHS_TABS.LATEST_RISK_SCORE_LIKELIHOOD && (\r\n \r\n \r\n \r\n )}\r\n {activeTab ===\r\n INTEGRITY_GRAPHS_TABS.LATEST_RISK_SCORE_CONSEQUENCE && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => {\r\n return {\r\n integrities: getIntegrityManagementIntegritiesFromState(state),\r\n filteredIntegritiesLikelihood:\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple(\r\n state,\r\n RISK_PRINCIPLE_TYPES.LIKELIHOOD_OF_FAILURE,\r\n ),\r\n filteredIntegritiesConsequence:\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple(\r\n state,\r\n RISK_PRINCIPLE_TYPES.WELL_CONSEQUENCE,\r\n ),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL,\r\n ),\r\n };\r\n },\r\n {\r\n dispatchLoadIntegrityManagementForWell:\r\n loadIntegrityManagementIntegritiesForWell,\r\n },\r\n ),\r\n memo,\r\n)(WellIntegrityGraphs);\r\n","import PropTypes from 'prop-types';\r\nimport { useCallback } from 'react';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport HasPermission from 'app/components/HasPermission';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\n\r\nconst HasSystemPermission = ({ render, children, permissions }) => {\r\n const { currentUser, userPermissions, systemPermissions } =\r\n useSystemPermissions(permissions);\r\n\r\n const renderContent = useCallback(\r\n (hasPermission) =>\r\n invokeIfFunction(\r\n render,\r\n hasPermission,\r\n userPermissions,\r\n systemPermissions,\r\n currentUser,\r\n ),\r\n [render, userPermissions, systemPermissions, currentUser],\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nHasSystemPermission.propTypes = {\r\n render: PropTypes.func,\r\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\r\n permissions: PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.instanceOf(Set),\r\n PropTypes.arrayOf(PropTypes.number),\r\n ]),\r\n};\r\n\r\nexport default HasSystemPermission;\r\n","import projectService from 'services/project.service';\r\nimport { WELL_PROJECT_HISTORY_PAGE_LOADED } from 'features/wells/projects/wellProjects.constants';\r\n\r\nexport const onLoad = (wellboreId) => (dispatch) =>\r\n dispatch({\r\n type: WELL_PROJECT_HISTORY_PAGE_LOADED,\r\n payload: () => Promise.all([projectService.searchProjects({ wellboreId })]),\r\n });\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getWellProjectsFromState = createSelector(\r\n (state) => state.getIn(['wells', 'projects', 'data', 'projects']),\r\n (projects) => projects,\r\n);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Link } from 'react-router-dom';\r\nimport { Typography, Chip } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport {\r\n formatDate,\r\n formatDuration,\r\n formatEstimatedDate,\r\n} from 'utils/format.util';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { Grid } from 'app/components/withTooltip';\r\nimport { toProjectDetails } from 'utils/route.util';\r\nimport { durationFromStartAndEndTime } from 'utils/app.util';\r\nimport { Format, PROJECT_STATUS as ProjectStatus } from 'app/app.constants';\r\nimport ProjectTableRowDetail from 'features/projects/components/ProjectTableRowDetail';\r\n\r\nconst WellDashboardProjectTableRow = ({\r\n classes,\r\n item: project,\r\n zoomInAndOutByProjectId,\r\n setArchiveProjects,\r\n ...rest\r\n}) => {\r\n const title = project.get('title');\r\n const projectId = project.get('id');\r\n const status = project.get('status');\r\n const endTime = project.get('endTime');\r\n const startTime = project.get('startTime');\r\n\r\n const isExecuteOrReport = status > ProjectStatus.PLAN;\r\n\r\n const tableRowClasses = useMemo(\r\n () => ({\r\n root: classes.tableRowRoot,\r\n rootBackground: classes.tableRowRootBackground,\r\n }),\r\n [classes],\r\n );\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {project.get('projectNumber')}\r\n \r\n \r\n \r\n \r\n \r\n {title || No objective set...}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n {\r\n [ProjectStatus.PLAN]: (\r\n \r\n ),\r\n [ProjectStatus.EXECUTE]: (\r\n \r\n ),\r\n [ProjectStatus.REPORT]: (\r\n \r\n ),\r\n }[status]\r\n }\r\n {isExecuteOrReport && (\r\n (\r\n \r\n )}\r\n />\r\n )}\r\n \r\n \r\n {project.get('isArchive') && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableRowRoot: {\r\n height: 'auto',\r\n maxHeight: 'none',\r\n },\r\n tableRowRootBackground: {\r\n position: 'relative',\r\n padding: `${theme.spacing(1.25)}px ${theme.spacing(1.5)}px`,\r\n },\r\n metaRow: {\r\n display: 'inline-grid',\r\n },\r\n linearProgres: {\r\n height: '2px',\r\n position: 'absolute',\r\n width: '100%',\r\n bottom: 1,\r\n left: 0,\r\n },\r\n projectDetails: {\r\n overflow: 'auto',\r\n },\r\n chipRoot: {\r\n backgroundColor: theme.palette.warning.main,\r\n color: theme.palette.common.black,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(WellDashboardProjectTableRow);\r\n","import { useCallback, useMemo, React } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport WellDashboardProjectTableRow from './WellDashboardProjectTableRow';\r\n\r\nconst WellDashboardProjectsTable = ({\r\n title,\r\n classes,\r\n projects,\r\n displayLocationMarkers = true,\r\n zoomInAndOutByProjectId,\r\n isArchiveProject,\r\n setArchiveProjects,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 12,\r\n id: 'title',\r\n Header: (\r\n \r\n {title}\r\n \r\n ),\r\n },\r\n ],\r\n [title, classes],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [\r\n setArchiveProjects,\r\n displayLocationMarkers,\r\n isArchiveProject,\r\n zoomInAndOutByProjectId,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n title: {\r\n fontSize: '1.125rem',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(WellDashboardProjectsTable);\r\n","import { useMemo } from 'react';\r\nimport { Box, Grid } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { projectStatusToString } from 'features/projects/projects.mappers';\r\nimport WellDashboardProjectsTable from './WellDashboardProjectsTable';\r\n\r\nconst WellDashboardProjectByStatus = ({\r\n projects = EMPTY_LIST,\r\n zoomInAndOutByProjectId,\r\n isArchiveProject,\r\n setArchiveProjects,\r\n}) => {\r\n const projectsByStatus = useMemo(\r\n () =>\r\n projects\r\n .groupBy((project) => project.get('status'))\r\n .sortBy((_, status) => status),\r\n [projects],\r\n );\r\n\r\n return projectsByStatus.keySeq().map((status) => {\r\n const title = projectStatusToString(status);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n};\r\n\r\nexport default WellDashboardProjectByStatus;\r\n","import { getIn } from 'formik';\r\n\r\nimport { CreateProjectFormFields as FormFields } from 'features/projects/projects.constants';\r\n\r\nexport const validateCreateProjectForm = (values) => {\r\n let errors = {};\r\n\r\n [\r\n FormFields.FIELD_ID,\r\n FormFields.WELLBORE_ID,\r\n FormFields.FACILITY_ID,\r\n FormFields.ORGANIZATION_ID,\r\n FormFields.OBJECTIVE_ID,\r\n ].forEach((name) => {\r\n const value = getIn(values, name);\r\n\r\n if (!value) {\r\n errors[name] = 'Required';\r\n }\r\n });\r\n\r\n return errors;\r\n};\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getObjectives = () => Agent.get('/objective');\r\n\r\nconst objectiveService = {\r\n getObjectives,\r\n};\r\n\r\nexport default objectiveService;\r\n","import Search from '@material-ui/icons/Search';\r\nimport { InputAdornment } from '@material-ui/core';\r\nimport { getIn, Field, useFormikContext } from 'formik';\r\nimport { useCallback, useEffect, useRef } from 'react';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst CreateProjectModalAppBarTextField = ({\r\n item,\r\n index,\r\n isActive,\r\n autoFocus,\r\n clearFields,\r\n setCurrentIndex,\r\n}) => {\r\n const inputRef = useRef();\r\n\r\n const { label, names, disabled, onFocus } = item;\r\n const { id, search } = names;\r\n\r\n const { values, isSubmitting } = useFormikContext();\r\n\r\n const selectedItemId = getIn(values, id);\r\n\r\n // clear input if the corresponding item id gets cleared\r\n useEffect(() => {\r\n if (!selectedItemId) {\r\n clearFields(search);\r\n }\r\n }, [selectedItemId, clearFields, search]);\r\n\r\n // focus on the TextField if marked as active\r\n useEffect(() => {\r\n if (isActive) {\r\n inputRef.current.focus();\r\n }\r\n }, [isActive]);\r\n\r\n const handleFocus = useCallback(() => {\r\n clearFields(id, search);\r\n setCurrentIndex(index);\r\n invokeIfFunction(onFocus);\r\n }, [onFocus, clearFields, id, search, setCurrentIndex, index]);\r\n\r\n return (\r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default CreateProjectModalAppBarTextField;\r\n","import Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, AppBar, Typography, IconButton } from '@material-ui/core';\r\n\r\nimport CreateProjectModalAppBarTextField from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalAppBarTextField';\r\n\r\nconst CreateProjectModalAppBar = ({\r\n title,\r\n items,\r\n classes,\r\n toggleModal,\r\n clearFields,\r\n currentIndex,\r\n setCurrentIndex,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {items.map((item, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n appBarRoot: {\r\n padding: theme.spacing(3),\r\n background: theme.palette.grey[900],\r\n },\r\n inputContainer: {\r\n padding: theme.spacing(2.5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CreateProjectModalAppBar);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, Grid, Button, DialogActions } from '@material-ui/core';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\n\r\nconst CreateProjectModalActions = ({\r\n isValid,\r\n classes,\r\n onClose,\r\n isSubmitting,\r\n createProject,\r\n}) => {\r\n // automatically focus on the Create button when the form turns valid\r\n const action = useCallback(\r\n (actions) => {\r\n if (isValid) {\r\n invokeIfFunction(actions?.focusVisible);\r\n }\r\n },\r\n [isValid],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Create\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n dialogActionsRoot: {\r\n background: theme.palette.grey[900],\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CreateProjectModalActions);\r\n","import { useMemo, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { getWellboreTrajectory } from 'features/wells/wellbore.actions';\r\nimport { getWellboreTrajectoryFromState } from 'features/wells/wellbore.selectors';\r\n\r\nconst useWellboreTrajectory = (fieldId, wellboreId) => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (fieldId && wellboreId) {\r\n dispatch(getWellboreTrajectory(fieldId, wellboreId));\r\n }\r\n }, [dispatch, fieldId, wellboreId]);\r\n\r\n const wellboreTrajectorySelector = useMemo(\r\n () => getWellboreTrajectoryFromState(wellboreId),\r\n [wellboreId],\r\n );\r\n\r\n return useSelector(wellboreTrajectorySelector) ?? EMPTY_MAP;\r\n};\r\n\r\nexport default useWellboreTrajectory;\r\n","import { memo } from 'react';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport useWellboreTrajectory from 'features/wells/hooks/useWellboreTrajectory';\r\nimport WellboreTrajectory from 'app/components/WellboreTrajectory/WellboreTrajectory';\r\n\r\nconst WellboreTrajectoryContainer = ({\r\n fieldId,\r\n wellboreId,\r\n children = null,\r\n ...rest\r\n}) => {\r\n const { wellboreDetail = EMPTY_MAP } = useWellbore(wellboreId);\r\n\r\n const trajectory = useWellboreTrajectory(fieldId, wellboreId);\r\n\r\n if (!trajectory.get('trajectoryPoints')?.size) return children;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nWellboreTrajectoryContainer.propTypes = {\r\n children: PropTypes.node,\r\n fieldId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n wellboreId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n};\r\n\r\nexport default compose(memo)(WellboreTrajectoryContainer);\r\n","import { EMPTY_MAP } from 'app/app.constants';\r\nimport GoogleMap from 'app/components/GoogleMap';\r\nimport ProjectMapMarker from 'features/projects/components/WellMapLocations/ProjectMapMarker';\r\n\r\nconst CreateProjectModalMap = ({ wellbore = EMPTY_MAP }) => {\r\n const location = wellbore.get('location');\r\n\r\n return (\r\n \r\n {location && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CreateProjectModalMap;\r\n","import classNames from 'classnames';\r\nimport { useFormikContext } from 'formik';\r\nimport { useCallback, useMemo } from 'react';\r\nimport { alpha } from '@material-ui/core/styles';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, Chip } from '@material-ui/core';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst CreateProjectModalListItem = ({\r\n item,\r\n classes,\r\n onClick,\r\n disabled,\r\n visibleItem,\r\n}) => {\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const { names, getItemLabel, getItemId, itemDisabledTitle } = visibleItem;\r\n const { id, search } = names;\r\n\r\n const itemId = getItemId(item);\r\n const itemLabel = getItemLabel(item);\r\n\r\n const onSelectItem = useCallback(() => {\r\n // order of setFieldValue here matters, form does not validate properly if the id is set before the label\r\n setFieldValue(search, itemLabel);\r\n setFieldValue(id, itemId);\r\n\r\n invokeIfFunction(onClick, item);\r\n }, [setFieldValue, itemId, onClick, id, search, item, itemLabel]);\r\n\r\n const chipLabel = useMemo(\r\n () => {itemLabel},\r\n [itemLabel],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n chipContainer: {\r\n margin: `${theme.spacing(0.75)}px 0`,\r\n },\r\n chipDisabled: {\r\n '&.Mui-disabled': {\r\n background: alpha(theme.palette.grey[900], 0.5),\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CreateProjectModalListItem);\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport CreateProjectModalListItem from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalListItem';\r\n\r\nconst CreateProjectModalListGroup = ({ data, title, classes, visibleItem }) => {\r\n const { type, onClick, isItemDisabled } = visibleItem;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {data.map((item, index) => {\r\n const disabled = invokeIfFunction(isItemDisabled, item);\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n itemGroup: {\r\n padding: theme.spacing(2.5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CreateProjectModalListGroup);\r\n","import { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport { useEffect, useMemo } from 'react';\r\nimport { getIn, useFormikContext } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\n\r\nimport { useTextSearch } from 'altus-hooks';\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\nimport { NotRequestedDataState } from 'altus-datastate';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport CreateProjectModalListGroup from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalListGroup';\r\n\r\nconst GROUPS = {\r\n RELATED_FACILITY: 'Related Facility',\r\n FIXED: 'Fixed',\r\n MOBILE: 'Mobile',\r\n};\r\n\r\nconst defaultGroupBy = (item, getItemLabel) => getItemLabel(item).charAt(0);\r\n\r\nconst CreateProjectModalContentItem = ({ classes, activeItem, fieldId }) => {\r\n const { values } = useFormikContext();\r\n\r\n const {\r\n data,\r\n names,\r\n label,\r\n onLoad,\r\n loadingText,\r\n getItemLabel,\r\n noItemsMessage,\r\n groupBy = defaultGroupBy,\r\n dataState = NotRequestedDataState,\r\n } = activeItem;\r\n\r\n const { id, search } = names;\r\n\r\n useEffect(() => {\r\n invokeIfFunction(onLoad);\r\n }, [onLoad]);\r\n\r\n const selectedItemId = getIn(values, id);\r\n const itemSearch = getIn(values, search);\r\n\r\n const { setSearch, matchingItems, clearSearch } = useTextSearch(\r\n data,\r\n getItemLabel,\r\n );\r\n\r\n useEffect(() => {\r\n if (itemSearch) {\r\n setSearch(itemSearch);\r\n }\r\n\r\n return () => clearSearch();\r\n }, [setSearch, selectedItemId, itemSearch, clearSearch]);\r\n\r\n const dataItems = List(matchingItems);\r\n\r\n const customGroupBy = useMemo(() => {\r\n return (item) => {\r\n if (item.get('fieldId') === fieldId) return GROUPS.RELATED_FACILITY;\r\n if (item.get('typeName') === GROUPS.FIXED) return GROUPS.FIXED;\r\n if (item.get('typeName') === GROUPS.MOBILE) return GROUPS.MOBILE;\r\n return 'Unknown';\r\n };\r\n }, [fieldId]);\r\n\r\n let groupedDataItems;\r\n\r\n const groupedItems = useMemo(\r\n () =>\r\n dataItems\r\n .groupBy((item) => groupBy(item, getItemLabel))\r\n .sortBy((_, key) => key),\r\n [groupBy, dataItems, getItemLabel],\r\n );\r\n\r\n const groupedFacilityItems = useMemo(\r\n () =>\r\n dataItems.groupBy(customGroupBy).sortBy((_, key) => {\r\n if (key === GROUPS.RELATED_FACILITY) return 0;\r\n if (key === GROUPS.FIXED) return 1;\r\n if (key === GROUPS.MOBILE) return 2;\r\n return 3;\r\n }),\r\n [customGroupBy, dataItems],\r\n );\r\n\r\n if (label !== 'Facility') {\r\n groupedDataItems = groupedItems;\r\n } else {\r\n groupedDataItems = groupedFacilityItems;\r\n }\r\n\r\n if (dataState.isLoading()) {\r\n return ;\r\n }\r\n\r\n if (!data.size) {\r\n return (\r\n \r\n {noItemsMessage}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {`Select ${label}`}\r\n \r\n {!dataItems.size && (\r\n \r\n \r\n No items matching your search\r\n \r\n \r\n )}\r\n \r\n {groupedDataItems\r\n .map((items, key) => (\r\n \r\n ))\r\n .valueSeq()}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n padding: `0 ${theme.spacing(2.5)}px`,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CreateProjectModalContentItem);\r\n","import { compose } from 'redux';\r\nimport { alpha } from '@material-ui/core/styles';\r\nimport { useEffect, useRef, useMemo } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, DialogContent, Fade } from '@material-ui/core';\r\n\r\nimport { scrollToTopSmoothly } from 'utils/app.util';\r\nimport ThreeJsManagerProvider from 'app/threeJs/ThreeJsManagerProvider';\r\nimport WellboreTrajectoryContainer from 'app/components/WellboreTrajectory/WellboreTrajectoryContainer';\r\nimport CreateProjectModalMap from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalMap';\r\nimport CreateProjectModalContentItem from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalContentItem';\r\n\r\nconst CreateProjectModalContent = ({\r\n classes,\r\n fieldId,\r\n wellbore,\r\n wellboreId,\r\n activeItem,\r\n}) => {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n\r\n scrollToTopSmoothly(ref.current);\r\n }, []);\r\n\r\n const wellboreTrajectoryClasses = useMemo(\r\n () => ({\r\n root: classes.wellboreTrajectoryRoot,\r\n }),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeItem && (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: 0,\r\n position: 'relative',\r\n },\r\n modalContent: {\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n padding: theme.spacing(6),\r\n background: `${theme.palette.common.black}0004d`,\r\n },\r\n wellboreTrajectoryRoot: {\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n position: 'absolute',\r\n background: alpha(theme.palette.grey[900], 0.8),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CreateProjectModalContent);\r\n","import { isNil } from 'lodash';\r\nimport { getIn } from 'formik';\r\nimport { List } from 'immutable';\r\nimport { useMemo, useState, useEffect, useCallback } from 'react';\r\n\r\nimport { useRequestWithDataState } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport appService from 'services/app.service';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { isClientOrganization } from 'app/app.selectors';\r\nimport { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport objectiveService from 'services/objective.service';\r\nimport { CreateProjectFormFields as FormFields } from 'features/projects/projects.constants';\r\nimport CreateProjectModalAppBar from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalAppBar';\r\nimport CreateProjectModalActions from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalActions';\r\nimport CreateProjectModalContent from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalContent';\r\n\r\nconst getItemIdDefault = (item) => item.get('id');\r\nconst getItemLabelDefault = (item) => item.get('name');\r\n\r\nconst CreateProjectModalForm = ({\r\n title,\r\n values,\r\n isValid,\r\n onClose,\r\n resetForm,\r\n submitForm,\r\n isSubmitting,\r\n setFieldValue,\r\n initialValues,\r\n}) => {\r\n const currentUser = useCurrentUser();\r\n // items will be initialized below, but is defined here to be available in the setNextActiveItemType callback\r\n let items;\r\n\r\n const [currentIndex, setCurrentIndex] = useState();\r\n\r\n const [fields, setFields] = useState(EMPTY_LIST);\r\n const [wellbores, setWellbores] = useState(EMPTY_LIST);\r\n const [facilities, setFacilities] = useState(EMPTY_LIST);\r\n const [objectives, setObjectives] = useState(EMPTY_LIST);\r\n const [organizations, setOrganizations] = useState(EMPTY_LIST);\r\n\r\n const initialFieldId = getIn(initialValues, FormFields.FIELD_ID);\r\n const initialWellboreId = getIn(initialValues, FormFields.WELLBORE_ID);\r\n const initialFacilityId = getIn(initialValues, FormFields.FACILITY_ID);\r\n const initialOrganizationId = getIn(\r\n initialValues,\r\n FormFields.ORGANIZATION_ID,\r\n );\r\n\r\n const selectedFieldId = getIn(values, FormFields.FIELD_ID);\r\n const selectedWellboreId = getIn(values, FormFields.WELLBORE_ID);\r\n const selectedOrganizationId = getIn(values, FormFields.ORGANIZATION_ID);\r\n\r\n const getOrganizationsBySelectedField = useCallback(() => {\r\n const request = selectedFieldId\r\n ? appService.getOrganizationsByField(selectedFieldId)\r\n : appService.getAllOrganizations();\r\n\r\n return request.then((organizations) =>\r\n setOrganizations(List(organizations).map(mappers.Organization.from)),\r\n );\r\n }, [selectedFieldId]);\r\n\r\n const [getOrganizations, getOrganizationsDataState] = useRequestWithDataState(\r\n getOrganizationsBySelectedField,\r\n );\r\n\r\n const [getWellbores, getWellboresDataState] = useRequestWithDataState(\r\n appService.wellboresByFieldId,\r\n );\r\n\r\n const [getFields, getFieldsDataState] = useRequestWithDataState(\r\n appService.getFields,\r\n );\r\n\r\n const [getObjectivesWithDataState, getObjectivesDataState] =\r\n useRequestWithDataState(objectiveService.getObjectives);\r\n\r\n const [getFacilitiesByFieldId, getFacilitiesByFieldIdDataState] =\r\n useRequestWithDataState(appService.facilitiesByFieldId);\r\n\r\n const clearFormFields = useCallback(\r\n (...names) => {\r\n names.forEach((name) => {\r\n const initialValue = getIn(initialValues, name);\r\n\r\n if (!initialValue) {\r\n setFieldValue(name, initialValue);\r\n }\r\n });\r\n },\r\n [setFieldValue, initialValues],\r\n );\r\n\r\n const setNextActiveIndex = useCallback(() => {\r\n setCurrentIndex((currentIndex) =>\r\n items.findIndex(\r\n (item, index) =>\r\n index !== currentIndex && !getIn(values, item.names.id),\r\n ),\r\n );\r\n }, [items, values]);\r\n\r\n const onSelectOrganization = useCallback(() => {\r\n clearFormFields(\r\n FormFields.FIELD_ID,\r\n FormFields.FACILITY_ID,\r\n FormFields.WELLBORE_ID,\r\n );\r\n\r\n setNextActiveIndex();\r\n }, [clearFormFields, setNextActiveIndex]);\r\n\r\n const onSelectField = useCallback(() => {\r\n clearFormFields(FormFields.FACILITY_ID, FormFields.WELLBORE_ID);\r\n setNextActiveIndex();\r\n }, [clearFormFields, setNextActiveIndex]);\r\n\r\n const onFocusOrganization = useCallback(() => {\r\n clearFormFields(\r\n FormFields.FIELD_ID,\r\n FormFields.FACILITY_ID,\r\n FormFields.WELLBORE_ID,\r\n );\r\n }, [clearFormFields]);\r\n\r\n const onFocusField = useCallback(() => {\r\n clearFormFields(FormFields.FACILITY_ID, FormFields.WELLBORE_ID);\r\n }, [clearFormFields]);\r\n\r\n const getFieldsByOrganization = useCallback(() => {\r\n getFields({ organizationId: selectedOrganizationId }).then((fields) =>\r\n setFields(List(fields).map(mappers.Field.from)),\r\n );\r\n }, [getFields, selectedOrganizationId]);\r\n\r\n const getWellboresByField = useCallback(() => {\r\n getWellbores(selectedFieldId).then((wellbores) =>\r\n setWellbores(List(wellbores).map(mappers.Wellbore.from)),\r\n );\r\n }, [getWellbores, selectedFieldId]);\r\n\r\n const getFacilitiesByField = useCallback(() => {\r\n getFacilitiesByFieldId(selectedFieldId).then((facilities) =>\r\n setFacilities(List(facilities).map(mappers.Facility.from)),\r\n );\r\n }, [getFacilitiesByFieldId, selectedFieldId]);\r\n\r\n const getObjectives = useCallback(() => {\r\n getObjectivesWithDataState().then((objectives) =>\r\n setObjectives(List(objectives).map(mappers.Objective.from)),\r\n );\r\n }, [getObjectivesWithDataState]);\r\n\r\n const isOrganizationVisible = currentUser.get('isMainVendor');\r\n\r\n const organizationItem = useMemo(\r\n () => ({\r\n label: 'Organization',\r\n onLoad: getOrganizations,\r\n onFocus: onFocusOrganization,\r\n onClick: onSelectOrganization,\r\n isVisible: isOrganizationVisible,\r\n disabled: !!initialOrganizationId,\r\n dataState: getOrganizationsDataState,\r\n noItemsMessage: 'No organizations available',\r\n data: organizations.filter(isClientOrganization),\r\n names: {\r\n id: FormFields.ORGANIZATION_ID,\r\n search: FormFields.ORGANIZATION_NAME,\r\n },\r\n }),\r\n [\r\n organizations,\r\n getOrganizations,\r\n onFocusOrganization,\r\n onSelectOrganization,\r\n isOrganizationVisible,\r\n initialOrganizationId,\r\n getOrganizationsDataState,\r\n ],\r\n );\r\n\r\n const fieldDisabled =\r\n (isOrganizationVisible && !selectedOrganizationId) || !!initialFieldId;\r\n\r\n const fieldItem = useMemo(\r\n () => ({\r\n data: fields,\r\n label: 'Field',\r\n onFocus: onFocusField,\r\n onClick: onSelectField,\r\n disabled: fieldDisabled,\r\n dataState: getFieldsDataState,\r\n onLoad: getFieldsByOrganization,\r\n noItemsMessage: 'No fields available for this organization',\r\n names: {\r\n id: FormFields.FIELD_ID,\r\n search: FormFields.FIELD_NAME,\r\n },\r\n }),\r\n [\r\n fields,\r\n onFocusField,\r\n onSelectField,\r\n fieldDisabled,\r\n getFieldsDataState,\r\n getFieldsByOrganization,\r\n ],\r\n );\r\n\r\n const wellboreItem = useMemo(\r\n () => ({\r\n data: wellbores,\r\n label: 'Wellbore',\r\n onLoad: getWellboresByField,\r\n onClick: setNextActiveIndex,\r\n dataState: getWellboresDataState,\r\n itemDisabledTitle: 'Missing survey',\r\n groupBy: (wellbore) => wellbore.get('wellName'),\r\n disabled: !selectedFieldId || !!initialWellboreId,\r\n noItemsMessage: 'No wellbores available for this field',\r\n isItemDisabled: (wellbore) => !wellbore.get('trajectoryUpdated'),\r\n names: {\r\n id: FormFields.WELLBORE_ID,\r\n search: FormFields.WELLBORE_NAME,\r\n },\r\n }),\r\n [\r\n wellbores,\r\n selectedFieldId,\r\n initialWellboreId,\r\n setNextActiveIndex,\r\n getWellboresByField,\r\n getWellboresDataState,\r\n ],\r\n );\r\n\r\n const facilityItem = useMemo(\r\n () => ({\r\n data: facilities,\r\n label: 'Facility',\r\n onClick: setNextActiveIndex,\r\n onLoad: getFacilitiesByField,\r\n dataState: getFacilitiesByFieldIdDataState,\r\n disabled: !selectedFieldId || !!initialFacilityId,\r\n noItemsMessage: 'No facilities available for this field',\r\n groupBy: (facility) => facility.get('typeName'),\r\n names: {\r\n id: FormFields.FACILITY_ID,\r\n search: FormFields.FACILITY_NAME,\r\n },\r\n }),\r\n [\r\n facilities,\r\n selectedFieldId,\r\n initialFacilityId,\r\n setNextActiveIndex,\r\n getFacilitiesByField,\r\n getFacilitiesByFieldIdDataState,\r\n ],\r\n );\r\n\r\n const objectiveItem = useMemo(\r\n () => ({\r\n data: objectives,\r\n label: 'Main Objective',\r\n onLoad: getObjectives,\r\n onClick: setNextActiveIndex,\r\n dataState: getObjectivesDataState,\r\n noItemsMessage: 'No objectives available',\r\n getItemLabel: (objective) => objective.get('title'),\r\n getItemId: (objective) => objective.get('objectiveId'),\r\n names: {\r\n id: FormFields.OBJECTIVE_ID,\r\n search: FormFields.OBJECTIVE_NAME,\r\n },\r\n }),\r\n [objectives, getObjectives, setNextActiveIndex, getObjectivesDataState],\r\n );\r\n\r\n items = useMemo(\r\n () =>\r\n [organizationItem, fieldItem, wellboreItem, facilityItem, objectiveItem]\r\n .filter((item) => item.isVisible ?? true)\r\n .map((item) => ({\r\n ...item,\r\n // for now, the data signature is the same on all data (id, name), so we will just use the default getters for all items\r\n getItemId: item.getItemId ?? getItemIdDefault,\r\n getItemLabel: item.getItemLabel ?? getItemLabelDefault,\r\n })),\r\n [organizationItem, fieldItem, wellboreItem, facilityItem, objectiveItem],\r\n );\r\n\r\n const activeItem = items[currentIndex];\r\n\r\n useEffect(\r\n () => () => {\r\n // reset form and current index when closed\r\n resetForm();\r\n setCurrentIndex();\r\n },\r\n [resetForm, setCurrentIndex],\r\n );\r\n\r\n useEffect(() => {\r\n if (isNil(currentIndex)) {\r\n setNextActiveIndex();\r\n }\r\n }, [currentIndex, setNextActiveIndex]);\r\n\r\n const selectedWellbore = useMemo(\r\n () =>\r\n wellbores\r\n .toMap()\r\n .mapKeys((_, wellbore) => wellbore.get('id'))\r\n .get(selectedWellboreId),\r\n [wellbores, selectedWellboreId],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateProjectModalForm;\r\n","import { compose } from 'redux';\r\nimport { Formik } from 'formik';\r\nimport { connect } from 'react-redux';\r\nimport { Dialog } from '@material-ui/core';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n CREATE_PROJECT_MODAL_ID,\r\n CreateProjectFormFields as FormFields,\r\n} from 'features/projects/projects.constants';\r\n\r\nimport { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport { submitCreateProjectForm } from 'features/projects/projects.actions';\r\nimport { validateCreateProjectForm } from 'features/projects/project.validation';\r\nimport CreateProjectModalForm from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalForm';\r\n\r\nconst defaultInitialValues = {\r\n [FormFields.FIELD_ID]: null,\r\n [FormFields.FACILITY_ID]: null,\r\n [FormFields.WELLBORE_ID]: null,\r\n [FormFields.ORGANIZATION_ID]: null,\r\n [FormFields.OBJECTIVE_ID]: null,\r\n};\r\n\r\nconst CreateProjectModalContainer = ({\r\n title = 'Create project',\r\n dispatchSubmitCreateProjectForm,\r\n initialValues = defaultInitialValues,\r\n}) => {\r\n const currentUser = useCurrentUser();\r\n\r\n const [open, toggleModal] = useModal(CREATE_PROJECT_MODAL_ID);\r\n\r\n const onSubmit = useCallback(\r\n (project, formik) =>\r\n dispatchSubmitCreateProjectForm(project, formik, toggleModal),\r\n [toggleModal, dispatchSubmitCreateProjectForm],\r\n );\r\n\r\n // initially set OrganizationId if currentUser is not Main vendor\r\n const initialFormValues = useMemo(() => {\r\n const initialOrganizationId = currentUser.get('isMainVendor')\r\n ? defaultInitialValues[FormFields.ORGANIZATION_ID]\r\n : currentUser.get('organizationId');\r\n\r\n if (initialOrganizationId) {\r\n return {\r\n ...initialValues,\r\n [FormFields.ORGANIZATION_ID]: initialOrganizationId,\r\n };\r\n }\r\n\r\n return {\r\n ...initialValues,\r\n };\r\n }, [currentUser, initialValues]);\r\n\r\n return (\r\n \r\n \r\n {(formik) => (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchSubmitCreateProjectForm: submitCreateProjectForm,\r\n }),\r\n)(CreateProjectModalContainer);\r\n","import { useMemo } from 'react';\r\nimport { List } from 'immutable';\r\nimport { useCallback } from 'react';\r\nimport { Box } from '@material-ui/core';\r\nimport Add from '@material-ui/icons/Add';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport {\r\n CREATE_PROJECT_MODAL_ID,\r\n CreateProjectFormFields as FormFields,\r\n} from 'features/projects/projects.constants';\r\n\r\nimport mappers from 'mappers';\r\nimport appService from 'services/app.service';\r\nimport { Button } from 'app/components/withNavigation';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport { EMPTY_LIST, SystemPermission } from 'app/app.constants';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport CreateProjectModalContainer from 'features/projects/components/CreateProjectModalContainer/CreateProjectModalContainer';\r\n\r\nconst getInitialItem = (items) => {\r\n if (items.size === 1) return items.first();\r\n\r\n return null;\r\n};\r\n\r\nconst CreateProjectFromWellboreModalContainer = ({\r\n fieldId,\r\n className,\r\n wellboreId,\r\n}) => {\r\n const [, toggleModal] = useModal(CREATE_PROJECT_MODAL_ID);\r\n\r\n const { wellbore } = useWellbore(wellboreId);\r\n\r\n const getFacilitiesByField = useCallback(\r\n () =>\r\n appService\r\n .facilitiesByFieldId()\r\n .then((facilities) => List(facilities).map(mappers.Facility.from)),\r\n [],\r\n );\r\n\r\n const [facilities = EMPTY_LIST] = useRequest(getFacilitiesByField);\r\n\r\n const initialFacility = getInitialItem(facilities);\r\n\r\n const getOrganizationsByField = useCallback(\r\n () =>\r\n appService\r\n .getOrganizationsByField(fieldId)\r\n .then((organizations) =>\r\n List(organizations).map(mappers.Organization.from),\r\n ),\r\n [fieldId],\r\n );\r\n\r\n const [organizations = EMPTY_LIST] = useRequest(getOrganizationsByField);\r\n\r\n const initialOrganization = getInitialItem(organizations);\r\n\r\n const initialValues = useMemo(\r\n () => ({\r\n [FormFields.FIELD_ID]: wellbore.get('fieldId'),\r\n [FormFields.FIELD_NAME]: wellbore.get('fieldName'),\r\n [FormFields.FACILITY_ID]: initialFacility?.get('id'),\r\n [FormFields.FACILITY_NAME]: initialFacility?.get('name'),\r\n [FormFields.WELLBORE_NAME]: wellbore.get('name'),\r\n [FormFields.WELLBORE_ID]: wellbore.get('wellboreId'),\r\n [FormFields.ORGANIZATION_ID]: initialOrganization?.get('id'),\r\n [FormFields.ORGANIZATION_NAME]: initialOrganization?.get('name'),\r\n }),\r\n [wellbore, initialFacility, initialOrganization],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n New project\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateProjectFromWellboreModalContainer;\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { useEffect, memo } from 'react';\r\nimport { Grid, Typography, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { onLoad } from 'features/wells/projects/wellProjects.actions';\r\nimport { getWellProjectsFromState } from 'features/wells/projects/wellProjects.selectors';\r\nimport { WELL_PROJECT_HISTORY_PAGE_LOADED } from 'features/wells/projects/wellProjects.constants';\r\nimport WellDashboardProjectByStatus from 'features/projects/components/WellDashboardProjectByStatus';\r\nimport CreateProjectFromWellboreModalContainer from 'features/wells/overview/components/CreateProjectFromWellboreModalContainer';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst WellDashboardProjectHistory = ({\r\n fieldId,\r\n classes,\r\n projects,\r\n dataState,\r\n breadcrumb,\r\n wellboreId,\r\n dispatchOnLoad,\r\n}) => {\r\n const theme = useTheme();\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(wellboreId);\r\n }, [dispatchOnLoad, wellboreId]);\r\n\r\n return (\r\n \r\n \r\n {!projects.size ? (\r\n \r\n \r\n \r\n \r\n \r\n No projects...\r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n projects: getWellProjectsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n WELL_PROJECT_HISTORY_PAGE_LOADED,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n },\r\n ),\r\n memo,\r\n withStyles(styles),\r\n)(WellDashboardProjectHistory);\r\n","import {\r\n Table,\r\n TableRow,\r\n TableBody,\r\n TableCell,\r\n Typography,\r\n} from '@material-ui/core';\r\n\r\nimport { UNITS } from 'app/app.constants';\r\nimport makeStyles from '@material-ui/styles/makeStyles';\r\nimport { formatQuantity, formatValue } from 'utils/format.util';\r\n\r\nconst details = [\r\n {\r\n label: 'Wellbore',\r\n accessor: (wellbore) => wellbore.get('name'),\r\n },\r\n {\r\n label: 'Field',\r\n accessor: (wellbore) => wellbore.get('fieldName'),\r\n },\r\n {\r\n label: 'Vertical depth',\r\n accessor: (_, trajectory) =>\r\n formatQuantity(trajectory.get('verticalDepth')),\r\n },\r\n {\r\n label: 'Measured depth',\r\n accessor: (_, trajectory) =>\r\n formatQuantity(trajectory.get('measuredDepth')),\r\n },\r\n {\r\n label: 'Water depth',\r\n accessor: (wellbore) => formatQuantity(wellbore.get('waterDepth')),\r\n },\r\n {\r\n label: 'Elevation',\r\n accessor: (wellbore) => formatQuantity(wellbore.get('elevation')),\r\n },\r\n {\r\n label: 'Max. Dogleg',\r\n accessor: (_, trajectory) => {\r\n const maximumDogLeg = formatValue(\r\n trajectory.get('maximumDogLeg'),\r\n UNITS.DEG,\r\n 0.1,\r\n );\r\n\r\n const maximumDogLegDepth = formatQuantity(\r\n trajectory.get('maximumDogLegDepth'),\r\n );\r\n\r\n return maximumDogLeg && `${maximumDogLeg} (${maximumDogLegDepth})`;\r\n },\r\n },\r\n {\r\n label: 'Max. Inclination',\r\n accessor: (_, trajectory) => {\r\n const maximumInclination = formatValue(\r\n trajectory.get('maximumInclination'),\r\n UNITS.DEG,\r\n 0.1,\r\n );\r\n\r\n const maximumInclinationDepth = formatQuantity(\r\n trajectory.get('maximumInclinationDepth'),\r\n );\r\n\r\n return (\r\n maximumInclination &&\r\n `${maximumInclination} (${maximumInclinationDepth})`\r\n );\r\n },\r\n },\r\n];\r\n\r\nconst WellboreTrajectoryDetails = ({ wellbore, trajectory }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {details.map(({ label, accessor }) => (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n {accessor(wellbore, trajectory) || N/A}\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n labelCell: {\r\n color: theme.palette.primary.light,\r\n },\r\n row: {\r\n borderBottom: `2px dotted ${theme.palette.secondary.main}`,\r\n '& > td': {\r\n paddingTop: theme.spacing(3),\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n },\r\n '& > td:not(:last-child)': {\r\n paddingRight: theme.spacing(3),\r\n },\r\n },\r\n}));\r\n\r\nexport default WellboreTrajectoryDetails;\r\n","import React, { useMemo } from 'react';\r\nimport { Grid, CircularProgress } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst WellboreTrajectoryTableView = ({\r\n unit,\r\n trajectoryPoints = EMPTY_MAP,\r\n initialState = defaultInitialState,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: true,\r\n id: 'measuredDepth',\r\n accessor: (point) => point.getIn(['measuredDepth', 'value']),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: true,\r\n id: 'inclination',\r\n Header: 'Inclination',\r\n accessor: (point) => point.get('inclination'),\r\n },\r\n {\r\n xs: true,\r\n id: 'azimuth',\r\n Header: 'Azimuth',\r\n accessor: (point) => point.get('azimuth'),\r\n },\r\n {\r\n xs: true,\r\n id: 'verticalDepth',\r\n accessor: (point) => point.getIn(['verticalDepth', 'value']),\r\n Header: () => (\r\n \r\n ),\r\n Cell: ({ value }) => Math.round(value),\r\n },\r\n ],\r\n [unit],\r\n );\r\n\r\n if (!trajectoryPoints.size) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default React.memo(WellboreTrajectoryTableView);\r\n","import { compose } from 'redux';\r\nimport React, { memo } from 'react';\r\n\r\nimport {\r\n Box,\r\n Grid,\r\n Radio,\r\n Dialog,\r\n Button,\r\n Divider,\r\n RadioGroup,\r\n Typography,\r\n FormControl,\r\n DialogContent,\r\n FormControlLabel,\r\n} from '@material-ui/core';\r\n\r\nimport { ModalHeader, LoadingButton } from 'altus-ui-components';\r\n\r\nimport { formatQuantity } from 'utils/format.util';\r\nimport { UNITS, UnitSystem } from 'app/app.constants';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport WellboreTrajectoryTableView from 'app/components/WellboreTrajectory/WellboreTrajectoryTableView';\r\n\r\nconst WellboreTrajectoryPreviewModal = ({\r\n open,\r\n classes,\r\n onClose,\r\n wellName,\r\n onSubmit,\r\n fieldName,\r\n submitting,\r\n unitSystem,\r\n trajectoryPreview,\r\n onUnitSystemChange,\r\n}) => {\r\n const unit = unitSystem === UnitSystem.METRIC ? UNITS.METER : UNITS.FEET;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${fieldName} - ${wellName}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Unit System\r\n \r\n \r\n \r\n \r\n \r\n \r\n onUnitSystemChange(Number(event.target.value))\r\n }\r\n >\r\n }\r\n value={UnitSystem.METRIC}\r\n />\r\n }\r\n value={UnitSystem.IMPERIAL}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Selecting the survey's correct unit of measure is imperative to\r\n ensure correct functionality.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Import\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '75vh',\r\n },\r\n content: {\r\n height: '100%',\r\n overflow: 'hidden',\r\n },\r\n tableContainer: {\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n },\r\n header: {\r\n minHeight: theme.spacing(6),\r\n },\r\n});\r\n\r\nexport default compose(\r\n memo,\r\n withStyles(styles),\r\n)(WellboreTrajectoryPreviewModal);\r\n","import { compose } from 'redux';\r\nimport React, { memo, useCallback, useState } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport { EMPTY_MAP, UnitSystem } from 'app/app.constants';\r\nimport WellboreTrajectoryPreviewModal from 'features/wells/overview/components/WellboreTrajectoryPreviewModal';\r\n\r\nconst WellboreTrajectoryPreviewModalContainer = ({\r\n fieldId,\r\n onClose,\r\n wellbore,\r\n dataState,\r\n wellboreId,\r\n trajectoryFile,\r\n getTrajectoryPreview,\r\n uploadWellboreTrajectory,\r\n}) => {\r\n const [isOpen, setModalOpen] = useState(false);\r\n const [unitSystem, setUnitSystem] = useState(UnitSystem.METRIC);\r\n\r\n const handleOnClose = useCallback(() => {\r\n onClose();\r\n setModalOpen(false);\r\n setUnitSystem(UnitSystem.METRIC);\r\n }, [onClose]);\r\n\r\n const handleGetTrajectoryPreview = useCallback(() => {\r\n if (!trajectoryFile) {\r\n return Promise.resolve();\r\n }\r\n\r\n setModalOpen(true);\r\n\r\n return getTrajectoryPreview(fieldId, wellboreId, trajectoryFile).catch(\r\n handleOnClose,\r\n );\r\n }, [\r\n fieldId,\r\n wellboreId,\r\n handleOnClose,\r\n trajectoryFile,\r\n getTrajectoryPreview,\r\n ]);\r\n\r\n const [trajectoryPreview = EMPTY_MAP] = useRequest(\r\n handleGetTrajectoryPreview,\r\n );\r\n\r\n const handleOnTrajectoryUpload = useCallback(() => {\r\n uploadWellboreTrajectory(\r\n fieldId,\r\n wellboreId,\r\n trajectoryFile,\r\n unitSystem,\r\n ).then(handleOnClose);\r\n }, [\r\n fieldId,\r\n wellboreId,\r\n unitSystem,\r\n handleOnClose,\r\n trajectoryFile,\r\n uploadWellboreTrajectory,\r\n ]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(memo)(WellboreTrajectoryPreviewModalContainer);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nconst getWellboreSectionSelector = (state) =>\r\n state.getIn(['entity', 'wellboreSection']);\r\n\r\nexport const createWellboreSectionsForWellboreSelector = (wellboreId) =>\r\n createSelector(getWellboreSectionSelector, (wellboreSections) =>\r\n wellboreSections\r\n .filter((section) => section?.get('wellboreId'))\r\n .groupBy((section) => section.get('wellboreId').toString())\r\n .get(wellboreId.toString()),\r\n );\r\n","import * as THREE from 'three';\r\nimport { Cylinder } from '@react-three/drei';\r\nimport React, { useEffect, useRef } from 'react';\r\n\r\nconst objectUp = new THREE.Object3D().up;\r\nconst reusableVector = new THREE.Vector3();\r\nconst reusableMatrix = new THREE.Matrix4();\r\n\r\nconst orientationMultiplier = new THREE.Matrix4().set(\r\n 1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n 0,\r\n -1,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n);\r\nconst DrawCylinder = ({\r\n v1,\r\n v2,\r\n length,\r\n material,\r\n radius = 30,\r\n name,\r\n measuredDepthStart,\r\n measuredDepthEnd,\r\n thetaStart = 0,\r\n isHalf = true,\r\n}) => {\r\n material.side = THREE.DoubleSide;\r\n const cylinderRef = useRef();\r\n const direction = reusableVector.subVectors(v1, v2);\r\n\r\n const args = isHalf\r\n ? [\r\n radius,\r\n radius,\r\n length ?? direction.length(),\r\n 16,\r\n 1,\r\n true,\r\n thetaStart,\r\n Math.PI,\r\n ]\r\n : [radius, radius, length ?? direction.length(), 16, 1];\r\n\r\n useEffect(() => {\r\n reusableMatrix.lookAt(v1, v2, objectUp);\r\n reusableMatrix.multiply(orientationMultiplier);\r\n }, [v1, v2]);\r\n\r\n useEffect(() => {\r\n if (!name) return;\r\n cylinderRef?.current?.applyMatrix4(reusableMatrix);\r\n cylinderRef?.current?.position.set(\r\n (v1.x + v2.x) / 2,\r\n (v1.y + v2.y) / 2,\r\n (v1.z + v2.z) / 2,\r\n );\r\n }, [cylinderRef, v1, v2, name]);\r\n\r\n useEffect(() => {\r\n if (!name) {\r\n return;\r\n }\r\n cylinderRef.current.data = {\r\n measuredDepthStart,\r\n measuredDepthEnd,\r\n };\r\n }, [cylinderRef, measuredDepthStart, measuredDepthEnd, name]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DrawCylinder;\r\n","import React from 'react';\r\nimport * as THREE from 'three';\r\nimport DrawCylinder from 'app/components/WellboreContextualization/DrawCylinder';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst startVector = new THREE.Vector3();\r\nconst endVector = new THREE.Vector3();\r\n\r\nconst YAxis = ({ maxTVD }) => {\r\n startVector.set(0, 0, 0);\r\n endVector.set(0, maxTVD, 0);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default YAxis;\r\n","import * as THREE from 'three';\r\nimport React, { useMemo } from 'react';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst TextSprite = ({ text, position, fontSize = 70, textColor }) => {\r\n const theme = useTheme();\r\n const scale = 60;\r\n const texture = useMemo(() => {\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n const texture = new THREE.Texture(canvas);\r\n\r\n context.font = `${fontSize}px Arial`;\r\n context.fillStyle = textColor || theme.palette.secondary.light;\r\n context.fillText(text, 0, fontSize);\r\n\r\n texture.minFilter = THREE.LinearFilter;\r\n texture.needsUpdate = true;\r\n return texture;\r\n }, [text, fontSize, textColor, theme.palette.secondary.light]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TextSprite;\r\n","import React from 'react';\r\nimport { getTicks } from 'app/components/WellboreContextualization/Grid';\r\nimport TextSprite from 'app/components/WellboreContextualization/TextSprite';\r\n\r\nconst YAxisLabels = ({ maxTVD, tickInterval }) => {\r\n const yTicks = getTicks({ max: maxTVD, tickInterval });\r\n return yTicks.map((tick, index) => (\r\n \r\n ));\r\n};\r\n\r\nexport default YAxisLabels;\r\n","import React from 'react';\r\nimport * as d3Scale from 'd3-scale';\r\nimport YAxis from 'app/components/WellboreContextualization/YAxis';\r\nimport YAxisLabels from 'app/components/WellboreContextualization/YAxisLabels';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst DefaultTickInterval = 500;\r\nconst Grid = ({ maxTVD, max, min = 0, tickInterval = DefaultTickInterval }) => {\r\n const xTicks = getTicks({ min, max: max + tickInterval, tickInterval });\r\n const numTicks = (xTicks.length - 1) * 2;\r\n const length = xTicks[xTicks.length - 1] * 2;\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport const getTicks = ({\r\n max,\r\n min = 0,\r\n tickInterval = DefaultTickInterval,\r\n}) => {\r\n const scale = d3Scale.scaleLinear().domain([min, max]);\r\n const ticks = scale.ticks(Math.ceil(max / tickInterval));\r\n\r\n return ticks;\r\n};\r\n\r\nexport default Grid;\r\n","import React, { Suspense } from 'react';\r\nimport { Canvas } from '@react-three/fiber';\r\nimport { OrbitControls } from '@react-three/drei';\r\nimport Grid from 'app/components/WellboreContextualization/Grid';\r\nimport Environment from 'app/components/WellboreTrajectoryDetailed3DView/Environment';\r\nimport { useViewMode } from 'app/hooks/useViewMode';\r\n\r\nconst ThreeFiberSceneWrapper = ({\r\n maxNE,\r\n maxTVD,\r\n children = null,\r\n zoom = 2,\r\n domElement,\r\n}) => {\r\n const viewMode = useViewMode();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ThreeFiberSceneWrapper;\r\n","import React from 'react';\r\nimport DrawCylinder from 'app/components/WellboreContextualization/DrawCylinder';\r\n\r\nconst RenderLayer = ({ layerRef }) => {\r\n return (\r\n <>\r\n {layerRef.current.map((trajectory, index) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default RenderLayer;\r\n","import { useEffect } from 'react';\r\nimport { useThree } from '@react-three/fiber';\r\nimport { between } from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport { createTextSprite } from 'app/components/WellboreContextualization/RenderNippleText';\r\nimport {\r\n checkIntersection,\r\n createNewNipple,\r\n} from 'app/components/WellboreContextualization/RenderNipples';\r\n\r\nconst DrawNipples = ({ nippleRef, nippleTextRef }) => {\r\n const { scene } = useThree();\r\n\r\n useEffect(() => {\r\n scene.traverse((cylinder) => {\r\n if (!cylinder.name.startsWith('trajectory')) return;\r\n\r\n nippleRef.current.forEach((nipple) => {\r\n if (\r\n between(\r\n nipple.key,\r\n cylinder.data.measuredDepthStart,\r\n cylinder.data.measuredDepthEnd,\r\n )\r\n ) {\r\n const nippleInScene = scene.getObjectByName(\r\n `nipple-${nipple.value.top}`,\r\n );\r\n if (!nippleInScene) {\r\n const diff =\r\n nipple.value.top -\r\n (cylinder.data.measuredDepthStart +\r\n cylinder.data.measuredDepthEnd) /\r\n 2;\r\n const newNipple = createNewNipple(nipple.value);\r\n newNipple.name = nipple.value.name;\r\n newNipple.position.y += nipple.value.length / 2;\r\n cylinder.add(newNipple);\r\n newNipple.translateY(diff);\r\n newNipple.rotateX(Math.PI / 2);\r\n cylinder.updateMatrixWorld();\r\n\r\n const text = createTextSprite(nipple.value.spriteText, 40);\r\n newNipple.add(text);\r\n text.position.y += nipple.value.outerRadius + 20;\r\n if (nippleTextRef.current.length) {\r\n for (const existingSprite of nippleTextRef.current) {\r\n if (\r\n checkIntersection(text, existingSprite) &&\r\n text.name !== existingSprite.name\r\n ) {\r\n text.position.set(\r\n text.position.x,\r\n text.position.y + existingSprite.scale.y / 2,\r\n text.position.z,\r\n );\r\n }\r\n }\r\n }\r\n nippleTextRef.current.push(text);\r\n }\r\n }\r\n });\r\n });\r\n }, [scene, nippleRef, nippleTextRef]);\r\n\r\n return null;\r\n};\r\n\r\nexport default DrawNipples;\r\n","import React from 'react';\r\nimport { useRef } from 'react';\r\nimport RenderLayer from 'app/components/WellboreContextualization/RenderLayer';\r\nimport DrawNipples from 'app/components/WellboreContextualization/DrawNipples';\r\nimport DrawCylinder from 'app/components/WellboreContextualization/DrawCylinder';\r\n\r\nconst WellboreContextTrajectory = ({\r\n trajectoryRef,\r\n nippleRef,\r\n groundLayerRef,\r\n depthMarkerRef,\r\n}) => {\r\n const nippleTextRef = useRef([]);\r\n return (\r\n <>\r\n \r\n \r\n \r\n {depthMarkerRef.current.map((trajectory, index) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default WellboreContextTrajectory;\r\n","import { compose } from 'redux';\r\nimport { Box } from '@material-ui/core';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport React, { memo, useCallback, useState, useEffect } from 'react';\r\nimport NavigationHelpTooltip from 'app/components/WellboreContextualization/NavigationHelpTooltip';\r\nimport WellboreTrajectoryLegends from 'app/components/WellboreTrajectory/WellboreTrajectoryLegends';\r\nimport ThreeFiberSceneWrapper from 'app/components/WellboreContextualization/ThreeFiberSceneWrapper';\r\nimport WellboreContextTrajectory from 'app/components/WellboreContextualization/WellboreContextTrajectory';\r\nimport { useViewMode } from 'app/hooks/useViewMode';\r\n\r\nconst WellboreContext3DContainer = ({\r\n classes,\r\n disableOrbitControls,\r\n hideLegends,\r\n hideHelp,\r\n trajectoryRef,\r\n nippleRef,\r\n groundLayerRef,\r\n depthMarkerRef,\r\n maxNE,\r\n maxTVD,\r\n depthsOfInterest,\r\n}) => {\r\n const [domElement, setDomElement] = useState();\r\n const viewMode = useViewMode();\r\n const [help, setHelp] = useState();\r\n const rootRef = useCallback((node) => {\r\n if (node) {\r\n setDomElement(node);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n prepareHelpData();\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const prepareHelpData = () => {\r\n setHelp({\r\n title:\r\n viewMode === 'mobile'\r\n ? 'How to interact with 3D well?'\r\n : 'HOW TO INTERACT WITH 3D WELL?',\r\n data: [\r\n {\r\n navType: '1. Dragging around the well:',\r\n content: 'Use simple dragging to go around the well',\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/navigate.png`,\r\n },\r\n {\r\n navType: '2. Zoom in and out:',\r\n content:\r\n viewMode === 'mobile' ? (\r\n 'Use two fingers and move them closer to zoom in further to zoom out'\r\n ) : (\r\n
    \r\n
  • \r\n Touchpad: Use two fingers and move them closer to zoom in\r\n further to zoom out\r\n
  • \r\n
  • \r\n Mouse: Scroll forward to zoom in and backward to zoom out.\r\n
  • \r\n
\r\n ),\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/zoomIn.png`,\r\n },\r\n {\r\n navType: '3. Navigate up and down:',\r\n content:\r\n viewMode === 'mobile'\r\n ? 'Use simple dragging with two fingers to go up and down the well.'\r\n : 'Use control key and simple dragging to go up and down on the well.',\r\n src:\r\n viewMode === 'mobile'\r\n ? `${PUBLIC_ASSETS_URL}/images/navigation/upDown.png`\r\n : `${PUBLIC_ASSETS_URL}/images/navigation/ctrl.png`,\r\n },\r\n ],\r\n });\r\n };\r\n return (\r\n <>\r\n \r\n \r\n \r\n {\r\n // Do not propagate click events that happen on the scene (like when clicking to orbit around)\r\n if (!disableOrbitControls) {\r\n event.stopPropagation();\r\n }\r\n }}\r\n >\r\n {!hideHelp && (\r\n \r\n {help && }\r\n \r\n )}\r\n {!hideLegends && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n height: '100%',\r\n cursor: 'pointer',\r\n display: 'inline-block',\r\n position: 'relative',\r\n },\r\n legend: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n bottom: theme.spacing(1),\r\n },\r\n help: {\r\n position: 'absolute',\r\n top: theme.spacing(5),\r\n },\r\n});\r\n\r\nexport default compose(memo, withStyles(styles))(WellboreContext3DContainer);\r\n","import * as THREE from 'three';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { useEffect, memo, useRef, useState, useMemo } from 'react';\r\n\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport {\r\n between,\r\n convertMetric,\r\n} from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport { WellboreSectionType } from 'features/wells/sections/wellboreSection.constants';\r\nimport WellboreTrajectoryContainer from 'app/components/WellboreTrajectory/WellboreTrajectoryContainer';\r\nimport WellboreContext3DContainer from 'app/components/WellboreContextualization/WellboreContext3DContainer';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst WellboreContextTrajectoryContainer = ({\r\n classes,\r\n hideLegends,\r\n disableOrbitControls,\r\n trajectory,\r\n wellboreId,\r\n fieldId,\r\n wellboreDetail,\r\n wellbore,\r\n wellboreSections,\r\n children = null,\r\n ...rest\r\n}) => {\r\n const trajectoryRef = useRef([]);\r\n const nippleRef = useRef([]);\r\n const groundLayerRef = useRef([]);\r\n const depthMarkerRef = useRef([]);\r\n const [maxTVD, setMaxTVD] = useState(null);\r\n const [maxNE, setMaxNE] = useState(null);\r\n const [dhsvDepth, setDhsvDepth] = useState(null);\r\n const [maximumWorkingDepth, setMaximumWorkingDepth] = useState(null);\r\n const [waterDepth, setWaterDepth] = useState(null);\r\n const [materials, setMaterials] = useState(null);\r\n const [refFlag, setRefFlag] = useState(false);\r\n const theme = useTheme();\r\n\r\n const depthsOfInterest = useMemo(\r\n () => [\r\n {\r\n depth: dhsvDepth?.value,\r\n name: 'DHSV',\r\n unit: dhsvDepth?.unit,\r\n material: materials?.dhsv,\r\n color: theme.altus.components.ContextualizedWell.trajectory.dhsv,\r\n },\r\n {\r\n depth: maximumWorkingDepth?.value,\r\n name: 'Max working depth',\r\n unit: maximumWorkingDepth?.unit,\r\n material: materials?.maximumWorkingDepth,\r\n color:\r\n theme.altus.components.ContextualizedWell.trajectory\r\n .maximumWorkingDepth,\r\n },\r\n ],\r\n [dhsvDepth, maximumWorkingDepth, materials, theme],\r\n );\r\n\r\n useEffect(() => {\r\n const loader = new THREE.TextureLoader();\r\n const metalAOMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_ambientOcclusion.jpg`,\r\n );\r\n const metalDispMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_height.png`,\r\n );\r\n const metalNormalMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_normal.jpg`,\r\n );\r\n const metalMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_basecolor.jpg`,\r\n );\r\n const metalRoughnessMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_roughness.jpg`,\r\n );\r\n const metalMetalnessMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/metal/Metal_006_metallic.jpg`,\r\n );\r\n const soilAOMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/soil/damp_sand_ao_4k.jpg`,\r\n );\r\n const soilDispMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/soil/damp_sand_disp_4k.png`,\r\n );\r\n const soilNormalMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/soil/damp_sand_nor_gl_4k.jpg`,\r\n );\r\n const soilMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/soil/damp_sand_diff_4k.jpg`,\r\n );\r\n const soilRoughnessMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/soil/damp_sand_rough_4k.jpg`,\r\n );\r\n const waterAOMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/water/Water_002_OCC.jpg`,\r\n );\r\n const waterDispMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/water/Water_002_DISP.png`,\r\n );\r\n const waterNormalMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/water/Water_002_NORM.jpg`,\r\n );\r\n const waterColorMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/water/Water_002_COLOR.jpg`,\r\n );\r\n const waterRoughnessMap = loader.load(\r\n `${PUBLIC_ASSETS_URL}/textures/water/Water_002_ROUGH.jpg`,\r\n );\r\n setMaterials({\r\n water: new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.water,\r\n side: THREE.DoubleSide,\r\n map: waterColorMap,\r\n aoMap: waterAOMap,\r\n displacementMap: waterDispMap,\r\n normalMap: waterNormalMap,\r\n roughnessMap: waterRoughnessMap,\r\n alphaTest: 0.5,\r\n depthTest: true,\r\n }),\r\n soil: new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.soil,\r\n side: THREE.DoubleSide,\r\n map: soilMap,\r\n aoMap: soilAOMap,\r\n displacementMap: soilDispMap,\r\n normalMap: soilNormalMap,\r\n roughnessMap: soilRoughnessMap,\r\n alphaTest: 0.1,\r\n depthTest: true,\r\n }),\r\n pipe: new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.pipe,\r\n side: THREE.DoubleSide,\r\n metalness: 1,\r\n roughness: 0.3,\r\n map: metalMap,\r\n aoMap: metalAOMap,\r\n displacementMap: metalDispMap,\r\n normalMap: metalNormalMap,\r\n roughnessMap: metalRoughnessMap,\r\n metalnessMap: metalMetalnessMap,\r\n }),\r\n nipple: new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.nipple,\r\n side: THREE.DoubleSide,\r\n metalness: 1,\r\n roughness: 0.3,\r\n }),\r\n maximumWorkingDepth: new THREE.MeshBasicMaterial({\r\n color:\r\n theme.altus.components.ContextualizedWell.trajectory\r\n .maximumWorkingDepth,\r\n side: THREE.DoubleSide,\r\n }),\r\n dhsv: new THREE.MeshBasicMaterial({\r\n color: theme.altus.components.ContextualizedWell.trajectory.dhsv,\r\n side: THREE.DoubleSide,\r\n }),\r\n });\r\n }, [theme]);\r\n\r\n useEffect(() => {\r\n if (!wellbore.size || !wellboreDetail.size || !trajectory.size) return;\r\n setMaxTVD(\r\n convertMetric(\r\n wellbore.getIn(['tvd', 'roundedValue']),\r\n wellbore.getIn(['tvd', 'unit']),\r\n ),\r\n );\r\n setWaterDepth(\r\n convertMetric(\r\n wellbore.getIn(['waterDepth', 'roundedValue']),\r\n wellbore.getIn(['waterDepth', 'unit']),\r\n ),\r\n );\r\n setDhsvDepth(wellboreDetail.get('downHoleSafetyValveDepth'));\r\n setMaximumWorkingDepth(wellboreDetail.get('maximumWorkingDepth'));\r\n setMaxNE(\r\n convertMetric(\r\n trajectory.getIn(['maximumNorthEast', 'roundedValue']),\r\n trajectory.getIn(['maximumNorthEast', 'unit']),\r\n ),\r\n );\r\n }, [wellbore, wellboreDetail, trajectory]);\r\n\r\n useEffect(() => {\r\n if (!trajectory.size || !wellboreSections?.size || !maxTVD || !materials)\r\n return;\r\n const trajectoryPoints = trajectory.get('trajectoryPoints');\r\n if (trajectoryRef.current.length < trajectoryPoints.size - 1) {\r\n trajectoryPoints.forEach((previousPoint, index) => {\r\n const currentPoint = trajectoryPoints.get(index + 1);\r\n\r\n // Bottom reached\r\n if (!currentPoint) return false;\r\n\r\n const startVectorGround = new THREE.Vector3(\r\n convertMetric(\r\n previousPoint.getIn(['eastWest', 'value']),\r\n previousPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['northSouth', 'value']),\r\n previousPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n const endVectorGround = new THREE.Vector3(\r\n convertMetric(\r\n currentPoint.getIn(['eastWest', 'value']),\r\n currentPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['northSouth', 'value']),\r\n currentPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n if (\r\n waterDepth &&\r\n (waterDepth >=\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ) ||\r\n between(\r\n waterDepth,\r\n convertMetric(\r\n previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n ))\r\n ) {\r\n groundLayerRef.current.push({\r\n key: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n value: {\r\n startVector: startVectorGround,\r\n endVector: endVectorGround,\r\n index,\r\n thetaStart: 0,\r\n radius: 60,\r\n name: `ground-${index}`,\r\n material: materials.water,\r\n measuredDepthStart: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n measuredDepthEnd: convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n },\r\n });\r\n } else {\r\n groundLayerRef.current.push({\r\n key: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n value: {\r\n startVector: startVectorGround,\r\n endVector: endVectorGround,\r\n index,\r\n thetaStart: 0,\r\n radius: 60,\r\n name: `ground-${index}`,\r\n material: materials.soil,\r\n measuredDepthStart: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n measuredDepthEnd: convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n },\r\n });\r\n }\r\n\r\n wellboreSections.forEach((value) => {\r\n const startVector = new THREE.Vector3();\r\n const endVector = new THREE.Vector3();\r\n if (\r\n between(\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n value.getIn(['top', 'value']),\r\n value.getIn(['top', 'unit']),\r\n ),\r\n convertMetric(\r\n value.getIn(['bottom', 'value']),\r\n value.getIn(['bottom', 'unit']),\r\n ),\r\n )\r\n ) {\r\n startVector.set(\r\n convertMetric(\r\n previousPoint.getIn(['eastWest', 'value']),\r\n previousPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['northSouth', 'value']),\r\n previousPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n endVector.set(\r\n convertMetric(\r\n currentPoint.getIn(['eastWest', 'value']),\r\n currentPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['northSouth', 'value']),\r\n currentPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n if (value.get('type') !== WellboreSectionType.OPEN_HOLE) {\r\n trajectoryRef.current.push({\r\n key: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n value: {\r\n startVector,\r\n endVector,\r\n index,\r\n thetaStart: 0,\r\n radius:\r\n convertMetric(\r\n value.getIn(['innerDiameter', 'value']),\r\n value.getIn(['innerDiameter', 'unit']),\r\n ) * 100,\r\n name: `trajectory-${index}`,\r\n material: materials.pipe,\r\n measuredDepthStart: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n measuredDepthEnd: convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n },\r\n });\r\n }\r\n\r\n const depthOfInterest = depthsOfInterest.find(\r\n ({ depth, unit }) =>\r\n depth &&\r\n convertMetric(depth, unit) >=\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ) &&\r\n convertMetric(depth, unit) <=\r\n convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n );\r\n if (depthOfInterest) {\r\n depthMarkerRef.current.push({\r\n key: convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n value: {\r\n startVector,\r\n endVector,\r\n index,\r\n thetaStart: 0,\r\n length: 10,\r\n radius:\r\n convertMetric(\r\n value.getIn(['innerDiameter', 'value']),\r\n value.getIn(['innerDiameter', 'unit']),\r\n ) *\r\n 100 +\r\n 30,\r\n name: `depthMarker-${index}`,\r\n material: depthOfInterest.material,\r\n },\r\n });\r\n }\r\n }\r\n for (const nippleValue of value\r\n .get('wellboreSectionNipples')\r\n .values()) {\r\n if (\r\n nippleValue.get('isNipple') &&\r\n between(\r\n convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['measuredDepth', 'value']),\r\n previousPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['measuredDepth', 'value']),\r\n currentPoint.getIn(['measuredDepth', 'unit']),\r\n ),\r\n )\r\n ) {\r\n startVector.set(\r\n convertMetric(\r\n previousPoint.getIn(['eastWest', 'value']),\r\n previousPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n previousPoint.getIn(['verticalDepth', 'value']),\r\n previousPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n previousPoint.getIn(['northSouth', 'value']),\r\n previousPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n\r\n endVector.set(\r\n convertMetric(\r\n currentPoint.getIn(['eastWest', 'value']),\r\n currentPoint.getIn(['eastWest', 'unit']),\r\n ),\r\n maxTVD -\r\n convertMetric(\r\n currentPoint.getIn(['verticalDepth', 'value']),\r\n currentPoint.getIn(['verticalDepth', 'unit']),\r\n ),\r\n convertMetric(\r\n currentPoint.getIn(['northSouth', 'value']),\r\n currentPoint.getIn(['northSouth', 'unit']),\r\n ),\r\n );\r\n const index = nippleRef.current.findIndex(\r\n (nip) =>\r\n nip.key ===\r\n convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n );\r\n\r\n if (index === -1) {\r\n nippleRef.current.push({\r\n key: convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n value: {\r\n startVector,\r\n endVector,\r\n length: convertMetric(\r\n nippleValue.get('length').roundedValue,\r\n nippleValue.get('length').unit,\r\n ),\r\n radius:\r\n convertMetric(\r\n nippleValue.get('innerDiameter').roundedValue,\r\n nippleValue.get('innerDiameter').unit,\r\n ) * 100,\r\n outerRadius:\r\n convertMetric(\r\n value.get('innerDiameter').roundedValue,\r\n value.get('innerDiameter').unit,\r\n ) * 100,\r\n thetaStart: 0,\r\n name: `nipple-${convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n )}`,\r\n material: materials.nipple,\r\n spriteText: nippleValue.get('type'),\r\n top: convertMetric(\r\n nippleValue.getIn(['top', 'value']),\r\n nippleValue.getIn(['top', 'unit']),\r\n ),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n });\r\n });\r\n setRefFlag(true);\r\n }\r\n }, [\r\n trajectory,\r\n wellboreSections,\r\n maxTVD,\r\n waterDepth,\r\n materials,\r\n depthsOfInterest,\r\n ]);\r\n\r\n if (!trajectory.get('trajectoryPoints')?.size) return children;\r\n\r\n if (!wellbore?.size || !wellboreSections?.size || !wellboreDetail?.size) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {refFlag && maxTVD && maxNE && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nWellboreContextTrajectoryContainer.propTypes = {\r\n children: PropTypes.node,\r\n fieldId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n wellboreId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n};\r\n\r\nexport default compose(memo)(WellboreContextTrajectoryContainer);\r\n","import { compose } from 'redux';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport React, { memo, useEffect } from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\n\r\nimport ThreeJsManagerProvider from 'app/threeJs/ThreeJsManagerProvider';\r\nimport useWellboreTrajectory from 'features/wells/hooks/useWellboreTrajectory';\r\nimport { requestWellboreSectionsForWellbore } from 'features/wells/sections/wellboreSection.actions';\r\nimport { createWellboreSectionsForWellboreSelector } from 'features/wells/sections/wellboreSection.selectors';\r\nimport WellboreContextTrajectoryContainer from 'app/components/WellboreContextualization/WellboreContextTrajectoryContainer';\r\n\r\nconst WellboreContextTrajectory3DView = ({ fieldId, wellboreId }) => {\r\n const dispatch = useDispatch();\r\n\r\n const trajectory = useWellboreTrajectory(fieldId, wellboreId);\r\n\r\n useEffect(() => {\r\n dispatch(requestWellboreSectionsForWellbore(fieldId, wellboreId));\r\n }, [fieldId, wellboreId, dispatch]);\r\n\r\n const { wellbore, wellboreDetail = EMPTY_MAP } = useWellbore(wellboreId);\r\n\r\n const wellboreSections = useSelector(\r\n createWellboreSectionsForWellboreSelector(wellboreId),\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Well Trajectory Not Available\r\n \r\n \r\n \r\n \r\n Click the plus button below or drag and drop a file into this\r\n window to upload a trajectory.\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(memo)(WellboreContextTrajectory3DView);\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport DownloadIcon from '@material-ui/icons/GetApp';\r\nimport UploadIcon from '@material-ui/icons/CloudUpload';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport { useCallback, useState, useMemo, memo } from 'react';\r\n\r\nimport { SpeedDial, SpeedDialIcon, SpeedDialAction } from '@material-ui/lab';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getTrajectoryPreview,\r\n uploadWellboreTrajectory,\r\n getTrajectoryFromWellcomApi,\r\n downloadTrajectoryTemplateTxt,\r\n downloadTrajectoryTemplateCsv,\r\n downloadTrajectorySurveyTxt,\r\n downloadTrajectorySurveyCsv,\r\n} from 'features/wells/overview/wellOverview.actions';\r\n\r\nimport { TrajectoryViewType } from 'app/components/WellboreTrajectory/WellboreTrajectoryViewToggle';\r\n\r\nimport { EMPTY_MAP, SystemPermission } from 'app/app.constants';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport WellIntegrityGraphs from './components/WellIntegrityGraphs';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport { getWellboreTrajectoryFromState } from 'features/wells/wellbore.selectors';\r\nimport { WELLS_ACTIONS as WELLBORE_ACTIONS } from 'features/wells/wells.constants';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport { WELL_OVERVIEW_ACTIONS } from 'features/wells/overview/wellOverview.constants';\r\nimport WellDashboardProjectHistory from 'features/wells/projects/WellDashboardProjectHistory';\r\nimport WellboreTrajectoryDetails from 'app/components/WellboreTrajectory/WellboreTrajectoryDetails';\r\nimport WellboreTrajectoryPreviewModalContainer from 'features/wells/overview/components/WellboreTrajectoryPreviewModalContainer';\r\nimport WellboreContextTrajectory3DView from 'app/components/WellboreContextualization/WellboreContextTrajectory3DView';\r\n\r\nconst WellOverviewContainer = ({\r\n classes,\r\n fieldId,\r\n dataState,\r\n breadcrumb,\r\n wellboreId,\r\n trajectory = EMPTY_MAP,\r\n dispatchUploadWellboreTrajectory,\r\n dispatchGetTrajectoryFromWellcomApi,\r\n dispatchGetWellboreTrajectoryPreview,\r\n dispatchDownloadTrajectoryTemplateTxt,\r\n dispatchDownloadTrajectorySurveyCsv,\r\n dispatchDownloadTrajectorySurveyTxt,\r\n dispatchDownloadTrajectoryTemplateCsv,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n const { wellbore } = useWellbore(wellboreId);\r\n\r\n const [trajectoryFileToUpload, setTrajectoryFileToUpload] = useState();\r\n\r\n const onDrop = useCallback(\r\n (files) => setTrajectoryFileToUpload(files[0]),\r\n [],\r\n );\r\n\r\n const {\r\n isDragActive,\r\n getRootProps,\r\n getInputProps,\r\n open: openTrajectoryFilePicker,\r\n } = useDropzone({\r\n onDrop,\r\n noClick: true,\r\n multiple: false,\r\n noKeyboard: true,\r\n });\r\n\r\n const [isActionsPopupOpen, setActionsPopupOpen] = useState(false);\r\n\r\n const [viewType] = useState(TrajectoryViewType.THREE_D);\r\n\r\n const actions = useMemo(\r\n () =>\r\n [\r\n {\r\n icon: ,\r\n name: (\r\n \r\n Upload trajectory\r\n \r\n ),\r\n onClick: openTrajectoryFilePicker,\r\n },\r\n {\r\n icon: ,\r\n name: (\r\n \r\n Template (.txt)\r\n \r\n ),\r\n onClick: dispatchDownloadTrajectoryTemplateTxt,\r\n },\r\n {\r\n icon: ,\r\n name: (\r\n \r\n Template (.csv)\r\n \r\n ),\r\n onClick: dispatchDownloadTrajectoryTemplateCsv,\r\n },\r\n\r\n {\r\n icon: ,\r\n name: (\r\n \r\n Survey (.txt)\r\n \r\n ),\r\n hidden: !trajectory.get('trajectoryPoints')?.size,\r\n onClick: () => dispatchDownloadTrajectorySurveyTxt(wellboreId),\r\n },\r\n {\r\n icon: ,\r\n name: (\r\n \r\n Survey (.csv)\r\n \r\n ),\r\n hidden: !trajectory.get('trajectoryPoints')?.size,\r\n onClick: () => dispatchDownloadTrajectorySurveyCsv(wellboreId),\r\n },\r\n {\r\n icon: ,\r\n name: (\r\n \r\n Wellcom API\r\n \r\n ),\r\n hidden: !(wellbore && wellbore.get('wellcomId') !== null),\r\n onClick: () => dispatchGetTrajectoryFromWellcomApi(wellboreId),\r\n },\r\n ].filter(({ hidden }) => !hidden),\r\n [\r\n wellbore,\r\n wellboreId,\r\n trajectory,\r\n openTrajectoryFilePicker,\r\n dispatchDownloadTrajectorySurveyTxt,\r\n dispatchDownloadTrajectorySurveyCsv,\r\n dispatchGetTrajectoryFromWellcomApi,\r\n dispatchDownloadTrajectoryTemplateTxt,\r\n dispatchDownloadTrajectoryTemplateCsv,\r\n ],\r\n );\r\n\r\n // dynamic width for displaying 3d trajectory\r\n const { userPermissions } = useSystemPermissions();\r\n const dynamicStyles = {\r\n maxWidth: userPermissions.includes(SystemPermission.WELL_ACCESS_ONLY)\r\n ? '50%'\r\n : '75%',\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n } openIcon={} />}\r\n open={isActionsPopupOpen}\r\n className={classes.actionsButton}\r\n ariaLabel=\"Upload survey and download templates\"\r\n onClose={(_, reason) =>\r\n reason !== 'mouseLeave' && setActionsPopupOpen(false)\r\n }\r\n onOpen={(_, reason) => reason !== 'focus' && setActionsPopupOpen(true)}\r\n >\r\n {actions.map(({ icon, name, onClick }, index) => (\r\n {\r\n setActionsPopupOpen(false);\r\n onClick();\r\n }}\r\n />\r\n ))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'column',\r\n paddingTop: theme.spacing(2.25),\r\n overflow: 'hidden',\r\n },\r\n actionsButton: {\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n createProjectButton: {\r\n position: 'absolute',\r\n left: theme.spacing(3),\r\n },\r\n wellboreDetails: {\r\n width: '100%',\r\n maxHeight: '100%',\r\n overflow: 'auto',\r\n right: theme.spacing(2),\r\n bottom: theme.spacing(2),\r\n },\r\n graphs: {\r\n width: '100%',\r\n maxHeight: '100%',\r\n overflow: 'auto',\r\n left: theme.spacing(2),\r\n bottom: theme.spacing(2),\r\n },\r\n dragOver: {\r\n opacity: '0.3',\r\n border: '5px gray dashed',\r\n },\r\n stickyHeader: {\r\n top: -theme.spacing(2.25),\r\n },\r\n stickySection: {\r\n top: 0,\r\n position: 'sticky',\r\n background: theme.palette.primary.darkgrey,\r\n },\r\n topContainer: {\r\n padding: '5px',\r\n maxHeight: '60%',\r\n position: 'relative',\r\n flexDirection: 'row',\r\n width: '100%',\r\n },\r\n trajectoryArea3d: {\r\n overflow: 'hidden',\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n position: 'relative',\r\n // maxWidth moved to state to be dynamic\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { wellboreId }) => {\r\n const trajectorySelector = getWellboreTrajectoryFromState(wellboreId);\r\n\r\n return {\r\n trajectory: trajectorySelector(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n WELLBORE_ACTIONS.REQUEST_WELLBORE_TRAJECTORY,\r\n WELL_OVERVIEW_ACTIONS.UPLOAD_WELLBORE_TRAJECTORY,\r\n ),\r\n };\r\n },\r\n {\r\n dispatchUploadWellboreTrajectory: uploadWellboreTrajectory,\r\n dispatchGetWellboreTrajectoryPreview: getTrajectoryPreview,\r\n dispatchDownloadTrajectoryTemplateCsv: downloadTrajectoryTemplateCsv,\r\n dispatchDownloadTrajectoryTemplateTxt: downloadTrajectoryTemplateTxt,\r\n dispatchGetTrajectoryFromWellcomApi: getTrajectoryFromWellcomApi,\r\n dispatchDownloadTrajectorySurveyCsv: downloadTrajectorySurveyCsv,\r\n dispatchDownloadTrajectorySurveyTxt: downloadTrajectorySurveyTxt,\r\n },\r\n ),\r\n memo,\r\n withStyles(styles),\r\n)(WellOverviewContainer);\r\n","import { NOTIFICATION_VARIANTS, addNotification } from 'altus-redux-middlewares';\r\n\r\nimport {\r\n getWellbore,\r\n receiveWellboreTrajectory,\r\n} from 'features/wells/wellbore.actions';\r\n\r\nimport mappers from 'mappers';\r\nimport wellboreService from 'services/wellbore.service';\r\nimport { WELL_OVERVIEW_ACTIONS } from 'features/wells/overview/wellOverview.constants';\r\n\r\nexport const uploadWellboreTrajectory =\r\n (fieldId, wellboreId, file, fileUnitSystem) => (dispatch) => {\r\n const payload = wellboreService\r\n .uploadWellboreTrajectory(fieldId, wellboreId, file, {\r\n unitSystem: fileUnitSystem,\r\n })\r\n .then((trajectory) => {\r\n dispatch(receiveWellboreTrajectory(wellboreId, trajectory));\r\n return trajectory;\r\n })\r\n .then(() => dispatch(getWellbore(fieldId, wellboreId)));\r\n\r\n dispatch({\r\n payload,\r\n type: WELL_OVERVIEW_ACTIONS.UPLOAD_WELLBORE_TRAJECTORY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'The trajectory was successfully uploaded',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const getTrajectoryPreview =\r\n (fieldId, wellboreId, trajectoryFile) => (dispatch) => {\r\n const payload = wellboreService\r\n .getWellboreTrajectoryPreview(fieldId, wellboreId, trajectoryFile)\r\n .then(mappers.Trajectory.from);\r\n\r\n dispatch({\r\n payload,\r\n type: WELL_OVERVIEW_ACTIONS.GET_WELLBORE_TRAJECTORY_PREVIEW,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const getTrajectoryFromWellcomApi = (wellboreId) => (dispatch) => {\r\n dispatch({\r\n type: WELL_OVERVIEW_ACTIONS.GET_WELLCOM_TRAJECTORY_SURVEY,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Getting trajectory from Wellcom API...',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to get trajectory details.',\r\n },\r\n payload: () =>\r\n wellboreService\r\n .getWellcomTrajectorySurvey(wellboreId)\r\n .then(() => { })\r\n .catch((error) => {\r\n if (error.status === 404) {\r\n return dispatch(\r\n addNotification({\r\n message: 'No trajectory details are available at this time.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n }\r\n dispatch(\r\n addNotification({\r\n message: 'Error has occurred, please try again.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n throw error;\r\n }),\r\n });\r\n};\r\n\r\nexport const downloadTrajectoryTemplateTxt = () => (dispatch) => {\r\n const payload = wellboreService.downloadTrajectoryTemplateTxt();\r\n\r\n dispatch({\r\n payload,\r\n type: WELL_OVERVIEW_ACTIONS.DOWNLOAD_TRAJECTORY_TEAMPLTE_TXT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Downloading .txt template...',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to download trajectory template.',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const downloadTrajectoryTemplateCsv = () => (dispatch) => {\r\n const payload = wellboreService.downloadTrajectoryTemplateCsv();\r\n\r\n dispatch({\r\n payload,\r\n type: WELL_OVERVIEW_ACTIONS.DOWNLOAD_TRAJECTORY_TEAMPLTE_CSV,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Downloading .csv template...',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to download trajectory template.',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const downloadTrajectorySurveyTxt = (wellboreId) => (dispatch) => {\r\n const payload = wellboreService.downloadTrajectorySurveyTxt(wellboreId);\r\n\r\n dispatch({\r\n payload,\r\n type: WELL_OVERVIEW_ACTIONS.DOWNLOAD_TRAJECTORY_SURVEY_TXT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Downloading .txt survey...',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to download trajectory survey.',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const downloadTrajectorySurveyCsv = (wellboreId) => (dispatch) => {\r\n const payload = wellboreService.downloadTrajectorySurveyCsv(wellboreId);\r\n\r\n dispatch({\r\n payload,\r\n type: WELL_OVERVIEW_ACTIONS.DOWNLOAD_TRAJECTORY_SURVEY_CSV,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Downloading .csv survey...',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to download trajectory survey.',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n","import Agent from 'infrastructure/agent';\r\nimport { saveFile } from 'utils/app.util';\r\n\r\nexport const getAllWellboreFiles = (wellboreId, fieldId) =>\r\n Agent.get(`/field/${fieldId}/wellbore/${wellboreId}/files`);\r\n\r\nexport const deleteWellboreFile = (wellboreId, wellboreFileId, fieldId) =>\r\n Agent.delete(\r\n `/field/${fieldId}/wellbore/${wellboreId}/files/${wellboreFileId}`,\r\n );\r\n\r\nexport const downloadWellboreFile = (wellboreId, wellboreFileId, fieldId) => {\r\n return Agent.file\r\n .get(\r\n `/field/${fieldId}/wellbore/${wellboreId}/files/${wellboreFileId}/download`,\r\n )\r\n .then(([file, filename]) => saveFile(file, filename));\r\n};\r\n\r\nexport const uploadWellboreFile = (wellboreId, wellboreFile, meta, fieldId) =>\r\n Agent.file.post(\r\n `/field/${fieldId}/wellbore/${wellboreId}/files`,\r\n wellboreFile,\r\n meta,\r\n );\r\n\r\nexport const updateWellboreFile = (\r\n wellboreId,\r\n wellboreFileId,\r\n wellboreFile,\r\n fieldId,\r\n) =>\r\n Agent.put(\r\n `/field/${fieldId}/wellbore/${wellboreId}/files/${wellboreFileId}`,\r\n wellboreFile,\r\n );\r\n\r\nconst wellboreFileService = {\r\n downloadWellboreFile,\r\n uploadWellboreFile,\r\n deleteWellboreFile,\r\n getAllWellboreFiles,\r\n updateWellboreFile,\r\n};\r\n\r\nexport default wellboreFileService;\r\n","import wellboreFileService from 'services/wellboreFile.service';\r\nimport { NOTIFICATION_VARIANTS, MODAL } from 'app/app.constants';\r\nimport { getAllFileCategories, toggleModal } from 'app/app.actions';\r\nimport { WELLBORE_FILE_ACTIONS } from 'features/wells/wellboreFiles.constants';\r\n\r\nexport const onLoad = (wellboreId, fieldId) => (dispatch) => {\r\n dispatch({\r\n type: WELLBORE_FILE_ACTIONS.WELLBORE_FILES_PAGE_LOADED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllFileCategories()),\r\n wellboreFileService\r\n .getAllWellboreFiles(wellboreId, fieldId)\r\n .then((wellboreFiles) =>\r\n dispatch(receiveWellboreFiles(wellboreFiles)),\r\n ),\r\n ]),\r\n });\r\n};\r\n\r\nexport const deleteFile =\r\n (wellboreId, wellboreFileId, fieldId) => (dispatch) => {\r\n dispatch({\r\n wellboreFileId,\r\n type: WELLBORE_FILE_ACTIONS.DELETE_WELLBORE_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The file was successfully deleted',\r\n },\r\n confirmationDialog: {\r\n title: 'Delete document',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this document?',\r\n },\r\n payload: () =>\r\n wellboreFileService.deleteWellboreFile(\r\n wellboreId,\r\n wellboreFileId,\r\n fieldId,\r\n ),\r\n });\r\n };\r\n\r\nexport const downloadFile =\r\n (wellboreId, wellboreFileId, wellboreFile, fieldId) => (dispatch) => {\r\n const payload = wellboreFileService.downloadWellboreFile(\r\n wellboreId,\r\n wellboreFileId,\r\n fieldId,\r\n );\r\n\r\n dispatch({\r\n wellboreFileId,\r\n type: WELLBORE_FILE_ACTIONS.DOWNLOAD_WELLBORE_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: `Downloading ${wellboreFile.get(\r\n 'name',\r\n )}...`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\n// TODO: Add error handling, for example if only 1 file upload fails\r\nexport const uploadFiles =\r\n (wellboreId, fieldId) => (dispatch) => (uploadDocumentFormValues) => {\r\n const { files: wellboreFiles } = uploadDocumentFormValues.toJS();\r\n\r\n // primer\r\n const payload = Promise.all(\r\n wellboreFiles.map(({ file, meta }) =>\r\n wellboreFileService\r\n .uploadWellboreFile(wellboreId, file, meta, fieldId)\r\n .then((wellboreFile) => dispatch(receiveWellboreFile(wellboreFile))),\r\n ),\r\n ).then((response) => {\r\n dispatch(toggleModal({ modalId: MODAL.UPLOAD_FILE }));\r\n return response;\r\n });\r\n\r\n dispatch({\r\n type: WELLBORE_FILE_ACTIONS.UPLOAD_WELLBORE_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `The ${\r\n wellboreFiles.length > 1 ? 'wellboreFiles' : 'wellboreFile'\r\n } ${wellboreFiles.length > 1 ? 'were' : 'was'} successfully uploaded`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const uploadFileModalOnUnload = () => (dispatch) =>\r\n dispatch({ type: WELLBORE_FILE_ACTIONS.UPLOAD_FILE_MODAL_UNLOADED });\r\n\r\nexport const updateFile =\r\n (wellboreId, wellboreFileId, wellborefile, fieldId) => (dispatch) => {\r\n const payload = wellboreFileService\r\n .updateWellboreFile(wellboreId, wellboreFileId, wellborefile, fieldId)\r\n .then((wellborefile) => receiveWellboreFile(wellborefile));\r\n\r\n dispatch({\r\n payload,\r\n wellboreFileId,\r\n type: WELLBORE_FILE_ACTIONS.UPDATE_WELLBORE_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'File was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const receiveWellboreFiles = (wellboreFiles) => ({\r\n payload: wellboreFiles,\r\n type: WELLBORE_FILE_ACTIONS.RECEIVE_WELLBORE_FILES,\r\n});\r\n\r\nexport const receiveWellboreFile = (wellboreFiles) => ({\r\n payload: wellboreFiles,\r\n type: WELLBORE_FILE_ACTIONS.RECEIVE_WELLBORE_FILE,\r\n});\r\n","import Agent from 'infrastructure/agent';\r\nimport { saveFile } from 'utils/app.util';\r\n\r\nexport const getAllDocuments = (projectId) =>\r\n Agent.get(`/project/${projectId}/files`);\r\n\r\nexport const deleteFile = (projectId, fileId) =>\r\n Agent.delete(`/project/${projectId}/files/${fileId}`);\r\n\r\nexport const downloadFile = (projectId, fileId) => {\r\n return Agent.file\r\n .get(`/project/${projectId}/files/${fileId}/download`)\r\n .then(([file, filename]) => saveFile(file, filename));\r\n};\r\n\r\nexport const uploadFile = (projectId, file, meta) =>\r\n Agent.file.post(`/project/${projectId}/files`, file, meta);\r\n\r\nexport const updateFile = (projectId, fileId, file) =>\r\n Agent.put(`/project/${projectId}/files/${fileId}`, file);\r\n\r\nexport const getAllChecklistsAndProcedures = (projectId) =>\r\n Agent.get(`/project/${projectId}/files/proceduresandchecklists/get`);\r\n\r\nconst projectFileService = {\r\n downloadFile,\r\n uploadFile,\r\n deleteFile,\r\n getAllDocuments,\r\n updateFile,\r\n getAllChecklistsAndProcedures,\r\n};\r\n\r\nexport default projectFileService;\r\n","import projectFileService from 'services/projectFile.service';\r\nimport { NOTIFICATION_VARIANTS, MODAL } from 'app/app.constants';\r\nimport {\r\n getAllDepartments,\r\n getAllFileCategories,\r\n toggleModal,\r\n} from 'app/app.actions';\r\nimport { DOCUMENTS_ACTIONS } from 'features/projects/documents/documents.constants';\r\n\r\nexport const onLoad = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: DOCUMENTS_ACTIONS.PROJECT_DOCUMENTS_PAGE_LOADED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllFileCategories()),\r\n projectFileService\r\n .getAllDocuments(projectId)\r\n .then((files) => dispatch(receiveProjectFiles(files))),\r\n ]),\r\n });\r\n\r\nexport const onLoadChecklistsAndProcedures =\r\n (projectId) => async (dispatch) => {\r\n try {\r\n await Promise.all([\r\n dispatch(getAllDepartments()),\r\n dispatch({\r\n type: DOCUMENTS_ACTIONS.GET_ALL_CHECKLISTS_AND_PROCEDURES,\r\n payload: () =>\r\n projectFileService\r\n .getAllChecklistsAndProcedures(projectId)\r\n .then((files) => dispatch(receiveChecklistsAndProcedures(files))),\r\n }),\r\n ]);\r\n } catch (error) {\r\n console.error(\r\n 'Error loading checklists, procedures, and departments',\r\n error,\r\n );\r\n }\r\n };\r\n\r\nexport const receiveChecklistsAndProcedures = (projectFiles) => ({\r\n payload: projectFiles,\r\n type: DOCUMENTS_ACTIONS.RECEIVE_CHECKLISTS_AND_PROCEDURES,\r\n});\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: DOCUMENTS_ACTIONS.PROJECT_DOCUMENTS_PAGE_UNLOADED });\r\n\r\nexport const deleteFile = (projectId, fileId) => (dispatch) => {\r\n dispatch({\r\n fileId,\r\n type: DOCUMENTS_ACTIONS.DELETE_PROJECT_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The file was successfully deleted',\r\n },\r\n confirmationDialog: {\r\n title: 'Delete document',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this document?',\r\n },\r\n payload: () => projectFileService.deleteFile(projectId, fileId),\r\n });\r\n};\r\n\r\nexport const downloadFile = (projectId, fileId, file) => (dispatch) => {\r\n const payload = projectFileService.downloadFile(projectId, fileId);\r\n\r\n dispatch({\r\n fileId,\r\n type: DOCUMENTS_ACTIONS.DOWNLOAD_PROJECT_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: `Downloading ${file.get('name')}...`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\n// TODO: Add error handling, for example if only 1 file upload fails\r\nexport const uploadFiles =\r\n (projectId) => (dispatch) => (uploadDocumentFormValues) => {\r\n const { files } = uploadDocumentFormValues.toJS();\r\n\r\n const payload = Promise.all(\r\n files.map(({ file, meta }) =>\r\n projectFileService\r\n .uploadFile(projectId, file, meta)\r\n .then((projectFile) => dispatch(receiveProjectFile(projectFile))),\r\n ),\r\n ).then((response) => {\r\n dispatch(toggleModal({ modalId: MODAL.UPLOAD_FILE }));\r\n return response;\r\n });\r\n\r\n dispatch({\r\n type: DOCUMENTS_ACTIONS.UPLOAD_PROJECT_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `The ${\r\n files.length > 1 ? 'files' : 'file'\r\n } ${files.length > 1 ? 'were' : 'was'} successfully uploaded`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const uploadFileModalOnUnload = () => (dispatch) =>\r\n dispatch({ type: DOCUMENTS_ACTIONS.UPLOAD_FILE_MODAL_UNLOADED });\r\n\r\nexport const updateFile = (projectId, fileId, file) => (dispatch) => {\r\n const payload = projectFileService\r\n .updateFile(projectId, fileId, file)\r\n .then((response) => {\r\n dispatch(receiveProjectFile(response));\r\n return response;\r\n });\r\n\r\n dispatch({\r\n payload,\r\n fileId,\r\n type: DOCUMENTS_ACTIONS.UPDATE_PROJECT_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'File was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveProjectFiles = (projectFiles) => ({\r\n payload: projectFiles,\r\n type: DOCUMENTS_ACTIONS.RECEIVE_PROJECT_FILES,\r\n});\r\n\r\nexport const receiveProjectFile = (projectFile) => ({\r\n payload: projectFile,\r\n type: DOCUMENTS_ACTIONS.RECEIVE_PROJECT_FILE,\r\n});\r\n","export const ALTUS_ORGANIZATION_CODE = 'ALTUS';\r\n","import { useSelector } from 'react-redux';\r\nimport {\r\n getAllOrganizationsFromState,\r\n getCurrentUserFromState,\r\n} from 'app/app.selectors';\r\nimport { ALTUS_ORGANIZATION_CODE } from 'app/hooks/useIsInternalCategoryToDisplay/constants';\r\n\r\nconst hydrateUserOrganization = (userOrganizationId, organizations) =>\r\n Array.from(organizations.values()).find(\r\n (x) => x.get('id') === userOrganizationId,\r\n );\r\nconst isCategoryInternal = (category) => {\r\n // Because sometimes category name is map and sometimes property.\r\n const categoryName = category.name || category?.get('name');\r\n return categoryName === 'Internal';\r\n};\r\nconst isUserInAltusOrganization = (userOrganization) =>\r\n userOrganization?.get('code') === ALTUS_ORGANIZATION_CODE;\r\n\r\n/**\r\n * Higher order function. Return function that gives false if category is internal and user\r\n * is not of ALTUS organization. Otherwise, true.\r\n *\r\n * First expression will check if category is 'Internal'. If not function will evaluate to true and return\r\n * (since categories other than internal are visible for all users).\r\n * Second expression will evaluate to true if user organization is 'ALTUS'. Hence, if category is 'Internal'\r\n * return value will match to if user belongs to 'ALTUS' organization.\r\n *\r\n * @param {Object} userOrganization\r\n * @return {function} Function that takes category (as Map) and returns true if category to be displayed.\r\n */\r\nconst createCheckToShowCategoryFn = (userOrganization) => (category) => {\r\n return (\r\n !isCategoryInternal(category) || isUserInAltusOrganization(userOrganization)\r\n );\r\n};\r\n\r\nexport const useIsInternalCategoryToShow = () => {\r\n const user = useSelector(getCurrentUserFromState);\r\n const organizations = useSelector(getAllOrganizationsFromState);\r\n\r\n const userOrganization = hydrateUserOrganization(\r\n user.get('organizationId'),\r\n organizations,\r\n );\r\n\r\n return createCheckToShowCategoryFn(userOrganization);\r\n};\r\n","import { compose } from 'redux';\r\nimport formatFileSize from 'filesize';\r\nimport { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport { reduxForm, Field, formValueSelector } from 'redux-form/immutable';\r\n\r\nimport {\r\n Grid,\r\n Button,\r\n MenuItem,\r\n Typography,\r\n DialogActions,\r\n InputAdornment,\r\n DialogContentText,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n MODAL,\r\n EMPTY_STRING,\r\n UPLOAD_DOCUMENT_FORM,\r\n MAX_UPLOAD_FILE_SIZE,\r\n} from 'app/app.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { useIsInternalCategoryToShow } from 'app/hooks/useIsInternalCategoryToDisplay';\r\n\r\nconst UploadDocumentModal = ({\r\n valid,\r\n files = [],\r\n children,\r\n submitting,\r\n uploadFiles,\r\n handleSubmit,\r\n dialogContentText,\r\n rejectedFiles = [],\r\n availableFileCategories,\r\n enableFileCategories = true,\r\n}) => {\r\n const isShowCategory = useIsInternalCategoryToShow();\r\n\r\n return (\r\n 1 ? 'Upload documents' : 'Upload document'}\r\n Actions={({ toggleModal }) => (\r\n \r\n \r\n \r\n {`Upload (${files.length})`}\r\n \r\n \r\n )}\r\n >\r\n {dialogContentText}\r\n
\r\n
\r\n {rejectedFiles.map(({ file, errors }, index) => {\r\n const initialError = errors[0];\r\n\r\n const errorMessage =\r\n initialError?.code === 'file-too-large'\r\n ? `File is larger than ${formatFileSize(MAX_UPLOAD_FILE_SIZE)}`\r\n : EMPTY_STRING;\r\n\r\n return (\r\n \r\n \r\n {`${file.name} cannot be uploaded. ${errorMessage}`}\r\n \r\n \r\n );\r\n })}\r\n {files.map((_, index) => {\r\n return (\r\n \r\n \r\n (\r\n \r\n {input.value}\r\n \r\n )}\r\n />\r\n ),\r\n }}\r\n />\r\n \r\n {enableFileCategories && (\r\n \r\n \r\n {availableFileCategories\r\n .filter((cat) => isShowCategory(cat))\r\n .map((category) => (\r\n \r\n {category.name}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect((state) => {\r\n const selector = formValueSelector(UPLOAD_DOCUMENT_FORM.ID);\r\n\r\n return {\r\n files: selector(state, UPLOAD_DOCUMENT_FORM.FILES),\r\n };\r\n }),\r\n toJSComponent,\r\n reduxForm({\r\n form: UPLOAD_DOCUMENT_FORM.ID,\r\n }),\r\n)(UploadDocumentModal);\r\n","import { Field } from 'formik';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Collection } from 'immutable';\r\nimport SaveIcon from '@material-ui/icons/GetApp';\r\nimport { useMemo, memo, useCallback } from 'react';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport {\r\n IconButton,\r\n InputAdornment,\r\n MenuItem,\r\n Link,\r\n Typography,\r\n} from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport { required } from 'utils/validation.util';\r\nimport { EMPTY_MAP, Format } from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\n\r\nconst WellboreFilesTable = ({\r\n updateFile,\r\n deleteFile,\r\n downloadFile,\r\n noItemsMessage,\r\n documents = EMPTY_MAP,\r\n documentCategoriesById = EMPTY_MAP,\r\n downloadProjectFile,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 5,\r\n Header: 'Name',\r\n accessor: (document) => document.get('fullName', null),\r\n Cell: ({ row, value }) => {\r\n return !row.original.get('projectId') ? (\r\n \r\n {row.original.get('extension')}\r\n \r\n ),\r\n }}\r\n />\r\n ) : (\r\n {value}\r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Category',\r\n accessor: (document) => document.get('categoryName', null),\r\n Cell: ({ row, value }) => {\r\n return !row.original.get('projectId') ? (\r\n \r\n {documentCategoriesById.valueSeq().map((category) => (\r\n \r\n {category.get('name')}\r\n \r\n ))}\r\n \r\n ) : (\r\n {value}\r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Source',\r\n accessor: (document) => document.get('projectId', null),\r\n Cell: ({ row }) => {\r\n return row.original.get('projectId') ? (\r\n \r\n {`Project ${row.original.get('projectId')}`}\r\n \r\n ) : null;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Uploaded',\r\n accessor: (document) =>\r\n formatDate(document.get('created'), Format.time),\r\n },\r\n {\r\n id: 'actions',\r\n disableSortBy: true,\r\n Header: ,\r\n Footer: ,\r\n Cell: ({ row }) => (\r\n \r\n {!row.original.get('projectId') && (\r\n deleteFile(row.original.get('fileId'))}\r\n >\r\n \r\n \r\n )}\r\n {!row.original.get('projectId') ? (\r\n \r\n downloadFile(row.original.get('fileId'), row.original)\r\n }\r\n >\r\n \r\n \r\n ) : (\r\n \r\n downloadProjectFile(\r\n row.original.get('projectId'),\r\n row.original.get('fileId'),\r\n row.original,\r\n )\r\n }\r\n >\r\n \r\n \r\n )}\r\n \r\n ),\r\n },\r\n ],\r\n [deleteFile, downloadFile, documentCategoriesById, downloadProjectFile],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => ,\r\n [updateFile],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nWellboreFilesTable.propTypes = {\r\n documents: PropTypes.instanceOf(Collection),\r\n};\r\n\r\nexport default compose(memo)(WellboreFilesTable);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getWellboreFilesFromState = createSelector(\r\n (state) => state.getIn(['entity', 'wellboreFile']),\r\n (wellboreFiles) => wellboreFiles,\r\n);\r\n","import {\r\n Grid,\r\n Typography,\r\n Button,\r\n FormControlLabel,\r\n Checkbox,\r\n} from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { compose } from 'redux';\r\nimport { INTERNAL_CATEGORIES } from 'features/projects/documents/documents.constants';\r\n\r\nconst DocumentsCategoryFilter = ({\r\n documents,\r\n documentCategories,\r\n classes,\r\n isAltus,\r\n filter,\r\n clearFilters,\r\n setFilter,\r\n setFilterApplied,\r\n}) => {\r\n const toggleCategoryFilter = (category) => {\r\n setFilter((currentFilter) => {\r\n const updatedFilter = currentFilter.includes(category)\r\n ? currentFilter.remove(category)\r\n : currentFilter.add(category);\r\n\r\n if (updatedFilter.size === 0) {\r\n setFilterApplied(false);\r\n } else {\r\n setFilterApplied(true);\r\n }\r\n\r\n return updatedFilter;\r\n });\r\n };\r\n\r\n const checkIfCategoryIsInternal = (category) => {\r\n if (\r\n category.get('name') === INTERNAL_CATEGORIES.INTERNAL ||\r\n category.get('name') === INTERNAL_CATEGORIES.PROCEDURES ||\r\n category.get('name') === INTERNAL_CATEGORIES.CHECKLISTS\r\n ) {\r\n return null;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n Filter by Category\r\n \r\n \r\n \r\n {filter.size} selected\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {documentCategories\r\n .filter((category) => {\r\n if (!isAltus) {\r\n if (\r\n category.get('name') === INTERNAL_CATEGORIES.INTERNAL ||\r\n category.get('name') === INTERNAL_CATEGORIES.PROCEDURES ||\r\n category.get('name') === INTERNAL_CATEGORIES.CHECKLISTS\r\n ) {\r\n return null;\r\n }\r\n }\r\n return category;\r\n })\r\n .sortBy((category) => category.get('id'))\r\n .valueSeq()\r\n .map((category) => {\r\n const docPerCat = documents.filter(\r\n (action) =>\r\n action.get('category')?.toString() ===\r\n category.get('id').toString(),\r\n );\r\n\r\n const numOfFilesInCategory = Array.from(docPerCat.values()).length;\r\n\r\n return (\r\n \r\n \r\n \r\n {category.get('name')}\r\n \r\n }\r\n control={\r\n <>\r\n toggleCategoryFilter(category)}\r\n checked={filter.includes(category)}\r\n />\r\n \r\n }\r\n />{' '}\r\n \r\n\r\n \r\n {numOfFilesInCategory ? numOfFilesInCategory : 0}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n backgroundColor: theme.palette.table.row.main,\r\n height: '80px',\r\n alignItems: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n actions: {\r\n backgroundColor: theme.palette.table.row.main,\r\n paddingLeft: theme.spacing(2),\r\n paddingTop: theme.spacing(1),\r\n paddingBottom: theme.spacing(1),\r\n paddingRight: theme.spacing(2),\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n container: {\r\n gap: '2px',\r\n },\r\n buttons: {\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n gap: '4px',\r\n },\r\n category: {\r\n backgroundColor: theme.palette.table.row.main,\r\n paddingLeft: theme.spacing(2),\r\n paddingTop: theme.spacing(0.5),\r\n paddingBottom: theme.spacing(0.5),\r\n },\r\n categoryCount: {\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n },\r\n internalCategory: {\r\n color: theme.palette.primary.newLight,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(DocumentsCategoryFilter);\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { Grid } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useEffect, useCallback, useMemo, useState } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n onLoad,\r\n deleteFile,\r\n updateFile,\r\n uploadFiles,\r\n downloadFile,\r\n} from 'features/wells/wellboreFiles.actions';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getAvailableFileCategoriesFromState,\r\n getAllOrganizationsFromState,\r\n getCurrentUserFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { downloadFile as downloadProjectFile } from 'features/projects/documents/documents.actions';\r\n\r\nimport { setFile } from 'app/app.actions';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport { EMPTY_SET, MAX_UPLOAD_FILE_SIZE } from 'app/app.constants';\r\nimport UploadDocumentModal from 'app/components/UploadDocumentModal';\r\nimport WellboreFilesTable from 'features/wells/components/WellboreFilesTable';\r\nimport { WELLBORE_FILE_ACTIONS } from 'features/wells/wellboreFiles.constants';\r\nimport { getWellboreFilesFromState } from 'features/wells/wellboreFiles.selectors';\r\nimport { DOCUMENTS_ACTIONS } from 'features/projects/documents/documents.constants';\r\nimport DocumentsCategoryFilter from 'features/projects/documents/newDocumentsContainer/components/DocumentsCategoryFilter';\r\nimport { ALTUS_ORGANIZATION_CODE } from 'app/hooks/useIsInternalCategoryToDisplay/constants';\r\n\r\nconst WellboreFilesContainer = ({\r\n classes,\r\n dataState,\r\n wellboreId,\r\n fieldId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchDropFiles,\r\n dispatchDeleteFile,\r\n dispatchUpdateFile,\r\n dispatchUploadFiles,\r\n dispatchDownloadFile,\r\n dispatchDownloadProjectFile,\r\n}) => {\r\n useHeader({ subTitle: breadcrumb });\r\n\r\n const user = useSelector(getCurrentUserFromState);\r\n const availableOrganizations = useSelector(getAllOrganizationsFromState);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(wellboreId, fieldId);\r\n }, [wellboreId, dispatchOnLoad, fieldId]);\r\n\r\n const [filter, setFilter] = useState(EMPTY_SET);\r\n const [filterApplied, setFilterApplied] = useState(false);\r\n\r\n const documents = useSelector(getWellboreFilesFromState);\r\n const documentCategories = useSelector(getAvailableFileCategoriesFromState);\r\n\r\n const filteredDocuments = useMemo(() => {\r\n if (filter.isEmpty()) return documents;\r\n\r\n return documents.filter((document) => {\r\n const documentCategory = documentCategories.get(document.get('category'));\r\n\r\n return filter.includes(documentCategory);\r\n });\r\n }, [filter, documents, documentCategories]);\r\n\r\n useEffect(() => {\r\n // clear filter if deleting the last document to prevent a filter being active when no documents match it\r\n if (filteredDocuments.isEmpty()) {\r\n setFilter(EMPTY_SET);\r\n }\r\n }, [filteredDocuments]);\r\n\r\n const downloadFile = useCallback(\r\n (wellboreFileId, wellboreFile) =>\r\n dispatchDownloadFile(wellboreId, wellboreFileId, wellboreFile, fieldId),\r\n [wellboreId, dispatchDownloadFile, fieldId],\r\n );\r\n\r\n const downloadProjectFile = useCallback(\r\n (projectId, fileId, file) =>\r\n dispatchDownloadProjectFile(projectId, fileId, file),\r\n [dispatchDownloadProjectFile],\r\n );\r\n\r\n const deleteFile = useCallback(\r\n (wellboreFileId) => dispatchDeleteFile(wellboreId, wellboreFileId, fieldId),\r\n [wellboreId, dispatchDeleteFile, fieldId],\r\n );\r\n\r\n const updateFile = useCallback(\r\n (wellboreFile) =>\r\n dispatchUpdateFile(\r\n wellboreId,\r\n wellboreFile.fileId,\r\n wellboreFile,\r\n fieldId,\r\n ),\r\n [wellboreId, dispatchUpdateFile, fieldId],\r\n );\r\n\r\n const uploadFiles = useCallback(\r\n (wellboreFiles) => dispatchUploadFiles(wellboreId, fieldId)(wellboreFiles),\r\n [wellboreId, dispatchUploadFiles, fieldId],\r\n );\r\n\r\n const onDrop = useCallback(\r\n (wellboreFiles) => dispatchDropFiles(wellboreFiles),\r\n [dispatchDropFiles],\r\n );\r\n\r\n const clearFilters = () => {\r\n setFilter(EMPTY_SET);\r\n setFilterApplied(false);\r\n };\r\n\r\n const { isDragActive, getRootProps, getInputProps, open, fileRejections } =\r\n useDropzone({\r\n onDrop,\r\n noClick: true,\r\n noKeyboard: true,\r\n maxSize: MAX_UPLOAD_FILE_SIZE,\r\n });\r\n\r\n const checkIfUserOrgIsAltus = (user, organizations) => {\r\n const currentOrg = Array.from(organizations).find(\r\n (org) => org.get('id') === user.get('organizationId'),\r\n );\r\n\r\n if (currentOrg?.get('code') === ALTUS_ORGANIZATION_CODE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n WELLBORE_FILE_ACTIONS.DOWNLOAD_WELLBORE_FILE,\r\n WELLBORE_FILE_ACTIONS.UPLOAD_WELLBORE_FILE,\r\n WELLBORE_FILE_ACTIONS.UPDATE_WELLBORE_FILE,\r\n WELLBORE_FILE_ACTIONS.DELETE_WELLBORE_FILE,\r\n WELLBORE_FILE_ACTIONS.WELLBORE_FILES_PAGE_LOADED,\r\n DOCUMENTS_ACTIONS.DOWNLOAD_PROJECT_FILE,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchDropFiles: setFile,\r\n dispatchDeleteFile: deleteFile,\r\n dispatchUpdateFile: updateFile,\r\n dispatchUploadFiles: uploadFiles,\r\n dispatchDownloadFile: downloadFile,\r\n dispatchDownloadProjectFile: downloadProjectFile,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n dragOver: {\r\n opacity: '0.3',\r\n border: '5px gray dashed',\r\n },\r\n documentList: {\r\n height: '100%',\r\n },\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(WellboreFilesContainer);\r\n","import { compose } from 'redux';\r\nimport { lighten } from '@material-ui/core/styles';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst FormSectionHeader = ({ title, classes, renderActions }) => (\r\n \r\n \r\n {renderActions && {invokeIfFunction(renderActions)}}\r\n \r\n {title}\r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n top: 0,\r\n zIndex: 2,\r\n position: 'sticky',\r\n background: lighten(theme.palette.grey[800], 0.04),\r\n padding: `${theme.spacing(0.5)}px ${theme.spacing(2)}px`,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(FormSectionHeader);\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport FormSectionHeader from 'app/components/form/FormSectionHeader';\r\n\r\nconst FormSection = ({ title, classes, children, renderActions }) => (\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n content: {\r\n backgroundColor: theme.palette.grey[800],\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(FormSection);\r\n","import { Field } from 'formik';\r\nimport { compose } from 'redux';\r\nimport { Map } from 'immutable';\r\nimport PropTypes from 'prop-types';\r\nimport isNumber from 'lodash/isNumber';\r\nimport { memo } from 'react';\r\n\r\nimport { Box, Grid, Typography, CircularProgress } from '@material-ui/core';\r\n\r\nimport { hostileFluidToDisplayName } from 'features/projects/wellbore/details/projectWellboreDetails.mappers';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst HostileFluidsFields = ({\r\n disabled,\r\n isLoading,\r\n addedHostileFluids,\r\n availableHostileFluids = {},\r\n}) => {\r\n if (isLoading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (addedHostileFluids.isEmpty()) {\r\n return (\r\n \r\n No hostile fluids added\r\n \r\n );\r\n }\r\n\r\n return addedHostileFluids.entrySeq().map(([key, value]) => {\r\n const hostileFluidId = availableHostileFluids[key];\r\n\r\n const hostileFluidName = hostileFluidId\r\n ? hostileFluidToDisplayName(hostileFluidId)\r\n : key;\r\n\r\n const type = isNumber(value) ? 'number' : undefined;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n};\r\n\r\nHostileFluidsFields.propTypes = {\r\n isLoading: PropTypes.bool.isRequired,\r\n availableHostileFluids: PropTypes.object,\r\n addedHostileFluids: PropTypes.instanceOf(Map).isRequired,\r\n};\r\n\r\nexport default compose(memo)(HostileFluidsFields);\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport { useMemo } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport FormSection from 'app/components/form/FormSection';\r\nimport wellboreDetailsService from 'services/wellboreDetail.service';\r\nimport HostileFluidsFields from 'app/components/WellboreDetailsForm/HostileFluidsFields';\r\n\r\nconst HostileFluidsFormSection = ({ disabled, wellboreDetail }) => {\r\n const addedHostileFluids = useMemo(\r\n () =>\r\n wellboreDetail\r\n .get('hostileFluids', EMPTY_MAP)\r\n .filter((hostileFluid) => !isNil(hostileFluid)),\r\n [wellboreDetail],\r\n );\r\n\r\n const [availableHostileFluids, hostileFluidsDataState] = useRequest(\r\n wellboreDetailsService.getAvailableHostileFluids,\r\n );\r\n\r\n const isLoading = hostileFluidsDataState.isLoading();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose()(HostileFluidsFormSection);\r\n","import { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport FormSection from 'app/components/form/FormSection';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { WELLBORE_DETAIL_FORM as FORM } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\n\r\nconst WellPropertiesSection = ({ disabled }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default WellPropertiesSection;\r\n","import { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport {\r\n wellboreContentToString,\r\n wellborePurposeToString,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.mappers';\r\n\r\nimport FormSection from 'app/components/form/FormSection';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { WELLBORE_DETAIL_FORM as FORM } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\n\r\nconst WellInformationSection = ({ disabled }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default WellInformationSection;\r\n","import { TableRow } from 'altus-ui-components';\r\n\r\nconst FluidTableRow = ({ onRowClick, ...rest }) => {\r\n return ;\r\n};\r\n\r\nexport default FluidTableRow;\r\n","import {\r\n FluidType,\r\n GasType,\r\n MultiphaseType,\r\n RheologyModel,\r\n} from 'utils/fluids/constants.utils';\r\n\r\nexport const fluidTypeToString = (fluidType) =>\r\n ({\r\n [FluidType.GAS]: 'Gas',\r\n [FluidType.LIQUID]: 'Liquid',\r\n [FluidType.MULTIPHASE]: 'Multiphase',\r\n }[fluidType]);\r\nexport const rheologyModelToString = (rheologyModel) =>\r\n ({\r\n [RheologyModel.NEWTONIAN]: 'Newtonian',\r\n [RheologyModel.POWER_LAW]: 'Power law',\r\n [RheologyModel.BINGHAM_PLASTIC]: 'Bingham Plastic',\r\n [RheologyModel.HERSCHEL_BULKLEY]: 'Herschel–Bulkley',\r\n }[rheologyModel]);\r\nexport const multiphaseTypeToString = (multiphaseType) =>\r\n ({\r\n [MultiphaseType.BLACK_OIL]: 'Black Oil (Reservoir Only)',\r\n }[multiphaseType]);\r\nexport const gasTypeToString = (gasType) =>\r\n ({\r\n [GasType.AIR]: 'Air',\r\n [GasType.NITROGEN]: 'Nitrogen',\r\n [GasType.NATURAL_GAS]: 'Natural gas',\r\n }[gasType]);\r\n","import { useMemo } from 'react';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { Box, Grid, Button, IconButton } from '@material-ui/core';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\n\r\nimport { Table, TableRowActionsCell, TableRow } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\n\r\nimport { fluidTypeToString } from 'utils/fluids/mappers.utils';\r\n\r\nconst FluidsTable = ({\r\n disabled,\r\n isCreateMode,\r\n toggleCreateMode,\r\n deleteFluid,\r\n fluids = EMPTY_MAP,\r\n defaultFluid,\r\n TableRowComponent = TableRow,\r\n}) => {\r\n const lengthUnit = defaultFluid.getIn(['endDepth', 'unit']);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 4,\r\n id: 'endDepth',\r\n accessor: (fluid) => {\r\n return fluid.getIn(['endDepth', 'roundedValue']);\r\n },\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (fluid) => fluid.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Type',\r\n accessor: (fluid) => fluid.get('fluidType'),\r\n Cell: ({ row }) => fluidTypeToString(row.original.get('fluidType')),\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Footer: ,\r\n Cell: ({ row }) => {\r\n if (disabled) return null;\r\n\r\n return (\r\n \r\n {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n deleteFluid(row.original.get('fluidId'));\r\n }}\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [disabled, lengthUnit, deleteFluid],\r\n );\r\n\r\n return (\r\n \r\n \r\n {!disabled && (\r\n \r\n \r\n \r\n \r\n Add\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default FluidsTable;\r\n","import { Field } from 'formik';\r\nimport { MenuItem } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport {\r\n FluidFormFields as FormFields,\r\n GasType,\r\n} from 'utils/fluids/constants.utils';\r\nimport { gasTypeToString } from 'utils/fluids/mappers.utils';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nconst GasFormSection = ({ disabled, gasType }) => (\r\n <>\r\n \r\n {Object.values(GasType).map((gasType) => (\r\n \r\n {gasTypeToString(gasType)}\r\n \r\n ))}\r\n \r\n {gasType === GasType.NATURAL_GAS && (\r\n \r\n )}\r\n \r\n);\r\n\r\nexport default GasFormSection;\r\n","import { Field } from 'formik';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nimport { FluidFormFields as FormFields } from 'utils/fluids/constants.utils';\r\n\r\nconst PowerLawLiquidFormSection = ({ disabled }) => (\r\n <>\r\n \r\n lbf-sⁿ/100ft²\r\n ),\r\n }}\r\n />\r\n \r\n);\r\n\r\nexport default PowerLawLiquidFormSection;\r\n","import { Field } from 'formik';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nimport { FluidFormFields as FormFields } from 'utils/fluids/constants.utils';\r\n\r\nconst NewtonianLiquidFormSection = ({ disabled }) => (\r\n \r\n);\r\n\r\nexport default NewtonianLiquidFormSection;\r\n","import { Field } from 'formik';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nimport { FluidFormFields as FormFields } from 'utils/fluids/constants.utils';\r\n\r\nconst BinghamPlasticLiquidFormSection = ({ disabled }) => (\r\n <>\r\n \r\n lbf/100ft²\r\n ),\r\n }}\r\n />\r\n \r\n);\r\n\r\nexport default BinghamPlasticLiquidFormSection;\r\n","import { Field } from 'formik';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nimport { FluidFormFields as FormFields } from 'utils/fluids/constants.utils';\r\n\r\nconst HerschelBulkleyLiquidFormSection = ({ disabled }) => (\r\n <>\r\n \r\n lbf-sⁿ/100ft²\r\n ),\r\n }}\r\n />\r\n lbf/100ft²\r\n ),\r\n }}\r\n />\r\n \r\n);\r\n\r\nexport default HerschelBulkleyLiquidFormSection;\r\n","import { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport PowerLawLiquidFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/PowerLawLiquidFormSection';\r\nimport NewtonianLiquidFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/NewtonianLiquidFormSection';\r\nimport BinghamPlasticLiquidFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/BinghamPlasticLiquidFormSection';\r\nimport HerschelBulkleyLiquidFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection/HerschelBulkleyLiquidFormSection';\r\nimport {\r\n FluidFormFields as FormFields,\r\n RheologyModel,\r\n} from 'utils/fluids/constants.utils';\r\n\r\nconst LiquidFormSection = ({ disabled, rheologyModel }) => {\r\n const formSections = {\r\n [RheologyModel.POWER_LAW]: PowerLawLiquidFormSection,\r\n [RheologyModel.NEWTONIAN]: NewtonianLiquidFormSection,\r\n [RheologyModel.BINGHAM_PLASTIC]: BinghamPlasticLiquidFormSection,\r\n [RheologyModel.HERSCHEL_BULKLEY]: HerschelBulkleyLiquidFormSection,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LiquidFormSection;\r\n","import { Field } from 'formik';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nimport { FluidFormFields as FormFields } from 'utils/fluids/constants.utils';\r\n\r\nconst MultiphaseLiquidFormSection = ({ disabled }) => (\r\n <>\r\n deg API,\r\n }}\r\n />\r\n \r\n \r\n \r\n);\r\n\r\nexport default MultiphaseLiquidFormSection;\r\n","import { Field } from 'formik';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport MultiphaseLiquidFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/MultiphaseFormSection/BlackOilMultiphaseFormSection/MultiphaseLiquidFormSection';\r\nimport { FluidFormFields as FormFields } from 'utils/fluids/constants.utils';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nconst BlackOilMultiphaseFormSection = ({ disabled }) => (\r\n <>\r\n \r\n scf/bbl,\r\n }}\r\n useRoundedValue={true}\r\n />\r\n \r\n \r\n);\r\n\r\nexport default BlackOilMultiphaseFormSection;\r\n","import { Grid } from '@material-ui/core';\r\n\r\nimport BlackOilMultiphaseFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/MultiphaseFormSection/BlackOilMultiphaseFormSection';\r\nimport { MultiphaseType } from 'utils/fluids/constants.utils';\r\n\r\nconst MultiphaseFormSection = ({ disabled, multiphaseType }) => {\r\n const formSections = {\r\n [MultiphaseType.BLACK_OIL]: BlackOilMultiphaseFormSection,\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport default MultiphaseFormSection;\r\n","import { Grid } from '@material-ui/core';\r\n\r\nimport GasFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/GasFormSection';\r\nimport LiquidFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/LiquidFormSection';\r\nimport MultiphaseFormSection from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties/MultiphaseFormSection';\r\nimport { FluidType } from 'utils/fluids/constants.utils';\r\n\r\nconst FluidSurfaceProperties = ({\r\n disabled,\r\n fluidType,\r\n rheologyModel,\r\n multiphaseType,\r\n gasType,\r\n}) => {\r\n const formSections = {\r\n [FluidType.GAS]: GasFormSection,\r\n [FluidType.LIQUID]: LiquidFormSection,\r\n [FluidType.MULTIPHASE]: MultiphaseFormSection,\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default FluidSurfaceProperties;\r\n","import { Field } from 'formik';\r\nimport { MenuItem } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport {\r\n fluidTypeToString,\r\n multiphaseTypeToString,\r\n rheologyModelToString,\r\n} from 'utils/fluids/mappers.utils';\r\nimport {\r\n FluidType,\r\n FluidFormFields as FormFields,\r\n MultiphaseType,\r\n RheologyModel,\r\n} from 'utils/fluids/constants.utils';\r\n\r\nconst FluidFluidIdentification = ({ disabled, fluidType, autoFocus }) => (\r\n <>\r\n \r\n \r\n \r\n {Object.values(FluidType).map((fluidType) => (\r\n \r\n {fluidTypeToString(fluidType)}\r\n \r\n ))}\r\n \r\n {fluidType === FluidType.LIQUID && (\r\n \r\n {Object.values(RheologyModel).map((rheologyModel) => (\r\n \r\n {rheologyModelToString(rheologyModel)}\r\n \r\n ))}\r\n \r\n )}\r\n {fluidType === FluidType.MULTIPHASE && (\r\n \r\n {Object.values(MultiphaseType).map((multiphaseType) => (\r\n \r\n {multiphaseTypeToString(multiphaseType)}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport default FluidFluidIdentification;\r\n","import { Box, Grid, Typography, Divider } from '@material-ui/core';\r\n\r\nimport FluidSurfaceProperties from 'app/components/FluidsFormSection/FluidForm/FluidSurfaceProperties';\r\nimport FluidFluidIdentification from 'app/components/FluidsFormSection/FluidForm/FluidFluidIdentification';\r\nimport { FluidFormFields as FormFields } from 'utils/fluids/constants.utils';\r\n\r\nconst FluidForm = ({ disabled, values, children, autoFocus }) => {\r\n const selectedFluidType = values[FormFields.FLUID_TYPE];\r\n const selectedRheologyModel = values[FormFields.RHEOLOGY_MODEL];\r\n const selectedMultiphaseType = values[FormFields.MULTIPHASE_TYPE];\r\n const selectedGasType = values[FormFields.GAS_TYPE];\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Note — When a gas is selected as a fluid input, an SG of 1.0\r\n represents Air, however, when a liquid is selected as a fluid\r\n input, an SG of 1.0 represents Fresh Water.\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default FluidForm;\r\n","import { Formik } from 'formik';\r\nimport { useEffect, useRef, useMemo } from 'react';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport FluidForm from 'app/components/FluidsFormSection/FluidForm';\r\n\r\nconst EditFluidForm = ({\r\n disabled,\r\n isCreateMode,\r\n fluid,\r\n toggleCreateMode,\r\n updateFluid,\r\n}) => {\r\n const isCreateModeRef = useRef(isCreateMode);\r\n\r\n useEffect(() => {\r\n if (isCreateModeRef.current) {\r\n toggleCreateMode();\r\n }\r\n }, [toggleCreateMode]);\r\n\r\n const initialValues = useMemo(() => fluid?.toJS(), [fluid]);\r\n\r\n if (!fluid) return null;\r\n\r\n return (\r\n \r\n {(formik) => (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default EditFluidForm;\r\n","import { useMemo } from 'react';\r\nimport { Formik } from 'formik';\r\nimport { Grid, Button } from '@material-ui/core';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport FluidForm from 'app/components/FluidsFormSection/FluidForm';\r\n\r\nconst CreateFluidForm = ({ onCancel, createFluid, defaultFluid }) => {\r\n const initialValues = useMemo(\r\n () => defaultFluid.setIn(['endDepth', 'value'], EMPTY_STRING).toJS(),\r\n [defaultFluid],\r\n );\r\n\r\n return (\r\n \r\n {(formik) => {\r\n const { dirty, isValid, submitForm, isSubmitting } = formik;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Create\r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n \r\n );\r\n};\r\n\r\nexport default CreateFluidForm;\r\n","import { Table } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nconst FluidEditorHeader = (props) => {\r\n const columns = [\r\n {\r\n xs: 6,\r\n Header: 'Fluid Identification',\r\n },\r\n {\r\n xs: 6,\r\n Header: 'Surface Properties',\r\n },\r\n ];\r\n\r\n return ;\r\n};\r\n\r\nexport default FluidEditorHeader;\r\n","import { Grid } from '@material-ui/core';\r\n\r\nimport makeStyles from '@material-ui/styles/makeStyles';\r\n\r\nimport EditFluidForm from 'app/components/FluidsFormSection/FluidEditor/EditFluidForm';\r\nimport CreateFluidForm from 'app/components/FluidsFormSection/FluidEditor/CreateFluidForm';\r\nimport FluidEditorHeader from 'app/components/FluidsFormSection/FluidEditor/FluidEditorHeader';\r\n\r\nconst FluidEditor = ({\r\n disabled,\r\n isCreateMode,\r\n fluid,\r\n toggleCreateMode,\r\n fluidId,\r\n defaultFluid,\r\n updateFluid,\r\n createFluid,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n if (!isCreateMode && !fluidId) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {isCreateMode && (\r\n \r\n )}\r\n {!isCreateMode && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n background: theme.altus.components.SortableListRow.background,\r\n },\r\n}));\r\n\r\nexport default FluidEditor;\r\n","import { useCallback } from 'react';\r\n\r\nexport const useIncludeProjectIdToArguments = (fn, projectId) => {\r\n return useCallback((...args) => fn(projectId, ...args), [projectId, fn]);\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { useRequest, useToggle } from 'altus-hooks';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport {\r\n requestCreateFluid,\r\n requestDeleteFluid,\r\n requestGetProjectFluids,\r\n requestUpdateFluid,\r\n} from 'features/projects/project.actions.fluids';\r\nimport { getProjectFluidsSelector } from 'features/projects/projects.selectors';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport FluidTableRow from 'app/components/FluidsFormSection/FluidTableRow';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport FluidsTable from 'app/components/FluidsFormSection/FluidsTable';\r\nimport FluidEditor from 'app/components/FluidsFormSection/FluidEditor';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\nimport projectFluidService from 'services/projectFluid.service';\r\nimport FormSection from 'app/components/form/FormSection';\r\nimport { fromJS } from 'immutable';\r\nimport {\r\n requestCreateWellboreFluid,\r\n requestDeleteWellboreFluid,\r\n requestGetWellboreFluids,\r\n requestUpdateWellboreFluid,\r\n} from 'features/wells/wellboreFluid.actions';\r\nimport { getWellboreFluidsSelector } from 'features/wells/wellbore.selectors';\r\nimport { WELLS_ACTIONS } from 'features/wells/wells.constants';\r\nimport wellboreFluidService from 'services/wellboreFluid.service';\r\nimport {\r\n requestCreateTaskFluid,\r\n requestDeleteTaskFluid,\r\n requestGetTaskFluids,\r\n requestUpdateTaskFluid,\r\n} from 'features/projects/task.actions.fluids';\r\nimport { getTaskFluidsSelector } from 'features/projects/tasks/tasks.selectors';\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport taskService from 'services/task.service';\r\nimport { useIncludeProjectIdToArguments } from 'app/components/FluidsFormSection/hooks/useIncludeProjectIdToArguments';\r\n\r\n/**\r\n * Component to manage fluids against project or wellbore.\r\n *\r\n * @param disabled\r\n * @param {number} parentFluidObjectId Id of the parent object of fluids (projectWellboreDetailsId or WellboreId)\r\n * @param dataStateActions\r\n * @param requestFluidsAction\r\n * @param requestDeleteFluidAction\r\n * @param requestCreateFluidAction\r\n * @param requestUpdateFluidAction\r\n * @param getFluidsSelector\r\n * @param getDefaultFluid\r\n * @param sectionTitle\r\n * @return JSX (component)\r\n */\r\nfunction FluidsFormSection({\r\n disabled,\r\n parentFluidObjectId,\r\n dataStateActions,\r\n requestFluidsAction,\r\n requestDeleteFluidAction,\r\n requestCreateFluidAction,\r\n requestUpdateFluidAction,\r\n getFluidsSelector,\r\n getDefaultFluid,\r\n sectionTitle,\r\n}) {\r\n const [fluidId, setFluidId] = useState(null);\r\n const [isCreateMode, toggleCreateMode] = useToggle();\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(requestFluidsAction(parentFluidObjectId));\r\n }, [requestFluidsAction, parentFluidObjectId, dispatch]);\r\n const fluids = useSelector(getFluidsSelector) ?? EMPTY_MAP;\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(state, ...dataStateActions),\r\n );\r\n\r\n const getDefaultProjectFluid = useCallback(\r\n () => getDefaultFluid(parentFluidObjectId).then(fromJS),\r\n [getDefaultFluid, parentFluidObjectId],\r\n );\r\n const [defaultProjectFluid = EMPTY_MAP] = useRequest(getDefaultProjectFluid);\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => {\r\n const rowFluidId = props.item.get('fluidId').toString();\r\n return (\r\n {\r\n setFluidId(rowFluidId);\r\n if (isCreateMode) {\r\n toggleCreateMode();\r\n }\r\n }}\r\n />\r\n );\r\n },\r\n [isCreateMode, toggleCreateMode],\r\n );\r\n\r\n const selectedFluid = fluids.get(fluidId);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n Fluids\r\n \r\n {\r\n toggleCreateMode();\r\n setFluidId(null);\r\n }}\r\n deleteFluid={(fluidId) =>\r\n dispatch(\r\n requestDeleteFluidAction(parentFluidObjectId, fluidId),\r\n )\r\n }\r\n fluids={fluids}\r\n defaultFluid={defaultProjectFluid}\r\n TableRowComponent={renderTableRowComponent}\r\n />\r\n \r\n \r\n \r\n Fluid Editor\r\n \r\n \r\n dispatch(\r\n requestUpdateFluidAction(\r\n parentFluidObjectId,\r\n updatedObj,\r\n setSubmitting,\r\n setStatus,\r\n ),\r\n )\r\n }\r\n createFluid={(newFluid, { setSubmitting, setStatus }) => {\r\n dispatch(\r\n requestCreateFluidAction(\r\n parentFluidObjectId,\r\n newFluid,\r\n setSubmitting,\r\n setStatus,\r\n ),\r\n );\r\n toggleCreateMode();\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport function FluidsFormSectionWellbore(props) {\r\n // Hide overlay on INITIATE_GET_WELLBORE_FLUIDS\r\n // because hostile fluids section already has overlay\r\n const dataStateActions = [\r\n // WELLS_ACTIONS.INITIATE_GET_WELLBORE_FLUIDS,\r\n WELLS_ACTIONS.INITIATE_CREATE_WELLBORE_FLUID,\r\n WELLS_ACTIONS.INITIATE_UPDATE_WELLBORE_FLUID,\r\n WELLS_ACTIONS.INITIATE_DELETE_WELLBORE_FLUID,\r\n ];\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function FluidsFormSectionProject({ projectId, ...props }) {\r\n // Extend all actions with projectId\r\n const requestGetProjectFluidsExt = useIncludeProjectIdToArguments(\r\n requestGetProjectFluids,\r\n projectId,\r\n );\r\n const getDefaultProjectFluidExt = useIncludeProjectIdToArguments(\r\n projectFluidService.getDefaultProjectFluid,\r\n projectId,\r\n );\r\n const requestDeleteFluidExt = useIncludeProjectIdToArguments(\r\n requestDeleteFluid,\r\n projectId,\r\n );\r\n const requestCreateFluidExt = useIncludeProjectIdToArguments(\r\n requestCreateFluid,\r\n projectId,\r\n );\r\n const requestUpdateFluidExt = useIncludeProjectIdToArguments(\r\n requestUpdateFluid,\r\n projectId,\r\n );\r\n\r\n const dataStateActions = [\r\n PROJECTS_ACTIONS.INITIATE_GET_PROJECT_FLUIDS,\r\n PROJECTS_ACTIONS.INITIATE_CREATE_PROJECT_FLUID,\r\n PROJECTS_ACTIONS.INITIATE_DELETE_PROJECT_FLUID,\r\n PROJECTS_ACTIONS.INITIATE_UPDATE_PROJECT_FLUID,\r\n ];\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function FluidsFormSectionDataAcquistion({ projectId, ...props }) {\r\n const requestGetTaskFluidsFn = useIncludeProjectIdToArguments(\r\n requestGetTaskFluids,\r\n projectId,\r\n );\r\n const getDefaultFluidFn = useIncludeProjectIdToArguments(\r\n taskService.getDefaultTaskFluid,\r\n projectId,\r\n );\r\n const requestDeleteTaskFluidFn = useIncludeProjectIdToArguments(\r\n requestDeleteTaskFluid,\r\n projectId,\r\n );\r\n const requestUpdateTaskFluidFn = useIncludeProjectIdToArguments(\r\n requestUpdateTaskFluid,\r\n projectId,\r\n );\r\n const requestCreateTaskFluidFn = useIncludeProjectIdToArguments(\r\n requestCreateTaskFluid,\r\n projectId,\r\n );\r\n\r\n const dataStateActions = [\r\n TASK_ACTIONS.INITIATE_GET_TASK_FLUIDS,\r\n TASK_ACTIONS.INITIATE_DELETE_TASK_FLUID,\r\n TASK_ACTIONS.INITIATE_UPDATE_TASK_FLUID,\r\n TASK_ACTIONS.INITIATE_CREATE_TASK_FLUID,\r\n ];\r\n return (\r\n \r\n );\r\n}\r\n","import { compose } from 'redux';\r\nimport { Formik, Form } from 'formik';\r\nimport { memo, useMemo } from 'react';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport HostileFluidsFormSection from 'app/components/WellboreDetailsForm/HostileFluidsFormSection';\r\nimport WellPropertiesFormSection from 'app/components/WellboreDetailsForm/WellPropertiesFormSection';\r\nimport WellInformationFormSection from 'app/components/WellboreDetailsForm/WellInformationFormSection';\r\n\r\nimport {\r\n FluidsFormSectionProject,\r\n FluidsFormSectionWellbore,\r\n} from 'app/components/FluidsFormSection';\r\n\r\nconst WellboreDetailsFormBase = ({\r\n onSubmit,\r\n disabled,\r\n wellboreDetail = EMPTY_MAP,\r\n}) => {\r\n const initialValues = useMemo(() => wellboreDetail.toJS(), [wellboreDetail]);\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nconst _ProjectWellboreDetailsAndFluids = ({\r\n disabled,\r\n projectWellboreDetailId,\r\n isArchive,\r\n projectId,\r\n ...rest\r\n}) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _WellboreDetailsAndFluids = ({ wellboreId, isArchive, ...rest }) => {\r\n const disabled = false;\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const ProjectWellboreDetailsAndFluids = compose(memo)(\r\n _ProjectWellboreDetailsAndFluids,\r\n);\r\nexport const WellboreDetailsAndFluids = compose(memo)(\r\n _WellboreDetailsAndFluids,\r\n);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { updateWellboreDetail } from 'features/wells/wellbore.actions';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { WELLS_ACTIONS as WELLBORE_ACTIONS } from 'features/wells/wells.constants';\r\nimport { WellboreDetailsAndFluids } from 'app/components/WellboreDetailsForm/WellboreDetailsForm';\r\n\r\nconst WellboreDetailsContainer = ({\r\n fieldId,\r\n dataState,\r\n wellboreId,\r\n breadcrumb,\r\n dispatchUpdateWellboreDetail,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n const { wellboreDetail } = useWellbore(wellboreId);\r\n\r\n const updateWellboreDetail = useCallback(\r\n (wellboreDetails) =>\r\n dispatchUpdateWellboreDetail(fieldId, wellboreId, wellboreDetails),\r\n [fieldId, wellboreId, dispatchUpdateWellboreDetail],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n WELLBORE_ACTIONS.WELLBORE_CONTAINER_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchUpdateWellboreDetail: updateWellboreDetail,\r\n};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n WellboreDetailsContainer,\r\n);\r\n","import { compose } from 'redux';\r\nimport { Formik, Form } from 'formik';\r\nimport { useMemo, useCallback } from 'react';\r\nimport Close from '@material-ui/icons/Close';\r\nimport Check from '@material-ui/icons/Check';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { IconButton, MenuItem } from '@material-ui/core';\r\n\r\nimport { TableRow, TableCell, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport {\r\n WellboreSectionType,\r\n MINUSKEY,\r\n} from 'features/wells/sections/wellboreSection.constants';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { wellboreSectionTypeToString } from 'features/wells/sections/wellboreSection.mappers';\r\nimport { WellboreSectionFormFields as FormFields } from 'features/wells/sections/components/WellboreSectionsTable';\r\n\r\nconst CreateWellboreSectionRow = ({\r\n classes,\r\n columns,\r\n toggleCreateMode,\r\n createWellboreSection,\r\n defaultWellboreSection,\r\n wellboreSection,\r\n}) => {\r\n let topValue = {\r\n hasValue: true,\r\n unit: 'm',\r\n };\r\n\r\n const getTopValue = useCallback(() => {\r\n var result = 0;\r\n let length = 0;\r\n let top = 0;\r\n\r\n if (wellboreSection?.size) {\r\n Array.from(wellboreSection.values())\r\n .pop()\r\n .map((value, i) => {\r\n if (i === 'bottom' && result === 0) {\r\n result = value.value;\r\n }\r\n\r\n if (i === 'wellboreSectionNipples') {\r\n Array.from(value.values())\r\n .pop()\r\n ?.map((nipple, j) => {\r\n switch (j) {\r\n case 'length':\r\n length = nipple.value;\r\n break;\r\n case 'top':\r\n top = nipple.value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n result = length + top;\r\n return result;\r\n });\r\n }\r\n\r\n return result;\r\n });\r\n }\r\n\r\n return result;\r\n }, [wellboreSection]);\r\n\r\n const initialTopValue = useMemo(\r\n () => ({\r\n hasValue: true,\r\n roundedValue: getTopValue(),\r\n unit: 'm',\r\n value: getTopValue(),\r\n }),\r\n [getTopValue],\r\n );\r\n\r\n const validateTopValues = (value) => {\r\n const validateRequired = required(value);\r\n topValue = value;\r\n\r\n if (validateRequired) {\r\n return validateRequired;\r\n }\r\n };\r\n\r\n const validateTopBottomValues = (value) => {\r\n const validateRequired = required(value);\r\n const bottomValue = Number.parseFloat(value?.value);\r\n const currentTopValue = Number.parseFloat(topValue?.value);\r\n\r\n if (\r\n validateRequired ||\r\n Number.isNaN(bottomValue) ||\r\n Number.isNaN(currentTopValue) ||\r\n !value?.hasValue\r\n ) {\r\n return validateRequired;\r\n }\r\n\r\n if (bottomValue <= currentTopValue) {\r\n return 'Bottom value must be greater than top value';\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const onSubmit = useCallback(\r\n (wellboreSection, formik) =>\r\n createWellboreSection(wellboreSection, formik, toggleCreateMode),\r\n [toggleCreateMode, createWellboreSection],\r\n );\r\n\r\n // simplify getting 'xs' and 'Header' values from column\r\n const renderCell = (index, render) => {\r\n const column = columns[index];\r\n\r\n return (\r\n \r\n {invokeIfFunction(render, column)}\r\n \r\n );\r\n };\r\n\r\n let initialValues = useMemo(\r\n () => ({\r\n [FormFields.FRICTION_FACTOR_IN]:\r\n defaultWellboreSection.get('frictionFactorIn'),\r\n [FormFields.FRICTION_FACTOR_OUT]:\r\n defaultWellboreSection.get('frictionFactorOut'),\r\n [FormFields.TOP]: initialTopValue,\r\n }),\r\n [defaultWellboreSection, initialTopValue],\r\n );\r\n\r\n return (\r\n \r\n {({ isValid, isSubmitting, handleSubmit, dirty }) => (\r\n
\r\n \r\n {renderCell(0, () => (\r\n \r\n ))}\r\n {renderCell(1)}\r\n {renderCell(2, () => (\r\n \r\n {Object.values(WellboreSectionType).map((type) => (\r\n \r\n {wellboreSectionTypeToString(type)}\r\n \r\n ))}\r\n \r\n ))}\r\n {renderCell(3, () => (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n ))}\r\n {renderCell(4, () => (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n ))}\r\n {renderCell(5)}\r\n {renderCell(6, () => (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n ))}\r\n {renderCell(7, () => (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n ))}\r\n {renderCell(8, () => (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n saveButton: {\r\n background: theme.palette.success.dark,\r\n '&:hover': {\r\n background: theme.palette.success.main,\r\n },\r\n },\r\n tableRowRoot: {\r\n '&:hover': {\r\n background: theme.altus.components.SortableListRow.background,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CreateWellboreSectionRow);\r\n","import { compose } from 'redux';\r\nimport { useCallback, useMemo } from 'react';\r\nimport { Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport Check from '@material-ui/icons/Check';\r\nimport { IconButton } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableRow, TableCell, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { WellboreSectionFormFields as FormFields } from 'features/wells/sections/components/WellboreSectionsTable';\r\n\r\nconst CreateWellboreSectionNippleRow = ({\r\n classes,\r\n columns,\r\n wellboreSectionId,\r\n toggleCreateMode,\r\n createWellboreSectionNipple,\r\n wellboreSection,\r\n}) => {\r\n const onSubmit = useCallback(\r\n (wellboreSectionNipple, formik) =>\r\n createWellboreSectionNipple(\r\n wellboreSectionNipple,\r\n formik,\r\n toggleCreateMode,\r\n ),\r\n [toggleCreateMode, createWellboreSectionNipple],\r\n );\r\n\r\n const getTopValue = useCallback(() => {\r\n var result = 0;\r\n let length = 0;\r\n let top = 0;\r\n\r\n if (wellboreSection?.size) {\r\n Array.from(wellboreSection.values())\r\n .pop()\r\n .map((value, i) => {\r\n if (i === 'bottom' && result === 0) {\r\n result = value.value;\r\n }\r\n\r\n if (i === 'wellboreSectionNipples') {\r\n Array.from(value.values())\r\n .pop()\r\n ?.map((nipple, j) => {\r\n switch (j) {\r\n case 'length':\r\n length = nipple.value;\r\n break;\r\n case 'top':\r\n top = nipple.value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n result = length + top;\r\n return result;\r\n });\r\n }\r\n\r\n return result;\r\n });\r\n }\r\n\r\n return result;\r\n }, [wellboreSection]);\r\n\r\n let topValue = {\r\n hasValue: true,\r\n unit: 'm',\r\n value: getTopValue(),\r\n };\r\n\r\n const initialTopValue = useMemo(\r\n () => ({\r\n hasValue: true,\r\n roundedValue: getTopValue(),\r\n unit: 'm',\r\n value: getTopValue(),\r\n }),\r\n [getTopValue],\r\n );\r\n\r\n let initialValues = useMemo(\r\n () => ({\r\n wellboreSectionId,\r\n [FormFields.TOP]: initialTopValue,\r\n }),\r\n [initialTopValue, wellboreSectionId],\r\n );\r\n\r\n // simplify getting 'xs' and 'Header' values from column\r\n const renderCell = (index, render) => {\r\n const column = columns[index];\r\n return (\r\n \r\n {invokeIfFunction(render, column)}\r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n {({ isValid, isSubmitting, handleSubmit, dirty }) => (\r\n
\r\n \r\n {renderCell(0, () => (\r\n \r\n ))}\r\n {renderCell(1)}\r\n {renderCell(2, (column) => (\r\n \r\n ))}\r\n {renderCell(3, () => (\r\n \r\n ))}\r\n {renderCell(4)}\r\n {renderCell(5, () => (\r\n \r\n ))}\r\n {renderCell(6, () => (\r\n \r\n ))}\r\n {renderCell(7)}\r\n {renderCell(8)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n saveButton: {\r\n background: theme.palette.success.dark,\r\n '&:hover': {\r\n background: theme.palette.success.main,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CreateWellboreSectionNippleRow);\r\n","import { Field } from 'formik';\r\nimport { useMemo, useCallback, useState, useEffect } from 'react';\r\nimport { Add, Close, ExpandMore, ExpandLess } from '@material-ui/icons';\r\nimport { IconButton, Grid, Button, Box, MenuItem } from '@material-ui/core';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport {\r\n EMPTY_LIST,\r\n EMPTY_MAP,\r\n PROJECT_STATUS,\r\n ProjectWellboreDetailStatus,\r\n} from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport {\r\n WellboreSectionType,\r\n MINUSKEY,\r\n} from 'features/wells/sections/wellboreSection.constants';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { wellboreSectionTypeToString } from 'features/wells/sections/wellboreSection.mappers';\r\nimport CreateWellboreSectionRow from 'features/wells/sections/components/CreateWellboreSectionRow';\r\nimport CreateWellboreSectionNippleRow from 'features/wells/sections/components/CreateWellboreSectionNippleRow';\r\n\r\nexport const WellboreSectionFormFields = {\r\n TOP: 'top',\r\n TYPE: 'type',\r\n BOTTOM: 'bottom',\r\n LENGTH: 'length',\r\n INNER_DIAMETER: 'innerDiameter',\r\n FRICTION_FACTOR_IN: 'frictionFactorIn',\r\n FRICTION_FACTOR_OUT: 'frictionFactorOut',\r\n};\r\n\r\nconst getSubRows = (row) => {\r\n if (row.original) return;\r\n\r\n return row.get('wellboreSectionNipples', EMPTY_LIST).valueSeq();\r\n};\r\n\r\nconst WellboreSectionsTable = ({\r\n createWellboreSection,\r\n updateWellboreSection,\r\n deleteWellboreSection,\r\n defaultWellboreSection,\r\n createWellboreSectionNipple,\r\n updateWellboreSectionNipple,\r\n deleteWellboreSectionNipple,\r\n wellboreSections = EMPTY_MAP,\r\n projectWellboreDetail,\r\n}) => {\r\n const [isCreateMode, toggleCreateMode] = useToggle();\r\n const [currentWellboreSections, setCurrentWellboreSections] = useState(null);\r\n const [wellboreSectionIdForCreate, setWellboreSectionIdForCreate] =\r\n useState();\r\n\r\n useEffect(() => {\r\n setCurrentWellboreSections(wellboreSections);\r\n }, [wellboreSections]);\r\n\r\n var lengthUnit = defaultWellboreSection.getIn(['top', 'unit']);\r\n\r\n const projectStatus = useCurrentProject().get('status');\r\n const projectWellboreStatus = projectWellboreDetail?.get('status');\r\n\r\n const isApproved =\r\n projectStatus > PROJECT_STATUS.PLAN ||\r\n projectWellboreStatus === ProjectWellboreDetailStatus.APPROVED;\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n Footer: () => ,\r\n },\r\n {\r\n xs: 3,\r\n id: 'section',\r\n Header: 'Section',\r\n accessor: (_, index, row) => {\r\n if (row.id.includes('.')) {\r\n const indexes = row.id.split('.');\r\n return `Nipple ${Number(indexes[0]) + 1}.${Number(indexes[1]) + 1}`;\r\n }\r\n\r\n return index + 1;\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Type',\r\n Cell: ({ row }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n if (isNipple) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {Object.values(WellboreSectionType).map((type) => (\r\n \r\n {wellboreSectionTypeToString(type)}\r\n \r\n ))}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'top',\r\n Header: () => (\r\n \r\n ),\r\n Cell: (row) => {\r\n let disableCell = true;\r\n\r\n if (row) {\r\n disableCell = row.row.id === '0';\r\n\r\n if (projectWellboreDetail) {\r\n disableCell = isApproved;\r\n }\r\n }\r\n\r\n return (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'bottom',\r\n Header: () => (\r\n \r\n ),\r\n Cell: ({ row }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n if (isNipple) return null;\r\n\r\n return (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'length',\r\n Header: () => (\r\n \r\n ),\r\n Cell: ({ row }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n if (!isNipple) return null;\r\n\r\n return (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'innerDiameter',\r\n Header: () => (\r\n \r\n ),\r\n Cell: () => (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Friction in',\r\n Cell: ({ row }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n if (isNipple) return null;\r\n\r\n return (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Friction out',\r\n Cell: ({ row }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n if (isNipple) return null;\r\n\r\n return (\r\n {\r\n if (event?.key === MINUSKEY) {\r\n event.preventDefault();\r\n }\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Footer: ,\r\n Cell: ({ row }) => (\r\n \r\n {row.depth === 0 && createWellboreSectionNipple && !isApproved ? (\r\n {\r\n setWellboreSectionIdForCreate(\r\n row.original.get('wellboreSectionId'),\r\n );\r\n toggleCreateMode();\r\n }}\r\n >\r\n \r\n \r\n ) : null}\r\n {deleteWellboreSection && !isApproved && (\r\n {\r\n row.depth === 0\r\n ? deleteWellboreSection(\r\n row.original.get('wellboreSectionId'),\r\n )\r\n : deleteWellboreSectionNipple(\r\n row.original.get('wellboreSectionId'),\r\n row.original.get('wellboreSectionNippleId'),\r\n );\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n ),\r\n },\r\n ],\r\n [\r\n lengthUnit,\r\n isCreateMode,\r\n toggleCreateMode,\r\n deleteWellboreSection,\r\n defaultWellboreSection,\r\n createWellboreSectionNipple,\r\n deleteWellboreSectionNipple,\r\n isApproved,\r\n projectWellboreDetail,\r\n ],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => {\r\n const onSubmit = props.item.get('isNipple')\r\n ? updateWellboreSectionNipple\r\n : updateWellboreSection;\r\n\r\n return ;\r\n },\r\n [updateWellboreSection, updateWellboreSectionNipple],\r\n );\r\n\r\n const initialState = useMemo(\r\n () => ({\r\n expanded: wellboreSections.toArray().reduce(\r\n (result, _wellboreSection, index) => ({\r\n ...result,\r\n [index]: true,\r\n }),\r\n {},\r\n ),\r\n }),\r\n [wellboreSections],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {isCreateMode && !wellboreSectionIdForCreate && !isApproved && (\r\n \r\n )}\r\n {isCreateMode && wellboreSectionIdForCreate && !isApproved && (\r\n \r\n )}\r\n {createWellboreSection && !isApproved && (\r\n \r\n \r\n {\r\n setWellboreSectionIdForCreate();\r\n toggleCreateMode();\r\n }}\r\n >\r\n Add section\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default WellboreSectionsTable;\r\n","import { compose } from 'redux';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { useEffect, useMemo, useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n requestCreateWellboreSection,\r\n requestUpdateWellboreSection,\r\n requestDeleteWellboreSection,\r\n requestCreateWellboreSectionNipple,\r\n requestUpdateWellboreSectionNipple,\r\n requestDeleteWellboreSectionNipple,\r\n requestWellboreSectionsForWellbore,\r\n} from 'features/wells/sections/wellboreSection.actions';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport wellboreSectionService from 'services/wellboreSection.service';\r\nimport { ACTIONS } from 'features/wells/sections/wellboreSection.constants';\r\nimport wellboreSectionsMappers from 'features/wells/sections/wellboreSection.mappers';\r\nimport WellboreSectionsTable from 'features/wells/sections/components/WellboreSectionsTable';\r\nimport { createWellboreSectionsForWellboreSelector } from 'features/wells/sections/wellboreSection.selectors';\r\n\r\nconst WellboreSectionsContainer = ({\r\n fieldId,\r\n dataState,\r\n breadcrumb,\r\n wellboreId,\r\n dispatchRequestCreateWellboreSection,\r\n dispatchRequestUpdateWellboreSection,\r\n dispatchRequestDeleteWellboreSection,\r\n dispatchRequestCreateWellboreSectionNipple,\r\n dispatchRequestUpdateWellboreSectionNipple,\r\n dispatchRequestDeleteWellboreSectionNipple,\r\n dispatchRequestWellboreSectionsForWellbore,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchRequestWellboreSectionsForWellbore(fieldId, wellboreId);\r\n }, [fieldId, wellboreId, dispatchRequestWellboreSectionsForWellbore]);\r\n\r\n const getDefaultWellboreSection = useCallback(\r\n () =>\r\n wellboreSectionService\r\n .getDefaultWellboreSection(fieldId, wellboreId)\r\n .then((wellboreSection) =>\r\n wellboreSectionsMappers.WellboreSection.from(wellboreSection),\r\n ),\r\n [fieldId, wellboreId],\r\n );\r\n\r\n const [defaultWellboreSection = EMPTY_MAP] = useRequest(\r\n getDefaultWellboreSection,\r\n );\r\n\r\n const createWellboreSection = useCallback(\r\n (wellboreSection, formik, callback) =>\r\n dispatchRequestCreateWellboreSection(\r\n fieldId,\r\n wellboreId,\r\n wellboreSection,\r\n formik,\r\n callback,\r\n ),\r\n [fieldId, wellboreId, dispatchRequestCreateWellboreSection],\r\n );\r\n\r\n const updateWellboreSection = useCallback(\r\n (wellboreSection) => {\r\n const { wellboreSectionId } = wellboreSection;\r\n dispatchRequestUpdateWellboreSection(\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSection,\r\n );\r\n },\r\n [fieldId, wellboreId, dispatchRequestUpdateWellboreSection],\r\n );\r\n\r\n const deleteWellboreSection = useCallback(\r\n (wellboreSectionId) =>\r\n dispatchRequestDeleteWellboreSection(\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n ),\r\n [fieldId, wellboreId, dispatchRequestDeleteWellboreSection],\r\n );\r\n\r\n const createWellboreSectionNipple = useCallback(\r\n (wellboreSectionNipple, formik, callback) => {\r\n const { wellboreSectionId } = wellboreSectionNipple;\r\n\r\n dispatchRequestCreateWellboreSectionNipple(\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNipple,\r\n formik,\r\n callback,\r\n );\r\n },\r\n [fieldId, wellboreId, dispatchRequestCreateWellboreSectionNipple],\r\n );\r\n\r\n const updateWellboreSectionNipple = useCallback(\r\n (wellboreSectionNipple) => {\r\n const { wellboreSectionId, wellboreSectionNippleId } =\r\n wellboreSectionNipple;\r\n\r\n dispatchRequestUpdateWellboreSectionNipple(\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n wellboreSectionNipple,\r\n );\r\n },\r\n [fieldId, wellboreId, dispatchRequestUpdateWellboreSectionNipple],\r\n );\r\n\r\n const deleteWellboreSectionNipple = useCallback(\r\n (wellboreSectionId, wellboreSectionNippleId) =>\r\n dispatchRequestDeleteWellboreSectionNipple(\r\n fieldId,\r\n wellboreId,\r\n wellboreSectionId,\r\n wellboreSectionNippleId,\r\n ),\r\n [fieldId, wellboreId, dispatchRequestDeleteWellboreSectionNipple],\r\n );\r\n\r\n const wellboreSectionsSelector = useMemo(\r\n () => createWellboreSectionsForWellboreSelector(wellboreId),\r\n [wellboreId],\r\n );\r\n\r\n const wellboreSections = useSelector(wellboreSectionsSelector);\r\n\r\n return (\r\n \r\n Basic Well Description for simulations\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.REQUEST_WELLBORE_SECTIONS,\r\n ACTIONS.REQUEST_CREATE_WELLBORE_SECTION,\r\n ACTIONS.REQUEST_UPDATE_WELLBORE_SECTION,\r\n ACTIONS.REQUEST_UPDATE_WELLBORE_SECTION_NIPPLE,\r\n ACTIONS.REQUEST_DELETE_WELLBORE_SECTION_NIPPLE,\r\n ),\r\n }),\r\n {\r\n dispatchRequestCreateWellboreSection: requestCreateWellboreSection,\r\n dispatchRequestUpdateWellboreSection: requestUpdateWellboreSection,\r\n dispatchRequestDeleteWellboreSection: requestDeleteWellboreSection,\r\n dispatchRequestCreateWellboreSectionNipple:\r\n requestCreateWellboreSectionNipple,\r\n dispatchRequestUpdateWellboreSectionNipple:\r\n requestUpdateWellboreSectionNipple,\r\n dispatchRequestDeleteWellboreSectionNipple:\r\n requestDeleteWellboreSectionNipple,\r\n dispatchRequestWellboreSectionsForWellbore:\r\n requestWellboreSectionsForWellbore,\r\n },\r\n ),\r\n)(WellboreSectionsContainer);\r\n","import { useMemo } from 'react';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\n\r\nconst WellboreElementsTable = ({ wellboreElements }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'mdTop',\r\n xs: 2,\r\n accessor: (item) =>\r\n formatValue(item.getIn(['mdTop', 'value']), '', 0.01),\r\n Header: 'MD Top (m)',\r\n },\r\n {\r\n id: 'angle',\r\n xs: 2,\r\n accessor: (item) =>\r\n formatValue(item.getIn(['angle', 'value']), '', 0.01),\r\n Header: 'Angle (deg)',\r\n },\r\n {\r\n id: 'tvdTop',\r\n xs: 2,\r\n accessor: (item) =>\r\n formatValue(item.getIn(['tvdTop', 'value']), '', 0.01),\r\n Header: 'TVD Top (m)',\r\n },\r\n {\r\n id: 'length',\r\n xs: 2,\r\n accessor: (item) =>\r\n formatValue(item.getIn(['length', 'value']), '', 0.01),\r\n Header: 'Length (m)',\r\n },\r\n {\r\n id: 'maxOD',\r\n xs: 2,\r\n accessor: (item) =>\r\n formatValue(item.getIn(['maxOD', 'value']), '', 0.01),\r\n Header: 'Max OD (m)',\r\n },\r\n {\r\n id: 'minId',\r\n xs: 2,\r\n accessor: (item) =>\r\n formatValue(item.getIn(['minID', 'value']), '', 0.01),\r\n Header: 'Min ID (m)',\r\n },\r\n {\r\n id: 'driftId',\r\n xs: 2,\r\n accessor: (item) =>\r\n formatValue(item.getIn(['driftID', 'value']), '', 0.01),\r\n Header: 'Drift ID (m)',\r\n },\r\n {\r\n id: 'matlSpec',\r\n xs: 4,\r\n accessor: (item) => item.get('matlSpec'),\r\n Header: 'Matl. Spec.',\r\n },\r\n {\r\n id: 'description',\r\n xs: 4,\r\n accessor: (item) => item.get('description'),\r\n Header: 'Description',\r\n },\r\n {\r\n id: 'comments',\r\n xs: 4,\r\n accessor: (item) => item.get('comments'),\r\n Header: 'Comments',\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return wellboreElements ? (\r\n \r\n ) : null;\r\n};\r\nexport default WellboreElementsTable;\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nconst getWellboreRevisionSelector = (state) =>\r\n state.getIn(['entity', 'wellboreElement']);\r\n\r\nexport const getWellboreRevisionForWellboreSelector = (wellboreId) =>\r\n createSelector(getWellboreRevisionSelector, (wellboreElements) =>\r\n wellboreElements\r\n .filter((section) => section?.get('wellboreId'))\r\n .groupBy((section) => section.get('wellboreId').toString())\r\n .get(wellboreId.toString()),\r\n );\r\n","import { compose } from 'redux';\r\nimport { Button } from '@material-ui/core';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { useEffect, useMemo, useCallback } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n requestWellboreRevisionForWellbore,\r\n requestWellboreRevisionFromWellcom,\r\n} from 'features/wells/elements/wellboreElement.actions';\r\n\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { ACTIONS } from 'features/wells/elements/wellboreElement.constants';\r\nimport WellboreElementsTable from 'features/wells/elements/components/WellboreElementsTable';\r\nimport { getWellboreRevisionForWellboreSelector } from 'features/wells/elements/wellboreElement.selector';\r\n\r\nconst WellboreElementsContainer = ({\r\n fieldId,\r\n dataState,\r\n wellboreId,\r\n dispatchRequestWellboreRevisionForWellbore,\r\n dispatchRequestWellboreRevisionFromWellcom,\r\n}) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n useEffect(() => {\r\n dispatchRequestWellboreRevisionForWellbore(fieldId, wellboreId);\r\n }, [fieldId, wellboreId, dispatchRequestWellboreRevisionForWellbore]);\r\n\r\n const getWellboreRevisionFromWellcom = useCallback(\r\n () => dispatchRequestWellboreRevisionFromWellcom(fieldId, wellboreId),\r\n [fieldId, wellboreId, dispatchRequestWellboreRevisionFromWellcom],\r\n );\r\n\r\n const wellboreRevisionSelector = useMemo(\r\n () => getWellboreRevisionForWellboreSelector(wellboreId),\r\n [wellboreId],\r\n );\r\n\r\n const wellboreRevision = useSelector(wellboreRevisionSelector);\r\n\r\n return (\r\n \r\n {wellbore?.get('wellcomId') === null ? (\r\n This wellbore does not have wellcomId\r\n ) : (\r\n <>\r\n {wellboreRevision ? (\r\n <>\r\n \r\n Revision:\r\n {wellboreRevision?.getIn([wellboreId.toString(), 'revision'])}\r\n \r\n \r\n Tubing date:\r\n {wellboreRevision?.getIn([wellboreId.toString(), 'tubingDate'])}\r\n \r\n
\r\n \r\n \r\n ) : (\r\n <>\r\n \r\n There is no loaded revision for this wellbore. To load from\r\n wellcom, press button.\r\n \r\n {\r\n getWellboreRevisionFromWellcom();\r\n }}\r\n >\r\n Load revision\r\n \r\n \r\n )}\r\n \r\n )}\r\n
\r\n );\r\n};\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.REQUEST_GET_WELLBORE_ELEMENTS,\r\n ACTIONS.REQUEST_GET_WELLBORE_ELEMENTS_FROM_WELLCOM,\r\n ),\r\n }),\r\n {\r\n dispatchRequestWellboreRevisionForWellbore:\r\n requestWellboreRevisionForWellbore,\r\n dispatchRequestWellboreRevisionFromWellcom:\r\n requestWellboreRevisionFromWellcom,\r\n },\r\n ),\r\n)(WellboreElementsContainer);\r\n","import { NOTIFICATION_VARIANTS } from 'altus-redux-middlewares';\r\n\r\nimport { ACTIONS } from 'features/wells/elements/wellboreElement.constants';\r\nimport wellboreService from 'services/wellbore.service';\r\n\r\nexport const requestWellboreRevisionForWellbore =\r\n (fieldId, wellboreId) => (dispatch) => {\r\n const payload = wellboreService.getWellboreRevisionWithElements(\r\n fieldId,\r\n wellboreId,\r\n );\r\n\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_GET_WELLBORE_ELEMENTS,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const requestWellboreRevisionFromWellcom =\r\n (fieldId, wellboreId) => (dispatch) => {\r\n const payload = wellboreService.getWellboreRevisionWithElementsFromWellcom(\r\n fieldId,\r\n wellboreId,\r\n );\r\n\r\n dispatch({\r\n payload,\r\n type: ACTIONS.REQUEST_GET_WELLBORE_ELEMENTS_FROM_WELLCOM,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]:\r\n 'Getting revision and elements from Wellcom API...',\r\n [NOTIFICATION_VARIANTS.ERROR]: 'Failed to get revision elements.',\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Rrevision elements retrieved successfully.',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n","import { useMemo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { Box, Grid, Button, IconButton } from '@material-ui/core';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\n\r\nimport { Table, TableRowActionsCell, TableRow } from 'altus-ui-components';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { toTaskSimulation } from 'utils/route.util';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\n\r\nimport { fluidTypeToString } from 'utils/fluids/mappers.utils';\r\n\r\nconst SimulationFluidsTable = ({\r\n taskId,\r\n disabled,\r\n projectId,\r\n simulationId,\r\n inPlanning,\r\n isCreateMode,\r\n toggleCreateMode,\r\n deleteSimulationFluid,\r\n defaultSimulationFluid,\r\n simulationFluids = EMPTY_MAP,\r\n TableRowComponent = TableRow,\r\n}) => {\r\n const lengthUnit = defaultSimulationFluid.getIn(['endDepth', 'unit']);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 4,\r\n id: 'endDepth',\r\n accessor: (simulationFluid) =>\r\n simulationFluid.getIn(['endDepth', 'roundedValue']),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (simulationFluid) => simulationFluid.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Type',\r\n accessor: (simulationFluid) => simulationFluid.get('fluidType'),\r\n Cell: ({ row }) => fluidTypeToString(row.original.get('fluidType')),\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Footer: ,\r\n Cell: ({ row }) => {\r\n if (disabled) return null;\r\n\r\n return (\r\n \r\n {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n deleteSimulationFluid(row.original.get('simulationFluidId'));\r\n }}\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [disabled, lengthUnit, deleteSimulationFluid],\r\n );\r\n\r\n return (\r\n \r\n \r\n {!disabled && (\r\n \r\n \r\n \r\n \r\n Add\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default SimulationFluidsTable;\r\n","import { Route, Switch } from 'react-router-dom';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport makeStyles from '@material-ui/styles/makeStyles';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport EditFluidForm from 'app/components/FluidsFormSection/FluidEditor/EditFluidForm';\r\nimport CreateFluidForm from 'app/components/FluidsFormSection/FluidEditor/CreateFluidForm';\r\nimport FluidEditorHeader from 'app/components/FluidsFormSection/FluidEditor/FluidEditorHeader';\r\n\r\nconst SimulationFluidEditor = ({\r\n disabled,\r\n isCreateMode,\r\n inPlanning,\r\n simulationFluid,\r\n toggleCreateMode,\r\n simulationFluidId,\r\n updateSimulationFluid,\r\n createSimulationFluid,\r\n defaultSimulationFluid,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n if (!isCreateMode && !simulationFluidId) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {isCreateMode && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n background: theme.altus.components.SortableListRow.background,\r\n },\r\n}));\r\n\r\nexport default SimulationFluidEditor;\r\n","import { Link } from 'react-router-dom';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n});\r\n\r\nconst SimulationFluidTableRow = ({ navigateToFluid, ...rest }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SimulationFluidTableRow;\r\n","import { useCallback, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport _isNil from 'lodash/isNil';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { useToggle, useRequest } from 'altus-hooks';\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport {\r\n requestSimulationFluids,\r\n requestCreateSimulationFluid,\r\n requestDeleteSimulationFluid,\r\n requestUpdateSimulationFluid,\r\n} from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport {\r\n getSimulationFromState,\r\n createSimulationFluidsSelector,\r\n} from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport routePaths from 'app/routePaths';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport simulationService from 'services/simulation.service';\r\nimport {\r\n toTaskSimulationFluid,\r\n toExecutionSimulationFluid,\r\n toTaskSimulation,\r\n} from 'utils/route.util';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\nimport SimulationFluidsTable from 'features/projects/tasks/task/simulation/fluids/components/SimulationFluidsTable';\r\nimport SimulationFluidEditor from 'features/projects/tasks/task/simulation/fluids/components/SimulationFluidEditor';\r\nimport SimulationFluidTableRow from 'features/projects/tasks/task/simulation/fluids/components/SimulationFluidTableRow';\r\n\r\nconst TaskSimulationFluidsContainer = ({ path }) => {\r\n const dispatch = useDispatch();\r\n const {\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId: selectedSimulationFluidId,\r\n } = useParams();\r\n const simulation =\r\n useSelector((state) => getSimulationFromState(state, simulationId)) ??\r\n EMPTY_MAP;\r\n const simulationFluids =\r\n useSelector(createSimulationFluidsSelector(simulationId)) ?? EMPTY_MAP;\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.REQUEST_SIMULATION_FLUIDS,\r\n ACTIONS.REQUEST_CREATE_SIMULATION_FLUID,\r\n ACTIONS.REQUEST_DELETE_SIMULATION_FLUID,\r\n ACTIONS.REQUEST_UPDATE_SIMULATION_FLUID,\r\n ),\r\n );\r\n const [isCreateMode, toggleCreateMode] = useToggle();\r\n\r\n // TODO/IMPROVE @SS: This is a bit frail but the fluid container logic is pretty locked\r\n // to the planning and routes and should probably be re-designed to be more route agnostic\r\n const inPlanning = path === routePaths.plan.task.simulation.fluids.match;\r\n const onRedirect = (fluidId = null) =>\r\n inPlanning\r\n ? _isNil(fluidId)\r\n ? toTaskSimulation(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n routePaths.plan.task.simulation.fluids.root,\r\n )\r\n : toTaskSimulationFluid(projectId, taskId, simulationId, fluidId)\r\n : toExecutionSimulationFluid(projectId, taskId, simulationId, fluidId);\r\n\r\n useEffect(\r\n () => dispatch(requestSimulationFluids(projectId, taskId, simulationId)),\r\n [projectId, taskId, simulationId, dispatch],\r\n );\r\n\r\n const getDefaultSimulationFluid = useCallback(\r\n () =>\r\n simulationService\r\n .getDefaultSimulationFluid(projectId, taskId, simulationId)\r\n .then(simulationMappers.SimulationFluid.from),\r\n [taskId, projectId, simulationId],\r\n );\r\n const [defaultSimulationFluid = EMPTY_MAP] = useRequest(\r\n getDefaultSimulationFluid,\r\n );\r\n\r\n const createSimulationFluid = (\r\n simulationFluid,\r\n { setSubmitting, setStatus },\r\n ) =>\r\n dispatch(\r\n requestCreateSimulationFluid(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluid,\r\n setSubmitting,\r\n setStatus,\r\n onRedirect,\r\n ),\r\n );\r\n\r\n const updateSimulationFluid = (\r\n simulationFluid,\r\n { setSubmitting, setStatus },\r\n ) =>\r\n dispatch(\r\n requestUpdateSimulationFluid(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluid.simulationFluidId,\r\n simulationFluid,\r\n setSubmitting,\r\n setStatus,\r\n ),\r\n );\r\n\r\n const deleteSimulationFluid = (simulationFluidId) =>\r\n dispatch(\r\n requestDeleteSimulationFluid(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationFluidId,\r\n simulationFluidId.toString() === selectedSimulationFluidId\r\n ? onRedirect\r\n : null,\r\n ),\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => {\r\n const simulationFluidId = props.item.get('simulationFluidId').toString();\r\n const navigateToFluid = inPlanning\r\n ? toTaskSimulationFluid\r\n : toExecutionSimulationFluid;\r\n\r\n return (\r\n \r\n navigateToFluid(projectId, taskId, simulationId, simulationFluidId)\r\n }\r\n />\r\n );\r\n },\r\n [taskId, projectId, simulationId, selectedSimulationFluidId, inPlanning],\r\n );\r\n\r\n const selectedSimulationFluid = simulationFluids.get(\r\n selectedSimulationFluidId,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Fluids\r\n \r\n \r\n \r\n \r\n \r\n Fluid Editor\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TaskSimulationFluidsContainer;\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport { requestUpdateSimulation } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { getSimulationFromState } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport { SimulationFormFields as FormFields } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\n\r\nconst TaskSimulationCommentContainer = ({\r\n taskId,\r\n classes,\r\n projectId,\r\n simulationId,\r\n simulation = EMPTY_MAP,\r\n dispatchUpdateSimulation,\r\n}) => {\r\n const onSubmit = useCallback(\r\n (simulation) =>\r\n dispatchUpdateSimulation(projectId, taskId, simulationId, simulation),\r\n [projectId, taskId, simulationId, dispatchUpdateSimulation],\r\n );\r\n\r\n const initialValues = simulation.toJS();\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n textAreaField: {\r\n '&:disabled': {\r\n color: theme.palette.text.primary,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { simulationId }) => ({\r\n simulation: getSimulationFromState(state, simulationId),\r\n }),\r\n {\r\n dispatchUpdateSimulation: requestUpdateSimulation,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(TaskSimulationCommentContainer);\r\n","import { Formik, Field } from 'formik';\r\nimport { useParams } from 'react-router-dom';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport { Grid, Typography, InputAdornment } from '@material-ui/core';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { required, requiredBetween } from 'utils/validation.util';\r\nimport { formatQuantity } from 'utils/format.util';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport {\r\n SimulationDirection,\r\n SimulationFormFields as FormFields,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { requestUpdateSimulation } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport {\r\n getSimulationFromState,\r\n createSimulationCompressionDepthByDirectionSelector,\r\n} from 'features/projects/tasks/task/simulation/simulation.selectors';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n gridStyle: {\r\n border: `1px solid ${theme.palette.grey[600]}`,\r\n padding: theme.spacing(2),\r\n },\r\n labelStyle: {\r\n fontSize: '16px',\r\n marginBottom: '5px',\r\n marginTop: '10px',\r\n },\r\n simulationSelectorStyle: {\r\n border: `1px solid ${theme.palette.grey[600]}`,\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n iconStyle: {\r\n verticalAlign: 'top',\r\n marginRight: 10,\r\n },\r\n }),\r\n);\r\n\r\nconst TaskSimulationOptionsContainer = () => {\r\n const dispatch = useDispatch();\r\n const classes = useStyles();\r\n const { projectId, taskId, simulationId } = useParams();\r\n const simulation =\r\n useSelector((state) => getSimulationFromState(state, simulationId)) ??\r\n EMPTY_MAP;\r\n let compressionDepth = useSelector(\r\n createSimulationCompressionDepthByDirectionSelector(simulationId),\r\n );\r\n const compressionDepthRih = useSelector(\r\n createSimulationCompressionDepthByDirectionSelector(\r\n simulationId,\r\n SimulationDirection.RUN_IN_HOLE,\r\n ),\r\n );\r\n const compressionDepthPooh = useSelector(\r\n createSimulationCompressionDepthByDirectionSelector(\r\n simulationId,\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n ),\r\n );\r\n\r\n // compression depth - take smallest depth out of two data sets as instructed by Torben\r\n if (!compressionDepth) {\r\n if (compressionDepthRih && compressionDepthPooh) {\r\n compressionDepth = { runInHole: undefined, pullOutOfHole: undefined };\r\n const rihValue =\r\n compressionDepthRih?.runInHole > compressionDepthPooh?.runInHole\r\n ? compressionDepthPooh.runInHole\r\n : compressionDepthRih.runInHole;\r\n\r\n if (rihValue) {\r\n compressionDepth.runInHole = rihValue;\r\n }\r\n\r\n const poohValue =\r\n compressionDepthRih?.pullOutOfHole > compressionDepthPooh?.pullOutOfHole\r\n ? compressionDepthPooh.pullOutOfHole\r\n : compressionDepthRih.pullOutOfHole;\r\n\r\n if (poohValue) {\r\n compressionDepth.pullOutOfHole = poohValue;\r\n }\r\n }\r\n }\r\n\r\n const isPlanned = simulation.get('isPlanned');\r\n\r\n return (\r\n \r\n dispatch(\r\n requestUpdateSimulation(projectId, taskId, simulationId, simulation),\r\n )\r\n }\r\n initialValues={simulation.toJS()}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n Depth of interest\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n between 0 and 1\r\n \r\n ),\r\n }}\r\n />\r\n \r\n \r\n \r\n Weakpoint Limits\r\n \r\n \r\n \r\n %\r\n ),\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Working Limits\r\n \r\n \r\n \r\n % of breaking strength\r\n \r\n ),\r\n }}\r\n />\r\n \r\n \r\n {compressionDepth && (\r\n \r\n \r\n Compression Depth\r\n \r\n {compressionDepth.runInHole && (\r\n \r\n \r\n \r\n Cable compression is detected while Run In Hole at{' '}\r\n {formatQuantity(compressionDepth.runInHole)}. You cannot get\r\n below this depth with the current input parameters.\r\n \r\n \r\n )}\r\n {compressionDepth.pullOutOfHole && (\r\n \r\n \r\n \r\n Cable compression is detected while Pull Out Of Hole at{' '}\r\n {formatQuantity(compressionDepth.pullOutOfHole)}.\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TaskSimulationOptionsContainer;\r\n","import { compose } from 'redux';\r\nimport { Formik, Form } from 'formik';\r\nimport { useMemo, useCallback } from 'react';\r\nimport Close from '@material-ui/icons/Close';\r\nimport Check from '@material-ui/icons/Check';\r\nimport { IconButton } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableRow, TableCell, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nconst CreateSimulationParameterRow = ({\r\n classes,\r\n columns,\r\n direction,\r\n isCreateMode,\r\n toggleCreateMode,\r\n simulationParameters,\r\n createSimulationParameter,\r\n}) => {\r\n const onSubmit = useCallback(\r\n (simulationParameter, formik) =>\r\n createSimulationParameter(simulationParameter, toggleCreateMode, formik),\r\n [toggleCreateMode, createSimulationParameter],\r\n );\r\n\r\n // simplify getting 'xs', 'id' and 'Header' values from column\r\n const renderCell = (index, render) => {\r\n const column = columns[index];\r\n\r\n return (\r\n \r\n {invokeIfFunction(render, column)}\r\n \r\n );\r\n };\r\n\r\n const lastSimulationParameter = simulationParameters.last();\r\n\r\n const initialValues = useMemo(\r\n () => ({\r\n direction,\r\n endDepth: undefined,\r\n startDepth: undefined,\r\n gasRate: lastSimulationParameter?.get('gasRate'),\r\n cableSpeed: lastSimulationParameter?.get('cableSpeed'),\r\n liquidRate: lastSimulationParameter?.get('liquidRate'),\r\n tractorForce: lastSimulationParameter?.get('tractorForce'),\r\n axialForceOnEnd: lastSimulationParameter?.get('axialForceOnEnd'),\r\n wellheadPressure: lastSimulationParameter?.get('wellheadPressure'),\r\n }),\r\n [direction, lastSimulationParameter],\r\n );\r\n\r\n if (!isCreateMode) return null;\r\n\r\n return (\r\n \r\n {({ isValid, isSubmitting, handleSubmit, dirty }) => (\r\n
\r\n \r\n {renderCell(0)}\r\n {renderCell(1, (column) => (\r\n \r\n ))}\r\n {renderCell(2, (column) => (\r\n \r\n ))}\r\n {renderCell(3, (column) => (\r\n \r\n ))}\r\n {renderCell(4, (column) => (\r\n \r\n ))}\r\n {renderCell(5, (column) => (\r\n \r\n ))}\r\n {renderCell(6, (column) => (\r\n \r\n ))}\r\n {renderCell(7, (column) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n saveButton: {\r\n background: theme.palette.success.dark,\r\n '&:hover': {\r\n background: theme.palette.success.main,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CreateSimulationParameterRow);\r\n","import { Field } from 'formik';\r\nimport classNames from 'classnames';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { useCallback, useMemo } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\nimport { Box, Grid, Button, IconButton } from '@material-ui/core';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { required } from 'utils/validation.util';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport CreateSimulationParameterRow from 'features/projects/tasks/task/simulation/parameters/components/CreateSimulationParameterRow';\r\n\r\nconst SimulationParametersTable = ({\r\n classes,\r\n disabled,\r\n direction,\r\n noItemsMessage,\r\n createSimulationParameter,\r\n deleteSimulationParameter,\r\n updateSimulationParameter,\r\n defaultSimulationParameter,\r\n simulationParameters = EMPTY_MAP,\r\n}) => {\r\n const [isCreateMode, toggleCreateMode] = useToggle();\r\n\r\n const lengthUnit = defaultSimulationParameter.getIn(['endDepth', 'unit']);\r\n const forceUnit = defaultSimulationParameter.getIn(['tractorForce', 'unit']);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 3,\r\n id: 'startDepth',\r\n Header: (\r\n \r\n ),\r\n accessor: (_parameter, index, _row, rows) => {\r\n // display the previous endDepth as the startDepth of this parameter\r\n var previousParameter = rows[index - 1];\r\n\r\n return (\r\n previousParameter?.original.getIn(['endDepth', 'roundedValue']) ?? 0\r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'endDepth',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) => parameter.get(['endDepth', 'roundedValue']),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 3,\r\n id: 'cableSpeed',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) => parameter.get(['cableSpeed', 'roundedValue']),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 3,\r\n id: 'wellheadPressure',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) =>\r\n parameter.get(['wellheadPressure', 'roundedValue']),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 3,\r\n id: 'liquidRate',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) => parameter.get(['liquidRate', 'roundedValue']),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 3,\r\n id: 'gasRate',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) => parameter.get(['gasRate', 'roundedValue']),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 3,\r\n id: 'tractorForce',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) =>\r\n parameter.get(['tractorForce', 'roundedValue']),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 3,\r\n id: 'axialForceOnEnd',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) =>\r\n parameter.get(['axialForceOnEnd', 'roundedValue']),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Footer: ,\r\n Cell: ({ row }) => {\r\n if (row.index === 0) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n deleteSimulationParameter(\r\n row.original.get('simulationParameterId'),\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [\r\n disabled,\r\n forceUnit,\r\n lengthUnit,\r\n deleteSimulationParameter,\r\n defaultSimulationParameter,\r\n ],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateSimulationParameter],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Add\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n disabled: {\r\n opacity: 0.3,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SimulationParametersTable);\r\n","import { EMPTY_LIST } from 'app/app.constants';\r\nimport { createSelector } from 'utils/app.util';\r\n\r\nconst getSimulationParametersSelector = (state) =>\r\n state.getIn(['entity', 'simulationParameter']);\r\n\r\nconst groupBySimulationId = (simulationParameter) =>\r\n simulationParameter.get('simulationId').toString();\r\n\r\nconst groupBySimulationDirection = (simulationParameter) =>\r\n simulationParameter.get('direction');\r\n\r\nexport const createSimulationParametersSelector = (simulationId, direction) =>\r\n createSelector(getSimulationParametersSelector, (simulationParameters) =>\r\n simulationParameters\r\n .groupBy(groupBySimulationId)\r\n .get(simulationId.toString(), EMPTY_LIST)\r\n .groupBy(groupBySimulationDirection)\r\n .get(direction),\r\n );\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { useCallback, useEffect } from 'react';\r\nimport { Grid, Typography, MenuItem } from '@material-ui/core';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport {\r\n loadSimulationParametersPage,\r\n requestUpdateSimulationParameter,\r\n requestCreateSimulationParameter,\r\n requestDeleteSimulationParameter,\r\n} from 'features/projects/tasks/task/simulation/parameters/simulationParameter.actions';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport simulationService from 'services/simulation.service';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport simulationMappers from 'features/projects/tasks/task/simulation/simulation.mappers';\r\nimport {\r\n SimulationDirection,\r\n FlowPath,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { requestUpdateSimulation } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { getSimulationFromState } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/parameters/simulationParameter.constants';\r\nimport { SimulationFormFields as FormFields } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport SimulationParametersTable from 'features/projects/tasks/task/simulation/parameters/components/SimulationParametersTable';\r\nimport { createSimulationParametersSelector } from 'features/projects/tasks/task/simulation/parameters/simulationParameter.selectors';\r\nimport { flowPathToString } from 'features/projects/tasks/task/simulation/simulation.mappers';\r\n\r\nconst TaskSimulationParametersContainer = ({\r\n taskId,\r\n dataState,\r\n projectId,\r\n simulationId,\r\n dispatchOnLoad,\r\n simulation = EMPTY_MAP,\r\n simulationParametersRIH,\r\n simulationParametersPOOH,\r\n dispatchUpdateSimulation,\r\n dispatchRequestDeleteSimulationParameter,\r\n dispatchRequestCreateSimulationParameter,\r\n dispatchRequestUpdateSimulationParameter,\r\n}) => {\r\n const getDefaultSimulationParameter = useCallback(\r\n () =>\r\n simulationService\r\n .getDefaultSimulationParameter(projectId, taskId, simulationId)\r\n .then((simulationParameter) =>\r\n simulationMappers.SimulationParameter.from(simulationParameter),\r\n ),\r\n [taskId, projectId, simulationId],\r\n );\r\n\r\n const [defaultSimulationParameter = EMPTY_MAP] = useRequest(\r\n getDefaultSimulationParameter,\r\n );\r\n\r\n useEffect(\r\n () => dispatchOnLoad(projectId, taskId, simulationId),\r\n [projectId, taskId, simulationId, dispatchOnLoad],\r\n );\r\n\r\n const onSubmit = useCallback(\r\n (simulation) =>\r\n dispatchUpdateSimulation(projectId, taskId, simulationId, simulation),\r\n [projectId, taskId, simulationId, dispatchUpdateSimulation],\r\n );\r\n\r\n const deleteSimulationParameter = useCallback(\r\n (simulationParameterId) =>\r\n dispatchRequestDeleteSimulationParameter(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameterId,\r\n ),\r\n [projectId, taskId, simulationId, dispatchRequestDeleteSimulationParameter],\r\n );\r\n\r\n const updateSimulationParameter = useCallback(\r\n (simulationParameter, { setSubmitting, setStatus }) =>\r\n dispatchRequestUpdateSimulationParameter(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameter.simulationParameterId,\r\n simulationParameter,\r\n setSubmitting,\r\n setStatus,\r\n ),\r\n [projectId, taskId, simulationId, dispatchRequestUpdateSimulationParameter],\r\n );\r\n\r\n const createSimulationParameter = useCallback(\r\n (simulationParameter, callback, { setSubmitting, setStatus }) =>\r\n dispatchRequestCreateSimulationParameter(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n simulationParameter,\r\n setSubmitting,\r\n setStatus,\r\n callback,\r\n ),\r\n [projectId, taskId, simulationId, dispatchRequestCreateSimulationParameter],\r\n );\r\n\r\n const initialValues = simulation.toJS();\r\n const isPlanned = simulation.get('isPlanned');\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {Object.values(FlowPath).map((type) => (\r\n \r\n {flowPathToString(type)}\r\n \r\n ))}\r\n \r\n \r\n \r\n {[\r\n {\r\n title: 'RIH',\r\n items: simulationParametersRIH,\r\n direction: SimulationDirection.RUN_IN_HOLE,\r\n noItemsMessage: 'No RIH parameters added yet...',\r\n },\r\n {\r\n title: 'POOH',\r\n items: simulationParametersPOOH,\r\n direction: SimulationDirection.PULL_OUT_OF_HOLE,\r\n noItemsMessage: 'No POOH parameters added yet...',\r\n },\r\n ].map(({ items, title, direction, noItemsMessage }) => (\r\n \r\n {title}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (_initialState, { simulationId }) => {\r\n const RIHParametersSelector = createSimulationParametersSelector(\r\n simulationId,\r\n SimulationDirection.RUN_IN_HOLE,\r\n );\r\n\r\n const POOHParametersSelector = createSimulationParametersSelector(\r\n simulationId,\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n );\r\n\r\n return (state) => ({\r\n simulationParametersRIH: RIHParametersSelector(state),\r\n simulationParametersPOOH: POOHParametersSelector(state),\r\n simulation: getSimulationFromState(state, simulationId),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.LOAD_SIMULATION_PARAMETERS_PAGE,\r\n ACTIONS.REQUEST_CREATE_SIMULATION_PARAMETER,\r\n ACTIONS.REQUEST_DELETE_SIMULATION_PARAMETER,\r\n ),\r\n });\r\n },\r\n {\r\n dispatchOnLoad: loadSimulationParametersPage,\r\n dispatchRequestDeleteSimulationParameter:\r\n requestDeleteSimulationParameter,\r\n dispatchRequestCreateSimulationParameter:\r\n requestCreateSimulationParameter,\r\n dispatchRequestUpdateSimulationParameter:\r\n requestUpdateSimulationParameter,\r\n dispatchUpdateSimulation: requestUpdateSimulation,\r\n },\r\n ),\r\n)(TaskSimulationParametersContainer);\r\n","import { Grid, Typography } from '@material-ui/core';\r\n\r\nconst TemperatureGradientField = ({ value, unit }) => (\r\n {`${value.toFixed(5)} ${unit}`}\r\n);\r\n\r\nconst SimulationTemperatureGradient = ({ simulation }) => {\r\n const temperatureGradient = simulation.get('temperatureGradient');\r\n\r\n if (!temperatureGradient) return null;\r\n\r\n const degreesUnit = simulation.getIn(['surfaceTemperature', 'unit']);\r\n const lengthUnit = simulation.getIn(['wellboreVerticalDepth', 'unit']);\r\n\r\n return (\r\n \r\n \r\n \r\n Temperature Gradient:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SimulationTemperatureGradient;\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Form, Formik, Field } from 'formik';\r\nimport { Grid, Box } from '@material-ui/core';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { required } from 'utils/validation.util';\r\nimport { formatQuantity } from 'utils/format.util';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { requestUpdateSimulation } from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { getSimulationFromState } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport SimulationTemperatureGradient from 'features/projects/tasks/task/simulation/components/SimulationTemperatureGradient';\r\n\r\nconst TaskSimulationTemperatureContainer = ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n simulation = EMPTY_MAP,\r\n dispatchUpdateSimulation,\r\n}) => {\r\n const onSubmit = useCallback(\r\n (simulation) =>\r\n dispatchUpdateSimulation(projectId, taskId, simulationId, simulation),\r\n [projectId, taskId, simulationId, dispatchUpdateSimulation],\r\n );\r\n\r\n const verticalDepth = formatQuantity(simulation.get('wellboreVerticalDepth'));\r\n const bottomTemperature = formatQuantity(simulation.get('bottomTemperature'));\r\n\r\n const surfaceTemperature = formatQuantity(\r\n simulation.get('surfaceTemperature'),\r\n );\r\n\r\n if (simulation.get('isPlanned')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { simulationId }) => ({\r\n simulation: getSimulationFromState(state, simulationId),\r\n }),\r\n {\r\n dispatchUpdateSimulation: requestUpdateSimulation,\r\n },\r\n ),\r\n)(TaskSimulationTemperatureContainer);\r\n","import { Field } from 'formik';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { IconButton } from '@material-ui/core';\r\nimport { ExpandMore, ExpandLess } from '@material-ui/icons';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport { wellboreSectionTypeToString } from 'features/wells/sections/wellboreSection.mappers';\r\n\r\nconst getSubRows = (row) => {\r\n if (row.original) return;\r\n\r\n return row.get('wellboreSectionNipples', EMPTY_LIST).valueSeq();\r\n};\r\n\r\nconst SimulationWellboreSectionsTable = ({\r\n updateWellboreSection,\r\n defaultWellboreSection,\r\n simulation = EMPTY_MAP,\r\n wellboreSections = EMPTY_MAP,\r\n}) => {\r\n const lengthUnit = defaultWellboreSection.getIn(['top', 'unit']);\r\n\r\n const isSimulationPlanned = simulation.get('isPlanned');\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Type',\r\n Cell: ({ row }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n const type = isNipple\r\n ? row.original.get('type')\r\n : wellboreSectionTypeToString(row.original.get('type'));\r\n\r\n return type ?? N/A;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'section',\r\n Header: 'Section',\r\n accessor: (_, index, row) => {\r\n if (row.id.includes('.')) {\r\n const indexes = row.id.split('.');\r\n return `Nipple ${Number(indexes[0]) + 1}.${Number(indexes[1]) + 1}`;\r\n }\r\n\r\n return index + 1;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'top',\r\n accessor: (wellboreSection) =>\r\n wellboreSection.getIn(['top', 'roundedValue']),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'bottom',\r\n accessor: (wellboreSection) =>\r\n wellboreSection.getIn(['bottom', 'roundedValue'], null),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'length',\r\n accessor: (wellboreSection) =>\r\n wellboreSection.getIn(['length', 'roundedValue'], null),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'innerDiameter',\r\n accessor: (wellboreSection) =>\r\n wellboreSection.getIn(['innerDiameter', 'roundedValue'], null),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Friction in',\r\n accessor: (wellboreSection) =>\r\n wellboreSection.get('frictionFactorIn', null),\r\n Cell: ({ row, value }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n if (isNipple || isSimulationPlanned) {\r\n return value;\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Friction out',\r\n accessor: (wellboreSection) =>\r\n wellboreSection.get('frictionFactorOut', null),\r\n Cell: ({ row, value }) => {\r\n const isNipple = row.original.get('isNipple');\r\n\r\n if (isNipple || isSimulationPlanned) {\r\n return value;\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [lengthUnit, defaultWellboreSection, isSimulationPlanned],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateWellboreSection],\r\n );\r\n\r\n const initialState = useMemo(\r\n () => ({\r\n expanded: wellboreSections.toArray().reduce(\r\n (result, _wellboreSection, index) => ({\r\n ...result,\r\n [index]: true,\r\n }),\r\n {},\r\n ),\r\n }),\r\n [wellboreSections],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\nexport default SimulationWellboreSectionsTable;\r\n","import { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport projectWellboreSectionService from 'services/projectWellboreSection.service';\r\nimport wellboreSectionsMappers from 'features/wells/sections/wellboreSection.mappers';\r\n\r\nconst useDefaultProjectWellboreSection = (projectId) => {\r\n const getDefaultProjectWellboreSection = useCallback(\r\n () =>\r\n projectWellboreSectionService\r\n .getDefaultProjectWellboreSection(projectId)\r\n .then((wellboreSection) =>\r\n wellboreSectionsMappers.WellboreSection.from(wellboreSection),\r\n ),\r\n [projectId],\r\n );\r\n\r\n const [defaultProjectWellboreWellboreSection = EMPTY_MAP] = useRequest(\r\n getDefaultProjectWellboreSection,\r\n );\r\n\r\n return defaultProjectWellboreWellboreSection;\r\n};\r\n\r\nexport default useDefaultProjectWellboreSection;\r\n","import { compose } from 'redux';\r\nimport { Grid, Box } from '@material-ui/core';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { useCallback, useEffect, useMemo } from 'react';\r\n\r\nimport {\r\n getSimulationFromState,\r\n createSimulationWellboreSectionsSelector,\r\n} from 'features/projects/tasks/task/simulation/simulation.selectors';\r\n\r\nimport {\r\n updateWellboreSectionForSimulation,\r\n requestWellboreSectionsForSimulation,\r\n} from 'features/projects/tasks/task/simulation/simulation.actions';\r\n\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport { toProjectDetails } from 'utils/route.util';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport SimulationWellboreSectionsTable from './SimulationWellboreSectionsTable';\r\nimport { ACTIONS as WELL_ACTIONS } from 'features/wells/sections/wellboreSection.constants';\r\nimport useDefaultProjectWellboreSection from 'features/projects/hooks/useDefaultProjectWellboreSection';\r\n\r\nconst TaskSimulationWellboreSectionsContainer = ({\r\n taskId,\r\n projectId,\r\n simulationId,\r\n dispatchRequestWellboreSectionsForSimulation,\r\n dispatchUpdateRequestWellboreSectionForSimulation,\r\n}) => {\r\n useEffect(() => {\r\n dispatchRequestWellboreSectionsForSimulation(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n }, [\r\n projectId,\r\n taskId,\r\n simulationId,\r\n dispatchRequestWellboreSectionsForSimulation,\r\n ]);\r\n\r\n const updateSimulationWellboreSection = useCallback(\r\n (wellboreSection) =>\r\n dispatchUpdateRequestWellboreSectionForSimulation(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n wellboreSection.wellboreSectionId,\r\n wellboreSection,\r\n ),\r\n [\r\n taskId,\r\n projectId,\r\n simulationId,\r\n dispatchUpdateRequestWellboreSectionForSimulation,\r\n ],\r\n );\r\n\r\n const simulationWellboreSectionSelector = useMemo(\r\n () => createSimulationWellboreSectionsSelector(simulationId),\r\n [simulationId],\r\n );\r\n\r\n const wellboreSections = useSelector(simulationWellboreSectionSelector);\r\n\r\n const simulation = useSelector((state) =>\r\n getSimulationFromState(state, simulationId),\r\n );\r\n\r\n const defaultWellboreSection = useDefaultProjectWellboreSection(projectId);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n Well Sections\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n WELL_ACTIONS.REQUEST_WELLBORE_SECTIONS,\r\n ),\r\n }),\r\n {\r\n dispatchRequestWellboreSectionsForSimulation:\r\n requestWellboreSectionsForSimulation,\r\n dispatchUpdateRequestWellboreSectionForSimulation:\r\n updateWellboreSectionForSimulation,\r\n },\r\n ),\r\n)(TaskSimulationWellboreSectionsContainer);\r\n","import { EMPTY_LIST } from 'app/app.constants';\r\nimport { Grid, MenuItem, Typography } from '@material-ui/core';\r\nimport { Table } from 'altus-ui-components';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useParams } from 'react-router-dom';\r\nimport { Field } from 'formik';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport { FluidSelectionType } from '../simulationDynamicToolParameter.constants';\r\nimport { fluidSelectionTypeToString } from '../../simulation.mappers';\r\nimport * as actions from '../simulationDynamicToolParameter.actions';\r\n\r\nexport const SimulationDynamicToolParameterFluidSelectionTable = ({\r\n data = EMPTY_LIST,\r\n disabled,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const { projectId, taskId, simulationId } = useParams();\r\n\r\n const updateDynamicSimulationParameter = (\r\n parameter,\r\n { setSubmitting, setStatus },\r\n ) =>\r\n dispatch(\r\n actions.requestUpdateSimulationDynamicToolParameter(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n parameter.simulationDynamicToolParameterId,\r\n parameter,\r\n setSubmitting,\r\n setStatus,\r\n ),\r\n );\r\n\r\n const columns = [\r\n {\r\n xs: 4,\r\n id: 'toolName',\r\n Header: 'Name',\r\n Cell: ({ row }) => row.original.get('toolName'),\r\n },\r\n {\r\n xs: 4,\r\n id: 'fluidSelectionRunInHole',\r\n Header: 'Run In Hole',\r\n Cell: () => {\r\n return (\r\n \r\n {Object.values(FluidSelectionType).map((type) => (\r\n \r\n {fluidSelectionTypeToString(type)}\r\n \r\n ))}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'fluidSelectionPullOutOfHole',\r\n Header: 'Pull Out Of Hole',\r\n Cell: () => {\r\n return (\r\n \r\n {Object.values(FluidSelectionType).map((type) => (\r\n \r\n {fluidSelectionTypeToString(type)}\r\n \r\n ))}\r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n const renderTableRowComponent = (props) => (\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n Fluid Selection\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import RadioGroupField from 'app/components/form/RadioGroupField';\r\n\r\nconst TableRowRadioGroupFieldFormik = ({\r\n field,\r\n options,\r\n disabled,\r\n ...props\r\n}) => {\r\n const updatedOptions = options.map((o) => ({ ...o, disabled }));\r\n\r\n return ;\r\n};\r\n\r\nexport default TableRowRadioGroupFieldFormik;\r\n","import { useDispatch } from 'react-redux';\r\nimport { useParams } from 'react-router-dom';\r\nimport { Field } from 'formik';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport * as actions from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.actions';\r\nimport TableRowRadioGroupFieldFormik from 'app/components/form/formik/TableRowRadioGroupFieldFormik';\r\n\r\nexport const SimulationDynamicToolParameterJarActivationTable = ({\r\n data = EMPTY_LIST,\r\n forceUnit = '',\r\n disabled,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const { projectId, taskId, simulationId } = useParams();\r\n\r\n const updateDynamicSimulationParameter = (\r\n parameter,\r\n { setSubmitting, setStatus },\r\n ) =>\r\n dispatch(\r\n actions.requestUpdateSimulationDynamicToolParameter(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n parameter.simulationDynamicToolParameterId,\r\n parameter,\r\n setSubmitting,\r\n setStatus,\r\n true,\r\n ),\r\n );\r\n\r\n const columns = [\r\n {\r\n xs: 5,\r\n id: 'toolName',\r\n Header: 'Name',\r\n Cell: ({ row }) => row.original.get('toolName'),\r\n },\r\n {\r\n xs: 5,\r\n id: 'jarActivationForce',\r\n Header: (\r\n \r\n ),\r\n accessor: (parameter) => parameter.get('jarActivationForce'),\r\n Cell: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'jarActivationIsActive',\r\n Header: 'Active',\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n const renderTableRowComponent = (props) => (\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n Jar Activation\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import { useSelector } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport {\r\n SimulationDynamicToolParameterFluidSelectionTable,\r\n SimulationDynamicToolParameterJarActivationTable,\r\n} from './components';\r\nimport { useInitializeTaskSimulationDynamicToolParametersContainer } from './hooks/useInitializeTaskSimulationDynamicToolParametersContainer';\r\nimport { DynamicToolParameter } from './simulationDynamicToolParameter.constants';\r\nimport { getSimulationFromState } from '../simulation.selectors';\r\n\r\nconst TaskSimulationDynamicToolParametersContainer = ({\r\n projectId,\r\n taskId,\r\n simulationId,\r\n}) => {\r\n const parameters = useInitializeTaskSimulationDynamicToolParametersContainer(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n const simulation =\r\n useSelector((state) => getSimulationFromState(state, simulationId)) ??\r\n EMPTY_MAP;\r\n const isPlanned = simulation.get('isPlanned');\r\n const forceUnit = simulation.getIn(['stuffingBoxFriction', 'unit']);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TaskSimulationDynamicToolParametersContainer;\r\n","import { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport * as actions from 'features/projects/tasks/task/simulation/dynamicToolParameters/simulationDynamicToolParameter.actions';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nexport const useInitializeTaskSimulationDynamicToolParametersContainer = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => {\r\n const dispatch = useDispatch();\r\n\r\n const selectedToolString = useSelector((state) =>\r\n state.getIn(['entity', 'simulation', simulationId, 'toolstringId']),\r\n );\r\n const parameters =\r\n useSelector((state) =>\r\n state\r\n .getIn(['entity', 'simulationDynamicToolParameter'])\r\n .groupBy((p) => p.get('dynamicToolParameter'))\r\n .map((v) => v.toList()),\r\n ) ?? EMPTY_MAP;\r\n\r\n // Fetch dynamic tool parameters for simulation\r\n useEffect(() => {\r\n if (simulationId) {\r\n dispatch(\r\n actions.requestSimulationDynamicToolParameters(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n ),\r\n );\r\n return () => {\r\n return dispatch(actions.receiveSimulationDynamicToolParameters());\r\n };\r\n }\r\n }, [projectId, taskId, simulationId, selectedToolString, dispatch]);\r\n\r\n return parameters;\r\n};\r\n","import { compose } from 'redux';\r\nimport { Chip } from '@material-ui/core';\r\nimport { useCallback, useMemo } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { MultiSelectModal } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport TextFieldV2 from 'app/components/form/TextFieldV2';\r\n\r\nconst modalId = 'SERVICE_SELECT_MODAL_ID';\r\n\r\nconst validate = () => true;\r\n\r\nconst getSubmitLabel = (selectedItems) =>\r\n selectedItems.size ? `Save (${selectedItems.size})` : 'Save';\r\n\r\nconst getServiceName = (department) => department.get('name');\r\n\r\nconst ServiceSelectField = ({ label, input, classes, disabled, services }) => {\r\n const { onChange, value = EMPTY_LIST, name } = input;\r\n\r\n const [isOpen, toggleModal] = useModal(modalId);\r\n\r\n const renderValue = useCallback(\r\n () =>\r\n value\r\n .sortBy((service) => service.get('name'))\r\n .map((service) => (\r\n \r\n )),\r\n [value, classes],\r\n );\r\n\r\n const initialSelectedItems = useMemo(\r\n () =>\r\n value\r\n .map((service) => service.get('id'))\r\n .map((serviceId) => services.get(serviceId.toString()))\r\n .toSet(),\r\n [value, services],\r\n );\r\n\r\n const onSubmit = useCallback(\r\n (selectedServices) => {\r\n onChange(selectedServices);\r\n toggleModal();\r\n },\r\n [onChange, toggleModal],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {EMPTY_LIST.toArray()}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n chip: {\r\n height: 27,\r\n marginLeft: 0,\r\n margin: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ServiceSelectField);\r\n","import { Field } from 'redux-form/immutable';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport ServiceSelectField from 'app/components/ServiceSelectField';\r\nimport { TASK_FORMS } from 'features/projects/tasks/tasks.constants';\r\nimport useTaskTypes from 'features/projects/tasks/hooks/useTaskTypes';\r\nimport DepartmentSelectField from 'app/components/DepartmentSelectField';\r\nimport TaskTypeSelect from 'features/projects/tasks/components/TaskTypeSelect';\r\nimport QuantityTextFieldReduxForm from 'app/components/form/redux-form/QuantityTextFieldReduxForm';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\n\r\nconst { NEW_TASK } = TASK_FORMS;\r\n\r\nconst CreateTaskForm = ({ services, departments }) => {\r\n const [taskTypes, taskTypesDataState] = useTaskTypes();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateTaskForm;\r\n","import classNames from 'classnames';\r\nimport { SortableElement } from 'react-sortable-hoc';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { PureComponent, createElement, Fragment } from 'react';\r\n\r\nimport {\r\n Grid,\r\n Paper,\r\n Accordion,\r\n AccordionDetails,\r\n AccordionActions,\r\n} from '@material-ui/core';\r\n\r\nimport { KEYS } from 'app/app.constants';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport { IconButton } from 'app/components/withTooltip';\r\n\r\nconst styles = (theme) => {\r\n return {\r\n paper: {\r\n 'display': 'flex',\r\n 'minHeight': 45,\r\n 'outline': 'none',\r\n 'padding': '5px 24px',\r\n 'position': 'relative',\r\n 'background': theme.palette.table.row.main,\r\n 'marginBottom': 2,\r\n '&:hover': {\r\n background: theme.palette.table.row.hover,\r\n },\r\n },\r\n selected: {\r\n 'background': theme.palette.table.row.selected,\r\n '&:hover': {\r\n background: theme.palette.table.row.selected,\r\n },\r\n },\r\n paperExpandable: {\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '&$header': {\r\n '&:hover': {\r\n background: theme.palette.table.header.hover,\r\n },\r\n },\r\n },\r\n paperExpanded: {\r\n borderBottom: 0,\r\n },\r\n expansionPanelRoot: {\r\n 'backgroundColor': theme.palette.table.row.main,\r\n '&:before': {\r\n height: 0,\r\n },\r\n '&.Mui-expanded': {\r\n marginTop: 0,\r\n marginBottom: 16,\r\n width: '100%',\r\n },\r\n },\r\n expansionPanelExpanded: {\r\n marginTop: 0,\r\n marginBottom: 16,\r\n width: '100%',\r\n },\r\n expansionPanelDetailsRoot: {\r\n padding: '24px 24px 0',\r\n },\r\n expandIconHidden: {\r\n visibility: 'hidden',\r\n },\r\n expansionPanelActionsRoot: {},\r\n header: {\r\n 'background': theme.palette.table.header.main,\r\n 'borderBottom': `2px solid ${theme.palette.table.row.hover}`,\r\n 'marginBottom': theme.spacing(0.5),\r\n '&:hover': {\r\n background: theme.palette.table.header.hover,\r\n },\r\n 'marginTop': 0,\r\n },\r\n stickyHeader: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 2,\r\n },\r\n transparent: {\r\n 'background': 'transparent',\r\n 'boxShadow': 'none',\r\n '&:hover': {\r\n background: 'transparent',\r\n },\r\n },\r\n fullWidth: {\r\n width: '100%',\r\n },\r\n expandIcon: {},\r\n expandBtnActive: {},\r\n };\r\n};\r\n\r\nclass PaperListItem extends PureComponent {\r\n state = {\r\n expandBtnActive: false,\r\n };\r\n\r\n render() {\r\n const {\r\n direction,\r\n isHeader,\r\n onClick,\r\n classes,\r\n Details,\r\n Actions,\r\n children,\r\n fullWidth,\r\n expandable,\r\n selected,\r\n isToggled,\r\n PaperProps,\r\n hideActions,\r\n transparent,\r\n hideExpandIcon,\r\n isStickyHeader,\r\n PaperComponent,\r\n ExpandButtonProps,\r\n } = this.props;\r\n\r\n return (\r\n <>\r\n {createElement(\r\n PaperComponent,\r\n {\r\n 'tabIndex': 0,\r\n 'role': 'button',\r\n 'square': true,\r\n 'elevation': 0,\r\n onClick,\r\n 'aria-expanded': isToggled,\r\n 'className': classNames(classes.paper, {\r\n [classes.header]: isHeader,\r\n [classes.selected]: selected,\r\n [classes.fullWidth]: fullWidth,\r\n [classes.transparent]: transparent,\r\n [classes.stickyHeader]: isStickyHeader,\r\n [classes.paperExpanded]: isToggled,\r\n [classes.paperExpandable]:\r\n (expandable || onClick) && !hideExpandIcon,\r\n [classes.expandBtnActive]: this.state.expandBtnActive,\r\n }),\r\n 'onKeyDown': (e) => {\r\n if (\r\n expandable &&\r\n !hideExpandIcon &&\r\n [KEYS.ENTER, KEYS.SPACE].includes(e.key)\r\n ) {\r\n e.preventDefault();\r\n invokeIfFunction(onClick);\r\n }\r\n },\r\n ...PaperProps,\r\n },\r\n \r\n \r\n {children}\r\n \r\n {expandable && (\r\n \r\n this.setState({ expandBtnActive: true })}\r\n onMouseLeave={() => this.setState({ expandBtnActive: false })}\r\n title={isToggled ? 'Collapse' : 'Expand'}\r\n className={classNames(classes.expandIcon, {\r\n [classes.expandIconHidden]: hideExpandIcon,\r\n })}\r\n {...ExpandButtonProps}\r\n >\r\n {isToggled ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )}\r\n ,\r\n )}\r\n {expandable && (\r\n \r\n
\r\n {Actions && !hideActions && isToggled && (\r\n \r\n \r\n {Actions}\r\n \r\n \r\n )}\r\n {isToggled && (\r\n \r\n \r\n {Details}\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nPaperListItem.defaultProps = {\r\n expandable: false,\r\n Actions: ,\r\n PaperComponent: Paper,\r\n fullWidth: true,\r\n};\r\n\r\nconst StyledPaperListItem = withStyles(styles, { name: 'PaperListItem' })(\r\n PaperListItem,\r\n);\r\n\r\nexport const SortablePaperListItem = SortableElement(StyledPaperListItem);\r\n\r\nexport default StyledPaperListItem;\r\n","import { useCallback } from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport PaperListItem from 'app/components/PaperListItem';\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\n\r\nconst TemplateTableRow = ({ item, ...rest }) => {\r\n const renderDetails = useCallback(\r\n () => (\r\n \r\n \r\n Activities\r\n \r\n {item.get('activities', EMPTY_LIST).map((activity, index) => (\r\n \r\n \r\n \r\n {activity.get('name')}\r\n \r\n \r\n \r\n ))}\r\n \r\n ),\r\n [item],\r\n );\r\n return ;\r\n};\r\n\r\nexport default TemplateTableRow;\r\n","import { useMemo } from 'react';\r\nimport Add from '@material-ui/icons/Add';\r\nimport { Box, Grid, Button } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport TemplateTableRow from 'features/projects/tasks/components/createTask/TemplateTableRow';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nconst TemplateTasksTable = ({\r\n classes,\r\n templateTasks,\r\n selectTemplateTask,\r\n TableRowComponent = TemplateTableRow,\r\n}) => {\r\n const displayExpandColumn = TableRowComponent === TemplateTableRow;\r\n\r\n const initialState = useMemo(\r\n () => ({\r\n hiddenColumns: displayExpandColumn ? [] : ['expansionIcon'],\r\n }),\r\n [displayExpandColumn],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 12,\r\n Header: 'Name',\r\n accessor: (template) => template.get('title'),\r\n },\r\n {\r\n id: 'actions',\r\n Cell: ({ row }) => {\r\n const template = row.original;\r\n\r\n return (\r\n \r\n {\r\n event.stopPropagation();\r\n selectTemplateTask(template);\r\n }}\r\n >\r\n Add\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [classes, selectTemplateTask],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n addBtn: {\r\n textTransform: 'none',\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.common.white, 0.5),\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TemplateTasksTable);\r\n","import { Grid, Button, Typography } from '@material-ui/core';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\n\r\nexport const CreateTaskModalHeader = ({ title, subTitle, onClose }) => (\r\n \r\n \r\n \r\n \r\n \r\n {subTitle}\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CreateTaskModalHeader;\r\n","import { useMemo } from 'react';\r\nimport { IconButton } from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nconst SelectedTemplateTasksTable = ({\r\n deselectTemplateTask,\r\n selectedTemplateTasks,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 12,\r\n Header: 'Selected items',\r\n accessor: (template) => template.get('title'),\r\n },\r\n {\r\n id: 'actions',\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => (\r\n \r\n deselectTemplateTask(row.original)}\r\n >\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [deselectTemplateTask],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SelectedTemplateTasksTable;\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport Add from '@material-ui/icons/Add';\r\nimport { useState, useCallback } from 'react';\r\nimport { reduxForm } from 'redux-form/immutable';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport ViewList from '@material-ui/icons/ViewList';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Box,\r\n Grid,\r\n Dialog,\r\n Button,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n DialogActions,\r\n List as MuiList,\r\n} from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage, LoadingButton } from 'altus-ui-components';\r\n\r\nimport {\r\n TASK_FORMS,\r\n TASK_ACTIONS,\r\n TASKS_CREATE_TASK_MODE,\r\n TASKS_CREATE_TASK_MODAL_ID,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport {\r\n createTask,\r\n addTasksFromTemplate,\r\n createTaskModalContainerOnLoad,\r\n} from 'features/projects/tasks/tasks.actions';\r\n\r\nimport {\r\n getAvailableServicesFromState,\r\n getSummarizedDataStateFromState,\r\n getAvailableDepartmentsFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport CreateTaskForm from 'features/projects/tasks/components/createTask/CreateTaskForm';\r\nimport TemplateTasksTable from 'features/projects/tasks/components/createTask/TemplateTasksTable';\r\nimport CreateTaskModalHeader from 'features/projects/tasks/components/createTask/CreateTaskModalHeader';\r\nimport SelectedTemplateTasksTable from 'features/projects/tasks/components/createTask/SelectedTemplateTasksTable';\r\n\r\nconst { NEW_TASK } = TASK_FORMS;\r\n\r\nconst options = [\r\n [TASKS_CREATE_TASK_MODE.NEW, Add, 'Create new'],\r\n [TASKS_CREATE_TASK_MODE.FROM_TEMPLATE, ViewList, 'From template'],\r\n];\r\n\r\nconst CreateTaskModalContainer = ({\r\n title,\r\n valid,\r\n classes,\r\n projectId,\r\n dataState,\r\n handleSubmit,\r\n templateTasks,\r\n dispatchOnLoad,\r\n displayMenu = true,\r\n dispatchCreateTask,\r\n dispatchAddTasksFromTemplate,\r\n FromTemplateTableRowComponent,\r\n defaultMode = TASKS_CREATE_TASK_MODE.NEW,\r\n}) => {\r\n const createTask = handleSubmit(dispatchCreateTask(projectId));\r\n\r\n const project = useCurrentProject();\r\n\r\n const services = useSelector(getAvailableServicesFromState);\r\n const departments = useSelector(getAvailableDepartmentsFromState);\r\n\r\n const [isOpen, toggleModal] = useModal(TASKS_CREATE_TASK_MODAL_ID);\r\n\r\n const cleanListAndClose = () => { \r\n toggleModal();\r\n setSelectedTemplateTasks(EMPTY_LIST);\r\n }\r\n\r\n const [createMode, setCreateMode] = useState(defaultMode);\r\n\r\n const [selectedTemplateTasks, setSelectedTemplateTasks] =\r\n useState(EMPTY_LIST);\r\n\r\n const selectTemplateTask = useCallback(\r\n (item) =>\r\n setSelectedTemplateTasks((currentSelectedItems) =>\r\n currentSelectedItems.push(item),\r\n ),\r\n [],\r\n );\r\n\r\n const deselectTemplateTask = useCallback(\r\n (item) =>\r\n setSelectedTemplateTasks((currentSelectedItems) =>\r\n currentSelectedItems.delete(currentSelectedItems.indexOf(item)),\r\n ),\r\n [],\r\n );\r\n\r\n const creatingFromTemplate =\r\n createMode === TASKS_CREATE_TASK_MODE.FROM_TEMPLATE;\r\n\r\n const isLoading = dataState.isLoading();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {displayMenu && (\r\n \r\n \r\n {options.map(([mode, Icon, title, disabled]) => (\r\n setCreateMode(mode)}\r\n className={classNames(classes.listItem, {\r\n [classes.selectedMode]: createMode === mode,\r\n })}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n {creatingFromTemplate && (\r\n \r\n )}\r\n {!creatingFromTemplate && (\r\n \r\n )}\r\n \r\n \r\n {creatingFromTemplate && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {creatingFromTemplate && (\r\n \r\n {\r\n dispatchAddTasksFromTemplate(projectId, selectedTemplateTasks).then(\r\n setSelectedTemplateTasks(EMPTY_LIST),\r\n );\r\n }\r\n }\r\n >\r\n {`Add (${selectedTemplateTasks.size})`}\r\n \r\n \r\n )}\r\n {!creatingFromTemplate && (\r\n \r\n \r\n Create\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n services: getAvailableServicesFromState(state),\r\n departments: getAvailableDepartmentsFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TASK_ACTIONS.CREATE_TASK,\r\n TASK_ACTIONS.ADD_TASKS_FROM_TEMPLATE,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchCreateTask: createTask,\r\n dispatchOnLoad: createTaskModalContainerOnLoad,\r\n dispatchAddTasksFromTemplate: addTasksFromTemplate,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: theme.palette.action.hover,\r\n },\r\n },\r\n selectedMode: {\r\n backgroundColor: theme.palette.action.selected,\r\n '&:hover': {\r\n backgroundColor: theme.palette.action.selected,\r\n },\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n dialogActionsRoot: {\r\n padding: theme.spacing(3),\r\n background: theme.altus.background.header,\r\n },\r\n});\r\n\r\nexport default compose(\r\n reduxForm({\r\n form: NEW_TASK.FORM_ID,\r\n }),\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(CreateTaskModalContainer);\r\n","import { useMemo } from 'react';\r\nimport { isImmutable } from 'immutable';\r\nimport { IconButton } from '@material-ui/core';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { formatDate, formatDuration } from 'utils/format.util';\r\nimport { EMPTY_LIST, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport ActivityCommentModal from 'features/projects/tasks/task/activities/ActivityCommentModal';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('subActivities')?.toArray()\r\n : row.original?.subActivities?.toArray();\r\n\r\nconst TaskActivitiesTableSimple = ({\r\n displayComments,\r\n activities = EMPTY_LIST,\r\n ...rest\r\n}) => {\r\n const initialState = useMemo(\r\n () => ({\r\n hiddenColumns: displayComments ? [] : ['comments'],\r\n }),\r\n [displayComments],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'status',\r\n xs: 1,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Activity',\r\n accessor: (activity) => activity.get('name'),\r\n },\r\n {\r\n xs: 6,\r\n Header: 'Description',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n if (!activity.get('description')) return null;\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Started',\r\n accessor: (activity) => formatDate(activity.get('startTime')),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Duration',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n\r\n if (activity.get('isPointInTime')) return null;\r\n\r\n const isTimerActive =\r\n activity.get('status') === WORK_ITEM_STATUS.STARTED;\r\n\r\n return (\r\n formatDuration(elapsedTime)}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n id: 'comments',\r\n Header: ,\r\n Cell: ({ row }) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default TaskActivitiesTableSimple;\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { toTaskToolstring, toTaskToolstringEdit } from 'utils/route.util';\r\n\r\nimport {\r\n getToolstringFromState,\r\n getToolstringToolsFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport { formatFraction } from 'utils/format.util';\r\nimport MetricImperial from 'app/components/MetricImperial';\r\nimport { ProjectPermission, UNITS } from 'app/app.constants';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\nimport ToolDetails from 'features/projects/tool/components/ToolDetails';\r\nimport { Button as NavigationButton } from 'app/components/withNavigation';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\n\r\nclass TaskTableRowDetailsToolstring extends PureComponent {\r\n render() {\r\n const {\r\n taskId,\r\n classes,\r\n projectId,\r\n toolstring,\r\n toolstringId,\r\n toolstringItems,\r\n } = this.props;\r\n\r\n if (!toolstringId) return null;\r\n\r\n return (\r\n \r\n \r\n \r\n Edit\r\n \r\n \r\n\r\n \r\n \r\n {toolstring.get('name') ?? 'Toolstring'}\r\n \r\n \r\n \r\n {!toolstringItems.size && (\r\n \r\n No tools added yet\r\n \r\n )}\r\n {!!toolstringItems.size && (\r\n \r\n {toolstringItems.map((toolstringItem) => {\r\n return (\r\n \r\n }\r\n orientation={ExifOrientation.DEGREES_90}\r\n TooltipProps={{\r\n placement: 'bottom',\r\n }}\r\n ImageProps={{\r\n style: {\r\n maxWidth: '100%',\r\n },\r\n }}\r\n />\r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n {!!toolstringItems.size && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cable:\r\n \r\n \r\n \r\n {toolstring.getIn(['cable', 'name']) ?? N/A}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Total Length:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Max OD:\r\n \r\n \r\n \r\n formatFraction(value?.value, value?.unit ?? '\"')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = () => ({\r\n expansionPanelDetailsSection: {\r\n marginBottom: 6,\r\n position: 'relative',\r\n padding: '12px',\r\n border: '1px solid rgba(255, 255, 255, 0.06)',\r\n },\r\n toolstringContainer: {\r\n padding: '15px 0',\r\n },\r\n noToolstring: {\r\n padding: 10,\r\n cursor: 'pointer',\r\n border: '1px dashed #6a6a6a',\r\n marginBottom: 6,\r\n '&:hover': {\r\n padding: 9,\r\n border: '2px dashed #6a6a6a',\r\n },\r\n },\r\n toolstringLinkContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n toolstringTool: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state, { toolstringId }) => {\r\n return {\r\n toolstring: getToolstringFromState(state, toolstringId),\r\n toolstringItems: getToolstringToolsFromState(state, toolstringId),\r\n };\r\n }),\r\n // toJSComponent,\r\n withStyles(styles),\r\n)(TaskTableRowDetailsToolstring);\r\n","import moment from 'moment';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, Chip, Grid } from '@material-ui/core';\r\nimport { useCallback, useEffect, useMemo, useState } from 'react';\r\n\r\nimport {\r\n formatDate,\r\n formatDuration,\r\n formatQuantity,\r\n formatDurationDiff,\r\n} from 'utils/format.util';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport toolstringService from 'services/toolstring.service';\r\nimport { TaskType } from 'features/projects/tasks/tasks.constants';\r\nimport { ProjectPermission, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport TaskDetails from 'features/projects/tasks/components/TaskDetails';\r\nimport { getTaskActivities } from 'features/projects/activities/activities.actions';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport { createTaskActivitiesSelector } from 'features/projects/activities/activities.selectors';\r\nimport {\r\n getToolstring,\r\n receiveTaskToolstring,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport TaskActivitiesTableSimple from 'features/projects/tasks/task/activities/TaskActivitiesTableSimple';\r\nimport TaskTableRowDetailsToolstring from 'features/projects/tasks/components/TaskTableRowDetailsToolstring';\r\nimport { EditorState, convertFromRaw } from 'draft-js';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport { checkIfNotASubActivity } from 'features/projects/tasks/task/activities/activityUtils';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst TaskTableRowDetails = ({\r\n task,\r\n classes,\r\n copyTask,\r\n projectId,\r\n deleteTask,\r\n isExpanded,\r\n copyTaskDisabled,\r\n}) => {\r\n const [toolstringId, setToolstringId] = useState();\r\n\r\n const dispatch = useDispatch();\r\n\r\n const taskId = task.get('id');\r\n const type = task.get('type');\r\n const status = task.get('status');\r\n const endTime = task.get('endTime');\r\n const comments = task.get('comments')\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(task.get('comments'))),\r\n )\r\n : EditorState.createEmpty();\r\n const description = task.get('description')\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(task.get('description'))),\r\n )\r\n : EditorState.createEmpty();\r\n const objective = task.get('objective')\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(task.get('objective'))),\r\n )\r\n : EditorState.createEmpty();\r\n const startTime = task.get('startTime');\r\n const departments = task.get('departments');\r\n const durationPlanned = task.get('durationPlanned');\r\n\r\n const getPlannedToolstring = useCallback(\r\n () =>\r\n toolstringService\r\n .getPlannedToolstring(projectId, taskId)\r\n .then((toolstring) => {\r\n setToolstringId(toolstring.toolStringId);\r\n dispatch(getToolstring(projectId, taskId, toolstring.toolStringId));\r\n dispatch(receiveTaskToolstring(projectId, taskId, toolstring));\r\n }),\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n useEffect(() => {\r\n if (isExpanded) {\r\n getPlannedToolstring(projectId, taskId);\r\n dispatch(getTaskActivities(projectId, taskId));\r\n }\r\n }, [taskId, dispatch, projectId, isExpanded, getPlannedToolstring]);\r\n\r\n const activitiesSelector = useMemo(\r\n () => createTaskActivitiesSelector(taskId),\r\n [taskId],\r\n );\r\n\r\n const taskActivities = useSelector(activitiesSelector);\r\n\r\n const filteredTaskActivities = useMemo(() => {\r\n if (taskActivities) {\r\n return taskActivities\r\n .filter((x) => checkIfNotASubActivity(x))\r\n .sortBy((activity) => activity.get('sequence'))\r\n .map((activity, index) => activity.set('sequence', index + 1));\r\n }\r\n return taskActivities;\r\n }, [taskActivities]);\r\n\r\n const { hasPermission: hasReadActivityCommentsPermission } =\r\n useProjectPermissions(ProjectPermission.READ_ACTIVITY_COMMENTS);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {[\r\n [\r\n 'TD - Target Depth',\r\n type === TaskType.SUB_SURFACE &&\r\n formatQuantity(task.get('targetDepth')),\r\n ],\r\n [\r\n 'Estimated to',\r\n durationPlanned\r\n ? formatDuration(moment.duration(durationPlanned))\r\n : 'N/A',\r\n ],\r\n [\r\n 'Actual Runtime',\r\n formatDuration(elapsedTime)}\r\n />,\r\n ],\r\n [\r\n 'Difference',\r\n \r\n formatDurationDiff(\r\n moment.duration(durationPlanned),\r\n elapsedTime,\r\n )\r\n }\r\n />,\r\n ],\r\n ].map(\r\n ([label, value]) =>\r\n value && (\r\n \r\n \r\n \r\n ),\r\n )}\r\n \r\n {[\r\n ['Started', startTime],\r\n ['Ended', endTime],\r\n ].map(([label, value]) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n {!!departments.size && (\r\n \r\n \r\n \r\n {departments.map((department) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n )}\r\n {comments && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {task.get('type') === TaskType.SUB_SURFACE && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n background: theme.palette.table.row.main,\r\n },\r\n expansionPanelDetailsSection: {\r\n position: 'relative',\r\n paddingRight: theme.spacing(1.5),\r\n marginBottom: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TaskTableRowDetails);\r\n","import React from 'react';\r\nimport { useCallback } from 'react';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\nimport TaskTableRowDetails from 'features/projects/tasks/components/TaskTableRowDetails';\r\n\r\nconst TaskTableRow = ({\r\n project,\r\n copyTask,\r\n onExpand,\r\n projectId,\r\n item: task,\r\n toolstring,\r\n deleteTask,\r\n activities = EMPTY_LIST,\r\n copyTaskDisabled,\r\n ...rest\r\n}) => {\r\n const taskId = task.get('taskId');\r\n\r\n const renderDetails = useCallback(\r\n (isExpanded) => (\r\n \r\n ),\r\n [\r\n task,\r\n taskId,\r\n project,\r\n copyTask,\r\n onExpand,\r\n projectId,\r\n deleteTask,\r\n activities,\r\n copyTaskDisabled,\r\n ],\r\n );\r\n\r\n return ;\r\n};\r\n\r\nexport default TaskTableRow;\r\n","import { useMemo } from 'react';\r\nimport { useCallback } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport { sortableElement } from 'react-sortable-hoc';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nimport {\r\n DragHandle,\r\n SortableTable,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n ProjectPermission,\r\n WORK_ITEM_STATUS as WorkItemStatusType,\r\n} from 'app/app.constants';\r\n\r\nimport { toProjectTasks } from 'utils/route.util';\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport RunNumber from 'features/projects/components/RunNumber';\r\nimport { formatQuantity } from 'utils/format.util';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport TaskTableRow from 'features/projects/tasks/components/TaskTableRow';\r\nimport { getRichEditorText } from 'utils/app.util';\r\n\r\nconst SortableTaskTableRow = sortableElement(TaskTableRow);\r\n\r\nconst TaskTable = ({\r\n tasks,\r\n classes,\r\n project,\r\n copyTask,\r\n projectId,\r\n sortTasks,\r\n deleteTask,\r\n}) => {\r\n const copyTaskDisabled = useMemo(() => {\r\n if (tasks) {\r\n return (\r\n tasks\r\n .filter((t) => t.get('status') === WorkItemStatusType.COMPLETED)\r\n .toArray().length === tasks.toArray().length\r\n );\r\n }\r\n return true;\r\n }, [tasks]);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const status = row.original.get('status');\r\n\r\n if (status === WorkItemStatusType.PLANNED) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'runNumber',\r\n accessor: (task) => task.get('runNumber'),\r\n Header: Run,\r\n Cell: ({ value }) => (\r\n \r\n {value}\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Title',\r\n accessor: (task) => task.get('title'),\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n\r\n return (\r\n {\r\n // prevent expanding the row\r\n event.stopPropagation();\r\n }}\r\n >\r\n \r\n {task.get('title')}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Target depth',\r\n accessor: (task) => task.get('targetDepth'),\r\n Cell: ({ value: targetDepth }) => formatQuantity(targetDepth),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Estimated',\r\n accessor: (task) => task.get('estimated'), //from DurationPlanned\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Comments',\r\n accessor: (task) => getRichEditorText(task.get('comments')),\r\n },\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [classes, projectId],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => {\r\n const isPlanned = item.get('status') === WorkItemStatusType.PLANNED;\r\n\r\n const TableRowComponent = isPlanned ? SortableTaskTableRow : TaskTableRow;\r\n\r\n return (\r\n \r\n );\r\n },\r\n [project, copyTask, projectId, deleteTask, copyTaskDisabled],\r\n );\r\n\r\n const onSortEnd = useCallback(\r\n (indices) => sortTasks(projectId, indices, tasks),\r\n [tasks, projectId, sortTasks],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n taskTitleLink: {\r\n display: 'inline',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TaskTable);\r\n","import { useRef, useState, useCallback, useEffect } from 'react';\r\n\r\nimport moment from 'moment';\r\nimport Highcharts from 'highcharts';\r\nimport gantt from 'highcharts/highcharts-gantt';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport highchartsTheme from 'layout/highcharts.theme';\r\nimport winchHighchartsTheme from 'features/projects/dashboard/components/dashboards/winch/winch.highcharts.theme';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { checkIfNotASubActivity } from 'features/projects/tasks/task/activities/activityUtils';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst { fontColor, defaultFontSize } = winchHighchartsTheme.style;\r\n\r\nconst TaskChart = ({\r\n tasks,\r\n activities,\r\n showActivities = true,\r\n showDefaultButtons = true,\r\n showNavigatorChart = true,\r\n chartBackgroundColor = theme.altus.background.dashboard,\r\n}) => {\r\n const chartComponent = useRef(null);\r\n\r\n const updateSeriesData = useCallback(\r\n (tasks, activities) => {\r\n const chart = chartComponent.current.chart;\r\n\r\n const seriesToAdd = tasks.map((task) => {\r\n // Read activities from activities prop, since task.activites have their plannedStartTime and plannedEndTime as null\r\n const filteredTaskActivities = activities\r\n .filter(\r\n (x) =>\r\n x.get('taskId') === task.get('taskId') &&\r\n checkIfNotASubActivity(x),\r\n )\r\n .toList()\r\n .sortBy((activity) => activity.get('sequence'))\r\n .map((activity, index) => activity.set('sequence', index + 1));\r\n\r\n const taskStart = task.get('plannedStartTime')\r\n ? moment(task.get('plannedStartTime')).toDate().getTime()\r\n : null;\r\n const taskEnd = task.get('plannedEndTime')\r\n ? moment(task.get('plannedEndTime')).toDate().getTime()\r\n : null;\r\n\r\n const taskToAdd = showActivities\r\n ? {\r\n name: task.get('title'),\r\n id: task.get('taskId').toString(),\r\n }\r\n : {\r\n name: task.get('title'),\r\n id: task.get('taskId').toString(),\r\n start: taskStart,\r\n end: taskEnd,\r\n showCheckbox: false,\r\n };\r\n\r\n const tasksAndActivities = showActivities\r\n ? filteredTaskActivities.map((activity) => {\r\n const activityName = activities\r\n .find((x) => x.get('id') === activity.get('id'))\r\n .get('name');\r\n\r\n const dependencySearch = () => {\r\n if (activity.get('sequence') >= 2) {\r\n return filteredTaskActivities\r\n .findLast(\r\n (x) => x.get('sequence') < activity.get('sequence'),\r\n )\r\n .get('id')\r\n .toString();\r\n } else return null;\r\n };\r\n\r\n const activityToAdd = {\r\n name: activityName,\r\n id: activity.get('id').toString(),\r\n parent: task.get('id').toString(),\r\n start: activity.get('plannedStartTime')\r\n ? moment(activity.get('plannedStartTime'))?.toDate().getTime()\r\n : null,\r\n end: activity.get('plannedEndTime')\r\n ? moment(activity.get('plannedEndTime'))?.toDate().getTime()\r\n : null,\r\n dependency: dependencySearch(),\r\n showCheckbox: false,\r\n };\r\n\r\n return activityToAdd;\r\n })\r\n : EMPTY_LIST;\r\n\r\n const seriesToAdd = {\r\n id: task.get('id'),\r\n name: task.get('title'),\r\n data: tasksAndActivities.insert(0, taskToAdd).toJS(),\r\n };\r\n\r\n return seriesToAdd;\r\n });\r\n\r\n seriesToAdd.forEach((serie) => {\r\n const isSeriesAlreadyIncluded = chart.series\r\n .map((x) => x.userOptions.id)\r\n .includes(serie.id);\r\n if (!isSeriesAlreadyIncluded) {\r\n chart.addSeries(serie, false);\r\n }\r\n });\r\n\r\n seriesToAdd.forEach((newSeries) => {\r\n const existingSeries = chart.series.find(\r\n (s) => s.userOptions.id === newSeries.id,\r\n );\r\n if (existingSeries) {\r\n existingSeries.update(newSeries, false);\r\n } else {\r\n chart.addSeries(newSeries, false);\r\n }\r\n });\r\n\r\n chart.redraw();\r\n chart.reflow();\r\n },\r\n [showActivities],\r\n );\r\n\r\n useEffect(() => {\r\n if (tasks && activities) {\r\n updateSeriesData(\r\n tasks,\r\n activities?.filter(\r\n (x) =>\r\n x.get('parentActivityId') === null ||\r\n x.get('parentActivityId') === 0,\r\n ),\r\n );\r\n }\r\n }, [tasks, updateSeriesData, activities]);\r\n\r\n const [chartOptions] = useState(\r\n Highcharts.merge(false, highchartsTheme, {\r\n chart: {\r\n backgroundColor: chartBackgroundColor,\r\n },\r\n rangeSelector: {\r\n inputEnabled: true,\r\n enabled: showDefaultButtons,\r\n selected: 2,\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n buttons: showDefaultButtons\r\n ? [\r\n {\r\n type: 'minute',\r\n count: 1,\r\n text: '1mn',\r\n title: 'View 1 minute',\r\n },\r\n {\r\n type: 'month',\r\n count: 1,\r\n text: '1m',\r\n title: 'View 1 month',\r\n },\r\n {\r\n type: 'month',\r\n count: 3,\r\n text: '3m',\r\n title: 'View 3 months',\r\n },\r\n {\r\n type: 'month',\r\n count: 6,\r\n text: '6m',\r\n title: 'View 6 months',\r\n },\r\n {\r\n type: 'ytd',\r\n count: 2,\r\n text: 'YTD',\r\n title: 'View year to date',\r\n },\r\n {\r\n type: 'year',\r\n count: 1,\r\n text: '1y',\r\n title: 'View 1 year',\r\n },\r\n {\r\n type: 'all',\r\n text: 'All',\r\n title: 'View all',\r\n },\r\n ]\r\n : [],\r\n },\r\n scrollbar: {\r\n enabled: true,\r\n },\r\n navigator: {\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n enabled: showNavigatorChart,\r\n liveRedraw: true,\r\n series: {\r\n type: 'gantt',\r\n pointPlacement: 0.5,\r\n pointPadding: 0.25,\r\n accessibility: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n xAxis: {\r\n plotBands: {\r\n color: fontColor,\r\n },\r\n showEmpty: false,\r\n tickColor: fontColor,\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n },\r\n yAxis: {\r\n labels: {\r\n style: {\r\n color: fontColor,\r\n fontSize: defaultFontSize,\r\n },\r\n },\r\n },\r\n accessibility: {\r\n keyboardNavigation: {\r\n seriesNavigation: {\r\n mode: 'serialize',\r\n },\r\n },\r\n },\r\n }),\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default TaskChart;\r\n","import { useEffect, useMemo } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport TaskChart from 'features/projects/tasks/components/TaskChart';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\nimport { getAllProjectActivities } from 'features/projects/activities/activities.actions';\r\nimport { createProjectAllActivitiesSelector } from 'features/projects/activities/activities.selectors';\r\n\r\nconst TasksChartContainer = ({\r\n tasks,\r\n projectId,\r\n dataState,\r\n dispatchGetActivities,\r\n showActivities,\r\n showDefaultButtons,\r\n showNavigatorChart,\r\n chartBackgroundColor,\r\n}) => {\r\n useEffect(() => {\r\n dispatchGetActivities(projectId);\r\n }, [dispatchGetActivities, projectId]);\r\n\r\n const activitiesSelector = useMemo(\r\n () => createProjectAllActivitiesSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const activities = useSelector(activitiesSelector);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.GET_ALL_PROJECT_ACTIVITIES,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchGetActivities: getAllProjectActivities,\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(TasksChartContainer);\r\n","import BarChartIcon from '@material-ui/icons/BarChart';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport ViewAgendaIcon from '@material-ui/icons/ViewAgenda';\r\nimport { ToggleButton, ToggleButtonGroup } from '@material-ui/lab';\r\n\r\nimport { formatDuration } from 'utils/format.util';\r\nimport { TASK_VIEWS } from 'features/projects/tasks/tasks.constants';\r\n\r\nconst TaskListRuntimeHeader = ({\r\n classes,\r\n selectedView,\r\n onViewChange,\r\n totalPlannedDuration,\r\n showToggleButtonOption = true,\r\n}) => (\r\n \r\n {showToggleButtonOption ? (\r\n <>\r\n \r\n \r\n \r\n Estimated Project Runtime:\r\n \r\n {formatDuration(totalPlannedDuration)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n Estimated Project Runtime:\r\n \r\n {formatDuration(totalPlannedDuration)}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n);\r\n\r\nconst styles = () => ({\r\n container: {\r\n flexDirection: 'row',\r\n },\r\n title: {\r\n marginRight: 10,\r\n },\r\n value: {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TaskListRuntimeHeader);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { useState, useCallback, useEffect, useMemo } from 'react';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { getAllDepartments, getAllServices } from 'app/app.actions';\r\n\r\nimport {\r\n copyTask,\r\n sortTasks,\r\n deleteTask,\r\n tasksContainerOnUnload,\r\n} from 'features/projects/tasks/tasks.actions';\r\n\r\nimport {\r\n getTaskTemplates,\r\n getTotalElapsedDuration,\r\n getTotalPlannedDuration,\r\n} from 'features/projects/tasks/tasks.selectors';\r\n\r\nimport {\r\n TASK_VIEWS,\r\n TASK_ACTIONS,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport TaskTable from 'features/projects/tasks/components/TaskTable';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport TasksChartContainer from 'features/projects/tasks/TasksChartContainer';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\nimport TaskListRuntimeHeader from 'features/projects/tasks/components/TaskListRuntimeHeader';\r\n\r\nconst TaskTableChart = ({\r\n tasks,\r\n project,\r\n projectId,\r\n dispatchCopyTask,\r\n dispatchOnUnload,\r\n dispatchSortTasks,\r\n dispatchDeleteTask,\r\n dispatchGetServices,\r\n totalElapsedDuration,\r\n totalPlannedDuration,\r\n dispatchGetDepartments,\r\n defaultView = TASK_VIEWS.LIST,\r\n showToggleButtonOption,\r\n showActivities,\r\n showDefaultButtons,\r\n showNavigatorChart,\r\n chartBackgroundColor,\r\n}) => {\r\n const [selectedView, setSelectedView] = useState(defaultView);\r\n const toggleViewChange = useCallback((_event, value) => {\r\n if (!value) return;\r\n\r\n setSelectedView(value);\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatchGetServices(projectId);\r\n dispatchGetDepartments(projectId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [\r\n projectId,\r\n dispatchOnUnload,\r\n dispatchGetServices,\r\n dispatchGetDepartments,\r\n ]);\r\n\r\n /**\r\n * The showContingency flag check will only filter out\r\n * contingency tasks which are not started during execution.\r\n */\r\n const filteredTasks = useMemo(() => {\r\n if (tasks) {\r\n let lastNonContingencyEndTime = null;\r\n return tasks\r\n .map((task) => {\r\n if (task.get('runNumber') === 'C' && !task.get('startTime')) {\r\n return null;\r\n } else {\r\n if (lastNonContingencyEndTime !== null) {\r\n task = task.set('plannedStartTime', lastNonContingencyEndTime);\r\n }\r\n lastNonContingencyEndTime = task.get('plannedEndTime');\r\n return task;\r\n }\r\n })\r\n .filter((task) => task !== null);\r\n }\r\n return tasks;\r\n }, [tasks]);\r\n\r\n return (\r\n <>\r\n \r\n {selectedView === TASK_VIEWS.LIST ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n templateTasks: getTaskTemplates(state),\r\n totalElapsedDuration: getTotalElapsedDuration(state),\r\n totalPlannedDuration: getTotalPlannedDuration(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TASK_ACTIONS.COPY_TASK,\r\n TASK_ACTIONS.SORT_TASKS,\r\n TASK_ACTIONS.CONFIRM_DELETE_TASK,\r\n TASK_ACTIONS.PROJECT_TASKS_PAGE_LOADED,\r\n ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchCopyTask: copyTask,\r\n dispatchSortTasks: sortTasks,\r\n dispatchDeleteTask: deleteTask,\r\n dispatchGetServices: getAllServices,\r\n dispatchOnUnload: tasksContainerOnUnload,\r\n dispatchGetDepartments: getAllDepartments,\r\n};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n TaskTableChart,\r\n);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport Add from '@material-ui/icons/Add';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n TASK_ACTIONS,\r\n TASKS_CREATE_TASK_MODAL_ID,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { ProjectPermission, PROJECT_STATUS } from 'app/app.constants';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { tasksContainerOnUnload } from 'features/projects/tasks/tasks.actions';\r\nimport { getAllTasksWithProjects } from 'features/projects/activities/activities.actions';\r\nimport {\r\n getAllTasksFromState,\r\n getTaskTemplates,\r\n} from 'features/projects/tasks/tasks.selectors';\r\nimport CreateTaskModalContainer from 'features/projects/tasks/components/createTask/CreateTaskModalContainer';\r\n\r\nimport TaskTableChart from 'features/projects/tasks/TaskTableChart';\r\n\r\nconst TasksContainer = ({\r\n tasks,\r\n classes,\r\n project,\r\n dataState,\r\n projectId,\r\n templateTasks,\r\n dispatchOnUnload,\r\n dispatchGetTasks,\r\n dispatchCopyTask,\r\n dispatchSortTasks,\r\n dispatchDeleteTask,\r\n totalElapsedDuration,\r\n totalPlannedDuration,\r\n}) => {\r\n useEffect(() => {\r\n dispatchGetTasks(projectId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [projectId, dispatchGetTasks, dispatchOnUnload]);\r\n\r\n useHeader({\r\n subTitle: `Plan ${tasks?.size ? `(${tasks?.size})` : ''}`,\r\n });\r\n\r\n const [_, toggleModal] = useModal(TASKS_CREATE_TASK_MODAL_ID);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n tasks: getAllTasksFromState(state),\r\n templateTasks: getTaskTemplates(state),\r\n dataState: getSummarizedDataStateFromState(state, TASK_ACTIONS.GET_ALL_TASKS),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchGetTasks: getAllTasksWithProjects,\r\n dispatchOnUnload: tasksContainerOnUnload,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n zIndex: 3,\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(TasksContainer);\r\n","import { useMemo } from 'react';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { NavigationAppBarForTaskRoutes } from 'app/components/NavigationAppBar';\r\nimport { TaskType } from 'features/projects/tasks/tasks.constants';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\n\r\nconst TaskRoutesContainer = ({\r\n taskId,\r\n routes,\r\n dataState,\r\n task = EMPTY_MAP,\r\n}) => {\r\n const filteredTaskRoutes = useMemo(\r\n () =>\r\n routes.map(({ subSurfaceRoute, ...route }) =>\r\n subSurfaceRoute && task.get('type') === TaskType.SURFACE\r\n ? {\r\n ...route,\r\n hidden: true,\r\n redirectTo: routePaths.plan.task.index,\r\n }\r\n : route,\r\n ),\r\n [task, routes],\r\n );\r\n\r\n const isTaskTypeSurface = useMemo(\r\n () => task.get('type') === TaskType.SURFACE,\r\n [task],\r\n );\r\n\r\n if (dataState.isLoading()) {\r\n return ;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TaskRoutesContainer;\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { LoadingDataState } from 'altus-datastate';\r\n\r\nimport { setHeaderValues } from 'app/app.actions';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/task/task.constants';\r\nimport { taskContainerOnLoad } from 'features/projects/tasks/task/task.actions';\r\nimport TaskRoutesContainer from 'features/projects/tasks/task/TaskRoutesContainer';\r\nimport { getTaskByIdFromState } from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nconst TaskContainer = ({\r\n task,\r\n taskId,\r\n routes,\r\n projectId,\r\n dataState,\r\n dispatchOnLoad,\r\n}) => {\r\n useEffect(() => {\r\n dispatchOnLoad(projectId, taskId);\r\n }, [dispatchOnLoad, projectId, taskId]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state, { taskId }) => ({\r\n task: getTaskByIdFromState(state, taskId),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n TASK_ACTIONS.TASK_PAGE_LOADED,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: taskContainerOnLoad,\r\n dispatchSetHeaderValues: setHeaderValues,\r\n },\r\n ),\r\n)(TaskContainer);\r\n","import { getAllDepartments, getAllServices } from 'app/app.actions';\r\nimport { getAllTasks } from 'features/projects/tasks/tasks.actions';\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/task/task.constants';\r\nimport { getTaskById } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nexport const taskContainerOnLoad = (projectId, taskId) => (dispatch) => {\r\n const payload = Promise.all([\r\n dispatch(getAllTasks(projectId)),\r\n dispatch(getTaskById(projectId, taskId)),\r\n dispatch(getAllServices()),\r\n dispatch(getAllDepartments()),\r\n ]);\r\n\r\n dispatch({\r\n type: TASK_ACTIONS.TASK_PAGE_LOADED,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n","import Agent from 'infrastructure/agent';\r\n\r\nexport const allEvents = (id) => Agent.get(`/project/${id}/events`);\r\n\r\nexport const allEventsUnreadCount = (id) =>\r\n Agent.get(`/project/${id}/events/unread`);\r\n\r\nexport const markEventsAsSeen = (id) =>\r\n Agent.post(`/project/${id}/events/seen`);\r\n\r\nconst eventsService = {\r\n allEvents,\r\n allEventsUnreadCount,\r\n markEventsAsSeen,\r\n};\r\n\r\nexport default eventsService;\r\n","import eventsService from 'services/events.service';\r\nimport { APP_ACTIONS } from 'app/app.constants';\r\n\r\nexport const onLoad = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: APP_ACTIONS.EVENTS_PAGE_LOADED,\r\n payload: () => dispatch(getEvents(projectId)),\r\n });\r\n\r\nexport const getEvents = (projectId) => (dispatch) => {\r\n const payload = eventsService.allEvents(projectId);\r\n\r\n dispatch({\r\n type: APP_ACTIONS.EVENTS_LOADED,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: APP_ACTIONS.EVENTS_PAGE_UNLOADED });\r\n\r\nexport const markEventsAsSeen = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: APP_ACTIONS.EVENTS_MARK_AS_SEEN,\r\n payload: () => eventsService.markEventsAsSeen(projectId),\r\n });\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getEventsFromState = createSelector(\r\n (state) => state.getIn(['projects', 'events', 'data']),\r\n (events) => events,\r\n);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n getEvents,\r\n markEventsAsSeen,\r\n} from 'features/projects/events/events.actions';\r\n\r\nimport {\r\n getCurrentUserFromState,\r\n getActionDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { pages } from 'app/routePaths';\r\nimport { APP_ACTIONS } from 'app/app.constants';\r\nimport EventList from 'app/components/EventList';\r\nimport BasePage from 'app/components/NewBasePage';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { getEventsFromState } from 'features/projects/events/events.selectors';\r\n\r\nconst styles = () => ({});\r\n\r\nclass Events extends PureComponent {\r\n componentDidMount() {\r\n const { dispatchOnLoad, dispatchGetEvents, projectId } = this.props;\r\n\r\n dispatchOnLoad(projectId);\r\n\r\n //poll for project events TODO: WEBSOCKETS\r\n if (!this.pollId) {\r\n this.pollId = setInterval(() => dispatchGetEvents(projectId), 5000);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n const { dispatchOnUnload } = this.props;\r\n\r\n dispatchOnUnload();\r\n\r\n //stop existing poll\r\n if (this.pollId !== undefined && this.pollId !== null) {\r\n clearInterval(this.pollId);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const { dispatchEventsSeen, projectId } = this.props;\r\n\r\n if (this.props.events.length !== prevProps.events.length) {\r\n dispatchEventsSeen(projectId);\r\n }\r\n }\r\n\r\n render() {\r\n const { project, events, dataState, currentUser } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n currentUser: getCurrentUserFromState(state),\r\n events: getEventsFromState(state),\r\n dataState: getActionDataStateFromState(state, APP_ACTIONS.EVENTS_PAGE_LOADED),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchGetEvents: getEvents,\r\n dispatchEventsSeen: markEventsAsSeen,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n toJSComponent,\r\n withStyles(styles),\r\n)(Events);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { getTaskFromState } from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nconst TaskBreadcrumb = ({ task }) => task?.get('title') ?? '...';\r\n\r\nexport default compose(\r\n connect((state, { match }) => ({\r\n task: getTaskFromState(state, match.params.taskId),\r\n })),\r\n)(TaskBreadcrumb);\r\n","import { EMPTY_MAP } from 'app/app.constants';\r\nimport useProject from 'features/projects/hooks/useProject';\r\n\r\nconst ProjectBreadcrumb = ({ match }) => {\r\n const { projectId } = match.params;\r\n\r\n const project = useProject(projectId) ?? EMPTY_MAP;\r\n\r\n return project.get('fullTitle') ?? '...';\r\n};\r\n\r\nexport default ProjectBreadcrumb;\r\n","import Agent from 'infrastructure/agent';\r\nimport { saveFile } from 'utils/app.util';\r\n\r\nexport const getAllDocuments = (facilityId) =>\r\n Agent.get(`/facility/${facilityId}/files`);\r\n\r\nexport const deleteFile = (facilityId, fileId) =>\r\n Agent.delete(`/facility/${facilityId}/files/${fileId}`);\r\n\r\nexport const downloadFile = (facilityId, fileId) => {\r\n return Agent.file\r\n .get(`/facility/${facilityId}/files/${fileId}/download`)\r\n .then(([file, filename]) => saveFile(file, filename));\r\n};\r\n\r\nexport const uploadFile = (facilityId, file, meta) =>\r\n Agent.file.post(`/facility/${facilityId}/files`, file, meta);\r\n\r\nexport const updateFile = (facilityId, fileId, file) =>\r\n Agent.put(`/facility/${facilityId}/files/${fileId}`, file);\r\n\r\nconst projectFileService = {\r\n downloadFile,\r\n uploadFile,\r\n deleteFile,\r\n getAllDocuments,\r\n updateFile,\r\n};\r\n\r\nexport default projectFileService;\r\n","import facilityFileService from 'services/facilityFile.service';\r\nimport { NOTIFICATION_VARIANTS, MODAL } from 'app/app.constants';\r\nimport { getAllFileCategories, toggleModal } from 'app/app.actions';\r\nimport { FACILITY_DOCUMENTS_ACTIONS } from 'features/facilities/documents/facilityDocuments.constants';\r\n\r\nexport const onLoad = (facilityId) => (dispatch) =>\r\n dispatch({\r\n type: FACILITY_DOCUMENTS_ACTIONS.PROJECT_FACILITY_PAGE_LOADED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllFileCategories()),\r\n facilityFileService\r\n .getAllDocuments(facilityId)\r\n .then((files) => dispatch(receiveProjectFiles(files))),\r\n ]),\r\n });\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: FACILITY_DOCUMENTS_ACTIONS.PROJECT_FACILITY_PAGE_UNLOADED });\r\n\r\nexport const deleteFile = (facilityId, facilityFileId) => (dispatch) => {\r\n dispatch({\r\n facilityFileId,\r\n type: FACILITY_DOCUMENTS_ACTIONS.DELETE_FACILITY_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The file was successfully deleted',\r\n },\r\n confirmationDialog: {\r\n title: 'Delete document',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this document?',\r\n },\r\n payload: () => facilityFileService.deleteFile(facilityId, facilityFileId),\r\n });\r\n};\r\n\r\nexport const downloadFile =\r\n (facilityId, facilityFileId, file) => (dispatch) => {\r\n const payload = facilityFileService.downloadFile(\r\n facilityId,\r\n facilityFileId,\r\n );\r\n\r\n dispatch({\r\n facilityFileId,\r\n type: FACILITY_DOCUMENTS_ACTIONS.DOWNLOAD_FACILITY_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: `Downloading ${file.get('name')}...`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\n// TODO: Add error handling, for example if only 1 file upload fails\r\nexport const uploadFiles =\r\n (facilityId) => (dispatch) => (uploadDocumentFormValues) => {\r\n const { files } = uploadDocumentFormValues.toJS();\r\n\r\n const payload = Promise.all(\r\n files.map(({ file, meta }) =>\r\n facilityFileService\r\n .uploadFile(facilityId, file, meta)\r\n .then((projectFile) => dispatch(receiveProjectFile(projectFile))),\r\n ),\r\n ).then((response) => {\r\n dispatch(toggleModal({ modalId: MODAL.UPLOAD_FILE }));\r\n return response;\r\n });\r\n\r\n dispatch({\r\n type: FACILITY_DOCUMENTS_ACTIONS.UPLOAD_FACILITY_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `The ${\r\n files.length > 1 ? 'files' : 'file'\r\n } ${files.length > 1 ? 'were' : 'was'} successfully uploaded`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const uploadFileModalOnUnload = () => (dispatch) =>\r\n dispatch({ type: FACILITY_DOCUMENTS_ACTIONS.UPLOAD_FILE_MODAL_UNLOADED });\r\n\r\nexport const updateFile = (facilityId, facilityFileId, file) => (dispatch) => {\r\n const payload = facilityFileService\r\n .updateFile(facilityId, facilityFileId, file)\r\n .then((projectFile) => receiveProjectFile(projectFile));\r\n\r\n dispatch({\r\n payload,\r\n facilityFileId,\r\n type: FACILITY_DOCUMENTS_ACTIONS.UPDATE_FACILITY_FILE,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'File was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveProjectFiles = (projectFiles) => ({\r\n payload: projectFiles,\r\n type: FACILITY_DOCUMENTS_ACTIONS.RECEIVE_FACILITY_FILES,\r\n});\r\n\r\nexport const receiveProjectFile = (projectFile) => ({\r\n payload: projectFile,\r\n type: FACILITY_DOCUMENTS_ACTIONS.RECEIVE_FACILITY_FILE,\r\n});\r\n","import { Field } from 'formik';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Collection } from 'immutable';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport SaveIcon from '@material-ui/icons/GetApp';\r\nimport { useMemo, memo, useCallback } from 'react';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport { required } from 'utils/validation.util';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { EMPTY_MAP, Format, ProjectPermission } from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\n\r\nconst FacilityDocumentsTable = ({\r\n updateFile,\r\n deleteFile,\r\n downloadFile,\r\n noItemsMessage,\r\n documents = EMPTY_MAP,\r\n hasUploadDocumentPermission,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (document) => document.get('fullName', null),\r\n Cell: ({ row, value }) => {\r\n if (!hasUploadDocumentPermission) return value;\r\n\r\n return (\r\n \r\n {row.original.get('extension')}\r\n \r\n ),\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 6,\r\n Header: 'Uploaded',\r\n accessor: (document) =>\r\n formatDate(document.get('created'), Format.time),\r\n },\r\n {\r\n id: 'actions',\r\n disableSortBy: true,\r\n Header: ,\r\n Footer: ,\r\n Cell: ({ row }) => (\r\n \r\n \r\n deleteFile(row.original.get('facilityFileId'))}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n downloadFile(row.original.get('facilityFileId'), row.original)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [deleteFile, downloadFile, hasUploadDocumentPermission],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => ,\r\n [updateFile],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nFacilityDocumentsTable.propTypes = {\r\n documents: PropTypes.instanceOf(Collection),\r\n};\r\n\r\nexport default compose(memo)(FacilityDocumentsTable);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getFacilityDocumentsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'facilities', 'facilityDocuments']),\r\n (documents) => documents,\r\n);\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { Grid } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useEffect, useCallback, useMemo, useState } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n deleteFile,\r\n uploadFiles,\r\n downloadFile,\r\n updateFile,\r\n} from 'features/facilities/documents/facilityDocuments.actions';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getAvailableFileCategoriesFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n EMPTY_SET,\r\n ProjectPermission,\r\n MAX_UPLOAD_FILE_SIZE,\r\n} from 'app/app.constants';\r\n\r\nimport { setFile } from 'app/app.actions';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport UploadDocumentModal from 'app/components/UploadDocumentModal';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport FacilityDocumentsTable from 'features/facilities/documents/components/FacilityDocumentsTable';\r\nimport { FACILITY_DOCUMENTS_ACTIONS } from 'features/facilities/documents/facilityDocuments.constants';\r\nimport { getFacilityDocumentsFromState } from 'features/facilities/documents/facilityDocuments.selectors';\r\n\r\nconst FacilityDocumentsContainer = ({\r\n classes,\r\n dataState,\r\n facilityId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchDropFiles,\r\n dispatchDeleteFile,\r\n dispatchUpdateFile,\r\n dispatchUploadFiles,\r\n dispatchDownloadFile,\r\n}) => {\r\n useHeader({ subTitle: breadcrumb });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(facilityId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [facilityId, dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const { hasPermission: hasUploadDocumentPermission } = useProjectPermissions(\r\n ProjectPermission.UPLOAD_DOCUMENTS,\r\n );\r\n\r\n const [filter, setFilter] = useState(EMPTY_SET);\r\n\r\n const documents = useSelector(getFacilityDocumentsFromState);\r\n const documentCategories = useSelector(getAvailableFileCategoriesFromState);\r\n\r\n const filteredDocuments = useMemo(() => {\r\n if (filter.isEmpty()) return documents;\r\n\r\n return documents.filter((document) => {\r\n const documentCategory = documentCategories.get(document.get('category'));\r\n\r\n return filter.includes(documentCategory);\r\n });\r\n }, [filter, documents, documentCategories]);\r\n\r\n useEffect(() => {\r\n if (filteredDocuments.isEmpty()) {\r\n setFilter(EMPTY_SET);\r\n }\r\n // clear filter if deleting the last document to prevent a filter being active when no documents match it\r\n }, [filteredDocuments]);\r\n\r\n const downloadFile = useCallback(\r\n (facilityFileId, file) =>\r\n dispatchDownloadFile(facilityId, facilityFileId, file),\r\n [facilityId, dispatchDownloadFile],\r\n );\r\n\r\n const deleteFile = useCallback(\r\n (facilityFileId) => dispatchDeleteFile(facilityId, facilityFileId),\r\n [facilityId, dispatchDeleteFile],\r\n );\r\n\r\n const updateFile = useCallback(\r\n (file) => dispatchUpdateFile(facilityId, file.facilityFileId, file),\r\n [facilityId, dispatchUpdateFile],\r\n );\r\n\r\n const uploadFiles = useCallback(\r\n (files) => dispatchUploadFiles(facilityId)(files),\r\n [facilityId, dispatchUploadFiles],\r\n );\r\n\r\n const onDrop = useCallback(\r\n (files) => dispatchDropFiles(files),\r\n [dispatchDropFiles],\r\n );\r\n\r\n const { isDragActive, getRootProps, getInputProps, open, fileRejections } =\r\n useDropzone({\r\n onDrop,\r\n noClick: true,\r\n noKeyboard: true,\r\n maxSize: MAX_UPLOAD_FILE_SIZE,\r\n noDrag: !hasUploadDocumentPermission,\r\n });\r\n\r\n // return null;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n FACILITY_DOCUMENTS_ACTIONS.DOWNLOAD_FACILITY_FILE,\r\n FACILITY_DOCUMENTS_ACTIONS.UPLOAD_FACILITY_FILE,\r\n FACILITY_DOCUMENTS_ACTIONS.UPDATE_FACILITY_FILE,\r\n FACILITY_DOCUMENTS_ACTIONS.DELETE_FACILITY_FILE,\r\n FACILITY_DOCUMENTS_ACTIONS.PROJECT_FACILITY_PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchDropFiles: setFile,\r\n dispatchDeleteFile: deleteFile,\r\n dispatchUpdateFile: updateFile,\r\n dispatchUploadFiles: uploadFiles,\r\n dispatchDownloadFile: downloadFile,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n dragOver: {\r\n opacity: '0.3',\r\n border: '5px gray dashed',\r\n },\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(FacilityDocumentsContainer);\r\n","import { createSelector } from 'utils/app.util';\r\nimport { getWellboreDetailsFromState } from 'features/wells/wellbore.selectors';\r\n\r\nexport const getProjectWellboreDetailFromState = createSelector(\r\n (state, projectWellboreDetailId) =>\r\n state.getIn([\r\n 'entity',\r\n 'projectWellboreDetail',\r\n 'details',\r\n projectWellboreDetailId?.toString(),\r\n ]),\r\n (projectWellboreDetail) => projectWellboreDetail,\r\n);\r\n\r\nexport const getProjectWellboreDetailIdFromState = createSelector(\r\n (state) => state.getIn(['entity', 'projectWellboreDetail', 'details']),\r\n (details) => {\r\n const firstDetail = details && details.first();\r\n return firstDetail ? firstDetail.get('projectWellboreDetailId') : null;\r\n },\r\n);\r\n\r\nexport const getActiveProjectWellboreDetailIdFromState = createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'projectWellboreDetail', 'activeDetailsId']),\r\n (activeDetailsId) => activeDetailsId,\r\n);\r\n\r\nexport const getProjectWellboreDetailsForProjectFromState = createSelector(\r\n (state) => state.getIn(['entity', 'projectWellboreDetail', 'details']),\r\n (_, projectId) => projectId,\r\n (projectWellboreDetails, projectId) =>\r\n projectWellboreDetails\r\n .sortBy((projectWellboreDetail) => -projectWellboreDetail.get('created'))\r\n .groupBy((projectWellboreDetail) =>\r\n projectWellboreDetail.get('projectId').toString(),\r\n )\r\n .get(projectId.toString()),\r\n);\r\n\r\nexport const getWellboreDetailFromProjectWellboreDetailFromState =\r\n createSelector(\r\n getProjectWellboreDetailFromState,\r\n getWellboreDetailsFromState,\r\n (projectWellboreDetail, wellboreDetails) => {\r\n const wellboreDetailId = projectWellboreDetail?.get('wellboreDetailId');\r\n\r\n return wellboreDetailId\r\n ? wellboreDetails.get(wellboreDetailId.toString())\r\n : undefined;\r\n },\r\n );\r\n","import PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { getInitials } from 'utils/app.util';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { UserAvatar } from 'altus-ui-components';\r\n\r\nconst ProjectUser = ({ user, classes, contained, organization = true }) => {\r\n const title = user.get('title');\r\n const name = user.get('name') || user.get('fullName');\r\n const organizationName = user.get('organizationName');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {name}\r\n \r\n {organization ? (\r\n \r\n {!!title && !!organizationName\r\n ? `${title} at ${organizationName}`\r\n : `${title || organizationName}`}\r\n \r\n ) : null}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n contained: {\r\n padding: theme.spacing(2),\r\n border: `1px dotted ${theme.palette.action.disabled}`,\r\n },\r\n avatar: {\r\n marginRight: theme.spacing(2),\r\n },\r\n organization: {\r\n fontSize: theme.typography.caption.fontSize,\r\n },\r\n});\r\n\r\nProjectUser.propTypes = {\r\n contained: PropTypes.bool,\r\n user: PropTypes.shape({\r\n name: PropTypes.string,\r\n title: PropTypes.string,\r\n avatar: PropTypes.string,\r\n fullName: PropTypes.string,\r\n organizationName: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(ProjectUser);\r\n","import Check from '@material-ui/icons/Check';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n TimelineDot,\r\n TimelineItem,\r\n TimelineContent,\r\n TimelineSeparator,\r\n TimelineConnector,\r\n} from '@material-ui/lab';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport ProjectUser from 'features/projects/components/ProjectUser';\r\n\r\nconst ProjectWellboreDetailChangelogItem = ({\r\n classes,\r\n change,\r\n projectWellboreDetail,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`Change ${change}`}\r\n \r\n \r\n \r\n \r\n Approved by\r\n \r\n \r\n \r\n \r\n \r\n Date and Time\r\n \r\n \r\n {formatDate(projectWellboreDetail.get('approvalDate'))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n subtitle: {\r\n paddingBottom: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectWellboreDetailChangelogItem);\r\n","import CreateIcon from '@material-ui/icons/Create';\r\nimport { Grid, Box, Typography, CircularProgress } from '@material-ui/core';\r\n\r\nimport {\r\n Timeline,\r\n TimelineDot,\r\n TimelineItem,\r\n TimelineContent,\r\n TimelineSeparator,\r\n} from '@material-ui/lab';\r\n\r\nimport { LoadingDataState, NotRequestedDataState } from 'altus-datastate';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { formatDate } from 'utils/format.util';\r\nimport ProjectWellboreDetailChangelogItem from 'features/projects/wellbore/details/components/ProjectWellboreDetailChangelogItem';\r\n\r\nconst ProjectWellboreDetailChangelog = ({\r\n project,\r\n dataState,\r\n projectWellboreDetails,\r\n}) => {\r\n const fieldName = project.get('fieldName');\r\n const wellboreName = project.get('wellboreName');\r\n const creationDate = formatDate(project.get('created'));\r\n\r\n if (dataState.isLoading() || dataState === NotRequestedDataState) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (!projectWellboreDetails.size) {\r\n return (\r\n \r\n \r\n No revisions\r\n \r\n \r\n At least one Wellbore Details needs to be approved\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {projectWellboreDetails.valueSeq().map((projectWellboreDetail, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Project created\r\n \r\n {`${fieldName} - ${wellboreName}`}\r\n \r\n \r\n {creationDate}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nProjectWellboreDetailChangelog.defaultProps = {\r\n dataState: LoadingDataState,\r\n projectWellboreDetails: EMPTY_LIST,\r\n};\r\n\r\nexport default ProjectWellboreDetailChangelog;\r\n","import { compose } from 'redux';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport { useReducerWithDataState } from 'altus-hooks';\r\nimport { withModal, ModalHeader } from 'altus-ui-components';\r\n\r\nimport {\r\n clearProjectWellboreDetails,\r\n receiveProjectWellboreDetails,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport projectWellboreDetailService from 'services/projectWellboreDetail.service';\r\nimport projectWellboreDetailsReducer from 'features/projects/wellbore/details/projectWellboreDetails.reducer';\r\nimport { PROJECT_WELLBORE_DETAIL_CHANGELOG_MODAL_ID } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\nimport ProjectWellboreDetailChangelog from 'features/projects/wellbore/details/components/ProjectWellboreDetailChangelog';\r\n\r\nconst ProjectWellboreDetailChangelogModal = ({\r\n open,\r\n project,\r\n projectId,\r\n toggleModal,\r\n}) => {\r\n const [\r\n getProjectWellboreDetailChangelog,\r\n projectWellboreDetailsState,\r\n dispatch,\r\n dataState,\r\n clearDataState,\r\n ] = useReducerWithDataState(\r\n projectWellboreDetailService.getProjectWellboreDetailChangelog,\r\n projectWellboreDetailsReducer,\r\n EMPTY_MAP,\r\n );\r\n\r\n const onEntered = useCallback(\r\n () =>\r\n getProjectWellboreDetailChangelog(projectId).then((payload) =>\r\n dispatch(receiveProjectWellboreDetails(payload)),\r\n ),\r\n [dispatch, projectId, getProjectWellboreDetailChangelog],\r\n );\r\n\r\n const onExited = useCallback(() => {\r\n clearDataState();\r\n dispatch(clearProjectWellboreDetails());\r\n }, [dispatch, clearDataState]);\r\n\r\n const projectWellboreDetails = useMemo(\r\n () => projectWellboreDetailsState.get('details', EMPTY_MAP),\r\n [projectWellboreDetailsState],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {dataState.isError() &&
An error occurred. Try again.
}\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default compose(withModal(PROJECT_WELLBORE_DETAIL_CHANGELOG_MODAL_ID))(\r\n ProjectWellboreDetailChangelogModal,\r\n);\r\n","import { memo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport SaveAltIcon from '@material-ui/icons/SaveAlt';\r\nimport HistoryIcon from '@material-ui/icons/History';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Grid,\r\n MenuItem,\r\n TextField,\r\n IconButton,\r\n ListItemText,\r\n} from '@material-ui/core';\r\n\r\nimport { withModal } from 'altus-ui-components';\r\n\r\nimport {\r\n PROJECT_STATUS,\r\n ProjectPermission,\r\n ProjectWellboreDetailStatus,\r\n EMPTY_MAP,\r\n} from 'app/app.constants';\r\n\r\nimport {\r\n ACTIONS,\r\n PROJECT_WELLBORE_DETAIL_CHANGELOG_MODAL_ID,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\nimport {\r\n createAndRedirectProjectWellboreDetailDraft,\r\n getProjectWellboreDetailChangelog,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nimport {\r\n getProjectWellboreDetailFromState,\r\n getProjectWellboreDetailsForProjectFromState,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.selectors';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport ProjectWellboreDetailChangelogModal from 'features/projects/wellbore/details/components/ProjectWellboreDetailChangelogModal';\r\n\r\nexport const ProjectWellboreDetailStatusName = {\r\n [ProjectWellboreDetailStatus.DRAFT]: 'Draft',\r\n [ProjectWellboreDetailStatus.APPROVED]: 'Approved',\r\n [ProjectWellboreDetailStatus.REQUIRES_APPROVAL]: 'Requires Approval',\r\n};\r\n\r\nconst NO_PROJECT_WELLBORE_DETAIL_SELECTED = '';\r\n\r\nconst ProjectWellboreDetailHeader = ({\r\n classes,\r\n projectId,\r\n toggleModal,\r\n project = EMPTY_MAP,\r\n handleActiveWellboreId,\r\n projectWellboreDetailId,\r\n projectWellboreDetails = EMPTY_MAP,\r\n currentProjectWellboreDetail = EMPTY_MAP,\r\n dispatchCreateAndRedirectProjectWellboreDetailDraft,\r\n}) => {\r\n const projectStatus = project.get('status');\r\n const status = currentProjectWellboreDetail.get('status');\r\n\r\n const selectedItem = projectWellboreDetails.has(\r\n projectWellboreDetailId?.toString(),\r\n )\r\n ? projectWellboreDetailId\r\n : NO_PROJECT_WELLBORE_DETAIL_SELECTED;\r\n\r\n const displayCreateDraftBtn =\r\n projectStatus === PROJECT_STATUS.PLAN &&\r\n status === ProjectWellboreDetailStatus.APPROVED;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n handleActiveWellboreId(event.target.value)}\r\n >\r\n {projectWellboreDetails.keySeq().map((id, index) => {\r\n const change = projectWellboreDetails.size - index;\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n {displayCreateDraftBtn && (\r\n \r\n \r\n \r\n dispatchCreateAndRedirectProjectWellboreDetailDraft(\r\n projectId,\r\n projectWellboreDetailId,\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* TODO: enable when implementing export functionality */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n [`root-${ProjectWellboreDetailStatus.DRAFT}`]: {\r\n background: theme.altus.statusColor[ProjectWellboreDetailStatus.DRAFT],\r\n },\r\n [`root-${ProjectWellboreDetailStatus.REQUIRES_APPROVAL}`]: {\r\n background:\r\n theme.altus.statusColor[ProjectWellboreDetailStatus.REQUIRES_APPROVAL],\r\n },\r\n [`root-${ProjectWellboreDetailStatus.APPROVED}`]: {\r\n background: theme.altus.statusColor[ProjectWellboreDetailStatus.APPROVED],\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { projectId, projectWellboreDetailId }) => ({\r\n currentProjectWellboreDetail: getProjectWellboreDetailFromState(\r\n state,\r\n projectWellboreDetailId,\r\n ),\r\n projectWellboreDetails: getProjectWellboreDetailsForProjectFromState(\r\n state,\r\n projectId,\r\n ),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.LOAD_PROJECT_WELLBORE_DETAILS_PAGE,\r\n ACTIONS.SUBMIT_PROJECT_WELLBORE_DETAIL_FORM,\r\n ACTIONS.APPROVE_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n ACTIONS.REQUEST_PROJECT_WELLBORE_DETAIL_DRAFT_APPROVAL,\r\n ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT_AND_SYNC,\r\n\r\n // ACTIONS_SEC.SYNC_PROJECT_WELLBORE_SECTIONS_WITH_LATEST,\r\n ),\r\n }),\r\n {\r\n dispatchGetProjectWellboreDetailChangelog:\r\n getProjectWellboreDetailChangelog,\r\n dispatchCreateAndRedirectProjectWellboreDetailDraft:\r\n createAndRedirectProjectWellboreDetailDraft,\r\n },\r\n ),\r\n withModal(PROJECT_WELLBORE_DETAIL_CHANGELOG_MODAL_ID),\r\n memo,\r\n withStyles(styles),\r\n)(ProjectWellboreDetailHeader);\r\n","import { compose } from 'redux';\r\nimport { Route } from 'react-router';\r\nimport { Grid, Divider } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport ProjectWellboreDetailHeader from 'features/projects/wellbore/details/ProjectWellboreDetailHeader';\r\nimport { PROJECT_WELLBORE_ACTIVE_TAB } from 'features/equipment/equipment.constants';\r\n\r\nconst ProjectWellboreHeader = ({\r\n classes,\r\n projectId,\r\n activeTab,\r\n project = EMPTY_MAP,\r\n handleActiveWellboreId,\r\n projectWellboreDetailId,\r\n}) => {\r\n if (\r\n activeTab !== PROJECT_WELLBORE_ACTIVE_TAB.DETAILS &&\r\n activeTab !== PROJECT_WELLBORE_ACTIVE_TAB.SECTIONS\r\n )\r\n return null;\r\n return (\r\n <>\r\n \r\n {\r\n return (\r\n \r\n );\r\n }}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectWellboreHeader);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button } from '@material-ui/core';\r\n\r\nimport {\r\n ProjectPermission,\r\n ProjectWellboreDetailStatus,\r\n} from 'app/app.constants';\r\n\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\n\r\nconst ProjectWellboreDetailStatusHeaderActions = ({\r\n classes,\r\n canCancel,\r\n onCancelDraft,\r\n onApproveDraft,\r\n projectWellboreDetail,\r\n onRequestDraftApproval,\r\n}) => {\r\n const status = projectWellboreDetail.get('status');\r\n\r\n const cancelDraftBtn = (\r\n \r\n {!!canCancel && (\r\n \r\n \r\n Cancel\r\n \r\n \r\n )}\r\n \r\n );\r\n\r\n const approveButton = (\r\n \r\n \r\n Approve\r\n \r\n \r\n );\r\n\r\n const requestApprovalButton = (\r\n \r\n \r\n \r\n Send for approval\r\n \r\n \r\n \r\n );\r\n\r\n const approvalButtons = (\r\n \r\n {(hasPermission) =>\r\n hasPermission ? approveButton : requestApprovalButton\r\n }\r\n \r\n );\r\n\r\n switch (status) {\r\n case ProjectWellboreDetailStatus.DRAFT:\r\n return (\r\n <>\r\n {cancelDraftBtn}\r\n {approvalButtons}\r\n \r\n );\r\n case ProjectWellboreDetailStatus.REQUIRES_APPROVAL:\r\n return (\r\n \r\n {approveButton}\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst styles = (theme) => ({\r\n cancelButtonText: {\r\n color: theme.palette.common.black,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(\r\n ProjectWellboreDetailStatusHeaderActions,\r\n);\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nimport { Alert } from 'altus-ui-components';\r\n\r\nimport {\r\n cancelProjectWellboreDetailDraft,\r\n approveProjectWellboreDetailDraft,\r\n requestProjectWellboreDetailDraftApproval,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nimport {\r\n getProjectWellboreDetailFromState,\r\n getProjectWellboreDetailsForProjectFromState,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.selectors';\r\nimport projectWellboreDetailsService from 'services/projectWellboreDetail.service';\r\n\r\nimport { EMPTY_MAP, ProjectWellboreDetailStatus } from 'app/app.constants';\r\nimport { ProjectWellboreDetailMapper } from 'features/projects/wellbore/details/projectWellboreDetails.mappers';\r\nimport ProjectWellboreDetailStatusHeaderActions from 'features/projects/wellbore/details/ProjectWellboreDetailStatusHeaderActions';\r\n\r\nconst projectWellboreStatusToString = {\r\n [ProjectWellboreDetailStatus.DRAFT]: 'Well Details - Needs approval',\r\n [ProjectWellboreDetailStatus.REQUIRES_APPROVAL]: 'Pending approval',\r\n};\r\n\r\nconst ProjectWellboreDetailStatusHeader = ({\r\n classes,\r\n projectId,\r\n currentProjectWellboreDetailId,\r\n projectWellboreDetails = EMPTY_MAP,\r\n dispatchCancelProjectWellboreDetailDraft,\r\n dispatchApproveProjectWellboreDetailDraft,\r\n dispatchRequestProjectWellboreDetailDraftApproval,\r\n}) => {\r\n const [latestProjectWellboreDetail, setLatestProjectWellboreDetail] =\r\n useState(EMPTY_MAP);\r\n\r\n if (latestProjectWellboreDetail && !currentProjectWellboreDetailId) { \r\n currentProjectWellboreDetailId ??= latestProjectWellboreDetail.get('projectWellboreDetailId')\r\n }\r\n\r\n useEffect(\r\n () =>\r\n // If the well detail id in the path changes, re-fetch the latest well details in case it changed\r\n projectWellboreDetailsService\r\n .getLatestProjectWellboreDetail(projectId)\r\n .then((response) =>\r\n setLatestProjectWellboreDetail(\r\n ProjectWellboreDetailMapper.from(response),\r\n ),\r\n ),\r\n [projectId, currentProjectWellboreDetailId],\r\n );\r\n\r\n const currentProjectWellboreDetail = useSelector((state) =>\r\n currentProjectWellboreDetailId\r\n ? getProjectWellboreDetailFromState(state, currentProjectWellboreDetailId)\r\n : undefined,\r\n );\r\n\r\n // Show the banner based on the current path's well details, and fallback to the latest well details if not\r\n const projectWellboreDetail =\r\n currentProjectWellboreDetail || latestProjectWellboreDetail;\r\n\r\n const status = projectWellboreDetail.get('status');\r\n\r\n const onCancelDraft = useCallback(() => {\r\n dispatchCancelProjectWellboreDetailDraft(\r\n projectWellboreDetail.get('projectId'),\r\n projectWellboreDetail.get('projectWellboreDetailId'),\r\n );\r\n }, [dispatchCancelProjectWellboreDetailDraft, projectWellboreDetail]);\r\n\r\n const onApproveDraft = useCallback(() => {\r\n dispatchApproveProjectWellboreDetailDraft(\r\n projectWellboreDetail.get('projectId'),\r\n projectWellboreDetail.get('projectWellboreDetailId'),\r\n );\r\n }, [dispatchApproveProjectWellboreDetailDraft, projectWellboreDetail]);\r\n\r\n const onRequestDraftApproval = useCallback(() => {\r\n dispatchRequestProjectWellboreDetailDraftApproval(\r\n projectWellboreDetail.get('projectId'),\r\n projectWellboreDetail.get('projectWellboreDetailId'),\r\n );\r\n }, [\r\n dispatchRequestProjectWellboreDetailDraftApproval,\r\n projectWellboreDetail,\r\n ]);\r\n\r\n if (status === ProjectWellboreDetailStatus.APPROVED) {\r\n return null;\r\n }\r\n\r\n if (isNil(status)) return null;\r\n\r\n // Simple validation - hide Cancel btn if there is no other ProjectWellboreDetails\r\n const canCancel = projectWellboreDetails.delete(\r\n projectWellboreDetail.get('projectWellboreDetailId'),\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {projectWellboreStatusToString[status]}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n background: theme.altus.statusColor[ProjectWellboreDetailStatus.DRAFT],\r\n },\r\n [`root-${ProjectWellboreDetailStatus.DRAFT}`]: {\r\n background: theme.altus.statusColor[ProjectWellboreDetailStatus.DRAFT],\r\n },\r\n [`root-${ProjectWellboreDetailStatus.REQUIRES_APPROVAL}`]: {\r\n background:\r\n theme.altus.statusColor[ProjectWellboreDetailStatus.REQUIRES_APPROVAL],\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { projectId }) => ({\r\n projectWellboreDetails: getProjectWellboreDetailsForProjectFromState(\r\n state,\r\n projectId,\r\n ),\r\n }),\r\n {\r\n dispatchCancelProjectWellboreDetailDraft:\r\n cancelProjectWellboreDetailDraft,\r\n dispatchApproveProjectWellboreDetailDraft:\r\n approveProjectWellboreDetailDraft,\r\n dispatchRequestProjectWellboreDetailDraftApproval:\r\n requestProjectWellboreDetailDraftApproval,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(ProjectWellboreDetailStatusHeader);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useRouteMatch } from 'react-router';\r\n\r\nimport {\r\n requestProjectWellboreDetail,\r\n requestProjectWellboreDetails,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\nimport ProjectWellboreHeader from 'features/projects/wellbore/ProjectWellboreHeader';\r\nimport ProjectWellboreDetailStatusHeader from 'features/projects/wellbore/details/ProjectWellboreDetailStatusHeader';\r\n\r\nconst ProjectWellboreContainer = ({\r\n routes,\r\n projectId,\r\n breadcrumb,\r\n dispatchRequestProjectWellboreDetails,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n const match = useRouteMatch({\r\n path: routePaths.projectWellbore.details.match,\r\n });\r\n\r\n const projectWellboreDetailId = match?.params?.projectWellboreDetailId;\r\n\r\n useEffect(\r\n () => dispatchRequestProjectWellboreDetails(projectId),\r\n [dispatchRequestProjectWellboreDetails, projectId],\r\n );\r\n\r\n const project = useCurrentProject();\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchRequestProjectWellboreDetail: requestProjectWellboreDetail,\r\n dispatchRequestProjectWellboreDetails: requestProjectWellboreDetails,\r\n }),\r\n)(ProjectWellboreContainer);\r\n","import { Grid } from '@material-ui/core';\r\n\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\n\r\nimport ThreeJsManagerProvider from 'app/threeJs/ThreeJsManagerProvider';\r\nimport WellboreContextTrajectoryContainer from 'app/components/WellboreContextualization/WellboreContextTrajectoryContainer';\r\n\r\nconst ProjectWellboreTrajectory3DView = ({\r\n trajectory,\r\n wellboreDetail,\r\n wellboreId,\r\n wellbore,\r\n wellboreSections,\r\n}) => {\r\n if (!trajectory.size) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProjectWellboreTrajectory3DView;\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport Refresh from '@material-ui/icons/Refresh';\r\nimport { Grid, Box, Fab } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useState, useEffect, useMemo } from 'react';\r\nimport { ACTIONS } from 'features/projects/wellbore/sections/projectWellboreSection.constants';\r\n\r\nimport { BasePage, TableHeader } from 'altus-ui-components';\r\n\r\nimport WellboreTrajectoryViewToggle, {\r\n TrajectoryViewType,\r\n} from 'app/components/WellboreTrajectory/WellboreTrajectoryViewToggle';\r\n\r\nimport {\r\n getCurrentProjectWellboreFromState,\r\n getCurrentProjectWellboreTrajectoryFromState,\r\n} from 'features/projects/wellbore/projectWellbore.selectors';\r\n\r\nimport {\r\n projectWellboreOnLoad,\r\n syncProjectWellboreTrajectoryWithLatest,\r\n} from 'features/projects/wellbore/projectWellbore.actions';\r\n\r\nimport { EMPTY_MAP, PROJECT_STATUS } from 'app/app.constants';\r\n\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n createProjectWellboreSectionsSelector,\r\n getCurrentProjectIdFromState,\r\n} from 'features/projects/projects.selectors';\r\nimport { getProjectStatusLite } from 'features/projects/activities/activities.actions';\r\nimport { PROJECT_WELLBORE_ACTIONS } from 'features/projects/wellbore/projectWellbore.constants';\r\nimport WellboreTrajectoryDetails from 'app/components/WellboreTrajectory/WellboreTrajectoryDetails';\r\nimport useLatestProjectWellboreDetail from 'features/projects/hooks/useLatestProjectWellboreDetails';\r\nimport WellboreTrajectoryTableView from 'app/components/WellboreTrajectory/WellboreTrajectoryTableView';\r\nimport ProjectWellboreTrajectory3DView from 'features/projects/wellbore/survey/ProjectWellboreTrajectory3DView';\r\nimport { requestProjectWellboreSections } from 'features/projects/wellbore/sections/projectWellboreSection.actions';\r\n\r\nconst trajectoryTableInitialState = {\r\n pageSize: 100,\r\n};\r\n\r\nconst ProjectWellboreOverview = ({\r\n classes,\r\n projectId,\r\n dataState,\r\n dispatchOnLoad,\r\n wellbore = EMPTY_MAP,\r\n trajectory = EMPTY_MAP,\r\n dispatchGetProjectStatus,\r\n dispatchSyncProjectWellboreTrajectoryWithLatest,\r\n dispatchRequestProjectWellboreSections,\r\n}) => {\r\n useEffect(() => {\r\n dispatchRequestProjectWellboreSections(projectId);\r\n }, [projectId, dispatchRequestProjectWellboreSections]);\r\n\r\n const [wellboreId, setWellboreId] = useState();\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n }, [projectId, dispatchOnLoad]);\r\n\r\n useEffect(() => {\r\n // Fetch status again if trajectory changes, in case we need to ask/stop asking for confirmation before updating again.\r\n dispatchGetProjectStatus(projectId);\r\n }, [projectId, trajectory, dispatchGetProjectStatus]);\r\n\r\n const [latestWellboreDetail = EMPTY_MAP] =\r\n useLatestProjectWellboreDetail(projectId);\r\n\r\n useEffect(() => {\r\n if (latestWellboreDetail.get('wellboreId'))\r\n setWellboreId(latestWellboreDetail.get('wellboreId'));\r\n }, [latestWellboreDetail]);\r\n\r\n const [viewType, setViewType] = useState(TrajectoryViewType.THREE_D);\r\n\r\n const projectWellboreSectionsSelector = useMemo(\r\n () => createProjectWellboreSectionsSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const wellboreSections = useSelector(projectWellboreSectionsSelector);\r\n\r\n const renderTableHeaderComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n {viewType === TrajectoryViewType.THREE_D && wellboreId && (\r\n \r\n )}\r\n {viewType === TrajectoryViewType.TABLE && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {!!trajectory.get('trajectoryPoints')?.size && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n dispatchSyncProjectWellboreTrajectoryWithLatest(projectId)\r\n }\r\n color=\"primary\"\r\n title=\"Sync with latest\"\r\n className={classes.fab}\r\n disabled={useCurrentProject().get('status') !== PROJECT_STATUS.PLAN}\r\n >\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n paddingTop: theme.spacing(3),\r\n },\r\n wellboreDetails: {\r\n width: '100%',\r\n position: 'absolute',\r\n right: theme.spacing(3),\r\n },\r\n stickySection: {\r\n top: 0,\r\n position: 'sticky',\r\n },\r\n fab: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n project: getCurrentProjectIdFromState(state),\r\n wellbore: getCurrentProjectWellboreFromState(state),\r\n trajectory: getCurrentProjectWellboreTrajectoryFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n PROJECT_WELLBORE_ACTIONS.PROJECT_WELLBORE_ON_LOAD,\r\n ACTIONS.REQUEST_PROJECT_WELLBORE_SECTIONS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: projectWellboreOnLoad,\r\n dispatchGetProjectStatus: getProjectStatusLite,\r\n dispatchSyncProjectWellboreTrajectoryWithLatest:\r\n syncProjectWellboreTrajectoryWithLatest,\r\n dispatchRequestProjectWellboreSections: requestProjectWellboreSections,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(ProjectWellboreOverview);\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport Error from '@material-ui/icons/Error';\r\nimport { Grid, Fab } from '@material-ui/core';\r\nimport { useCallback, useEffect } from 'react';\r\nimport Refresh from '@material-ui/icons/Refresh';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { ProjectWellboreDetailStatus, PROJECT_STATUS } from 'app/app.constants';\r\n\r\nimport { BasePage, NoContentBasePage } from 'altus-ui-components';\r\n\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\n\r\nimport {\r\n getProjectWellboreDetailFromState,\r\n getWellboreDetailFromProjectWellboreDetailFromState,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.selectors';\r\n\r\nimport {\r\n getActionDataStateFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n requestProjectWellboreDetail,\r\n submitProjectWellboreDetailForm,\r\n requestSyncProjectWellboreDetailsWithLatest as syncProjectWellboreDetailsWithLatest,\r\n} from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nimport { ProjectWellboreDetailsAndFluids } from 'app/components/WellboreDetailsForm/WellboreDetailsForm';\r\nimport { ACTIONS } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\n\r\nconst ProjectWellboreDetailFormContainer = ({\r\n classes,\r\n projectId,\r\n projectWellboreDetailId,\r\n dispatchRequestProjectWellboreDetail,\r\n dispatchSubmitProjectWellboreDetailForm,\r\n dispatchSyncProjectWellboreDetailsWithLatest,\r\n}) => {\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.LOAD_PROJECT_WELLBORE_DETAILS_PAGE,\r\n ACTIONS.SYNC_PROJECT_WELLBORE_DETAILS_WITH_LATEST,\r\n ),\r\n );\r\n\r\n const requestProjectWellboreDetailDataState = useSelector((state) =>\r\n getActionDataStateFromState(state, ACTIONS.REQUEST_PROJECT_WELLBORE_DETAIL),\r\n );\r\n\r\n const wellboreDetail = useSelector((state) =>\r\n getWellboreDetailFromProjectWellboreDetailFromState(\r\n state,\r\n projectWellboreDetailId,\r\n ),\r\n );\r\n\r\n const projectWellboreDetail = useSelector((state) =>\r\n getProjectWellboreDetailFromState(state, projectWellboreDetailId),\r\n );\r\n\r\n const projectWellboreDetailStatus = projectWellboreDetail?.get('status');\r\n\r\n useEffect(() => {\r\n dispatchRequestProjectWellboreDetail(projectId, projectWellboreDetailId);\r\n }, [\r\n dispatchRequestProjectWellboreDetail,\r\n projectId,\r\n projectWellboreDetailId,\r\n ]);\r\n\r\n const project = useCurrentProject();\r\n const projectStatus = project.get('status');\r\n const disabled =\r\n projectStatus !== PROJECT_STATUS.PLAN ||\r\n (!isNil(projectWellboreDetailStatus) &&\r\n projectWellboreDetailStatus === ProjectWellboreDetailStatus.APPROVED);\r\n\r\n const onSubmit = useCallback(\r\n (values, { setSubmitting, setStatus }) =>\r\n dispatchSubmitProjectWellboreDetailForm(\r\n projectId,\r\n projectWellboreDetailId,\r\n values,\r\n setSubmitting,\r\n setStatus,\r\n ),\r\n [\r\n projectId,\r\n projectWellboreDetailId,\r\n dispatchSubmitProjectWellboreDetailForm,\r\n ],\r\n );\r\n\r\n if (requestProjectWellboreDetailDataState.isError()) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n dispatchSyncProjectWellboreDetailsWithLatest(\r\n projectId,\r\n projectWellboreDetailId,\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n fab: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchRequestProjectWellboreDetail: requestProjectWellboreDetail,\r\n dispatchSubmitProjectWellboreDetailForm: submitProjectWellboreDetailForm,\r\n dispatchSyncProjectWellboreDetailsWithLatest:\r\n syncProjectWellboreDetailsWithLatest,\r\n }),\r\n withStyles(styles),\r\n)(ProjectWellboreDetailFormContainer);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport Error from '@material-ui/icons/Error';\r\nimport { connect, useSelector } from 'react-redux';\r\n\r\nimport { LoadingDataState } from 'altus-datastate';\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { ACTIONS } from 'features/projects/wellbore/details/projectWellboreDetails.constants';\r\nimport { loadProjectWellboreDetailsPage } from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\nimport ProjectWellboreDetailFormContainer from 'features/projects/wellbore/details/ProjectWellboreDetailFormContainer';\r\nimport { getProjectWellboreDetailIdFromState } from 'features/projects/wellbore/details/projectWellboreDetails.selectors';\r\n\r\nconst ProjectWellboreDetailsContainer = ({\r\n projectId,\r\n dataState,\r\n activeWellboreDetailId,\r\n dispatchLoadProjectWellboreDetailsPage,\r\n}) => {\r\n useEffect(() => {\r\n dispatchLoadProjectWellboreDetailsPage(projectId);\r\n }, [dispatchLoadProjectWellboreDetailsPage, projectId]);\r\n\r\n const wellboreDetailsId = useSelector(getProjectWellboreDetailIdFromState);\r\n\r\n if (dataState.isError() || !wellboreDetailsId) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nProjectWellboreDetailsContainer.defaultProps = {\r\n dataState: LoadingDataState,\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n ACTIONS.LOAD_PROJECT_WELLBORE_DETAILS_PAGE,\r\n ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT,\r\n ACTIONS.CREATE_AND_REDIRECT_PROJECT_WELLBORE_DETAIL_DRAFT_AND_SYNC,\r\n ),\r\n }),\r\n {\r\n dispatchLoadProjectWellboreDetailsPage: loadProjectWellboreDetailsPage,\r\n },\r\n ),\r\n)(ProjectWellboreDetailsContainer);\r\n","import { compose } from 'redux';\r\nimport { Fab } from '@material-ui/core';\r\nimport Refresh from '@material-ui/icons/Refresh';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useEffect, useMemo, useCallback, useState } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n requestProjectWellboreSections,\r\n requestCreateProjectWellboreSection,\r\n requestUpdateProjectWellboreSection,\r\n requestDeleteProjectWellboreSection,\r\n syncProjectWellboreSectionWithLatest,\r\n requestCreateProjectWellboreSectionNipple,\r\n requestUpdateProjectWellboreSectionNipple,\r\n requestDeleteProjectWellboreSectionNipple,\r\n} from 'features/projects/wellbore/sections/projectWellboreSection.actions';\r\n\r\nimport {\r\n EMPTY_MAP,\r\n ProjectWellboreDetailStatus,\r\n PROJECT_STATUS,\r\n} from 'app/app.constants';\r\n\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { getProjectStatus } from 'features/projects/activities/activities.actions';\r\nimport WellboreSectionsTable from 'features/wells/sections/components/WellboreSectionsTable';\r\nimport { createProjectWellboreSectionsSelector } from 'features/projects/projects.selectors';\r\nimport { ACTIONS } from 'features/projects/wellbore/sections/projectWellboreSection.constants';\r\nimport useDefaultProjectWellboreSection from 'features/projects/hooks/useDefaultProjectWellboreSection';\r\nimport { getProjectWellboreDetailFromState } from 'features/projects/wellbore/details/projectWellboreDetails.selectors';\r\nimport { createAndRedirectProjectWellboreDetailDraftAndSync } from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nconst ProjectWellboreSectionsContainer = ({\r\n classes,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n activeWellboreDetailId,\r\n dispatchGetProjectStatus,\r\n dispatchCreateProjectWellboreSection,\r\n dispatchUpdateProjectWellboreSection,\r\n dispatchDeleteProjectWellboreSection,\r\n dispatchRequestProjectWellboreSections,\r\n dispatchCreateProjectWellboreSectionNipple,\r\n dispatchUpdateProjectWellboreSectionNipple,\r\n dispatchDeleteProjectWellboreSectionNipple,\r\n dispatchSyncProjectWellboreSectionWithLatest,\r\n dispatchSyncAndCreateProjectWellboreSectionWithLatest,\r\n}) => {\r\n const [wellboreDetailId, setWellboreDetailId] = useState(null);\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n const wellboreDetail = useSelector((state) =>\r\n getProjectWellboreDetailFromState(state, activeWellboreDetailId),\r\n );\r\n\r\n useEffect(() => {\r\n if (wellboreDetail) {\r\n setWellboreDetailId(wellboreDetail.get('wellboreDetailId'));\r\n dispatchRequestProjectWellboreSections(\r\n projectId,\r\n wellboreDetail.get('wellboreDetailId'),\r\n );\r\n }\r\n }, [projectId, wellboreDetail, dispatchRequestProjectWellboreSections]);\r\n\r\n const createWellboreSection = useCallback(\r\n (wellboreSection, formik, callback) =>\r\n dispatchCreateProjectWellboreSection(\r\n projectId,\r\n wellboreDetailId,\r\n wellboreSection,\r\n formik,\r\n callback,\r\n ),\r\n [projectId, wellboreDetailId, dispatchCreateProjectWellboreSection],\r\n );\r\n\r\n const updateWellboreSection = useCallback(\r\n (wellboreSection) => {\r\n const { wellboreSectionId } = wellboreSection;\r\n dispatchUpdateProjectWellboreSection(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSection,\r\n );\r\n },\r\n [projectId, wellboreDetailId, dispatchUpdateProjectWellboreSection],\r\n );\r\n\r\n const deleteWellboreSection = useCallback(\r\n (wellboreSectionId) =>\r\n dispatchDeleteProjectWellboreSection(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n ),\r\n [projectId, wellboreDetailId, dispatchDeleteProjectWellboreSection],\r\n );\r\n\r\n const createWellboreSectionNipple = useCallback(\r\n (wellboreSectionNipple, formik, callback) => {\r\n const { wellboreSectionId } = wellboreSectionNipple;\r\n\r\n dispatchCreateProjectWellboreSectionNipple(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreSectionNipple,\r\n formik,\r\n callback,\r\n );\r\n },\r\n [projectId, dispatchCreateProjectWellboreSectionNipple],\r\n );\r\n\r\n const updateWellboreSectionNipple = useCallback(\r\n (wellboreSectionNipple) => {\r\n const { wellboreSectionId, wellboreSectionNippleId } =\r\n wellboreSectionNipple;\r\n\r\n dispatchUpdateProjectWellboreSectionNipple(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSectionNippleId,\r\n wellboreSectionNipple,\r\n );\r\n },\r\n [projectId, wellboreDetailId, dispatchUpdateProjectWellboreSectionNipple],\r\n );\r\n\r\n const deleteWellboreSectionNipple = useCallback(\r\n (wellboreSectionId, wellboreSectionNippleId) =>\r\n dispatchDeleteProjectWellboreSectionNipple(\r\n projectId,\r\n wellboreSectionId,\r\n wellboreDetailId,\r\n wellboreSectionNippleId,\r\n ),\r\n [projectId, wellboreDetailId, dispatchDeleteProjectWellboreSectionNipple],\r\n );\r\n\r\n const projectWellboreSectionsSelector = useMemo(\r\n () => createProjectWellboreSectionsSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const wellboreSections = useSelector(projectWellboreSectionsSelector);\r\n\r\n useEffect(() => {\r\n // Fetch status again if wellbore sections change, in case we need to ask/stop asking for confirmation before updating again.\r\n dispatchGetProjectStatus(projectId);\r\n }, [projectId, wellboreSections, dispatchGetProjectStatus]);\r\n\r\n const defaultWellboreSection = useDefaultProjectWellboreSection(\r\n projectId,\r\n wellboreDetailId,\r\n );\r\n\r\n const [latestProjectWellboreDetail, _] = useState(EMPTY_MAP);\r\n\r\n if (latestProjectWellboreDetail && !activeWellboreDetailId) {\r\n activeWellboreDetailId ??= latestProjectWellboreDetail.get(\r\n 'projectWellboreDetailId',\r\n );\r\n }\r\n\r\n const currentProjectWellboreDetail = useSelector((state) =>\r\n activeWellboreDetailId\r\n ? getProjectWellboreDetailFromState(state, activeWellboreDetailId)\r\n : undefined,\r\n );\r\n\r\n const projectWellboreDetail =\r\n currentProjectWellboreDetail || latestProjectWellboreDetail;\r\n\r\n return (\r\n \r\n Basic Well Description for simulations\r\n
\r\n \r\n {\r\n if (\r\n currentProjectWellboreDetail.get('status') ===\r\n ProjectWellboreDetailStatus.DRAFT\r\n )\r\n dispatchSyncProjectWellboreSectionWithLatest(\r\n projectId,\r\n wellboreDetailId,\r\n );\r\n else\r\n dispatchSyncAndCreateProjectWellboreSectionWithLatest(\r\n projectId,\r\n currentProjectWellboreDetail.get('projectWellboreDetailId'),\r\n );\r\n }}\r\n disabled={useCurrentProject().get('status') !== PROJECT_STATUS.PLAN}\r\n color=\"primary\"\r\n title=\"Sync with latest\"\r\n className={classes.fab}\r\n >\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n fab: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.REQUEST_PROJECT_WELLBORE_SECTIONS,\r\n ACTIONS.REQUEST_CREATE_PROJECT_WELLBORE_SECTION,\r\n ACTIONS.REQUEST_UPDATE_PROJECT_WELLBORE_SECTION,\r\n ACTIONS.REQUEST_DELETE_PROJECT_WELLBORE_SECTION,\r\n ACTIONS.REQUEST_CREATE_PROJECT_WELLBORE_SECTION_NIPPLE,\r\n ACTIONS.REQUEST_UPDATE_PROJECT_WELLBORE_SECTION_NIPPLE,\r\n ACTIONS.REQUEST_DELETE_PROJECT_WELLBORE_SECTION_NIPPLE,\r\n ),\r\n }),\r\n {\r\n dispatchGetProjectStatus: getProjectStatus,\r\n dispatchRequestProjectWellboreSections: requestProjectWellboreSections,\r\n dispatchCreateProjectWellboreSection: requestCreateProjectWellboreSection,\r\n dispatchUpdateProjectWellboreSection: requestUpdateProjectWellboreSection,\r\n dispatchDeleteProjectWellboreSection: requestDeleteProjectWellboreSection,\r\n dispatchCreateProjectWellboreSectionNipple:\r\n requestCreateProjectWellboreSectionNipple,\r\n dispatchUpdateProjectWellboreSectionNipple:\r\n requestUpdateProjectWellboreSectionNipple,\r\n dispatchDeleteProjectWellboreSectionNipple:\r\n requestDeleteProjectWellboreSectionNipple,\r\n dispatchSyncAndCreateProjectWellboreSectionWithLatest:\r\n createAndRedirectProjectWellboreDetailDraftAndSync,\r\n dispatchSyncProjectWellboreSectionWithLatest:\r\n syncProjectWellboreSectionWithLatest,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(ProjectWellboreSectionsContainer);\r\n","import HasProjectPermission from 'app/components/HasProjectPermission';\r\n\r\nconst withProjectPermission =\r\n (permissions) => (WrappedComponent) => (props) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\nexport default withProjectPermission;\r\n","import _isNil from 'lodash/isNil';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useParams, useRouteMatch } from 'react-router-dom';\r\nimport { Box, CardActions } from '@material-ui/core';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { FavoriteButton } from 'altus-ui-components';\r\n\r\nimport { toExecutionSection, toExecutionSimulation } from 'utils/route.util';\r\nimport * as simulationActions from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport CardNavigationItem from 'app/components/CardNavigationItem/CardNavigationItem';\r\nimport { PlannedIndicator } from './PlannedIndicator';\r\n\r\nexport const SimulationMenuItem = ({ simulation }) => {\r\n const { projectId, taskId } = useParams();\r\n const dispatch = useDispatch();\r\n const to = toExecutionSimulation(\r\n projectId,\r\n taskId,\r\n simulation.get('simulationId'),\r\n );\r\n const match = useRouteMatch(\r\n `/projects/${projectId}/execution/${taskId}/simulation/${simulation.get(\r\n 'simulationId',\r\n )}/:simulationSection?`,\r\n );\r\n const isSelected = !_isNil(match);\r\n\r\n const onDeleteSimulation = () =>\r\n dispatch(\r\n simulationActions.requestDeleteSimulation(\r\n projectId,\r\n taskId,\r\n simulation.get('simulationId'),\r\n isSelected ? toExecutionSection(projectId, taskId, 'simulation') : null,\r\n ),\r\n );\r\n\r\n const onToggleFavorite = (event) => {\r\n event.preventDefault();\r\n\r\n dispatch(\r\n simulationActions.requestToggleSimulationFavorite(\r\n projectId,\r\n taskId,\r\n simulation.get('simulationId'),\r\n ),\r\n );\r\n };\r\n\r\n return (\r\n \r\n (\r\n \r\n )}\r\n actions={\r\n simulation.get('isUpdatedPlanned')\r\n ? [\r\n {\r\n Icon: DeleteIcon,\r\n title: 'Delete',\r\n onClick: onDeleteSimulation,\r\n },\r\n ]\r\n : []\r\n }\r\n title={simulation.get('name')}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import { toggleModal } from 'app/app.actions';\r\nimport { initialize } from 'redux-form/immutable';\r\n\r\nimport projectService from 'services/project.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { getFormValuesFromState } from 'app/app.selectors';\r\nimport nptMappers from 'features/projects/npt/npt.mappers';\r\n\r\nimport {\r\n NPT_ACTIONS,\r\n MODAL,\r\n NPT_FORM,\r\n} from 'features/projects/npt/npt.constants';\r\n\r\nexport const selectProjectNonProductiveTime = (index) => (dispatch) => {\r\n return dispatch(\r\n toggleModal({ modalId: MODAL.EDIT_PROJECT_NPT, activeIndex: index }),\r\n );\r\n};\r\nexport const onEditProjectNonProductiveTimeModalLoaded =\r\n (npt) => (dispatch) => {\r\n return dispatch(initialize(NPT_FORM.EDIT_ID, npt));\r\n };\r\nexport const createProjectNonProductiveTime =\r\n (projectId, projectNonProductiveTime) => (dispatch) => {\r\n const payload = projectService.createProjectNonProductiveTime(\r\n projectId,\r\n nptMappers.NPT.to(projectNonProductiveTime.toJS()),\r\n );\r\n\r\n dispatch({\r\n payload,\r\n type: NPT_ACTIONS.CREATE_PROJECT_NON_PRODUCTIVE_TIME,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'A new project non productive time was successfully created',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const updateProjectNonProductiveTime =\r\n (projectId) => (dispatch, getState) => {\r\n const npt = getFormValuesFromState(getState(), NPT_FORM.EDIT_ID).toJS();\r\n const payload = projectService\r\n .updateProjectNonProductiveTime(projectId, nptMappers.NPT.to(npt))\r\n .then((response) => {\r\n dispatch(toggleModal({ modalId: MODAL.EDIT_PROJECT_NPT }));\r\n return response;\r\n });\r\n dispatch({\r\n projectNonProductiveTimeId: npt.projectNonProductiveTimeId,\r\n type: NPT_ACTIONS.EDIT_PROJECT_NON_PRODUCTIVE_TIME,\r\n payload,\r\n });\r\n return payload;\r\n };\r\n\r\nexport const deleteProjectNonProductiveTime =\r\n (projectId, projectNonProductiveTimeId) => (dispatch) => {\r\n dispatch({\r\n type: NPT_ACTIONS.DELETE_PROJECT_NON_PRODUCTIVE_TIME,\r\n payload: () =>\r\n projectService.deleteProjectNonProductiveTime(\r\n projectId,\r\n projectNonProductiveTimeId,\r\n ),\r\n projectNonProductiveTimeId: projectNonProductiveTimeId,\r\n confirmationDialog: {\r\n confirmButtonText: 'Delete',\r\n title: 'Delete project non productive time',\r\n description:\r\n 'Are you sure you want to delete this project non productive time?',\r\n },\r\n });\r\n };\r\n\r\nexport const getAllProjectNonProductives = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: NPT_ACTIONS.PROJECT_NON_PRODUCTIVE_TIME_REPORT_LOADED,\r\n payload: () => projectService.getAllProjectNonProductiveTimes(projectId),\r\n });\r\n\r\nexport const onProjectNonProductiveReportUnload = () => (dispatch) =>\r\n dispatch({\r\n type: NPT_ACTIONS.PROJECT_NON_PRODUCTIVE_TIME_REPORT_UNLOADED,\r\n });\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport { reduxForm, Field } from 'redux-form/immutable';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { Grid, Button, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport { ModalHeader, ModalActions, LoadingButton } from 'altus-ui-components';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\nimport { getAvailableDepartmentsFromState } from 'app/app.selectors';\r\nimport { NPT_FORM } from 'features/projects/npt/npt.constants';\r\nimport DepartmentSelectField from 'app/components/DepartmentSelectField';\r\nimport DateTimePickerField from 'app/components/form/DateTimePickerField';\r\nimport { createProjectNonProductiveTime } from 'features/projects/npt/npt.actions';\r\n\r\n// Moved outside the component to avoid re-renders\r\nconst endTimeAfterStartTime = (value, allValues) => {\r\n const startTime = allValues.get(NPT_FORM.START)?.startOf('minute');\r\n const endTime = value?.startOf('minute');\r\n\r\n if (endTime && startTime && endTime.isSameOrBefore(startTime)) {\r\n return 'End date must be after start date.';\r\n }\r\n return undefined;\r\n};\r\n\r\nconst CreateNPTModal = ({\r\n valid,\r\n isOpen,\r\n project,\r\n submitting,\r\n departments,\r\n toggleModal,\r\n handleSubmit,\r\n dispatchOnLoad,\r\n dispatchOnSave,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [availableDepartments, setAvailableDepartments] = useState(\r\n departments ?? EMPTY_LIST,\r\n );\r\n\r\n useEffect(() => {\r\n const ids = [];\r\n project.get('departments').forEach((dep) => {\r\n ids.push(dep.get('id'));\r\n });\r\n setAvailableDepartments(\r\n departments.filter((department) => ids.includes(department.get('id'))),\r\n );\r\n }, [project, departments]);\r\n\r\n const createNPT = useCallback(\r\n (values) => {\r\n if (\r\n !isNil(values?.get(NPT_FORM.START)) &&\r\n !isNil(values?.get(NPT_FORM.END))\r\n ) {\r\n const startTime = values.get(NPT_FORM.START).startOf('minute');\r\n const endTime = values.get(NPT_FORM.END).startOf('minute');\r\n\r\n if (startTime.isSameOrAfter(endTime)) {\r\n dispatch(\r\n addNotification({\r\n message: 'End date and time must be after start date and time.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n } else {\r\n dispatchOnSave(project.get('id'), values).then(() => toggleModal());\r\n }\r\n }\r\n },\r\n [project, dispatch, dispatchOnSave, toggleModal],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n Create\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n departments: getAvailableDepartmentsFromState(state),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnSave: createProjectNonProductiveTime,\r\n};\r\n\r\nexport default compose(\r\n reduxForm({\r\n form: NPT_FORM.CREATE_ID,\r\n }),\r\n connect(mapStateToProps, mapDispatchToProps),\r\n)(CreateNPTModal);\r\n","import isNil from 'lodash/isNil';\r\nimport { createRef, PureComponent } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, LinearProgress } from '@material-ui/core';\r\n\r\nimport RunNumber from 'features/projects/components/RunNumber';\r\nimport { scrollSmoothlyIntoViewIfNeeded } from 'utils/app.util';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport { Button as NavigationButton } from 'app/components/withNavigation';\r\n\r\nclass TaskSelectItem extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.item = createRef();\r\n this.scrollSmoothlyIntoViewIfNeeded =\r\n this.scrollSmoothlyIntoViewIfNeeded.bind(this);\r\n }\r\n\r\n scrollSmoothlyIntoViewIfNeeded() {\r\n const { isSelected } = this.props;\r\n\r\n if (isSelected) {\r\n scrollSmoothlyIntoViewIfNeeded(this.item.current);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const { isSelected: wasSelected } = prevProps;\r\n\r\n if (!wasSelected) {\r\n this.scrollSmoothlyIntoViewIfNeeded();\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.scrollSmoothlyIntoViewIfNeeded();\r\n }\r\n\r\n render() {\r\n const { to, task, classes, progress, isSelected } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {task.get('runNumber')}\r\n \r\n \r\n \r\n {task.get('customTitle') ?? task.get('title')}\r\n \r\n \r\n \r\n \r\n {!isNil(progress) && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n taskButton: {\r\n borderColor: theme.palette.divider,\r\n borderRadius: 0,\r\n textTransform: 'none',\r\n marginTop: 2,\r\n padding: theme.spacing(1.4),\r\n border: '1px solid transparent',\r\n },\r\n buttonIcon: {\r\n display: 'flex',\r\n width: theme.spacing(4),\r\n },\r\n title: {\r\n wordBreak: 'word',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TaskSelectItem);\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport Launch from '@material-ui/icons/Launch';\r\nimport { Grid, Typography, Button } from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport PaperListItem from 'app/components/PaperListItem';\r\nimport { MODAL } from 'features/projects/npt/npt.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { TASK_URLS } from 'features/projects/activities/activities.constants';\r\nimport CreateNPTModal from 'features/projects/npt/components/CreateNPTModal';\r\nimport TaskSelectItem from 'features/projects/activities/components/TaskSelectItem';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\n\r\nexport const TasksMenu = ({ tasks, selected, onSelect }) => {\r\n const execute = useSelector(getExecuteStatusFromState);\r\n const project = useSelector(getCurrentProject);\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_PROJECT_NPT);\r\n\r\n return (\r\n \r\n \r\n \r\n Task\r\n \r\n \r\n \r\n {tasks.map((task) => {\r\n const id = task.get('id').toString();\r\n return (\r\n onSelect(id)}\r\n progress={\r\n id === execute?.getIn(['current', 'task', 'id'])?.toString()\r\n ? execute.get('currentTaskProgress')\r\n : null\r\n }\r\n />\r\n );\r\n })}\r\n \r\n \r\n \r\n Register NPT\r\n \r\n \r\n \r\n }\r\n fullWidth\r\n >\r\n Register OBS Card\r\n \r\n \r\n \r\n }\r\n fullWidth\r\n >\r\n Register incident (synergi)\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import _isNil from 'lodash/isNil';\r\nimport { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { useTaskActivities } from 'features/projects/activities/hooks/useTaskActivities';\r\nimport { getAllTasks } from 'features/projects/activities/activities.selectors';\r\nimport * as activitiesActions from 'features/projects/activities/activities.actions';\r\nimport { getSimulationsForTaskFromState } from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\n\r\nexport const getPageTitle = (title, activities) => {\r\n if (!title) return '';\r\n\r\n if (!activities.isEmpty()) {\r\n const completedActivities = activities.filter(\r\n (activity) => activity.get('status') === WORK_ITEM_STATUS.COMPLETED,\r\n );\r\n\r\n return `${\r\n title ? `${title} (${completedActivities.size}/${activities.size})` : ''\r\n }`;\r\n }\r\n\r\n return title;\r\n};\r\nexport const useInitializeExecutionRootContainer = (projectId, taskId) => {\r\n const dispatch = useDispatch();\r\n const tasks = useSelector(getAllTasks);\r\n const simulations = useSelector((state) =>\r\n !_isNil(taskId)\r\n ? getSimulationsForTaskFromState(state, taskId)?.valueSeq()\r\n : EMPTY_LIST,\r\n );\r\n const activities = useTaskActivities(taskId) ?? EMPTY_MAP;\r\n const title = tasks\r\n ?.find((t) => t.get('id')?.toString() === taskId)\r\n ?.get('title');\r\n\r\n // Fetch tasks and project timer/status\r\n useEffect(() => {\r\n if (projectId) {\r\n dispatch(activitiesActions.onLoad(projectId));\r\n return () => {\r\n return dispatch(activitiesActions.onUnload());\r\n };\r\n }\r\n }, [projectId, dispatch]);\r\n\r\n // Fetch activities for current task - to show in header/title\r\n useEffect(() => {\r\n if (projectId && taskId) {\r\n dispatch(activitiesActions.activityListOnLoad(projectId, taskId));\r\n return () => {\r\n return dispatch(activitiesActions.activityListOnUnload());\r\n };\r\n }\r\n }, [projectId, taskId, dispatch]);\r\n\r\n useHeader({\r\n subTitle: getPageTitle(title, activities),\r\n });\r\n\r\n return { tasks, simulations };\r\n};\r\n","import { useSelector, useDispatch } from 'react-redux';\r\nimport { useParams } from 'react-router-dom';\r\nimport { LoadingButton } from 'altus-ui-components';\r\nimport AddIcon from '@material-ui/icons/Add';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport * as simulationActions from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nexport const CreateUpdatedPlannedButton = ({ simulations }) => {\r\n const { projectId, taskId } = useParams();\r\n const dispatch = useDispatch();\r\n const createUpdatedLoadingState = useSelector((state) =>\r\n getActionDataStateFromState(\r\n state,\r\n ACTIONS.REQUEST_CREATE_UPDATE_PLANNED_SIMULATION,\r\n ),\r\n );\r\n const active =\r\n simulations.some((simulation) => simulation.get('isPlanned')) &&\r\n simulations.every((simulation) => !simulation.get('isUpdatedPlanned'));\r\n\r\n if (!active) {\r\n return null;\r\n }\r\n\r\n return (\r\n }\r\n loading={createUpdatedLoadingState.isLoading()}\r\n onClick={() =>\r\n dispatch(\r\n simulationActions.requestCreateUpdatePlannedSimulation(\r\n projectId,\r\n taskId,\r\n ),\r\n )\r\n }\r\n >\r\n Simulation\r\n \r\n );\r\n};\r\n","import { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport PlayCircleFilled from '@material-ui/icons/PlayCircleFilled';\r\n\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { startOperationInitiate } from 'features/projects/activities/activities.actions';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\n\r\nconst styles = (theme) => ({\r\n startOperation: {\r\n marginTop: 30,\r\n },\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n positiveButton: {\r\n color: theme.palette.tertiary.contrastText,\r\n background: theme.palette.tertiary.main,\r\n '&:hover': {\r\n background: theme.palette.tertiary.dark,\r\n },\r\n },\r\n});\r\n\r\nconst StartOperation = ({\r\n classes,\r\n dataState,\r\n projectId,\r\n taskId,\r\n dispatchStartOperation,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n dispatchStartOperation(projectId, taskId)}\r\n dataState={dataState}\r\n >\r\n \r\n Start operation\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.START_OPERATION,\r\n ),\r\n }),\r\n {\r\n dispatchStartOperation: startOperationInitiate,\r\n },\r\n)(withStyles(styles)(StartOperation));\r\n","import { fromJS } from 'immutable';\r\nimport { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport appService from 'services/app.service';\r\n\r\nconst useTaskFailReasons = () => {\r\n const getTaskFailReasons = useCallback(\r\n () => appService.getTaskFailReasons().then(fromJS),\r\n [],\r\n );\r\n\r\n return useRequest(getTaskFailReasons);\r\n};\r\n\r\nexport default useTaskFailReasons;\r\n","import classNames from 'classnames';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, Chip } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport useTaskFailReasons from 'features/projects/hooks/useTaskFailReasons';\r\n\r\n// Obsolete, use FailureReasonFieldFormik instead\r\nconst FailureReasonField = ({ classes, input, disabled, required }) => {\r\n const { value, onChange } = input;\r\n\r\n const [taskFailReasons = EMPTY_LIST] = useTaskFailReasons();\r\n\r\n return (\r\n \r\n {`Please select reason ${\r\n required ? '*' : ''\r\n }`}\r\n \r\n (Select one)\r\n \r\n \r\n {taskFailReasons.map((reason) => {\r\n const reasonId = reason.get('id');\r\n\r\n return (\r\n \r\n onChange(value === reasonId ? null : reasonId)\r\n }\r\n classes={{\r\n root: classNames({\r\n [classes.disabledChip]: disabled,\r\n }),\r\n }}\r\n />\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n subHeader: {\r\n marginBottom: 10,\r\n },\r\n disabledChip: {\r\n opacity: 0.7,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(FailureReasonField);\r\n","import classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { reduxForm, Field, formValueSelector } from 'redux-form/immutable';\r\nimport { Grid, Typography, DialogActions, Button } from '@material-ui/core';\r\n\r\nimport {\r\n ACTIVITIES_ACTIONS,\r\n END_OPERATION_FORM,\r\n END_OPERATION_MODAL_ID,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { endOperation } from 'features/projects/activities/activities.actions';\r\nimport FailureReasonField from 'features/projects/activities/components/FailureReasonField';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\n\r\nconst EndOperationModalContainer = ({\r\n valid,\r\n classes,\r\n projectId,\r\n dataState,\r\n isProjectSuccessful,\r\n dispatchEndOperation,\r\n}) => {\r\n const submitting = dataState.isLoading();\r\n\r\n return (\r\n (\r\n \r\n \r\n \r\n\r\n \r\n dispatchEndOperation(projectId)}\r\n disabled={submitting || !valid}\r\n className={classes.completeBtn}\r\n >\r\n \r\n Complete project\r\n \r\n Changes Project status to Report\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n >\r\n
\r\n \r\n \r\n \r\n {isProjectSuccessful\r\n ? 'Completed successfully - Congratulations!'\r\n : 'Did not complete as planned'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!isProjectSuccessful && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n content: {\r\n width: 'auto',\r\n },\r\n formFields: {\r\n marginTop: 50,\r\n },\r\n subHeader: {\r\n marginBottom: 10,\r\n },\r\n nextActionsHeader: {\r\n marginBottom: 8,\r\n },\r\n dialogActions: {\r\n padding: 10,\r\n },\r\n projectSuccessful: {\r\n color: theme.altus.status.execute,\r\n },\r\n projectNotSuccessful: {\r\n color: theme.palette.error.main,\r\n },\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n rightIcon: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n completeBtn: {\r\n textTransform: 'none',\r\n },\r\n completeBtnSubText: {\r\n fontSize: '0.65rem',\r\n fontWeight: 400,\r\n },\r\n});\r\n\r\nexport default connect(\r\n (state) => ({\r\n isProjectSuccessful: formValueSelector(END_OPERATION_FORM.ID)(\r\n state,\r\n END_OPERATION_FORM.IS_SUCCESSFUL,\r\n ),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.END_OPERATION,\r\n ),\r\n }),\r\n {\r\n dispatchEndOperation: endOperation,\r\n },\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: END_OPERATION_FORM.ID,\r\n })(withStyles(styles)(EndOperationModalContainer)),\r\n ),\r\n);\r\n","import { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport Close from '@material-ui/icons/Close';\r\nimport Check from '@material-ui/icons/Check';\r\nimport Replay from '@material-ui/icons/Replay';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { toggleEndOperationModal } from 'features/projects/activities/activities.actions';\r\nimport EndOperationModalContainer from 'features/projects/activities/components/EndOperationModalContainer';\r\n\r\nconst styles = (theme) => ({\r\n completeTask: {\r\n marginTop: 30,\r\n },\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n button: {\r\n textTransform: 'none',\r\n },\r\n});\r\n\r\nconst EndOperation = ({\r\n goBack,\r\n classes,\r\n projectId,\r\n dispatchToggleEndOperationModal,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n dispatchToggleEndOperationModal(true)}\r\n >\r\n \r\n Project Objective achieved\r\n \r\n \r\n \r\n dispatchToggleEndOperationModal(false)}\r\n >\r\n \r\n Project Objective NOT achieved\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default connect(null, {\r\n dispatchToggleEndOperationModal: toggleEndOperationModal,\r\n})(withStyles(styles)(EndOperation));\r\n","import { useSelector } from 'react-redux';\r\nimport {\r\n getActionDataStateFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nconst useDataState = (actions) =>\r\n useSelector((state) =>\r\n Array.isArray(actions)\r\n ? getSummarizedDataStateFromState(state, ...actions)\r\n : getActionDataStateFromState(state, actions),\r\n );\r\n\r\nexport default useDataState;\r\n","import PropTypes from 'prop-types';\r\nimport { cloneElement, PureComponent, Children } from 'react';\r\nimport MoreVert from '@material-ui/icons/MoreVert';\r\nimport { Menu, IconButton } from '@material-ui/core';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nclass DropdownMenu extends PureComponent {\r\n state = { anchorEl: null };\r\n\r\n toggleMenu = () => {\r\n this.setState(({ open }) => ({ open: !open }));\r\n };\r\n\r\n handleClick = (event) => {\r\n this.setState({ anchorEl: event.currentTarget });\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ anchorEl: null });\r\n };\r\n\r\n render() {\r\n const { children, Trigger, onClick } = this.props;\r\n\r\n const { anchorEl } = this.state;\r\n const open = Boolean(anchorEl);\r\n\r\n return (\r\n <>\r\n {cloneElement(Trigger, {\r\n onClick: (event) => {\r\n this.handleClick(event);\r\n invokeIfFunction(onClick, event);\r\n },\r\n })}\r\n \r\n {Children.toArray(children).map((child) => {\r\n const { onClick } = child.props;\r\n\r\n return cloneElement(child, {\r\n onClick: () => {\r\n invokeIfFunction(onClick);\r\n this.handleClose();\r\n },\r\n });\r\n })}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDropdownMenu.propTypes = {\r\n Trigger: PropTypes.element,\r\n};\r\n\r\nDropdownMenu.defaultProps = {\r\n Trigger: (\r\n \r\n \r\n \r\n ),\r\n};\r\n\r\nexport default DropdownMenu;\r\n","import classNames from 'classnames';\r\nimport { PureComponent } from 'react';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button, MenuItem } from '@material-ui/core';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport DropdownMenu from 'app/components/DropdownMenu';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\n\r\nclass DropDownButton extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const { defaultOption } = props;\r\n\r\n this.state = {\r\n active: defaultOption,\r\n };\r\n }\r\n\r\n render() {\r\n const {\r\n Icon,\r\n classes,\r\n onClick,\r\n options,\r\n renderFn,\r\n defaultOption,\r\n MainButtonProps,\r\n HelperButtonProps,\r\n ...rest\r\n } = this.props;\r\n\r\n return (\r\n \r\n invokeIfFunction(onClick, this.state.active)}\r\n {...rest}\r\n {...MainButtonProps}\r\n >\r\n {Icon}\r\n {this.state.active ? (\r\n {renderFn(this.state.active)}\r\n ) : (\r\n  \r\n )}\r\n \r\n {options[1] && (\r\n \r\n \r\n \r\n }\r\n >\r\n {options.map((option, index) => (\r\n \r\n this.setState({\r\n active: option,\r\n })\r\n }\r\n key={index}\r\n selected={this.state.active === option}\r\n >\r\n {renderFn(option)}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nDropDownButton.defaultProps = {\r\n options: [],\r\n};\r\n\r\nexport default withStyles({\r\n mainButton: {\r\n borderTopRightRadius: 0,\r\n borderBottomRightRadius: 0,\r\n },\r\n helperButton: {\r\n padding: 6,\r\n minWidth: 'auto',\r\n borderTopLeftRadius: 0,\r\n borderBottomLeftRadius: 0,\r\n },\r\n})(DropDownButton);\r\n","import classNames from 'classnames';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, Chip, Box } from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport useTaskFailReasons from 'features/projects/hooks/useTaskFailReasons';\r\n\r\nconst FailureReasonFieldFormik = ({\r\n form,\r\n field,\r\n classes,\r\n disabled,\r\n required,\r\n}) => {\r\n const { name, value } = field;\r\n const { setFieldValue } = form;\r\n\r\n const [taskFailReasons = EMPTY_LIST, dataState] = useTaskFailReasons();\r\n\r\n const title = `Please select reason ${required ? '*' : ''}`;\r\n\r\n return (\r\n \r\n {title}\r\n (Select one)\r\n \r\n {taskFailReasons.map((reason) => {\r\n const reasonId = reason.get('id');\r\n\r\n return (\r\n \r\n setFieldValue(name, reasonId)\r\n }\r\n classes={{\r\n root: classNames({\r\n [classes.disabledChip]: disabled,\r\n }),\r\n }}\r\n />\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n disabledChip: {\r\n opacity: 0.7,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(FailureReasonFieldFormik);\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport classNames from 'classnames';\r\nimport { Formik, Field } from 'formik';\r\nimport { useDispatch } from 'react-redux';\r\nimport Replay from '@material-ui/icons/Replay';\r\nimport SkipNext from '@material-ui/icons/SkipNext';\r\nimport LastPage from '@material-ui/icons/LastPage';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Fragment, useCallback, useContext, useEffect, useMemo } from 'react';\r\n\r\nimport {\r\n Grid,\r\n Dialog,\r\n Typography,\r\n DialogActions,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport { ModalHeader } from 'altus-ui-components';\r\n\r\nimport {\r\n TaskFailReason,\r\n COMPLETE_TASK_MODE,\r\n COMPLETE_TASK_FORM,\r\n ACTIVITIES_ACTIONS,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport useDataState from 'app/hooks/useDataState';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport { completeTask } from 'features/projects/activities/activities.actions';\r\nimport DropDownButton from 'features/projects/activities/components/DropDownButton';\r\nimport FailureReasonFieldFormik from 'features/projects/activities/components/FailureReasonFieldFormik';\r\nimport { ExecutionRootContainerContext } from 'features/projects/execution/ExecutionRootContainer';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\n\r\nconst CompleteTaskModalContainerActions = ({\r\n tasks,\r\n valid,\r\n taskId,\r\n classes,\r\n nextTask,\r\n onSubmit,\r\n projectId,\r\n isSubmitting,\r\n objectivesMet,\r\n}) => {\r\n const completeTaskDataState = useDataState(\r\n ACTIVITIES_ACTIONS.COMPLETE_TASK_DEFAULT,\r\n );\r\n\r\n const completeEndTaskDataState = useDataState(\r\n ACTIVITIES_ACTIONS.COMPLETE_TASK_AND_END_OPERATION,\r\n );\r\n\r\n const completeRepeatTaskDataState = useDataState(\r\n ACTIVITIES_ACTIONS.COMPLETE_AND_REPEAT_TASK,\r\n );\r\n\r\n const completeTaskWithContingencyDataState = useDataState(\r\n ACTIVITIES_ACTIONS.COMPLETE_TASK_WITH_CONTINGENCY,\r\n );\r\n\r\n const contingencyTasks = tasks\r\n .filter((task) => task.contingencyForTaskId)\r\n .filter((task) => task.contingencyForTaskId.toString() === taskId);\r\n\r\n const nonContingencyTasks = tasks.filter(\r\n (task) => task.contingencyForTaskId === null,\r\n );\r\n\r\n const lastNonContingencyTask = nonContingencyTasks.filter(\r\n (task) => task.id === nextTask?.contingencyForTaskId,\r\n );\r\n\r\n const indexOflastNonContingencyTask = nonContingencyTasks.indexOf(\r\n lastNonContingencyTask[0],\r\n );\r\n\r\n const nextNonContingencyTask =\r\n nonContingencyTasks[indexOflastNonContingencyTask + 1];\r\n\r\n const index = indexOflastNonContingencyTask + 1;\r\n\r\n return (\r\n \r\n \r\n \r\n What happens next?\r\n \r\n \r\n \r\n {!objectivesMet && (\r\n \r\n onSubmit(projectId, COMPLETE_TASK_MODE.REPEAT)}\r\n >\r\n \r\n Repeat task\r\n \r\n \r\n )}\r\n {/* hide on end operation, when there are no more tasks */}\r\n {nextTask?.sequence <= tasks.length && (\r\n \r\n onSubmit(projectId)}\r\n dataState={completeTaskDataState}\r\n >\r\n \r\n {nextTask?.title || 'Start next task'}\r\n \r\n \r\n )}\r\n {/* show on end operation, when there are no more tasks */}\r\n {!nextTask?.sequence && (\r\n \r\n \r\n onSubmit(projectId, COMPLETE_TASK_MODE.END_OPERATION)\r\n }\r\n >\r\n Complete project\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {contingencyTasks[0] && (\r\n <>\r\n \r\n \r\n or select contingency\r\n \r\n \r\n \r\n \r\n task.title}\r\n disabled={isSubmitting || !valid}\r\n defaultOption={contingencyTasks[0]}\r\n Icon={}\r\n MainButtonProps={{\r\n dataState: completeTaskWithContingencyDataState,\r\n }}\r\n onClick={(task) =>\r\n onSubmit(\r\n projectId,\r\n COMPLETE_TASK_MODE.CONTINUE_WITH_CONTINGENCY,\r\n task.id,\r\n )\r\n }\r\n />\r\n \r\n \r\n \r\n )}\r\n {index > 0 && (\r\n \r\n \r\n onSubmit(\r\n projectId,\r\n COMPLETE_TASK_MODE.CONTINUE_WITH_CONTINGENCY,\r\n nextNonContingencyTask.id,\r\n )\r\n }\r\n dataState={completeTaskDataState}\r\n >\r\n \r\n {nextNonContingencyTask.customTitle || 'Start next task'}\r\n \r\n \r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst CompleteTaskForm = ({\r\n valid,\r\n tasks,\r\n values,\r\n taskId,\r\n classes,\r\n nextTask,\r\n projectId,\r\n currentTask,\r\n isSubmitting,\r\n setFieldValue,\r\n objectivesMet,\r\n setSubmitting,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const connection = useContext(ExecutionRootContainerContext);\r\n\r\n const tasksWithoutContingencies = tasks.filter(\r\n (task) => task.contingencyForTaskId === null,\r\n );\r\n\r\n const current = tasks.find((task) => task.taskId.toString() === taskId);\r\n\r\n if (current.contingencyCount) {\r\n var currentTaskindex = tasksWithoutContingencies.indexOf(current);\r\n nextTask = tasksWithoutContingencies[currentTaskindex + 1];\r\n }\r\n\r\n const dispatchCompleteTask = useCallback(\r\n (projectId, mode, contingencyTaskId) => {\r\n if (!values.objectivesMet) {\r\n values[COMPLETE_TASK_FORM.OBJECTIVES_MET] = objectivesMet;\r\n }\r\n dispatch(\r\n completeTask(\r\n projectId,\r\n mode,\r\n contingencyTaskId,\r\n values,\r\n connection,\r\n setSubmitting,\r\n ),\r\n );\r\n },\r\n [values, objectivesMet, dispatch, connection, setSubmitting],\r\n );\r\n\r\n const failureReason = values[COMPLETE_TASK_FORM.FAILURE_REASON];\r\n\r\n const commentsDisabled = objectivesMet\r\n ? isSubmitting\r\n : isSubmitting ||\r\n isNil(failureReason) ||\r\n failureReason === TaskFailReason.NONE;\r\n\r\n useEffect(() => {\r\n switch (failureReason) {\r\n case TaskFailReason.NONE:\r\n setFieldValue(COMPLETE_TASK_FORM.COMMENTS, null);\r\n break;\r\n default:\r\n break;\r\n }\r\n }, [setFieldValue, failureReason]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {currentTask.title}\r\n \r\n \r\n \r\n {objectivesMet\r\n ? 'Completed successfully - Congratulations!'\r\n : 'Did not complete as planned'}\r\n \r\n \r\n \r\n \r\n \r\n {'This will lock the Reporting and Data Acquisition'}\r\n \r\n \r\n \r\n \r\n {!objectivesMet && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst CompleteTaskModalContainer = ({\r\n tasks,\r\n isOpen,\r\n taskId,\r\n classes,\r\n nextTask,\r\n projectId,\r\n toggleModal,\r\n currentTask,\r\n objectivesMet,\r\n}) => {\r\n const initialValues = useMemo(\r\n () => ({\r\n [COMPLETE_TASK_FORM.COMMENTS]: null,\r\n [COMPLETE_TASK_FORM.TASK_ID]: taskId,\r\n [COMPLETE_TASK_FORM.FAILURE_REASON]: TaskFailReason.NONE,\r\n }),\r\n [taskId],\r\n );\r\n\r\n const validate = useCallback((values) => {\r\n const errors = {};\r\n\r\n const comments = values[COMPLETE_TASK_FORM.COMMENTS];\r\n const failureReason = values[COMPLETE_TASK_FORM.FAILURE_REASON];\r\n\r\n switch (failureReason) {\r\n case TaskFailReason.NONE:\r\n return errors;\r\n default: {\r\n if (!comments) {\r\n errors[COMPLETE_TASK_FORM.COMMENTS] = required(comments);\r\n }\r\n }\r\n }\r\n return errors;\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n {({ isValid, values, setFieldValue, isSubmitting, setSubmitting }) => (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n formFields: {\r\n marginTop: 50,\r\n },\r\n nextActionsHeader: {\r\n marginBottom: 8,\r\n },\r\n dialogActions: {\r\n padding: 10,\r\n overflow: 'hidden',\r\n },\r\n objectivesMet: {\r\n color: theme.altus.status.execute,\r\n },\r\n objectivesNotMet: {\r\n color: theme.palette.error.main,\r\n },\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n rightIcon: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default compose(\r\n toJSComponent,\r\n withStyles(styles),\r\n)(CompleteTaskModalContainer);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { useCallback, useState } from 'react';\r\nimport Replay from '@material-ui/icons/Replay';\r\nimport DoneAll from '@material-ui/icons/DoneAll';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { toggleCompleteTaskModal } from 'features/projects/activities/activities.actions';\r\nimport { COMPLETE_TASK_MODAL_ID } from 'features/projects/activities/activities.constants';\r\nimport CompleteTaskModalContainer from 'features/projects/activities/components/CompleteTaskModalContainer';\r\n\r\nconst CompleteTask = ({\r\n tasks,\r\n taskId,\r\n goBack,\r\n classes,\r\n nextTask,\r\n projectId,\r\n currentTask,\r\n}) => {\r\n const onGoBack = useCallback(\r\n () => goBack(projectId, taskId),\r\n [projectId, taskId, goBack],\r\n );\r\n\r\n const [isOpen, toggleModal] = useModal(COMPLETE_TASK_MODAL_ID);\r\n\r\n const [objectivesMet, setObjectivesMet] = useState();\r\n\r\n const toggleCompleteTaskModal = useCallback(\r\n (isObjectivesMet) => {\r\n setObjectivesMet(isObjectivesMet);\r\n toggleModal();\r\n },\r\n [toggleModal],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n toggleCompleteTaskModal(true)}\r\n >\r\n \r\n Objectives met\r\n \r\n \r\n \r\n toggleCompleteTaskModal(false)}\r\n >\r\n \r\n Objectives not met\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n completeTask: {\r\n marginTop: 30,\r\n },\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchToggleCompleteTaskModal: toggleCompleteTaskModal,\r\n }),\r\n withStyles(styles),\r\n toJSComponent,\r\n)(CompleteTask);\r\n","import { useSelector, useDispatch } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport classNames from 'classnames';\r\n\r\nimport { EMPTY_MAP, PROJECT_STATUS } from 'app/app.constants';\r\nimport StartOperation from 'features/projects/activities/components/StartOperation';\r\nimport EndOperation from 'features/projects/activities/components/EndOperation';\r\nimport CompleteTask from 'features/projects/activities/components/CompleteTask';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport { useTaskActivities } from 'features/projects/activities/hooks/useTaskActivities';\r\nimport * as actions from 'features/projects/activities/activities.actions';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n root: {\r\n background: theme.palette.background.paper,\r\n opacity: 0.9,\r\n width: '100%',\r\n left: 0,\r\n bottom: '0px',\r\n position: 'absolute',\r\n transition: 'height 250ms',\r\n height: '0px',\r\n },\r\n active: {\r\n height: '100px',\r\n },\r\n }),\r\n);\r\n\r\nexport const TaskExecution = ({ tasks, projectId, taskId, connection }) => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const execute = useSelector(getExecuteStatusFromState);\r\n const activities = useTaskActivities(taskId) ?? EMPTY_MAP;\r\n\r\n const status = execute.get('status');\r\n const progress = execute.get('progress');\r\n const nextTask = execute.getIn(['next', 'task']);\r\n const currentTask = execute.getIn(['current', 'task']);\r\n const nextActivity = execute.getIn(['next', 'activity']);\r\n const currentActivity = execute.getIn(['current', 'activity']);\r\n const previousActivity = execute.getIn(['previous', 'activity']);\r\n const currentTaskId = execute.getIn(['current', 'task', 'id']) ?? 0;\r\n\r\n const displayStartOperationBtn =\r\n !currentActivity &&\r\n !nextActivity &&\r\n !currentTask &&\r\n !nextTask &&\r\n execute.get('currentTaskProgress') === 0 &&\r\n progress === 0;\r\n\r\n const displayCompleteTaskBtn =\r\n execute.get('currentTaskProgress') === 100 &&\r\n ((!currentActivity && previousActivity && !nextActivity) ||\r\n activities.size === 0) &&\r\n parseInt(taskId) === currentTaskId;\r\n\r\n // kopaj ovde\r\n const displayEndOperationBtn =\r\n !currentActivity &&\r\n !nextActivity &&\r\n !currentTask &&\r\n !nextTask &&\r\n progress === 100 &&\r\n status === PROJECT_STATUS.EXECUTE;\r\n\r\n const active =\r\n displayStartOperationBtn ||\r\n displayEndOperationBtn ||\r\n displayCompleteTaskBtn;\r\n\r\n return (\r\n
\r\n \r\n {displayStartOperationBtn && (\r\n \r\n )}\r\n {displayEndOperationBtn && (\r\n \r\n dispatch(actions.goBack(projectId, taskId, connection))\r\n }\r\n projectId={projectId}\r\n />\r\n )}\r\n {displayCompleteTaskBtn && (\r\n \r\n dispatch(actions.goBack(projectId, taskId, connection))\r\n }\r\n currentTask={currentTask}\r\n />\r\n )}\r\n \r\n
\r\n );\r\n};\r\n","import React, { createContext, useCallback, useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Grid, Box, Tab, MenuList } from '@material-ui/core';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport { BasePage, NavTabsContainer, MenuHeader } from 'altus-ui-components';\r\n\r\nimport { ProjectPermission, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport withProjectPermission from 'app/components/withProjectPermission';\r\nimport { toExecutionSection } from 'utils/route.util';\r\nimport { SimulationMenuItem } from './components/SimulationMenuItem';\r\nimport { TasksMenu } from './components/TasksMenu';\r\nimport { useInitializeExecutionRootContainer } from './hooks/useInitializeExecutionRootContainer';\r\nimport { CreateUpdatedPlannedButton } from './components/CreateUpdatedPlannedButton';\r\nimport { TaskExecution } from './components/TaskExecution';\r\n\r\nimport { getAllDepartments } from 'app/app.actions';\r\nimport useHubConnection from 'features/projects/dashboard/hooks/useHubConnection';\r\nimport config from 'infrastructure/config';\r\nimport {\r\n getAllTasks,\r\n handleEstablishingConnectionError,\r\n refreshProjectStatus,\r\n} from 'features/projects/activities/activities.actions';\r\nimport { ProjectExecutionHub } from 'utils/activity.util';\r\n\r\nexport const ExecutionRootContainerContext = createContext(null);\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n tabsContainer: {\r\n overflow: 'hidden',\r\n height: 'calc(100vh - 250px)',\r\n width: '100vw',\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n simulations: {\r\n marginTop: 25,\r\n },\r\n leftMenu: {\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n },\r\n menuList: {\r\n width: '100%',\r\n },\r\n }),\r\n);\r\n\r\nconst ExecutionRootContainer = (props) => {\r\n const { projectId, taskId, section } = props;\r\n const dispatch = useDispatch();\r\n const raiseConnectionError = useCallback(() => {\r\n dispatch(handleEstablishingConnectionError());\r\n }, [dispatch]);\r\n\r\n const dispatchRefreshProjectStatus = useCallback(\r\n (argProjectId, argTaskId) => {\r\n dispatch(refreshProjectStatus(argProjectId, argTaskId));\r\n dispatch(getAllTasks(argProjectId));\r\n },\r\n [dispatch],\r\n );\r\n\r\n const [connection, connectionState] = useHubConnection(\r\n `${config.dashboardHubsBaseUrl}/project-execution`,\r\n raiseConnectionError,\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(getAllDepartments());\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n if (connectionState === 'Connected') {\r\n connection.on(\r\n ProjectExecutionHub.SignalProjectReload,\r\n (argProjectId, argTaskId) =>\r\n dispatchRefreshProjectStatus(argProjectId, argTaskId),\r\n );\r\n connection.invoke(ProjectExecutionHub.RegisterOnProject, projectId);\r\n }\r\n }, [connectionState, connection, dispatchRefreshProjectStatus, projectId]);\r\n\r\n const classes = useStyles();\r\n const { tasks, simulations } = useInitializeExecutionRootContainer(\r\n projectId,\r\n taskId,\r\n );\r\n\r\n // Return default index container when no data\r\n if (tasks.size === 0 && taskId === undefined) {\r\n return ;\r\n }\r\n\r\n // Redirect to first active (started) task when no selected task\r\n // Fail back to first task if none is started.\r\n if (tasks.size > 0 && taskId === undefined) {\r\n const activeTask = Array.from(tasks).find(\r\n (x) => x.get('status') === WORK_ITEM_STATUS.STARTED,\r\n );\r\n const currentTaskId = activeTask\r\n ? activeTask.get('id')\r\n : tasks.first().get('id');\r\n return (\r\n \r\n );\r\n }\r\n\r\n // Return the selected task\r\n return (\r\n \r\n \r\n \r\n toExecutionSection(projectId, id, section)}\r\n />\r\n {section === 'simulation' && simulations?.size > 0 && (\r\n \r\n \r\n \r\n \r\n \r\n {simulations?.map((simulation) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withProjectPermission(ProjectPermission.EXECUTE)(\r\n ExecutionRootContainer,\r\n);\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport { BasePage, LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport useDataState from 'app/hooks/useDataState';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport withProjectPermission from 'app/components/withProjectPermission';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n }),\r\n);\r\n\r\nconst ExecutionIndexContainer = () => {\r\n const classes = useStyles();\r\n const loadingState = useDataState(ACTIVITIES_ACTIONS.ACTIVITIES_INITIALIZED);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {loadingState.received && (\r\n \r\n There are currently no tasks or activities on this project\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withProjectPermission(ProjectPermission.EXECUTE)(\r\n ExecutionIndexContainer,\r\n);\r\n","import { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport * as actions from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport {\r\n ACTIONS,\r\n SimulationState,\r\n SimulationDirection,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport {\r\n getTaskByIdFromState,\r\n getTaskToolstringsFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\nimport {\r\n getSimulationFromState,\r\n getSimulationsForTaskFromState,\r\n createSimulationResultsByDirectionSelector,\r\n} from 'features/projects/tasks/task/simulation/simulation.selectors';\r\nimport useDataState from 'app/hooks/useDataState';\r\n\r\nexport const useInitializeExecutionSimulationContainer = (\r\n projectId,\r\n taskId,\r\n simulationId,\r\n) => {\r\n const dispatch = useDispatch();\r\n const task = useSelector((state) => getTaskByIdFromState(state, taskId));\r\n const project = useSelector(getCurrentProject);\r\n const simulation = useSelector((state) =>\r\n getSimulationFromState(state, simulationId),\r\n );\r\n const simulations = useSelector(\r\n (state) => getSimulationsForTaskFromState(state, taskId) ?? EMPTY_MAP,\r\n );\r\n // when it is normal simulation\r\n const simulationResults =\r\n useSelector(createSimulationResultsByDirectionSelector(simulationId)) ??\r\n EMPTY_MAP;\r\n // when it is simulation with set/retreive tool\r\n const simulationResultsRih =\r\n useSelector(\r\n createSimulationResultsByDirectionSelector(\r\n simulationId,\r\n SimulationDirection.RUN_IN_HOLE,\r\n ),\r\n ) ?? EMPTY_MAP;\r\n const simulationResultsPooh =\r\n useSelector(\r\n createSimulationResultsByDirectionSelector(\r\n simulationId,\r\n SimulationDirection.PULL_OUT_OF_HOLE,\r\n ),\r\n ) ?? EMPTY_MAP;\r\n\r\n const toolStrings = useSelector((state) =>\r\n getTaskToolstringsFromState(state, taskId),\r\n );\r\n const loadingState = useDataState([\r\n ACTIONS.LOAD_SIMULATION,\r\n ACTIONS.REQUEST_UPDATE_SIMULATION,\r\n ACTIONS.DOWNLOAD_SIMULATION_PDF_REPORT,\r\n ]);\r\n const runSimulationState = useDataState(ACTIONS.REQUEST_RUN_SIMULATION);\r\n\r\n // Fetch simulations for task\r\n useEffect(() => {\r\n if (projectId) {\r\n dispatch(\r\n actions.loadSimulations(projectId, taskId, [\r\n SimulationState.PLANNED,\r\n SimulationState.UPDATED_PLANNED,\r\n ]),\r\n );\r\n }\r\n\r\n // Reset simulations list on unload\r\n return () => {\r\n dispatch(actions.receiveSimulationsForTask([]));\r\n };\r\n }, [projectId, taskId, dispatch]);\r\n\r\n // Fetch selected simulation\r\n useEffect(() => {\r\n if (projectId && taskId && simulationId) {\r\n dispatch(actions.loadSimulation(projectId, taskId, simulationId));\r\n }\r\n }, [projectId, taskId, simulationId, dispatch]);\r\n\r\n return {\r\n task,\r\n project,\r\n simulation,\r\n simulations,\r\n simulationResults,\r\n toolStrings,\r\n cable: simulation?.get('cable'),\r\n loadingState,\r\n runSimulationState,\r\n simulationResultsRih,\r\n simulationResultsPooh,\r\n };\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { Grid, Box, Divider } from '@material-ui/core';\r\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\r\nimport ExportPdfIcon from '@material-ui/icons/PictureAsPdfOutlined';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Redirect } from 'react-router-dom';\r\nimport {\r\n NavTabsContainer,\r\n BasePage,\r\n LoadingOverlay,\r\n} from 'altus-ui-components';\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport withProjectPermission from 'app/components/withProjectPermission';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport { toExecutionSimulation } from 'utils/route.util';\r\nimport * as actions from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { MODAL as SIMULATION_MODAL } from 'features/projects/tasks/task/simulation/simulation.constants';\r\nimport SimulationHeader from 'features/projects/tasks/task/simulation/components/SimulationHeader';\r\nimport SimulationProjectInformation from 'features/projects/tasks/task/simulation/components/TaskSimulationDetails';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\nimport SimulationResultsContainer from 'features/projects/tasks/task/simulation/components/SimulationResultsContainer';\r\nimport TaskSimulationCableSelect from 'features/projects/tasks/task/simulation/components/TaskSimulationCableSelect';\r\nimport TaskSimulationToolstringSelect from 'features/projects/tasks/task/simulation/components/TaskSimulationToolstringSelect';\r\nimport TaskSimulationToolstringContainer from 'features/projects/tasks/task/simulation/components/TaskSimulationToolstringContainer';\r\nimport SimulationExportModalContainer from 'features/projects/tasks/task/simulation/components/SimulationExportModalContainer';\r\nimport { useInitializeExecutionSimulationContainer } from 'features/projects/execution/hooks/useInitializeExecutionSimulationContainer';\r\nimport RunSimulationProgressBar from '../../../tasks/task/simulation/components/SimulationLinearProgress';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n menuContainer: {\r\n overflow: 'auto',\r\n },\r\n section: {\r\n marginBottom: theme.spacing(2),\r\n border: `2px solid ${theme.palette.divider}`,\r\n },\r\n toolStringContainer: {\r\n height: 'calc(100vh - 265px)',\r\n },\r\n }),\r\n);\r\n\r\nconst ExecutionSimulationContainer = (props) => {\r\n const { projectId, taskId, simulationId } = props;\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [isSimulationExportModalOpen, toggleSimulationExportModal] = useModal(\r\n SIMULATION_MODAL.SIMULATION_EXPORT_MODAL_ID,\r\n );\r\n const {\r\n task,\r\n project,\r\n simulation,\r\n simulations,\r\n simulationResults,\r\n toolStrings,\r\n cable,\r\n loadingState,\r\n runSimulationState,\r\n } = useInitializeExecutionSimulationContainer(\r\n projectId,\r\n taskId,\r\n simulationId,\r\n );\r\n\r\n // => null Not possible in execution\r\n const onTogglePlanned = () => null;\r\n const onUpdateSimulation = () => null;\r\n const toggleCablePickerModal = () => null;\r\n const onToolStringChange = () => null;\r\n\r\n const [toolDataIsVerified, setToolDataIsVerified] = useState(null);\r\n const [enableSimulationButton, setEnableSimulationButton] = useState(false);\r\n\r\n useEffect(() => {\r\n if (simulation) {\r\n setEnableSimulationButton(simulation.get('isUpdatedPlanned'));\r\n }\r\n }, [simulation]);\r\n\r\n const onToggleFavorite = () =>\r\n dispatch(\r\n actions.requestToggleSimulationFavorite(projectId, taskId, simulationId),\r\n );\r\n\r\n // Return default index container when no data\r\n if (simulations.size === 0 && simulationId === undefined) {\r\n return ;\r\n }\r\n\r\n // Redirect to first simulation when no selected simulation\r\n if (simulations.size > 0 && simulationId === undefined) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // Return the selected simulation\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withProjectPermission(ProjectPermission.EXECUTE)(\r\n ExecutionSimulationContainer,\r\n);\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport { BasePage, LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport useDataState from 'app/hooks/useDataState';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport withProjectPermission from 'app/components/withProjectPermission';\r\nimport { ACTIONS as SIMULATION_ACTIONS } from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n }),\r\n);\r\n\r\nconst ExecutionSimulationIndexContainer = () => {\r\n const classes = useStyles();\r\n const loadingState = useDataState([\r\n SIMULATION_ACTIONS.REQUEST_SIMULATIONS_FOR_TASK,\r\n SIMULATION_ACTIONS.RECEIVE_SIMULATIONS_FOR_TASK,\r\n SIMULATION_ACTIONS.LOAD_SIMULATIONS,\r\n SIMULATION_ACTIONS.LOAD_SIMULATION,\r\n SIMULATION_ACTIONS.RECEIVE_SIMULATION,\r\n SIMULATION_ACTIONS.RECEIVE_SIMULATION_RESULTS,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {loadingState.received && (\r\n \r\n There are currently no planned simulations for this run.\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withProjectPermission(ProjectPermission.EXECUTE)(\r\n ExecutionSimulationIndexContainer,\r\n);\r\n","import { Field } from 'formik';\r\nimport { useMemo, useState } from 'react';\r\nimport { fromJS } from 'immutable';\r\nimport { useCallback } from 'react';\r\nimport { Grid, IconButton, Menu, MenuItem } from '@material-ui/core';\r\nimport MoreVert from '@material-ui/icons/MoreVert';\r\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\r\nimport PlaylistAddIcon from '@material-ui/icons/PlaylistAdd';\r\n\r\nimport { Table } from 'altus-ui-components';\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowAutocompleteTextFieldFormik from 'app/components/form/formik/TableRowAutocompleteTextFieldFormik';\r\nimport { cableTypeToString } from 'features/projects/tool/tool.mappers';\r\nimport { TASK_URLS } from 'features/projects/activities/activities.constants';\r\nimport {\r\n ASSET_HISTORY_EQUIPMENT_TYPE,\r\n ASSET_HISTORY_TEST_TYPES,\r\n EquipmentType,\r\n MODAL,\r\n} from 'features/equipment/equipment.constants';\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst TableCellWithFallback = ({ value, fallback = '' }) => (\r\n {value || fallback}\r\n);\r\n\r\nconst AddedCablesInExecuteTable = ({\r\n task,\r\n classes,\r\n onSubmit,\r\n cablesWithSerialNo,\r\n initialState = defaultInitialState,\r\n ...rest\r\n}) => {\r\n const taskStatus = task?.get('status');\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_ASSET_HISTORY_TEST);\r\n const [serialNumber, setSerialNumber] = useState();\r\n const [cableId, setCableId] = useState();\r\n\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleModal();\r\n };\r\n\r\n const DropdownMenu = ({ externalToolId, serialNumber }) => {\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const open = Boolean(anchorEl);\r\n const showOptions = externalToolId && serialNumber;\r\n const handleClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const complaintMenuItem = () => {\r\n return (\r\n {\r\n handleClose();\r\n window.open(\r\n TASK_URLS.ADD_COMPLAINT_URL,\r\n '_blank',\r\n 'noopener,noreferrer',\r\n );\r\n }}\r\n >\r\n \r\n Add Complaint\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!showOptions ? (\r\n \r\n {complaintMenuItem()}\r\n \r\n ) : (\r\n \r\n {\r\n setSerialNumber(serialNumber);\r\n setCableId(externalToolId);\r\n handleClose();\r\n openModal();\r\n }}\r\n >\r\n {} Add Event to\r\n Asset\r\n \r\n {\r\n handleClose();\r\n window.open(\r\n `/cable/${externalToolId}/assethistory/${serialNumber}`,\r\n '_blank',\r\n 'noopener,noreferrer',\r\n );\r\n }}\r\n >\r\n {}\r\n Open Asset History\r\n \r\n {complaintMenuItem()}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Item no.',\r\n accessor: (cable) =>\r\n cable.get('partNo')\r\n ? cable.get('partNo')\r\n : cable.get('manufacturerPartNo'),\r\n Cell: ({ value }) => ,\r\n },\r\n {\r\n xs: 3,\r\n id: 'serialNo',\r\n Header: 'Serial No.',\r\n accessor: (cable) => cable.get('serialNo'),\r\n Cell: ({ row, value }) => {\r\n if (taskStatus >= WORK_ITEM_STATUS.COMPLETED) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Cable',\r\n accessor: (cable) => cable.get('name'),\r\n Cell: ({ value }) => ,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Type',\r\n accessor: (cable) => cableTypeToString(cable.get('type')),\r\n Cell: ({ value }) => ,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Nominal Dia.',\r\n accessor: (cable) =>\r\n `${cable?.getIn(\r\n ['nominalDiameter', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['nominalDiameter', 'unit'])}`,\r\n Cell: ({ value }) => ,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Weight in Air',\r\n accessor: (cable) => {\r\n const weightKey = cable.get('weight') ? 'weight' : 'weightInAir';\r\n const roundedValue = cable?.getIn([weightKey, 'roundedValue'], null);\r\n const unit = cable?.getIn([weightKey, 'unit']);\r\n return `${roundedValue} ${unit}`;\r\n },\r\n Cell: ({ value }) => ,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Stretch',\r\n accessor: (cable) => {\r\n const weightKey = cable.get('stretchCoefficient');\r\n const roundedValue = cable?.getIn([weightKey, 'roundedValue'], null);\r\n const unit = cable?.getIn([weightKey, 'unit']);\r\n if (!roundedValue && !unit) {\r\n return '';\r\n }\r\n return `${roundedValue} ${unit}`;\r\n },\r\n Cell: ({ value }) => ,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Breaking Strength',\r\n accessor: (cable) =>\r\n `${cable?.getIn(['strength', 'roundedValue'], null)} ${cable?.getIn([\r\n 'strength',\r\n 'unit',\r\n ])}`,\r\n Cell: ({ value }) => ,\r\n },\r\n {\r\n xs: 2,\r\n id: 'action',\r\n Cell: ({ row }) => {\r\n const cable = row.original;\r\n const externalToolId = cable.get('id');\r\n const serialNumber = cable.get('serialNo');\r\n\r\n return serialNumber ? (\r\n \r\n \r\n \r\n ) : null;\r\n },\r\n },\r\n ],\r\n [taskStatus],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [onSubmit, cablesWithSerialNo],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n item.equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.CABLE ||\r\n item.equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.ALL,\r\n )}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default AddedCablesInExecuteTable;\r\n","import { Field } from 'formik';\r\nimport { useMemo, useCallback, useState } from 'react';\r\nimport { fromJS } from 'immutable';\r\n\r\nimport { Grid, IconButton, Menu, MenuItem } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport MoreVert from '@material-ui/icons/MoreVert';\r\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\r\nimport PlaylistAddIcon from '@material-ui/icons/PlaylistAdd';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowAutocompleteTextFieldFormik from 'app/components/form/formik/TableRowAutocompleteTextFieldFormik';\r\nimport { TASK_URLS } from 'features/projects/activities/activities.constants';\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\nimport {\r\n ASSET_HISTORY_EQUIPMENT_TYPE,\r\n ASSET_HISTORY_TEST_TYPES,\r\n EquipmentType,\r\n MODAL,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst AddedSurfaceEquipmentInExecuteTable = ({\r\n task,\r\n tools,\r\n classes,\r\n selectedSurfaceEquipment,\r\n onSubmitSurfaceEquipment,\r\n setSelectedSurfaceEquipment,\r\n initialState = defaultInitialState,\r\n surfaceEquipmentCategories,\r\n ...rest\r\n}) => {\r\n const taskStatus = task?.get('status');\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_ASSET_HISTORY_SURFACE);\r\n const [serialNumber, setSerialNumber] = useState();\r\n const [surfaceId, setSurfaceId] = useState();\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleModal();\r\n };\r\n\r\n const DropdownMenu = ({ externalToolId, serialNumber }) => {\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const open = Boolean(anchorEl);\r\n const showOptions = externalToolId && serialNumber;\r\n const handleClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const complaintMenuItem = () => {\r\n return (\r\n {\r\n handleClose();\r\n window.open(\r\n TASK_URLS.ADD_COMPLAINT_URL,\r\n '_blank',\r\n 'noopener,noreferrer',\r\n );\r\n }}\r\n >\r\n \r\n Add Complaint\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!showOptions ? (\r\n \r\n {complaintMenuItem()}\r\n \r\n ) : (\r\n \r\n {\r\n setSerialNumber(serialNumber);\r\n setSurfaceId(externalToolId);\r\n handleClose();\r\n openModal();\r\n }}\r\n >\r\n {} Add Event to\r\n Asset\r\n \r\n {\r\n handleClose();\r\n window.open(\r\n `/surface/${externalToolId}/assethistory/${serialNumber}`,\r\n '_blank',\r\n 'noopener,noreferrer',\r\n );\r\n }}\r\n >\r\n {}\r\n Open Asset History\r\n \r\n {complaintMenuItem()}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Item no.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n },\r\n {\r\n xs: 3,\r\n id: 'serialNo',\r\n Header: 'Serial No.',\r\n accessor: (tool) => tool.get('serialNo'),\r\n Cell: ({ row, value }) => {\r\n if (taskStatus >= WORK_ITEM_STATUS.COMPLETED) {\r\n return value;\r\n }\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Surface Eq. Group',\r\n accessor: (tool) => tool.getIn(['equipmentGroup', 'name']),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Weight (kg)',\r\n accessor: (tool) =>\r\n tool.get('weight')\r\n ? tool.get('weight').toFixed(2)\r\n : tool.get('weight_kg').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Height (mm)',\r\n accessor: (tool) =>\r\n tool.get('height')\r\n ? tool.get('height').toFixed(2)\r\n : tool.get('height_mm').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Length (mm)',\r\n accessor: (tool) =>\r\n tool.get('length')\r\n ? tool.get('length').toFixed(2)\r\n : tool.get('length_mm').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Width (mm)',\r\n accessor: (tool) =>\r\n tool.get('width')\r\n ? tool.get('width').toFixed(2)\r\n : tool.get('width_mm').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n id: 'action',\r\n Cell: ({ row }) => {\r\n const surface = row.original;\r\n const externalToolId = surface.get('equipmentId');\r\n const serialNumber = surface.get('serialNo');\r\n\r\n return serialNumber ? (\r\n \r\n \r\n \r\n ) : null;\r\n },\r\n },\r\n ],\r\n [taskStatus],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [onSubmitSurfaceEquipment, selectedSurfaceEquipment],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n item.equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.SURFACE ||\r\n item.equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.ALL,\r\n )}\r\n />\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n iconPadding: {\r\n paddingRight: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AddedSurfaceEquipmentInExecuteTable);\r\n","import { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport _isNil from 'lodash/isNil';\r\nimport { Formik, Form } from 'formik';\r\nimport DoneAll from '@material-ui/icons/DoneAll';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useEffect, useCallback, useState } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\nimport { Grid, Typography, IconButton } from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getSimulationsForTaskFromState,\r\n getSelectedCablesForTaskFromState,\r\n} from 'features/projects/tasks/task/simulation/simulation.selectors';\r\n\r\nimport {\r\n copySerialsForSEFromAnotherTask,\r\n onLoadTaskSurfaceEquipment,\r\n saveCableSerialNumberToTask,\r\n saveSurfaceEquipmentSerialNumber,\r\n} from 'features/projects/tasks/tasks.actions';\r\n\r\nimport {\r\n getAllTasksFromState,\r\n getTaskById,\r\n getTaskSurfaceEquipmentFromState,\r\n} from 'features/projects/tasks/tasks.selectors';\r\n\r\nimport {\r\n ACTIONS,\r\n SimulationState,\r\n} from 'features/projects/tasks/task/simulation/simulation.constants';\r\n\r\nimport {\r\n MODAL,\r\n EquipmentType,\r\n EQUIPMENT_CATEGORY_ENUM,\r\n ASSET_HISTORY_TEST_TYPE,\r\n ASSET_HISTORY_TEST_TYPES,\r\n ASSET_HISTORY_EVENT_TYPES,\r\n ASSET_HISTORY_EVENT_TYPES_ITEM,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport { EMPTY_LIST, ProjectPermission } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport withProjectPermission from 'app/components/withProjectPermission';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport * as actions from 'features/projects/tasks/task/simulation/simulation.actions';\r\nimport { TASK_SURFACE_EQUIPMENT_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport { validateSurfaceEquipmentSerialNumbers } from 'features/equipment/equipment.actions';\r\nimport { getSurfaceEquipmentCategoriesFromState } from 'features/equipment/equipment.selectors';\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\nimport AddedCablesInExecuteTable from 'features/projects/tasks/task/surfaceEquipment/components/cables/AddedCablesInExecuteTable';\r\nimport AddedSurfaceEquipmentInExecuteTable from 'features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddedSurfaceEquipmentInExecuteTable';\r\n\r\nexport const EXECUTION_SE_FILTERS = {\r\n AUTOFILL_SERIALS_SELECT_FIELD: 'AUTOFILL_SERIALS_SELECT_FIELD',\r\n};\r\n\r\nconst defaultFormValues = {\r\n [EXECUTION_SE_FILTERS.AUTOFILL_SERIALS_SELECT_FIELD]: EMPTY_LIST,\r\n};\r\n\r\nconst getKey = (item) => item.get('taskId');\r\nconst getName = (item) => item.get('title')?.toUpperCase();\r\n\r\nconst ExecutionSurfaceEquipmentContainer = ({\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n dispatchOnLoad,\r\n surfaceEquipmentFromState,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [priorTasks, setPriorTasks] = useState(EMPTY_LIST);\r\n\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_ASSET_HISTORY_SURFACE_SIL2);\r\n\r\n const allProjectTasks = useSelector(getAllTasksFromState);\r\n const task = useSelector((state) => getTaskById(taskId)(state));\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId, taskId);\r\n }, [taskId, dispatchOnLoad, projectId]);\r\n\r\n useEffect(() => {\r\n if (projectId) {\r\n dispatch(\r\n actions.loadSimulations(projectId, taskId, [\r\n SimulationState.PLANNED,\r\n SimulationState.UPDATED_PLANNED,\r\n ]),\r\n );\r\n }\r\n }, [projectId, taskId, dispatch]);\r\n\r\n useEffect(() => {\r\n const taskIdNumber = Number(taskId);\r\n\r\n const matchedTask = allProjectTasks.find(\r\n (task) => task.get('taskId') === taskIdNumber,\r\n );\r\n\r\n if (!matchedTask) {\r\n setPriorTasks(List());\r\n return;\r\n }\r\n\r\n setPriorTasks(\r\n allProjectTasks.filter(\r\n (task) =>\r\n task.get('sequence') < matchedTask.get('sequence') &&\r\n task.get('taskId') !== taskIdNumber,\r\n ),\r\n );\r\n }, [taskId, allProjectTasks]);\r\n\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleModal();\r\n };\r\n\r\n const validateSil2SurfaceEquipmentSerialNumbers = () => {\r\n dispatch(validateSurfaceEquipmentSerialNumbers(taskId));\r\n };\r\n\r\n const testTypesItems = List([\r\n ASSET_HISTORY_TEST_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_TEST_TYPE.SIL2_TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const assetHistoryEventTypes = List([\r\n ASSET_HISTORY_EVENT_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const surfaceEquipmentCategories = surfaceEquipmentFromState.filter(\r\n (item) => !!item.get('serialNo'),\r\n );\r\n\r\n const sil2TestBopItems = surfaceEquipmentCategories.filter(\r\n (item) => item.get('equipmentCategory') === EQUIPMENT_CATEGORY_ENUM.BOP,\r\n );\r\n\r\n const sil2TestBcsItems = surfaceEquipmentCategories.filter(\r\n (item) => item.get('equipmentCategory') === EQUIPMENT_CATEGORY_ENUM.BCS,\r\n );\r\n\r\n const sil2TestCabinItems = surfaceEquipmentCategories.filter(\r\n (item) => item.get('equipmentCategory') === 2,\r\n );\r\n\r\n const simulations = useSelector((state) =>\r\n !_isNil(taskId)\r\n ? getSimulationsForTaskFromState(state, taskId)?.valueSeq()\r\n : EMPTY_LIST,\r\n );\r\n\r\n const selectedCables = useSelector((state) =>\r\n getSelectedCablesForTaskFromState(state, taskId),\r\n );\r\n\r\n const onSubmitCable = useCallback(\r\n (values) => {\r\n dispatch(saveCableSerialNumberToTask(projectId, taskId, values.serialNo));\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n const onSubmitSurfaceEquipment = useCallback(\r\n (values) => {\r\n dispatch(\r\n saveSurfaceEquipmentSerialNumber(\r\n projectId,\r\n taskId,\r\n values.serialNo,\r\n values.taskSurfaceId,\r\n ),\r\n );\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n const cablesWithSerialNo = selectedCables?.update(0, (cable) =>\r\n cable.set('serialNo', task?.get('individualSerialNumber')),\r\n );\r\n\r\n const onSubmitForm = useCallback(\r\n (formValues) => {\r\n dispatch(\r\n copySerialsForSEFromAnotherTask(\r\n projectId,\r\n taskId,\r\n formValues.AUTOFILL_SERIALS_SELECT_FIELD,\r\n ),\r\n );\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cables\r\n \r\n {!simulations || !task || !cablesWithSerialNo ? (\r\n \r\n \r\n No simulations planned.\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n Surface Equipment\r\n\r\n \r\n validateSil2SurfaceEquipmentSerialNumbers()\r\n }\r\n >\r\n \r\n \r\n \r\n {!surfaceEquipmentFromState.size ? (\r\n \r\n \r\n No surface equipment added.\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n emptyEquipment: {\r\n border: `thin solid ${theme.palette.grey[700]}`,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '15vh',\r\n },\r\n equipmentContainer: {\r\n gap: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n surfaceEquipmentFromState: getTaskSurfaceEquipmentFromState(state),\r\n surfaceEquipmentCategoriesFromState:\r\n getSurfaceEquipmentCategoriesFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIONS.LOAD_SIMULATIONS,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.PAGE_LOADED,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_CABLE_SERIAL_NUMBER,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadTaskSurfaceEquipment,\r\n};\r\n\r\nexport default withProjectPermission(ProjectPermission.EXECUTE)(\r\n compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n )(ExecutionSurfaceEquipmentContainer),\r\n);\r\n","export const styles = (theme) => ({\r\n empty: {\r\n borderBottom: 'none!important',\r\n '& td': {\r\n paddingTop: 50,\r\n textAlign: 'center',\r\n },\r\n },\r\n loadingContainer: {\r\n height: '100%',\r\n },\r\n progress: {\r\n color: theme.palette.action.active,\r\n },\r\n expansionPanelExpanded: {\r\n justifyContent: 'center',\r\n display: 'flex',\r\n marginBottom: 0,\r\n },\r\n expansionPanelDetailsRoot: {\r\n padding: theme.spacing(2),\r\n },\r\n activitiesList: {\r\n display: 'block',\r\n [theme.breakpoints.up('md')]: {\r\n overflow: 'auto',\r\n },\r\n },\r\n childrenContainer: {\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\n","import * as yup from 'yup';\r\nimport moment from 'moment/moment';\r\n\r\n// Utility function to check if a date is in a range\r\nconst isDateInRange = (value, startDate, endDate) => {\r\n if (\r\n !moment(value).isValid() ||\r\n !moment(startDate).isValid() ||\r\n !moment(endDate).isValid()\r\n ) {\r\n return false;\r\n }\r\n\r\n // Ensure all dates are treated consistently in the local time zone\r\n const momentValue = moment.utc(value);\r\n const momentStartDate = moment.utc(startDate);\r\n const momentEndDate = moment.utc(endDate);\r\n return momentValue.isBetween(momentStartDate, momentEndDate, null, '[]');\r\n};\r\nconst isValidDate = (date) => date && moment(date).isValid();\r\n\r\nconst startTimeValidation = {\r\n startTime: yup\r\n .date()\r\n .typeError('Start Date is required')\r\n .required('Start Date is required')\r\n .when(\r\n [\r\n 'endTime',\r\n 'previousActivityStartTime',\r\n 'hasWaitCodes',\r\n 'nextActivityStartTime',\r\n 'previousActivityAdjustedStartTime',\r\n 'nextActivityAdjustedStartTime',\r\n 'previousWaitingActivityStartTime',\r\n 'previousWaitingActivityEndTime',\r\n ],\r\n (\r\n endTime,\r\n previousActivityStartTime,\r\n hasWaitCodes,\r\n nextActivityStartTime,\r\n previousActivityAdjustedStartTime,\r\n nextActivityAdjustedStartTime,\r\n previousWaitingActivityStartTime,\r\n previousWaitingActivityEndTime,\r\n ) => {\r\n let baseValidation = yup\r\n .date()\r\n .typeError('Start Date is required')\r\n .required('Start Date is required')\r\n .test(\r\n 'is-start-date-future',\r\n \"Start Date can't be in the future\",\r\n (value) => value < new Date(),\r\n );\r\n baseValidation = baseValidation.test(\r\n 'is-in-previous-waiting-range',\r\n 'Start date must not fall within the duration of the previous waiting activity',\r\n function (value) {\r\n if (\r\n isValidDate(previousWaitingActivityStartTime) &&\r\n isValidDate(previousWaitingActivityEndTime)\r\n ) {\r\n return !isDateInRange(\r\n value,\r\n previousWaitingActivityStartTime,\r\n previousWaitingActivityEndTime,\r\n );\r\n }\r\n\r\n return true;\r\n },\r\n );\r\n\r\n if (isValidDate(previousWaitingActivityEndTime)) {\r\n return baseValidation.test(\r\n 'is-start-after-wait-code-end',\r\n 'Start date must be after the end of the previous wait code',\r\n function (value) {\r\n return moment(value).isAfter(\r\n moment(previousWaitingActivityEndTime),\r\n );\r\n },\r\n );\r\n }\r\n\r\n if (\r\n hasWaitCodes &&\r\n isValidDate(nextActivityStartTime) &&\r\n isValidDate(previousActivityStartTime)\r\n ) {\r\n return baseValidation\r\n .max(\r\n nextActivityStartTime,\r\n 'Start date must be before start date of next activity or end of wait code',\r\n )\r\n .min(\r\n previousActivityStartTime,\r\n 'Start date must be after start of previous activity',\r\n );\r\n }\r\n if (\r\n hasWaitCodes &&\r\n isValidDate(nextActivityStartTime) &&\r\n isValidDate(previousActivityStartTime)\r\n ) {\r\n return baseValidation\r\n .max(\r\n nextActivityStartTime,\r\n 'Start date must be before start date of next activity or end of wait code',\r\n )\r\n .min(\r\n previousActivityStartTime,\r\n 'Start date must be after start of previous activity',\r\n );\r\n }\r\n\r\n if (\r\n hasWaitCodes &&\r\n !previousActivityStartTime &&\r\n isValidDate(nextActivityStartTime)\r\n ) {\r\n return baseValidation.max(\r\n nextActivityStartTime,\r\n 'Start date must be before start date of next activity or end of wait code',\r\n );\r\n }\r\n\r\n if (isValidDate(endTime) && isValidDate(previousActivityStartTime)) {\r\n return baseValidation\r\n .max(\r\n endTime,\r\n 'Start date must be before start date of next activity or end of wait code',\r\n )\r\n .min(\r\n previousActivityStartTime,\r\n 'Start date must be after start of previous activity',\r\n );\r\n }\r\n if (!previousActivityStartTime && isValidDate(endTime)) {\r\n return baseValidation.max(\r\n endTime,\r\n 'Start date must be before start date of next activity',\r\n );\r\n }\r\n if (!endTime && isValidDate(previousActivityStartTime)) {\r\n return baseValidation.min(\r\n previousActivityStartTime,\r\n 'Start date must be after start date of previous activity',\r\n );\r\n }\r\n\r\n if (\r\n isValidDate(previousActivityStartTime) &&\r\n isValidDate(nextActivityStartTime)\r\n ) {\r\n return baseValidation.test(\r\n 'is-next-after-previous',\r\n 'Start date must be after previous activity start date',\r\n () =>\r\n moment(nextActivityStartTime).isAfter(previousActivityStartTime),\r\n );\r\n }\r\n\r\n if (\r\n isValidDate(previousActivityAdjustedStartTime) &&\r\n isValidDate(nextActivityAdjustedStartTime)\r\n ) {\r\n return baseValidation\r\n .max(\r\n nextActivityAdjustedStartTime,\r\n 'Start date should not be between the duration of the previous waiting activity',\r\n )\r\n .min(\r\n previousActivityAdjustedStartTime,\r\n 'Start date should not be between the duration of the previous waiting activity',\r\n );\r\n }\r\n\r\n return baseValidation;\r\n },\r\n ),\r\n};\r\n\r\nconst endTimeValidationSpecific = {\r\n endTime: yup\r\n .date()\r\n .typeError('End date is required')\r\n .required('End date is required')\r\n .when(\r\n [\r\n 'startTime',\r\n 'nextActivityStartTime',\r\n 'isNextPausedWaitingActivity',\r\n 'nextNonPausedActivityStartTime',\r\n ],\r\n (\r\n startTime,\r\n nextActivityStartTime,\r\n isNextPausedWaitingActivity,\r\n nextNonPausedActivityStartTime,\r\n ) => {\r\n let baseValidation = yup\r\n .date()\r\n .typeError('End Date is required')\r\n .required('End Date is required')\r\n .test(\r\n 'is-start-date-future',\r\n \"End Date can't be in the future\",\r\n (value) => value < new Date(),\r\n );\r\n if (isValidDate(startTime)) {\r\n if (\r\n isNextPausedWaitingActivity &&\r\n isValidDate(nextNonPausedActivityStartTime)\r\n ) {\r\n return baseValidation\r\n .min(startTime, 'End date must be after start date of wait code')\r\n .max(\r\n nextNonPausedActivityStartTime,\r\n 'End date must be before start time of following activity',\r\n );\r\n }\r\n if (isValidDate(nextActivityStartTime)) {\r\n return baseValidation\r\n .min(startTime, 'End date must be after start date of wait code')\r\n .max(\r\n nextActivityStartTime,\r\n 'End date must be before start time of following activity',\r\n );\r\n }\r\n if (!nextActivityStartTime) {\r\n return baseValidation.min(\r\n startTime,\r\n 'End date must be after start date of wait code',\r\n );\r\n }\r\n }\r\n return baseValidation;\r\n },\r\n ),\r\n};\r\n\r\nexport const validationSchemaForCompletedItem = yup\r\n .object()\r\n .shape(startTimeValidation);\r\nexport const validationSchemaForCurrentItem = yup\r\n .object()\r\n .shape(startTimeValidation);\r\nexport const customEndDateValidation = yup\r\n .object()\r\n .shape(endTimeValidationSpecific);\r\n","import classNames from 'classnames';\r\nimport { SortableHandle } from 'react-sortable-hoc';\r\nimport DragHandle from '@material-ui/icons/DragHandle';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { IconButton } from 'app/components/withTooltip';\r\n\r\nconst styles = () => {\r\n return {\r\n dragHandle: {\r\n cursor: 'move',\r\n display: 'flex',\r\n },\r\n dragHandleDisabled: {\r\n cursor: 'not-allowed',\r\n },\r\n };\r\n};\r\n\r\nconst WorkItemSortHandle = ({ disabled, classes }) => (\r\n e.preventDefault()}\r\n title={disabled ? '' : 'Move'}\r\n className={classNames(classes.dragHandle, {\r\n [classes.dragHandleDisabled]: disabled,\r\n })}\r\n >\r\n \r\n \r\n);\r\n\r\nexport default SortableHandle(withStyles(styles)(WorkItemSortHandle));\r\n","import { anyLoadingDataState, LoadingDataState } from 'altus-datastate';\r\n\r\nimport LoadingDimmer from 'app/components/LoadingDimmer';\r\n\r\nconst withDataState =\r\n (WrappedComponent) =>\r\n ({\r\n loadingText = 'Loading',\r\n renderWhileLoading = false,\r\n dataState = LoadingDataState,\r\n LoadingDimmerProps,\r\n innerRef,\r\n ...rest\r\n }) => {\r\n const isLoading = anyLoadingDataState(dataState);\r\n\r\n if (!isLoading) {\r\n return ;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {!!renderWhileLoading && }\r\n \r\n );\r\n };\r\n\r\nexport default withDataState;\r\n","import { useContext } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Chip } from '@material-ui/core';\r\nimport Stop from '@material-ui/icons/Stop';\r\nimport * as PropTypes from 'prop-types';\r\nimport { completeActivityAbortTask } from 'features/projects/activities/activities.actions';\r\nimport { ExecutionRootContainerContext } from 'features/projects/execution/ExecutionRootContainer';\r\n\r\nexport const ButtonStop = (props) => {\r\n const { label, projectId, taskId, activityId, classes } = props;\r\n const connection = useContext(ExecutionRootContainerContext);\r\n const dispatch = useDispatch();\r\n return (\r\n }\r\n onClick={() =>\r\n dispatch(\r\n completeActivityAbortTask(projectId, taskId, activityId, connection),\r\n )\r\n }\r\n classes={{\r\n root: classes.chipRoot,\r\n }}\r\n />\r\n );\r\n};\r\n\r\nButtonStop.propTypes = {\r\n label: PropTypes.string,\r\n projectId: PropTypes.string,\r\n taskId: PropTypes.string,\r\n activityId: PropTypes.string,\r\n classes: PropTypes.any,\r\n};\r\n","import classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport Info from '@material-ui/icons/Info';\r\nimport Stop from '@material-ui/icons/Stop';\r\nimport Pause from '@material-ui/icons/Pause';\r\nimport Close from '@material-ui/icons/Close';\r\nimport Replay from '@material-ui/icons/Replay';\r\nimport { createRef, PureComponent } from 'react';\r\nimport { Button, Chip, Grid, Tooltip, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\n\r\nimport {\r\n ACTIVITIES_ACTIONS,\r\n ACTIVITY_BUTTONS,\r\n TRAC_SUBACTIVITY_CODE,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport {\r\n getExecuteStatusFromState,\r\n getPointInTimeActivityTypes,\r\n getWaitingActivityTypes,\r\n} from 'features/projects/activities/activities.selectors';\r\n\r\nimport withDataState from 'app/components/withDataState';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { scrollSmoothlyIntoViewIfNeeded } from 'utils/app.util';\r\nimport { ButtonStop } from './components/ButtonStop';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nclass ActivityDetails extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.root = createRef();\r\n\r\n this.state = {\r\n toggledActivityButton: undefined,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n scrollSmoothlyIntoViewIfNeeded(this.root.current);\r\n }\r\n\r\n setToggledActivityButton = (type) => {\r\n this.setState((state) => ({\r\n toggledActivityButton:\r\n state.toggledActivityButton === type ? undefined : type,\r\n }));\r\n };\r\n\r\n render() {\r\n const {\r\n goBack,\r\n taskId,\r\n classes,\r\n activity,\r\n previous,\r\n projectId,\r\n abortTaskDataState,\r\n activityTypesWaiting,\r\n pauseActivityDataState,\r\n activityTypesPointInTime,\r\n completeActivityDataState,\r\n createPointInTimeActivityDataState,\r\n createNewPointInTimeActivity,\r\n pauseActivity,\r\n } = this.props;\r\n\r\n const { toggledActivityButton } = this.state;\r\n\r\n const completingActivity = completeActivityDataState.isLoading();\r\n\r\n const cantUndo = !previous.canGoBack;\r\n\r\n return (\r\n \r\n \r\n \r\n {[\r\n {\r\n type: ACTIVITY_BUTTONS.WAIT,\r\n Icon: Pause,\r\n label: 'Wait',\r\n },\r\n {\r\n type: ACTIVITY_BUTTONS.STOP,\r\n Icon: Stop,\r\n label: 'Stop',\r\n },\r\n {\r\n type: ACTIVITY_BUTTONS.EVENT,\r\n Icon: Info,\r\n label: 'Sub Activity',\r\n },\r\n ].map(({ type, Icon, label }) => (\r\n \r\n this.setToggledActivityButton(type)}\r\n >\r\n {toggledActivityButton === type ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {label}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n goBack(projectId, taskId)}\r\n variant=\"contained\"\r\n disabled={completingActivity || cantUndo}\r\n >\r\n \r\n Undo\r\n \r\n \r\n \r\n \r\n \r\n \r\n {toggledActivityButton && (\r\n \r\n \r\n {withDataState(() => {\r\n switch (toggledActivityButton) {\r\n case ACTIVITY_BUTTONS.WAIT: {\r\n if (activityTypesWaiting.length) {\r\n return activityTypesWaiting.map((activityType) => {\r\n const { id: activityTypeId, value } = activityType;\r\n let { name } = value;\r\n name = `${name}`;\r\n\r\n return (\r\n \r\n }\r\n onClick={() =>\r\n pauseActivity(\r\n projectId,\r\n taskId,\r\n activity.id,\r\n activityTypeId,\r\n )\r\n }\r\n classes={{\r\n root: classes.chipRoot,\r\n }}\r\n />\r\n \r\n );\r\n });\r\n }\r\n return (\r\n \r\n No actions found...\r\n \r\n );\r\n }\r\n case ACTIVITY_BUTTONS.STOP: {\r\n return ['Abort run'].map((stop) => (\r\n \r\n \r\n \r\n ));\r\n }\r\n case ACTIVITY_BUTTONS.EVENT: {\r\n if (activityTypesPointInTime.length) {\r\n return activityTypesPointInTime\r\n .filter(\r\n (activityType) =>\r\n activityType?.value?.code !== TRAC_SUBACTIVITY_CODE,\r\n )\r\n .map((activityType) => {\r\n const { id: activityTypeId, value } = activityType;\r\n const { name } = value;\r\n\r\n return (\r\n \r\n }\r\n onClick={() => {\r\n createNewPointInTimeActivity(\r\n projectId,\r\n taskId,\r\n activity.id,\r\n activityTypeId,\r\n );\r\n }}\r\n classes={{\r\n root: classes.chipRoot,\r\n }}\r\n />\r\n \r\n );\r\n });\r\n }\r\n return (\r\n \r\n No actions found...\r\n \r\n );\r\n }\r\n default:\r\n break;\r\n }\r\n })({\r\n renderWhileLoading: true,\r\n loadingText: 'Loading',\r\n dataState: [\r\n abortTaskDataState,\r\n pauseActivityDataState,\r\n createPointInTimeActivityDataState,\r\n ],\r\n LoadingDimmerProps: {\r\n classes: {\r\n progress: classes.loadingProgress,\r\n },\r\n },\r\n })}\r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n activityTypesWaiting: getWaitingActivityTypes(state),\r\n activityTypesPointInTime: getPointInTimeActivityTypes(state),\r\n execute: getExecuteStatusFromState(state),\r\n completeActivityDataState: getActionDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.COMPLETE_ACTIVITY,\r\n ),\r\n abortTaskDataState: getActionDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.COMPLETE_ACTIVITY_ABORT_TASK,\r\n ),\r\n pauseActivityDataState: getActionDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.INITIATE_PAUSE_ACTIVITY,\r\n ),\r\n createPointInTimeActivityDataState: getActionDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.CREATE_NEW_POINT_IN_TIME_ACTIVITY,\r\n ),\r\n});\r\n\r\nconst styles = (theme) => {\r\n return {\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n chipRoot: {\r\n height: 'auto',\r\n padding: 5,\r\n },\r\n loadingContainer: {\r\n backgroundColor: 'transparent',\r\n height: '100%',\r\n position: 'absolute',\r\n },\r\n loadingProgress: {\r\n width: theme.spacing(1.5),\r\n height: theme.spacing(1.5),\r\n },\r\n startActivityButton: {\r\n textTransform: 'none',\r\n },\r\n rootContainer: {\r\n background: alpha(theme.palette.common.white, 0.08),\r\n paddingTop: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n marginBottom: theme.spacing(2),\r\n },\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n {},\r\n)(toJSComponent(withStyles(styles)(ActivityDetails)));\r\n","import { lighten } from '@material-ui/core/styles';\r\n\r\nexport const styles = (theme) => ({\r\n iconButtonRoot: {\r\n maxWidth: '33%',\r\n height: 'auto',\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n '&:hover': {\r\n background: theme.altus.background.listitem,\r\n },\r\n },\r\n expansionPanelDetailsRoot: {\r\n padding: 20,\r\n },\r\n expandIconHidden: {\r\n display: 'none',\r\n },\r\n expansionPanelExpanded: {},\r\n paperExpandable: {\r\n '&:hover': {\r\n cursor: 'initial',\r\n },\r\n },\r\n textAreaRoot: theme.typography.caption,\r\n datePickerContainer: {\r\n paddingRight: theme.spacing(2),\r\n },\r\n textFieldHighlight: {\r\n backgroundColor: lighten(\r\n theme.altus.components.SortableListRow.background,\r\n 0.05,\r\n ),\r\n },\r\n statusIconContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n actions: {\r\n marginTop: theme.spacing(2),\r\n },\r\n childrenContainer: {\r\n marginTop: theme.spacing(2),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n childDescription: {\r\n paddingLeft: '7%',\r\n },\r\n});\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport { styles } from 'features/projects/tasks/task/activities/ActivityListItem/helpers/styles';\r\n\r\nexport const addStyles = (Component) => withStyles(styles)(Component);\r\n\r\nexport const isDepthChanged = (newDepth, oldDepth) => {\r\n const {roundedValue, ...oldDepthWithoutRoundedValue} = oldDepth;\r\n const isSame = (newDepth.hasValue && oldDepthWithoutRoundedValue.hasValue) ?\r\n newDepth.unit === oldDepthWithoutRoundedValue.unit && newDepth.value === oldDepthWithoutRoundedValue.value :\r\n (!newDepth.hasValue && !oldDepthWithoutRoundedValue.hasValue);\r\n return !isSame;\r\n}\r\n","export const FormFields = {\r\n START_TIME: 'startTime',\r\n END_TIME: 'endTime',\r\n DESCRIPTION: 'description',\r\n DEPTH: 'depth',\r\n PARALLEL_ACTIVITY: 'parallelActivity',\r\n COMMENTS: 'comments',\r\n PREVIOUS_ACTIVITY_START_TIME: 'previousActivityStartTime',\r\n NEXT_ACTIVITY_START_TIME: 'nextActivityStartTime',\r\n HAS_WAIT_CODES: 'hasWaitCodes',\r\n};\r\n","import { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport { Field, Formik } from 'formik';\r\nimport Delete from '@material-ui/icons/Delete';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport DateTimePickerFormik from 'app/components/form/formik/DateTimePickerFormik';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { convertFromRaw, convertToRaw, EditorState } from 'draft-js';\r\n// import { SortableElement } from 'react-sortable-hoc';\r\n// import HasProjectPermission from 'app/components/HasProjectPermission';\r\n// import { ProjectPermission } from 'app/app.constants';\r\n// import WorkItemSortHandle from 'features/projects/components/WorkItemSortHandle';\r\n\r\nconst FormFields = {\r\n START_TIME: 'startTime',\r\n DESCRIPTION: 'description',\r\n};\r\n\r\n/**\r\n * Commented the sorting code for release\r\n * since it has some issues.\r\n * Planned to resolve it after the release.\r\n */\r\nconst ActivityChildComponent = ({\r\n child,\r\n classes,\r\n onClick,\r\n updateActivityTimes,\r\n onChildDescriptionChanged,\r\n isLastSubActivity = false,\r\n // isCurrentActivity = false,\r\n}) => {\r\n const [rawActivityDescriptionJson, setRawActivityDescriptionJson] =\r\n useState();\r\n const [activityDescriptionEditorState, setActivityDescriptionEditorState] =\r\n useState(EditorState.createEmpty());\r\n\r\n const updateContent = useCallback(\r\n (content, setContent, setEditorState, editorState) => {\r\n // 8343 restored && !setContent due to non-refreshing fields\r\n if (child[content]?.getCurrentContent() && setContent) {\r\n const rawEditorState = convertToRaw(editorState.getCurrentContent());\r\n if (JSON.stringify(rawEditorState) !== JSON.stringify(setContent)) {\r\n const rawContentState = convertToRaw(\r\n child[content].getCurrentContent(),\r\n );\r\n const newEditorState = EditorState.createWithContent(\r\n convertFromRaw(rawContentState),\r\n );\r\n setEditorState(newEditorState);\r\n }\r\n }\r\n },\r\n [child],\r\n );\r\n\r\n const updateValues = (values, key, setRawJson) => {\r\n const JSONValue = JSON.stringify(\r\n convertToRaw(values[key].getCurrentContent()),\r\n );\r\n setRawJson(JSONValue);\r\n };\r\n\r\n const initialFormValues = useMemo(\r\n () => ({\r\n [FormFields.START_TIME]: formatDate(child.startTime),\r\n [FormFields.DESCRIPTION]: activityDescriptionEditorState,\r\n }),\r\n [activityDescriptionEditorState, child.startTime],\r\n );\r\n\r\n const onSubmit = useCallback(\r\n (values, formik) => {\r\n let hasChanged = false;\r\n if (\r\n JSON.stringify(convertToRaw(values.description.getCurrentContent())) !==\r\n JSON.stringify(\r\n convertToRaw(initialFormValues.description.getCurrentContent()),\r\n )\r\n ) {\r\n updateValues(values, 'description', setRawActivityDescriptionJson);\r\n setActivityDescriptionEditorState(values.description);\r\n hasChanged = true;\r\n }\r\n if (hasChanged) {\r\n onChildDescriptionChanged(values.description, child);\r\n }\r\n if (formatDate(child.startTime) !== values.startTime) {\r\n child.startTime = values.startTime;\r\n child.endTime = values.endTime;\r\n updateActivityTimes(child.projectId, child.taskId, false, child);\r\n formik.resetForm();\r\n }\r\n },\r\n [\r\n child,\r\n onChildDescriptionChanged,\r\n updateActivityTimes,\r\n initialFormValues.description,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n const newRawActivityDescriptionJson = child.description\r\n ? convertToRaw(child.description.getCurrentContent())\r\n : child.description;\r\n\r\n if (\r\n JSON.stringify(rawActivityDescriptionJson) !==\r\n JSON.stringify(newRawActivityDescriptionJson) &&\r\n child.description\r\n ) {\r\n setRawActivityDescriptionJson(newRawActivityDescriptionJson);\r\n updateContent(\r\n 'description',\r\n newRawActivityDescriptionJson,\r\n setActivityDescriptionEditorState,\r\n activityDescriptionEditorState,\r\n );\r\n }\r\n // eslint-disable-next-line\r\n }, [child, rawActivityDescriptionJson]);\r\n\r\n return (\r\n \r\n \r\n \r\n {/* \r\n {isCurrentActivity && (\r\n \r\n \r\n \r\n )}\r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {child.name}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// export default SortableElement(ActivityChildComponent);\r\nexport default ActivityChildComponent;\r\n","import { FormFields } from 'features/projects/tasks/task/activities/ActivityListItem/helpers/constants';\r\nimport { customEndDateValidation } from 'features/projects/tasks/task/activities/ActivityListItem/helpers/validation';\r\nimport DateTimePickerFormik from 'app/components/form/formik/DateTimePickerFormik';\r\nimport { useFormikContext, Field } from 'formik';\r\n\r\nexport const FormFieldEndTime = () => {\r\n // Grab values from Formik context\r\n const { values } = useFormikContext();\r\n return (\r\n {\r\n try {\r\n // Pass in latest value of endTime into form values\r\n // Because form values from hook has old value of end time.\r\n // When updated pass it all to validation.\r\n customEndDateValidation.validateSync({ ...values, endTime });\r\n } catch (error) {\r\n return error.message;\r\n }\r\n }}\r\n >\r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport Add from '@material-ui/icons/Add';\r\nimport PlayArrow from '@material-ui/icons/PlayArrow';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n ACTIVITIES_ACTIONS,\r\n CREATE_ACTIVITY_MODE,\r\n} from 'features/projects/activities/activities.constants';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { ProjectPermission, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { Button, Grid } from '@material-ui/core';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport Done from '@material-ui/icons/Done';\r\n\r\nconst ActivityDetailsBottomBar = ({\r\n classes,\r\n toggleCreateActivityModal,\r\n next,\r\n completeActivityDataState,\r\n completeActivity,\r\n activity,\r\n projectId,\r\n taskId,\r\n}) => {\r\n const completingActivity = completeActivityDataState.isLoading();\r\n const nextTask = next.task;\r\n const nextActivity = next.activity;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {\r\n toggleCreateActivityModal(\r\n CREATE_ACTIVITY_MODE.QUICK,\r\n activity.sequence,\r\n );\r\n }}\r\n >\r\n \r\n Add Activity\r\n \r\n \r\n \r\n {nextActivity?.id && (\r\n \r\n completeActivity(projectId, taskId, activity.id)}\r\n >\r\n \r\n {nextActivity?.status === WORK_ITEM_STATUS.PAUSED\r\n ? 'CONT.'\r\n : 'START'}\r\n  \r\n \r\n {nextTask?.id\r\n ? nextTask?.type?.name\r\n : nextActivity?.type?.name}\r\n \r\n \r\n \r\n )}\r\n {!nextActivity?.id && (\r\n \r\n completeActivity(projectId, taskId, activity.id)}\r\n >\r\n \r\n Complete\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n completeActivityDataState: getActionDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.COMPLETE_ACTIVITY,\r\n ),\r\n});\r\n\r\nconst styles = (theme) => {\r\n return {\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n chipRoot: {\r\n height: 'auto',\r\n padding: 5,\r\n },\r\n loadingContainer: {\r\n backgroundColor: 'transparent',\r\n height: '100%',\r\n position: 'absolute',\r\n },\r\n loadingProgress: {\r\n width: theme.spacing(1.5),\r\n height: theme.spacing(1.5),\r\n },\r\n startActivityButton: {\r\n textTransform: 'none',\r\n },\r\n rootContainer: {\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n },\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n {},\r\n)(withStyles(styles)(ActivityDetailsBottomBar));\r\n","import { fromJS } from 'immutable';\r\nimport Edit from '@material-ui/icons/Edit';\r\nimport { Field, Form, Formik } from 'formik';\r\nimport { SortableElement } from 'react-sortable-hoc';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport { useMemo, useState, useCallback, useEffect, useContext } from 'react';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\r\nimport {\r\n Chip,\r\n Grid,\r\n IconButton,\r\n InputAdornment,\r\n Typography,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n validationSchemaForCompletedItem,\r\n validationSchemaForCurrentItem,\r\n} from 'features/projects/tasks/task/activities/ActivityListItem/helpers/validation';\r\n\r\nimport { ActivityDuration } from 'app/components/Counter';\r\nimport PaperListItem from 'app/components/PaperListItem';\r\nimport { formatDate, formatDuration } from 'utils/format.util';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport {\r\n ProjectPermission,\r\n WORK_ITEM_STATUS,\r\n PROJECT_STATUS,\r\n ACTIVITY_WAIT_CODES,\r\n} from 'app/app.constants';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport WorkItemSortHandle from 'features/projects/components/WorkItemSortHandle';\r\nimport DateTimePickerFormik from 'app/components/form/formik/DateTimePickerFormik';\r\nimport ActivityDetails from 'features/projects/activities/components/ActivityDetails';\r\nimport { CREATE_ACTIVITY_MODE } from 'features/projects/activities/activities.constants';\r\nimport {\r\n addStyles,\r\n isDepthChanged,\r\n} from 'features/projects/tasks/task/activities/ActivityListItem/helpers/utils';\r\nimport { FormFields } from 'features/projects/tasks/task/activities/ActivityListItem/helpers/constants';\r\nimport ActivityChildComponent from 'features/projects/tasks/task/activities/ActivityListItem/components/ActivityChildComponent';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { convertFromRaw, convertToRaw, EditorState } from 'draft-js';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\n\r\nimport { FormFieldEndTime } from 'features/projects/tasks/task/activities/ActivityListItem/components/formFieldEndTime';\r\nimport { formatToolstringToolStatusString } from 'features/projects/tasks/task/toolstring/toolstring.util';\r\nimport ActivityDetailsBottomBar from 'features/projects/activities/components/ActivityDetails/ActivityDetailsBottomBar';\r\nimport { ExecutionRootContainerContext } from 'features/projects/execution/ExecutionRootContainer';\r\nimport { useRealTimeNotifications } from 'features/projects/activities/hooks/useRealTimeNotifications';\r\n\r\nconst ActivityListItemFactory = (validationSchema) => {\r\n const ActivityListItem = ({\r\n index = 0,\r\n allActivities,\r\n classes,\r\n onClick,\r\n activity,\r\n canEditComments,\r\n childrenActivities,\r\n displayDescription,\r\n updateActivityTimes,\r\n next,\r\n taskId,\r\n goBack,\r\n previous,\r\n projectId,\r\n projectStatus,\r\n toggleCreateActivityModal,\r\n completeActivity,\r\n createNewPointInTimeActivity,\r\n pauseActivity,\r\n onChildDescriptionChanged,\r\n duplicateActivity,\r\n isCurrentActivity,\r\n onActivityChanged,\r\n }) => {\r\n const [expanded, setExpanded] = useState(true);\r\n const [rawParallelActivityJson, setRawParallelActivityJson] = useState();\r\n const [rawActivityDescriptionJson, setRawActivityDescriptionJson] =\r\n useState();\r\n const [rawActivityCommentsJson, setRawActivityCommentsJson] = useState();\r\n const [parallelActivityEditorState, setParallelActivityEditorState] =\r\n useState(EditorState.createEmpty());\r\n const [activityDescriptionEditorState, setActivityDescriptionEditorState] =\r\n useState(EditorState.createEmpty());\r\n const [activityCommentsEditorState, setActivityCommentsEditorState] =\r\n useState(EditorState.createEmpty());\r\n\r\n const handleChange = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const connection = useContext(ExecutionRootContainerContext);\r\n\r\n const [, , , deleteActivity] = useRealTimeNotifications(\r\n projectId,\r\n taskId,\r\n connection,\r\n );\r\n\r\n const isInPlanning = activity.status === WORK_ITEM_STATUS.PLANNED;\r\n let previousDateTime =\r\n allActivities?.get(index)?.get('endTimeTime') ??\r\n allActivities?.get(index)?.get('startTime');\r\n\r\n if (index > 0) {\r\n const startOrEndDate =\r\n allActivities?.get(index - 1)?.get('endTime') ??\r\n allActivities?.get(index - 1)?.get('startTime');\r\n previousDateTime = startOrEndDate;\r\n }\r\n\r\n const previousEndDate = previousDateTime;\r\n\r\n const updateContent = useCallback(\r\n (content, setContent, setEditorState, editorState) => {\r\n // 8343 restored && !setContent due to non-refreshing fields\r\n if (activity[content]?.getCurrentContent() && setContent) {\r\n const rawEditorState = convertToRaw(editorState.getCurrentContent());\r\n if (JSON.stringify(rawEditorState) !== JSON.stringify(setContent)) {\r\n const rawContentState = convertToRaw(\r\n activity[content].getCurrentContent(),\r\n );\r\n const newEditorState = EditorState.createWithContent(\r\n convertFromRaw(rawContentState),\r\n );\r\n setEditorState(newEditorState);\r\n }\r\n }\r\n },\r\n [activity],\r\n );\r\n\r\n const updateValues = (values, key, setRawJson) => {\r\n const JSONValue = JSON.stringify(\r\n convertToRaw(values[key].getCurrentContent()),\r\n );\r\n setRawJson(JSONValue);\r\n };\r\n\r\n const initialFormValues = useMemo(() => {\r\n const {\r\n [FormFields.PARALLEL_ACTIVITY]: parallel,\r\n [FormFields.START_TIME]: start,\r\n [FormFields.END_TIME]: end,\r\n [FormFields.DESCRIPTION]: description,\r\n [FormFields.PREVIOUS_ACTIVITY_START_TIME]: prevStart,\r\n [FormFields.NEXT_ACTIVITY_START_TIME]: nextStart,\r\n [FormFields.COMMENTS]: comments,\r\n ...restActivity\r\n } = activity;\r\n return {\r\n [FormFields.PARALLEL_ACTIVITY]: parallelActivityEditorState,\r\n [FormFields.START_TIME]: formatDate(activity.startTime),\r\n [FormFields.END_TIME]: formatDate(activity.endTime),\r\n previousEndTime: formatDate(previousEndDate),\r\n [FormFields.DESCRIPTION]: activityDescriptionEditorState,\r\n [FormFields.PREVIOUS_ACTIVITY_START_TIME]: formatDate(\r\n activity.previousActivityStartTime,\r\n ),\r\n [FormFields.NEXT_ACTIVITY_START_TIME]: formatDate(\r\n activity.nextActivityStartTime,\r\n ),\r\n [FormFields.COMMENTS]: activityCommentsEditorState,\r\n ...restActivity,\r\n };\r\n }, [\r\n activity,\r\n previousEndDate,\r\n parallelActivityEditorState,\r\n activityDescriptionEditorState,\r\n activityCommentsEditorState,\r\n ]);\r\n\r\n const onSubmit = (values, formikCallbacks) => {\r\n let hasChanged = false;\r\n const updated = { ...initialFormValues };\r\n\r\n const newEditorValue = JSON.stringify(\r\n convertToRaw(values.parallelActivity.getCurrentContent()),\r\n );\r\n const initialEditorValue = JSON.stringify(\r\n convertToRaw(initialFormValues.parallelActivity.getCurrentContent()),\r\n );\r\n\r\n if (newEditorValue !== initialEditorValue) {\r\n updateValues(values, 'parallelActivity', setRawParallelActivityJson);\r\n updated.parallelActivity = values.parallelActivity;\r\n setParallelActivityEditorState(values.parallelActivity);\r\n hasChanged = true;\r\n }\r\n\r\n if (\r\n JSON.stringify(convertToRaw(values.description.getCurrentContent())) !==\r\n JSON.stringify(\r\n convertToRaw(initialFormValues.description.getCurrentContent()),\r\n )\r\n ) {\r\n updateValues(values, 'description', setRawActivityDescriptionJson);\r\n setActivityDescriptionEditorState(values.description);\r\n updated.description = values.description;\r\n hasChanged = true;\r\n }\r\n\r\n if (\r\n JSON.stringify(convertToRaw(values.comments.getCurrentContent())) !==\r\n JSON.stringify(\r\n convertToRaw(initialFormValues.comments.getCurrentContent()),\r\n )\r\n ) {\r\n updateValues(values, 'comments', setRawActivityCommentsJson);\r\n setActivityCommentsEditorState(values.comments);\r\n updated.comments = values.comments;\r\n hasChanged = true;\r\n }\r\n\r\n if (isDepthChanged(values.depth, activity.depth)) {\r\n updated.depth = values.depth;\r\n hasChanged = true;\r\n }\r\n\r\n if (\r\n formatDate(activity.startTime) !== values.startTime ||\r\n formatDate(activity.endTime) !== values.endTime\r\n ) {\r\n activity.startTime = values.startTime;\r\n activity.endTime = values.endTime;\r\n updateActivityTimes(\r\n activity.projectId,\r\n activity.taskId,\r\n false,\r\n activity,\r\n formikCallbacks,\r\n );\r\n }\r\n\r\n if (hasChanged) {\r\n onActivityChanged(updated);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const newRawParallelActivityJson = activity.parallelActivity\r\n ? convertToRaw(activity.parallelActivity.getCurrentContent())\r\n : activity.parallelActivity;\r\n const newRawActivityDescriptionJson = activity.description\r\n ? convertToRaw(activity.description.getCurrentContent())\r\n : activity.description;\r\n const newRawActivityCommentsJson = activity.comments\r\n ? convertToRaw(activity.comments.getCurrentContent())\r\n : activity.comments;\r\n\r\n if (\r\n JSON.stringify(rawParallelActivityJson) !==\r\n JSON.stringify(newRawParallelActivityJson) &&\r\n activity.parallelActivity\r\n ) {\r\n setRawParallelActivityJson(newRawParallelActivityJson);\r\n updateContent(\r\n 'parallelActivity',\r\n newRawParallelActivityJson,\r\n setParallelActivityEditorState,\r\n parallelActivityEditorState,\r\n );\r\n }\r\n\r\n if (\r\n JSON.stringify(rawActivityDescriptionJson) !==\r\n JSON.stringify(newRawActivityDescriptionJson) &&\r\n activity.description\r\n ) {\r\n setRawActivityDescriptionJson(newRawActivityDescriptionJson);\r\n updateContent(\r\n 'description',\r\n newRawActivityDescriptionJson,\r\n setActivityDescriptionEditorState,\r\n activityDescriptionEditorState,\r\n );\r\n }\r\n\r\n if (\r\n JSON.stringify(rawActivityCommentsJson) !==\r\n JSON.stringify(newRawActivityCommentsJson) &&\r\n activity.comments\r\n ) {\r\n setRawActivityCommentsJson(newRawActivityCommentsJson);\r\n updateContent(\r\n 'comments',\r\n newRawActivityCommentsJson,\r\n setActivityCommentsEditorState,\r\n activityCommentsEditorState,\r\n );\r\n }\r\n // eslint-disable-next-line\r\n }, [\r\n activity,\r\n rawParallelActivityJson,\r\n rawActivityDescriptionJson,\r\n rawActivityCommentsJson,\r\n ]);\r\n\r\n const onDuplicateActivity = () => {\r\n const values = {\r\n description: activity.description,\r\n mode: CREATE_ACTIVITY_MODE.QUICK,\r\n sequence: activity.sequence + 1,\r\n parentActivityId: activity.parentActivityId,\r\n resumeActivityId: activity.resumeActivityId,\r\n type: {\r\n description: activity.description,\r\n id: activity.type.id,\r\n name: activity.name,\r\n value: {\r\n code: activity.code,\r\n id: activity.type.id,\r\n name: activity.name,\r\n },\r\n },\r\n };\r\n duplicateActivity(fromJS(values));\r\n };\r\n\r\n const lastChildActivitySequence = Math.max(\r\n ...childrenActivities.map((child) => child.sequence),\r\n );\r\n\r\n return (\r\n \r\n {() => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {activity.status === WORK_ITEM_STATUS.PLANNED ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {activity.name}\r\n \r\n \r\n {activity.setOrRetrieveToolstringItemStatus !== 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {activity.startTime && (\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n )}\r\n {!activity.isPointInTime &&\r\n activity.isWait &&\r\n activity.endTime && }\r\n \r\n \r\n {!activity.isPointInTime && (\r\n (\r\n \r\n {formatDuration(elapsedTime)}\r\n \r\n )}\r\n />\r\n )}\r\n \r\n \r\n \r\n {activity?.depth?.unit}\r\n \r\n ),\r\n }}\r\n className={classes.textFieldHighlight}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {ACTIVITY_WAIT_CODES.includes(activity.code) ? null : (\r\n \r\n \r\n \r\n )}\r\n {childrenActivities.find(\r\n (child) => child.parentActivityId === activity.id,\r\n ) && (\r\n \r\n {expanded ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n {displayDescription && (\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n {expanded && (\r\n \r\n {childrenActivities.map((child) => {\r\n if (child.parentActivityId === activity.id) {\r\n if (child.sequence === lastChildActivitySequence) {\r\n return (\r\n \r\n deleteActivity(\r\n projectId,\r\n taskId,\r\n child.id,\r\n child.index,\r\n true,\r\n )\r\n }\r\n index={child.index}\r\n onChildDescriptionChanged={\r\n onChildDescriptionChanged\r\n }\r\n updateActivityTimes={updateActivityTimes}\r\n isLastSubActivity={true}\r\n isCurrentActivity={isCurrentActivity}\r\n />\r\n );\r\n }\r\n return (\r\n \r\n deleteActivity(\r\n projectId,\r\n taskId,\r\n child.id,\r\n child.index,\r\n true,\r\n )\r\n }\r\n index={child.index}\r\n onChildDescriptionChanged={\r\n onChildDescriptionChanged\r\n }\r\n updateActivityTimes={updateActivityTimes}\r\n isCurrentActivity={isCurrentActivity}\r\n />\r\n );\r\n } else {\r\n return null;\r\n }\r\n })}\r\n \r\n )}\r\n \r\n {isCurrentActivity && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {canEditComments && (\r\n \r\n (\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n )}\r\n />\r\n \r\n )}\r\n \r\n \r\n {isCurrentActivity && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n return ActivityListItem;\r\n};\r\n\r\nexport const UnSortableActivityListItemCompleted = addStyles(\r\n ActivityListItemFactory(validationSchemaForCompletedItem),\r\n);\r\nexport const UnSortableActivityListItemCurrent = addStyles(\r\n ActivityListItemFactory(validationSchemaForCurrentItem),\r\n);\r\nconst SortableListItem = addStyles(\r\n ActivityListItemFactory(validationSchemaForCompletedItem),\r\n);\r\nexport default SortableElement(SortableListItem);\r\n","import { connect } from 'react-redux';\r\nimport debounce from 'lodash/debounce';\r\nimport { Grid } from '@material-ui/core';\r\nimport { createElement, PureComponent } from 'react';\r\nimport { SortableContainer } from 'react-sortable-hoc';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n activityListOnLoad,\r\n activityListOnUnload,\r\n} from 'features/projects/activities/activities.actions';\r\n\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { styles } from 'features/projects/activities/components/ActivityList/helpers/styles';\r\nimport { selectElementByActivityStatus } from 'features/projects/activities/components/ActivityList/helpers/utils';\r\n\r\nclass ActivityList extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const { projectId, taskId, updateActivity } = props;\r\n\r\n this.updateActivity = debounce(\r\n (activity) => updateActivity(projectId, taskId, activity),\r\n 500,\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n const { projectId, taskId, dispatchOnLoad } = this.props;\r\n\r\n dispatchOnLoad(projectId, taskId);\r\n }\r\n\r\n componentWillUnmount() {\r\n const { dispatchOnUnload } = this.props;\r\n\r\n dispatchOnUnload();\r\n }\r\n\r\n render() {\r\n const {\r\n taskId,\r\n goBack,\r\n execute,\r\n classes,\r\n projectId,\r\n projectStatus,\r\n activities,\r\n selectActivity,\r\n completeActivity,\r\n toggleCreateActivityModal,\r\n createNewPointInTimeActivity,\r\n pauseActivity,\r\n updateActivityTimes,\r\n duplicateActivity,\r\n } = this.props;\r\n\r\n const next = execute.get('next');\r\n const previous = execute.get('previous');\r\n\r\n const currentActivity = execute.getIn(['current', 'activity']);\r\n const allActivities = activities.toList();\r\n\r\n const parentActivities = activities.filter(\r\n (activity) => activity.get('isPointInTime') === false,\r\n );\r\n\r\n const childrenActivities = activities\r\n .toList()\r\n .toJS()\r\n .map((activity, index) => {\r\n if (activity.isPointInTime === true) {\r\n return { ...activity, index };\r\n }\r\n return null;\r\n })\r\n .filter((activity) => activity !== null);\r\n\r\n return (\r\n \r\n {activities\r\n .toList()\r\n .toJS()\r\n .map((activity, index) => {\r\n const isCurrentActivity =\r\n currentActivity?.get('id') === activity.id;\r\n\r\n if (\r\n parentActivities\r\n .toList()\r\n .toJS()\r\n .find((parentActivity) => parentActivity.id === activity.id)\r\n ) {\r\n return createElement(\r\n selectElementByActivityStatus(activity.status),\r\n {\r\n index,\r\n activity,\r\n allActivities,\r\n childrenActivities: childrenActivities,\r\n canEditComments: isCurrentActivity,\r\n key: activity.id,\r\n onClick: (event, providedIndex) =>\r\n selectActivity(\r\n providedIndex !== undefined ? providedIndex : index,\r\n ),\r\n onActivityChanged: (updated) => {\r\n this.updateActivity(updated);\r\n },\r\n onChildDescriptionChanged: (description, child) => {\r\n this.updateActivity({\r\n ...child,\r\n description,\r\n });\r\n },\r\n displayComments: isCurrentActivity,\r\n displayDescription: true,\r\n isCurrentActivity: isCurrentActivity,\r\n disabled: activity.status !== WORK_ITEM_STATUS.PLANNED,\r\n classes: {\r\n expansionPanelExpanded: classes.expansionPanelExpanded,\r\n expansionPanelDetailsRoot:\r\n classes.expansionPanelDetailsRoot,\r\n },\r\n updateActivityTimes,\r\n next: next,\r\n taskId: taskId,\r\n goBack: goBack,\r\n previous: previous,\r\n projectId: projectId,\r\n projectStatus: projectStatus,\r\n // eslint-disable-next-line\r\n activity: activity,\r\n toggleCreateActivityModal: toggleCreateActivityModal,\r\n completeActivity: completeActivity,\r\n createNewPointInTimeActivity: createNewPointInTimeActivity,\r\n pauseActivity: pauseActivity,\r\n duplicateActivity: duplicateActivity,\r\n },\r\n );\r\n } else return null;\r\n })}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, {\r\n dispatchOnLoad: activityListOnLoad,\r\n dispatchOnUnload: activityListOnUnload,\r\n})(SortableContainer(withStyles(styles)(ActivityList)));\r\n","import { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport SortableActivityListItem, {\r\n UnSortableActivityListItemCompleted,\r\n UnSortableActivityListItemCurrent,\r\n} from 'features/projects/tasks/task/activities/ActivityListItem';\r\n\r\nexport const selectElementByActivityStatus = (status) => {\r\n return status !== WORK_ITEM_STATUS.PLANNED\r\n ? status === WORK_ITEM_STATUS.COMPLETED\r\n ? UnSortableActivityListItemCompleted\r\n : UnSortableActivityListItemCurrent\r\n : SortableActivityListItem;\r\n};\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport PaperListItem from 'app/components/PaperListItem';\r\n\r\nconst ActivityListHeader = () => {\r\n return (\r\n \r\n {/* */}\r\n {/* */}\r\n \r\n \r\n Activity\r\n \r\n \r\n Started\r\n \r\n \r\n Duration\r\n \r\n \r\n Depth\r\n \r\n \r\n \r\n {/* */}\r\n \r\n );\r\n};\r\n\r\nexport default ActivityListHeader;\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport Add from '@material-ui/icons/Add';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useContext, useMemo } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n selectActivity,\r\n getProjectStatus,\r\n toggleCreateActivityModal,\r\n sortActivitiesWithNotification,\r\n} from 'features/projects/activities/activities.actions';\r\n\r\nimport {\r\n getAllTasks,\r\n getExecuteStatusFromState,\r\n} from 'features/projects/activities/activities.selectors';\r\n\r\nimport {\r\n EMPTY_MAP,\r\n PROJECT_STATUS,\r\n WORK_ITEM_STATUS,\r\n ProjectPermission,\r\n} from 'app/app.constants';\r\n\r\nimport {\r\n ACTIVITIES_ACTIONS,\r\n CREATE_ACTIVITY_MODE,\r\n} from 'features/projects/activities/activities.constants';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport withProjectPermission from 'app/components/withProjectPermission';\r\nimport ActivityList from 'features/projects/activities/components/ActivityList';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport { useTaskActivities } from 'features/projects/activities/hooks/useTaskActivities';\r\nimport ActivityListHeader from 'features/projects/activities/components/ActivityListHeader';\r\nimport { useRealTimeNotifications } from 'features/projects/activities/hooks/useRealTimeNotifications';\r\nimport CreateActivityModalContainer from 'features/projects/activities/components/CreateActivityModalContainer';\r\nimport { ExecutionRootContainerContext } from '../../ExecutionRootContainer';\r\nimport { EditActivityModalContainerWithNotification } from 'features/projects/activities/components/editActivity/EditActivityModalContainerWithNotification';\r\n\r\nconst CreateActivityContainer = ({\r\n execute,\r\n classes,\r\n selectedTask,\r\n displayCompleteTaskBtn,\r\n dispatchToggleCreateActivityModal,\r\n}) => {\r\n const status = execute.get('status');\r\n\r\n const disabled =\r\n status === PROJECT_STATUS.REPORT ||\r\n displayCompleteTaskBtn ||\r\n (selectedTask && selectedTask.get('status') > WORK_ITEM_STATUS.STARTED);\r\n\r\n return (\r\n \r\n \r\n dispatchToggleCreateActivityModal(CREATE_ACTIVITY_MODE.NORMAL)\r\n }\r\n >\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst ExecutionActivitiesContainer = ({\r\n tasks,\r\n taskId,\r\n execute,\r\n classes,\r\n dataState,\r\n projectId,\r\n dispatchSort,\r\n dispatchSelectActivity,\r\n dispatchToggleCreateActivityModal,\r\n}) => {\r\n const status = execute.get('status');\r\n\r\n const selectedTask = useMemo(\r\n () =>\r\n tasks\r\n .toMap()\r\n .mapKeys((_, task) => task.get('taskId').toString())\r\n .get(taskId?.toString()),\r\n [tasks, taskId],\r\n );\r\n\r\n const connection = useContext(ExecutionRootContainerContext);\r\n\r\n const activities = useTaskActivities(taskId) ?? EMPTY_MAP;\r\n\r\n const onSortEnd = useCallback(\r\n (indices) => dispatchSort(projectId, taskId, indices, connection),\r\n [taskId, projectId, dispatchSort, connection],\r\n );\r\n\r\n const [\r\n goBack,\r\n completeActivity,\r\n createActivity,\r\n deleteActivity,\r\n updateActivity,\r\n updateActivityTimes,\r\n pauseActivity,\r\n createNewPointInTimeActivity,\r\n duplicateActivity,\r\n ] = useRealTimeNotifications(projectId, taskId, connection);\r\n\r\n const nextActivity = execute.getIn(['next', 'activity']);\r\n const currentActivity = execute.getIn(['current', 'activity']);\r\n const previousActivity = execute.getIn(['previous', 'activity']);\r\n const currentTaskId = execute.getIn(['current', 'task', 'id']) ?? 0;\r\n\r\n const displayCompleteTaskBtn =\r\n execute.get('currentTaskProgress') === 100 &&\r\n ((!currentActivity && previousActivity && !nextActivity) ||\r\n activities.size === 0) &&\r\n parseInt(taskId) === currentTaskId;\r\n\r\n const { hasPermission: hasReadActivityCommentsPermission } =\r\n useProjectPermissions(ProjectPermission.READ_ACTIVITY_COMMENTS_EXECUTE);\r\n\r\n const activitiesLoading = dataState.isLoading();\r\n\r\n const disabled = useMemo(() => {\r\n const taskStatus = selectedTask?.get('status');\r\n return taskStatus && taskStatus >= WORK_ITEM_STATUS.COMPLETED;\r\n }, [selectedTask]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => {\r\n return {\r\n create: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n stickyHeader: {\r\n zIndex: 2,\r\n position: 'sticky',\r\n top: 0,\r\n },\r\n registerObsCardBtn: {\r\n textTransform: 'none',\r\n },\r\n basePageChildren: {\r\n overflow: 'auto',\r\n padding: '0px',\r\n marginTop: '6px',\r\n },\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n tasks: getAllTasks(state),\r\n execute: getExecuteStatusFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n ACTIVITIES_ACTIONS.ACTIVITIES_INITIALIZED,\r\n ACTIVITIES_ACTIONS.UPDATE_ACTIVITY,\r\n ACTIVITIES_ACTIONS.INITIATE_PAUSE_ACTIVITY,\r\n ACTIVITIES_ACTIONS.CONFIRMED_ACTIVITY_GO_BACK,\r\n ),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchSort: sortActivitiesWithNotification,\r\n dispatchSelectActivity: selectActivity,\r\n dispatchToggleCreateActivityModal: toggleCreateActivityModal,\r\n dispatchGetProjectStatus: getProjectStatus,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n withProjectPermission(ProjectPermission.EXECUTE),\r\n)(ExecutionActivitiesContainer);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Box,\r\n Button,\r\n Card,\r\n CardContent,\r\n Dialog,\r\n DialogContent,\r\n Grid,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { ModalActions } from 'altus-ui-components';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { Styles } from 'features/projects/tasks/task/toolstring/common/styles';\r\n\r\nconst GotoBhaEditModal = ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n open,\r\n onClose,\r\n redirectToBhaEditAndCloseModal,\r\n classes,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n Edit BHA\r\n \r\n \r\n \r\n \r\n \r\n \r\n This will un-plan the BHA and Simulation and open the Edit BHA\r\n window\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n redirectToBhaEditAndCloseModal(taskId, projectId, toolstringId);\r\n }}\r\n >\r\n BHA edit\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(withStyles(Styles))(GotoBhaEditModal);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport GotoBhaEditModal from 'features/projects/tasks/task/toolstring/GotoBhaEditModal';\r\nimport { redirectToBhaEditAction } from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { useCallback } from 'react';\r\n\r\nconst GotoBhaEditModalContainer = ({\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n open,\r\n toggleModal,\r\n dispatchRedirectToBhaEditAction,\r\n}) => {\r\n const redirectToBhaEditAndCloseModal = useCallback(() => {\r\n dispatchRedirectToBhaEditAction(taskId, projectId, toolstringId);\r\n toggleModal();\r\n }, [\r\n taskId,\r\n projectId,\r\n toolstringId,\r\n toggleModal,\r\n dispatchRedirectToBhaEditAction,\r\n ]);\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(null, {\r\n dispatchRedirectToBhaEditAction: redirectToBhaEditAction,\r\n }),\r\n)(GotoBhaEditModalContainer);\r\n","import { compose } from 'redux';\r\nimport { memo, useState, useMemo, useEffect, useCallback } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\nimport { MenuItem } from '@material-ui/core';\r\nimport Icon from '@material-ui/icons/Build';\r\nimport Check from '@material-ui/icons/Check';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport PictureAsPdf from '@material-ui/icons/PictureAsPdf';\r\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { useModal } from 'altus-modal';\r\nimport { List } from 'immutable';\r\n\r\nimport { DropdownMenu } from 'altus-ui-components';\r\n\r\nimport { Box, Grid, Divider, Typography, IconButton } from '@material-ui/core';\r\n\r\nimport { LoadingOverlay, NoContentBasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getToolstringFromState,\r\n getToolstringToolsFromState,\r\n getToolstringSectionsFromState,\r\n getTaskByIdFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport {\r\n receiveTaskToolstring,\r\n requestGetTaskToolstring,\r\n requestTaskToolstringSections,\r\n requestUpdateSerialNumbersFromTask,\r\n requestUpdateNotPlannedToolstringItem,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport {\r\n TOOLSTRING_ACTIONS,\r\n TOOLSTRING_OPTION_ACTIONS,\r\n MODAL as ToolstringModal,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\n\r\nimport { EMPTY_MAP, EMPTY_LIST, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport toolstringService from 'services/toolstring.service';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { getToolConnectorsFromState } from 'features/projects/tool/tool.selector';\r\nimport { getAllTasksFromState } from 'features/projects/tasks/tasks.selectors';\r\nimport { getAllTasksWithProjects } from 'features/projects/activities/activities.actions';\r\n\r\nimport TaskToolstringEditorContent from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorContent';\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\nimport {\r\n ASSET_HISTORY_EVENT_TYPES,\r\n ASSET_HISTORY_EVENT_TYPES_ITEM,\r\n ASSET_HISTORY_TEST_TYPE,\r\n ASSET_HISTORY_TEST_TYPES,\r\n EquipmentType,\r\n MODAL,\r\n} from 'features/equipment/equipment.constants';\r\nimport { validateToolStringSerialNumbers } from 'features/equipment/equipment.actions';\r\nimport TaskToolstringExportModalContainer from 'features/projects/tasks/task/toolstring/TaskToolstringExportModalContainer';\r\nimport { requestUpdatestringtesttoolstringitem } from 'features/projects/mobilisation/projectMobilisation.actions';\r\nimport GotoBhaModalModalContainer from 'features/projects/tasks/task/toolstring/GotoBhaEditModalContainer';\r\n\r\nconst ExecutionToolStringContainer = ({\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n toolstringId,\r\n toolstringTools,\r\n toolstringSections,\r\n externalHiddenColumns,\r\n dispatchGetToolstring,\r\n toolstring = EMPTY_MAP,\r\n setSelectedToolstringId,\r\n toolConnectors = EMPTY_MAP,\r\n dispatchToolstringSections,\r\n hideExecutionOptions = false,\r\n dispatchUpdateToolstringItem,\r\n selectedStringTestReport,\r\n hideDragHandle = false,\r\n disabledSerialNumbers = false,\r\n tasks = EMPTY_LIST,\r\n projectTasks = EMPTY_LIST,\r\n dispatchUpdateSerialNumbersFromTask,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const hiddenColumns = useMemo(\r\n () => [\r\n 'yieldValue',\r\n 'botC',\r\n 'topC',\r\n 'supplier',\r\n 'hideAssemblySerialNumber',\r\n ],\r\n [],\r\n );\r\n const hideSerialNo = 'hideSerialNumbers';\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_ASSET_HISTORY_BHA);\r\n\r\n const currentToolStringId = useCallback(() => {\r\n if (selectedStringTestReport.get('taskId') === taskId) {\r\n return selectedStringTestReport.get('toolstringId');\r\n }\r\n\r\n var currentTask = tasks.find((task) => task.get('taskId') === taskId);\r\n const notPlannedToolString = currentTask\r\n ?.get('toolStrings')\r\n ?.filter((x) => x?.isPlanned)\r\n .pop();\r\n\r\n return (\r\n notPlannedToolString?.toolStringId ??\r\n selectedStringTestReport.get('toolstringId')\r\n );\r\n }, [selectedStringTestReport, taskId, tasks]);\r\n\r\n const [isToolstringExportModalOpen, toggleToolstringExportModal] = useModal(\r\n ToolstringModal.SIMULATION_EXPORT_MODAL_ID,\r\n );\r\n\r\n const [isRouteBhaEditModalOpen, toggleIsRouteBhaEditModalOpen] = useModal(\r\n MODAL.ROUTE_BHA_EDITOR,\r\n );\r\n\r\n const testTypesItems = List([\r\n ASSET_HISTORY_TEST_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_TEST_TYPE.STRING_TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const assetHistoryEventTypes = List([\r\n ASSET_HISTORY_EVENT_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleModal();\r\n };\r\n\r\n const showCustomActions = [TOOLSTRING_OPTION_ACTIONS.ASSET_HISTORY];\r\n const columns = 1;\r\n const paddingTopPreview = 0;\r\n const widthSerialColumn = 2;\r\n const [showEditor, setShowEditor] = useState(false);\r\n const [toolStringId, setToolStringId] = useState();\r\n const [selectLabel, setSelectLabel] = useState('Auto-fill Serial Numbers');\r\n\r\n toolstringId = toolStringId;\r\n toolConnectors = useSelector((state) => getToolConnectorsFromState(state));\r\n toolstring = useSelector((state) =>\r\n getToolstringFromState(state, toolStringId),\r\n );\r\n toolstringSections = useSelector((state) =>\r\n getToolstringSectionsFromState(state, toolStringId),\r\n );\r\n toolstringTools = useSelector((state) =>\r\n getToolstringToolsFromState(state, toolStringId),\r\n );\r\n const task = useSelector((state) => getTaskByIdFromState(state, taskId));\r\n\r\n const getPlannedToolstring = useCallback(\r\n () =>\r\n toolstringService\r\n .getPlannedToolstring(projectId, taskId, false)\r\n .then((toolstring) => {\r\n setToolStringId(toolstring?.toolStringId);\r\n dispatch(receiveTaskToolstring(projectId, taskId, toolstring));\r\n dispatchToolstringSections(\r\n projectId,\r\n taskId,\r\n toolstring?.toolStringId,\r\n );\r\n dispatchGetToolstring(\r\n projectId,\r\n taskId,\r\n toolstring?.toolStringId,\r\n false,\r\n );\r\n setShowEditor(true);\r\n })\r\n .catch(() => {\r\n setShowEditor(false);\r\n }),\r\n [\r\n dispatch,\r\n dispatchGetToolstring,\r\n dispatchToolstringSections,\r\n projectId,\r\n taskId,\r\n ],\r\n );\r\n const getStringReportToolstring = useCallback(\r\n () =>\r\n toolstringService\r\n .getToolString(projectId, taskId, currentToolStringId())\r\n .then((toolstring) => {\r\n setToolStringId(toolstring?.toolStringId);\r\n setSelectedToolstringId(toolstring?.toolStringId);\r\n dispatch(receiveTaskToolstring(projectId, taskId, toolstring));\r\n dispatchToolstringSections(\r\n projectId,\r\n taskId,\r\n toolstring?.toolStringId,\r\n );\r\n dispatchGetToolstring(\r\n projectId,\r\n taskId,\r\n toolstring?.toolStringId,\r\n false,\r\n );\r\n setShowEditor(true);\r\n })\r\n .catch(() => {\r\n setShowEditor(false);\r\n }),\r\n [\r\n dispatch,\r\n dispatchGetToolstring,\r\n dispatchToolstringSections,\r\n projectId,\r\n taskId,\r\n setSelectedToolstringId,\r\n currentToolStringId,\r\n ],\r\n );\r\n\r\n const validateToolstringSerialNumbers = () => {\r\n dispatch(validateToolStringSerialNumbers(toolstringId));\r\n };\r\n\r\n useEffect(() => {\r\n if (selectedStringTestReport) {\r\n getStringReportToolstring();\r\n } else {\r\n getPlannedToolstring(projectId, taskId);\r\n }\r\n }, [\r\n getPlannedToolstring,\r\n projectId,\r\n taskId,\r\n getStringReportToolstring,\r\n selectedStringTestReport,\r\n ]);\r\n\r\n const updateItemProperties = useCallback(\r\n (toolstringItem) => {\r\n dispatchUpdateToolstringItem(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n );\r\n },\r\n [projectId, taskId, toolstringId, dispatchUpdateToolstringItem],\r\n );\r\n\r\n\r\n useEffect(() => {\r\n const taskStatus = task?.get('status');\r\n if (taskStatus && taskStatus >= WORK_ITEM_STATUS.COMPLETED) {\r\n !hiddenColumns.includes(hideSerialNo) && hiddenColumns.push(hideSerialNo);\r\n } else {\r\n hiddenColumns.includes(hideSerialNo) &&\r\n hiddenColumns.splice(hiddenColumns.indexOf(hideSerialNo), 1);\r\n }\r\n }, [hiddenColumns, taskId, task, projectTasks, toolstringTools]);\r\n\r\n return (\r\n <>\r\n \r\n {!toolstringTools || !showEditor ? (\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n {!hideExecutionOptions ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n {toolstring?.get('name')}\r\n \r\n \r\n {/* className=\"editor-label\" */}\r\n {!hideExecutionOptions ? (\r\n \r\n \r\n \r\n \r\n {projectTasks.size > 0 ? (\r\n \r\n {selectLabel}\r\n \r\n }\r\n >\r\n {projectTasks\r\n .filter(\r\n (task) =>\r\n task.get('id').toString() !== taskId.toString(),\r\n )\r\n .map((fromTask) => (\r\n {\r\n setSelectLabel(fromTask.get('title'));\r\n dispatchUpdateSerialNumbersFromTask(\r\n projectId,\r\n fromTask.get('id'),\r\n taskId,\r\n toolstringId,\r\n fromTask.get('title'),\r\n );\r\n }}\r\n >\r\n {fromTask.get('title')}\r\n \r\n ))}\r\n \r\n ) : (\r\n ''\r\n )}\r\n validateToolstringSerialNumbers()}\r\n >\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n padding: theme.spacing(3),\r\n },\r\n toolstringContainer: {\r\n height: `calc(10% - ${theme.spacing(12)}px)`,\r\n },\r\n toolstringPreview: {\r\n height: '10%',\r\n },\r\n workItemCompleted: {\r\n color: theme.altus.status.execute,\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n projectTasks: getAllTasksFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_SECTIONS,\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TOOLS,\r\n TOOLSTRING_ACTIONS.DOWNLOAD_TOOLSTRING_PDF_REPORT,\r\n TOOLSTRING_ACTIONS.REQUEST_UPDATE_SERIAL_NUMBERS_FROM_TASK,\r\n TASK_ACTIONS.GET_ALL_TASKS,\r\n ),\r\n };\r\n};\r\n\r\nconst getALlTAsks = (projectId) => getAllTasksWithProjects(projectId);\r\n\r\nconst mapDispatchToProps = {\r\n dispatchGetToolstring: requestGetTaskToolstring,\r\n dispatchToolstringSections: requestTaskToolstringSections,\r\n dispatchUpdateToolstringItem: requestUpdateNotPlannedToolstringItem,\r\n dispatchUpdatestringtesttoolstringitem: requestUpdatestringtesttoolstringitem,\r\n dispatchGetTasks: getALlTAsks,\r\n dispatchUpdateSerialNumbersFromTask: requestUpdateSerialNumbersFromTask,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n memo,\r\n)(ExecutionToolStringContainer);\r\n","import { compose } from 'redux';\r\nimport { Grid, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport ProjectTaskServiceChips from 'app/components/ProjectTaskServiceChips';\r\n\r\nconst OperationTableRow = ({\r\n classes,\r\n item: operation,\r\n children: cells,\r\n ...rest\r\n}) => {\r\n const taskServices = operation.getIn(['project', 'taskServices'], EMPTY_LIST);\r\n\r\n return (\r\n \r\n \r\n {cells}\r\n {!!taskServices.size && (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n tableRowRoot: {\r\n height: 'auto',\r\n flexWrap: 'wrap',\r\n maxHeight: 'none',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(OperationTableRow);\r\n","import { Grid } from '@material-ui/core';\r\nimport { useCallback, useState } from 'react';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { EMPTY_LIST, Format } from 'app/app.constants';\r\nimport OperationTableRow from 'features/operations/OperationTableRow';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport { formatDate, formatDuration, formatQuantity } from 'utils/format.util';\r\nimport ProjectDashboardsDrawer from 'features/projects/dashboard/components/ProjectDashboardsDrawer';\r\n\r\nconst columns = [\r\n {\r\n xs: 1,\r\n id: 'projectId',\r\n Header: 'Project',\r\n accessor: (operation) => operation.getIn(['project', 'projectId']),\r\n },\r\n {\r\n xs: 1,\r\n id: 'facility',\r\n Header: 'Facility',\r\n accessor: (operation) => operation.getIn(['project', 'facilityName']),\r\n },\r\n {\r\n xs: 1,\r\n id: 'well',\r\n Header: 'Well',\r\n accessor: (operation) => operation.getIn(['project', 'wellboreName']),\r\n },\r\n {\r\n xs: 1,\r\n id: 'objective',\r\n Header: 'Objective',\r\n accessor: (operation) => operation.getIn(['project', 'title']),\r\n },\r\n {\r\n xs: 1,\r\n id: 'task',\r\n Header: 'Task/Run',\r\n accessor: (operation) =>\r\n operation.getIn(['projectExecutionStatus', 'currentTask', 'title']),\r\n Cell: ({ row }) => {\r\n const currentTask = row.original.getIn([\r\n 'projectExecutionStatus',\r\n 'currentTask',\r\n ]);\r\n\r\n if (!currentTask) return null;\r\n\r\n const projectStatus = row.original.getIn(['projectExecutionStatus']);\r\n\r\n return `${currentTask.title} (${projectStatus.currentTaskNumber}/${projectStatus.taskCount})`;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'activity',\r\n Header: 'Activity',\r\n accessor: (operation) =>\r\n operation.getIn(['projectExecutionStatus', 'currentActivity', 'name']),\r\n Cell: ({ row }) => {\r\n const currentActivity = row.original.getIn([\r\n 'projectExecutionStatus',\r\n 'currentActivity',\r\n ]);\r\n\r\n if (!currentActivity) return null;\r\n\r\n const projectStatus = row.original.getIn(['projectExecutionStatus']);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {currentActivity.name} ({projectStatus.currentActivityNumber}/\r\n {projectStatus.activityCount})\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'speed',\r\n Header: 'Speed',\r\n accessor: (operation) => operation.getIn(['speed', 'roundedValue']),\r\n Cell: ({ row }) => formatQuantity(row.original.get('speed')),\r\n },\r\n {\r\n xs: 1,\r\n id: 'tension',\r\n Header: 'Tension',\r\n accessor: (operation) => operation.getIn(['tension', 'roundedValue']),\r\n Cell: ({ row }) => formatQuantity(row.original.get('tension')),\r\n },\r\n {\r\n xs: 1,\r\n id: 'depth',\r\n Header: 'Depth',\r\n accessor: (operation) => operation.getIn(['depth', 'roundedValue']),\r\n Cell: ({ row }) => formatQuantity(row.original.get('depth')),\r\n },\r\n {\r\n xs: 1,\r\n id: 'startDate',\r\n Header: 'Start Date',\r\n accessor: (operation) => operation.getIn(['project', 'startTime']),\r\n Cell: ({ value }) => formatDate(value, Format.date) || 'N/A',\r\n },\r\n {\r\n xs: 1,\r\n id: 'duration',\r\n Header: 'Duration',\r\n accessor: (operation) => operation.getIn(['project', 'duration']),\r\n Cell: ({ value }) => {\r\n if (!value) return 'N/A';\r\n\r\n return (\r\n formatDuration(elapsedTime)}\r\n />\r\n );\r\n },\r\n },\r\n];\r\n\r\nconst OperationsTableView = ({ operations = EMPTY_LIST }) => {\r\n const [isDrawerOpened, toggleDrawer] = useToggle();\r\n const [currentProject, setCurrentProject] = useState();\r\n\r\n const onProjectSelected = useCallback(\r\n (row) => {\r\n setCurrentProject(row.get('project'));\r\n toggleDrawer();\r\n },\r\n [toggleDrawer],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default OperationsTableView;\r\n","import ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst OperationCardQuantity = ({ label, quantity }) => {\r\n if (!quantity) return null;\r\n\r\n const { unit, roundedValue } = quantity;\r\n\r\n const value = roundedValue ? `${roundedValue} (${unit})` : 'N/A';\r\n\r\n return ;\r\n};\r\n\r\nexport default OperationCardQuantity;\r\n","import { compose } from 'redux';\r\nimport LazyLoad from 'react-lazyload';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport NoLiveDataIcon from '@material-ui/icons/SignalWifiOff';\r\n\r\nimport {\r\n Box,\r\n Card,\r\n Grid,\r\n CardMedia,\r\n IconButton,\r\n CardHeader,\r\n Typography,\r\n CardContent,\r\n Link,\r\n} from '@material-ui/core';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { formatDuration } from 'utils/format.util';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport OperationCardQuantity from 'features/operations/components/OperationCardQuantity';\r\nimport ProjectWellboreTrajectoryContainer from 'app/components/WellboreTrajectory/ProjectWellboreTrajectoryContainer';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nimport { ProjectPermission } from 'app/app.constants';\r\n\r\nconst CARD_MEDIA_HEIGHT = 300;\r\n\r\nconst OperationCard = ({\r\n onClick,\r\n classes,\r\n children,\r\n operation,\r\n scrollContainerRef,\r\n}) => {\r\n const project = operation.get('project');\r\n\r\n const projectId = project?.get('id');\r\n const projectTitle = project?.get('title');\r\n const fieldName = project?.get('fieldName');\r\n const wellboreName = project?.get('wellboreName');\r\n const wellboreId = project?.get('wellboreId');\r\n\r\n const currentDepth = operation.get('depth');\r\n const currentTension = operation.get('tension');\r\n const currentSpeed = operation.get('speed');\r\n const fieldId = project?.get('fieldId');\r\n const subheader = `${projectId}. - ${projectTitle}`;\r\n const duration = operation.getIn(['project', 'duration']);\r\n\r\n const hasLiveData = !!operation.get('cheetahJobs').size;\r\n\r\n const projectStatus = operation.getIn(['projectExecutionStatus']);\r\n\r\n const currentTask = operation.getIn([\r\n 'projectExecutionStatus',\r\n 'currentTask',\r\n ]);\r\n\r\n const currentActivity = operation.getIn([\r\n 'projectExecutionStatus',\r\n 'currentActivity',\r\n ]);\r\n\r\n return (\r\n <>\r\n {\r\n \r\n \r\n {fieldName}\r\n \r\n \r\n }\r\n \r\n \r\n \r\n {wellboreName}\r\n \r\n \r\n )\r\n }\r\n subheader={\r\n \r\n \r\n {subheader}\r\n \r\n \r\n }\r\n titleTypographyProps={{\r\n variant: 'h6',\r\n noWrap: true,\r\n }}\r\n action={\r\n !hasLiveData ? (\r\n \r\n \r\n \r\n ) : undefined\r\n }\r\n subheaderTypographyProps={{\r\n noWrap: true,\r\n }}\r\n classes={{\r\n content: classes.cardHeaderContent,\r\n }}\r\n />\r\n \r\n \r\n <> {/* Add placeholder element to avoid console warnings */}\r\n \r\n }\r\n >\r\n \r\n \r\n \r\n \r\n Well Trajectory Not Available\r\n \r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n {'Task/Run'}\r\n \r\n }\r\n TextComponent={Grid}\r\n classes={{\r\n text: classes.readOnlyFieldText,\r\n }}\r\n value={\r\n <>\r\n \r\n {currentTask?.title ?? 'N/A'}\r\n \r\n \r\n {currentTask\r\n ? `(${projectStatus.currentTaskNumber}/${projectStatus.taskCount})`\r\n : EMPTY_STRING}\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n {\r\n const link = hasPermission\r\n ? `/projects/${projectId}/execution/${currentTask?.taskId}/activities`\r\n : `/projects/${projectId}/report/`;\r\n return (\r\n \r\n {'Activity'}\r\n \r\n );\r\n }}\r\n >\r\n )\r\n }\r\n TextComponent={Grid}\r\n classes={{\r\n text: classes.readOnlyFieldText,\r\n }}\r\n value={\r\n <>\r\n \r\n {currentActivity?.name ?? 'N/A'}\r\n \r\n \r\n {currentActivity\r\n ? `(${projectStatus.currentActivityNumber}/${projectStatus.activityCount})`\r\n : EMPTY_STRING}\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n cardMedia: {\r\n display: 'flex',\r\n height: CARD_MEDIA_HEIGHT,\r\n },\r\n card: {\r\n cursor: 'pointer',\r\n backgroundColor: theme.palette.grey[800],\r\n border: `1px solid ${theme.palette.grey[600]}`,\r\n },\r\n cardContent: {\r\n padding: 0,\r\n },\r\n cardHeaderContent: {\r\n overflow: 'hidden',\r\n },\r\n title: {\r\n paddingLeft: `${theme.spacing(1)}px`,\r\n },\r\n link: {\r\n color: theme.palette.common.white,\r\n textDecorationThickness: '1%',\r\n },\r\n grayLink: {\r\n color: alpha(theme.palette.common.white, 0.7),\r\n textDecorationThickness: '1%',\r\n },\r\n readOnlyFieldText: {\r\n display: 'flex',\r\n overflow: 'hidden',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(OperationCard);\r\n","import { compose } from 'redux';\r\nimport { Link } from 'react-router-dom';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { BrowserView, MobileView } from 'react-device-detect';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { toProjectDashboard } from 'utils/route.util';\r\nimport OperationCard from 'features/operations/OperationCard';\r\nimport ProjectDashboardsDrawer from 'features/projects/dashboard/components/ProjectDashboardsDrawer';\r\n\r\nconst OperationCardItem = ({ classes, operation, scrollContainerRef }) => {\r\n const [isOpen, toggle] = useToggle();\r\n\r\n const project = operation.get('project');\r\n\r\n const projectId = project?.get('id');\r\n\r\n const url = toProjectDashboard(\r\n `${routePaths.operations.dashboards}/:projectId`,\r\n projectId ? projectId : 0,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n minWidth: 'min(500px, 100%)',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(OperationCardItem);\r\n","import { Grid } from '@material-ui/core';\r\n\r\nimport OperationCardItem from 'features/operations/OperationCardItem';\r\nimport ThreeJsManagerProvider from 'app/threeJs/ThreeJsManagerProvider';\r\n\r\nconst OperationsCardsView = ({ operations, scrollContainerRef }) => (\r\n \r\n \r\n {operations.valueSeq().map((operation) => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport default OperationsCardsView;\r\n","import CloudOff from '@material-ui/icons/CloudOff';\r\n\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\n\r\nimport OperationsTableView from 'features/operations/OperationsTableView';\r\nimport OperationsCardsView from 'features/operations/OperationsCardsView';\r\nimport { OPERATIONS_VIEWS } from 'features/operations/operations.constants';\r\n\r\nconst OperationsViews = ({\r\n operations,\r\n dataState,\r\n selectedView,\r\n scrollContainerRef,\r\n}) => {\r\n if (!operations.size && dataState.isSuccess()) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n <>\r\n {selectedView === OPERATIONS_VIEWS.TILES && (\r\n \r\n )}\r\n {selectedView === OPERATIONS_VIEWS.LIST && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default OperationsViews;\r\n","import { Field, Formik } from 'formik';\r\nimport { Grid, Box } from '@material-ui/core';\r\nimport ViewComfyIcon from '@material-ui/icons/ViewComfy';\r\nimport ViewAgendaIcon from '@material-ui/icons/ViewAgenda';\r\nimport { ToggleButton, ToggleButtonGroup } from '@material-ui/lab';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport { OPERATIONS_VIEWS } from 'features/operations/operations.constants';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport SearchTextFieldFormik from 'app/components/form/formik/SearchTextFieldFormik';\r\n\r\nexport const Filters = {\r\n FACILITY_ID: 'facilityId',\r\n DEPARTMENT_ID: 'departmentId',\r\n\r\n FIELD_ID: 'fieldId',\r\n TEXT_SEARCH: 'textSearch',\r\n ORGANIZATION_ID: 'organizationId',\r\n};\r\n\r\nexport const initialFilters = {\r\n [Filters.FACILITY_ID]: EMPTY_STRING,\r\n [Filters.FIELD_ID]: EMPTY_STRING,\r\n [Filters.DEPARTMENT_ID]: EMPTY_STRING,\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.ORGANIZATION_ID]: EMPTY_STRING,\r\n};\r\n\r\nconst getFieldId = (field) => field.get('id');\r\nconst getFieldName = (field) => field.get('name');\r\nconst getFacilityId = (facility) => facility.get('id');\r\nconst getFacilityName = (facility) => facility.get('name');\r\n\r\nconst getDepartmentId = (department) => department.get('id');\r\nconst getDepartmentName = (department) => department.get('name');\r\n\r\nconst OperationFilter = ({\r\n fields,\r\n filters,\r\n onSubmit,\r\n facilities,\r\n departments,\r\n selectedView,\r\n onViewChange,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default OperationFilter;\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const createOperationsSelector = (filter) => {\r\n const { projectStatuses } = filter;\r\n\r\n return createSelector(\r\n (state) => state.getIn(['operations', 'pageResults']), // .get('operations'),\r\n (pageResults) =>\r\n pageResults.filter((operation) =>\r\n projectStatuses.includes(operation.get('projectStatus')),\r\n ),\r\n );\r\n};\r\n\r\nexport const getOperationsPageParamsFromState = createSelector(\r\n (state) => state.getIn(['operations', 'pageParams']),\r\n (pageParams) => pageParams,\r\n);\r\n\r\nexport const getOperationsFromState = createSelector(\r\n (state) => state.getIn(['operations', 'pageResults']),\r\n (pageResults) => pageResults,\r\n);\r\n\r\nexport const getFieldsFromState = createSelector(\r\n (state) => state.getIn(['operations', 'data', 'fields']),\r\n (operations) => operations,\r\n);\r\n\r\nexport const getFacilitiesFromState = createSelector(\r\n (state) => state.getIn(['operations', 'data', 'facilities']),\r\n (operations) => operations,\r\n);\r\n\r\nexport const getDepartmentsFromState = createSelector(\r\n (state) => state.getIn(['operations', 'data', 'departments']),\r\n (departments) => departments,\r\n);\r\n","import { List } from 'immutable';\r\nimport { useState, useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport { toDropDownForOperations } from 'features/projects/projects.mappers';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport operationService from 'services/operation.service';\r\nimport OperationFilter from 'features/operations/components/OperationFilter';\r\n\r\nconst OperationFilterContainer = ({ organizationId, ...rest }) => {\r\n const [fields, setFields] = useState(EMPTY_LIST);\r\n const [facilities, setFacilities] = useState(EMPTY_LIST);\r\n const [departments, setDepartments] = useState(EMPTY_LIST);\r\n\r\n const getOperationsFilter = useCallback(() => {\r\n const filter = {\r\n organizationId,\r\n };\r\n\r\n return operationService.getOperationsFilter(filter).then((filters) => {\r\n const { facilities, fields, departments } = filters;\r\n setFields(List(fields.map(mappers.Field.from)));\r\n setFacilities(List(facilities.map(mappers.Facility.from)));\r\n setDepartments(List(departments).map(toDropDownForOperations));\r\n });\r\n }, [organizationId]);\r\n\r\n useRequest(getOperationsFilter);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default OperationFilterContainer;\r\n","import { useEffect, useState, useCallback } from 'react';\r\n\r\nimport config from 'infrastructure/config';\r\nimport useStream from 'features/projects/dashboard/hooks/useStream';\r\nimport useHubConnection from 'features/projects/dashboard/hooks/useHubConnection';\r\n\r\nconst liveOperationsHubUrl = `${config.dashboardHubsBaseUrl}/live-operations`;\r\n\r\nconst LiveOperationsHub = {\r\n StreamLiveOperations: 'StreamLiveOperations',\r\n};\r\n\r\nconst useLiveOperationsConnection = (\r\n operationsFilters,\r\n onReceiveOperations,\r\n) => {\r\n const [_, setStreamSubscription] = useState();\r\n const [connection, connectionState] = useHubConnection(liveOperationsHubUrl);\r\n\r\n const createStream = useCallback(\r\n (connection) =>\r\n Promise.resolve(\r\n connection.stream(\r\n LiveOperationsHub.StreamLiveOperations,\r\n operationsFilters,\r\n ),\r\n ),\r\n [operationsFilters],\r\n );\r\n\r\n const startStreamSubscription = useCallback(\r\n (stream) =>\r\n setStreamSubscription((currentSubscription) => {\r\n // Already streaming, do nothing.\r\n if (currentSubscription) return currentSubscription;\r\n\r\n return stream.subscribe({\r\n next: onReceiveOperations,\r\n error: console.error,\r\n });\r\n }),\r\n [onReceiveOperations],\r\n );\r\n\r\n const stopStreamSubscription = useCallback(\r\n () =>\r\n setStreamSubscription((currentSubscription) => {\r\n if (currentSubscription) {\r\n currentSubscription.dispose();\r\n }\r\n\r\n return null;\r\n }),\r\n [],\r\n );\r\n\r\n useStream(\r\n connection,\r\n connectionState,\r\n createStream,\r\n startStreamSubscription,\r\n stopStreamSubscription,\r\n );\r\n\r\n useEffect(() => {\r\n // If the filters change, dispose the current streaming subscription and set it to null,\r\n // then resubscribe with the new filters.\r\n stopStreamSubscription();\r\n }, [operationsFilters, stopStreamSubscription]);\r\n};\r\n\r\nexport default useLiveOperationsConnection;\r\n","import { compose } from 'redux';\r\nimport usePWA from 'react-pwa-install-prompt';\r\nimport { Grid, Button } from '@material-ui/core';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport PwaInstallPopupIOS from 'react-pwa-install-ios';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { IOSView, AndroidView, isMobile } from 'react-device-detect';\r\nimport { useEffect, useState, useCallback, useMemo, useRef } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { NotRequestedDataState } from 'altus-datastate';\r\n\r\nimport {\r\n receiveOperations,\r\n searchOnlineOperations,\r\n} from 'features/operations/operations.actions';\r\n\r\nimport {\r\n EMPTY_STRING,\r\n PUBLIC_ASSETS_URL,\r\n LIVE_OPERATIONS_APP_NAME,\r\n EUROPE_MAP_CENTER_COORDS,\r\n} from 'app/app.constants';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport OperationsViews from 'features/operations/OperationsViews';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { getCurrentClientOrganizationIdFromState } from 'app/app.selectors';\r\nimport { OPERATIONS_VIEWS } from 'features/operations/operations.constants';\r\nimport { OPERATIONS_ACTIONS } from 'features/operations/operations.constants';\r\nimport { initialFilters } from 'features/operations/components/OperationFilter';\r\nimport { getOperationsFromState } from 'features/operations/operations.selectors';\r\nimport OperationFilterContainer from 'features/operations/components/OperationFilterContainer';\r\nimport ProjectMapLocations from 'features/projects/components/WellMapLocations/ProjectMapLocations';\r\nimport useLiveOperationsConnection from 'features/projects/dashboard/hooks/useLiveOperationsConnection';\r\n\r\nconst OperationsContainer = ({\r\n classes,\r\n operations,\r\n breadcrumb,\r\n dispatchSearchOperations,\r\n dispatchReceiveOperations,\r\n dataState = NotRequestedDataState,\r\n}) => {\r\n const scrollContainerRef = useRef();\r\n\r\n const [filters, setFilters] = useState(initialFilters);\r\n const [selectedView, setSelectedView] = useState(OPERATIONS_VIEWS.TILES);\r\n const { isStandalone, isInstallPromptSupported, promptInstall } = usePWA();\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n useHeader({\r\n title: EMPTY_STRING,\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n const updatedFilters = {\r\n ...initialFilters,\r\n organizationId: currentClientOrganizationId,\r\n };\r\n\r\n setFilters(updatedFilters);\r\n dispatchSearchOperations(updatedFilters);\r\n }, [currentClientOrganizationId, dispatchSearchOperations]);\r\n\r\n const toggleViewChange = useCallback((_event, value) => {\r\n if (!value) return;\r\n\r\n setSelectedView(value);\r\n }, []);\r\n\r\n const onFiltersSubmit = useCallback(\r\n (updatedFilters) => {\r\n setFilters(updatedFilters);\r\n dispatchSearchOperations(updatedFilters);\r\n },\r\n [dispatchSearchOperations],\r\n );\r\n\r\n useLiveOperationsConnection(filters, dispatchReceiveOperations);\r\n\r\n const onClickInstall = async () => {\r\n const didInstall = await promptInstall();\r\n if (didInstall) {\r\n // User accepted PWA install\r\n }\r\n };\r\n\r\n const projects = useMemo(\r\n () => operations.map((operation) => operation.get('project')),\r\n [operations],\r\n );\r\n\r\n const basePageClasses = useMemo(\r\n () => ({\r\n children: classes.basePageChildren,\r\n }),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isInstallPromptSupported && !isStandalone && (\r\n \r\n Install LiveOps app\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n androidContent: {\r\n padding: theme.spacing(1.25),\r\n paddingLeft: isMobile ? 0 : theme.spacing(1.25),\r\n paddingRight: isMobile ? 0 : theme.spacing(1.25),\r\n },\r\n container: {\r\n padding: theme.spacing(6),\r\n },\r\n icon: {\r\n fontSize: theme.spacing(8),\r\n },\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n content: {\r\n top: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n paddingLeft: isMobile ? 0 : theme.spacing(1),\r\n paddingRight: isMobile ? 0 : theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n operations: getOperationsFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n OPERATIONS_ACTIONS.SEARCH_OPERATIONS,\r\n ),\r\n }),\r\n {\r\n dispatchReceiveOperations: receiveOperations,\r\n dispatchSearchOperations: searchOnlineOperations,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(OperationsContainer);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useEffect, useState } from 'react';\r\nimport Carousel from 'react-material-ui-carousel';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { isDesktop, MobileView } from 'react-device-detect';\r\nimport DeviceOrientation, { Orientation } from 'react-screen-orientation';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { useReducerWithDataState } from 'altus-hooks';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Image } from 'app/components/withTooltip';\r\nimport operationService from 'services/operation.service';\r\nimport { EMPTY_MAP, PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport cheetahJobReducer from 'features/operations/cheetahJob.reducer';\r\nimport { receiveCheetahJobs } from 'features/operations/operations.actions';\r\nimport { OPERATIONS_ACTIONS } from 'features/operations/operations.constants';\r\nimport { getOperationsFromState } from 'features/operations/operations.selectors';\r\nimport ProjectDashboardsList from 'features/projects/dashboard/components/ProjectDashboardsList';\r\n\r\nconst dashboardFilter = (route) => route.isMobile;\r\n\r\nconst OperationCarouselItem = ({\r\n classes,\r\n projectId,\r\n dataState,\r\n cheetahJobs,\r\n}) => {\r\n if (dataState.isLoading()) return null;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst OperationsOverviewContainer = ({\r\n classes,\r\n projectId,\r\n dataState,\r\n operations,\r\n}) => {\r\n const selected = operations\r\n .keySeq()\r\n .findIndex((k) => k === projectId.toString());\r\n\r\n const [currentProjectId, setCurrentProjectId] = useState(projectId);\r\n\r\n const project = operations.getIn([currentProjectId.toString(), 'project']);\r\n\r\n const title = project?.get('title');\r\n const wellboreName = project?.get('wellboreName');\r\n const facilityName = project?.get('facilityName');\r\n\r\n useHeader({\r\n title: `${facilityName} - ${wellboreName}`,\r\n subTitle: `${currentProjectId}. - ${title}`,\r\n });\r\n\r\n const onIndexChange = useCallback(\r\n (index) => {\r\n setCurrentProjectId(operations.keySeq().get(index));\r\n },\r\n [operations],\r\n );\r\n\r\n const [getCheetahJobsByProject, onlineCheetahJobs, dispatch] =\r\n useReducerWithDataState(\r\n operationService.getCheetahJobsByProject,\r\n cheetahJobReducer,\r\n EMPTY_MAP,\r\n );\r\n\r\n useEffect(() => {\r\n getCheetahJobsByProject(currentProjectId).then((cheetahJobs) => {\r\n dispatch(receiveCheetahJobs(cheetahJobs));\r\n });\r\n }, [getCheetahJobsByProject, dispatch, currentProjectId]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {operations\r\n .toList()\r\n .toJS() // required to make Carousel work\r\n .map((operation, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Rotate the device

\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n rotateContainer: {\r\n padding: 5,\r\n },\r\n backgroundImage: {\r\n width: '100%',\r\n zIndex: -1,\r\n },\r\n content: {\r\n minHeight: '100%',\r\n },\r\n firstContainer: {\r\n height: '28vh',\r\n position: 'relative',\r\n overflow: 'visible',\r\n justify: 'center',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n operations: getOperationsFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n OPERATIONS_ACTIONS.SEARCH_OPERATIONS,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(OperationsOverviewContainer);\r\n","import { Box } from '@material-ui/core';\r\n\r\nimport { BasePageHeader, NavTabsContainer } from 'altus-ui-components';\r\n\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\n\r\nconst DataExchangeBasePage = ({ routes, breadcrumb }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default DataExchangeBasePage;\r\n","import { SvgIcon } from '@material-ui/core';\r\n\r\nconst DataExchangeIcon = (props) => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default DataExchangeIcon;\r\n","import routePaths from 'app/routePaths';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\n\r\nconst DataExchangeContainer = ({ routes }) => {\r\n useHeader({\r\n logoNavigation: routePaths.dataExchange.root,\r\n });\r\n\r\n return ;\r\n};\r\n\r\nexport default DataExchangeContainer;\r\n","import { useMemo } from 'react';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { projectStatusToString } from 'features/projects/projects.mappers';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst ProjectSelectModalTable = ({ projects, ...rest }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Project',\r\n accessor: (project) => project.get('projectId'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Objective',\r\n accessor: (project) => project.get('title'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Well',\r\n accessor: (project) => project.get('wellboreName'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Facility',\r\n accessor: (project) => project.get('facilityName'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Client',\r\n accessor: (project) => project.get('organizationName'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Phase',\r\n accessor: (project) => projectStatusToString(project.get('status')),\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProjectSelectModalTable;\r\n","import { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport { useState, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Dialog, DialogContent, Button } from '@material-ui/core';\r\n\r\nimport { useReducerWithDataState } from 'altus-hooks';\r\nimport { ModalHeader, LoadingOverlay, ModalActions } from 'altus-ui-components';\r\n\r\nimport {\r\n clearProjects,\r\n receiveProjects,\r\n} from 'features/projects/projects.actions';\r\n\r\nimport ProjectFilter, {\r\n Filters as ProjectFilters,\r\n} from 'features/projects/components/ProjectFilter';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport operationService from 'services/operation.service';\r\nimport projectReducer from 'features/projects/project.entity.reducer';\r\nimport { toProjectStatusFromDto } from 'features/projects/projects.mappers';\r\nimport ProjectSelectModalTable from 'features/data-exchange/components/ProjectSelectModalTable';\r\n\r\nconst filters = [\r\n ProjectFilters.FACILITY_ID,\r\n ProjectFilters.TEXT_SEARCH,\r\n ProjectFilters.PROJECT_STATUS,\r\n ProjectFilters.ORGANIZATION_ID,\r\n];\r\n\r\nconst CheetahJobProjectSelectModal = ({\r\n open,\r\n classes,\r\n onClose,\r\n onClearProject,\r\n onSelectProject,\r\n cheetahJobSource,\r\n}) => {\r\n const [facilities, setFacilities] = useState(EMPTY_LIST);\r\n const [organizations, setOrganizations] = useState(EMPTY_LIST);\r\n const [projectStatuses, setProjectStatuses] = useState(EMPTY_LIST);\r\n\r\n const [getAvailableProjects, projects, dispatch, dataState] =\r\n useReducerWithDataState(\r\n operationService.getAvailableProjectsForCheetahJobs,\r\n projectReducer,\r\n EMPTY_MAP,\r\n );\r\n\r\n const dispatchClearProjects = useCallback(\r\n () => dispatch(clearProjects()),\r\n [dispatch],\r\n );\r\n\r\n const dispatchGetAvailableProjects = useCallback(\r\n (filter) =>\r\n getAvailableProjects(filter, cheetahJobSource).then((projects) =>\r\n dispatch(receiveProjects(projects)),\r\n ),\r\n [dispatch, getAvailableProjects, cheetahJobSource],\r\n );\r\n\r\n const onEnter = useCallback(() => {\r\n operationService\r\n .getCheetahJobsProjectFilter(cheetahJobSource)\r\n .then((filters) => {\r\n const { facilities, projectStatuses, organizations } = filters;\r\n\r\n setFacilities(List(facilities.map(mappers.Facility.from)));\r\n setOrganizations(List(organizations.map(mappers.Organization.from)));\r\n setProjectStatuses(List(projectStatuses.map(toProjectStatusFromDto)));\r\n });\r\n }, [cheetahJobSource]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n height: '75vh',\r\n },\r\n dialogContent: {\r\n position: 'relative',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CheetahJobProjectSelectModal);\r\n","import { Grid } from '@material-ui/core';\r\nimport { useState, useCallback } from 'react';\r\n\r\nimport { EMPTY_LIST, EMPTY_STRING } from 'app/app.constants';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport CheetahJobProjectSelectModal from 'features/data-exchange/components/CheetahJobProjectSelectModal';\r\n\r\nconst CheetahJobProjectSelectField = ({\r\n form,\r\n field,\r\n disabled,\r\n cheetahJob,\r\n}) => {\r\n const { name } = field;\r\n const { setFieldValue } = form;\r\n\r\n const [isOpen, setModalOpen] = useState(false);\r\n\r\n const onClose = useCallback(() => setModalOpen(false), []);\r\n\r\n const onSelectProject = useCallback(\r\n (project) => {\r\n setFieldValue(name, project.get('projectId'));\r\n onClose();\r\n },\r\n [name, onClose, setFieldValue],\r\n );\r\n\r\n const onClearProject = useCallback(() => {\r\n setFieldValue(name, null);\r\n onClose();\r\n }, [name, onClose, setFieldValue]);\r\n\r\n const renderValue = useCallback(\r\n () => cheetahJob.getIn(['project', 'projectId']),\r\n [cheetahJob],\r\n );\r\n\r\n return (\r\n \r\n setModalOpen(true),\r\n }}\r\n >\r\n {EMPTY_LIST.toArray()}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheetahJobProjectSelectField;\r\n","import { Field } from 'formik';\r\nimport { Button } from '@material-ui/core';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { Box, Grid } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { Status } from 'features/data-exchange/components/StatusIndicator';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport CheetahJobStatusIndicator from 'features/data-exchange/components/CheetahJobStatusIndicator';\r\nimport CheetahJobProjectSelectField from 'features/data-exchange/components/CheetahJobProjectSelectField';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst FormFields = {\r\n PROJECT_ID: 'projectId',\r\n};\r\n\r\nconst CompletableJobSources = [\r\n CheetahJobSource.WARRIOR,\r\n CheetahJobSource.SM_LOCATION,\r\n];\r\n\r\nconst CheetahJobsTable = ({\r\n disabled,\r\n cheetahJobs,\r\n updateCheetahJob,\r\n cheetahJobSource,\r\n}) => {\r\n const initialState = useMemo(\r\n () => ({\r\n ...defaultInitialState,\r\n hiddenColumns:\r\n disabled || !CompletableJobSources.includes(cheetahJobSource)\r\n ? ['actions']\r\n : [],\r\n }),\r\n [disabled, cheetahJobSource],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n id: 'name',\r\n accessor: (cheetahJob) => cheetahJob.get('displayName'),\r\n Header: () => {\r\n switch (cheetahJobSource) {\r\n case CheetahJobSource.CHEETAH:\r\n return 'Cheetah Project Name';\r\n case CheetahJobSource.SM_LOCATION:\r\n return 'Winch Comms unit';\r\n case CheetahJobSource.WARRIOR:\r\n return 'Warrior';\r\n default:\r\n return 'Name';\r\n }\r\n },\r\n Cell: ({ row, value }) => (\r\n \r\n \r\n \r\n \r\n {value}\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Collaborate Project',\r\n accessor: (cheetahJob) => cheetahJob.get('projectId'),\r\n Cell: ({ row }) => {\r\n const cheetahJob = row.original;\r\n\r\n const projectId = cheetahJob.get('projectId');\r\n\r\n return (\r\n \r\n {!disabled && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Client',\r\n accessor: (cheetahJob) =>\r\n cheetahJob.getIn(['project', 'organizationName'], null),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Facility',\r\n accessor: (cheetahJob) =>\r\n cheetahJob.getIn(['project', 'facilityName'], null),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Well',\r\n accessor: (cheetahJob) =>\r\n cheetahJob.getIn(['project', 'wellboreName'], null),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Objective',\r\n accessor: (cheetahJob) => cheetahJob.getIn(['project', 'title'], null),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Sensors',\r\n accessor: (cheetahJob) => cheetahJob.get('sensorCount'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Status',\r\n accessor: (cheetahJob) => {\r\n if (cheetahJob.get('isCompleted')) return 'Completed';\r\n\r\n return cheetahJob.get('projectId')\r\n ? cheetahJob.get('statusName')\r\n : 'Connect!';\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'actions',\r\n Cell: ({ row }) => {\r\n const cheetahJob = row.original;\r\n\r\n if (cheetahJob.get('isCompleted')) return null;\r\n\r\n // disable for non connected projects by design, to be checked with Rolf\r\n // https://dev.azure.com/AltusIntervention/2cd8620a-4464-42b6-b12a-44a48e3b743e/_apis/wit/attachments/56e30891-947e-4236-92ca-d9345ed3e04f?fileName=image.png\r\n if (\r\n !cheetahJob.get('projectId') &&\r\n cheetahJobSource !== CheetahJobSource.SM_LOCATION\r\n )\r\n return null;\r\n\r\n return (\r\n \r\n updateCheetahJob(cheetahJob.set('isCompleted', true).toJS())\r\n }\r\n >\r\n Complete\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [disabled, cheetahJobSource, updateCheetahJob],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateCheetahJob],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CheetahJobsTable;\r\n","import { compose } from 'redux';\r\nimport { useMemo } from 'react';\r\nimport { Field, Formik } from 'formik';\r\nimport { Grid, MenuItem } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SearchTextFieldFormik from 'app/components/form/formik/SearchTextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nconst Filters = {\r\n FACILITY_ID: 'facilityId',\r\n TEXT_SEARCH: 'textSearch',\r\n ORGANIZATION_ID: 'organizationId',\r\n IS_ONLINE: 'isOnline',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst CheetahJobFilter = ({\r\n filter,\r\n classes,\r\n onSubmit,\r\n facilities = EMPTY_LIST,\r\n organizations = EMPTY_LIST,\r\n}) => {\r\n const initialValues = useMemo(\r\n () => ({\r\n [Filters.FACILITY_ID]: '',\r\n [Filters.TEXT_SEARCH]: '',\r\n ...filter,\r\n }),\r\n [filter],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n All\r\n \r\n Online\r\n Offline\r\n \r\n \r\n \r\n organization.get('id')}\r\n getItemName={(organization) => organization.get('name')}\r\n />\r\n \r\n \r\n facility.get('id')}\r\n getItemName={(facility) => facility.get('name')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n root: {\r\n paddingTop: 15,\r\n marginBottom: 15,\r\n },\r\n};\r\n\r\nexport default compose(withStyles(styles))(CheetahJobFilter);\r\n","import { List } from 'immutable';\r\nimport { useState, useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport operationService from 'services/operation.service';\r\nimport CheetahJobFilter from 'features/data-exchange/components/CheetahJobFilter';\r\n\r\nconst CheetahJobFilterContainer = ({ filter, ...rest }) => {\r\n const [facilities, setFacilities] = useState(EMPTY_LIST);\r\n const [organizations, setOrganizations] = useState(EMPTY_LIST);\r\n\r\n const getCheetahJobsFilter = useCallback(\r\n () =>\r\n operationService.getCheetahJobsFilter(filter).then((filter) => {\r\n const { facilities, organizations } = filter;\r\n\r\n setFacilities(\r\n List(facilities.filter(Boolean).map(mappers.Facility.from)),\r\n );\r\n\r\n setOrganizations(\r\n List(organizations.filter(Boolean).map(mappers.Organization.from)),\r\n );\r\n }),\r\n [filter],\r\n );\r\n\r\n useRequest(getCheetahJobsFilter);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CheetahJobFilterContainer;\r\n","import { BasePage } from 'altus-ui-components';\r\n\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport CheetahJobsTable from 'features/data-exchange/components/CheetahJobsTable';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport CheetahJobFilterContainer from 'features/data-exchange/components/CheetahJobFilterContainer';\r\n\r\nconst filter = {\r\n isCompleted: true,\r\n source: CheetahJobSource.SM_LOCATION,\r\n};\r\n\r\nconst ArchivedWinchContainer = ({ breadcrumb }) => {\r\n const { dataState, cheetahJobs, searchCheetahJobs } = useCheetahJobs(filter);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ArchivedWinchContainer;\r\n","import { BasePage } from 'altus-ui-components';\r\n\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport CheetahJobsTable from 'features/data-exchange/components/CheetahJobsTable';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport CheetahJobFilterContainer from 'features/data-exchange/components/CheetahJobFilterContainer';\r\n\r\nconst filter = {\r\n isCompleted: false,\r\n source: CheetahJobSource.SM_LOCATION,\r\n};\r\n\r\nconst AvailableWinchContainer = ({ breadcrumb }) => {\r\n const { dataState, cheetahJobs, updateCheetahJob, searchCheetahJobs } =\r\n useCheetahJobs(filter);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AvailableWinchContainer;\r\n","import { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport ProjectHelmet from 'app/components/ProjectHelmet';\r\nimport { getProjectById } from 'features/projects/projects.actions';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport DataExchangeBasePage from 'features/data-exchange/DataExchangeBasePage';\r\n\r\nconst LiveProjectContainer = ({ projectId, routes }) => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getProjectById(projectId));\r\n }, [projectId, dispatch]);\r\n\r\n const project = useCurrentProject();\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LiveProjectContainer;\r\n","import { BasePage } from 'altus-ui-components';\r\n\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport CheetahJobsTable from 'features/data-exchange/components/CheetahJobsTable';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport CheetahJobFilterContainer from 'features/data-exchange/components/CheetahJobFilterContainer';\r\n\r\nconst filter = {\r\n isCompleted: true,\r\n source: CheetahJobSource.WARRIOR,\r\n};\r\n\r\nconst ArchivedWarriorContainer = ({ breadcrumb }) => {\r\n const { dataState, cheetahJobs, searchCheetahJobs } = useCheetahJobs(filter);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ArchivedWarriorContainer;\r\n","import { BasePage } from 'altus-ui-components';\r\n\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport CheetahJobsTable from 'features/data-exchange/components/CheetahJobsTable';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport CheetahJobFilterContainer from 'features/data-exchange/components/CheetahJobFilterContainer';\r\n\r\nconst filter = {\r\n isCompleted: false,\r\n source: CheetahJobSource.WARRIOR,\r\n};\r\n\r\nconst AvailableWarriorContainer = ({ breadcrumb }) => {\r\n const { dataState, cheetahJobs, updateCheetahJob, searchCheetahJobs } =\r\n useCheetahJobs(filter);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AvailableWarriorContainer;\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst getAllSMLocations = () => Agent.get('/smlocation/config/all');\r\n\r\nconst createSMLocation = (name) => Agent.post('/smlocation/config/new', name);\r\n\r\nconst updateSMLocation = (smLocation) =>\r\n Agent.put('/smlocation/config/update', smLocation);\r\n\r\nconst deleteSMLocation = (smLocationId) =>\r\n Agent.delete(`/smlocation/config/delete/${smLocationId}`);\r\n\r\nconst smLocationService = {\r\n getAllSMLocations,\r\n createSMLocation,\r\n updateSMLocation,\r\n deleteSMLocation,\r\n};\r\n\r\nexport default smLocationService;\r\n","import smLocationService from 'services/smLocation.service';\r\n\r\nimport { SMLOCATION_CONFIG_ACTIONS } from 'features/data-exchange/winch/smlocation.constants';\r\n\r\nexport const receiveSMLocations = (smLocations) => ({\r\n type: SMLOCATION_CONFIG_ACTIONS.RECEIVE_SMLOCATIONS,\r\n payload: smLocations,\r\n});\r\n\r\nexport const receiveSMlocation = (smLocation) => ({\r\n type: SMLOCATION_CONFIG_ACTIONS.RECEIVE_SMLOCATION,\r\n payload: smLocation,\r\n});\r\n\r\nexport const getAllSMlocations = () => (dispatch) => {\r\n const payload = smLocationService\r\n .getAllSMLocations()\r\n .then((smLocations) => dispatch(receiveSMLocations(smLocations)));\r\n\r\n dispatch({\r\n type: SMLOCATION_CONFIG_ACTIONS.GET_SMLOCATIONS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const createSMLocation = (smLocation) => (dispatch) => {\r\n const payload = smLocationService\r\n .createSMLocation(smLocation)\r\n .then(() => dispatch(getAllSMlocations()));\r\n\r\n dispatch({\r\n payload,\r\n type: SMLOCATION_CONFIG_ACTIONS.CREATE_SMLOCATION,\r\n notification: {\r\n success: 'Winch configuration created',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateSMLocation = (smLocation) => (dispatch) => {\r\n const payload = smLocationService.updateSMLocation(smLocation);\r\n\r\n dispatch({\r\n payload,\r\n type: SMLOCATION_CONFIG_ACTIONS.UPDATE_SMLOCATION,\r\n notification: {\r\n success: 'Winch configuration updated successfully',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const deleteSMLocation = (smLocationId) => (dispatch) => {\r\n const payload = smLocationService\r\n .deleteSMLocation(smLocationId)\r\n .then(() => dispatch(getAllSMlocations()));\r\n\r\n dispatch({\r\n payload,\r\n type: SMLOCATION_CONFIG_ACTIONS.DELETE_SMLOCATION,\r\n notification: {\r\n success: 'Winch configuration deleted',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nconst getSMLocationsSelector = (state) => state.getIn(['entity', 'smlocation']);\r\n\r\nexport const getSMLocationsFromState = createSelector(\r\n getSMLocationsSelector,\r\n (smLocations) => smLocations,\r\n);\r\n","import { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n createSMLocation,\r\n updateSMLocation,\r\n deleteSMLocation,\r\n getAllSMlocations,\r\n} from 'features/data-exchange/winch/smlocation.actions';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { SMLOCATION_CONFIG_ACTIONS } from 'features/data-exchange/winch/smlocation.constants';\r\nimport { getSMLocationsFromState } from 'features/data-exchange/winch/smlocation.selectors';\r\n\r\nconst useSMLocations = () => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchGetSMLocations = useCallback(\r\n () => dispatch(getAllSMlocations()),\r\n [dispatch],\r\n );\r\n\r\n const dispatchCreateSMLocation = useCallback(\r\n (smLocation) => dispatch(createSMLocation(smLocation)),\r\n [dispatch],\r\n );\r\n\r\n const dispatchUpdateSMLocation = useCallback(\r\n (smLocation) => dispatch(updateSMLocation(smLocation)),\r\n [dispatch],\r\n );\r\n\r\n const dispatchDeleteSMLocation = useCallback(\r\n (smLocationId) => dispatch(deleteSMLocation(smLocationId)),\r\n [dispatch],\r\n );\r\n\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n SMLOCATION_CONFIG_ACTIONS.GET_SMLOCATIONS,\r\n ),\r\n );\r\n\r\n const smLocations = useSelector((state) => getSMLocationsFromState(state));\r\n\r\n return {\r\n dataState,\r\n smLocations,\r\n getSMLocations: dispatchGetSMLocations,\r\n createSMLocation: dispatchCreateSMLocation,\r\n updateSMLocation: dispatchUpdateSMLocation,\r\n deleteSMLocation: dispatchDeleteSMLocation,\r\n };\r\n};\r\n\r\nexport default useSMLocations;\r\n","import { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { SMLocationCreateFormFields as FormFields } from 'features/data-exchange/winch/smlocation.constants';\r\n\r\nconst CreateSMLocationForm = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CreateSMLocationForm;\r\n","import { compose } from 'redux';\r\nimport { Formik, Form } from 'formik';\r\nimport { Dialog } from '@material-ui/core';\r\nimport { useCallback } from 'react';\r\nimport { Button, DialogContent } from '@material-ui/core';\r\n\r\nimport {\r\n ModalActions,\r\n ModalHeader,\r\n withModal,\r\n LoadingButton,\r\n} from 'altus-ui-components';\r\n\r\nimport { CREATE_SMLOCATION_MODAL } from 'features/data-exchange/winch/smlocation.constants';\r\nimport CreateSMLocationForm from 'features/data-exchange/winch/CreateSMLocationForm';\r\n\r\nconst initValues = { name: '' };\r\n\r\nconst CreateSMLocationModalContainer = ({\r\n open,\r\n toggleModal,\r\n createSMLocation,\r\n}) => {\r\n const onSubmit = useCallback(\r\n (smLocation) => createSMLocation(smLocation).then(toggleModal),\r\n [createSMLocation, toggleModal],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {({ handleSubmit }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Add\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default compose(withModal(CREATE_SMLOCATION_MODAL))(\r\n CreateSMLocationModalContainer,\r\n);\r\n","import makeStyles from '@material-ui/styles/makeStyles';\r\nimport FiberManualRecord from '@material-ui/icons/FiberManualRecord';\r\n\r\nimport { SmLocationStatus } from 'app/app.constants';\r\n\r\nconst SMLocationStatusIndicator = ({ title, status }) => {\r\n const classes = useStyles(status);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n fill: (status) => {\r\n switch (status) {\r\n case SmLocationStatus.PING:\r\n return theme.altus.components.SmLocation.statusIndicator.ping;\r\n case SmLocationStatus.NO_PING:\r\n return theme.altus.components.SmLocation.statusIndicator.noPing;\r\n default:\r\n return theme.altus.components.SmLocation.statusIndicator.unknown;\r\n }\r\n },\r\n },\r\n}));\r\n\r\nexport default SMLocationStatusIndicator;\r\n","import { Field } from 'formik';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { SmLocationStatus } from 'app/app.constants';\r\nimport { validateIPAddress } from 'utils/validation.util';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport SMLocationStatusIndicator from 'features/data-exchange/components/SMLocationStatusIndicator';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst FormFields = {\r\n NOTES: 'notes',\r\n IP_ADDRESS: 'ipAddress',\r\n UNIT_IP_ADDRESS: 'unitIPAddress',\r\n POINT_OF_CONTACT: 'pointOfContact',\r\n};\r\n\r\nconst SMLocationConfigsTable = ({\r\n smLocations,\r\n updateSMLocation,\r\n initialState = defaultInitialState,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'COMMS UNIT',\r\n accessor: (smLocation) => smLocation.get('name'),\r\n Cell: ({ row, value }) => (\r\n \r\n \r\n {value}\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'COMS UNIT IP',\r\n Cell: ({ row }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {row.original.get('isUnitOnline') ? 'Ping' : 'No Ping'}\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Smart Monitor Winch IP',\r\n Cell: ({ row }) => {\r\n const smLocation = row.original;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {smLocation.get('isOnline') ? 'Ping' : 'No Ping'}\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'POC',\r\n Cell: ({ row }) => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Notes',\r\n Cell: ({ row }) => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Status',\r\n accessor: (smLocation) => {\r\n switch (smLocation.get('generalStatus')) {\r\n case SmLocationStatus.PING:\r\n return 'Streaming';\r\n case SmLocationStatus.NO_PING:\r\n return 'Not Streaming';\r\n default:\r\n return smLocation.get('isCompleted') ? 'Competed' : 'Offline';\r\n }\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateSMLocation],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SMLocationConfigsTable;\r\n","import { useEffect } from 'react';\r\nimport Add from '@material-ui/icons/Add';\r\nimport { Box, Grid } from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { CREATE_SMLOCATION_MODAL } from 'features/data-exchange/winch/smlocation.constants';\r\nimport { Button } from 'app/components/withNavigation';\r\nimport useSMLocations from 'features/data-exchange/hooks/useSMLocations';\r\nimport CreateSMLocationModalContainer from './CreateSMLocationModalContainer';\r\nimport SMLocationConfigsTable from 'features/data-exchange/components/SMLocationConfigsTable';\r\n\r\nconst ConfigurationWinchContainer = ({ breadcrumb }) => {\r\n const {\r\n dataState,\r\n smLocations,\r\n getSMLocations,\r\n createSMLocation,\r\n updateSMLocation,\r\n } = useSMLocations();\r\n\r\n useEffect(() => getSMLocations(), [getSMLocations]);\r\n\r\n const [, toggleAddSMLocationModal] = useModal(CREATE_SMLOCATION_MODAL);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Add\r\n \r\n \r\n\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ConfigurationWinchContainer;\r\n","import { BasePage } from 'altus-ui-components';\r\n\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport CheetahJobsTable from 'features/data-exchange/components/CheetahJobsTable';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport CheetahJobFilterContainer from 'features/data-exchange/components/CheetahJobFilterContainer';\r\n\r\nconst filter = {\r\n isCompleted: true,\r\n source: CheetahJobSource.CHEETAH,\r\n};\r\n\r\nconst ArchivedCheetahContainer = ({ breadcrumb }) => {\r\n const { dataState, cheetahJobs, searchCheetahJobs } = useCheetahJobs(filter);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ArchivedCheetahContainer;\r\n","import { BasePage } from 'altus-ui-components';\r\n\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport CheetahJobsTable from 'features/data-exchange/components/CheetahJobsTable';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport CheetahJobFilterContainer from 'features/data-exchange/components/CheetahJobFilterContainer';\r\n\r\nconst filter = {\r\n isCompleted: false,\r\n source: CheetahJobSource.CHEETAH,\r\n};\r\n\r\nconst AvailableCheetahContainer = ({ breadcrumb }) => {\r\n const { dataState, cheetahJobs, updateCheetahJob, searchCheetahJobs } =\r\n useCheetahJobs(filter);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AvailableCheetahContainer;\r\n","import { List } from 'immutable';\r\nimport { useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport operationService from 'services/operation.service';\r\n\r\nconst useCheetahJobCurves = (cheetahJobId) => {\r\n const getCheetahJobCurves = useCallback(() => {\r\n if (!cheetahJobId) return;\r\n\r\n return operationService\r\n .getCheetahJobCurves(cheetahJobId)\r\n .then((cheetahJobCurves) =>\r\n List(cheetahJobCurves).map(mappers.CheetahJobCurve.from),\r\n );\r\n }, [cheetahJobId]);\r\n\r\n return useRequest(getCheetahJobCurves);\r\n};\r\n\r\nexport default useCheetahJobCurves;\r\n","import { useMemo } from 'react';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst CheetahJobCurvesTable = ({ cheetahJobCurves }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 4,\r\n Header: 'Caption',\r\n accessor: (cheetahJobCurve) => cheetahJobCurve.get('caption'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Description',\r\n accessor: (cheetahJobCurve) => cheetahJobCurve.get('description'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Min',\r\n accessor: (cheetahJobCurve) => cheetahJobCurve.get('minValue'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Max',\r\n accessor: (cheetahJobCurve) => cheetahJobCurve.get('maxValue'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Unit',\r\n accessor: (cheetahJobCurve) => cheetahJobCurve.get('unit'),\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CheetahJobCurvesTable;\r\n","import { useDispatch } from 'react-redux';\r\nimport { useMemo, useCallback, useEffect } from 'react';\r\nimport { replace } from 'connected-react-router/immutable';\r\nimport { Box, MenuItem, TextField } from '@material-ui/core';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { getSummarizedDataState } from 'altus-datastate';\r\n\r\nimport { toCheetahJobCurves } from 'utils/route.util';\r\nimport { EMPTY_LIST, EMPTY_STRING } from 'app/app.constants';\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport useCheetahJobCurves from 'features/data-exchange/hooks/useCheetahJobCurves';\r\nimport CheetahJobCurvesTable from 'features/data-exchange/live-projects/components/CheetahJobCurvesTable';\r\n\r\nconst CheetahJobCurvesContainer = ({\r\n path,\r\n source,\r\n projectId,\r\n breadcrumb,\r\n cheetahJobId = EMPTY_STRING,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const setCheetahJobId = useCallback(\r\n (cheetahJobId) =>\r\n dispatch(\r\n replace(toCheetahJobCurves(projectId, cheetahJobId, null, path)),\r\n ),\r\n [path, projectId, dispatch],\r\n );\r\n\r\n const filter = useMemo(\r\n () => ({\r\n source,\r\n projectId,\r\n }),\r\n [source, projectId],\r\n );\r\n\r\n const {\r\n cheetahJobs,\r\n searchCheetahJobs,\r\n dataState: cheetahJobsDataState,\r\n } = useCheetahJobs(filter);\r\n\r\n useEffect(() => {\r\n searchCheetahJobs();\r\n }, [searchCheetahJobs]);\r\n\r\n useEffect(() => {\r\n const initialCheetahJob = cheetahJobs.first();\r\n\r\n if (cheetahJobId) return;\r\n if (!initialCheetahJob) return;\r\n\r\n setCheetahJobId(initialCheetahJob.get('id'));\r\n }, [cheetahJobs, cheetahJobId, setCheetahJobId]);\r\n\r\n // prevent console warning if the selected cheetahJob has not arrived yet\r\n var selectedCheetahJobId = cheetahJobs.has(cheetahJobId)\r\n ? cheetahJobId\r\n : EMPTY_STRING;\r\n\r\n const [cheetahJobCurves = EMPTY_LIST, cheetahJobCurvesDataState] =\r\n useCheetahJobCurves(cheetahJobId);\r\n\r\n const dataState = useMemo(\r\n () =>\r\n getSummarizedDataState([cheetahJobsDataState, cheetahJobCurvesDataState]),\r\n [cheetahJobsDataState, cheetahJobCurvesDataState],\r\n );\r\n\r\n return (\r\n \r\n setCheetahJobId(event.target.value)}\r\n >\r\n {cheetahJobs.valueSeq().map((cheetahJob) => (\r\n \r\n {cheetahJob.get('displayName')}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheetahJobCurvesContainer;\r\n","import { useMemo } from 'react';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { toCheetahJobCurves } from 'utils/route.util';\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\nimport CheetahJobStatusIndicator from 'features/data-exchange/components/CheetahJobStatusIndicator';\r\n\r\nconst LiveProjectCheetahJobsTable = ({ projectId, cheetahJobs }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'status',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'ID/UNIT',\r\n accessor: (cheetahJob) => cheetahJob.get('displayName'),\r\n Cell: ({ row, value }) => {\r\n const cheetahJob = row.original;\r\n\r\n const source = cheetahJob.get('source');\r\n const cheetahJobId = cheetahJob.get('id');\r\n\r\n if (source === CheetahJobSource.OTHER) return value;\r\n\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Data Source',\r\n accessor: (cheetahJob) => cheetahJob.get('sourceName'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Sensors',\r\n accessor: (cheetahJob) => cheetahJob.get('sensorCount'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Master',\r\n accessor: () => 'N/A',\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Status',\r\n accessor: (cheetahJob) => cheetahJob.get('statusName'),\r\n },\r\n ],\r\n [projectId],\r\n );\r\n\r\n return (\r\n
\r\n );\r\n};\r\n\r\nexport default LiveProjectCheetahJobsTable;\r\n","import { useMemo, useEffect } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport useCheetahJobs from 'features/data-exchange/hooks/useCheetahJobs';\r\nimport LiveProjectCheetahJobsTable from 'features/data-exchange/live-projects/components/LiveProjectCheetahJobsTable';\r\n\r\nconst LiveProjectOverviewContainer = ({ projectId, breadcrumb }) => {\r\n const filter = useMemo(\r\n () => ({\r\n projectId,\r\n }),\r\n [projectId],\r\n );\r\n\r\n const { dataState, cheetahJobs, searchCheetahJobs } = useCheetahJobs(filter);\r\n\r\n useEffect(() => searchCheetahJobs(filter), [filter, searchCheetahJobs]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LiveProjectOverviewContainer;\r\n","import { useMemo, useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n searchOperations,\r\n updateProjectStatus,\r\n} from 'features/operations/operations.actions';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { OPERATIONS_ACTIONS } from 'features/operations/operations.constants';\r\nimport { createOperationsSelector } from 'features/operations/operations.selectors';\r\n\r\nconst useOperations = (initialFilter) => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSearchOperations = useCallback(\r\n (filter) => dispatch(searchOperations(filter)),\r\n [dispatch],\r\n );\r\n\r\n const dispatchUpdateProjectStatus = useCallback(\r\n (projectId, status) => dispatch(updateProjectStatus(projectId, status)),\r\n [dispatch],\r\n );\r\n\r\n const selector = useMemo(\r\n () => createOperationsSelector(initialFilter),\r\n [initialFilter],\r\n );\r\n\r\n const operations = useSelector(selector);\r\n\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n OPERATIONS_ACTIONS.SEARCH_OPERATIONS,\r\n OPERATIONS_ACTIONS.UPDATE_PROJECT_CHEETAH_JOB_STATUS,\r\n ),\r\n );\r\n\r\n return {\r\n dataState,\r\n operations,\r\n searchOperations: dispatchSearchOperations,\r\n updateProjectStatus: dispatchUpdateProjectStatus,\r\n };\r\n};\r\n\r\nexport default useOperations;\r\n","import { compose } from 'redux';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { alpha } from '@material-ui/core/styles';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Table,\r\n TableRow,\r\n TableHeaderRow,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport CheetahJobStatusIndicator from 'features/data-exchange/components/CheetahJobStatusIndicator';\r\n\r\nconst LiveProjectsCheetahJobsTable = ({ classes, cheetahJobs }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'status',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'ID/UNIT',\r\n accessor: (cheetahJob) => cheetahJob.get('displayName'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Data Source',\r\n accessor: (cheetahJob) => cheetahJob.get('sourceName'),\r\n },\r\n {\r\n xs: 2,\r\n id: 'wellbore-placeholder',\r\n accessor: () => null,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Sensors',\r\n accessor: (cheetahJob) => cheetahJob.get('sensorCount'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Master',\r\n accessor: () => 'N/A',\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Status',\r\n accessor: (cheetahJob) => cheetahJob.get('statusName'),\r\n },\r\n {\r\n xs: 2,\r\n id: 'actions-placeholder',\r\n accessor: () => null,\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableHeaderRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [classes],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableHeaderRowRoot: {\r\n marginBottom: 0,\r\n },\r\n tableRowRoot: {\r\n '&:hover': {\r\n background: alpha(theme.altus.components.TableRow.hoverColor, 0.2),\r\n },\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(LiveProjectsCheetahJobsTable);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport LiveProjectsCheetahJobsTable from 'features/data-exchange/live-projects/components/LiveProjectsCheetahJobsTable';\r\n\r\nconst LiveProjectsTableRow = ({ item, classes, ...rest }) => {\r\n const cheetahJobs = item.get('cheetahJobs');\r\n\r\n const renderDetails = useCallback(\r\n () => ,\r\n [cheetahJobs],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n detailsRoot: {\r\n paddingTop: 0,\r\n },\r\n rootExpanded: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n tableRowExpanded: {\r\n background: theme.altus.components.TableRow.hoverColor,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(LiveProjectsTableRow);\r\n","import { Field } from 'formik';\r\nimport { compose } from 'redux';\r\nimport { useMemo, useCallback } from 'react';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { MenuItem, Typography } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { toLiveProject } from 'utils/route.util';\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport { PROJECT_STATUS as ProjectStatus } from 'app/app.constants';\r\nimport { projectStatusToString } from 'features/projects/projects.mappers';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport LiveProjectsTableRow from 'features/data-exchange/live-projects/components/LiveProjectsTableRow';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 15,\r\n};\r\n\r\nconst FormFields = {\r\n PROJECT_STATUS: 'projectStatus',\r\n};\r\n\r\nconst LiveProjectsTable = ({\r\n classes,\r\n operations,\r\n updateProjectStatus,\r\n ...rest\r\n}) => {\r\n const onSubmit = useCallback(\r\n (operation) =>\r\n updateProjectStatus(\r\n operation.projectId,\r\n operation[FormFields.PROJECT_STATUS],\r\n ),\r\n [updateProjectStatus],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Project',\r\n accessor: (operation) => operation.get('projectId'),\r\n Cell: ({ value: projectId }) => (\r\n {\r\n // prevent expanding the row\r\n event.stopPropagation();\r\n }}\r\n >\r\n \r\n {projectId}\r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Client',\r\n accessor: (operation) =>\r\n operation.getIn(['project', 'organizationName']),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Facility',\r\n accessor: (operation) => operation.getIn(['project', 'facilityName']),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Well',\r\n accessor: (operation) => operation.getIn(['project', 'wellboreName']),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Objective',\r\n accessor: (operation) => operation.getIn(['project', 'title']),\r\n },\r\n\r\n {\r\n xs: 2,\r\n Header: 'Status',\r\n accessor: () => null,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Phase',\r\n Cell: () => (\r\n event.stopPropagation()}\r\n >\r\n {Object.values(ProjectStatus).map((status) => (\r\n \r\n {projectStatusToString(status)}\r\n \r\n ))}\r\n \r\n ),\r\n },\r\n ],\r\n [classes],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [onSubmit],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n projectIdLink: {\r\n display: 'inline',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(LiveProjectsTable);\r\n","import { compose } from 'redux';\r\nimport { useMemo } from 'react';\r\nimport { Field, Formik } from 'formik';\r\nimport { OrderedMap } from 'immutable';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_LIST, PROJECT_STATUS } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport { projectStatusToString } from 'features/projects/projects.mappers';\r\nimport SearchTextFieldFormik from 'app/components/form/formik/SearchTextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nconst Filters = {\r\n FACILITY_ID: 'facilityId',\r\n TEXT_SEARCH: 'textSearch',\r\n ORGANIZATION_ID: 'organizationId',\r\n PROJECT_STATUS: 'projectStatus',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst LiveProjectsFilter = ({\r\n filter,\r\n classes,\r\n onSubmit,\r\n facilities = EMPTY_LIST,\r\n organizations = EMPTY_LIST,\r\n}) => {\r\n const initialValues = useMemo(\r\n () => ({\r\n [Filters.FACILITY_ID]: '',\r\n [Filters.TEXT_SEARCH]: '',\r\n ...filter,\r\n }),\r\n [filter],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n organization.get('id')}\r\n getItemName={(organization) => organization.get('name')}\r\n />\r\n \r\n \r\n facility.get('id')}\r\n getItemName={(facility) => facility.get('name')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n root: {\r\n paddingTop: 15,\r\n marginBottom: 15,\r\n },\r\n};\r\n\r\nexport default compose(withStyles(styles))(LiveProjectsFilter);\r\n","import { List } from 'immutable';\r\nimport { useState, useCallback } from 'react';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport mappers from 'mappers';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport operationService from 'services/operation.service';\r\nimport LiveProjectsFilter from 'features/data-exchange/live-projects/components/LiveProjectsFilter';\r\n\r\nconst LiveProjectsFilterContainer = ({ filter, ...rest }) => {\r\n const [facilities, setFacilities] = useState(EMPTY_LIST);\r\n const [organizations, setOrganizations] = useState(EMPTY_LIST);\r\n\r\n const getOperationsFilter = useCallback(\r\n () =>\r\n operationService\r\n .getOperationsFilterLiveProject(filter)\r\n .then((filters) => {\r\n const { facilities, organizations } = filters;\r\n\r\n setFacilities(List(facilities.map(mappers.Facility.from)));\r\n setOrganizations(List(organizations.map(mappers.Organization.from)));\r\n }),\r\n [filter],\r\n );\r\n\r\n useRequest(getOperationsFilter);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default LiveProjectsFilterContainer;\r\n","import { BasePage } from 'altus-ui-components';\r\nimport useOperations from 'features/data-exchange/hooks/useOperations';\r\nimport LiveProjectsTable from 'features/data-exchange/live-projects/components/LiveProjectsTable';\r\nimport LiveProjectsFilterContainer from 'features/data-exchange/live-projects/components/LiveProjectsFilterContainer';\r\nimport usePagedSearch from 'app/hooks/usePagedSearch';\r\nimport { connect } from 'react-redux';\r\nimport { getOperationsPageParamsFromState } from 'features/operations/operations.selectors';\r\n\r\nconst LiveProjectsContainer = ({\r\n breadcrumb,\r\n pageParams,\r\n initialPagedSearchFilters,\r\n initialTableState,\r\n initialFilterValues,\r\n filter,\r\n}) => {\r\n const { dataState, operations, searchOperations, updateProjectStatus } =\r\n useOperations(filter);\r\n\r\n const { onPageChange, onFiltersChange } = usePagedSearch(\r\n searchOperations,\r\n initialPagedSearchFilters,\r\n true,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n pageParams: getOperationsPageParamsFromState(state),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n // dispatchOnLoad: searchOperations,\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(LiveProjectsContainer);\r\n","export const states = {\r\n INITIAL: 'INITIAL',\r\n API_IN_PROGRESS: 'API_IN_PROGRESS',\r\n FINAL: 'FINAL',\r\n};\r\nexport const actionTypes = {\r\n API_STARTED: 'API_IN_PROGRESS',\r\n API_FINISHED: 'API_FINISHED',\r\n};\r\nexport const reducer = (state, action) => {\r\n switch (action.type) {\r\n case actionTypes.API_STARTED:\r\n return states.API_IN_PROGRESS;\r\n case actionTypes.API_FINISHED:\r\n return states.FINAL;\r\n default:\r\n throw new Error('Unexpected action in archived paginations...');\r\n }\r\n};\r\n","import { PROJECT_STATUS as ProjectStatus } from 'app/app.constants';\r\n\r\nexport const Filters = {\r\n FACILITY_ID: 'facilityId',\r\n TEXT_SEARCH: 'textSearch',\r\n ORGANIZATION_ID: 'organizationId',\r\n PROJECT_STATUS: 'projectStatus',\r\n};\r\nexport const pageSize = 5;\r\nexport const initialPage = 1;\r\n\r\nexport const filterReport = {\r\n projectStatuses: [ProjectStatus.REPORT],\r\n};\r\nexport const filterPlanAndExecute = {\r\n projectStatuses: [ProjectStatus.PLAN, ProjectStatus.EXECUTE],\r\n};\r\n","import { PagedQueryParams } from 'app/app.constants';\r\nimport { useEffect, useMemo, useReducer } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { OPERATIONS_ACTIONS } from 'features/operations/operations.constants';\r\nimport LiveProjectsContainer from 'features/data-exchange/live-projects/LiveProjectsPaginated/components/LiveProjectsContainer';\r\nimport { searchOperations } from 'features/operations/operations.actions';\r\nimport { getOperationsPageParamsFromState } from 'features/operations/operations.selectors';\r\nimport {\r\n actionTypes,\r\n reducer,\r\n states,\r\n} from 'features/data-exchange/live-projects/LiveProjectsPaginated/helpers/utils.reducer';\r\nimport {\r\n filterPlanAndExecute,\r\n filterReport,\r\n Filters,\r\n initialPage,\r\n pageSize,\r\n} from 'features/data-exchange/live-projects/LiveProjectsPaginated/helpers/constants';\r\n\r\nconst LiveProjectsPaginatedContainerHoc = (filter) => {\r\n const LiveProjectsPaginated = ({ pageParams, dispatchOnLoad }) => {\r\n const [localState, localDispatch] = useReducer(reducer, states.INITIAL);\r\n\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(\r\n state,\r\n OPERATIONS_ACTIONS.SEARCH_OPERATIONS,\r\n ),\r\n );\r\n\r\n const paginationState = useMemo(\r\n () => ({\r\n pageSize,\r\n pageIndex: (pageParams.get('currentPage') ?? initialPage) - 1,\r\n }),\r\n [pageParams],\r\n );\r\n\r\n const initialFilterValues = useMemo(\r\n () => ({\r\n ...filter,\r\n [Filters.FACILITY_ID]: '',\r\n [Filters.TEXT_SEARCH]: '',\r\n }),\r\n [],\r\n );\r\n\r\n const initialPagedSearchFilters = useMemo(\r\n () => ({\r\n [PagedQueryParams.PAGE]: paginationState.pageIndex + 1,\r\n [PagedQueryParams.PAGE_SIZE]: pageSize,\r\n ...initialFilterValues,\r\n }),\r\n [paginationState, initialFilterValues],\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(initialPagedSearchFilters);\r\n localDispatch({ type: actionTypes.API_STARTED });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (localState === states.API_IN_PROGRESS && dataState.received) {\r\n localDispatch({ type: actionTypes.API_FINISHED });\r\n }\r\n }, [dataState, localState, localDispatch]);\r\n\r\n if (localState !== states.FINAL) return null;\r\n return (\r\n \r\n );\r\n };\r\n\r\n return LiveProjectsPaginated;\r\n};\r\n\r\nexport const mapStateToPropsWrap = (state) => ({\r\n pageParams: getOperationsPageParamsFromState(state),\r\n});\r\n\r\nexport const mapDispatchToPropsWrap = {\r\n dispatchOnLoad: searchOperations,\r\n};\r\n\r\nconst mapProps = (comp) =>\r\n connect(mapStateToPropsWrap, mapDispatchToPropsWrap)(comp);\r\n\r\nexport const ArchivedLiveProjectsPaginatedContainer = mapProps(\r\n LiveProjectsPaginatedContainerHoc(filterReport),\r\n);\r\nexport const AvailableLiveProjectsPaginatedContainer = mapProps(\r\n LiveProjectsPaginatedContainerHoc(filterPlanAndExecute),\r\n);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getFacilityOperatorsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'facilities', 'facilities', 'operators']),\r\n (operators) => operators,\r\n);\r\n\r\nexport const getFacilitiesPageParamsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'facilities', 'facilities', 'pageParams']),\r\n (facilities) => facilities,\r\n);\r\n\r\nexport const getFacilitiesPageResultsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'facilities', 'facilities', 'pageResults']),\r\n (facilities) => facilities,\r\n);\r\n\r\nexport const getFacilityByIdFromState = createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'facilities', 'facilities', 'facilityById']),\r\n (facility) => facility,\r\n);\r\n\r\nexport const getFacilityByDeckFromState = createSelector(\r\n (state) => state.getIn(['entity', 'facilities', 'facilities', 'decks']),\r\n (facility) => facility,\r\n);\r\n","import Agent from 'infrastructure/agent';\r\n\r\nconst searchFacilities = (filter) => Agent.get('/facilities/search', filter);\r\n\r\nconst getOperators = (filter) => Agent.get('/facilities/operators', filter);\r\n\r\nconst getFacilityById = (facilityId) => Agent.get(`/facilities/${facilityId}`);\r\n\r\nconst getFacilityImage = (facilityId) =>\r\n Agent.get(`/facilities/image/${facilityId}`);\r\n\r\nconst getFacilityLocation = (facilityId) =>\r\n Agent.get(`/facilities/position/${facilityId}`);\r\n\r\nconst getFacilityDecks = (facilityId) =>\r\n Agent.get(`/facilities/decks/${facilityId}`);\r\n\r\nconst facilitiesService = {\r\n getOperators,\r\n getFacilityById,\r\n searchFacilities,\r\n getFacilityImage,\r\n getFacilityLocation,\r\n getFacilityDecks,\r\n};\r\n\r\nexport default facilitiesService;\r\n","import facilityService from 'services/facility.service';\r\nimport { FACILITIES_ACTIONS } from 'features/facilities/facilities.constants';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\n\r\nexport const onLoad = (organizationId) => (dispatch) => {\r\n const payload = dispatch(getOperators(organizationId));\r\n\r\n dispatch({\r\n type: FACILITIES_ACTIONS.FACILITIES_PAGE_LOADED,\r\n payload: payload,\r\n });\r\n};\r\n\r\nexport const getOperators = (organizationId) => (dispatch) => {\r\n const filter = {\r\n organizationId,\r\n };\r\n\r\n dispatch({\r\n type: FACILITIES_ACTIONS.GET_OPERATORS,\r\n payload: () => facilityService.getOperators(filter),\r\n });\r\n};\r\n\r\nexport const updateFacilitiesFilter = (filter) => (dispatch) => {\r\n const payload = facilityService\r\n .searchFacilities(filter)\r\n .then((wellboresPage) => dispatch(receiveFacilitiesPage(wellboresPage)));\r\n\r\n dispatch({\r\n filter,\r\n payload,\r\n type: FACILITIES_ACTIONS.UPDATE_FACILITIES_FILTER,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveFacilitiesPage = (facilities) => ({\r\n payload: facilities,\r\n type: FACILITIES_ACTIONS.RECEIVE_FACILITIES_PAGE,\r\n});\r\n\r\nexport const getFacilityById = (facilityId) => (dispatch) => {\r\n dispatch({\r\n type: FACILITIES_ACTIONS.GET_FACILITY_BY_ID,\r\n payload: () => facilityService.getFacilityById(facilityId),\r\n });\r\n};\r\n\r\nexport const getFacilityImage = (facilityId) => (dispatch) => {\r\n const payload = facilityService.getFacilityImage(facilityId).catch(() => {\r\n dispatch({\r\n hideable: true,\r\n notification: {\r\n message: 'Image not available.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n },\r\n type: FACILITIES_ACTIONS.GET_FACILITY_IMAGE,\r\n payload,\r\n });\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getFacilityLocation = (facilityId) => (dispatch) => {\r\n const payload = facilityService.getFacilityLocation(facilityId);\r\n\r\n dispatch({\r\n type: FACILITIES_ACTIONS.GET_FACILITY_LOCATION,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getFacilityDecks = (facilityId) => (dispatch) => {\r\n const payload = facilityService.getFacilityDecks(facilityId);\r\n\r\n dispatch({\r\n type: FACILITIES_ACTIONS.GET_FACILITY_DECKS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n","import { FacilityStatus } from 'features/facilities/facilities.constants';\r\n\r\nexport const facilityStatusToString = (status) =>\r\n ({\r\n [FacilityStatus.Unknown]: 'Unknown',\r\n [FacilityStatus.Abandoned]: 'Abandoned',\r\n [FacilityStatus.Decommissioned]: 'Decommissioned',\r\n [FacilityStatus.Fabrication]: 'Fabrication',\r\n [FacilityStatus.Future]: 'Future',\r\n [FacilityStatus.InService]: 'InService',\r\n [FacilityStatus.Installation]: 'Installation',\r\n [FacilityStatus.LaidUp]: 'LaidUp',\r\n [FacilityStatus.Removed]: 'Removed',\r\n }[status]);\r\n","import { fromJS } from 'immutable';\r\nimport { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { facilityTypeToString } from 'mappers';\r\nimport { FacilityType } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { FacilityStatus } from 'features/facilities/facilities.constants';\r\nimport { facilityStatusToString } from 'features/facilities/facility.mappers';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n FACILITY_TYPE: 'type',\r\n OPERATOR: 'operator',\r\n ORGANIZATION_ID: 'organizationId',\r\n FACILITY_STATUS: 'status',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst facilityTypes = fromJS(Object.values(FacilityType));\r\n\r\nconst statuses = fromJS(Object.values(FacilityStatus));\r\n\r\nconst FacilitiesFilter = ({ classes, onSubmit, operators, initialValues }) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(FacilitiesFilter);\r\n","import { Link } from 'react-router-dom';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport { Table, TableRow } from 'altus-ui-components';\r\n\r\nimport { toFacility } from 'utils/route.util';\r\nimport { facilityTypeToString } from 'mappers';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport { facilityStatusToString } from 'features/facilities/facility.mappers';\r\n\r\nconst FacilitiesTable = ({ facilities }) => {\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (facility) => facility.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Type',\r\n accessor: (facility) => facilityTypeToString(facility.get('type')),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Operator',\r\n accessor: (facility) => facility.get('operator'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Status',\r\n accessor: (facility) => facilityStatusToString(facility.get('status')),\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) =>\r\n !userPermissions.includes(SystemPermission.MANAGE_WELLS) ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n ),\r\n [userPermissions],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default FacilitiesTable;\r\n","import { compose } from 'redux';\r\nimport isEqual from 'lodash/isEqual';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport GoogleMap from 'app/components/GoogleMap';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useSelector, connect, useDispatch } from 'react-redux';\r\nimport { useEffect, useMemo, useRef, useCallback, useState } from 'react';\r\n\r\nimport {\r\n getFacilityOperatorsFromState,\r\n getFacilitiesPageParamsFromState,\r\n getFacilitiesPageResultsFromState,\r\n} from 'features/facilities/facilities.selectors';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentClientOrganizationIdFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n onLoad,\r\n updateFacilitiesFilter,\r\n} from 'features/facilities/facilities.actions';\r\n\r\nimport {\r\n EMPTY_STRING,\r\n PagedQueryParams,\r\n EUROPE_MAP_CENTER_COORDS,\r\n} from 'app/app.constants';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport { Filters } from 'features/facilities/components/FacilitiesFilter';\r\nimport FacilitiesTable from 'features/facilities/components/FacilitiesTable';\r\nimport { FACILITIES_ACTIONS } from 'features/facilities/facilities.constants';\r\nimport FacilitiesFilter from 'features/facilities/components/FacilitiesFilter';\r\n\r\nconst defaultFormValues = {\r\n [Filters.FACILITY_TYPE]: EMPTY_STRING,\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.OPERATOR]: EMPTY_STRING,\r\n [Filters.ORGANIZATION_ID]: EMPTY_STRING,\r\n [Filters.FACILITY_STATUS]: EMPTY_STRING,\r\n};\r\n\r\nconst FacilitiesContainer = ({\r\n classes,\r\n dataState,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n const dispatch = useDispatch();\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(currentClientOrganizationId);\r\n }, [dispatchOnLoad, currentClientOrganizationId]);\r\n\r\n const operators = useSelector(getFacilityOperatorsFromState);\r\n const pageParams = useSelector(getFacilitiesPageParamsFromState);\r\n const facilities = useSelector(getFacilitiesPageResultsFromState);\r\n const rowCount = pageParams.get('rowCount');\r\n\r\n const initialFilterValues = useMemo(\r\n () => ({\r\n ...defaultFormValues,\r\n organizationId: currentClientOrganizationId,\r\n }),\r\n [currentClientOrganizationId],\r\n );\r\n\r\n const onFiltersChange = (values) => {\r\n setNewFilters(values);\r\n setTableSize(50);\r\n setInitialState({ pageSize: 50 });\r\n dispatch(\r\n updateFacilitiesFilter({\r\n [PagedQueryParams.PAGE]: 1,\r\n [PagedQueryParams.PAGE_SIZE]: 50,\r\n ...values,\r\n }),\r\n );\r\n };\r\n\r\n const [tableSize, setTableSize] = useState(50);\r\n const [initialState, setInitialState] = useState({ pageSize: 50 });\r\n const [newFilters, setNewFilters] = useState(initialFilterValues);\r\n const componentRef = useRef(null);\r\n\r\n const handleScroll = useCallback(() => {\r\n const componentElement = componentRef.current;\r\n\r\n if (tableSize >= rowCount) return;\r\n const threshold = 1;\r\n\r\n if (\r\n componentElement.scrollTop + componentElement.clientHeight + threshold >=\r\n componentElement.scrollHeight\r\n ) {\r\n const filter = {\r\n [PagedQueryParams.PAGE]: 1,\r\n [PagedQueryParams.PAGE_SIZE]:\r\n tableSize + 50 > rowCount\r\n ? tableSize + (rowCount - tableSize)\r\n : tableSize + 50,\r\n ...(isEqual(initialFilterValues, newFilters)\r\n ? initialFilterValues\r\n : newFilters),\r\n };\r\n dispatch(updateFacilitiesFilter(filter));\r\n const newTableSize = tableSize + 50;\r\n setTableSize(newTableSize);\r\n setInitialState({ pageSize: newTableSize });\r\n }\r\n }, [\r\n tableSize,\r\n rowCount,\r\n initialFilterValues,\r\n newFilters,\r\n dispatch,\r\n ]);\r\n\r\n useEffect(() => {\r\n const filter = {\r\n [PagedQueryParams.PAGE]: 1,\r\n [PagedQueryParams.PAGE_SIZE]: 50,\r\n ...initialFilterValues,\r\n };\r\n dispatch(updateFacilitiesFilter(filter));\r\n }, [dispatch, initialFilterValues]);\r\n\r\n useEffect(() => {\r\n const componentElement = componentRef.current;\r\n\r\n componentElement.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n componentElement.removeEventListener('scroll', handleScroll);\r\n };\r\n }, [handleScroll]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n content: {\r\n top: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n FACILITIES_ACTIONS.GET_OPERATORS,\r\n FACILITIES_ACTIONS.FACILITIES_PAGE_LOADED,\r\n FACILITIES_ACTIONS.UPDATE_FACILITIES_FILTER,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n dispatchUpdateFilter: updateFacilitiesFilter,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(FacilitiesContainer);\r\n","import projectService from 'services/project.service';\r\nimport { FACILITIES_PROJECTS_ACTIONS as ACTIONS } from 'features/facilities/projects/facilitiesProjects.constants';\r\n\r\nexport const onLoad = (facilityId) => (dispatch) => {\r\n dispatch({\r\n type: ACTIONS.FACILITIES_PROJECTS_PAGE_LOADED,\r\n payload: () => Promise.all([projectService.searchProjects({ facilityId })]),\r\n });\r\n};\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getFacilityProjectsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'facilities', 'facilityProjects', 'data']),\r\n (projects) => projects,\r\n);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { useEffect, memo } from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\n\r\nimport { onLoad } from 'features/facilities/projects/facilitiesProjects.actions';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport ProjectsByStatus from 'features/projects/components/ProjectsByStatus';\r\nimport { FACILITIES_PROJECTS_ACTIONS } from 'features/facilities/projects/facilitiesProjects.constants';\r\nimport { getFacilityProjectsFromState } from 'features/facilities/projects/facilitiesProjects.selectors';\r\n\r\nconst FacilitiesProjects = ({\r\n classes,\r\n projects,\r\n dataState,\r\n breadcrumb,\r\n facilityId,\r\n dispatchOnLoad,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(facilityId);\r\n }, [facilityId, dispatchOnLoad]);\r\n\r\n return (\r\n \r\n \r\n {!projects.size ? (\r\n \r\n No projects...\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n projects: getFacilityProjectsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n FACILITIES_PROJECTS_ACTIONS.FACILITIES_PROJECTS_PAGE_LOADED,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n },\r\n ),\r\n memo,\r\n withStyles(styles),\r\n)(FacilitiesProjects);\r\n","import { Switch } from 'react-router-dom';\r\n\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport NavigationAppBar from 'app/components/NavigationAppBar';\r\n\r\nconst FacilityContainer = ({ routes }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default FacilityContainer;\r\n","import { useEffect, useState } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { CircularProgress, Typography, Grid } from '@material-ui/core';\r\nimport { useDispatch } from 'react-redux';\r\nimport { getFacilityImage } from 'features/facilities/facilities.actions';\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\n\r\nconst FacilityLazyLoadImage = ({ facilityId, classes, ...props }) => {\r\n const [imgSrc, setImgSrc] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(false);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getFacilityImage(facilityId))\r\n .then((payload) => {\r\n if (payload.urlImage === EMPTY_STRING) {\r\n setLoading(false);\r\n setError(true);\r\n } else {\r\n setImgSrc(payload.urlImage);\r\n setLoading(false);\r\n }\r\n })\r\n .catch(() => setError(true));\r\n }, [dispatch, facilityId]);\r\n\r\n return (\r\n \r\n {error ? (\r\n No preview available\r\n ) : loading ? (\r\n \r\n ) : (\r\n {\r\n setError(true);\r\n }}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n img: {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain',\r\n },\r\n container: {\r\n width: '100%',\r\n height: '100%',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(FacilityLazyLoadImage);\r\n","import LocationOn from '@material-ui/icons/LocationOn';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst FacilityMapLocation = ({ classes }) => {\r\n return ;\r\n};\r\n\r\nconst styles = () => ({\r\n root: {\r\n fontSize: 40,\r\n color: 'red',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(FacilityMapLocation);\r\n","import { compose } from 'redux';\r\nimport withTheme from '@material-ui/styles/withTheme';\r\nimport GoogleMapReact from 'google-map-react';\r\n\r\nimport { NORWAY_MAP_CENTER_COORDS } from 'app/app.constants';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useState, useEffect } from 'react';\r\nimport { getFacilityLocation } from 'features/facilities/facilities.actions';\r\nimport FacilityMapLocation from './FacilityMapLocation';\r\n\r\nexport const GoogleMapFacilityOverview = ({\r\n theme,\r\n children,\r\n facilityId,\r\n ...rest\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [location, setLocation] = useState(null);\r\n const [lat, setLat] = useState(null);\r\n const [lng, setLng] = useState(null);\r\n\r\n useEffect(() => {\r\n dispatch(getFacilityLocation(facilityId)).then((payload) => {\r\n setLocation([payload.locationNorthSouth, payload.locationEastWest]);\r\n setLat(payload.locationNorthSouth);\r\n setLng(payload.locationEastWest);\r\n });\r\n }, [dispatch, facilityId]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(withTheme)(GoogleMapFacilityOverview);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { getName } from 'country-list';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\n\r\nimport { facilityTypeToString } from 'mappers';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { getFacilityById } from 'features/facilities/facilities.actions';\r\nimport { FACILITIES_ACTIONS } from 'features/facilities/facilities.constants';\r\nimport { getFacilityByIdFromState } from 'features/facilities/facilities.selectors';\r\nimport LazyLoadImage from 'features/facilities/overview/components/FacilityLazyLoadImage';\r\nimport { GoogleMapFacilityOverview } from 'features/facilities/overview/components/GoogleMap';\r\n\r\nconst FacilityOverview = ({\r\n classes,\r\n dataState,\r\n breadcrumb,\r\n facilityId,\r\n dispatchOnLoad,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(facilityId);\r\n }, [dispatchOnLoad, facilityId]);\r\n\r\n const facility = useSelector(getFacilityByIdFromState);\r\n\r\n return (\r\n \r\n {!facility.isEmpty() && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Image Source\r\n \r\n People on board currently\r\n 25\r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Last Updated: Fixed/DateTime */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Name:\r\n \r\n \r\n {facility.get('name')}\r\n \r\n \r\n \r\n \r\n Type:\r\n \r\n \r\n \r\n {facilityTypeToString(facility.get('type'))}\r\n \r\n \r\n \r\n \r\n \r\n Operator:\r\n \r\n \r\n \r\n {facility.get('operator')}\r\n \r\n \r\n \r\n \r\n \r\n Country:\r\n \r\n \r\n \r\n {getName(facility.get('countryCodeIso3166'))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n flexDirection: 'row',\r\n marginTop: theme.spacing(2.25),\r\n },\r\n bargeContainer: {\r\n flexDirection: 'row',\r\n padding: theme.spacing(2.25),\r\n },\r\n positionContainer: {\r\n padding: theme.spacing(2.25),\r\n },\r\n bargeImageContainer: {\r\n width: '100%',\r\n height: '50%',\r\n marginTop: '10%',\r\n },\r\n bargeInfo: {\r\n height: '20%',\r\n padding: theme.spacing(2.25),\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n },\r\n headerText: {\r\n height: '10%',\r\n },\r\n bargeInfoRow: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n },\r\n googleMapsContainer: {\r\n width: '100%',\r\n height: '50%',\r\n marginTop: '10%',\r\n },\r\n positionInfo: {\r\n height: '20%',\r\n },\r\n infoContainer: {\r\n padding: theme.spacing(2.25),\r\n flexDirection: 'row',\r\n justifyContent: 'flex-start',\r\n alignItems: 'center',\r\n height: '50%',\r\n marginTop: '5%',\r\n },\r\n textLine: {\r\n flexDirection: 'row',\r\n height: 'fit-content',\r\n },\r\n infoTextContainer: {\r\n width: '100%',\r\n height: 'fit-content',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n FACILITIES_ACTIONS.GET_FACILITY_BY_ID,\r\n FACILITIES_ACTIONS.GET_FACILITY_IMAGE,\r\n FACILITIES_ACTIONS.GET_FACILITY_LOCATION,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: getFacilityById,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(FacilityOverview);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Collection } from 'immutable';\r\nimport { useMemo } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport TableHeaderTitleCell from 'app/components/TableHeaderTitleCell';\r\nimport { Grid } from 'app/components/withNavigation';\r\n\r\nconst FacilityDetailsTable = ({\r\n classes,\r\n noItemsMessage,\r\n decks = EMPTY_MAP,\r\n}) => {\r\n const lengthUnit = getQuantityUnitFromItems(\r\n decks,\r\n (result) => result.maximumRigupHeight,\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'deckName',\r\n xs: 6,\r\n Header: () => (\r\n \r\n ),\r\n accessor: (row) => {\r\n return {row?.deckName};\r\n },\r\n },\r\n {\r\n id: 'maximumRigupHeight',\r\n xs: 4,\r\n Header: () => (\r\n \r\n ),\r\n accessor: (row) => row?.maximumRigupHeight?.value,\r\n },\r\n ],\r\n [classes.rowCell, lengthUnit],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nFacilityDetailsTable.propTypes = {\r\n documents: PropTypes.instanceOf(Collection),\r\n};\r\n\r\nconst styles = () => ({\r\n rowCell: {\r\n paddingLeft: '10px',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(FacilityDetailsTable);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { getFacilityDecks } from 'features/facilities/facilities.actions';\r\nimport { FACILITIES_ACTIONS } from 'features/facilities/facilities.constants';\r\nimport { getFacilityByDeckFromState } from 'features/facilities/facilities.selectors';\r\nimport FacilityDetailsTable from 'features/facilities/details/component/FacilityDetailsTable';\r\n\r\nconst FacilityDetailsContainer = ({\r\n classes,\r\n breadcrumb,\r\n facilityId,\r\n dispatchOnLoad,\r\n dataState,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(facilityId);\r\n }, [dispatchOnLoad, facilityId]);\r\n\r\n const facilityDeck = useSelector(getFacilityByDeckFromState);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n flexDirection: 'row',\r\n marginTop: theme.spacing(2.25),\r\n },\r\n facilityContainer: {\r\n flexDirection: 'row',\r\n padding: theme.spacing(2.25),\r\n },\r\n positionContainer: {\r\n padding: theme.spacing(2.25),\r\n },\r\n facilityItemContainer: {\r\n width: '100%',\r\n height: '50%',\r\n marginTop: '10%',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n FACILITIES_ACTIONS.GET_FACILITY_DECKS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: getFacilityDecks,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(FacilityDetailsContainer);\r\n","import { Link } from 'react-router-dom';\r\nimport { useMemo } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Tooltip, withStyles } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\n\r\nimport { toCable } from 'utils/route.util';\r\nimport { Grid } from 'app/components/withTooltip';\r\nimport { Table, TableRow } from 'altus-ui-components';\r\n\r\nimport { cableTypeToString } from 'features/projects/tool/tool.mappers';\r\nimport { compose } from 'redux';\r\n\r\nconst CablesTable = ({ cables, classes, ...rest }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Header: '',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n if (!tool.get('dataVerified')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'M3 Item no.',\r\n accessor: (cable) => cable.get('referenceNumber'),\r\n Cell: ({ row }) => {\r\n const cable = row.original;\r\n\r\n return (\r\n Open tool}>\r\n {cable.get('referenceNumber')}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Name',\r\n accessor: (cable) => cable.get('name'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Type',\r\n accessor: (cable) => cableTypeToString(cable.get('type')),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Manufacturer',\r\n accessor: (cable) => cable.get('manufacturer'),\r\n },\r\n ],\r\n [classes.warningIcon],\r\n );\r\n\r\n const renderTableRowComponent = ({ item, ...rest }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(CablesTable);\r\n","import { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n SERIAL_SEARCH: 'serialSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst CablesFilter = ({ classes, onSubmit, initialValues }) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.SERIAL_SEARCH,\r\n initialValues[Filters.SERIAL_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(CablesFilter);\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\n\r\nimport {\r\n getCables,\r\n onUnload,\r\n searchCables,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport CablesTable from 'features/equipment/cables/components/CablesTable';\r\nimport { getCablesFromState } from 'features/equipment/equipment.selectors';\r\nimport CablesFilter, {\r\n Filters,\r\n} from 'features/equipment/cables/components/CablesFilter';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.SERIAL_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst CablesContainer = ({\r\n classes,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n const cables = useSelector(getCablesFromState);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n [Filters.SERIAL_SEARCH]: filterValues[Filters.SERIAL_SEARCH],\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n filterContainer: {\r\n height: 'fit-content',\r\n width: '20%',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnLoad: getCables,\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchCables,\r\n }),\r\n withStyles(styles),\r\n)(CablesContainer);\r\n","import classNames from 'classnames';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n InputLabel,\r\n FormControl,\r\n FormHelperText,\r\n TextareaAutosize,\r\n} from '@material-ui/core';\r\n\r\nconst getHelperText = (value, maxLength, maxLengthWarning) => {\r\n if (value.length >= maxLengthWarning && value.length < maxLength)\r\n return `${maxLength - value.length} character(s) left`;\r\n else if (value.length === maxLength)\r\n return 'Max number of characters reached';\r\n};\r\n\r\nconst TextAreaFieldV2 = ({\r\n meta,\r\n label,\r\n margin,\r\n classes,\r\n required,\r\n inputRef,\r\n maxLength,\r\n fullWidth,\r\n spellCheck,\r\n minRows,\r\n maxRows,\r\n maxLengthWarning,\r\n value,\r\n defaultValue,\r\n ...rest\r\n}) => {\r\n const helperText = getHelperText(\r\n value || defaultValue || '',\r\n maxLength,\r\n maxLengthWarning,\r\n );\r\n\r\n return (\r\n \r\n {label && {label}}\r\n \r\n {helperText && {helperText}}\r\n \r\n );\r\n};\r\n\r\nTextAreaFieldV2.defaultProps = {\r\n minRows: 5,\r\n maxRows: 10,\r\n fullWidth: true,\r\n margin: 'normal',\r\n spellCheck: false,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n marginTop: 22,\r\n borderRadius: 3,\r\n fontSize: '1rem',\r\n resize: 'vertical',\r\n background: 'transparent',\r\n fontFamily: theme.typography.fontFamily,\r\n '&:disabled': {\r\n color: theme.palette.text.disabled,\r\n },\r\n '&:not(:disabled)': {\r\n color: theme.palette.text.primary,\r\n borderColor: theme.palette.text.secondary,\r\n },\r\n '&:focus:not(:disabled)': {\r\n borderColor: theme.palette.text.secondary,\r\n },\r\n '&:active:not(:disabled)': {\r\n borderColor: theme.palette.text.secondary,\r\n },\r\n },\r\n rootNoLabel: {\r\n marginTop: 0,\r\n },\r\n formControlFullWidth: {\r\n minWidth: '100%',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TextAreaFieldV2);\r\n","import PropTypes from 'prop-types';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport TextAreaFieldV2 from 'app/components/form/TextAreaFieldV2';\r\n\r\nconst defaultFormat = (value) => value || '';\r\n\r\nconst TextAreaFieldFormik = ({\r\n field,\r\n minRows = 3,\r\n maxRows = 5,\r\n format = defaultFormat,\r\n ...rest\r\n}) => {\r\n const { value, onChange, name } = field;\r\n\r\n const formattedValue = format ? invokeIfFunction(format, value) : value;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nTextAreaFieldFormik.propTypes = {\r\n format: PropTypes.func,\r\n};\r\n\r\nexport default TextAreaFieldFormik;\r\n","import { useCallback } from 'react';\r\nimport { AutocompleteTextField } from 'app/components/form/AutocompleteTextField';\r\nimport { searchM3Items } from 'features/equipment/equipment.actions';\r\nimport { FormFields } from 'features/equipment/m3Components/M3ModalForm';\r\n\r\nexport const AutocompleteTextFieldAdapter = ({\r\n autoCompleteValue,\r\n setAutocompleteValue,\r\n placeholder,\r\n form,\r\n}) => {\r\n const getOptionLabel = useCallback((option) => option.m3ItemName, []);\r\n const valueSelectorFromAutocomplete = useCallback(\r\n (newValue) => (newValue ? newValue.m3ItemNumber : null),\r\n [],\r\n );\r\n // There are no initial values here so this is NO-OP\r\n const setInitialFieldValue = useCallback(() => {}, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import { useCallback } from 'react';\r\nimport { Chip } from '@material-ui/core';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst YesNoSwitchFormik = ({ field, form, disabled, ...rest }) => {\r\n const { value, name } = field;\r\n const { setFieldValue } = form;\r\n const theme = useTheme();\r\n\r\n const handleClick = useCallback(() => {\r\n setFieldValue(name, !value);\r\n }, [name, setFieldValue, value]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default YesNoSwitchFormik;\r\n","import * as yup from 'yup';\r\nimport { compose } from 'redux';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\r\nimport { useCallback, useRef, useState, useEffect } from 'react';\r\n\r\nimport {\r\n Grid,\r\n IconButton,\r\n InputAdornment,\r\n Typography,\r\n} from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { LoadingButton, LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP, EMPTY_STRING } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport {\r\n deleteTool3DObject,\r\n deleteToolImage,\r\n uploadTool3DObject,\r\n uploadToolImage,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n EDITABLE_TOOL_PROPERTIES,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport TextAreaFieldFormik from 'app/components/form/formik/TextAreaFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { AutocompleteTextFieldAdapter } from './components/AutocompleteTextFieldAdapter';\r\nimport {\r\n getUnitForProperty,\r\n unitPlaceholder,\r\n} from 'features/equipment/equipment.helpers';\r\nimport SwitchFormik from 'app/components/form/formik/SwitchFormik';\r\nimport YesNoSwitchFormik from 'app/components/form/formik/YesNoSwitchFormik';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\n\r\nexport const FormFields = {\r\n M3_ITEM: 'm3Item',\r\n NAME: 'name',\r\n SUPPLIER: 'supplier',\r\n SUPPLIER_PART_NUMBER: 'supplierPartNumber',\r\n GROUP: 'group',\r\n OUTER_DIAMETER: 'outerDiameter',\r\n INNER_DIAMETER: 'innerDiameter',\r\n LENGTH: 'length',\r\n WEIGHT: 'weight',\r\n TOP_CONNECTOR: 'topConnector',\r\n BOTTOM_CONNECTOR: 'bottomConnector',\r\n FISHNECK: 'fishneck',\r\n SAFE_WORKING_LOAD: 'safeWorkingLoad',\r\n YIELD: 'yield',\r\n DESCRIPTION: 'description',\r\n FILE: 'toolImageFile',\r\n TOOL_IMAGE_ID: 'toolImageId',\r\n AXIAL_FRICTION_REDUCED_TO: 'axialFrictionReducedTo',\r\n MAXIMUM_OD: 'maximumOD',\r\n MAXIMUM_STANDOFF_FORCE: 'maximumStandoffForce',\r\n MINIMUM_OD: 'minimumOD',\r\n MINIMUM_STANDOFF_FORCE: 'minimumStandoffForce',\r\n WEIGHT_ABOVE_JARRING_POINT_FACTOR: 'weightAboveJarringPointFactor',\r\n JAR_ACTIVATION_LIMIT_LOW: 'jarActivationLimitLow',\r\n JAR_ACTIVATION_LIMIT_HIGH: 'jarActivationLimitHigh',\r\n ADDITIONAL_NORMAL_FORCE: 'additionalNormalForce',\r\n IS_KNUCKLE_JOINT: 'isKnuckleJoint',\r\n IS_VERIFIED: 'isVerified',\r\n TOOL_3D_OBJECT_ID: 'tool3DObjectId',\r\n FILE_3D: 'tool3DObjectFile',\r\n};\r\n\r\nconst MAX_FILE_SIZE = 512 * 1024;\r\nconst MAX_3D_OBJECT_FILE_SIZE = 10 * 1024 * 1024;\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst M3ModalForm = ({\r\n edit,\r\n tool = EMPTY_MAP,\r\n classes,\r\n saveTool,\r\n dataState,\r\n toolGroups,\r\n toolSuppliers,\r\n toolConnectors,\r\n initialFormValues,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n}) => {\r\n //#region placeholders for inputs\r\n const initialPlaceholders = {\r\n [FormFields.AXIAL_FRICTION_REDUCED_TO]: unitPlaceholder(\r\n tool,\r\n 'axialFrictionReducedTo',\r\n '0 - 1',\r\n ),\r\n [FormFields.MAXIMUM_OD]: unitPlaceholder(tool, 'maximumOD'),\r\n [FormFields.NAME]:\r\n tool && !tool.isEmpty() ? tool.get('name') : 'Enter name',\r\n [FormFields.SUPPLIER_PART_NUMBER]:\r\n tool && !tool.isEmpty()\r\n ? tool.get('supplierPartNumber')\r\n : 'Enter part number',\r\n [FormFields.OUTER_DIAMETER]: unitPlaceholder(tool, 'outerDiameter'),\r\n [FormFields.INNER_DIAMETER]: unitPlaceholder(tool, 'innerDiameter'),\r\n [FormFields.LENGTH]:\r\n tool && !tool.isEmpty()\r\n ? `${tool.getIn(['length', 'value'])} ${tool.getIn(['length', 'unit'])}`\r\n : '',\r\n [FormFields.WEIGHT]:\r\n tool && !tool.isEmpty()\r\n ? `${tool.getIn(['weight', 'value'])} ${tool.getIn(['weight', 'unit'])}`\r\n : '',\r\n [FormFields.FISHNECK]:\r\n tool && !tool.isEmpty()\r\n ? `${tool.getIn(['fishNeck', 'value'])} ${tool.getIn([\r\n 'fishNeck',\r\n 'unit',\r\n ])}`\r\n : '',\r\n [FormFields.SAFE_WORKING_LOAD]: unitPlaceholder(tool, 'safeWorkingLoad'),\r\n [FormFields.YIELD]: unitPlaceholder(tool, 'yieldValue'),\r\n [FormFields.DESCRIPTION]:\r\n tool && !tool.isEmpty() ? tool.get('description') : '',\r\n [FormFields.MINIMUM_OD]: unitPlaceholder(tool, 'minimumOD'),\r\n [FormFields.MAXIMUM_STANDOFF_FORCE]: unitPlaceholder(\r\n tool,\r\n 'maximumStandoffForce',\r\n ),\r\n [FormFields.MINIMUM_STANDOFF_FORCE]: unitPlaceholder(\r\n tool,\r\n 'minimumStandoffForce',\r\n ),\r\n [FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR]: unitPlaceholder(\r\n tool,\r\n 'weightAboveJarringPointFactor',\r\n '0 - 1',\r\n ),\r\n [FormFields.JAR_ACTIVATION_LIMIT_LOW]: unitPlaceholder(\r\n tool,\r\n 'jarActivationLimitLow',\r\n ),\r\n [FormFields.JAR_ACTIVATION_LIMIT_HIGH]: unitPlaceholder(\r\n tool,\r\n 'jarActivationLimitHigh',\r\n ),\r\n [FormFields.ADDITIONAL_NORMAL_FORCE]: unitPlaceholder(\r\n tool,\r\n 'additionalNormalForce',\r\n ),\r\n };\r\n //#endregion\r\n\r\n const initialEditFormValues = {\r\n [FormFields.M3_ITEM]: tool.get('m3ItemNumber'),\r\n [FormFields.NAME]: tool.get('name'),\r\n [FormFields.SUPPLIER]: tool.get('supplier'),\r\n [FormFields.SUPPLIER_PART_NUMBER]:\r\n tool.get('supplierPartNumber') ?? EMPTY_STRING,\r\n [FormFields.GROUP]: tool.get('toolGroupId'),\r\n [FormFields.OUTER_DIAMETER]:\r\n tool.getIn(['outerDiameter', 'value']) ?? EMPTY_STRING,\r\n [FormFields.INNER_DIAMETER]:\r\n tool.getIn(['innerDiameter', 'value']) ?? EMPTY_STRING,\r\n [FormFields.LENGTH]: tool.getIn(['length', 'value']) ?? EMPTY_STRING,\r\n [FormFields.WEIGHT]: tool.getIn(['weight', 'value']) ?? EMPTY_STRING,\r\n [FormFields.TOP_CONNECTOR]: tool.get('topConnector'),\r\n [FormFields.BOTTOM_CONNECTOR]: tool.get('bottomConnector'),\r\n [FormFields.FISHNECK]: tool.getIn(['fishNeck', 'value']) ?? EMPTY_STRING,\r\n [FormFields.SAFE_WORKING_LOAD]:\r\n tool.getIn(['safeWorkingLoad', 'value']) ?? EMPTY_STRING,\r\n [FormFields.YIELD]: tool.getIn(['yieldValue', 'value']) ?? EMPTY_STRING,\r\n [FormFields.DESCRIPTION]: tool.get('description') ?? EMPTY_STRING,\r\n [FormFields.FILE]: null,\r\n [FormFields.TOOL_IMAGE_ID]: tool.get('toolImageId') ?? EMPTY_STRING,\r\n [FormFields.MAXIMUM_OD]: tool.getIn(['maximumOD', 'value']) ?? EMPTY_STRING,\r\n [FormFields.MAXIMUM_STANDOFF_FORCE]:\r\n tool.getIn(['maximumStandoffForce', 'value']) ?? EMPTY_STRING,\r\n [FormFields.MINIMUM_OD]: tool.getIn(['minimumOD', 'value']) ?? EMPTY_STRING,\r\n [FormFields.MINIMUM_STANDOFF_FORCE]:\r\n tool.getIn(['minimumStandoffForce', 'value']) ?? EMPTY_STRING,\r\n [FormFields.JAR_ACTIVATION_LIMIT_LOW]:\r\n tool.getIn(['jarActivationLimitLow', 'value']) ?? EMPTY_STRING,\r\n [FormFields.JAR_ACTIVATION_LIMIT_HIGH]:\r\n tool.getIn(['jarActivationLimitHigh', 'value']) ?? EMPTY_STRING,\r\n [FormFields.ADDITIONAL_NORMAL_FORCE]:\r\n tool.getIn(['additionalNormalForce', 'value']) ?? EMPTY_STRING,\r\n [FormFields.IS_KNUCKLE_JOINT]: tool.get('isKnuckleJoint'),\r\n [FormFields.IS_VERIFIED]: tool.get('isVerified'),\r\n [FormFields.AXIAL_FRICTION_REDUCED_TO]:\r\n tool.getIn(['axialFrictionReducedTo', 'value']) ?? EMPTY_STRING,\r\n [FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR]:\r\n tool.getIn(['weightAboveJarringPointFactor', 'value']) ?? EMPTY_STRING,\r\n [FormFields.TOOL_3D_OBJECT_ID]: tool.get('tool3DObjectId') ?? EMPTY_STRING,\r\n };\r\n\r\n const [placeholders, setPlaceholders] = useState(initialPlaceholders);\r\n\r\n const resetPlaceholder = (fieldName) => {\r\n setPlaceholders((prevPlaceholders) => ({\r\n ...prevPlaceholders,\r\n [fieldName]: null,\r\n }));\r\n };\r\n\r\n const schema = yup.object().shape({\r\n additionalNormalForce: yup.number().typeError('Must be a number'),\r\n jarActivationLimitHigh: yup.number().typeError('Must be a number'),\r\n jarActivationLimitLow: yup.number().typeError('Must be a number'),\r\n weightAboveJarringPointFactor: yup\r\n .number()\r\n .nullable(true)\r\n .min(0, 'Value must be greater than or equal to 0')\r\n .max(1, 'Value must be less than or equal to 1')\r\n .typeError('Must be a number'),\r\n minimumStandoffForce: yup.number().typeError('Must be a number'),\r\n maximumStandoffForce: yup.number().typeError('Must be a number'),\r\n minimumOD: yup.number().typeError('Must be a number'),\r\n maximumOD: yup.number().typeError('Must be a number'),\r\n axialFrictionReducedTo: yup\r\n .number()\r\n .nullable(true)\r\n .min(0, 'Value must be greater than or equal to 0')\r\n .max(1, 'Value must be less than or equal to 1'),\r\n name: yup.string().required('Required'),\r\n supplier: yup.string().required('Required').typeError('Required'),\r\n m3Item: yup.string().required('Required').typeError('Required'),\r\n supplierPartNumber: yup.string(),\r\n fishneck: yup.string(),\r\n group: yup.number().required('Required').typeError('Required'),\r\n length: yup.number().required('Required').max(60),\r\n outerDiameter: yup.number().required('Required').typeError('Required'),\r\n innerDiameter: yup.number().required('Required').typeError('Required'),\r\n safeWorkingLoad: yup.string(),\r\n weight: yup.string().required('Required'),\r\n yield: yup.string(),\r\n toolImageFile: yup\r\n .mixed()\r\n .nullable()\r\n .notRequired()\r\n .test('FILE_SIZE', 'Uploaded file is too big', (value) => {\r\n if (value && fileRef.current) {\r\n if (fileRef.current.files[0].size <= MAX_FILE_SIZE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n })\r\n .test('FILE_FORMAT', 'Only .png is allowed', (value) => {\r\n if (value && fileRef.current) {\r\n if (fileRef.current.files[0].type === 'image/png') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n }),\r\n tool3DObjectFile: yup\r\n .mixed()\r\n .nullable()\r\n .notRequired()\r\n .test(\r\n 'FILE_SIZE',\r\n `Max allowed file size is ${Math.floor(\r\n MAX_3D_OBJECT_FILE_SIZE / 1024 / 1024,\r\n )}MB`,\r\n (value) => {\r\n if (value && file3DRef.current) {\r\n if (file3DRef.current.files[0].size <= MAX_3D_OBJECT_FILE_SIZE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n },\r\n ),\r\n });\r\n\r\n const dispatch = useDispatch();\r\n const fileRef = useRef(null);\r\n const file3DRef = useRef(null);\r\n\r\n const [autoCompleteValue, setAutocompleteValue] = useState(null);\r\n\r\n const setValue = useCallback((setValue) => {\r\n setValue(FormFields.TOOL_IMAGE_ID, EMPTY_STRING);\r\n setValue(FormFields.FILE, null);\r\n }, []);\r\n\r\n const set3DFormValue = useCallback((setValue) => {\r\n setValue(FormFields.TOOL_3D_OBJECT_ID, EMPTY_STRING);\r\n setValue(FormFields.FILE_3D, null);\r\n }, []);\r\n\r\n const [disableValidation, setDisableValidation] = useState(true);\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n useEffect(() => {\r\n setDisableValidation(\r\n !userPermissions.includes(SystemPermission.ITEM_VERIFICATION),\r\n );\r\n }, [userPermissions, disableValidation, setDisableValidation]);\r\n\r\n return (\r\n \r\n {({ isValid, values }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Name*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.NAME);\r\n return form.setFieldValue(\r\n FormFields.NAME,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n M3 Item lookup*\r\n \r\n \r\n \r\n {({ form }) => {\r\n return (\r\n \r\n );\r\n }}\r\n \r\n \r\n \r\n {autoCompleteValue ? (\r\n \r\n \r\n {autoCompleteValue.m3ItemName}\r\n \r\n \r\n {autoCompleteValue.m3ItemNumber}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n Supplier*\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Supplier part number\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.SUPPLIER_PART_NUMBER,\r\n );\r\n return form.setFieldValue(\r\n FormFields.SUPPLIER_PART_NUMBER,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Tool group*\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Outer diameter*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.OUTER_DIAMETER);\r\n\r\n return form.setFieldValue(\r\n FormFields.OUTER_DIAMETER,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.OUTER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Inner diameter*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.INNER_DIAMETER);\r\n return form.setFieldValue(\r\n FormFields.INNER_DIAMETER,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.INNER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Length*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.LENGTH);\r\n\r\n return form.setFieldValue(\r\n FormFields.LENGTH,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.LENGTH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Weight*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.WEIGHT);\r\n return form.setFieldValue(\r\n FormFields.WEIGHT,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.WEIGHT,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Top connector\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Bottom connector\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Fishneck\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.FISHNECK);\r\n return form.setFieldValue(\r\n FormFields.FISHNECK,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.FISHNECK,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Safe working load\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.SAFE_WORKING_LOAD,\r\n );\r\n\r\n return form.setFieldValue(\r\n FormFields.SAFE_WORKING_LOAD,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.SWL,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Yield\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.YIELD);\r\n\r\n return form.setFieldValue(\r\n FormFields.YIELD,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.YIELD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.DESCRIPTION);\r\n return form.setFieldValue(\r\n FormFields.DESCRIPTION,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Axial friction reduced to \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.AXIAL_FRICTION_REDUCED_TO,\r\n );\r\n\r\n return form.setFieldValue(\r\n FormFields.AXIAL_FRICTION_REDUCED_TO,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.AXIAL_FRICTION_REDUCED_TO,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Centraliser Maximum OD\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.MAXIMUM_OD);\r\n return form.setFieldValue(\r\n FormFields.MAXIMUM_OD,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Centraliser Minimum OD\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.MINIMUM_OD);\r\n\r\n return form.setFieldValue(\r\n FormFields.MINIMUM_OD,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Maximum standoff force\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.MAXIMUM_STANDOFF_FORCE,\r\n );\r\n return form.setFieldValue(\r\n FormFields.MAXIMUM_STANDOFF_FORCE,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Minimum standoff force\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.MINIMUM_STANDOFF_FORCE,\r\n );\r\n return form.setFieldValue(\r\n FormFields.MINIMUM_STANDOFF_FORCE,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Weight above jarring point factor\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR,\r\n );\r\n return form.setFieldValue(\r\n FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.WEIGHT_ABOVE_JARRING_POINT_FACTOR,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Jar activation limit low\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.JAR_ACTIVATION_LIMIT_LOW,\r\n );\r\n return form.setFieldValue(\r\n FormFields.JAR_ACTIVATION_LIMIT_LOW,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_LOW,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Jar activation limit high\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.JAR_ACTIVATION_LIMIT_HIGH,\r\n );\r\n return form.setFieldValue(\r\n FormFields.JAR_ACTIVATION_LIMIT_HIGH,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_HIGH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Additional normal force\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.ADDITIONAL_NORMAL_FORCE,\r\n );\r\n return form.setFieldValue(\r\n FormFields.ADDITIONAL_NORMAL_FORCE,\r\n null,\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.ADDITIONAL_NORMAL_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Is knuckle joint\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Verified\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Upload image - .png only\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n <>\r\n \r\n {\r\n event.target.value = null;\r\n }}\r\n onChange={(event) => {\r\n if (event.target.files.length > 0) {\r\n form.setTouched({\r\n ...form.touched,\r\n [FormFields.FILE]: true,\r\n });\r\n yup\r\n .reach(schema, FormFields.FILE)\r\n .isValid(event.target.files[0])\r\n .then((valid) => {\r\n form.setFieldValue(\r\n FormFields.FILE,\r\n event.target.files[0],\r\n );\r\n valid === true &&\r\n dispatch(\r\n uploadToolImage(\r\n event.target.files[0],\r\n ),\r\n ).then((payload) => {\r\n form.setFieldValue(\r\n FormFields.TOOL_IMAGE_ID,\r\n payload.toolImageId,\r\n );\r\n });\r\n });\r\n }\r\n }}\r\n {...formik}\r\n />\r\n {\r\n fileRef.current.click();\r\n }}\r\n >\r\n Upload\r\n \r\n \r\n \r\n \r\n {values.toolImageFile &&\r\n values.toolImageFile.name}\r\n \r\n \r\n {values.toolImageFile &&\r\n values.toolImageFile.name && (\r\n \r\n {\r\n if (values.toolImageId) {\r\n dispatch(\r\n deleteToolImage(values.toolImageId),\r\n ).then(setValue(form.setFieldValue));\r\n } else {\r\n setValue(form.setFieldValue);\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{msg}
}\r\n />\r\n
\r\n
\r\n
\r\n {/* for 3DObject upload */}\r\n \r\n \r\n Upload 3D Object\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n <>\r\n \r\n {\r\n event.target.value = null;\r\n }}\r\n onChange={(event) => {\r\n if (event.target.files.length > 0) {\r\n form.setTouched({\r\n ...form.touched,\r\n [FormFields.FILE_3D]: true,\r\n });\r\n yup\r\n .reach(schema, FormFields.FILE_3D)\r\n .isValid(event.target.files[0])\r\n .then((valid) => {\r\n form.setFieldValue(\r\n FormFields.FILE_3D,\r\n event.target.files[0],\r\n );\r\n valid === true &&\r\n dispatch(\r\n uploadTool3DObject(\r\n event.target.files[0],\r\n ),\r\n ).then((payload) => {\r\n form.setFieldValue(\r\n FormFields.TOOL_3D_OBJECT_ID,\r\n payload.tool3DObjectId,\r\n );\r\n });\r\n });\r\n }\r\n }}\r\n {...formik}\r\n />\r\n {\r\n file3DRef.current.click();\r\n }}\r\n >\r\n Upload\r\n \r\n \r\n \r\n \r\n {values.tool3DObjectFile &&\r\n values.tool3DObjectFile.name}\r\n \r\n \r\n {values.tool3DObjectFile &&\r\n values.tool3DObjectFile.name && (\r\n \r\n {\r\n if (values.tool3DObjectId) {\r\n dispatch(\r\n deleteTool3DObject(\r\n values.tool3DObjectId,\r\n ),\r\n ).then(\r\n set3DFormValue(form.setFieldValue),\r\n );\r\n } else {\r\n set3DFormValue(form.setFieldValue);\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
{msg}
}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n saveTool(values)}\r\n >\r\n Save\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingTop: 15,\r\n marginBottom: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n form: {\r\n flexDirection: 'column',\r\n },\r\n formLegend: {\r\n flexDirection: 'column',\r\n },\r\n row: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n },\r\n submitBtn: {\r\n justifyContent: 'center',\r\n paddingTop: theme.spacing(4),\r\n },\r\n errorText: {\r\n color: theme.palette.error.main,\r\n },\r\n removeUpload: {\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n removeUploadContainer: {\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n EQUIPMENT_ACTIONS.UPDATE_TOOL,\r\n EQUIPMENT_ACTIONS.UPLOAD_IMAGE,\r\n EQUIPMENT_ACTIONS.DELETE_IMAGE,\r\n EQUIPMENT_ACTIONS.M3_ITEM_SEARCH,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(M3ModalForm);\r\n","import { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst AddToolModalHeader = ({ closeModal, title }) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default AddToolModalHeader;\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport M3ModalForm from 'features/equipment/m3Components/M3ModalForm';\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport AddToolModalHeader from 'features/equipment/components/AddToolModalHeader';\r\n\r\nconst M3Modal = ({\r\n open,\r\n edit,\r\n tool,\r\n title,\r\n classes,\r\n saveTool,\r\n onSubmit,\r\n validForm,\r\n dataState,\r\n suppliers,\r\n toolGroups,\r\n toggleModal,\r\n toolConnectors,\r\n requiredFields,\r\n initialFormValues,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n}) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: 'fit-content',\r\n },\r\n content: {\r\n overflow: 'scroll-y',\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n footer: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: theme.spacing(3),\r\n },\r\n filters: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(M3Modal);\r\n","import { compose } from 'redux';\r\nimport { useCallback, useEffect } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n getCurrentClientSelectedUom,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n getUnitForProperty,\r\n existingToolToToolMapper,\r\n} from 'features/equipment/equipment.helpers';\r\n\r\nimport {\r\n createTool,\r\n updateTool,\r\n onLoadAddToolsModal,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n EDITABLE_TOOL_PROPERTIES,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n getToolConnectorsFromState,\r\n getUnitsOfMeasurePreference,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport M3Modal from 'features/equipment/m3Components/M3Modal';\r\nimport { FormFields } from 'features/equipment/m3Components/M3ModalForm';\r\n\r\nconst initialFormValues = {\r\n [FormFields.M3_ITEM]: null,\r\n [FormFields.NAME]: EMPTY_STRING,\r\n [FormFields.SUPPLIER]: null,\r\n [FormFields.SUPPLIER_PART_NUMBER]: EMPTY_STRING,\r\n [FormFields.GROUP]: null,\r\n [FormFields.OUTER_DIAMETER]: EMPTY_STRING,\r\n [FormFields.INNER_DIAMETER]: EMPTY_STRING,\r\n [FormFields.LENGTH]: EMPTY_STRING,\r\n [FormFields.WEIGHT]: EMPTY_STRING,\r\n [FormFields.TOP_CONNECTOR]: null,\r\n [FormFields.BOTTOM_CONNECTOR]: null,\r\n [FormFields.FISHNECK]: EMPTY_STRING,\r\n [FormFields.SAFE_WORKING_LOAD]: EMPTY_STRING,\r\n [FormFields.YIELD]: EMPTY_STRING,\r\n [FormFields.DESCRIPTION]: EMPTY_STRING,\r\n [FormFields.FILE]: null,\r\n [FormFields.TOOL_IMAGE_ID]: EMPTY_STRING,\r\n [FormFields.MAXIMUM_OD]: EMPTY_STRING,\r\n [FormFields.MAXIMUM_STANDOFF_FORCE]: EMPTY_STRING,\r\n [FormFields.MINIMUM_OD]: EMPTY_STRING,\r\n [FormFields.MINIMUM_STANDOFF_FORCE]: EMPTY_STRING,\r\n [FormFields.JAR_ACTIVATION_LIMIT_LOW]: EMPTY_STRING,\r\n [FormFields.JAR_ACTIVATION_LIMIT_HIGH]: EMPTY_STRING,\r\n [FormFields.ADDITIONAL_NORMAL_FORCE]: EMPTY_STRING,\r\n [FormFields.IS_KNUCKLE_JOINT]: undefined,\r\n [FormFields.IS_VERIFIED]: undefined,\r\n [FormFields.AXIAL_FRICTION_REDUCED_TO]: EMPTY_STRING,\r\n [FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR]: EMPTY_STRING,\r\n [FormFields.TOOL_3D_OBJECT_ID]: EMPTY_STRING,\r\n};\r\n\r\nconst M3ModalContainer = ({\r\n edit = false,\r\n tool,\r\n title,\r\n toolId,\r\n openModal,\r\n suppliers,\r\n dataState,\r\n toolGroups,\r\n toggleModal,\r\n existingTool,\r\n dispatchOnLoad,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n }, [dispatchOnLoad]);\r\n\r\n const toolConnectors = useSelector(getToolConnectorsFromState);\r\n const unitsOfMeasurePreference = useSelector(getUnitsOfMeasurePreference);\r\n const selectedCustomUnitsOfMeasure = useSelector(getCurrentClientSelectedUom);\r\n\r\n const saveTool = useCallback(\r\n (formValues) => {\r\n let tool = {\r\n referenceNumber: formValues.m3Item,\r\n topConnectorId: formValues.topConnector,\r\n bottomConnectorId: formValues.bottomConnector,\r\n name: formValues.name,\r\n toolGroupId: formValues.group,\r\n supplier: formValues.supplier,\r\n supplierPartNumber: formValues.supplierPartNumber,\r\n description: formValues.description,\r\n outerDiameter: {\r\n value: formValues.outerDiameter,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.OUTER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n innerDiameter: {\r\n value: formValues.innerDiameter,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.INNER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n length: {\r\n value: formValues.length,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.LENGTH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n weight: {\r\n value: formValues.weight,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.WEIGHT,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n fishNeck: {\r\n value: formValues.fishneck,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.FISHNECK,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n safeWorkingLoad: {\r\n value: formValues.safeWorkingLoad,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.SWL,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n yield: {\r\n value: formValues.yield,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.YIELD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n maximumOD: {\r\n value: formValues.maximumOD,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n maximumStandoffForce: {\r\n value: formValues.maximumStandoffForce,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n minimumOD: {\r\n value: formValues.minimumOD,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n minimumStandoffForce: {\r\n value: formValues.minimumStandoffForce,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n jarActivationLimitLow: {\r\n value: formValues.jarActivationLimitLow,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_LOW,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n jarActivationLimitHigh: {\r\n value: formValues.jarActivationLimitHigh,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_HIGH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n additionalNormalForce: {\r\n value: formValues.additionalNormalForce,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.ADDITIONAL_NORMAL_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n isKnuckleJoint: formValues.isKnuckleJoint,\r\n isVerified: formValues.isVerified,\r\n axialFrictionReducedTo: {\r\n value: formValues.axialFrictionReducedTo,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.AXIAL_FRICTION_REDUCED_TO,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n weightAboveJarringPointFactor: {\r\n value: formValues.weightAboveJarringPointFactor,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.WEIGHT_ABOVE_JARRING_POINT_FACTOR,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n toolImageId: formValues.toolImageId,\r\n tool3DObjectId: formValues.tool3DObjectId,\r\n };\r\n if (edit) {\r\n tool.toolId = parseInt(toolId);\r\n const newTool = existingToolToToolMapper(tool, existingTool);\r\n dispatch(updateTool(newTool, MODAL.EDIT_M3_TOOL));\r\n } else {\r\n dispatch(createTool(tool));\r\n }\r\n },\r\n [\r\n dispatch,\r\n unitsOfMeasurePreference,\r\n edit,\r\n toolId,\r\n existingTool,\r\n selectedCustomUnitsOfMeasure,\r\n ],\r\n );\r\n\r\n initialFormValues[FormFields.IS_KNUCKLE_JOINT] = tool?.get(\r\n FormFields.IS_KNUCKLE_JOINT,\r\n false,\r\n );\r\n\r\n initialFormValues[FormFields.IS_VERIFIED] = tool?.get(\r\n FormFields.IS_VERIFIED,\r\n false,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadAddToolsModal,\r\n};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n M3ModalContainer,\r\n);\r\n","import { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n TOOL_GROUPS: 'toolGroupIds',\r\n SERIAL_SEARCH: 'serialSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst MwlToolsFilter = ({\r\n classes,\r\n onSubmit,\r\n toolGroups,\r\n initialValues,\r\n toggleAddToolModal,\r\n}) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.SERIAL_SEARCH,\r\n initialValues[Filters.SERIAL_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n toggleAddToolModal(true)}\r\n >\r\n Add tool\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(MwlToolsFilter);\r\n","import { Link } from 'react-router-dom';\r\nimport { useMemo, useCallback } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Tooltip, withStyles } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\n\r\nimport { toTool } from 'utils/route.util';\r\nimport { Grid } from 'app/components/withTooltip';\r\nimport { Table, TableRow } from 'altus-ui-components';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\n\r\nimport ToolImageTableCell from 'app/components/ToolImageTableCell';\r\nimport { compose } from 'redux';\r\n\r\nconst MwlToolsTable = ({ tools, toolCategory, classes, ...rest }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Header: '',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n if (!tool.get('dataVerified')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Item no.',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n\r\n return (\r\n Open tool}>\r\n {tool.get('m3ItemNumber')}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 5,\r\n id: 'toolImage',\r\n Header: 'Image',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n ],\r\n [classes.warningIcon],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n [toolCategory],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(MwlToolsTable);\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport { useEffect, useMemo, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { EMPTY_LIST, EMPTY_STRING } from 'app/app.constants';\r\nimport { getCurrentClientOrganizationIdFromState } from 'app/app.selectors';\r\n\r\nimport {\r\n getToolsFromState,\r\n getToolGroupsFromState,\r\n getToolSuppliersFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n onLoadWithoutToolstrings as onLoad,\r\n onUnload,\r\n searchTools,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n MODAL,\r\n EQIPMENT_CATEGORY_IDS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport M3ModalContainer from 'features/equipment/m3Components/M3ModalContainer';\r\nimport { Filters } from 'features/equipment/mwlTools/components/MwlToolsFilter';\r\nimport MwlToolsTable from 'features/equipment/mwlTools/components/MwlToolsTable';\r\nimport MwlToolsFilter from 'features/equipment/mwlTools/components/MwlToolsFilter';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TOOL_GROUPS]: EMPTY_LIST,\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.SERIAL_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst MwlToolsContainer = ({\r\n classes,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n const [addToolModal, toggleAddToolModal] = useModal(MODAL.M3_TOOL);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(EQIPMENT_CATEGORY_IDS.MWL_TOOLS);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const initialFilterValues = useMemo(\r\n () => ({\r\n ...defaultFormValues,\r\n organizationId: currentClientOrganizationId,\r\n }),\r\n [currentClientOrganizationId],\r\n );\r\n\r\n const tools = useSelector(getToolsFromState);\r\n const toolGroups = useSelector(getToolGroupsFromState);\r\n const toolSuppliers = useSelector(getToolSuppliersFromState);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n [Filters.SERIAL_SEARCH]: filterValues[Filters.SERIAL_SEARCH],\r\n categoryId: EQIPMENT_CATEGORY_IDS.MWL_TOOLS,\r\n [Filters.TOOL_GROUPS]:\r\n filterValues[Filters.TOOL_GROUPS] === '' ||\r\n filterValues[Filters.TOOL_GROUPS] === EMPTY_LIST\r\n ? null\r\n : [filterValues[Filters.TOOL_GROUPS]],\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n filterContainer: {\r\n height: 'fit-content',\r\n width: '50%',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchTools,\r\n }),\r\n withStyles(styles),\r\n)(MwlToolsContainer);\r\n","import { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n TOOL_GROUPS: 'toolGroupIds',\r\n SERIAL_SEARCH: 'serialSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst EwlToolsFilter = ({\r\n classes,\r\n onSubmit,\r\n toolGroups,\r\n initialValues,\r\n toggleAddToolModal,\r\n}) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.SERIAL_SEARCH,\r\n initialValues[Filters.SERIAL_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n toggleAddToolModal(true)}\r\n >\r\n Add tool\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(EwlToolsFilter);\r\n","import { Link } from 'react-router-dom';\r\nimport { useMemo, useCallback } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Tooltip, withStyles } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\n\r\nimport { toTool } from 'utils/route.util';\r\nimport { Grid } from 'app/components/withTooltip';\r\nimport { Table, TableRow } from 'altus-ui-components';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\n\r\nimport ToolImageTableCell from 'app/components/ToolImageTableCell';\r\nimport { compose } from 'redux';\r\n\r\nconst EwlToolsTable = ({ tools, toolCategory, classes, ...rest }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Header: '',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n if (!tool.get('dataVerified')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Item no.',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n\r\n return (\r\n Open tool}>\r\n {tool.get('m3ItemNumber')}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 5,\r\n id: 'toolImage',\r\n Header: 'Image',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n ],\r\n [classes.warningIcon],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => (\r\n \r\n \r\n \r\n ),\r\n [toolCategory],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(EwlToolsTable);\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport { useEffect, useMemo, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { EMPTY_LIST, EMPTY_STRING } from 'app/app.constants';\r\nimport { getCurrentClientOrganizationIdFromState } from 'app/app.selectors';\r\n\r\nimport {\r\n getToolsFromState,\r\n getToolGroupsFromState,\r\n getToolSuppliersFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n onLoadWithoutToolstrings as onLoad,\r\n onUnload,\r\n searchTools,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n MODAL,\r\n EQIPMENT_CATEGORY_IDS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport M3ModalContainer from 'features/equipment/m3Components/M3ModalContainer';\r\nimport { Filters } from 'features/equipment/ewlTools/components/EwlToolsFilter';\r\nimport EwlToolsTable from 'features/equipment/ewlTools/components/EwlToolsTable';\r\nimport EwlToolsFilter from 'features/equipment/ewlTools/components/EwlToolsFilter';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TOOL_GROUPS]: EMPTY_LIST,\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.SERIAL_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst EwlToolsContainer = ({\r\n classes,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n const [addToolModal, toggleAddToolModal] = useModal(MODAL.M3_TOOL);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(EQIPMENT_CATEGORY_IDS.EWL_TOOLS);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const initialFilterValues = useMemo(\r\n () => ({\r\n ...defaultFormValues,\r\n organizationId: currentClientOrganizationId,\r\n }),\r\n [currentClientOrganizationId],\r\n );\r\n\r\n const tools = useSelector(getToolsFromState);\r\n const toolGroups = useSelector(getToolGroupsFromState);\r\n const toolSuppliers = useSelector(getToolSuppliersFromState);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n [Filters.SERIAL_SEARCH]: filterValues[Filters.SERIAL_SEARCH],\r\n categoryId: EQIPMENT_CATEGORY_IDS.EWL_TOOLS,\r\n [Filters.TOOL_GROUPS]:\r\n filterValues[Filters.TOOL_GROUPS] === '' ||\r\n filterValues[Filters.TOOL_GROUPS] === EMPTY_LIST\r\n ? null\r\n : [filterValues[Filters.TOOL_GROUPS]],\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n filterContainer: {\r\n height: 'fit-content',\r\n width: '50%',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchTools,\r\n }),\r\n withStyles(styles),\r\n)(EwlToolsContainer);\r\n","import { compose } from 'redux';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { fromJS, isImmutable } from 'immutable';\r\nimport DeleteIcon from '@material-ui/icons/Close';\r\nimport { memo, useMemo, useCallback } from 'react';\r\nimport { sortableElement } from 'react-sortable-hoc';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nimport {\r\n DragHandle,\r\n SortableTable,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport {\r\n ToolType,\r\n ToolCategoryType,\r\n} from 'features/projects/tool/tool.constants';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport ToolstringToolsTableRow from 'features/projects/tasks/task/toolstring/components/ToolstringToolsTableRow';\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('toolAssemblyTools')?.toArray()\r\n : row.original?.toolAssemblyTools?.toArray();\r\n\r\nconst SortableFormikRow = sortableElement(EditableTableRowFormik);\r\n\r\nconst getConnectorName = (item) => item.get('name', '').toUpperCase();\r\n\r\nconst ToolAssemblyCreatorTable = ({\r\n classes,\r\n toolConnectors,\r\n toolstringTools,\r\n onDuplicateItem,\r\n onSortToolstringTool,\r\n updateItemProperties,\r\n onDeleteToolstringTool,\r\n onAddToolAssemblyTools,\r\n onDeleteToolAssemblyTool,\r\n}) => {\r\n const lengthUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('length'),\r\n );\r\n\r\n const weightUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('weight'),\r\n );\r\n\r\n const forceUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('yieldValue'),\r\n );\r\n\r\n const diameterUnit = getQuantityUnitFromItems(toolstringTools, (result) =>\r\n result.get('outerDiameter'),\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const actions = [\r\n {\r\n visible: !row.depth,\r\n content: ,\r\n },\r\n {\r\n visible: !row.canExpand && !row.depth, // placeholder to keep DragHandle left aligned\r\n content: null,\r\n },\r\n {\r\n visible: row.canExpand && !row.depth,\r\n content: (\r\n \r\n {row.isExpanded ? : }\r\n \r\n ),\r\n },\r\n {\r\n visible: !!row.depth,\r\n content: ,\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {actions\r\n .filter((action) => action.visible)\r\n .map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolItemNo',\r\n Header: 'Item No.',\r\n accessor: (tool) =>\r\n tool.get('m3ItemNumber')\r\n ? tool.get('m3ItemNumber')\r\n : tool.get('m3ITNO'),\r\n Cell: ({ value, row }) => (\r\n \r\n {value\r\n ? row.original.get('toolGroupCategory') !==\r\n ToolCategoryType.ThirdParty\r\n ? `#${value}`\r\n : value\r\n : null}\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolAccumulatedLength',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['accumulatedLength', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolFishNeck',\r\n accessor: (tool) =>\r\n tool.getIn(['fishNeck', 'value'])\r\n ? formatValue(tool.getIn(['fishNeck', 'value']), '', 0.01)\r\n : formatValue(tool.get('fishNeck'), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolLength',\r\n accessor: (tool) =>\r\n tool.getIn(['length', 'value'])\r\n ? formatValue(tool.getIn(['length', 'value']), '', 0.01)\r\n : formatValue(tool.get('length') / 1000, '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolWeight',\r\n accessor: (tool) =>\r\n tool.getIn(['weight', 'value'])\r\n ? formatValue(tool.getIn(['weight', 'value']), '', 0.01)\r\n : formatValue(tool.get('weight'), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolOuterDiameter',\r\n accessor: (tool) =>\r\n tool.getIn(['outerDiameter', 'value'])\r\n ? formatValue(tool.getIn(['outerDiameter', 'value']), '', 0.01)\r\n : formatValue(tool.get('outerDiameter'), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'yieldValue',\r\n accessor: (tool) =>\r\n tool.getIn(['yieldValue', 'value'])\r\n ? formatValue(tool.getIn(['yieldValue', 'value']), '', 0.01)\r\n : formatValue(tool.get('yield'), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n\r\n {\r\n xs: 1,\r\n Header: 'Top C.',\r\n Cell: ({ row }) => {\r\n const connectorId = row.original.get('topToolConnectorId');\r\n\r\n if (!toolConnectors?.size || !connectorId) return null;\r\n\r\n return getConnectorName(toolConnectors.get(connectorId));\r\n },\r\n },\r\n {\r\n xs: 1,\r\n Header: 'Bot. C.',\r\n Cell: ({ row }) => {\r\n const connectorId = row.original.get('bottomToolConnectorId');\r\n\r\n if (!toolConnectors?.size || !connectorId) return null;\r\n\r\n return getConnectorName(toolConnectors.get(connectorId));\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'supplier',\r\n Header: 'Supplier',\r\n accessor: (tool) => tool.get('supplier'),\r\n Cell: ({ value: supplier, row }) => {\r\n const isAssembly = row.original.get('type') === ToolType.ASSEMBLY;\r\n\r\n if (isAssembly) return null;\r\n\r\n return (\r\n \r\n {supplier || 'Altus Inc.'}\r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const { original: toolstringItem } = row;\r\n\r\n const isToolstringAssembly =\r\n toolstringItem.get('type') === ToolType.ASSEMBLY;\r\n\r\n const isToolstringAssemblyTool =\r\n toolstringItem.get('type') === ToolType.ASSEMBLY_TOOL;\r\n\r\n const actions = [\r\n {\r\n visible: isToolstringAssembly,\r\n content: (\r\n onAddToolAssemblyTools(toolstringItem)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n {\r\n visible: true,\r\n content: (\r\n onDuplicateItem(toolstringItem)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n {\r\n visible: true,\r\n content: (\r\n \r\n isToolstringAssemblyTool\r\n ? onDeleteToolAssemblyTool(toolstringItem)\r\n : onDeleteToolstringTool(toolstringItem)\r\n }\r\n >\r\n \r\n \r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {actions\r\n .filter((action) => action.visible)\r\n .map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [\r\n forceUnit,\r\n lengthUnit,\r\n weightUnit,\r\n diameterUnit,\r\n toolConnectors,\r\n onDuplicateItem,\r\n onDeleteToolstringTool,\r\n onAddToolAssemblyTools,\r\n onDeleteToolAssemblyTool,\r\n ],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateItemProperties],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n scrollable: {\r\n overflowY: 'auto',\r\n },\r\n});\r\n\r\nexport default compose(memo, withStyles(styles))(ToolAssemblyCreatorTable);\r\n","import * as yup from 'yup';\r\nimport { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Fab, Typography } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport TextAreaFieldFormik from 'app/components/form/formik/TextAreaFieldFormik';\r\n\r\nexport const FormFields = {\r\n name: 'name',\r\n description: 'description',\r\n m3ItemNumber: 'm3ItemNumber',\r\n};\r\n\r\nconst ToolAssemlyInformationContainer = ({\r\n classes,\r\n toolAssemblyInfo,\r\n toolAssemblyName,\r\n setToolAssemblyInfo,\r\n setToolAssemblyName,\r\n toggleToolAssemblyItemModal,\r\n}) => {\r\n const initialValues = useMemo(\r\n () => ({\r\n [FormFields.name]: toolAssemblyName,\r\n [FormFields.description]: toolAssemblyInfo,\r\n [FormFields.m3ItemNumber]: null,\r\n }),\r\n [toolAssemblyInfo, toolAssemblyName],\r\n );\r\n\r\n const schema = yup.object().shape({\r\n name: yup.string().required('Required'),\r\n });\r\n\r\n const onSubmitForm = (formValue) => {\r\n setToolAssemblyInfo(formValue.description);\r\n setToolAssemblyName(formValue.name);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Add Tool\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {\r\n setToolAssemblyName(event.target.value);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n height: 'fit-content',\r\n flexDirection: 'column',\r\n border: `1px solid ${theme.palette.divider}`,\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(3),\r\n },\r\n wrapper: {\r\n height: 'fit-content',\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ToolAssemlyInformationContainer);\r\n","import { compose } from 'redux';\r\nimport { List, isImmutable } from 'immutable';\r\nimport { useCallback } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport ToolAssemblyCreatorTable from 'features/equipment/toolAssemblies/components/ToolAssemblyCreatorTable';\r\nimport TaskToolstringPreview from 'features/projects/tasks/task/toolstring/components/TaskToolstringPreview';\r\nimport ToolAssemlyInformationContainer from 'features/equipment/toolAssemblies/components/ToolAssemlyInformationContainer';\r\nimport ToolstringItemHighlightProvider from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\n\r\nconst ToolAssemblyCreator = ({\r\n classes,\r\n selectedTools,\r\n onDuplicateItem,\r\n toolAssemblyInfo,\r\n toolAssemblyName,\r\n setToolAssemblyInfo,\r\n setToolAssemblyName,\r\n onSortToolstringItem,\r\n onDeleteToolstringItem,\r\n toggleToolAssemblyItemModal,\r\n}) => {\r\n const createToolstringSections = useCallback((selectedTools) => {\r\n if (selectedTools.length > 0) {\r\n const length = 1;\r\n const items = List(selectedTools).toJS();\r\n const obj = {\r\n length,\r\n items,\r\n };\r\n return [obj];\r\n } else {\r\n if (isImmutable(selectedTools)) {\r\n const length = 1;\r\n const items = selectedTools.toJS();\r\n const obj = {\r\n length,\r\n items,\r\n };\r\n return [obj];\r\n }\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n container: {\r\n height: '100%',\r\n },\r\n content: {\r\n height: '100%',\r\n },\r\n header: {\r\n height: '10%',\r\n },\r\n information: {\r\n paddingLeft: theme.spacing(5),\r\n paddingRight: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ToolAssemblyCreator);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst ToolAssembliesModalHeader = ({ title, closeModal, toolAssemblyName }) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n {toolAssemblyName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = () => ({});\r\n\r\nexport default compose(withStyles(styles))(ToolAssembliesModalHeader);\r\n","import { compose } from 'redux';\r\nimport { memo, useCallback } from 'react';\r\nimport { Grid, Button, Box } from '@material-ui/core';\r\n\r\nconst ToolAssembliesModalFooter = ({\r\n edit = false,\r\n selectedTools,\r\n toolAssemblyName,\r\n onSaveToolAssembly,\r\n}) => {\r\n const checkSaveDisabled = useCallback(() => {\r\n if (edit) return false;\r\n if (\r\n toolAssemblyName !== null &&\r\n toolAssemblyName !== '' &&\r\n selectedTools.length > 0\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }, [selectedTools, toolAssemblyName, edit]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(memo)(ToolAssembliesModalFooter);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n Grid,\r\n Dialog,\r\n DialogContent,\r\n CircularProgress,\r\n} from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport ToolAssemblyCreator from 'features/equipment/toolAssemblies/components/ToolAssemblyCreator';\r\nimport ToolAssembliesModalHeader from 'features/equipment/toolAssemblies/components/ToolAssembliesModalHeader';\r\nimport ToolAssembliesModalFooter from 'features/equipment/toolAssemblies/components/ToolAssembliesModalFooter';\r\n\r\nconst ToolAssembliesModal = ({\r\n open,\r\n edit,\r\n title,\r\n classes,\r\n isLoading = false,\r\n dataState,\r\n toggleModal,\r\n selectedTools,\r\n onDuplicateItem,\r\n toolAssemblyInfo,\r\n toolAssemblyName,\r\n onSaveToolAssembly,\r\n setToolAssemblyInfo,\r\n setToolAssemblyName,\r\n onSortToolstringItem,\r\n onUpdateAssemblyName,\r\n onDeleteToolstringItem,\r\n toggleToolAssemblyItemModal,\r\n}) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n // height: 'fit-content',\r\n },\r\n content: {\r\n overflow: 'scroll-y',\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n footer: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n filters: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n wrapper: {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SAVE_TOOL_ASSEMBLY,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(ToolAssembliesModal);\r\n","import { compose } from 'redux';\r\nimport { useState, useCallback } from 'react';\r\nimport { arrayMoveImmutable } from 'array-move';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n} from 'app/app.selectors';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport { saveToolAssembly } from 'features/equipment/equipment.actions';\r\nimport { ToolCategoryType } from 'features/projects/tool/tool.constants';\r\nimport ToolPickerModalContainer from 'features/projects/tool/components/ToolPickerModalContainer';\r\nimport ToolAssembliesModal from 'features/equipment/toolAssemblies/components/ToolAssembliesModal';\r\n\r\nconst toolstringItemCategories = [\r\n ToolCategoryType.MWL,\r\n ToolCategoryType.EWL,\r\n ToolCategoryType.ThirdParty,\r\n];\r\n\r\nconst ToolAssembliesModalContainer = ({\r\n openModal,\r\n dataState,\r\n toggleModal,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [selectedTools, setSelectedTools] = useState([]);\r\n const [toolAssemblyName, setToolAssemblyName] = useState('');\r\n const [toolAssemblyInfo, setToolAssemblyInfo] = useState(null);\r\n\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n );\r\n\r\n const [toolAssemblyItemModalOpen, toggleToolAssemblyItemModal] = useModal(\r\n MODAL.ADD_TOOL_TO_TOOL_ASSEMBLY,\r\n );\r\n\r\n const onUpdateAssemblyName = (formValue) => {\r\n setToolAssemblyName(formValue);\r\n };\r\n\r\n const handleToggleModal = () => {\r\n setSelectedTools([]);\r\n setToolAssemblyName('');\r\n setToolAssemblyInfo(null);\r\n toggleModal();\r\n };\r\n\r\n const onAddTool = (tool) => {\r\n setSelectedTools((prevArray) => [...prevArray, tool]);\r\n dispatch(\r\n addNotification({\r\n message: 'Tool added to assembly.',\r\n variant: NOTIFICATION_VARIANTS.SUCCESS,\r\n }),\r\n );\r\n };\r\n\r\n const onSortToolstringItem = useCallback(\r\n ({ oldIndex, newIndex }) => {\r\n if (oldIndex === newIndex) return;\r\n\r\n const tools = [...selectedTools];\r\n const newTools = arrayMoveImmutable(tools, oldIndex, newIndex);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDeleteToolstringItem = useCallback(\r\n (toolAssemblyTool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(toolAssemblyTool);\r\n tools.splice(toolIndex, 1);\r\n setSelectedTools(tools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDuplicateItem = useCallback(\r\n (tool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(tool);\r\n tools.push(tool);\r\n const lastToolIndex = tools.lastIndexOf(tool);\r\n const newTools = arrayMoveImmutable(tools, lastToolIndex, toolIndex + 1);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onSaveToolAssembly = useCallback(() => {\r\n const tools = selectedTools.map((tool) => {\r\n return tool.get('id');\r\n });\r\n const toolAssemblyToSave = {\r\n name: toolAssemblyName,\r\n description: toolAssemblyInfo,\r\n organizationId: currentClientOrganizationId,\r\n toolAssemblyToolsIds: tools,\r\n };\r\n dispatch(saveToolAssembly(toolAssemblyToSave));\r\n }, [\r\n dispatch,\r\n selectedTools,\r\n toolAssemblyInfo,\r\n toolAssemblyName,\r\n currentClientOrganizationId,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SAVE_TOOL_ASSEMBLY,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n ToolAssembliesModalContainer,\r\n);\r\n","import { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { SystemPermission } from 'app/app.constants';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n SERIAL_SEARCH: 'serialSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst toolAssembliesFilter = ({\r\n classes,\r\n onSubmit,\r\n initialValues,\r\n toggleAddToolAssemblyModal,\r\n isBhaAddModal = false,\r\n}) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.SERIAL_SEARCH,\r\n initialValues[Filters.SERIAL_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n {!isBhaAddModal ? (\r\n \r\n \r\n \r\n toggleAddToolAssemblyModal(true)}\r\n >\r\n Add tool assembly\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(toolAssembliesFilter);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { List, isImmutable } from 'immutable';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Tooltip } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\n\r\nimport {\r\n Fab,\r\n Grid,\r\n Typography,\r\n IconButton,\r\n CircularProgress,\r\n} from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST, SystemPermission } from 'app/app.constants';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport ToolImageTableCell from 'app/components/ToolImageTableCell';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport { formatValue } from 'utils/format.util';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 30,\r\n};\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('toolAssemblyTools')?.toArray()\r\n : row.original?.toolAssemblyTools?.toArray();\r\n\r\nconst ToolAssembliesTable = ({\r\n classes,\r\n loading,\r\n tools = EMPTY_LIST,\r\n isModalForAdding = false,\r\n onEditTool,\r\n onAddTool,\r\n}) => {\r\n const initialState = useMemo(\r\n () => ({\r\n ...defaultInitialState,\r\n sortBy: [\r\n {\r\n id: 'sequence',\r\n desc: false,\r\n },\r\n ],\r\n }),\r\n [],\r\n );\r\n\r\n const lengthUnit = getQuantityUnitFromItems(tools, (result) =>\r\n result.get('length'),\r\n );\r\n\r\n const weightUnit = getQuantityUnitFromItems(tools, (result) =>\r\n result.get('weight'),\r\n );\r\n\r\n const diameterUnit = getQuantityUnitFromItems(tools, (result) =>\r\n result.get('outerDiameter'),\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 0,\r\n id: 'dataVerified',\r\n Header: '',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n if (!row.canExpand) {\r\n if (!tool.get('dataVerified')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n } else if (!tool.get('verifiedData')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolItemNo',\r\n Header: 'Item no.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n Cell: ({ row, value }) => (\r\n \r\n {value}\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n id: 'image',\r\n Header: 'Image',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n const toolStringItems = getSubRows(tool);\r\n if (toolStringItems && toolStringItems.length > 0) {\r\n return (\r\n \r\n {toolStringItems.reverse().map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n Cell: ({ row, value }) => (\r\n \r\n {value}\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolLength',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['length', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolWeight',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['weight', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'toolOD',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['outerDiameter', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'editTool',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n if (!isModalForAdding && row.canExpand) {\r\n return (\r\n \r\n \r\n onEditTool(tool.get('id'))}>\r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n },\r\n },\r\n {\r\n id: 'actions',\r\n xs: 1,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n if (isModalForAdding) {\r\n return (\r\n \r\n {\r\n onAddTool(tool);\r\n }}\r\n >\r\n Add\r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n },\r\n },\r\n ],\r\n [\r\n classes,\r\n isModalForAdding,\r\n onAddTool,\r\n onEditTool,\r\n lengthUnit,\r\n weightUnit,\r\n diameterUnit,\r\n ],\r\n );\r\n\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nToolAssembliesTable.propTypes = {\r\n tools: PropTypes.instanceOf(List),\r\n};\r\n\r\nconst styles = (theme) => ({\r\n rowActionCell: {\r\n paddingRght: '10px',\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n },\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ToolAssembliesTable);\r\n","import { compose } from 'redux';\r\nimport { fromJS } from 'immutable';\r\nimport { arrayMoveImmutable } from 'array-move';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport { useState, useCallback, useEffect } from 'react';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n getToolAssembly,\r\n updateToolAssembly,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { ToolCategoryType } from 'features/projects/tool/tool.constants';\r\nimport ToolPickerModalContainer from 'features/projects/tool/components/ToolPickerModalContainer';\r\nimport ToolAssembliesModal from 'features/equipment/toolAssemblies/components/ToolAssembliesModal';\r\n\r\nconst toolstringItemCategories = [\r\n ToolCategoryType.MWL,\r\n ToolCategoryType.EWL,\r\n ToolCategoryType.ThirdParty,\r\n];\r\n\r\nconst EditToolAssembliesModalContainer = ({\r\n toolId,\r\n openModal,\r\n dataState,\r\n setTooldId,\r\n toggleModal,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [selectedTools, setSelectedTools] = useState([]);\r\n const [toolAssemblyName, setToolAssemblyName] = useState('');\r\n const [toolAssemblyInfo, setToolAssemblyInfo] = useState(null);\r\n\r\n const [toolAssemblyItemModalOpen, toggleToolAssemblyItemModal] = useModal(\r\n MODAL.ADD_TOOL_TO_TOOL_ASSEMBLY,\r\n );\r\n\r\n const handleToggleModal = () => {\r\n setSelectedTools([]);\r\n setToolAssemblyName('');\r\n setToolAssemblyInfo(null);\r\n setTooldId(null);\r\n toggleModal();\r\n };\r\n\r\n useEffect(() => {\r\n if (toolId) {\r\n dispatch(getToolAssembly(toolId)).then((payload) => {\r\n setSelectedTools(\r\n fromJS(payload.toolAssemblyTools.map((tool) => tool.externalTool)),\r\n );\r\n setToolAssemblyInfo(payload.description);\r\n setToolAssemblyName(payload.name);\r\n setIsLoading(false);\r\n });\r\n }\r\n }, [toolId, dispatch]);\r\n\r\n const onUpdateAssemblyName = useCallback((formValue) => {\r\n setToolAssemblyName(formValue.name);\r\n }, []);\r\n\r\n const onAddToolEditToolAssemblies = useCallback(\r\n (tool) => {\r\n setSelectedTools((prevArray) => [...prevArray, tool]);\r\n dispatch(\r\n addNotification({\r\n message: 'Tool added to assembly.',\r\n variant: NOTIFICATION_VARIANTS.SUCCESS,\r\n }),\r\n );\r\n },\r\n [dispatch],\r\n );\r\n\r\n const onSortToolstringItem = useCallback(\r\n ({ oldIndex, newIndex }) => {\r\n if (oldIndex === newIndex) return;\r\n\r\n const tools = [...selectedTools];\r\n const newTools = arrayMoveImmutable(tools, oldIndex, newIndex);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDeleteToolstringItem = useCallback(\r\n (toolAssemblyTool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(toolAssemblyTool);\r\n tools.splice(toolIndex, 1);\r\n setSelectedTools(tools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDuplicateItem = useCallback(\r\n (tool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(tool);\r\n tools.push(tool);\r\n const lastToolIndex = tools.lastIndexOf(tool);\r\n const newTools = arrayMoveImmutable(tools, lastToolIndex, toolIndex + 1);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onSaveToolAssembly = useCallback(() => {\r\n const tools = selectedTools.map((tool) =>\r\n tool.get('id') ? tool.get('id') : tool.get('externalToolId'),\r\n );\r\n const toolAssemblyToSave = {\r\n toolAssemblyId: toolId,\r\n name: toolAssemblyName,\r\n description: toolAssemblyInfo,\r\n toolAssemblyToolsIds: tools,\r\n };\r\n dispatch(updateToolAssembly(toolAssemblyToSave));\r\n }, [selectedTools, dispatch, toolAssemblyInfo, toolAssemblyName, toolId]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SAVE_TOOL_ASSEMBLY,\r\n EQUIPMENT_ACTIONS.GET_TOOL_ASSEMBLY,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n EditToolAssembliesModalContainer,\r\n);\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useEffect, useMemo, useCallback, useState } from 'react';\r\n\r\nimport {\r\n getToolGroupsFromState,\r\n getToolAssembliesFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n onUnload,\r\n onLoadToolAssemblies,\r\n searchToolAssemblies,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n MODAL,\r\n EQIPMENT_CATEGORY_IDS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { getCurrentClientOrganizationIdFromState } from 'app/app.selectors';\r\nimport ToolAssembliesModalContainer from './components/ToolAssembliesModalContainer';\r\nimport { Filters } from 'features/equipment/toolAssemblies/components/ToolAssembliesFilter';\r\nimport ToolAssembliesTable from 'features/equipment/toolAssemblies/components/ToolAssembliesTable';\r\nimport ToolAssembliesFilter from 'features/equipment/toolAssemblies/components/ToolAssembliesFilter';\r\nimport EditToolAssembliesModalContainer from 'features/equipment/toolAssemblies/EditToolAssembliesModalContainer';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.SERIAL_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst ToolAssembliesContainer = ({\r\n classes,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(EQIPMENT_CATEGORY_IDS.TOOL_ASSEMBLIES);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const [addToolAssemblyModal, toggleAddToolAssemblyModal] = useModal(\r\n MODAL.ADD_TOOL_ASSEMBLY,\r\n );\r\n\r\n const [editToolAssemblyModal, toggleEditToolAssemblyModal] = useModal(\r\n MODAL.EDIT_TOOL_ASSEMBLY,\r\n );\r\n\r\n const initialFilterValues = useMemo(\r\n () => ({\r\n ...defaultFormValues,\r\n organizationId: currentClientOrganizationId,\r\n }),\r\n [currentClientOrganizationId],\r\n );\r\n\r\n const tools = useSelector(getToolAssembliesFromState);\r\n const toolGroups = useSelector(getToolGroupsFromState);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n [Filters.SERIAL_SEARCH]: filterValues[Filters.SERIAL_SEARCH],\r\n categoryId: EQIPMENT_CATEGORY_IDS.TOOL_ASSEMBLIES,\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n const [toolId, setTooldId] = useState(null);\r\n\r\n const onEditTool = (toolId) => {\r\n setTooldId(toolId);\r\n toggleEditToolAssemblyModal();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {toolId ? (\r\n \r\n ) : null}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n filterContainer: {\r\n height: 'fit-content',\r\n width: '40%',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnLoad: onLoadToolAssemblies,\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchToolAssemblies,\r\n }),\r\n withStyles(styles),\r\n)(ToolAssembliesContainer);\r\n","import * as yup from 'yup';\r\nimport { compose } from 'redux';\r\nimport { useRef, useCallback, useState } from 'react';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Field, Formik, Form, ErrorMessage } from 'formik';\r\n\r\nimport {\r\n Grid,\r\n IconButton,\r\n Typography,\r\n InputAdornment,\r\n} from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { LoadingOverlay, LoadingButton } from 'altus-ui-components';\r\n\r\nimport {\r\n deleteToolImage,\r\n uploadToolImage,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n EQUIPMENT_ACTIONS,\r\n EDITABLE_TOOL_PROPERTIES,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n unitPlaceholder,\r\n getUnitForProperty,\r\n} from 'features/equipment/equipment.helpers';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport SwitchFormik from 'app/components/form/formik/SwitchFormik';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport YesNoSwitchFormik from 'app/components/form/formik/YesNoSwitchFormik';\r\nimport TextAreaFieldFormik from 'app/components/form/formik/TextAreaFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nexport const FormFields = {\r\n NAME: 'name',\r\n SUPPLIER: 'supplier',\r\n SUPPLIER_PART_NUMBER: 'supplierPartNumber',\r\n GROUP: 'group',\r\n OUTER_DIAMETER: 'outerDiameter',\r\n INNER_DIAMETER: 'innerDiameter',\r\n LENGTH: 'length',\r\n WEIGHT: 'weight',\r\n TOP_CONNECTOR: 'topConnector',\r\n BOTTOM_CONNECTOR: 'bottomConnector',\r\n FISHNECK: 'fishneck',\r\n SAFE_WORKING_LOAD: 'safeWorkingLoad',\r\n YIELD: 'yield',\r\n DESCRIPTION: 'description',\r\n FILE: 'toolImageFile',\r\n TOOL_IMAGE_ID: 'toolImageId',\r\n AXIAL_FRICTION_REDUCED_TO: 'axialFrictionReducedTo',\r\n MAXIMUM_OD: 'maximumOD',\r\n MAXIMUM_STANDOFF_FORCE: 'maximumStandoffForce',\r\n MINIMUM_OD: 'minimumOD',\r\n MINIMUM_STANDOFF_FORCE: 'minimumStandoffForce',\r\n WEIGHT_ABOVE_JARRING_POINT_FACTOR: 'weightAboveJarringPointFactor',\r\n JAR_ACTIVATION_LIMIT_LOW: 'jarActivationLimitLow',\r\n JAR_ACTIVATION_LIMIT_HIGH: 'jarActivationLimitHigh',\r\n ADDITIONAL_NORMAL_FORCE: 'additionalNormalForce',\r\n IS_KNUCKLE_JOINT: 'isKnuckleJoint',\r\n IS_VERIFIED: 'isVerified',\r\n};\r\n\r\nconst MAX_FILE_SIZE = 512 * 1024;\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst AddToolForm = ({\r\n edit,\r\n tool,\r\n classes,\r\n saveTool,\r\n dataState,\r\n toolGroups,\r\n toolSuppliers,\r\n toolConnectors,\r\n initialFormValues,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n}) => {\r\n const initialPlaceholders = {\r\n [FormFields.AXIAL_FRICTION_REDUCED_TO]: unitPlaceholder(\r\n tool,\r\n 'axialFrictionReducedTo',\r\n '0 - 1',\r\n ),\r\n [FormFields.MAXIMUM_OD]: unitPlaceholder(tool, 'maximumOD'),\r\n [FormFields.NAME]:\r\n tool && !tool.isEmpty() ? tool.get('name') : 'Enter name',\r\n [FormFields.SUPPLIER_PART_NUMBER]:\r\n tool && !tool.isEmpty()\r\n ? tool.get('supplierPartNumber')\r\n : 'Enter part number',\r\n [FormFields.OUTER_DIAMETER]: unitPlaceholder(tool, 'outerDiameter'),\r\n [FormFields.INNER_DIAMETER]: unitPlaceholder(tool, 'innerDiameter'),\r\n [FormFields.LENGTH]:\r\n tool && !tool.isEmpty()\r\n ? `${tool.getIn(['length', 'value'])} ${tool.getIn(['length', 'unit'])}`\r\n : '',\r\n [FormFields.WEIGHT]:\r\n tool && !tool.isEmpty()\r\n ? `${tool.getIn(['weight', 'value'])} ${tool.getIn(['weight', 'unit'])}`\r\n : '',\r\n [FormFields.FISHNECK]:\r\n tool && !tool.isEmpty()\r\n ? `${tool.getIn(['fishNeck', 'value'])} ${tool.getIn([\r\n 'fishNeck',\r\n 'unit',\r\n ])}`\r\n : '',\r\n [FormFields.SAFE_WORKING_LOAD]: unitPlaceholder(tool, 'safeWorkingLoad'),\r\n [FormFields.YIELD]: unitPlaceholder(tool, 'yieldValue'),\r\n [FormFields.DESCRIPTION]:\r\n tool && !tool.isEmpty() ? tool.get('description') : '',\r\n [FormFields.MINIMUM_OD]: unitPlaceholder(tool, 'minimumOD'),\r\n [FormFields.MAXIMUM_STANDOFF_FORCE]: unitPlaceholder(\r\n tool,\r\n 'maximumStandoffForce',\r\n ),\r\n [FormFields.MINIMUM_STANDOFF_FORCE]: unitPlaceholder(\r\n tool,\r\n 'minimumStandoffForce',\r\n ),\r\n [FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR]: unitPlaceholder(\r\n tool,\r\n 'weightAboveJarringPointFactor',\r\n '0 - 1',\r\n ),\r\n [FormFields.JAR_ACTIVATION_LIMIT_LOW]: unitPlaceholder(\r\n tool,\r\n 'jarActivationLimitLow',\r\n ),\r\n [FormFields.JAR_ACTIVATION_LIMIT_HIGH]: unitPlaceholder(\r\n tool,\r\n 'jarActivationLimitHigh',\r\n ),\r\n [FormFields.ADDITIONAL_NORMAL_FORCE]: unitPlaceholder(\r\n tool,\r\n 'additionalNormalForce',\r\n ),\r\n };\r\n\r\n const [placeholders, setPlaceholders] = useState(initialPlaceholders);\r\n\r\n const resetPlaceholder = (fieldName) => {\r\n setPlaceholders((prevPlaceholders) => ({\r\n ...prevPlaceholders,\r\n [fieldName]: null,\r\n }));\r\n };\r\n\r\n const schema = yup.object().shape({\r\n additionalNormalForce: yup.number().typeError('Must be a number'),\r\n jarActivationLimitHigh: yup.number().typeError('Must be a number'),\r\n jarActivationLimitLow: yup.number().typeError('Must be a number'),\r\n weightAboveJarringPointFactor: yup\r\n .number()\r\n .nullable(true)\r\n .min(0, 'Value must be greater than or equal to 0')\r\n .max(1, 'Value must be less than or equal to 1')\r\n .typeError('Must be a number'),\r\n minimumStandoffForce: yup.number().typeError('Must be a number'),\r\n maximumStandoffForce: yup.number().typeError('Must be a number'),\r\n minimumOD: yup.number().typeError('Must be a number'),\r\n maximumOD: yup.number().typeError('Must be a number'),\r\n axialFrictionReducedTo: yup\r\n .number()\r\n .nullable(true)\r\n .min(0, 'Value must be greater than or equal to 0')\r\n .max(1, 'Value must be less than or equal to 1'),\r\n name: yup.string().required('Required'),\r\n supplier: yup.string().required('Required'),\r\n supplierPartNumber: yup.string(),\r\n fishneck: yup.string(),\r\n group: yup.number().required('Required').typeError('Required'),\r\n length: yup.number().required('Required').max(60),\r\n outerDiameter: yup.number().required('Required').typeError('Required'),\r\n innerDiameter: yup.number().required('Required').typeError('Required'),\r\n safeWorkingLoad: yup.string(),\r\n weight: yup.string().required('Required'),\r\n yield: yup.string(),\r\n toolImageFile: yup\r\n .mixed()\r\n .nullable()\r\n .notRequired()\r\n .test('FILE_SIZE', 'Uploaded file is too big', (value) => {\r\n if (value && fileRef.current) {\r\n if (fileRef.current.files[0].size <= MAX_FILE_SIZE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n })\r\n .test('FILE_FORMAT', 'Only .png is allowed', (value) => {\r\n if (value && fileRef.current) {\r\n if (fileRef.current.files[0].type === 'image/png') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n }),\r\n });\r\n\r\n const initialEditFormValues = {\r\n ...initialFormValues,\r\n [FormFields.IS_VERIFIED]: tool?.get('isVerified'),\r\n };\r\n\r\n const dispatch = useDispatch();\r\n const fileRef = useRef(null);\r\n\r\n const setValue = useCallback((setValue) => {\r\n setValue(FormFields.TOOL_IMAGE_ID, EMPTY_STRING);\r\n setValue(FormFields.FILE, null);\r\n }, []);\r\n\r\n return (\r\n \r\n {({ isValid, values }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Name*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.NAME);\r\n form.setFieldValue(\r\n FormFields.NAME,\r\n initialFormValues[FormFields.NAME],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Supplier*\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Supplier part number\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.SUPPLIER_PART_NUMBER,\r\n );\r\n form.setFieldValue(\r\n FormFields.SUPPLIER_PART_NUMBER,\r\n initialFormValues[\r\n FormFields.SUPPLIER_PART_NUMBER\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Tool group*\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Outer diameter*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.OUTER_DIAMETER);\r\n form.setFieldValue(\r\n FormFields.OUTER_DIAMETER,\r\n initialFormValues[\r\n FormFields.OUTER_DIAMETER\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.OUTER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Inner diameter*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.INNER_DIAMETER);\r\n form.setFieldValue(\r\n FormFields.INNER_DIAMETER,\r\n initialFormValues[\r\n FormFields.INNER_DIAMETER\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.INNER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Length*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.LENGTH);\r\n form.setFieldValue(\r\n FormFields.LENGTH,\r\n initialFormValues[FormFields.LENGTH],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.LENGTH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n
\r\n \r\n \r\n Weight*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.WEIGHT);\r\n form.setFieldValue(\r\n FormFields.WEIGHT,\r\n initialFormValues[FormFields.WEIGHT],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.WEIGHT,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Top connector\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Bottom connector\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Fishneck\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.FISHNECK);\r\n form.setFieldValue(\r\n FormFields.FISHNECK,\r\n initialFormValues[FormFields.FISHNECK],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.FISHNECK,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Safe working load\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.SAFE_WORKING_LOAD,\r\n );\r\n form.setFieldValue(\r\n FormFields.SAFE_WORKING_LOAD,\r\n initialFormValues[\r\n FormFields.SAFE_WORKING_LOAD\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.SWL,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Yield\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.YIELD);\r\n form.setFieldValue(\r\n FormFields.YIELD,\r\n initialFormValues[FormFields.YIELD],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.YIELD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.DESCRIPTION);\r\n form.setFieldValue(\r\n FormFields.DESCRIPTION,\r\n initialFormValues[FormFields.DESCRIPTION],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Upload image - .png only\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n <>\r\n \r\n {\r\n event.target.value = null;\r\n }}\r\n onChange={(event) => {\r\n if (event.target.files.length > 0) {\r\n form.setTouched({\r\n ...form.touched,\r\n [FormFields.FILE]: true,\r\n });\r\n yup\r\n .reach(schema, FormFields.FILE)\r\n .isValid(event.target.files[0])\r\n .then((valid) => {\r\n form.setFieldValue(\r\n FormFields.FILE,\r\n event.target.files[0],\r\n );\r\n valid === true &&\r\n dispatch(\r\n uploadToolImage(\r\n event.target.files[0],\r\n ),\r\n ).then((payload) => {\r\n form.setFieldValue(\r\n FormFields.TOOL_IMAGE_ID,\r\n payload.toolImageId,\r\n );\r\n });\r\n });\r\n }\r\n }}\r\n {...formik}\r\n />\r\n {\r\n fileRef.current.click();\r\n }}\r\n >\r\n Upload\r\n \r\n \r\n \r\n \r\n {values.toolImageFile &&\r\n values.toolImageFile.name}\r\n \r\n \r\n {values.toolImageFile &&\r\n values.toolImageFile.name && (\r\n \r\n {\r\n if (values.toolImageId) {\r\n dispatch(\r\n deleteToolImage(values.toolImageId),\r\n ).then(setValue(form.setFieldValue));\r\n } else {\r\n setValue(form.setFieldValue);\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{msg}
}\r\n />\r\n
\r\n
\r\n
\r\n \r\n \r\n Axial friction reduced to \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.AXIAL_FRICTION_REDUCED_TO,\r\n );\r\n form.setFieldValue(\r\n FormFields.AXIAL_FRICTION_REDUCED_TO,\r\n initialFormValues[\r\n FormFields.AXIAL_FRICTION_REDUCED_TO\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Centraliser Maximum OD\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.MAXIMUM_OD);\r\n form.setFieldValue(\r\n FormFields.MAXIMUM_OD,\r\n initialFormValues[FormFields.MAXIMUM_OD],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n
\r\n \r\n \r\n Centraliser Minimum OD\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(FormFields.MINIMUM_OD);\r\n form.setFieldValue(\r\n FormFields.MINIMUM_OD,\r\n initialFormValues[FormFields.MINIMUM_OD],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Maximum standoff force\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.MAXIMUM_STANDOFF_FORCE,\r\n );\r\n form.setFieldValue(\r\n FormFields.MAXIMUM_STANDOFF_FORCE,\r\n initialFormValues[\r\n FormFields.MAXIMUM_STANDOFF_FORCE\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Minimum standoff force\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.MINIMUM_STANDOFF_FORCE,\r\n );\r\n form.setFieldValue(\r\n FormFields.MINIMUM_STANDOFF_FORCE,\r\n initialFormValues[\r\n FormFields.MINIMUM_STANDOFF_FORCE\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Weight above jarring point factor\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR,\r\n );\r\n form.setFieldValue(\r\n FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR,\r\n initialFormValues[\r\n FormFields\r\n .WEIGHT_ABOVE_JARRING_POINT_FACTOR\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Jar activation limit low\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.JAR_ACTIVATION_LIMIT_LOW,\r\n );\r\n form.setFieldValue(\r\n FormFields.JAR_ACTIVATION_LIMIT_LOW,\r\n initialFormValues[\r\n FormFields.JAR_ACTIVATION_LIMIT_LOW\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_LOW,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Jar activation limit high\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.JAR_ACTIVATION_LIMIT_HIGH,\r\n );\r\n form.setFieldValue(\r\n FormFields.JAR_ACTIVATION_LIMIT_HIGH,\r\n initialFormValues[\r\n FormFields.JAR_ACTIVATION_LIMIT_HIGH\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_HIGH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Additional normal force\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n resetPlaceholder(\r\n FormFields.ADDITIONAL_NORMAL_FORCE,\r\n );\r\n form.setFieldValue(\r\n FormFields.ADDITIONAL_NORMAL_FORCE,\r\n initialFormValues[\r\n FormFields.ADDITIONAL_NORMAL_FORCE\r\n ],\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.ADDITIONAL_NORMAL_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Is knuckle joint\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Verified\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n saveTool(values);\r\n }}\r\n >\r\n Save\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingTop: 15,\r\n marginBottom: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n form: {\r\n flexDirection: 'column',\r\n },\r\n formLegend: {\r\n flexDirection: 'column',\r\n },\r\n row: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n },\r\n submitBtn: {\r\n justifyContent: 'center',\r\n paddingTop: theme.spacing(4),\r\n },\r\n errorText: {\r\n color: theme.palette.error.main,\r\n },\r\n removeUpload: {\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n removeUploadContainer: {\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n EQUIPMENT_ACTIONS.UPDATE_TOOL,\r\n EQUIPMENT_ACTIONS.UPLOAD_IMAGE,\r\n EQUIPMENT_ACTIONS.DELETE_IMAGE,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(AddToolForm);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport AddToolForm from 'features/equipment/components/AddToolForm';\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport AddToolModalHeader from 'features/equipment/components/AddToolModalHeader';\r\n\r\nconst AddToolModal = ({\r\n open,\r\n tool,\r\n edit,\r\n title,\r\n classes,\r\n saveTool,\r\n onSubmit,\r\n validForm,\r\n dataState,\r\n suppliers,\r\n toolGroups,\r\n toggleModal,\r\n toolConnectors,\r\n requiredFields,\r\n initialFormValues,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n}) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: 'fit-content',\r\n },\r\n content: {\r\n overflow: 'scroll-y',\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n footer: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: theme.spacing(3),\r\n },\r\n filters: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(AddToolModal);\r\n","import { compose } from 'redux';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { useSelector, connect, useDispatch } from 'react-redux';\r\n\r\nimport {\r\n createTool,\r\n onLoadAddToolsModal,\r\n updateTool,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n getToolConnectorsFromState,\r\n getUnitsOfMeasurePreference,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n EQUIPMENT_ACTIONS,\r\n EDITABLE_TOOL_PROPERTIES,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport {\r\n getCurrentClientSelectedUom,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\nimport AddToolModal from 'features/equipment/components/AddToolModal';\r\nimport { FormFields } from 'features/equipment/components/AddToolForm';\r\nimport {\r\n existingThirdPartyToolToToolMapper,\r\n getUnitForProperty,\r\n} from 'features/equipment/equipment.helpers';\r\n\r\nconst initialFormValues = {\r\n [FormFields.NAME]: EMPTY_STRING,\r\n [FormFields.SUPPLIER]: null,\r\n [FormFields.SUPPLIER_PART_NUMBER]: EMPTY_STRING,\r\n [FormFields.GROUP]: null,\r\n [FormFields.OUTER_DIAMETER]: EMPTY_STRING,\r\n [FormFields.INNER_DIAMETER]: EMPTY_STRING,\r\n [FormFields.LENGTH]: EMPTY_STRING,\r\n [FormFields.WEIGHT]: EMPTY_STRING,\r\n [FormFields.TOP_CONNECTOR]: null,\r\n [FormFields.BOTTOM_CONNECTOR]: null,\r\n [FormFields.FISHNECK]: EMPTY_STRING,\r\n [FormFields.SAFE_WORKING_LOAD]: EMPTY_STRING,\r\n [FormFields.YIELD]: EMPTY_STRING,\r\n [FormFields.DESCRIPTION]: EMPTY_STRING,\r\n [FormFields.FILE]: null,\r\n [FormFields.TOOL_IMAGE_ID]: EMPTY_STRING,\r\n [FormFields.MAXIMUM_OD]: EMPTY_STRING,\r\n [FormFields.MAXIMUM_STANDOFF_FORCE]: EMPTY_STRING,\r\n [FormFields.MINIMUM_OD]: EMPTY_STRING,\r\n [FormFields.MINIMUM_STANDOFF_FORCE]: EMPTY_STRING,\r\n [FormFields.JAR_ACTIVATION_LIMIT_LOW]: EMPTY_STRING,\r\n [FormFields.JAR_ACTIVATION_LIMIT_HIGH]: EMPTY_STRING,\r\n [FormFields.ADDITIONAL_NORMAL_FORCE]: EMPTY_STRING,\r\n [FormFields.IS_KNUCKLE_JOINT]: false,\r\n [FormFields.IS_VERIFIED]: false,\r\n [FormFields.AXIAL_FRICTION_REDUCED_TO]: EMPTY_STRING,\r\n [FormFields.WEIGHT_ABOVE_JARRING_POINT_FACTOR]: EMPTY_STRING,\r\n};\r\n\r\nconst AddToolModalContainer = ({\r\n edit,\r\n tool,\r\n title,\r\n toolId,\r\n openModal,\r\n suppliers,\r\n dataState,\r\n toolGroups,\r\n toggleModal,\r\n existingTool,\r\n dispatchOnLoad,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const toolConnectors = useSelector(getToolConnectorsFromState);\r\n const unitsOfMeasurePreference = useSelector(getUnitsOfMeasurePreference);\r\n const selectedCustomUnitsOfMeasure = useSelector(getCurrentClientSelectedUom);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n }, [dispatchOnLoad]);\r\n\r\n const saveTool = useCallback(\r\n (formValues) => {\r\n const tool = {\r\n topConnectorId: formValues.topConnector,\r\n bottomConnectorId: formValues.bottomConnector,\r\n name: formValues.name,\r\n toolGroupId: formValues.group,\r\n supplier: formValues.supplier,\r\n supplierPartNumber: formValues.supplierPartNumber,\r\n description: formValues.description,\r\n outerDiameter: {\r\n value: formValues.outerDiameter,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.OUTER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n innerDiameter: {\r\n value: formValues.innerDiameter,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.INNER_DIAMETER,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n length: {\r\n value: formValues.length,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.LENGTH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n weight: {\r\n value: formValues.weight,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.WEIGHT,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n fishNeck: {\r\n value: formValues.fishneck,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.FISHNECK,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n safeWorkingLoad: {\r\n value: formValues.safeWorkingLoad,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.SWL,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n yield: {\r\n value: formValues.yield,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.YIELD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n toolImageId: formValues.toolImageId,\r\n maximumOD: {\r\n value: formValues.maximumOD,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n maximumStandoffForce: {\r\n value: formValues.maximumStandoffForce,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MAXIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n minimumOD: {\r\n value: formValues.minimumOD,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_OD,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n minimumStandoffForce: {\r\n value: formValues.minimumStandoffForce,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.MINIMUM_STANDOFF_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n jarActivationLimitLow: {\r\n value: formValues.jarActivationLimitLow,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_LOW,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n jarActivationLimitHigh: {\r\n value: formValues.jarActivationLimitHigh,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.JAR_ACTIVATION_LIMIT_HIGH,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n additionalNormalForce: {\r\n value: formValues.additionalNormalForce,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.ADDITIONAL_NORMAL_FORCE,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n isKnuckleJoint: formValues.isKnuckleJoint,\r\n isVerified: formValues.isVerified,\r\n axialFrictionReducedTo: {\r\n value: formValues.axialFrictionReducedTo,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.AXIAL_FRICTION_REDUCED_TO,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n weightAboveJarringPointFactor: {\r\n value: formValues.weightAboveJarringPointFactor,\r\n unit: getUnitForProperty(\r\n EDITABLE_TOOL_PROPERTIES.WEIGHT_ABOVE_JARRING_POINT_FACTOR,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ),\r\n },\r\n };\r\n if (edit) {\r\n tool.toolId = parseInt(toolId);\r\n tool.referenceNumber = ThirdPartyLabel;\r\n tool.m3ItemNumber = ThirdPartyLabel;\r\n const newTool = existingThirdPartyToolToToolMapper(tool, existingTool);\r\n dispatch(updateTool(newTool));\r\n } else {\r\n dispatch(createTool(tool));\r\n }\r\n },\r\n [\r\n edit,\r\n toolId,\r\n dispatch,\r\n existingTool,\r\n unitsOfMeasurePreference,\r\n selectedCustomUnitsOfMeasure,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadAddToolsModal,\r\n};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n AddToolModalContainer,\r\n);\r\n","import { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n TOOL_GROUPS: 'toolGroupIds',\r\n SUPPLIER_SEARCH: 'supplierSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst ThirdPartyToolsFilter = ({\r\n classes,\r\n onSubmit,\r\n toolGroups,\r\n toolSuppliers,\r\n initialValues,\r\n toggleAddToolModal,\r\n}) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n toggleAddToolModal(true)}\r\n >\r\n Add tool\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(ThirdPartyToolsFilter);\r\n","import { Link } from 'react-router-dom';\r\nimport { useMemo, useCallback } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { toTool } from 'utils/route.util';\r\nimport { Grid } from 'app/components/withTooltip';\r\n\r\nimport { Table, TableRow } from 'altus-ui-components';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\n\r\nimport ToolImageTableCell from 'app/components/ToolImageTableCell';\r\n\r\nconst ThirdPartyToolsTable = ({ tools, toolCategory, ...rest }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 3,\r\n Header: 'Item no.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n\r\n return (\r\n Open tool}>\r\n {tool.get('m3ItemNumber')}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'toolImage',\r\n Header: 'Image',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 3,\r\n Header: '3rd Party',\r\n accessor: (tool) => tool.get('supplier'),\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => (\r\n \r\n \r\n \r\n ),\r\n [toolCategory],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ThirdPartyToolsTable;\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport { useEffect, useMemo, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { EMPTY_LIST, EMPTY_STRING } from 'app/app.constants';\r\nimport { getCurrentClientOrganizationIdFromState } from 'app/app.selectors';\r\n\r\nimport {\r\n getToolsFromState,\r\n getToolGroupsFromState,\r\n getToolSuppliersFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n onLoadWithoutToolstrings as onLoad,\r\n onUnload,\r\n searchTools,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n MODAL,\r\n EQIPMENT_CATEGORY_IDS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport AddToolModalContainer from 'features/equipment/components/AddToolModalContainer';\r\nimport { Filters } from 'features/equipment/thirdPartyTools/components/ThirdPartyToolsFilter';\r\nimport ThirdPartyToolsTable from 'features/equipment/thirdPartyTools/components/ThirdPartyToolsTable';\r\nimport ThirdPartyToolsFilter from 'features/equipment/thirdPartyTools/components/ThirdPartyToolsFilter';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TOOL_GROUPS]: EMPTY_LIST,\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.SUPPLIER_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst ThirdPartyToolsContainer = ({\r\n classes,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(EQIPMENT_CATEGORY_IDS.THIRD_PARTY_TOOLS);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const initialFilterValues = useMemo(\r\n () => ({\r\n ...defaultFormValues,\r\n organizationId: currentClientOrganizationId,\r\n }),\r\n [currentClientOrganizationId],\r\n );\r\n\r\n const [addToolModal, toggleAddToolModal] = useModal(MODAL.ADD_TOOL);\r\n\r\n const tools = useSelector(getToolsFromState);\r\n const toolGroups = useSelector(getToolGroupsFromState);\r\n const toolSuppliers = useSelector(getToolSuppliersFromState);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n categoryId: EQIPMENT_CATEGORY_IDS.THIRD_PARTY_TOOLS,\r\n [Filters.TOOL_GROUPS]:\r\n filterValues[Filters.TOOL_GROUPS] === '' ||\r\n filterValues[Filters.TOOL_GROUPS] === EMPTY_LIST\r\n ? null\r\n : [filterValues[Filters.TOOL_GROUPS]],\r\n [Filters.SUPPLIER_SEARCH]: filterValues[Filters.SUPPLIER_SEARCH],\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n filterContainer: {\r\n height: 'fit-content',\r\n width: '40%',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchTools,\r\n }),\r\n withStyles(styles),\r\n)(ThirdPartyToolsContainer);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { List, isImmutable } from 'immutable';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Tooltip, IconButton } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport { getQuantityUnitFromItems } from 'utils/app.util';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport ToolImageTableCell from 'app/components/ToolImageTableCell';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('toolStringItems')?.toArray().reverse()\r\n : row.original?.toolStringItems?.toArray().reverse();\r\n\r\nconst BhaTemplatesTable = ({\r\n classes,\r\n bhaTemplates,\r\n onEditTemplate,\r\n ...rest\r\n}) => {\r\n const initialState = useMemo(\r\n () => ({\r\n ...defaultInitialState,\r\n sortBy: [\r\n {\r\n id: 'sequence',\r\n desc: false,\r\n },\r\n ],\r\n }),\r\n [],\r\n );\r\n\r\n const lengthUnit = getQuantityUnitFromItems(bhaTemplates, (result) =>\r\n result.get('length'),\r\n );\r\n\r\n const weightUnit = getQuantityUnitFromItems(bhaTemplates, (result) =>\r\n result.get('weight'),\r\n );\r\n\r\n const diameterUnit = getQuantityUnitFromItems(bhaTemplates, (result) =>\r\n result.get('outerDiameter'),\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Header: '',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n\r\n if (row.canExpand) {\r\n const toolStringItems = tool.get('toolStringItems').toJS();\r\n const hasNullDataVerified = toolStringItems.some((item) => {\r\n const verifiedDataExists = item.verifiedData ?? item.dataVerified;\r\n return verifiedDataExists === false;\r\n });\r\n\r\n if (hasNullDataVerified) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n const verifiedData =\r\n tool.get('dataVerified') ?? tool.get('verifiedData');\r\n if (!verifiedData) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n }\r\n },\r\n },\r\n {\r\n xs: 11,\r\n id: 'image',\r\n Header: 'Image',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n\r\n const toolStringItems = getSubRows(tool);\r\n\r\n const bhaLength = tool.getIn(['length', 'roundedValue']);\r\n\r\n if (!row.canExpand && tool.get('toolAssemblyTools')) {\r\n const tools = tool.get('toolAssemblyTools');\r\n return (\r\n \r\n {tools.map((tool, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n\r\n if (!tool.get('imageUrl') && toolStringItems) {\r\n const updatedToolStringItems = toolStringItems.map((item) => {\r\n const lengthRoundedValue = item.getIn(['length', 'roundedValue']);\r\n const ratio = (lengthRoundedValue / bhaLength) * 100;\r\n return item.set('ratio', ratio);\r\n });\r\n return (\r\n \r\n {updatedToolStringItems.map((item, index) => {\r\n const toolAssemblyTools = item.get('toolAssemblyTools');\r\n if (toolAssemblyTools) {\r\n const assemblyLength = item.get('ratio');\r\n const totalLengthOfTools = toolAssemblyTools.reduce(\r\n (total, tool) => total + tool.length.roundedValue,\r\n 0,\r\n );\r\n\r\n toolAssemblyTools.forEach((tool) => {\r\n const lengthRoundedValue = tool.length.roundedValue;\r\n const toolPercentOfAssembly =\r\n (lengthRoundedValue / totalLengthOfTools) * 100;\r\n tool.ratio =\r\n (toolPercentOfAssembly / 100) * assemblyLength;\r\n });\r\n return toolAssemblyTools.map((tool, index) => {\r\n return (\r\n \r\n );\r\n });\r\n }\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n id: 'length',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['length', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'weight',\r\n Header: (\r\n \r\n ),\r\n accessor: (template) =>\r\n formatValue(template.getIn(['weight', 'value']), '', 0.01),\r\n },\r\n {\r\n xs: 2,\r\n id: 'outerDiameter',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['outerDiameter', 'value']), '', 0.01),\r\n Header: () => (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'editTool',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n\r\n if (row.canExpand) {\r\n return (\r\n \r\n \r\n \r\n onEditTemplate(tool.get('id'))} />\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n },\r\n },\r\n ],\r\n [\r\n lengthUnit,\r\n weightUnit,\r\n diameterUnit,\r\n onEditTemplate,\r\n classes.warningIcon,\r\n classes.toolContainer,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nBhaTemplatesTable.propTypes = {\r\n tools: PropTypes.instanceOf(List),\r\n};\r\n\r\nconst styles = (theme) => ({\r\n rowActionCell: {\r\n paddingRght: '10px',\r\n },\r\n mainDiv: {\r\n transform: `rotate(${90}deg)`,\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n maxHeight: '100%',\r\n },\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(BhaTemplatesTable);\r\n","import { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport React, { forwardRef, useImperativeHandle, useRef } from 'react';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst ThirdPartyToolsFilter = forwardRef(\r\n ({ classes, onSubmit, initialValues, toggleAddBhaTemplateModal }, ref) => {\r\n const formikRef = useRef();\r\n\r\n useImperativeHandle(ref, () => ({\r\n submitForm: () => {\r\n formikRef.current?.submitForm();\r\n },\r\n }));\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {\r\n toggleAddBhaTemplateModal(true);\r\n }}\r\n >\r\n Add BHA template\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(ThirdPartyToolsFilter);\r\n","import { isNil } from 'lodash';\r\nimport { compose } from 'redux';\r\nimport { useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Dialog, CircularProgress, Box, Grid, Button } from '@material-ui/core';\r\n\r\nimport { ModalActions } from 'altus-ui-components';\r\n\r\nimport {\r\n updateTemplate,\r\n sortTemplateTools,\r\n deleteTemplateTool,\r\n duplicateTemplateItem,\r\n sortTemplateAssemblyTools,\r\n deleteTemplateToolAssemblyTool,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport { ToolType } from 'features/projects/tool/tool.constants';\r\nimport TaskToolstringTotals from 'features/projects/tasks/task/toolstring/components/TaskToolstringTotals';\r\nimport TaskToolstringEditorAppBar from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorAppBar';\r\nimport TaskToolstringEditorContent from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorContent';\r\n\r\nconst EditTemplateContent = ({\r\n open,\r\n classes,\r\n onClose,\r\n onAddTools,\r\n toolstring,\r\n loadingState,\r\n toolstringId,\r\n toolConnectors,\r\n toolstringTools,\r\n toolstringSections,\r\n onAddToolAttachments,\r\n onSortToolAttachments,\r\n onDeleteToolAttachments,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const hiddenColumns = ['serialNo'];\r\n\r\n const onDuplicateItem = (tool) => {\r\n dispatch(duplicateTemplateItem(toolstringId, tool));\r\n };\r\n\r\n const onSortToolstringTool = ({ oldIndex, newIndex, collection, nodes }) => {\r\n if (oldIndex === newIndex) return;\r\n const type = nodes?.[oldIndex]?.node?.getAttribute('data-tool-type');\r\n const toolType = Number(type);\r\n\r\n // tool assembly tools\r\n if (\r\n !isNil(collection) &&\r\n (isNil(type) || toolType === ToolType.ASSEMBLY_TOOL)\r\n ) {\r\n const toolstringAssembly = toolstringTools.get(collection);\r\n\r\n const toolAssemblyTools = toolstringAssembly.get('toolAssemblyTools');\r\n\r\n const sortedToolstringAssemblyTool = toolAssemblyTools.get(oldIndex);\r\n const affectedToolstringAssemblyTool = toolAssemblyTools.get(newIndex);\r\n\r\n dispatch(\r\n sortTemplateAssemblyTools(\r\n toolstringId,\r\n toolstringAssembly.get('toolstringItemId'),\r\n sortedToolstringAssemblyTool,\r\n affectedToolstringAssemblyTool,\r\n ),\r\n );\r\n } else {\r\n if (toolType === ToolType.TOOL || toolType === ToolType.ASSEMBLY) {\r\n const sortedToolstringItem = toolstringTools.get(oldIndex);\r\n const affectedToolstringItem = toolstringTools.get(newIndex);\r\n\r\n dispatch(\r\n sortTemplateTools(\r\n toolstringId,\r\n sortedToolstringItem,\r\n affectedToolstringItem,\r\n ),\r\n );\r\n } else if (toolType === ToolType.ATTACHMENT) {\r\n const owner = toolstringTools.get(collection);\r\n const sortedToolStringAttachment = owner.getIn([\r\n 'attachedTools',\r\n oldIndex,\r\n ]);\r\n const affectedToolStringAttachment = owner.getIn([\r\n 'attachedTools',\r\n newIndex,\r\n ]);\r\n\r\n onSortToolAttachments(\r\n owner.get('toolstringItemId'),\r\n sortedToolStringAttachment,\r\n affectedToolStringAttachment,\r\n );\r\n } else {\r\n throw new Error(`Unknown tool type ${toolType}`);\r\n }\r\n }\r\n };\r\n\r\n const updateItemProperties = () => {};\r\n\r\n const onDeleteToolstringTool = (tool) => {\r\n dispatch(deleteTemplateTool(tool.get('toolstringItemId'), toolstringId));\r\n };\r\n\r\n const onAddToolAssemblyTools = () => {};\r\n\r\n const onDeleteToolAssemblyTool = (tool) => {\r\n dispatch(\r\n deleteTemplateToolAssemblyTool(\r\n tool.get('toolAssemblyToolId'),\r\n toolstringId,\r\n ),\r\n );\r\n };\r\n\r\n const onUpdateToolstring = (fields) => {\r\n dispatch(updateTemplate(toolstringId, fields));\r\n };\r\n\r\n return (\r\n \r\n \r\n {loadingState.isLoading() ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n actions: {\r\n padding: `${theme.spacing(2)}px ${theme.spacing(4)}px`,\r\n },\r\n saveButton: {\r\n paddingRight: theme.spacing(5),\r\n paddingLeft: theme.spacing(5),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(EditTemplateContent);\r\n","import { useState, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n addTemplateTool,\r\n getBhaTemplateForEditing,\r\n unloadBhaTemplateForEditing,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n getTemplateForEditFromState,\r\n getTemplateSectionsForEditFromState,\r\n getTemplateToolstringToolsFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n requestCreateToolstringTemplateAttachment,\r\n requestDeleteToolstringTemplateAttachment,\r\n requestSortToolstringTemplateAttachments,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport useDataState from 'app/hooks/useDataState';\r\nimport {\r\n MODAL as TOOL_MODAL,\r\n ToolCategoryType,\r\n} from 'features/projects/tool/tool.constants';\r\nimport { requestToolConnectors } from 'features/projects/tool/tool.actions';\r\nimport { getToolConnectorsFromState } from 'features/projects/tool/tool.selector';\r\nimport ToolPickerModalContainer from 'features/projects/tool/components/ToolPickerModalContainer';\r\nimport EditTemplateContent from 'features/equipment/bhaTemplates/editBhaTemplates/EditTemplateContent';\r\n\r\nconst toolstringItemCategories = [\r\n ToolCategoryType.MWL,\r\n ToolCategoryType.EWL,\r\n ToolCategoryType.ThirdParty,\r\n ToolCategoryType.Assemblies,\r\n];\r\n\r\nconst toolstringAttachmentCategories = [\r\n ToolCategoryType.MWL,\r\n ToolCategoryType.EWL,\r\n ToolCategoryType.ThirdParty,\r\n];\r\n\r\nconst EditTemplateContainer = ({ open, templateId, onClose }) => {\r\n const dispatch = useDispatch();\r\n\r\n const loadingState = useDataState([\r\n EQUIPMENT_ACTIONS.CREATE_TEMPLATE_TOOL,\r\n EQUIPMENT_ACTIONS.REQUEST_BHA_TEMPLATE_FOR_EDITING,\r\n EQUIPMENT_ACTIONS.REQUEST_BHA_TEMPLATE_SECTIONS_FOR_EDITING,\r\n ]);\r\n\r\n const [toolstringItemModalOpen, toggleToolstringItemModal] = useModal(\r\n MODAL.EDIT_BHA_ADD_TOOL_MODAL,\r\n );\r\n\r\n const templateToEdit = useSelector(getTemplateForEditFromState);\r\n const templateSectionsToEdit = useSelector(\r\n getTemplateSectionsForEditFromState,\r\n );\r\n const toolConnectors = useSelector(getToolConnectorsFromState);\r\n const toolstringTools = useSelector(getTemplateToolstringToolsFromState);\r\n\r\n useEffect(() => {\r\n dispatch(getBhaTemplateForEditing(templateId));\r\n dispatch(requestToolConnectors());\r\n\r\n return () => {\r\n dispatch(unloadBhaTemplateForEditing());\r\n };\r\n }, [dispatch, templateId]);\r\n\r\n const onAddToolstringItem = (tool) => {\r\n dispatch(addTemplateTool(templateId, tool));\r\n };\r\n\r\n const onExitAddTool = () => {\r\n dispatch(getBhaTemplateForEditing(templateId));\r\n };\r\n\r\n const [selectedToolAttachmentOwner, setSelectedToolAttachmentOwner] =\r\n useState();\r\n\r\n const [toolstringAttachToolModalOpen, toggleToolstringAttachToolModalOpen] =\r\n useModal(TOOL_MODAL.ATTACH_TOOL_PICKER_MODAL_ID);\r\n\r\n const onAddToolAttachments = (tool) => {\r\n toggleToolstringAttachToolModalOpen();\r\n setSelectedToolAttachmentOwner(tool);\r\n };\r\n\r\n const onAttachTool = (tool) =>\r\n dispatch(\r\n requestCreateToolstringTemplateAttachment(\r\n templateId,\r\n selectedToolAttachmentOwner,\r\n tool,\r\n ),\r\n );\r\n\r\n const onDeleteTemplateAttachment = (toolStringAttachment) =>\r\n dispatch(\r\n requestDeleteToolstringTemplateAttachment(\r\n templateId,\r\n toolStringAttachment.get('attachmentOwnerId'),\r\n toolStringAttachment.get('toolstringItemId'),\r\n ),\r\n );\r\n\r\n const onSortTemplateAttachments = (\r\n ownerToolstringItemId,\r\n sortedToolStringAttachment,\r\n affectedToolStringAttachment,\r\n ) =>\r\n dispatch(\r\n requestSortToolstringTemplateAttachments(\r\n templateId,\r\n ownerToolstringItemId,\r\n sortedToolStringAttachment,\r\n affectedToolStringAttachment,\r\n ),\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditTemplateContainer;\r\n","import { compose } from 'redux';\r\nimport { isImmutable } from 'immutable';\r\nimport DeleteIcon from '@material-ui/icons/Close';\r\nimport { memo, useMemo, useCallback } from 'react';\r\nimport { sortableElement } from 'react-sortable-hoc';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nimport {\r\n DragHandle,\r\n SortableTable,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport { ToolCategoryType } from 'features/projects/tool/tool.constants';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport ToolstringToolsTableRow from 'features/projects/tasks/task/toolstring/components/ToolstringToolsTableRow';\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('toolAssemblyTools')?.toArray()\r\n : row.original?.toolAssemblyTools?.toArray();\r\n\r\nconst SortableFormikRow = sortableElement(EditableTableRowFormik);\r\n\r\nconst BhaTemplatesCreatorTable = ({\r\n classes,\r\n toolstringTools = EMPTY_MAP,\r\n onDuplicateItem,\r\n onSortToolstringTool,\r\n updateItemProperties,\r\n onDeleteToolstringItem,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 2,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const actions = [\r\n {\r\n visible: !row.depth,\r\n content: ,\r\n },\r\n {\r\n visible: row.canExpand,\r\n content: (\r\n \r\n {row.isExpanded ? : }\r\n \r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {actions\r\n .filter((action) => action.visible)\r\n .map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'toolItemNo',\r\n Header: 'Item No.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n Cell: ({ value, row }) => (\r\n \r\n {value\r\n ? row.original.get('toolGroupCategory') !==\r\n ToolCategoryType.ThirdParty\r\n ? `#${value}`\r\n : value\r\n : null}\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const { original: toolstringItem } = row;\r\n const actions = [\r\n {\r\n visible: row.depth === 0,\r\n content: (\r\n onDuplicateItem(toolstringItem)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n {\r\n visible: row.depth === 0,\r\n content: (\r\n onDeleteToolstringItem(toolstringItem)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {actions\r\n .filter((action) => action.visible)\r\n .map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [onDuplicateItem, onDeleteToolstringItem, classes],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateItemProperties],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n scrollable: {\r\n overflowY: 'auto',\r\n },\r\n actions: {\r\n direction: 'row',\r\n justifyContent: 'flex-end',\r\n width: '100%',\r\n },\r\n});\r\n\r\nexport default compose(memo, withStyles(styles))(BhaTemplatesCreatorTable);\r\n","import * as yup from 'yup';\r\nimport { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Fab, Typography } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport TextAreaFieldFormik from 'app/components/form/formik/TextAreaFieldFormik';\r\n\r\nexport const FormFields = {\r\n name: 'name',\r\n description: 'description',\r\n m3ItemNumber: 'm3ItemNumber',\r\n};\r\n\r\nconst AddBhaTemplatesInformationContainer = ({\r\n classes,\r\n setBhaTemplateInfo,\r\n toggleAddToolAssemblyToBhaModal,\r\n}) => {\r\n const initialValues = useMemo(\r\n () => ({\r\n [FormFields.name]: '',\r\n [FormFields.description]: '',\r\n [FormFields.m3ItemNumber]: null,\r\n }),\r\n [],\r\n );\r\n\r\n const schema = yup.object().shape({\r\n name: yup.string().required('Required'),\r\n });\r\n\r\n const onSubmitForm = (formValue) => {\r\n setBhaTemplateInfo(formValue);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Add Tool\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {/* WAITING FOR FEATURE APPROVAL AND DESIGN */}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n height: 'fit-content',\r\n flexDirection: 'column',\r\n border: `1px solid ${theme.palette.divider}`,\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(3),\r\n },\r\n wrapper: {\r\n height: 'fit-content',\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(AddBhaTemplatesInformationContainer);\r\n","import { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport { fromJS } from 'immutable';\r\nimport { useCallback } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport TaskToolstringPreview from 'features/projects/tasks/task/toolstring/components/TaskToolstringPreview';\r\nimport BhaTemplatesCreatorTable from 'features/equipment/bhaTemplates/addBhaTemplates/BhaTemplatesCreatorTable';\r\nimport ToolstringItemHighlightProvider from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\nimport AddBhaTemplatesInformationContainer from 'features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesInformationContainer';\r\n\r\nconst BhaTemplatesCreator = ({\r\n classes,\r\n selectedTools,\r\n onDuplicateItem,\r\n onSortToolstringItem,\r\n onDeleteToolstringItem,\r\n toggleAddToolAssemblyToBhaModal,\r\n setBhaTemplateInfo,\r\n}) => {\r\n const createToolstringSections = useCallback((selectedTools) => {\r\n if (selectedTools.length > 0) {\r\n const length = 1;\r\n const items = List(selectedTools).toJS();\r\n const obj = {\r\n length,\r\n items,\r\n };\r\n return [obj];\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n container: {\r\n height: '100%',\r\n },\r\n content: {\r\n height: '100%',\r\n },\r\n header: {\r\n height: '10%',\r\n },\r\n information: {\r\n paddingLeft: theme.spacing(5),\r\n paddingRight: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(BhaTemplatesCreator);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst AddBhaTemplatesModalHeader = ({ title, closeModal }) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = () => ({});\r\n\r\nexport default compose(withStyles(styles))(AddBhaTemplatesModalHeader);\r\n","import { compose } from 'redux';\r\nimport { memo, useCallback } from 'react';\r\nimport { Grid, Button, Box } from '@material-ui/core';\r\n\r\nconst AddBhaTemplatesModalFooter = ({\r\n bhaTemplateInfo,\r\n selectedTools,\r\n onSaveBhaTemplate,\r\n}) => {\r\n const checkSaveDisabled = useCallback(() => {\r\n if (\r\n bhaTemplateInfo !== null &&\r\n bhaTemplateInfo.name !== '' &&\r\n selectedTools.length > 0\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }, [selectedTools, bhaTemplateInfo]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(memo)(AddBhaTemplatesModalFooter);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport BhaTemplatesCreator from 'features/equipment/bhaTemplates/addBhaTemplates/BhaTemplatesCreator';\r\nimport AddBhaTemplatesModalHeader from 'features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModalHeader';\r\nimport AddBhaTemplatesModalFooter from 'features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModalFooter';\r\n\r\nconst AddBhaTemplatesModal = ({\r\n open,\r\n classes,\r\n toggleModal,\r\n bhaTemplateInfo,\r\n onSaveBhaTemplate,\r\n toggleAddToolAssemblyToBhaModal,\r\n onSortToolstringItem,\r\n onDeleteToolstringItem,\r\n onDuplicateItem,\r\n selectedTools,\r\n setBhaTemplateInfo,\r\n dataState,\r\n}) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n // height: 'fit-content',\r\n },\r\n content: {\r\n overflow: 'scroll-y',\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n footer: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n filters: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(AddBhaTemplatesModal);\r\n","import { compose } from 'redux';\r\nimport { useCallback, useState } from 'react';\r\nimport { arrayMoveImmutable } from 'array-move';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n} from 'app/app.selectors';\r\n\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport { saveBhaTemplate } from 'features/equipment/equipment.actions';\r\nimport { ToolCategoryType } from 'features/projects/tool/tool.constants';\r\nimport ToolPickerModalContainer from 'features/projects/tool/components/ToolPickerModalContainer';\r\nimport AddBhaTemplatesModal from 'features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModal';\r\n\r\nconst TOOL_TYPES = {\r\n Individual: 1,\r\n Assembly: 2,\r\n};\r\n\r\nconst toolstringItemCategories = [\r\n ToolCategoryType.MWL,\r\n ToolCategoryType.EWL,\r\n ToolCategoryType.ThirdParty,\r\n ToolCategoryType.Assemblies,\r\n];\r\n\r\nconst AddBhaTemplatesModalContainer = ({\r\n openModal,\r\n dataState,\r\n toggleModal,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [selectedTools, setSelectedTools] = useState([]);\r\n const [bhaTemplateInfo, setBhaTemplateInfo] = useState(null);\r\n\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n );\r\n\r\n const [toolAssemblyItemModalOpen, toggleToolAssemblyItemModal] = useModal(\r\n MODAL.ADD_TOOL_TO_TOOL_ASSEMBLY,\r\n );\r\n\r\n const onAddTool = useCallback(\r\n (tool) => {\r\n setSelectedTools((prevArray) => [...prevArray, tool]);\r\n dispatch(\r\n addNotification({\r\n message: 'Tool added to assembly.',\r\n variant: NOTIFICATION_VARIANTS.SUCCESS,\r\n }),\r\n );\r\n },\r\n [dispatch],\r\n );\r\n\r\n const onSortToolstringItem = useCallback(\r\n ({ oldIndex, newIndex }) => {\r\n if (oldIndex === newIndex) return;\r\n\r\n const tools = [...selectedTools];\r\n const newTools = arrayMoveImmutable(tools, oldIndex, newIndex);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDeleteToolstringItem = useCallback(\r\n (toolAssemblyTool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(toolAssemblyTool);\r\n tools.splice(toolIndex, 1);\r\n setSelectedTools(tools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDuplicateItem = useCallback(\r\n (tool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(tool);\r\n tools.push(tool);\r\n const lastToolIndex = tools.lastIndexOf(tool);\r\n const newTools = arrayMoveImmutable(tools, lastToolIndex, toolIndex + 1);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onSaveBhaTemplate = useCallback(() => {\r\n const sortedTools = selectedTools.map((tool) => {\r\n if (tool.get('toolAssemblyTools').size === 0) {\r\n return {\r\n id: tool.get('id'),\r\n type: TOOL_TYPES.Individual,\r\n };\r\n } else {\r\n return {\r\n id: tool.get('id'),\r\n type: TOOL_TYPES.Assembly,\r\n };\r\n }\r\n });\r\n const bhaToSave = {\r\n name: bhaTemplateInfo.name,\r\n description: bhaTemplateInfo.description,\r\n m3ItemNumber: bhaTemplateInfo.m3ItemNumber,\r\n organizationId: currentClientOrganizationId,\r\n tools: sortedTools,\r\n };\r\n dispatch(saveBhaTemplate(bhaToSave));\r\n }, [selectedTools, dispatch, bhaTemplateInfo, currentClientOrganizationId]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SAVE_BHA_TEMPLATE,\r\n ),\r\n});\r\n\r\nexport default compose(connect(mapStateToProps))(AddBhaTemplatesModalContainer);\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useSelector, connect, useDispatch } from 'react-redux';\r\nimport { useEffect, useCallback, useRef, useState } from 'react';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n onUnload,\r\n searchBhas,\r\n getAllToolStrings,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { MODAL } from 'features/equipment/equipment.constants';\r\nimport { getBhaTemplatesFromState } from 'features/equipment/equipment.selectors';\r\nimport { Filters } from 'features/equipment/toolAssemblies/components/ToolAssembliesFilter';\r\nimport BhaTemplatesTable from 'features/equipment/bhaTemplates/components/BhaTemplatesTable';\r\nimport BhaTemplatesFilter from 'features/equipment/bhaTemplates/components/BhaTemplatesFilter';\r\nimport EditTemplateContainer from 'features/equipment/bhaTemplates/editBhaTemplates/EditTemplateContainer';\r\nimport AddBhaTemplatesModalContainer from 'features/equipment/bhaTemplates/addBhaTemplates/AddBhaTemplatesModalContainer';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst BhaTemplateContainer = ({\r\n classes,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnUnload]);\r\n\r\n const [addBhaTemplateModal, toggleAddBhaTemplateModal] = useModal(\r\n MODAL.ADD_BHA_TEMPLATE,\r\n );\r\n\r\n const [editBhaTemplateModal, toggleEditBhaTemplateModal] = useModal(\r\n MODAL.EDIT_BHA_TEMPLATE,\r\n );\r\n\r\n const [initialFilterValues] = useState(defaultFormValues);\r\n\r\n const formRef = useRef(null);\r\n\r\n const submitForm = () => {\r\n formRef.current?.submitForm();\r\n };\r\n\r\n const [templateIdForEdit, setTemplateIdForEdit] = useState(null);\r\n\r\n const bhaTemplates = useSelector(getBhaTemplatesFromState);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n const onEditTemplate = (templateId) => {\r\n setTemplateIdForEdit(templateId);\r\n toggleEditBhaTemplateModal();\r\n };\r\n\r\n const onCloseEditTemplate = () => {\r\n setTemplateIdForEdit(null);\r\n dispatch(getAllToolStrings());\r\n toggleEditBhaTemplateModal();\r\n submitForm();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {editBhaTemplateModal && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n filterContainer: {\r\n height: 'fit-content',\r\n width: '40%',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchBhas,\r\n }),\r\n withStyles(styles),\r\n)(BhaTemplateContainer);\r\n","import { Field, Formik, Form } from 'formik';\r\n\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n TOOL_GROUPS: 'equipmentGroupIds',\r\n SERIAL_SEARCH: 'serialSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst SurfaceEquipmentFilter = ({\r\n classes,\r\n onSubmit,\r\n toolGroups = EMPTY_LIST,\r\n initialValues,\r\n}) => {\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.SERIAL_SEARCH,\r\n initialValues[Filters.SERIAL_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(SurfaceEquipmentFilter);\r\n","import { useSelector } from 'react-redux';\r\nimport { useMemo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Tooltip, withStyles } from '@material-ui/core';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { Grid } from 'app/components/withTooltip';\r\n\r\nimport { Table, TableRow } from 'altus-ui-components';\r\nimport { isImmutable } from 'immutable';\r\n\r\nimport { toSurfaceEquipment } from 'utils/route.util';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\nimport { getUnitsOfMeasurePreference } from 'features/equipment/equipment.selectors';\r\nimport { UNIT_OF_MEASURE } from 'features/equipment/equipment.constants';\r\nimport ToolImageTableCell from 'app/components/ToolImageTableCell';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\nimport { compose } from 'redux';\r\n\r\nconst SurfaceEquipmentTable = ({ tools = [], classes }) => {\r\n const unitsOfMeasurePreference = useSelector(getUnitsOfMeasurePreference);\r\n const weightUnit =\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL ? 'lbs' : 'kg';\r\n const measureUnit =\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL ? 'in' : 'mm';\r\n\r\n const initialState = useMemo(\r\n () => ({\r\n pageSize: 10,\r\n }),\r\n [],\r\n );\r\n const getSubRows = (row) =>\r\n isImmutable(row) ? row.get('equipmentImage') : row.original?.equipmentImage;\r\n\r\n const getToolGroupSubRows = (row) =>\r\n isImmutable(row) ? row.get('equipmentGroup') : row.original?.equipmentGroup;\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Header: '',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n if (!tool.get('dataVerified')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'toolItemNo',\r\n Header: 'Item no.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n },\r\n {\r\n xs: 3,\r\n id: 'toolImage',\r\n Header: 'Image',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n const image = getSubRows(tool);\r\n const isNull = Object.keys(image).length === 0;\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n id: 'surfaceEquipmentGroup',\r\n Header: 'Surface Eq. Group',\r\n Cell: ({ row }) => {\r\n const { original: tool } = row;\r\n const group = getToolGroupSubRows(tool);\r\n const isNull = Object.keys(group).length === 0;\r\n return isNull ? '' : group.get('name');\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'weight_kg',\r\n Header: (\r\n \r\n ),\r\n accessor: (tool) => tool.get('weight'),\r\n },\r\n {\r\n xs: 4,\r\n id: 'height_mm',\r\n Header: (\r\n \r\n ),\r\n accessor: (tool) => tool.get('height'),\r\n },\r\n {\r\n xs: 4,\r\n id: 'length_mm',\r\n Header: (\r\n \r\n ),\r\n accessor: (tool) => tool.get('length'),\r\n },\r\n {\r\n xs: 4,\r\n id: 'width_mm',\r\n Header: (\r\n \r\n ),\r\n accessor: (tool) => tool.get('width'),\r\n },\r\n ],\r\n [classes.warningIcon, measureUnit, weightUnit],\r\n );\r\n\r\n const renderTableRowComponent = ({ item, ...rest }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(SurfaceEquipmentTable);\r\n","import * as yup from 'yup';\r\nimport { compose } from 'redux';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Field, Formik, Form, ErrorMessage } from 'formik';\r\nimport { useRef, useCallback, useState, useEffect } from 'react';\r\n\r\nimport {\r\n Grid,\r\n IconButton,\r\n Typography,\r\n InputAdornment,\r\n} from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { LoadingOverlay, LoadingButton } from 'altus-ui-components';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n deleteSurfaceEquipmentImage,\r\n uploadSurfaceEquipmentImage,\r\n} from 'features/equipment/equipment.actions';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport {\r\n EQUIPMENT_ACTIONS,\r\n UNIT_OF_MEASURE,\r\n} from 'features/equipment/equipment.constants';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport YesNoSwitchFormik from 'app/components/form/formik/YesNoSwitchFormik';\r\nimport TextAreaFieldFormik from 'app/components/form/formik/TextAreaFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\n\r\nexport const FormFields = {\r\n NAME: 'name',\r\n GROUP: 'group',\r\n LENGTH: 'length',\r\n WIDTH: 'width',\r\n HEIGHT: 'height',\r\n WEIGHT: 'weight',\r\n M3ITEMNUMBER: 'm3ItemNumber',\r\n DESCRIPTION: 'description',\r\n IS_VERIFIED: 'isVerified',\r\n FILE: 'toolImageFile',\r\n TOOL_IMAGE_ID: 'toolImageId',\r\n};\r\n\r\nconst MAX_FILE_SIZE = 512 * 1024;\r\n\r\nconst getKey = (item) => item.get('id');\r\nconst getName = (item) => item.get('name')?.toUpperCase();\r\n\r\nconst AddSurfaceEquipmentForm = ({\r\n edit,\r\n tool,\r\n classes,\r\n saveTool,\r\n dataState,\r\n toolGroups,\r\n initialFormValues,\r\n unitsOfMeasurePreference,\r\n}) => {\r\n const schema = yup.object().shape({\r\n name: yup.string().required('Required'),\r\n group: yup.number().required('Required').typeError('Required'),\r\n length: yup.string().required('Required'),\r\n height: yup.string().required('Required'),\r\n width: yup.string().required('Required'),\r\n weight: yup.string().required('Required'),\r\n m3ItemNumber: yup.string().required('Required'),\r\n toolImageFile: yup\r\n .mixed()\r\n .nullable()\r\n .notRequired()\r\n .test('FILE_SIZE', 'Uploaded file is too big', (value) => {\r\n if (value && fileRef.current) {\r\n if (fileRef.current.files[0].size <= MAX_FILE_SIZE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n })\r\n .test('FILE_FORMAT', 'Only .png is allowed', (value) => {\r\n if (value && fileRef.current) {\r\n if (fileRef.current.files[0].type === 'image/png') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return true;\r\n }\r\n }),\r\n });\r\n\r\n const dispatch = useDispatch();\r\n const fileRef = useRef(null);\r\n\r\n const setValue = useCallback((setValue) => {\r\n setValue(FormFields.TOOL_IMAGE_ID, EMPTY_STRING);\r\n setValue(FormFields.FILE, null);\r\n }, []);\r\n\r\n const [disableValidation, setDisableValidation] = useState(true);\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n useEffect(() => {\r\n setDisableValidation(\r\n !userPermissions.includes(SystemPermission.ITEM_VERIFICATION),\r\n );\r\n }, [userPermissions, disableValidation, setDisableValidation]);\r\n\r\n return (\r\n \r\n {({ isValid, values }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Name*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n FormFields.NAME,\r\n initialFormValues[FormFields.NAME],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Tool group*\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n M3ItemNumber*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n FormFields.M3ITEMNUMBER,\r\n initialFormValues[\r\n FormFields.M3ITEMNUMBER\r\n ],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Length*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n FormFields.LENGTH,\r\n initialFormValues[FormFields.LENGTH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL\r\n ? 'in'\r\n : 'mm'}\r\n \r\n \r\n \r\n \r\n \r\n Heigth*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n FormFields.HEIGHT,\r\n initialFormValues[FormFields.HEIGHT],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL\r\n ? 'in'\r\n : 'mm'}\r\n \r\n \r\n \r\n \r\n \r\n Width*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n FormFields.LENGTH,\r\n initialFormValues[FormFields.WIDTH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL\r\n ? 'in'\r\n : 'mm'}\r\n \r\n \r\n \r\n \r\n \r\n Weight*\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n FormFields.WEIGHT,\r\n initialFormValues[FormFields.WEIGHT],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL\r\n ? 'lbs'\r\n : 'kg'}\r\n \r\n \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n FormFields.DESCRIPTION,\r\n initialFormValues[FormFields.DESCRIPTION],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Verified\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Upload image - .png only\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n <>\r\n \r\n {\r\n event.target.value = null;\r\n }}\r\n onChange={(event) => {\r\n if (event.target.files.length > 0) {\r\n form.setTouched({\r\n ...form.touched,\r\n [FormFields.FILE]: true,\r\n });\r\n yup\r\n .reach(schema, FormFields.FILE)\r\n .isValid(event.target.files[0])\r\n .then((valid) => {\r\n form.setFieldValue(\r\n FormFields.FILE,\r\n event.target.files[0],\r\n );\r\n valid === true &&\r\n dispatch(\r\n uploadSurfaceEquipmentImage(\r\n event.target.files[0],\r\n ),\r\n ).then((payload) => {\r\n form.setFieldValue(\r\n FormFields.TOOL_IMAGE_ID,\r\n payload.toolImageId,\r\n );\r\n });\r\n });\r\n }\r\n }}\r\n {...formik}\r\n />\r\n {\r\n fileRef.current.click();\r\n }}\r\n >\r\n Upload\r\n \r\n \r\n \r\n \r\n {values.toolImageFile &&\r\n values.toolImageFile.name}\r\n \r\n \r\n {values.toolImageFile &&\r\n values.toolImageFile.name && (\r\n \r\n {\r\n if (values.toolImageId) {\r\n dispatch(\r\n deleteSurfaceEquipmentImage(\r\n values.toolImageId,\r\n ),\r\n ).then(setValue(form.setFieldValue));\r\n } else {\r\n setValue(form.setFieldValue);\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{msg}
}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {\r\n saveTool(values);\r\n }}\r\n >\r\n Save\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingTop: 15,\r\n marginBottom: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n form: {\r\n flexDirection: 'column',\r\n },\r\n formLegend: {\r\n flexDirection: 'column',\r\n },\r\n row: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n },\r\n submitBtn: {\r\n justifyContent: 'center',\r\n paddingTop: theme.spacing(4),\r\n },\r\n errorText: {\r\n color: theme.palette.error.main,\r\n },\r\n removeUpload: {\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n removeUploadContainer: {\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_SURFACE_EQUIPMENT,\r\n EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_UPLOAD_IMAGE,\r\n EQUIPMENT_ACTIONS.DELETE_SURFACE_EQUIPMENT_IMAGE,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(AddSurfaceEquipmentForm);\r\n","import { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst AddSurfaceEquipmentModalHeader = ({ closeModal, title }) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default AddSurfaceEquipmentModalHeader;\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport AddSurfaceEquipmentForm from 'features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentForm';\r\nimport AddSurfaceEquipmentModalHeader from 'features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentModalHeader';\r\n\r\nconst AddSurfaceEquipmentModal = ({\r\n open,\r\n tool,\r\n edit,\r\n title,\r\n classes,\r\n saveTool,\r\n onSubmit,\r\n validForm,\r\n dataState,\r\n suppliers,\r\n toolGroups,\r\n toggleModal,\r\n toolConnectors,\r\n requiredFields,\r\n initialFormValues,\r\n unitsOfMeasurePreference,\r\n}) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: 'fit-content',\r\n },\r\n content: {\r\n overflow: 'scroll-y',\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n footer: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: theme.spacing(3),\r\n },\r\n filters: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_SURFACE_EQUIPMENT,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(AddSurfaceEquipmentModal);\r\n","import { compose } from 'redux';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { useSelector, connect, useDispatch } from 'react-redux';\r\n\r\nimport {\r\n createSurfaceEquipment,\r\n onLoadAddToolsModal,\r\n updateTool,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n getToolConnectorsFromState,\r\n getUnitsOfMeasurePreference,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n UNIT_OF_MEASURE,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { FormFields } from 'features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentForm';\r\nimport { existingThirdPartyToolToToolMapper } from 'features/equipment/equipment.helpers';\r\nimport AddSurfaceEquipmentModal from 'features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentModal';\r\n\r\nconst initialFormValues = {\r\n [FormFields.NAME]: EMPTY_STRING,\r\n [FormFields.GROUP]: null,\r\n [FormFields.M3ITEMNUMBER]: EMPTY_STRING,\r\n [FormFields.LENGTH]: EMPTY_STRING,\r\n [FormFields.HEIGHT]: EMPTY_STRING,\r\n [FormFields.WIDTH]: EMPTY_STRING,\r\n [FormFields.WEIGHT]: EMPTY_STRING,\r\n [FormFields.DESCRIPTION]: EMPTY_STRING,\r\n [FormFields.IS_VERIFIED]: false,\r\n [FormFields.FILE]: null,\r\n [FormFields.TOOL_IMAGE_ID]: EMPTY_STRING,\r\n};\r\n\r\nconst AddSurfaceEquipmentModalContainer = ({\r\n edit,\r\n tool,\r\n toolGroups,\r\n title,\r\n toolId,\r\n openModal,\r\n suppliers,\r\n toggleModal,\r\n existingTool,\r\n dispatchOnLoad,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const toolConnectors = useSelector(getToolConnectorsFromState);\r\n const unitsOfMeasurePreference = useSelector(getUnitsOfMeasurePreference);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n }, [dispatchOnLoad]);\r\n\r\n const saveTool = useCallback(\r\n (formValues) => {\r\n const tool = {\r\n name: formValues.name,\r\n description: formValues.description,\r\n m3ItemNumber: formValues.m3ItemNumber,\r\n equipmentGroupId: formValues.group,\r\n length: {\r\n value: formValues.length,\r\n unit:\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL ? 'in' : 'mm',\r\n },\r\n weight: {\r\n value: formValues.weight,\r\n unit:\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL\r\n ? 'lbs'\r\n : 'kg',\r\n },\r\n width: {\r\n value: formValues.width,\r\n unit:\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL ? 'in' : 'mm',\r\n },\r\n height: {\r\n value: formValues.height,\r\n unit:\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL ? 'in' : 'mm',\r\n },\r\n isVerified: formValues.isVerified,\r\n toolImageId: formValues.toolImageId,\r\n };\r\n if (edit) {\r\n tool.toolId = parseInt(toolId);\r\n tool.referenceNumber = ThirdPartyLabel;\r\n tool.m3ItemNumber = ThirdPartyLabel;\r\n const newTool = existingThirdPartyToolToToolMapper(tool, existingTool);\r\n dispatch(updateTool(newTool));\r\n } else {\r\n dispatch(createSurfaceEquipment(tool));\r\n }\r\n },\r\n [unitsOfMeasurePreference, edit, toolId, existingTool, dispatch],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_SURFACE_EQUIPMENT,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadAddToolsModal,\r\n};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n AddSurfaceEquipmentModalContainer,\r\n);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Grid, Button } from '@material-ui/core';\r\nimport { useEffect, useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n getSurfaceEquipmentFromState,\r\n getSurfaceEquipmentGroupsFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n onUnload,\r\n onLoadSurfaceEquipment,\r\n searchSurfaceEquipment,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport SurfaceEquipmentFilter, {\r\n Filters,\r\n} from 'features/equipment/surfaceEquipment/components/SurfaceEquipmentFilter';\r\n\r\nimport { EMPTY_STRING, EMPTY_LIST, SystemPermission } from 'app/app.constants';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\n\r\nimport SurfaceEquipmentTable from 'features/equipment/surfaceEquipment/components/SurfaceEquipmentTable';\r\nimport AddSurfaceEquipmentModalContainer from 'features/equipment/surfaceEquipment/surfaceEquipmentModalForm/AddSurfaceEquipmentModalContainer';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.TOOL_GROUPS]: EMPTY_LIST,\r\n [Filters.SERIAL_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst SurfaceEquipmentsContainer = ({\r\n tool,\r\n classes,\r\n toolGroups,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n useHeader({ subTitle: breadcrumb, logoNavigation: '/' });\r\n\r\n const [addToolModal, toggleAddSurfaceEquipmentlModal] = useModal(\r\n MODAL.ADD_SURFACE_EQUIPMENT,\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n [Filters.SERIAL_SEARCH]: filterValues[Filters.SERIAL_SEARCH],\r\n [Filters.TOOL_GROUPS]:\r\n filterValues[Filters.TOOL_GROUPS] === '' ||\r\n filterValues[Filters.TOOL_GROUPS] === EMPTY_LIST\r\n ? null\r\n : [filterValues[Filters.TOOL_GROUPS]],\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n toggleAddSurfaceEquipmentlModal(true)}\r\n >\r\n Add equipment\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n filterContainer: {\r\n paddingBottom: '10px',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n tool: getSurfaceEquipmentFromState(state),\r\n toolGroups: getSurfaceEquipmentGroupsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoadSurfaceEquipment,\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchSurfaceEquipment,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(SurfaceEquipmentsContainer);\r\n","import { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport _isNil from 'lodash/isNil';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport { List, isImmutable } from 'immutable';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button, IconButton, Tooltip } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatValue } from 'utils/format.util';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport { UNIT_OF_MEASURE } from 'features/equipment/equipment.constants';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport { getUnitsOfMeasurePreference } from 'features/equipment/equipment.selectors';\r\nimport QuantityTableHeaderTitleCell from 'app/components/QuantityTableHeaderTitleCell';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('templateEquipments')?.toArray().reverse()\r\n : row.original?.templateEquipments?.toArray().reverse();\r\n\r\nconst EquipmentTemplatesTable = ({\r\n classes,\r\n onEditTemplate,\r\n addMode = false,\r\n equipmentTemplates,\r\n onSaveSurfaceEquipmentTemplate,\r\n ...rest\r\n}) => {\r\n const initialState = useMemo(\r\n () => ({\r\n ...defaultInitialState,\r\n sortBy: [\r\n {\r\n id: 'sequence',\r\n desc: false,\r\n },\r\n ],\r\n }),\r\n [],\r\n );\r\n\r\n const unitsOfMeasurePreference = useSelector(getUnitsOfMeasurePreference);\r\n const weightUnit =\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL ? 'lbs' : 'kg';\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'dataVerified',\r\n Cell: ({ row }) => {\r\n const equipment = row.original;\r\n if (row.canExpand) {\r\n const templateEquipments = equipment.get('templateEquipments');\r\n if (_isNil(templateEquipments)) {\r\n return null;\r\n }\r\n const hasNullDataVerified = templateEquipments?.some(\r\n (eq) =>\r\n eq.get('verifiedData') === null ||\r\n eq.get('verifiedData') === false,\r\n );\r\n if (hasNullDataVerified) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n } else if (!equipment.get('verifiedData')) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else return null;\r\n },\r\n },\r\n // Hide images for now\r\n // {\r\n // xs: 4,\r\n // id: 'image',\r\n // Header: 'Image',\r\n // Cell: ({ row }) => {\r\n // const { original: equipment } = row;\r\n // const templateEquipments = equipment.get('templateEquipments');\r\n // if (templateEquipments && templateEquipments.size > 0) {\r\n // return (\r\n // \r\n // {templateEquipments.reverse().map((item) => {\r\n // var equipmentImage = item\r\n // .get('surfaceEquipment')\r\n // ?.get('equipmentImage');\r\n // var imageUrl = null;\r\n // if (Object.keys(equipmentImage).length > 0) {\r\n // imageUrl = equipmentImage.get('imageUrl');\r\n // }\r\n // return (\r\n // \r\n // );\r\n // })}\r\n // \r\n // );\r\n // }\r\n // var equipmentImage = equipment\r\n // .get('surfaceEquipment')\r\n // ?.get('equipmentImage');\r\n // var imageUrl = null;\r\n // if (Object.keys(equipmentImage).length > 0) {\r\n // imageUrl = equipmentImage.get('imageUrl');\r\n // }\r\n // return (\r\n // \r\n // );\r\n // },\r\n // },\r\n {\r\n xs: 2,\r\n id: 'toolItemNo',\r\n Header: 'Item no.',\r\n Cell: ({ row }) => {\r\n if (row.canExpand) return null;\r\n\r\n const { original: equipment } = row;\r\n var se = equipment.get('surfaceEquipment');\r\n if (se) {\r\n return se.get('m3ItemNumber');\r\n }\r\n\r\n return null;\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (template) => template.get('name'),\r\n },\r\n {\r\n xs: 3,\r\n id: 'description',\r\n Header: 'Description',\r\n accessor: (template) => template.get('description'),\r\n },\r\n {\r\n xs: 3,\r\n id: 'surfaceEquipmentGroup',\r\n Header: 'Surface Eq. Group',\r\n accessor: (template) => template.get('group'),\r\n },\r\n {\r\n xs: 2,\r\n id: 'weight_kg',\r\n accessor: (tool) =>\r\n formatValue(tool.getIn(['weight', 'value']), '', 0.01),\r\n Header: (\r\n \r\n ),\r\n },\r\n {\r\n xs: 1,\r\n id: 'editTemplate',\r\n Cell: ({ row }) => {\r\n const { original: template } = row;\r\n\r\n if (row.canExpand) {\r\n if (addMode) {\r\n return (\r\n \r\n onSaveSurfaceEquipmentTemplate(template)}\r\n >\r\n \r\n Add\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n onEditTemplate(template.get('id'), template)\r\n }\r\n />\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n return null;\r\n },\r\n },\r\n ],\r\n [\r\n addMode,\r\n weightUnit,\r\n onEditTemplate,\r\n onSaveSurfaceEquipmentTemplate,\r\n classes.warningIcon,\r\n classes?.actions,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nEquipmentTemplatesTable.propTypes = {\r\n templates: PropTypes.instanceOf(List),\r\n};\r\n\r\nconst styles = (theme) => ({\r\n rowActionCell: {\r\n paddingRght: '10px',\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n },\r\n warningIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(EquipmentTemplatesTable);\r\n","import { Field, Formik, Form } from 'formik';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport React, { forwardRef, useImperativeHandle, useRef } from 'react';\r\n\r\nimport { Grid, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n};\r\n\r\nconst shouldSubmit = ({ isValid }) => isValid;\r\n\r\nconst EquipmentTemplatesFilter = forwardRef(\r\n (\r\n {\r\n classes,\r\n onSubmit,\r\n initialValues,\r\n displayAddButton = true,\r\n toggleAddEquipmentTemplateModal,\r\n },\r\n ref,\r\n ) => {\r\n const formikRef = useRef();\r\n\r\n useImperativeHandle(ref, () => ({\r\n submitForm: () => {\r\n formikRef.current?.submitForm();\r\n },\r\n }));\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n \r\n form.setFieldValue(\r\n Filters.TEXT_SEARCH,\r\n initialValues[Filters.TEXT_SEARCH],\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n {displayAddButton ? (\r\n \r\n \r\n {\r\n toggleAddEquipmentTemplateModal(true);\r\n }}\r\n >\r\n Add Equipment template\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nconst styles = {\r\n root: {\r\n marginBottom: 15,\r\n paddingTop: 15,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(EquipmentTemplatesFilter);\r\n","import * as yup from 'yup';\r\nimport { useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Fab, Typography } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport TextAreaFieldFormik from 'app/components/form/formik/TextAreaFieldFormik';\r\n\r\nexport const FormFields = {\r\n name: 'name',\r\n description: 'description',\r\n};\r\n\r\nconst AddEquipmentTemplatesInformationContainer = ({\r\n classes,\r\n equipmentTemplateInfo,\r\n setEquipmentTemplateInfo,\r\n toggleAddEquipmentToEquipmentTemplateModal,\r\n}) => {\r\n const initialValues = useMemo(\r\n () => ({\r\n [FormFields.name]: equipmentTemplateInfo\r\n ? equipmentTemplateInfo.name\r\n : '',\r\n [FormFields.description]: equipmentTemplateInfo\r\n ? equipmentTemplateInfo.description\r\n : '',\r\n }),\r\n [equipmentTemplateInfo],\r\n );\r\n\r\n const schema = yup.object().shape({\r\n name: yup.string().required('Required'),\r\n });\r\n\r\n const onSubmitForm = (formValue) => {\r\n setEquipmentTemplateInfo(formValue);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Add Equipment\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n height: 'fit-content',\r\n flexDirection: 'column',\r\n border: `1px solid ${theme.palette.divider}`,\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(3),\r\n },\r\n wrapper: {\r\n height: 'fit-content',\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(\r\n AddEquipmentTemplatesInformationContainer,\r\n);\r\n","import { useMemo } from 'react';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { Button, Grid } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst AddSurfaceEquipmentInPlanningModalTable = ({\r\n tools,\r\n classes,\r\n onRemoveSurface,\r\n onSaveSurfaceEquipment,\r\n selectedSurfaceEquipment,\r\n setSelectedSurfaceEquipment,\r\n initialState = defaultInitialState,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Item no.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Surface Eq. Group',\r\n accessor: (tool) => tool.getIn(['equipmentGroup', 'name']),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Weight (kg)',\r\n accessor: (tool) => tool.get('weight').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Height (mm)',\r\n accessor: (tool) => tool.get('height').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Length (mm)',\r\n accessor: (tool) => tool.get('length').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Width (mm)',\r\n accessor: (tool) => tool.get('width').toFixed(2),\r\n },\r\n {\r\n xs: 2,\r\n id: 'action',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n return (\r\n \r\n onSaveSurfaceEquipment(tool)}\r\n >\r\n \r\n Add\r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [classes, onSaveSurfaceEquipment],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AddSurfaceEquipmentInPlanningModalTable;\r\n","import { useState, useRef } from 'react';\r\n\r\nimport {\r\n Grid,\r\n Button,\r\n Dialog,\r\n Typography,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport { Tab, Tabs } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP, EMPTY_STRING } from 'app/app.constants';\r\n\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport AddSurfaceEquipmentInPlanningModalTable from 'features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModalTable';\r\nimport SurfaceEquipmentFilter from 'features/equipment/surfaceEquipment/components/SurfaceEquipmentFilter';\r\nimport EquipmentTemplatesFilter from 'features/equipment/equipmentTemplates/components/EquipmentTemplatesFilter';\r\nimport EquipmentTemplatesTable from 'features/equipment/equipmentTemplates/components/EquipmentTemplatesTable';\r\nimport { Filters } from 'features/equipment/toolAssemblies/components/ToolAssembliesFilter';\r\n\r\nconst SURFACE_EQUIPMENT_OPTIONS = {\r\n ITEMS: 1,\r\n TEMPLATE: 2,\r\n};\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst AddSurfaceEquipmentInPlanningModal = ({\r\n isOpen,\r\n classes,\r\n toolGroups,\r\n toggleModal,\r\n onSubmitItem,\r\n initialValues,\r\n onRemoveSurface,\r\n onSubmitTemplate,\r\n tools = EMPTY_MAP,\r\n showTemplateSelection,\r\n onSaveSurfaceEquipment,\r\n selectedSurfaceEquipment,\r\n setSelectedSurfaceEquipment,\r\n equipmentTemplates = EMPTY_MAP,\r\n onSaveSurfaceEquipmentTemplate,\r\n}) => {\r\n const [state, setState] = useState({\r\n tab: SURFACE_EQUIPMENT_OPTIONS.ITEMS,\r\n });\r\n const [initialTemplateFilterValues] = useState(defaultFormValues);\r\n\r\n const formRef = useRef(null);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Add surface equipment\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {showTemplateSelection ? (\r\n \r\n setState({ tab: value })}\r\n >\r\n \r\n \r\n \r\n \r\n {state.tab === SURFACE_EQUIPMENT_OPTIONS.ITEMS && (\r\n \r\n \r\n \r\n \r\n )}\r\n {state.tab === SURFACE_EQUIPMENT_OPTIONS.TEMPLATE && (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default AddSurfaceEquipmentInPlanningModal;\r\n","import { compose } from 'redux';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { EMPTY_LIST, EMPTY_STRING } from 'app/app.constants';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\n\r\nimport {\r\n onLoadSurfaceEquipment,\r\n searchSurfaceEquipment,\r\n searchEquipmentTemplates,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport {\r\n getSurfaceEquipmentFromState,\r\n getEquipmentTemplatesFromState,\r\n getSurfaceEquipmentGroupsFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport { Filters } from 'features/equipment/surfaceEquipment/components/SurfaceEquipmentFilter';\r\nimport AddSurfaceEquipmentInPlanningModal from 'features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModal';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.TOOL_GROUPS]: EMPTY_LIST,\r\n [Filters.SERIAL_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst AddSurfaceEquipmentInPlanningModalContainer = ({\r\n tools,\r\n isOpen,\r\n classes,\r\n dataState,\r\n templates,\r\n toolGroups,\r\n toggleModal,\r\n dispatchOnLoad,\r\n onRemoveSurface,\r\n dispatchOnSearch,\r\n onSaveSurfaceEquipment,\r\n selectedSurfaceEquipment,\r\n dispatchOnSearchTemplates,\r\n setSelectedSurfaceEquipment,\r\n showTemplateSelection = false,\r\n onSaveSurfaceEquipmentTemplate,\r\n}) => {\r\n const handleItemSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n [Filters.SERIAL_SEARCH]: filterValues[Filters.SERIAL_SEARCH],\r\n [Filters.TOOL_GROUPS]:\r\n filterValues[Filters.TOOL_GROUPS] === '' ||\r\n filterValues[Filters.TOOL_GROUPS] === EMPTY_LIST\r\n ? null\r\n : [filterValues[Filters.TOOL_GROUPS]],\r\n getByStatus: true, // filter by un/servicable\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n const handleTemplateSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearchTemplates({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n });\r\n },\r\n [dispatchOnSearchTemplates],\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n dispatchOnSearchTemplates({\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n });\r\n }, [dispatchOnLoad, dispatchOnSearchTemplates]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n tools: getSurfaceEquipmentFromState(state),\r\n templates: getEquipmentTemplatesFromState(state),\r\n toolGroups: getSurfaceEquipmentGroupsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n EQUIPMENT_ACTIONS.EQUIPMENT_TEMPLATES_LOADED,\r\n EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoadSurfaceEquipment,\r\n dispatchOnSearch: searchSurfaceEquipment,\r\n dispatchOnSearchTemplates: searchEquipmentTemplates,\r\n },\r\n ),\r\n)(AddSurfaceEquipmentInPlanningModalContainer);\r\n","import { compose } from 'redux';\r\nimport { isImmutable } from 'immutable';\r\nimport DeleteIcon from '@material-ui/icons/Close';\r\nimport { memo, useMemo, useCallback } from 'react';\r\nimport { sortableElement } from 'react-sortable-hoc';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nimport {\r\n DragHandle,\r\n SortableTable,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport TableCellDense from 'app/components/Table/TableCellDense';\r\nimport { ToolCategoryType } from 'features/projects/tool/tool.constants';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport ToolstringToolsTableRow from 'features/projects/tasks/task/toolstring/components/ToolstringToolsTableRow';\r\n\r\nconst getSubRows = (row) =>\r\n isImmutable(row)\r\n ? row.get('toolAssemblyTools')?.toArray()\r\n : row.original?.toolAssemblyTools?.toArray();\r\n\r\nconst SortableFormikRow = sortableElement(EditableTableRowFormik);\r\n\r\nconst EquipmentTemplatesCreatorTable = ({\r\n classes,\r\n onSortItem,\r\n onDeleteItem,\r\n onDuplicateItem,\r\n updateItemProperties,\r\n templateEquipments = EMPTY_MAP,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 2,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const actions = [\r\n {\r\n visible: !row.depth,\r\n content: ,\r\n },\r\n {\r\n visible: row.canExpand,\r\n content: (\r\n \r\n {row.isExpanded ? : }\r\n \r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {actions\r\n .filter((action) => action.visible)\r\n .map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'toolItemNo',\r\n Header: 'Item No.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n Cell: ({ value, row }) => (\r\n \r\n {value\r\n ? row.original.get('toolGroupCategory') !==\r\n ToolCategoryType.ThirdParty\r\n ? `#${value}`\r\n : value\r\n : null}\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n id: 'toolName',\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const { original: templateEquipment } = row;\r\n const actions = [\r\n {\r\n visible: row.depth === 0,\r\n content: (\r\n onDuplicateItem(templateEquipment)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n {\r\n visible: row.depth === 0,\r\n content: (\r\n onDeleteItem(templateEquipment)}\r\n >\r\n \r\n \r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {actions\r\n .filter((action) => action.visible)\r\n .map((action) => action.content)}\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [onDuplicateItem, onDeleteItem, classes],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateItemProperties],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n scrollable: {\r\n overflowY: 'auto',\r\n },\r\n actions: {\r\n direction: 'row',\r\n justifyContent: 'flex-end',\r\n width: '100%',\r\n },\r\n});\r\n\r\nexport default compose(\r\n memo,\r\n withStyles(styles),\r\n)(EquipmentTemplatesCreatorTable);\r\n","import { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport { fromJS } from 'immutable';\r\nimport { useCallback } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport TaskToolstringPreview from 'features/projects/tasks/task/toolstring/components/TaskToolstringPreview';\r\nimport EquipmentTemplatesCreatorTable from 'features/equipment/equipmentTemplates/addEquipmentTemplates/EquipmentTemplatesCreatorTable';\r\nimport ToolstringItemHighlightProvider from 'features/projects/tasks/task/toolstring/components/ToolstringItemHighlightProvider';\r\nimport AddEquipmentTemplatesInformationContainer from 'features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesInformationContainer';\r\n\r\nconst EquipmentTemplatesCreator = ({\r\n classes,\r\n selectedTools,\r\n onSortItem,\r\n onDeleteItem,\r\n onDuplicateItem,\r\n toggleAddEquipmentToEquipmentTemplateModal,\r\n setEquipmentTemplateInfo,\r\n equipmentTemplateInfo,\r\n}) => {\r\n const createToolstringSections = useCallback((selectedTools) => {\r\n if (selectedTools.length > 0) {\r\n const length = 1;\r\n const items = List(selectedTools).toJS();\r\n const obj = {\r\n length,\r\n items,\r\n };\r\n return [obj];\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n container: {\r\n height: '100%',\r\n },\r\n content: {\r\n height: '100%',\r\n },\r\n header: {\r\n height: '10%',\r\n },\r\n information: {\r\n paddingLeft: theme.spacing(5),\r\n paddingRight: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(EquipmentTemplatesCreator);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nconst AddEquipmentTemplatesModalHeader = ({ title, closeModal }) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst styles = () => ({});\r\n\r\nexport default compose(withStyles(styles))(AddEquipmentTemplatesModalHeader);\r\n","import { compose } from 'redux';\r\nimport { memo, useCallback } from 'react';\r\nimport { Grid, Button, Box } from '@material-ui/core';\r\n\r\nconst AddEquipmentTemplatesModalFooter = ({\r\n selectedTools,\r\n equipmentTemplateInfo,\r\n onSaveEquipmentTemplate,\r\n isEditMode,\r\n}) => {\r\n const checkSaveDisabled = useCallback(() => {\r\n if (\r\n equipmentTemplateInfo !== null &&\r\n equipmentTemplateInfo.name !== '' &&\r\n selectedTools.length > 0\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }, [selectedTools, equipmentTemplateInfo]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {`${isEditMode ? 'Update' : 'Save'}`}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(memo)(AddEquipmentTemplatesModalFooter);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\n\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nimport EquipmentTemplatesCreator from 'features/equipment/equipmentTemplates/addEquipmentTemplates/EquipmentTemplatesCreator';\r\nimport AddEquipmentTemplatesModalHeader from 'features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModalHeader';\r\nimport AddEquipmentTemplatesModalFooter from 'features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModalFooter';\r\n\r\nconst AddEquipmentTemplatesModal = ({\r\n open,\r\n classes,\r\n toggleModal,\r\n equipmentTemplateInfo,\r\n onSaveEquipmentTemplate,\r\n toggleAddEquipmentToEquipmentTemplateModal,\r\n onSortItem,\r\n onDeleteItem,\r\n onDuplicateItem,\r\n selectedTools,\r\n setEquipmentTemplateInfo,\r\n dataState,\r\n isEditMode = false,\r\n}) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n // height: 'fit-content',\r\n },\r\n content: {\r\n overflow: 'scroll-y',\r\n },\r\n header: {\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n footer: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n filters: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n table: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(AddEquipmentTemplatesModal);\r\n","import { compose } from 'redux';\r\nimport { arrayMoveImmutable } from 'array-move';\r\nimport { useCallback, useState, useEffect } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n} from 'app/app.selectors';\r\n\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport { updateEquipmentTemplate } from 'features/equipment/equipment.actions';\r\nimport { FormFields } from 'features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesInformationContainer';\r\nimport AddSurfaceEquipmentInPlanningModalContainer from 'features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModalContainer';\r\nimport AddEquipmentTemplatesModal from 'features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModal';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nconst EditEquipmentTemplatesModalContainer = ({\r\n openModal,\r\n dataState,\r\n toggleModal,\r\n templateId = null,\r\n template = EMPTY_MAP,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [selectedTools, setSelectedTools] = useState([]);\r\n const [equipmentTemplateInfo, setEquipmentTemplateInfo] = useState(null);\r\n\r\n useEffect(() => {\r\n if (template) {\r\n setSelectedTools(\r\n template\r\n .get('templateEquipments')\r\n .map((templateEquipment) => templateEquipment.get('surfaceEquipment'))\r\n .toArray(),\r\n );\r\n setEquipmentTemplateInfo({\r\n [FormFields.name]: template.get('name'),\r\n [FormFields.description]: template?.get('description'),\r\n });\r\n }\r\n }, [template]);\r\n\r\n const [selectedSurfaceEquipment, setSelectedSurfaceEquipment] = useState([]);\r\n\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n );\r\n\r\n const [isOpenAddSurfaceEquipment, toggleModalAddSurfaceEquipment] = useModal(\r\n MODAL.ADD_EQUIPMENT_TO_TEMPLATE,\r\n );\r\n\r\n const onAddItem = useCallback(\r\n (tool) => {\r\n setSelectedTools((prevArray) => [...prevArray, tool]);\r\n dispatch(\r\n addNotification({\r\n message: 'Equipment added to template.',\r\n variant: NOTIFICATION_VARIANTS.SUCCESS,\r\n }),\r\n );\r\n },\r\n [dispatch],\r\n );\r\n\r\n const onSortItem = useCallback(\r\n ({ oldIndex, newIndex }) => {\r\n if (oldIndex === newIndex) return;\r\n\r\n const tools = [...selectedTools];\r\n const newTools = arrayMoveImmutable(tools, oldIndex, newIndex);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDeleteItem = useCallback(\r\n (templateEquipment) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(templateEquipment);\r\n tools.splice(toolIndex, 1);\r\n setSelectedTools(tools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDuplicateItem = useCallback(\r\n (tool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(tool);\r\n tools.push(tool);\r\n const lastToolIndex = tools.lastIndexOf(tool);\r\n const newTools = arrayMoveImmutable(tools, lastToolIndex, toolIndex + 1);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onUpdateEquipmentTemplate = useCallback(() => {\r\n const sortedTools = selectedTools.map((tool) => tool.get('equipmentId'));\r\n const equipmentToSave = {\r\n equipmentTemplateId: templateId,\r\n name: equipmentTemplateInfo.name,\r\n description: equipmentTemplateInfo.description,\r\n organizationId: currentClientOrganizationId,\r\n templateEquipmentIds: sortedTools,\r\n };\r\n dispatch(updateEquipmentTemplate(equipmentToSave));\r\n }, [\r\n dispatch,\r\n selectedTools,\r\n templateId,\r\n equipmentTemplateInfo,\r\n currentClientOrganizationId,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SEARCH_EQUIPMENT,\r\n EQUIPMENT_ACTIONS.UPDATE_EQUIPMENT_TEMPLATE,\r\n EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS,\r\n ),\r\n});\r\n\r\nexport default compose(connect(mapStateToProps))(\r\n EditEquipmentTemplatesModalContainer,\r\n);\r\n","import { compose } from 'redux';\r\nimport { useCallback, useState } from 'react';\r\nimport { arrayMoveImmutable } from 'array-move';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n} from 'app/app.selectors';\r\n\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport { saveEquipmentTemplate } from 'features/equipment/equipment.actions';\r\nimport AddSurfaceEquipmentInPlanningModalContainer from 'features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModalContainer';\r\nimport AddEquipmentTemplatesModal from 'features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModal';\r\n\r\nconst AddEquipmentTemplatesModalContainer = ({\r\n openModal,\r\n dataState,\r\n toggleModal,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [selectedTools, setSelectedTools] = useState([]);\r\n const [equipmentTemplateInfo, setEquipmentTemplateInfo] = useState(null);\r\n\r\n const [selectedSurfaceEquipment, setSelectedSurfaceEquipment] = useState([]);\r\n\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromStateForAssembly,\r\n );\r\n\r\n const [isOpenAddSurfaceEquipment, toggleModalAddSurfaceEquipment] = useModal(\r\n MODAL.ADD_EQUIPMENT_TO_TEMPLATE,\r\n );\r\n\r\n const onAddItem = useCallback(\r\n (tool) => {\r\n setSelectedTools((prevArray) => [...prevArray, tool]);\r\n dispatch(\r\n addNotification({\r\n message: 'Equipment added to template.',\r\n variant: NOTIFICATION_VARIANTS.SUCCESS,\r\n }),\r\n );\r\n },\r\n [dispatch],\r\n );\r\n\r\n const onSortItem = useCallback(\r\n ({ oldIndex, newIndex }) => {\r\n if (oldIndex === newIndex) return;\r\n\r\n const tools = [...selectedTools];\r\n const newTools = arrayMoveImmutable(tools, oldIndex, newIndex);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDeleteItem = useCallback(\r\n (templateEquipment) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(templateEquipment);\r\n tools.splice(toolIndex, 1);\r\n setSelectedTools(tools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onDuplicateItem = useCallback(\r\n (tool) => {\r\n const tools = [...selectedTools];\r\n const toolIndex = tools.indexOf(tool);\r\n tools.push(tool);\r\n const lastToolIndex = tools.lastIndexOf(tool);\r\n const newTools = arrayMoveImmutable(tools, lastToolIndex, toolIndex + 1);\r\n setSelectedTools(newTools);\r\n },\r\n [selectedTools],\r\n );\r\n\r\n const onSaveEquipmentTemplate = useCallback(() => {\r\n const sortedTools = selectedTools.map((tool) => tool.get('equipmentId'));\r\n const equipmentToSave = {\r\n name: equipmentTemplateInfo.name,\r\n description: equipmentTemplateInfo.description,\r\n organizationId: currentClientOrganizationId,\r\n templateEquipmentIds: sortedTools,\r\n };\r\n dispatch(saveEquipmentTemplate(equipmentToSave));\r\n }, [\r\n selectedTools,\r\n dispatch,\r\n equipmentTemplateInfo,\r\n currentClientOrganizationId,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SEARCH_EQUIPMENT,\r\n EQUIPMENT_ACTIONS.SAVE_EQUIPMENT_TEMPLATE,\r\n EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS,\r\n ),\r\n});\r\n\r\nexport default compose(connect(mapStateToProps))(\r\n AddEquipmentTemplatesModalContainer,\r\n);\r\n","import { compose } from 'redux';\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport { useEffect, useCallback, useRef, useState } from 'react';\r\n\r\nimport { useModal } from 'altus-modal';\r\n\r\nimport {\r\n onUnload,\r\n searchEquipmentTemplates,\r\n} from 'features/equipment/equipment.actions';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { MODAL } from 'features/equipment/equipment.constants';\r\nimport { getEquipmentTemplatesFromState } from 'features/equipment/equipment.selectors';\r\nimport { Filters } from 'features/equipment/toolAssemblies/components/ToolAssembliesFilter';\r\nimport EquipmentTemplatesTable from 'features/equipment/equipmentTemplates/components/EquipmentTemplatesTable';\r\nimport EquipmentTemplatesFilter from 'features/equipment/equipmentTemplates/components/EquipmentTemplatesFilter';\r\nimport EditEquipmentTemplatesModalContainer from 'features/equipment/equipmentTemplates/editEquipmentTemplates/EditEquipmentTemplatesModalContainer';\r\nimport AddEquipmentTemplatesModalContainer from 'features/equipment/equipmentTemplates/addEquipmentTemplates/AddEquipmentTemplatesModalContainer';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst EquipmentTemplatesContainer = ({\r\n classes,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n}) => {\r\n useEffect(() => {\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnUnload]);\r\n\r\n const [addEquipmentTemplateModal, toggleAddEquipmentTemplateModal] = useModal(\r\n MODAL.ADD_EQUIPMENT_TEMPLATE,\r\n );\r\n\r\n const [editEquipmentTemplateModal, toggleEditTemplateTemplateModal] =\r\n useModal(MODAL.EDIT_EQUIPMENT_TEMPLATE);\r\n\r\n const [initialFilterValues] = useState(defaultFormValues);\r\n\r\n const formRef = useRef(null);\r\n\r\n const submitForm = () => {\r\n formRef.current?.submitForm();\r\n };\r\n\r\n const [templateIdForEdit, setTemplateIdForEdit] = useState(null);\r\n const [templateForEdit, setTemplateForEdit] = useState(null);\r\n\r\n const equipmentTemplates = useSelector(getEquipmentTemplatesFromState);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n const onEditTemplate = (templateId, template) => {\r\n setTemplateIdForEdit(templateId);\r\n setTemplateForEdit(template);\r\n toggleEditTemplateTemplateModal();\r\n };\r\n\r\n const handleModalToggle = () => {\r\n setTemplateIdForEdit(null);\r\n setTemplateForEdit(null);\r\n submitForm();\r\n toggleEditTemplateTemplateModal();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {editEquipmentTemplateModal && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n filterContainer: {\r\n height: 'fit-content',\r\n width: '40%',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchEquipmentTemplates,\r\n }),\r\n withStyles(styles),\r\n)(EquipmentTemplatesContainer);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { useState, useEffect } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Grid, Tabs, Tab } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport BasePage from 'app/components/BasePageDense';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport { EUROPE_MAP_CENTER_COORDS, SystemPermission } from 'app/app.constants';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\n\r\nimport {\r\n EQUIPMENT_ACTIONS,\r\n EQUIPMENT_ACTIVE_TAB,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport CablesContainer from 'features/equipment/cables/CablesContainer';\r\nimport MwlToolsContainer from 'features/equipment/mwlTools/MwlToolsContainer';\r\nimport EwlToolsContainer from 'features/equipment/ewlTools/EwlToolsContainer';\r\nimport ToolAssembliesContainer from 'features/equipment/toolAssemblies/ToolAssembliesContainer';\r\nimport ThirdPartyToolsContainer from 'features/equipment/thirdPartyTools/ThirdPartyToolsContainer';\r\nimport GoogleMap from 'app/components/GoogleMap';\r\nimport BhaTemplatesContainer from 'features/equipment/bhaTemplates/BhaTemplatesContainer';\r\nimport SurfaceEquipmentsContainer from 'features/equipment/surfaceEquipment/SurfaceEquipmentsContainer';\r\nimport EquipmentTemplatesContainer from 'features/equipment/equipmentTemplates/EquipmentTemplatesContainer';\r\n\r\nconst activeTabHandler = (activeTab) => {\r\n switch (activeTab) {\r\n default:\r\n return null;\r\n case EQUIPMENT_ACTIVE_TAB.CABLES:\r\n return ;\r\n case EQUIPMENT_ACTIVE_TAB.EWL_TOOLS:\r\n return ;\r\n case EQUIPMENT_ACTIVE_TAB.MWL_TOOLS:\r\n return ;\r\n case EQUIPMENT_ACTIVE_TAB.BHA_TEMPLATES:\r\n return ;\r\n case EQUIPMENT_ACTIVE_TAB.TOOL_ASSEMBLIES:\r\n return ;\r\n case EQUIPMENT_ACTIVE_TAB.THIRD_PARTY_TOOLS:\r\n return ;\r\n case EQUIPMENT_ACTIVE_TAB.SURFACE_EQUIPMENT:\r\n return ;\r\n case EQUIPMENT_ACTIVE_TAB.EQUIPMENT_TEMPLATES:\r\n return ;\r\n }\r\n};\r\n\r\nconst EquipmentContainer = ({ classes, dataState, breadcrumb }) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n logoNavigation: '/operations',\r\n });\r\n\r\n const history = useHistory();\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n const [activeTab, setActiveTab] = useState(EQUIPMENT_ACTIVE_TAB.MWL_TOOLS);\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n useEffect(() => {\r\n if (!userPermissions.includes(SystemPermission.EQUIPMENT_TAB_VIEW)) {\r\n history.goBack();\r\n }\r\n }, [userPermissions, history]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTabHandler(activeTab)}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n contentContainer: {\r\n top: 0,\r\n bottom: 0,\r\n flexWrap: 'nowrap',\r\n position: 'absolute',\r\n flexDirection: 'column',\r\n paddingTop: theme.spacing(2),\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n },\r\n tabsContainer: {\r\n borderRadius: 3,\r\n backgroundColor: theme.palette.tabs.background.main,\r\n },\r\n tabPanel: {\r\n flex: 1,\r\n padding: theme.spacing(2),\r\n backgroundColor: theme.palette.tabs.background.main,\r\n overflow: 'auto',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.PAGE_LOADED,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n EQUIPMENT_ACTIONS.TOOLS_LOADED,\r\n EQUIPMENT_ACTIONS.SEARCH_TOOLS,\r\n EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n EQUIPMENT_ACTIONS.SEARCH_CABLES,\r\n EQUIPMENT_ACTIONS.M3_ITEM_SEARCH,\r\n EQUIPMENT_ACTIONS.SUPPLIERS_LOADED,\r\n EQUIPMENT_ACTIONS.SEARCH_EQUIPMENT,\r\n EQUIPMENT_ACTIONS.BHA_TEMPLATES_LOADED,\r\n EQUIPMENT_ACTIONS.TOOL_GROUPS_LOADED,\r\n EQUIPMENT_ACTIONS.TOOL_CONNECTORS_LOADED,\r\n EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS,\r\n EQUIPMENT_ACTIONS.EQUIPMENT_TEMPLATES_LOADED,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(EquipmentContainer);\r\n","import { Switch } from 'react-router-dom';\r\n\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport NavigationAppBar from 'app/components/NavigationAppBar';\r\n\r\nconst EquipmentRoutingContainer = ({ routes }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default EquipmentRoutingContainer;\r\n","import toolService from 'services/tool.service';\r\nimport { getToolSuppliers } from 'features/equipment/equipment.actions';\r\nimport {\r\n EQUIPMENT_DETAILS_ACTIONS,\r\n SURFACE_EQUIPMENT_DETAILS_ACTIONS,\r\n} from 'features/equipment/details/equipmentDetails.constants';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport equipmentService from 'features/equipment/equipment.service';\r\n\r\nexport const onLoad = (toolId) => (dispatch) => {\r\n dispatch(getToolSuppliers());\r\n dispatch({\r\n type: EQUIPMENT_DETAILS_ACTIONS.PAGE_LOADED,\r\n payload: () => toolService.getTool(toolId),\r\n });\r\n};\r\n\r\nexport const onUnload = () => (dispatch) => {\r\n dispatch({ type: EQUIPMENT_DETAILS_ACTIONS.UNLOAD_TOOL });\r\n};\r\n\r\nexport const onUnloadCable = () => (dispatch) => {\r\n dispatch({ type: EQUIPMENT_DETAILS_ACTIONS.UNLOAD_CABLE });\r\n};\r\n\r\nexport const onLoadSurfaceEquipmentDetail = (equipmentId) => (dispatch) => {\r\n const payload = equipmentService\r\n .getSurfaceEquipmentById(equipmentId)\r\n .then((payload) => {\r\n dispatch({\r\n type: SURFACE_EQUIPMENT_DETAILS_ACTIONS.PAGE_LOADED,\r\n payload,\r\n });\r\n\r\n return payload;\r\n })\r\n .catch(() => {\r\n dispatch({\r\n hideable: true,\r\n notification: {\r\n message: 'Not Found.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n },\r\n type: SURFACE_EQUIPMENT_DETAILS_ACTIONS.PAGE_LOADED,\r\n payload,\r\n });\r\n });\r\n return payload;\r\n};\r\n\r\nexport const onUnloadSurfaceEquipment = () => (dispatch) => {\r\n dispatch({ type: SURFACE_EQUIPMENT_DETAILS_ACTIONS.UNLOAD_TOOL });\r\n};\r\n","import { Link } from 'react-router-dom';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useMemo } from 'react';\r\n\r\nimport { Table, TableRow } from 'altus-ui-components';\r\n\r\nimport RedIcon from 'assets/Red.svg';\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport OrangeIcon from 'assets/Orange.svg';\r\nimport { toEquipmentAssetHistory } from 'utils/route.util';\r\n\r\nconst statusRankings = {\r\n Template: 1,\r\n Preliminary: 1,\r\n 'Config Struct': 1,\r\n Serviceable: 1,\r\n 'Svceable Restr': 2,\r\n 'Standy By': 2,\r\n Spare: 2,\r\n};\r\n\r\nconst statusIcons = {\r\n Template: GreenIcon,\r\n Preliminary: GreenIcon,\r\n 'Config Struct': GreenIcon,\r\n Serviceable: GreenIcon,\r\n 'Svceable Restr': OrangeIcon,\r\n 'Standy By': OrangeIcon,\r\n Spare: OrangeIcon,\r\n Unserviceable: RedIcon,\r\n Incident: RedIcon,\r\n 'Scrap Proposal': RedIcon,\r\n Scrapped: RedIcon,\r\n Renamed: RedIcon,\r\n};\r\n\r\nconst sort = (assets) =>\r\n assets.sort((a, b) => {\r\n const aStatus = a.get('status');\r\n const bStatus = b.get('status');\r\n const aRank = statusRankings[aStatus] || 3;\r\n const bRank = statusRankings[bStatus] || 3;\r\n\r\n if (aRank < bRank) {\r\n return -1;\r\n } else if (aRank > bRank) {\r\n return 1;\r\n } else if (aStatus < bStatus) {\r\n return -1;\r\n } else if (aStatus > bStatus) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\nconst EquipmentAssetsTable = ({\r\n equipmentId,\r\n equipmentType,\r\n assets,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 3,\r\n Header: 'Status',\r\n accessor: (asset) => asset.get('status'),\r\n Cell: ({ row }) => {\r\n const asset = row.original;\r\n const status = asset.get('status');\r\n const StatusIcon = statusIcons[status];\r\n\r\n return (\r\n \r\n {StatusIcon && \"Status}\r\n {status}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Serial No',\r\n accessor: (asset) => asset.get('serialNumber'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Warehouse',\r\n accessor: (asset) => asset.get('warehouse'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Location',\r\n accessor: (asset) => asset.get('location'),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Installation',\r\n accessor: (asset) => asset.get('installation'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Last transaction',\r\n Cell: ({ row }) => {\r\n const asset = row.original;\r\n\r\n const lastTransaction = asset.get('lastTransaction');\r\n const options = {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n hour12: true,\r\n };\r\n\r\n const formattedDateTime = new Date(lastTransaction).toLocaleString(\r\n 'en-GB',\r\n options,\r\n );\r\n\r\n return formattedDateTime;\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableRowComponent = ({ item, ...rest }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default EquipmentAssetsTable;\r\n","import * as THREE from 'three';\r\nimport { useThree } from '@react-three/fiber';\r\nimport { Cylinder } from '@react-three/drei';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst Tool3DObject = ({\r\n tool3DObjectUrl,\r\n handleToggleViewTool3DModel,\r\n toolDiameter,\r\n toolLength,\r\n cameraPosition,\r\n}) => {\r\n const [objectLoaded, setObjectLoaded] = useState(null);\r\n const { camera } = useThree();\r\n\r\n const handleOnClick = (event) => {\r\n handleToggleViewTool3DModel();\r\n event.stopPropagation();\r\n };\r\n\r\n const handleOnPointerOver = () => {\r\n camera.position.set(0, 0, cameraPosition - 0.01);\r\n document.body.style.cursor = 'pointer';\r\n };\r\n\r\n const handleOnPointerOut = () => {\r\n camera.position.set(0, 0, cameraPosition);\r\n document.body.style.cursor = 'auto';\r\n };\r\n\r\n useEffect(() => {\r\n if (tool3DObjectUrl) {\r\n const loader = new OBJLoader();\r\n loader.load(\r\n tool3DObjectUrl,\r\n (toolObj) => {\r\n setObjectLoaded(toolObj);\r\n toolObj.traverse((child) => {\r\n if (child.isMesh) {\r\n child.material = new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.bha.main,\r\n roughness: 0,\r\n metalness: 1,\r\n });\r\n }\r\n });\r\n },\r\n undefined,\r\n (error) => {\r\n console.error('An error occurred:', error);\r\n },\r\n );\r\n }\r\n }, [tool3DObjectUrl]);\r\n return tool3DObjectUrl ? (\r\n objectLoaded && (\r\n <>\r\n \r\n \r\n )\r\n ) : (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Tool3DObject;\r\n","import { useEffect, useState } from 'react';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport { Grid, Typography, IconButton } from '@material-ui/core';\r\nimport NavigationHelpTooltip from 'app/components/WellboreContextualization/NavigationHelpTooltip';\r\n\r\nconst Tool3DObjectModalHeader = ({ closeModal, title }) => {\r\n const [help, setHelp] = useState();\r\n\r\n useEffect(() => {\r\n prepareHelpData();\r\n }, []);\r\n\r\n const prepareHelpData = () => {\r\n setHelp({\r\n title: 'HOW TO INTERACT WITH 3D OBJECT?',\r\n data: [\r\n {\r\n navType: '1- Inspecting the 3D Object:',\r\n content: 'Use simple dragging to inspect the 3D Object',\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/navigate.png`,\r\n },\r\n {\r\n navType: '2- Zoom in and out:',\r\n content: (\r\n
    \r\n
  • \r\n Touchpad: Use two fingers and move them closer to zoom in\r\n further to zoom out\r\n
  • \r\n
  • \r\n Mouse: Scroll forward to zoom in and backward to zoom out.\r\n
  • \r\n
\r\n ),\r\n src: `${PUBLIC_ASSETS_URL}/images/navigation/zoomIn.png`,\r\n },\r\n ],\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n {help && }\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Tool3DObjectModalHeader;\r\n","import * as THREE from 'three';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport { Canvas } from '@react-three/fiber';\r\nimport { OrbitControls, Cylinder } from '@react-three/drei';\r\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\r\nimport React, { Suspense, useState, useEffect, useRef } from 'react';\r\nimport Environment from 'app/components/WellboreTrajectoryDetailed3DView/Environment';\r\nimport themes, { defaultThemeType } from 'layout/themes';\r\n\r\nconst theme = themes[defaultThemeType];\r\n\r\nconst Tool3DObjectModalContent = ({\r\n tool3DObjectUrl,\r\n toolDiameter,\r\n toolLength,\r\n}) => {\r\n const cameraPosition =\r\n toolDiameter > toolLength ? 10 * toolDiameter : 5 * toolLength;\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {tool3DObjectUrl ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst ToolObject = ({ tool3DObjectUrl }) => {\r\n const [objectLoaded, setObjectLoaded] = useState(null);\r\n const objectRef = useRef();\r\n\r\n useEffect(() => {\r\n let loader = new OBJLoader();\r\n if (tool3DObjectUrl) {\r\n loader.load(\r\n tool3DObjectUrl,\r\n (toolObj) => {\r\n setObjectLoaded(toolObj);\r\n toolObj.traverse((child) => {\r\n if (child.isMesh) {\r\n child.material = new THREE.MeshStandardMaterial({\r\n color: theme.altus.components.ContextualizedWell.bha.main,\r\n roughness: 0,\r\n metalness: 1,\r\n });\r\n }\r\n });\r\n const boundingBox = new THREE.Box3().setFromObject(toolObj);\r\n\r\n // Compute the center of the bounding box\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n\r\n // Translate all children (meshes) to re-center the group\r\n toolObj.children.forEach((child) => {\r\n child.position.sub(center);\r\n });\r\n },\r\n undefined,\r\n (error) => {\r\n console.error('An error occurred:', error);\r\n },\r\n );\r\n }\r\n\r\n return () => {\r\n loader = null;\r\n setObjectLoaded(null);\r\n };\r\n }, [tool3DObjectUrl]);\r\n\r\n return (\r\n objectLoaded && (\r\n \r\n )\r\n );\r\n};\r\n\r\nconst DefaultToolObject = ({ toolDiameter, toolLength }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Tool3DObjectModalContent;\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Dialog, DialogContent } from '@material-ui/core';\r\nimport Tool3DObjectModalHeader from 'features/equipment/components/Tool3DObjectModalHeader';\r\nimport Tool3DObjectModalContent from 'features/projects/tool/components/Tool3DObjectModalContent';\r\n\r\nconst Tool3DObjectModalView = ({\r\n title,\r\n toggleModal,\r\n openModal,\r\n classes,\r\n tool3DObjectUrl,\r\n toolDiameter,\r\n toolLength,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: 'inherit',\r\n },\r\n content: {},\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(Tool3DObjectModalView);\r\n","import PropTypes from 'prop-types';\r\nimport { useState, Suspense } from 'react';\r\nimport { Canvas } from '@react-three/fiber';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\nimport Tool3DObject from 'features/projects/tool/components/Tool3DObject';\r\nimport Environment from 'app/components/WellboreTrajectoryDetailed3DView/Environment';\r\nimport Tool3DObjectModalView from 'features/projects/tool/components/Tool3DObjectModalView';\r\n\r\nconst Tool3DObjectContainer = ({\r\n title,\r\n tool3DObjectUrl,\r\n toolDiameter,\r\n toolLength,\r\n}) => {\r\n const [viewTool3DModel, toggleViewTool3DModel] = useState(false);\r\n const cameraPosition =\r\n toolDiameter > toolLength ? 10 * toolDiameter : 2 * toolLength;\r\n\r\n const handleToggleViewTool3DModel = () => {\r\n toggleViewTool3DModel(!viewTool3DModel);\r\n };\r\n\r\n if (toolLength && toolDiameter)\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n return null;\r\n};\r\n\r\nTool3DObjectContainer.propTypes = {\r\n title: PropTypes.node,\r\n toolName: PropTypes.string,\r\n highlighted: PropTypes.bool,\r\n onHoverScale: PropTypes.bool,\r\n onHoverDarken: PropTypes.bool,\r\n tool3DObjectUrl: PropTypes.string,\r\n orientation: PropTypes.oneOf(Object.values(ExifOrientation)),\r\n};\r\n\r\nexport default Tool3DObjectContainer;\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\n\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport { convertMetric } from 'app/components/WellboreTrajectoryDetailed3DView/Utils';\r\nimport Tool3DObjectContainer from 'features/projects/tool/components/Tool3DObjectContainer';\r\n\r\nconst EquipmentDetailsSubHeader = ({ equipment, classes, toggleModal }) => {\r\n return (\r\n <>\r\n \r\n \r\n Item number: {equipment.get('m3ItemNumber')}\r\n \r\n \r\n {equipment.get('description') ?? 'No description'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n container: {\r\n flexDirection: 'column',\r\n overflow: 'auto',\r\n },\r\n topContainer: {\r\n flexDirection: 'row',\r\n height: '10%',\r\n },\r\n topText: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n '& > canvas': {\r\n objectFit: 'contain',\r\n },\r\n maxHeight: '100%',\r\n paddingLeft: theme.spacing(3),\r\n },\r\n toolObject: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n '& > canvas': {\r\n objectFit: 'contain',\r\n },\r\n maxHeight: '100%',\r\n height: '100%',\r\n paddingLeft: theme.spacing(1),\r\n },\r\n toolObjectEditable: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n '& > canvas': {\r\n objectFit: 'contain',\r\n },\r\n maxHeight: '100%',\r\n height: '100%',\r\n paddingLeft: theme.spacing(1),\r\n cursor: 'pointer',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(EquipmentDetailsSubHeader);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { EUROPE_MAP_CENTER_COORDS } from 'app/app.constants';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { loadEquipmentAssets } from 'features/equipment/equipment.actions';\r\nimport { getEquipmentAssetsFromState } from 'features/equipment/equipment.selectors';\r\nimport EquipmentAssetsTable from './components/EquipmentAssetsTable';\r\nimport EquipmentDetailsSubHeader from 'features/equipment/components/EquipmentDetailsSubHeader';\r\nimport ProjectMapLocations from 'features/projects/components/WellMapLocations/ProjectMapLocations';\r\nimport { EQUIPMENT_ACTIONS } from '../equipment.constants';\r\n\r\nconst EquipmentAssetsContainer = ({\r\n equipmentId,\r\n equipmentType,\r\n classes,\r\n assets,\r\n dataState,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n}) => {\r\n useHeader({ subTitle: breadcrumb, logoNavigation: '/' });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(equipmentId, equipmentType);\r\n }, [equipmentId, equipmentType, dispatchOnLoad]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!assets.size ? (\r\n No assets...\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n container: {\r\n flexDirection: 'column',\r\n top: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n padding: theme.spacing(2.25),\r\n },\r\n topContainer: {\r\n flexDirection: 'row',\r\n height: '10%',\r\n },\r\n tableContainer: {\r\n paddingTop: '10px',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n assets: getEquipmentAssetsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.RECEIVE_EQUIPMENT_ASSETS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: loadEquipmentAssets,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(EquipmentAssetsContainer);\r\n","import CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton } from '@material-ui/core';\r\n\r\nconst EditToolImageModalHeader = ({ toggleModal }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditToolImageModalHeader;\r\n","import classNames from 'classnames';\r\nimport loadImage from 'blueimp-load-image';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useEffect, useState, useRef } from 'react';\r\n\r\nimport { Image } from 'app/components/withTooltip';\r\nimport { PUBLIC_ASSETS_URL } from 'app/app.constants';\r\nimport { SCALES } from 'features/equipment/editToolImage/EditToolImageModal';\r\n\r\nconst ToolImageContainerWithLining = ({\r\n tool,\r\n style,\r\n title,\r\n ogTool,\r\n classes,\r\n toolName,\r\n className,\r\n ImageProps,\r\n scaleFactor,\r\n highlighted,\r\n orientation,\r\n toolImageUrl,\r\n TooltipProps,\r\n onHoverScale,\r\n onHoverDarken,\r\n containerStyle,\r\n assembly = false,\r\n handleSetValuesFromEdit,\r\n}) => {\r\n const imageContainerRef = useRef(null);\r\n const [displayedImageSize, setDisplayedImageSize] = useState({\r\n width: 0,\r\n height: 0,\r\n });\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n for (let entry of entries) {\r\n if (entry.target === imageContainerRef.current) {\r\n const { width, height } = entry.target.getBoundingClientRect();\r\n setDisplayedImageSize({ width, height });\r\n }\r\n }\r\n });\r\n\r\n if (imageContainerRef.current) {\r\n resizeObserver.observe(imageContainerRef.current);\r\n }\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n };\r\n }, []);\r\n\r\n const defaultImage = `${PUBLIC_ASSETS_URL}/images/tools/placeholder${\r\n orientation ?? ''\r\n }.png`;\r\n\r\n const [image, setImage] = useState(defaultImage);\r\n\r\n const [imageDimensions, setImageDimensions] = useState({\r\n width: 0,\r\n height: 0,\r\n });\r\n\r\n const handleHiddenImageLoad = (event) => {\r\n const { naturalWidth, naturalHeight } = event.target;\r\n setImageDimensions({ width: naturalWidth, height: naturalHeight });\r\n };\r\n\r\n const setDefaultImage = useCallback(\r\n () => setImage(defaultImage),\r\n [defaultImage],\r\n );\r\n\r\n useEffect(() => {\r\n let isSubscribed = true;\r\n if (toolImageUrl) {\r\n loadImage(toolImageUrl, {\r\n orientation,\r\n crossOrigin: true,\r\n })\r\n .then((response) => {\r\n if (isSubscribed) {\r\n try {\r\n if (orientation) {\r\n response.image.toBlob((blob) => {\r\n var imageUrl = URL.createObjectURL(blob);\r\n if (isSubscribed) {\r\n setImage(imageUrl);\r\n }\r\n });\r\n } else {\r\n setImage(toolImageUrl);\r\n }\r\n } catch (error) {\r\n setDefaultImage();\r\n }\r\n }\r\n })\r\n .catch(() => isSubscribed && setDefaultImage());\r\n }\r\n return () => (isSubscribed = false);\r\n }, [orientation, setDefaultImage, toolImageUrl]);\r\n\r\n const containerRef = useRef(null);\r\n const [_, setContainerSize] = useState({ width: 0, height: 0 });\r\n\r\n useEffect(() => {\r\n const measureContainer = () => {\r\n if (containerRef.current) {\r\n const { clientWidth, clientHeight } = containerRef.current;\r\n setContainerSize({ width: clientWidth, height: clientHeight });\r\n }\r\n };\r\n\r\n measureContainer();\r\n window.addEventListener('resize', measureContainer);\r\n\r\n return () => {\r\n window.removeEventListener('resize', measureContainer);\r\n };\r\n }, []);\r\n\r\n const scaledHorizontalLineStyle = {\r\n height: '4px',\r\n backgroundColor: 'red',\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: `${tool.length.value * 1000}px`,\r\n maxWidth: '1000px',\r\n };\r\n const isToolODExceeding = tool.outerDiameter.value > 250;\r\n const limitedODValue = isToolODExceeding ? 250 : tool.outerDiameter.value;\r\n\r\n const scaledTopHorizontalLineStyle = {\r\n ...scaledHorizontalLineStyle,\r\n width: '12%',\r\n top: `calc(50% - ${limitedODValue / 2}px)`,\r\n };\r\n\r\n const scaledBottomHorizontalLineStyle = {\r\n ...scaledHorizontalLineStyle,\r\n width: '12%',\r\n top: `calc(50% + ${limitedODValue / 2}px)`,\r\n };\r\n\r\n const scaledInBetweenVerticalLineStyle = {\r\n width: '4px',\r\n height: `${limitedODValue}px`,\r\n backgroundColor: 'red',\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n };\r\n\r\n const isToolLengthExceeding = tool.length.value * 1000 > 1000;\r\n\r\n const scaledVerticalLineStartStyle = {\r\n height: isToolODExceeding ? '250px' : `${tool.outerDiameter.value}px`,\r\n width: '4px',\r\n backgroundColor: 'red',\r\n position: 'absolute',\r\n left: isToolLengthExceeding\r\n ? 'calc(50% - 500px)'\r\n : `calc(50% - ${tool.length.value * 500}px)`,\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n };\r\n\r\n const scaledVerticalLineEndStyle = {\r\n ...scaledVerticalLineStartStyle,\r\n left: isToolLengthExceeding\r\n ? 'calc(50% + 500px)'\r\n : `calc(50% + ${tool.length.value * 500}px)`,\r\n };\r\n\r\n const calculateScaledImageWidthForDisplay = () => {\r\n if (tool.length.value * 1000 > 1000) {\r\n const toolLength = tool.length.value * 1000;\r\n const ratio = toolLength / imageDimensions.height;\r\n const newWidth = 1000 / ratio;\r\n return newWidth;\r\n } else {\r\n return imageDimensions.height;\r\n }\r\n };\r\n\r\n const calculateScaledImageHeightForDisplay = () => {\r\n if (tool.outerDiameter.value > 250) {\r\n const toolWidth = tool.outerDiameter.value;\r\n const ratio = toolWidth / imageDimensions.width;\r\n const newWidth = 250 / ratio;\r\n return newWidth;\r\n } else {\r\n return imageDimensions.width;\r\n }\r\n };\r\n\r\n const imageContainerStyle = {\r\n width: `${calculateScaledImageWidthForDisplay()}px`,\r\n maxWidth: '1200px',\r\n minWidth: `${calculateScaledImageWidthForDisplay()}px`,\r\n height: `${calculateScaledImageHeightForDisplay()}px`,\r\n padding: 0,\r\n margin: 0,\r\n boxSizing: 'border-box',\r\n transform: `scale(${scaleFactor.width}, ${scaleFactor.height})`,\r\n transformOrigin: 'center center',\r\n };\r\n\r\n const labelStyle = {\r\n position: 'absolute',\r\n color: 'red',\r\n backgroundColor: 'transparent',\r\n top: `calc(50% - ${limitedODValue / 2}px - 10px)`,\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n whiteSpace: 'nowrap',\r\n fontSize: '16px',\r\n fontWeight: '700',\r\n zIndex: 10,\r\n };\r\n\r\n const secondLabelStyle = {\r\n ...labelStyle,\r\n top: `calc(50% + ${limitedODValue / 2}px + 10px)`,\r\n left: '50%',\r\n };\r\n\r\n const calculateScaledDimensions = () => {\r\n return {\r\n scaledWidth: displayedImageSize.width * scaleFactor.width,\r\n scaledHeight: displayedImageSize.height * scaleFactor.height,\r\n };\r\n };\r\n\r\n const { scaledWidth, scaledHeight } = calculateScaledDimensions();\r\n\r\n const calculateNewToolLengthRatio = () => {\r\n const actualLength = tool.length.value * 1000;\r\n const displayedLengthMax = 1000;\r\n if (actualLength > displayedLengthMax) {\r\n const ratio = displayedLengthMax / actualLength;\r\n const ratioAndScalingRatioHeight =\r\n scaledWidth / imageDimensions.height / ratio;\r\n const ratioedDimensions =\r\n scaledWidth.toFixed(2) * ratioAndScalingRatioHeight;\r\n const final = ratioedDimensions / (scaledWidth / imageDimensions.height);\r\n return final / imageDimensions.height;\r\n } else {\r\n return scaledWidth / imageDimensions.height;\r\n }\r\n };\r\n\r\n const prevToolLengthRatio = useRef();\r\n\r\n useEffect(\r\n () => {\r\n const newToolLengthRatio = calculateNewToolLengthRatio();\r\n if (newToolLengthRatio !== prevToolLengthRatio.current) {\r\n handleSetValuesFromEdit(SCALES.HORIZONTAL_SCALE, newToolLengthRatio);\r\n prevToolLengthRatio.current = newToolLengthRatio;\r\n }\r\n },\r\n // eslint-disable-next-line\r\n [\r\n scaledWidth,\r\n imageDimensions.height,\r\n tool.length.value,\r\n handleSetValuesFromEdit,\r\n ],\r\n );\r\n\r\n //DEBUG PURPOSES\r\n // const calculateActualDimensionsAndRatioDisplay = () => {\r\n // const actualLength = tool.length.value * 1000;\r\n // const displayedLengthMax = 1000;\r\n // if (actualLength > displayedLengthMax) {\r\n // const ratio = displayedLengthMax / actualLength;\r\n // const ratioAndScalingRatioHeight =\r\n // scaledWidth / imageDimensions.height / ratio;\r\n // const ratioedDimensions =\r\n // scaledWidth.toFixed(2) * ratioAndScalingRatioHeight;\r\n // const final = ratioedDimensions / (scaledWidth / imageDimensions.height);\r\n // return (\r\n // <>\r\n //

Ratio size : {ratio}

\r\n //

Checked width : {final}

\r\n //

Ratio for image: {calculateNewToolLengthRatio()}

\r\n //

\r\n // New image size:{' '}\r\n // {(final / imageDimensions.height) * imageDimensions.height}\r\n //

\r\n // \r\n // );\r\n // } else {\r\n // return

{calculateNewToolLengthRatio()}

;\r\n // }\r\n // };\r\n\r\n const calculateNewToolWidthRatio = () => {\r\n const actualLength = tool.outerDiameter.value;\r\n const displayedLengthMax = 250;\r\n if (actualLength > displayedLengthMax) {\r\n const ratio = displayedLengthMax / actualLength;\r\n const ratioAndScalingRatioHeight =\r\n scaledHeight / imageDimensions.width / ratio;\r\n const ratioedDimensions =\r\n scaledHeight.toFixed(2) * ratioAndScalingRatioHeight;\r\n const final = ratioedDimensions / (scaledHeight / imageDimensions.width);\r\n return final / imageDimensions.width;\r\n } else {\r\n return scaledHeight / imageDimensions.width;\r\n }\r\n };\r\n\r\n const prevToolWidthRatio = useRef();\r\n\r\n useEffect(\r\n () => {\r\n const newToolWidthRatio = calculateNewToolWidthRatio();\r\n // Only update if the value has changed\r\n if (\r\n newToolWidthRatio !== prevToolWidthRatio.current &&\r\n scaleFactor.height !== 1\r\n ) {\r\n handleSetValuesFromEdit(SCALES.VERTICAL_SCALE, newToolWidthRatio);\r\n prevToolWidthRatio.current = newToolWidthRatio;\r\n }\r\n },\r\n // eslint-disable-next-line\r\n [\r\n scaleFactor.height,\r\n scaledHeight,\r\n imageDimensions.width,\r\n tool.outerDiameter.value,\r\n handleSetValuesFromEdit,\r\n ],\r\n );\r\n\r\n // DEBUG PURPOSES\r\n // useEffect(() => {\r\n // console.log(scaleFactor);\r\n // }, [scaleFactor]);\r\n\r\n // DEBUG PURPOSES\r\n // const calculateActualDimensionsAndRatioHeightDisplay = () => {\r\n // const actualLength = tool.outerDiameter.value;\r\n // const displayedLengthMax = 250;\r\n // if (actualLength > displayedLengthMax) {\r\n // const ratio = displayedLengthMax / actualLength;\r\n // const ratioAndScalingRatioHeight =\r\n // scaledHeight / imageDimensions.width / ratio;\r\n // const ratioedDimensions =\r\n // scaledHeight.toFixed(2) * ratioAndScalingRatioHeight;\r\n // const final = ratioedDimensions / (scaledHeight / imageDimensions.width);\r\n // return (\r\n // <>\r\n //

Ratio size H : {ratio}

\r\n //

Checked height : {final}

\r\n //

Ratio for image H: {calculateNewToolWidthRatio()}

\r\n //

\r\n // New image size:{' '}\r\n // {(final / imageDimensions.width) * imageDimensions.width}\r\n //

\r\n // \r\n // );\r\n // } else {\r\n // return

{calculateNewToolWidthRatio()}

;\r\n // }\r\n // };\r\n\r\n return (\r\n \r\n {/* DEBUG PURPOSES */}\r\n {/* \r\n

\r\n Tool length and OD: {tool.length.value * 1000} x{' '}\r\n {tool.outerDiameter.value}\r\n

\r\n

\r\n Natural Image Size: {imageDimensions.height} x {imageDimensions.width}\r\n

\r\n

\r\n Displayed Image Size: {displayedImageSize.width} x{' '}\r\n {displayedImageSize.height}\r\n

\r\n

\r\n Scaled Dimensions: {scaledWidth.toFixed(2)} x{' '}\r\n {scaledHeight.toFixed(2)}\r\n

\r\n

\r\n Scaling ratio: {scaledWidth / imageDimensions.height} x{' '}\r\n {scaledHeight / imageDimensions.width}\r\n

\r\n

----------------------------

\r\n

{calculateActualDimensionsAndRatioDisplay()}

\r\n

----------------------------

\r\n

{calculateActualDimensionsAndRatioHeightDisplay()}

\r\n

----------------------------

\r\n */}\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n OD - {ogTool.outerDiameter.roundedValue} {ogTool.outerDiameter.unit}\r\n
\r\n
\r\n Length - {ogTool.length.roundedValue} {ogTool.length.unit}\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n imageContainer: {\r\n position: 'relative',\r\n display: 'flex',\r\n width: '80%',\r\n maxWidth: '100%',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '90%',\r\n },\r\n root: {},\r\n onHighlight: {\r\n filter: 'brightness(120%)',\r\n transform: 'scale(2.0)',\r\n transition: 'transform .3s',\r\n },\r\n onHighlightAssembly: {\r\n filter: 'brightness(120%)',\r\n transition: 'transform .3s',\r\n },\r\n onHoverScale: {\r\n '&:hover': {\r\n filter: 'brightness(120%)',\r\n transform: 'scale(2.0)',\r\n transition: 'transform .3s',\r\n },\r\n },\r\n onHoverDarken: {\r\n '&:hover': {\r\n opacity: theme.palette.action.hoverOpacity,\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ToolImageContainerWithLining);\r\n","import { compose } from 'redux';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\r\n\r\nimport {\r\n Grid,\r\n Badge,\r\n Dialog,\r\n IconButton,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { editToolImage } from 'features/equipment/equipment.actions';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport { convertToPreferredUnits } from 'features/equipment/editToolImage/editToolImage.helpers';\r\nimport EditToolImageModalHeader from 'features/equipment/editToolImage/EditToolImageModalHeader';\r\nimport ToolImageContainerWithLining from 'features/equipment/editToolImage/ToolImageContainerWithLining';\r\n\r\nexport const SCALES = {\r\n VERTICAL_SCALE: 'VERTICAL_SCALE',\r\n HORIZONTAL_SCALE: 'HORIZONTAL_SCALE',\r\n};\r\n\r\nconst EditToolImageModal = ({ tool, open, toggleModal, classes }) => {\r\n const dispatch = useDispatch();\r\n const [scaleFactor, setScaleFactor] = useState({ width: 1, height: 1 });\r\n const [scaleAttempted, setScaleAttempred] = useState(false);\r\n\r\n const handleScale = (widthFactor, heightFactor) => {\r\n setScaleFactor((prevScale) => ({\r\n width: prevScale.width * widthFactor,\r\n height: prevScale.height * heightFactor,\r\n }));\r\n setScaleAttempred(true);\r\n };\r\n\r\n useEffect(() => {\r\n setScaleFactor(() => ({\r\n width: 1,\r\n height: 1,\r\n }));\r\n }, [open]);\r\n\r\n const [convertedTool, setConvertedTool] = useState(tool.toJS());\r\n\r\n useEffect(() => {\r\n const toolWithConvertedUnits = convertToPreferredUnits(tool.toJS());\r\n setConvertedTool(toolWithConvertedUnits);\r\n }, [tool]);\r\n\r\n const [valuesFromEdit, setValuesFromEdit] = useState({\r\n horizontalScale: 1,\r\n verticalScale: 1,\r\n rotation: 'None',\r\n });\r\n\r\n // DEBUG PURPOSES\r\n // useEffect(() => {\r\n // console.log(valuesFromEdit);\r\n // }, [valuesFromEdit]);\r\n\r\n const handleSetValuesFromEdit = (scale, value) => {\r\n setValuesFromEdit((prev) => {\r\n let updatedState = { ...prev };\r\n\r\n if (scale === SCALES.HORIZONTAL_SCALE) {\r\n updatedState.verticalScale = value;\r\n } else if (scale === SCALES.VERTICAL_SCALE) {\r\n updatedState.horizontalScale = value;\r\n }\r\n return updatedState;\r\n });\r\n };\r\n\r\n const handleEdit = useCallback(\r\n (values) => {\r\n dispatch(editToolImage(values, tool.get('toolImageId')));\r\n },\r\n [dispatch, tool],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleScale(0.48, 1)}>\r\n \r\n \r\n \r\n \r\n \r\n handleScale(0.98, 1)}>\r\n \r\n \r\n \r\n \r\n handleScale(1.02, 1)}>\r\n \r\n \r\n \r\n \r\n \r\n handleScale(1.9, 1)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleScale(1, 1.9)}>\r\n \r\n \r\n \r\n \r\n \r\n handleScale(1, 1.02)}>\r\n \r\n \r\n \r\n \r\n handleScale(1, 0.98)}>\r\n \r\n \r\n \r\n \r\n \r\n handleScale(1, 0.48)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n toggleModal();\r\n }}\r\n >\r\n Cancel\r\n \r\n \r\n \r\n {\r\n handleEdit(valuesFromEdit);\r\n }}\r\n disabled={!scaleAttempted}\r\n >\r\n Save\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n contentRoot: {\r\n width: '100%',\r\n },\r\n toolImageWrapper: {\r\n height: '100%',\r\n },\r\n toolImageContainer: {\r\n overflow: 'hidden',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: theme.palette.secondary.darkGrey,\r\n height: '100%',\r\n width: '70%',\r\n maxWidth: '100%',\r\n },\r\n content: {\r\n height: '100%',\r\n },\r\n root: {\r\n height: '90%',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n height: '40%',\r\n },\r\n saveBtn: {\r\n height: 'fit-content',\r\n },\r\n cancelBtn: {\r\n color: theme.palette.primary.newLight,\r\n height: 'fit-content',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.CREATE_TOOL,\r\n ),\r\n })),\r\n withStyles(styles),\r\n)(EditToolImageModal);\r\n","export const convertToPreferredUnits = (tool) => {\r\n const convertedTool = { ...tool };\r\n\r\n if (tool.length.unit === 'ft') {\r\n convertedTool.length = {\r\n ...tool.length,\r\n value: tool.length.value * 0.3048,\r\n unit: 'm',\r\n };\r\n }\r\n\r\n if (tool.outerDiameter.unit === 'in') {\r\n convertedTool.outerDiameter = {\r\n ...tool.outerDiameter,\r\n value: tool.outerDiameter.value * 25.4,\r\n unit: 'mm',\r\n };\r\n }\r\n\r\n return convertedTool;\r\n};\r\n","import moment from 'moment';\r\nimport { compose } from 'redux';\r\nimport { useEffect, useState } from 'react';\r\nimport { lighten } from '@material-ui/core/styles';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\nimport { Grid, Tabs, Tab, Divider, Typography } from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Button } from 'app/components/withTooltip';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n} from 'features/equipment/details/equipmentDetails.actions';\r\n\r\nimport {\r\n getToolFromState,\r\n getToolGroupsFromState,\r\n getToolSuppliersFromState,\r\n} from 'features/equipment/equipment.selectors';\r\n\r\nimport {\r\n MODAL,\r\n EQUIPMENT_ACTIONS,\r\n EquipmentType,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport {\r\n EQUIPMENT_DETAILS_ACTIONS,\r\n EQUIPMENT_DETAILS_ACTIVE_TABS,\r\n} from 'features/equipment/details/equipmentDetails.constants';\r\n\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\nimport { getToolGroups } from 'features/equipment/equipment.actions';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport EquipmentAssetsContainer from '../assets/EquipmentAssetsContainer';\r\nimport M3ModalContainer from 'features/equipment/m3Components/M3ModalContainer';\r\nimport AddToolModalContainer from 'features/equipment/components/AddToolModalContainer';\r\nimport EquipmentDetailsSubHeader from 'features/equipment/components/EquipmentDetailsSubHeader';\r\nimport EditToolImageModal from 'features/equipment/editToolImage/EditToolImageModal';\r\n\r\nconst EquipmentDetailsContainer = ({\r\n equipmentId,\r\n classes,\r\n dataState,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(\r\n EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS,\r\n );\r\n\r\n const headerSubtitleHandler = (activeTab) => {\r\n switch (activeTab) {\r\n case EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS:\r\n return 'Details';\r\n case EQUIPMENT_DETAILS_ACTIVE_TABS.ASSETS:\r\n return 'Assets';\r\n default:\r\n return 'Details';\r\n }\r\n };\r\n\r\n useHeader({\r\n subTitle: headerSubtitleHandler(activeTab),\r\n logoNavigation: '/',\r\n });\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [editM3Tool, toggleEditM3Tool] = useModal(MODAL.EDIT_M3_TOOL);\r\n const [edit3rdPartyTool, toggleEdit3rdPartyTool] = useModal(\r\n MODAL.EDIT_3RDPARTY_TOOL,\r\n );\r\n const [editToolImage, toggleEditToolImage] = useModal(MODAL.EDIT_TOOL_IMAGE);\r\n\r\n const toolGroups = useSelector(getToolGroupsFromState);\r\n const toolSuppliers = useSelector(getToolSuppliersFromState);\r\n\r\n const displayDataText = (data) => {\r\n if (dataState.isLoading()) {\r\n return 'Loading...';\r\n }\r\n\r\n if (!data || data === undefined) {\r\n return 'No Data';\r\n } else {\r\n return data;\r\n }\r\n };\r\n\r\n const displayDateText = (date) => {\r\n if (dataState.isLoading()) {\r\n return 'Loading...';\r\n }\r\n\r\n if (!date || date === undefined) {\r\n return 'No Data';\r\n } else {\r\n const parsedDate = moment(date);\r\n const formattedDate = parsedDate.format('DD.MM.YYYY');\r\n return formattedDate;\r\n }\r\n };\r\n\r\n const tool = useSelector(getToolFromState);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(equipmentId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, equipmentId]);\r\n\r\n useEffect(() => {\r\n if (!tool.isEmpty()) {\r\n dispatch(getToolGroups(tool.get('toolCategoryId')));\r\n }\r\n }, [tool, dispatch]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTab === EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS && (\r\n \r\n \r\n \r\n \r\n \r\n {!tool.isEmpty() ? (\r\n <>\r\n \r\n \r\n \r\n Name:\r\n \r\n \r\n \r\n {displayDataText(tool.get('name'))}\r\n \r\n \r\n \r\n \r\n \r\n Group:\r\n \r\n \r\n \r\n {displayDataText(tool.get('toolGroupName'))}\r\n \r\n \r\n \r\n \r\n \r\n Outer diameter:\r\n \r\n \r\n \r\n {displayDataText(\r\n `${tool.getIn([\r\n 'outerDiameter',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['outerDiameter', 'unit'])}`,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Inner diameter:\r\n \r\n \r\n \r\n {displayDataText(\r\n `${tool.getIn([\r\n 'innerDiameter',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['innerDiameter', 'unit'])}`,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Length:\r\n \r\n \r\n \r\n {displayDataText(\r\n `${tool.getIn([\r\n 'length',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['length', 'unit'])}`,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Weight:\r\n \r\n \r\n \r\n {displayDataText(\r\n `${tool.getIn([\r\n 'weight',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['weight', 'unit'])}`,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Top Connector:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('topConnectorDescription') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Bottom Connector:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('bottomConnectorDescription') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Fishneck:\r\n \r\n \r\n \r\n {displayDataText(\r\n `${tool.getIn([\r\n 'fishNeck',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['fishNeck', 'unit'])}`,\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Safe working load:\r\n \r\n \r\n \r\n {tool.get('safeWorkingLoad')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'safeWorkingLoad',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['safeWorkingLoad', 'unit'])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n Yield:\r\n \r\n \r\n \r\n {tool.get('yieldValue')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'yieldValue',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['yieldValue', 'unit'])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n Supplier:\r\n \r\n \r\n \r\n {displayDataText(tool.get('supplier') ?? 'No Data')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Supplier part number:\r\n \r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('supplierPartNumber') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n {/* TODO ADD WHEN EDIT TOOL IS AVAILABLE */}\r\n {/* Last modification: */}\r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n {displayDataText(tool.get('description') ?? 'No Data')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Axial friction reduced to:\r\n \r\n \r\n \r\n \r\n {tool.get('axialFrictionReducedTo')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'axialFrictionReducedTo',\r\n 'roundedValue',\r\n ])} ${tool.getIn([\r\n 'axialFrictionReducedTo',\r\n 'unit',\r\n ])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n Maximum OD:\r\n \r\n \r\n \r\n {tool.get('maximumOD')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'maximumOD',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['maximumOD', 'unit'])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Maximum standoff force:\r\n \r\n \r\n \r\n \r\n {tool.get('maximumStandoffForce')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'maximumStandoffForce',\r\n 'roundedValue',\r\n ])} ${tool.getIn([\r\n 'maximumStandoffForce',\r\n 'unit',\r\n ])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n Minimum OD:\r\n \r\n \r\n \r\n {tool.get('minimumOD')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'minimumOD',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['minimumOD', 'unit'])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Minimum standoff force:\r\n \r\n \r\n \r\n \r\n {tool.get('minimumStandoffForce')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'minimumStandoffForce',\r\n 'roundedValue',\r\n ])} ${tool.getIn([\r\n 'minimumStandoffForce',\r\n 'unit',\r\n ])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n Is knuckle joint:\r\n \r\n \r\n \r\n {tool.get('isKnuckleJoint')\r\n ? displayDataText(`${tool.get('isKnuckleJoint')}`)\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Weight above jarring point factor\r\n \r\n \r\n \r\n \r\n {tool.get('weightAboveJarringPointFactor')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'weightAboveJarringPointFactor',\r\n 'value',\r\n ])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Jar activation limit low:\r\n \r\n \r\n \r\n \r\n {tool.get('jarActivationLimitLow')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'jarActivationLimitLow',\r\n 'roundedValue',\r\n ])} ${tool.getIn([\r\n 'jarActivationLimitLow',\r\n 'unit',\r\n ])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Jar activation limit high:\r\n \r\n \r\n \r\n \r\n {tool.get('jarActivationLimitHigh')\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'jarActivationLimitHigh',\r\n 'roundedValue',\r\n ])} ${tool.getIn([\r\n 'jarActivationLimitHigh',\r\n 'unit',\r\n ])}`,\r\n )\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n {tool.get('m3ItemNumber') !== ThirdPartyLabel && (\r\n \r\n \r\n Is data verified:\r\n \r\n \r\n \r\n {displayDataText(\r\n `${tool.get('isVerified') ? 'Yes' : 'No'}`,\r\n )}\r\n \r\n \r\n \r\n )}\r\n {tool.get('m3ItemNumber') !== ThirdPartyLabel &&\r\n tool.get('isVerified') && (\r\n \r\n \r\n Data verified:\r\n \r\n \r\n \r\n {tool.get('dataVerified')\r\n ? displayDateText(`${tool.get('dataVerified')}`)\r\n : displayDateText(null)}\r\n \r\n \r\n \r\n )}\r\n \r\n {tool && tool.get('m3ItemNumber') === ThirdPartyLabel ? null : (\r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3Description') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Item number:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3ItemNumber') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Item group:\r\n \r\n \r\n \r\n {displayDataText(tool.get('m3ITGR') ?? 'No Data')}\r\n \r\n \r\n \r\n \r\n \r\n Item type:\r\n \r\n \r\n \r\n {displayDataText(tool.get('m3ItemType') ?? 'No Data')}\r\n \r\n \r\n \r\n \r\n \r\n Business area:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3BusinessArea') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Item status:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3ItemStatus') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Item status description:\r\n \r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3ItemStatusDescription') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Lot control method\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3LotControlMethod') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Measurement 1:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3Measurement1') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Measurement 2:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3Measurement2') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Measurement 3:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3Measurement3') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Entry date:\r\n \r\n \r\n \r\n {displayDateText(tool.get('m3EntryDate') ?? null)}\r\n \r\n \r\n \r\n \r\n \r\n Last edit date:\r\n \r\n \r\n \r\n {displayDateText(tool.get('m3ChangeDate') ?? null)}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ) : null}\r\n {!tool.isEmpty() && tool.get('m3ItemNumber') === ThirdPartyLabel ? (\r\n \r\n {\r\n toggleEdit3rdPartyTool();\r\n }}\r\n >\r\n Edit tool\r\n \r\n \r\n ) : null}\r\n {!tool.isEmpty() && tool.get('m3ItemNumber') !== ThirdPartyLabel ? (\r\n \r\n {\r\n toggleEditM3Tool();\r\n }}\r\n >\r\n Edit tool\r\n \r\n \r\n ) : null}\r\n \r\n {!tool.isEmpty() ? (\r\n <>\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n )}\r\n {activeTab === EQUIPMENT_DETAILS_ACTIVE_TABS.ASSETS && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SUPPLIERS_LOADED,\r\n EQUIPMENT_ACTIONS.TOOL_GROUPS_LOADED,\r\n EQUIPMENT_DETAILS_ACTIONS.PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'column',\r\n padding: 0,\r\n },\r\n container: {\r\n flexDirection: 'column',\r\n overflow: 'auto',\r\n padding: theme.spacing(2.25),\r\n },\r\n topContainer: {\r\n flexDirection: 'row',\r\n height: '10%',\r\n },\r\n topText: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n maxHeight: '100%',\r\n paddingLeft: theme.spacing(3),\r\n },\r\n bottomContainer: {\r\n dispay: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n height: '90%',\r\n },\r\n bottomText: {\r\n width: '48%',\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n borderRadius: 3,\r\n padding: theme.spacing(3),\r\n backgroundColor: lighten(theme.palette.background.paper, 0.1),\r\n },\r\n bottomTextLine: {\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n editBtn: {\r\n position: 'absolute',\r\n right: theme.spacing(5),\r\n bottom: theme.spacing(3),\r\n width: '200px',\r\n height: '50px',\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(EquipmentDetailsContainer);\r\n","import { useEffect } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getToolProjectHistoryFromState } from 'features/projects/tool/tool.selector';\r\n\r\nimport ProjectsByStatus from 'features/projects/components/ProjectsByStatus';\r\nimport { TOOL_ACTIONS } from 'features/projects/tool/tool.constants';\r\nimport { loadToolProjectHistory } from 'features/projects/tool/tool.actions';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\n\r\nconst ToolProjectHistoryContainer = ({\r\n equipmentId,\r\n classes,\r\n projects,\r\n dataState,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n}) => {\r\n useHeader({ subTitle: breadcrumb });\r\n useEffect(() => {\r\n dispatchOnLoad(equipmentId);\r\n }, [equipmentId, dispatchOnLoad]);\r\n\r\n return (\r\n \r\n \r\n {!projects?.size ? (\r\n \r\n No projects...\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n projects: getToolProjectHistoryFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n TOOL_ACTIONS.RECEIVE_TOOL_PROJECT_HISTORY,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: loadToolProjectHistory,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(ToolProjectHistoryContainer);\r\n","import { compose } from 'redux';\r\nimport { useEffect, useState } from 'react';\r\nimport { lighten } from '@material-ui/core/styles';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { Grid, Typography, Tabs, Tab, Divider } from '@material-ui/core';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { ExifOrientation } from 'features/projects/tool/tool.constants';\r\n\r\nimport { getSurfaceEquipmentByIdFromState } from 'features/equipment/equipment.selectors';\r\n\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport {\r\n SURFACE_EQUIPMENT_DETAILS_ACTIONS,\r\n EQUIPMENT_DETAILS_ACTIVE_TABS,\r\n} from 'features/equipment/details/equipmentDetails.constants';\r\nimport { isImmutable } from 'immutable';\r\nimport {\r\n onLoadSurfaceEquipmentDetail,\r\n onUnloadSurfaceEquipment,\r\n} from 'features/equipment/details/equipmentDetails.actions';\r\nimport EquipmentAssetsContainer from '../assets/EquipmentAssetsContainer';\r\nimport { EquipmentType } from '../equipment.constants';\r\nimport { ThirdPartyLabel } from 'features/projects/tool/tool.constants';\r\n\r\nconst SurfaceEquipmentDetails = ({\r\n equipmentId,\r\n classes,\r\n dataState,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(\r\n EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS,\r\n );\r\n\r\n const headerSubtitleHandler = (activeTab) => {\r\n switch (activeTab) {\r\n case EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS:\r\n return 'Details';\r\n case EQUIPMENT_DETAILS_ACTIVE_TABS.ASSETS:\r\n return 'Assets';\r\n default:\r\n return 'Details';\r\n }\r\n };\r\n\r\n useHeader({\r\n subTitle: headerSubtitleHandler(activeTab),\r\n logoNavigation: '/',\r\n });\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n const tool = useSelector(getSurfaceEquipmentByIdFromState);\r\n\r\n const equipmentImage = (tool) =>\r\n isImmutable(tool)\r\n ? tool?.get('equipmentImage')\r\n : tool.original?.equipmentImage;\r\n\r\n const equipmentGroup = (tool) =>\r\n isImmutable(tool)\r\n ? tool?.get('equipmentGroup')\r\n : tool.original?.equipmentGroup;\r\n\r\n const displayDataText = (data) => {\r\n if (dataState.isLoading()) {\r\n return 'Loading...';\r\n }\r\n\r\n if (!data) {\r\n return 'No Data';\r\n } else {\r\n return data;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(equipmentId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, equipmentId]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTab === EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS && (\r\n \r\n \r\n \r\n {tool.get('m3ItemNumber')}\r\n \r\n {tool.get('description') ?? 'No description'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n <>\r\n \r\n \r\n \r\n Name:\r\n \r\n \r\n \r\n {displayDataText(tool.get('name'))}\r\n \r\n \r\n \r\n \r\n \r\n Group:\r\n \r\n \r\n \r\n {displayDataText(tool.get('name'))}\r\n \r\n \r\n \r\n \r\n \r\n Length:\r\n \r\n \r\n \r\n {tool\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'length',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['length', 'unit'])}`,\r\n )\r\n : 'No Data'}\r\n \r\n \r\n \r\n \r\n \r\n Height:\r\n \r\n \r\n \r\n {tool\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'height',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['height', 'unit'])}`,\r\n )\r\n : 'No Data'}\r\n \r\n \r\n \r\n \r\n \r\n Width:\r\n \r\n \r\n \r\n {tool\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'width',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['width', 'unit'])}`,\r\n )\r\n : 'No Data'}\r\n \r\n \r\n \r\n \r\n \r\n Weight:\r\n \r\n \r\n \r\n {tool\r\n ? displayDataText(\r\n `${tool.getIn([\r\n 'weight',\r\n 'roundedValue',\r\n ])} ${tool.getIn(['weight', 'unit'])}`,\r\n )\r\n : 'No Data'}\r\n \r\n \r\n \r\n {/* TODO ADD WHEN EDIT TOOL IS AVAILABLE */}\r\n {/* Last modification: */}\r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n {displayDataText(tool.get('description') ?? 'No Data')}\r\n \r\n \r\n \r\n \r\n \r\n Is data verified:\r\n \r\n \r\n \r\n {displayDataText(\r\n `${tool.get('isVerified') ? 'Yes' : 'No'}`,\r\n )}\r\n \r\n \r\n \r\n {tool.get('isVerified') && (\r\n \r\n \r\n Data verified:\r\n \r\n \r\n \r\n {tool.get('dataVerified')\r\n ? displayDataText(`${tool.get('dataVerified')}`)\r\n : displayDataText(null)}\r\n \r\n \r\n \r\n )}\r\n \r\n {tool && tool.get('m3ItemNumber') === ThirdPartyLabel ? null : (\r\n \r\n \r\n \r\n Group Description:\r\n \r\n \r\n \r\n {displayDataText(\r\n equipmentGroup(tool)?.get('name') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Item number:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3ItemNumber') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Item group:\r\n \r\n \r\n \r\n {displayDataText(tool.get('m3ITGR') ?? 'No Data')}\r\n \r\n \r\n \r\n \r\n \r\n Item type:\r\n \r\n \r\n \r\n {displayDataText(tool.get('m3ItemType') ?? 'No Data')}\r\n \r\n \r\n \r\n \r\n \r\n Business area:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3BusinessArea') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Item status:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3ItemStatus') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Item status description:\r\n \r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3ItemStatusDescription') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Lot control method\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3LotControlMethod') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Measurement 1:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3Measurement1') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Measurement 2:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3Measurement2') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Measurement 3:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3Measurement3') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Entry date:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3EntryDate') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Last edit date:\r\n \r\n \r\n \r\n {displayDataText(\r\n tool.get('m3ChangeDate') ?? 'No Data',\r\n )}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n }\r\n \r\n \r\n )}\r\n {activeTab === EQUIPMENT_DETAILS_ACTIVE_TABS.ASSETS && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n SURFACE_EQUIPMENT_DETAILS_ACTIONS.PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadSurfaceEquipmentDetail,\r\n dispatchOnUnload: onUnloadSurfaceEquipment,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'column',\r\n padding: 0,\r\n },\r\n container: {\r\n flexDirection: 'column',\r\n overflow: 'auto',\r\n padding: theme.spacing(2.25),\r\n },\r\n topContainer: {\r\n flexDirection: 'row',\r\n height: '10%',\r\n },\r\n topText: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n toolContainer: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n maxHeight: '100%',\r\n paddingLeft: theme.spacing(3),\r\n },\r\n bottomContainer: {\r\n dispay: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n height: '90%',\r\n },\r\n bottomText: {\r\n width: '48%',\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n borderRadius: 3,\r\n padding: theme.spacing(3),\r\n backgroundColor: lighten(theme.palette.background.paper, 0.1),\r\n },\r\n bottomTextLine: {\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n editBtn: {\r\n position: 'absolute',\r\n right: theme.spacing(5),\r\n bottom: theme.spacing(3),\r\n width: '200px',\r\n height: '50px',\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(SurfaceEquipmentDetails);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { MenuItem, TextField, Typography } from '@material-ui/core';\r\n\r\nimport { EMPTY_MAP, ProjectPermission, ProjectRoles } from 'app/app.constants';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\n\r\nconst NO_ROLE_SELECTED = '';\r\n\r\nconst ProjectMemberAccessCell = ({\r\n classes,\r\n projectRoles,\r\n projectMember,\r\n hasOtherOwners,\r\n assignProjectMemberToRole,\r\n}) => {\r\n const { hasPermission } = useProjectPermissions(\r\n ProjectPermission.MANAGE_TEAM_MEMBERS_ACCESS,\r\n );\r\n\r\n const initialRoleId = projectMember.get('roles').first();\r\n\r\n if (!hasPermission) {\r\n const initialRole = initialRoleId\r\n ? projectRoles.get(initialRoleId.toString(), EMPTY_MAP)\r\n : EMPTY_MAP;\r\n\r\n return {initialRole.get('name')};\r\n }\r\n\r\n // avoid console warning if projectRoles are not finished loading\r\n const value =\r\n initialRoleId && projectRoles.has(initialRoleId.toString())\r\n ? initialRoleId\r\n : NO_ROLE_SELECTED;\r\n\r\n const projectMemberIsOwner = projectMember\r\n .get('roles')\r\n .has(ProjectRoles.OWNER);\r\n\r\n return (\r\n \r\n assignProjectMemberToRole(projectMember, event.target.value)\r\n }\r\n >\r\n {projectRoles.valueSeq().map((role) => (\r\n \r\n {role.get('name')}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n inputRoot: {\r\n fontSize: theme.typography.body2.fontSize,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectMemberAccessCell);\r\n","import moment from 'moment';\r\nimport { Field } from 'formik';\r\nimport { compose } from 'redux';\r\nimport { List } from 'immutable';\r\nimport { useMemo, useCallback } from 'react';\r\nimport Close from '@material-ui/icons/Close';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport CircleIcon from '@material-ui/icons/FiberManualRecord';\r\nimport { IconButton, Grid, Tooltip } from '@material-ui/core';\r\nimport { Table, UserAvatar, TableRowActionsCell } from 'altus-ui-components';\r\nimport { EMPTY_LIST, ProjectPermission } from 'app/app.constants';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport DatePickerFormik from 'app/components/form/formik/DatePickerFormik';\r\nimport YesNoSwitchFormik from 'app/components/form/formik/YesNoSwitchFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport ProjectMemberAccessCell from 'features/projects/team/components/ProjectMemberAccessCell';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst initialState = {\r\n sortBy: [\r\n {\r\n id: 'name',\r\n desc: false,\r\n },\r\n ],\r\n};\r\n\r\nconst shiftTypes = List([\r\n { id: 0, name: 'Day' },\r\n { id: 1, name: 'Night' },\r\n]);\r\n\r\nconst FormFields = {\r\n TO_DATE: 'to',\r\n FROM_DATE: 'from',\r\n CREW_ID: 'crewId',\r\n QUALIFICATION_ID: 'qualificationId',\r\n SHIFT_TYPE: 'shiftTypeId',\r\n SAFTY_DELEGATE: 'safetyDelegate',\r\n};\r\n\r\nconst ProjectFieldCrewTable = ({\r\n project,\r\n crews,\r\n qualifications,\r\n updateProjectFieldCrew,\r\n projectRoles,\r\n projectMembers,\r\n deleteProjectMember,\r\n assignProjectFieldCrewToRole,\r\n}) => {\r\n const theme = useTheme();\r\n const projectOwnersByUserId = useMemo(\r\n () =>\r\n project\r\n .get('owners', EMPTY_LIST)\r\n .toMap()\r\n .mapKeys((_, user) => user.get('userId')),\r\n [project],\r\n );\r\n\r\n const projectHasOtherOwners = useCallback(\r\n (projectMember) =>\r\n !projectOwnersByUserId.delete(projectMember.get('userId')).isEmpty(),\r\n [projectOwnersByUserId],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'avatar',\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const projectMember = row.original;\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (projectMember) =>\r\n projectMember.getIn(['user', 'name'], null),\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Shift Type',\r\n Cell: () => (\r\n row.id}\r\n getItemName={(row) => row.name}\r\n />\r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Safety Delegate',\r\n Cell: () => (\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Crew',\r\n Cell: () => (\r\n row.get('id')}\r\n getItemName={(row) => row.get('name')}\r\n />\r\n ),\r\n },\r\n {\r\n xs: 5,\r\n id: 'fromCol',\r\n Header: () => {\r\n return (\r\n \r\n \r\n \r\n {'From'}\r\n \r\n \r\n );\r\n },\r\n\r\n Cell: ({ row }) => (\r\n \r\n \r\n {isCurrentDateInRange(\r\n row.original.get('from'),\r\n row.original.get('to'),\r\n ) ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'To',\r\n Cell: ({ row }) => (\r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n ),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Qualification',\r\n Cell: () => (\r\n row.get('id')}\r\n getItemName={(row) => row.get('name')}\r\n />\r\n ),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Job title',\r\n accessor: (projectMember) => projectMember.getIn(['user', 'title']),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Organization',\r\n accessor: (projectMember) =>\r\n projectMember.getIn(['user', 'organizationName']),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Access',\r\n Cell: ({ row }) => {\r\n const projectMember = row.original;\r\n const hasOtherOwners = projectHasOtherOwners(projectMember);\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const projectMember = row.original;\r\n const hasOtherOwners = projectHasOtherOwners(projectMember);\r\n\r\n return (\r\n \r\n \r\n \r\n deleteProjectMember(\r\n projectMember.get('projectMemberFieldCrewId'),\r\n projectMember.getIn(['user', 'name'], null),\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [\r\n projectRoles,\r\n deleteProjectMember,\r\n projectHasOtherOwners,\r\n assignProjectFieldCrewToRole,\r\n crews,\r\n qualifications,\r\n theme,\r\n ],\r\n );\r\n\r\n const isCurrentDateInRange = (dateTo, dateFrom) => {\r\n const now = moment();\r\n if (dateTo === undefined || dateFrom === undefined) return false;\r\n return now.isSameOrAfter(dateTo) && now.isSameOrBefore(dateFrom);\r\n };\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [updateProjectFieldCrew],\r\n );\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n chip: {\r\n marginLeft: 0,\r\n margin: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectFieldCrewTable);\r\n","import { compose } from 'redux';\r\nimport { memo, useMemo } from 'react';\r\nimport CheckBox from '@material-ui/icons/CheckBox';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport CheckBoxOutlineBlank from '@material-ui/icons/CheckBoxOutlineBlank';\r\n\r\nimport {\r\n Box,\r\n Grid,\r\n Button,\r\n Dialog,\r\n Typography,\r\n IconButton,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n Table,\r\n UserAvatar,\r\n LoadingButton,\r\n TableRowActionsCell,\r\n} from 'altus-ui-components';\r\n\r\nimport { useMultiselect } from 'altus-hooks';\r\n\r\nimport BasePageDense from 'app/components/BasePageDense';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\n\r\nconst initialState = {\r\n pageSize: 25,\r\n sortBy: [\r\n {\r\n id: 'name',\r\n desc: false,\r\n },\r\n ],\r\n};\r\n\r\nconst CreateProjectMembersModal = ({\r\n users,\r\n isOpen,\r\n title,\r\n project,\r\n classes,\r\n dataState,\r\n toggleModal,\r\n projectMembers,\r\n addUsersToProject,\r\n}) => {\r\n const { isSelected, toggleSelect, selectedItems, clearSelection } =\r\n useMultiselect();\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'avatar',\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const user = row.original;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (user) => user.get('name'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Job title',\r\n accessor: (user) => user.get('title'),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Organization',\r\n accessor: (user) => user.get('organizationName'),\r\n },\r\n {\r\n id: 'actions',\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const user = row.original;\r\n\r\n const isProjectMember = projectMembers.has(user.get('id').toString());\r\n\r\n if (isProjectMember) return ;\r\n\r\n return (\r\n \r\n toggleSelect(user)}\r\n >\r\n {isSelected(user) ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [projectMembers, toggleSelect, isSelected],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {project.get('title')}\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n addUsersToProject(selectedItems)}\r\n >\r\n {`Add (${selectedItems.size})`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n dialogActionsRoot: {\r\n padding: theme.spacing(3),\r\n background: theme.altus.background.header,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles), memo)(CreateProjectMembersModal);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { TEAM_ACTIONS } from 'features/projects/team/team.constants';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport { addFieldCrewToProject } from 'features/projects/team/team.actions';\r\n\r\nimport CreateProjectMembersModal from 'features/projects/team/components/CreateProjectMembersModal';\r\n\r\nconst CreateProjectFieldCrewModalContainer = ({\r\n users,\r\n isOpen,\r\n title,\r\n projectId,\r\n dataState,\r\n toggleModal,\r\n projectMembers,\r\n dispatchAddUsersToProject,\r\n}) => {\r\n const project = useCurrentProject();\r\n\r\n const addSelectedUsersToProject = useCallback(\r\n (users) => dispatchAddUsersToProject(projectId, users).then(toggleModal),\r\n [projectId, toggleModal, dispatchAddUsersToProject],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n TEAM_ACTIONS.ADD_PROJECT_FIELD_CREW,\r\n ),\r\n }),\r\n {\r\n dispatchAddUsersToProject: addFieldCrewToProject,\r\n },\r\n ),\r\n)(CreateProjectFieldCrewModalContainer);\r\n","import { compose } from 'redux';\r\nimport Add from '@material-ui/icons/Add';\r\nimport { Fab, Grid } from '@material-ui/core';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n onLoadProjectFieldCrew,\r\n onUnload,\r\n deleteProjectFieldCrew,\r\n updateProjectFieldCrew,\r\n assignProjectFieldCrewToRole,\r\n} from 'features/projects/team/team.actions';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n TEAM_ACTIONS,\r\n ADD_TEAM_MEMBERS_MODAL_ID,\r\n} from 'features/projects/team/team.constants';\r\nimport {\r\n getFieldCrewKeyedByUserIdFromState,\r\n getAllAvailableFieldCrewUsersFromState,\r\n getProjectQualificationsFromState,\r\n getProjectCrewsFromState,\r\n} from 'features/projects/team/team.selectors';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { getProjectRolesFromState } from 'authorization/authorization.selectors';\r\nimport ProjectFieldCrewTable from 'features/projects/team/components/ProjectFieldCrewTable';\r\nimport CreateProjectFieldCrewModalContainer from 'features/projects/team/components/CreateProjectFieldCrewModalContainer';\r\n\r\nconst FieldCrew = ({\r\n users,\r\n crews,\r\n classes,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n projectRoles,\r\n qualifications,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n fieldCrewByUserId,\r\n disptachUpdateProjectFieldCrew,\r\n dispatchDeleteProjectFieldCrew,\r\n dispatchAssignProjectMemberToRole,\r\n}) => {\r\n const [isOpen, toggleModal] = useModal(ADD_TEAM_MEMBERS_MODAL_ID);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [projectId, dispatchOnLoad, dispatchOnUnload]);\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n const deleteProjectFieldCrew = useCallback(\r\n (projectMemberId, memberName) =>\r\n dispatchDeleteProjectFieldCrew(projectId, projectMemberId, memberName),\r\n [projectId, dispatchDeleteProjectFieldCrew],\r\n );\r\n\r\n const assignRole = useCallback(\r\n (projectMemberFieldCrewId, roleId) =>\r\n dispatchAssignProjectMemberToRole(\r\n projectId,\r\n projectMemberFieldCrewId,\r\n roleId,\r\n ),\r\n [projectId, dispatchAssignProjectMemberToRole],\r\n );\r\n\r\n const updateProjectFieldCrew = useCallback(\r\n (fieldCrew) => {\r\n return disptachUpdateProjectFieldCrew(\r\n projectId,\r\n fieldCrew.projectMemberFieldCrewId,\r\n fieldCrew,\r\n );\r\n },\r\n [projectId, disptachUpdateProjectFieldCrew],\r\n );\r\n\r\n const project = useSelector(getCurrentProject);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n create: {\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(8),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n users: getAllAvailableFieldCrewUsersFromState(state),\r\n projectRoles: getProjectRolesFromState(state),\r\n crews: getProjectCrewsFromState(state),\r\n qualifications: getProjectQualificationsFromState(state),\r\n fieldCrewByUserId: getFieldCrewKeyedByUserIdFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TEAM_ACTIONS.DELETE_PROJECT_FIELD_CREW,\r\n TEAM_ACTIONS.PROJECT_FIELD_CREW_PAGE_LOADED,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoadProjectFieldCrew,\r\n dispatchOnUnload: onUnload,\r\n disptachUpdateProjectFieldCrew: updateProjectFieldCrew,\r\n dispatchDeleteProjectFieldCrew: deleteProjectFieldCrew,\r\n dispatchAssignProjectMemberToRole: assignProjectFieldCrewToRole,\r\n dispatchUpdateProjectFieldCrew: updateProjectFieldCrew,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(FieldCrew);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { MenuItem, TextField } from '@material-ui/core';\r\n\r\nconst TeamProjectRoleAccessCell = ({\r\n classes,\r\n projectMember,\r\n teamProjectRoles,\r\n assignTeamProjectRoleChange,\r\n}) => {\r\n const value =\r\n teamProjectRoles && projectMember\r\n ? teamProjectRoles.find(\r\n (x) =>\r\n x.get('teamProjectRoleId') ===\r\n projectMember.get('teamProjectRoleId'),\r\n )\r\n : null;\r\n\r\n return (\r\n {\r\n const selectedItem = teamProjectRoles.find(\r\n (x) => x.get('teamProjectRoleId') === event.target.value,\r\n );\r\n if (selectedItem.size > 0) {\r\n return assignTeamProjectRoleChange(projectMember, selectedItem);\r\n }\r\n }}\r\n >\r\n {teamProjectRoles.valueSeq().map((role) => (\r\n \r\n {role.get('name')}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n inputRoot: {\r\n fontSize: theme.typography.body2.fontSize,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(TeamProjectRoleAccessCell);\r\n","import { useMemo, useCallback } from 'react';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { IconButton } from '@material-ui/core';\r\n\r\nimport { Table, UserAvatar, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST, ProjectPermission } from 'app/app.constants';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport ProjectMemberAccessCell from 'features/projects/team/components/ProjectMemberAccessCell';\r\nimport TeamProjectRoleAccessCell from 'features/projects/team/components/TeamProjectRoleAccessCell';\r\n\r\nconst initialState = {\r\n sortBy: [\r\n {\r\n id: 'name',\r\n desc: false,\r\n },\r\n ],\r\n};\r\n\r\nconst ProjectMembersTable = ({\r\n project,\r\n projectRoles,\r\n projectMembers,\r\n teamProjectRoles,\r\n deleteProjectMember,\r\n assignProjectMemberToRole,\r\n assignTeamProjectRoleChange,\r\n}) => {\r\n const projectOwnersByUserId = useMemo(\r\n () =>\r\n project\r\n .get('owners', EMPTY_LIST)\r\n .toMap()\r\n .mapKeys((_, user) => user.get('userId')),\r\n [project],\r\n );\r\n\r\n const projectHasOtherOwners = useCallback(\r\n (projectMember) =>\r\n !projectOwnersByUserId.delete(projectMember.get('userId')).isEmpty(),\r\n [projectOwnersByUserId],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'avatar',\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const projectMember = row.original;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (projectMember) =>\r\n projectMember.getIn(['user', 'name'], null),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Job title',\r\n accessor: (projectMember) => projectMember.getIn(['user', 'title']),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Organization',\r\n accessor: (projectMember) =>\r\n projectMember.getIn(['user', 'organizationName']),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Access',\r\n Cell: ({ row }) => {\r\n const projectMember = row.original;\r\n const hasOtherOwners = projectHasOtherOwners(projectMember);\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Project role',\r\n Cell: ({ row }) => {\r\n const projectMember = row.original;\r\n const hasOtherOwners = projectHasOtherOwners(projectMember);\r\n\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const projectMember = row.original;\r\n const hasOtherOwners = projectHasOtherOwners(projectMember);\r\n\r\n return (\r\n \r\n \r\n \r\n deleteProjectMember(\r\n projectMember.get('projectMemberId'),\r\n projectMember.getIn(['user', 'name'], null),\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [\r\n projectRoles,\r\n teamProjectRoles,\r\n deleteProjectMember,\r\n projectHasOtherOwners,\r\n assignProjectMemberToRole,\r\n assignTeamProjectRoleChange,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProjectMembersTable;\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { TEAM_ACTIONS } from 'features/projects/team/team.constants';\r\nimport { addUsersToProject } from 'features/projects/team/team.actions';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\n\r\nimport CreateProjectMembersModal from 'features/projects/team/components/CreateProjectMembersModal';\r\n\r\nconst CreateProjectMembersModalContainer = ({\r\n users,\r\n isOpen,\r\n title,\r\n projectId,\r\n dataState,\r\n toggleModal,\r\n projectMembers,\r\n teamProjectRoles,\r\n dispatchAddUsersToProject,\r\n}) => {\r\n const project = useCurrentProject();\r\n\r\n const addSelectedUsersToProject = useCallback(\r\n (users) => dispatchAddUsersToProject(projectId, users).then(toggleModal),\r\n [projectId, toggleModal, dispatchAddUsersToProject],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n TEAM_ACTIONS.ADD_PROJECT_MEMBERS,\r\n ),\r\n }),\r\n {\r\n dispatchAddUsersToProject: addUsersToProject,\r\n },\r\n ),\r\n)(CreateProjectMembersModalContainer);\r\n","import { compose } from 'redux';\r\nimport Add from '@material-ui/icons/Add';\r\nimport { Fab, Grid } from '@material-ui/core';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n deleteProjectMember,\r\n assignProjectMemberToRole,\r\n assignProjectMemberTeamRole,\r\n} from 'features/projects/team/team.actions';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n TEAM_ACTIONS,\r\n ADD_TEAM_MEMBERS_MODAL_ID,\r\n} from 'features/projects/team/team.constants';\r\n\r\nimport {\r\n getTeamProjectRolesFromState,\r\n getAllAvailableUsersFromState,\r\n getProjectMembersKeyedByUserIdFromState,\r\n} from 'features/projects/team/team.selectors';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { getProjectRolesFromState } from 'authorization/authorization.selectors';\r\nimport ProjectMembersTable from 'features/projects/team/components/ProjectMembersTable';\r\nimport CreateProjectMembersModalContainer from 'features/projects/team/components/CreateProjectMembersModalContainer';\r\n\r\nconst OnshoreTeam = ({\r\n users,\r\n classes,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n projectRoles,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n teamProjectRoles,\r\n projectMembersByUserId,\r\n dispatchDeleteProjectMember,\r\n dispatchAssignProjectMemberToRole,\r\n dispatchAssignTeamProjectRoleChange,\r\n}) => {\r\n const [isOpen, toggleModal] = useModal(ADD_TEAM_MEMBERS_MODAL_ID);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [projectId, dispatchOnLoad, dispatchOnUnload]);\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n const deleteProjectMember = useCallback(\r\n (projectMemberId, memberName) =>\r\n dispatchDeleteProjectMember(projectId, projectMemberId, memberName),\r\n [projectId, dispatchDeleteProjectMember],\r\n );\r\n\r\n const project = useSelector(getCurrentProject);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n create: {\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(8),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n users: getAllAvailableUsersFromState(state),\r\n projectRoles: getProjectRolesFromState(state),\r\n projectMembersByUserId: getProjectMembersKeyedByUserIdFromState(state),\r\n teamProjectRoles: getTeamProjectRolesFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TEAM_ACTIONS.DELETE_PROJECT_MEMBER,\r\n TEAM_ACTIONS.PROJECT_MEMBER_PAGE_LOADED,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchDeleteProjectMember: deleteProjectMember,\r\n dispatchAssignProjectMemberToRole: assignProjectMemberToRole,\r\n dispatchAssignTeamProjectRoleChange: assignProjectMemberTeamRole,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(OnshoreTeam);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { useState, useCallback } from 'react';\r\nimport { Grid, Tabs, Tab, Divider, Box, Button } from '@material-ui/core';\r\n\r\nimport { useMultiselect } from 'altus-hooks';\r\n\r\nimport { LoadingButton } from 'altus-ui-components';\r\n\r\nimport FieldCrew from 'features/projects/team/components/FieldCrew';\r\nimport { addUsersToProject } from 'features/projects/team/team.actions';\r\nimport OnshoreTeam from 'features/projects/team/components/OnshoreTeam';\r\nimport { TEAM_ACTIVE_TAB } from 'features/projects/team/team.constants';\r\n\r\nconst TeamContainer = ({\r\n classes,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n projectRoles,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n projectMembersByUserId,\r\n dispatchAddUsersToProject,\r\n dispatchDeleteProjectMember,\r\n dispatchAssignProjectMemberToRole,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(TEAM_ACTIVE_TAB.ONSHORE_TEAM);\r\n\r\n const [isAddMode, setAddMode] = useState(false);\r\n const { isSelected, toggleSelect, selectedItems, clearSelection } =\r\n useMultiselect();\r\n\r\n const handleTabs = (_, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n const changeAddMode = useCallback(\r\n (isAdd) => {\r\n if (isAdd) {\r\n clearSelection();\r\n }\r\n setAddMode(isAdd);\r\n },\r\n [clearSelection],\r\n );\r\n\r\n const addSelectedUsersToProject = useCallback(\r\n (users) =>\r\n dispatchAddUsersToProject(projectId, users).then(changeAddMode(false)),\r\n [projectId, changeAddMode, dispatchAddUsersToProject],\r\n );\r\n\r\n const activeTabHandler = (activeTab) => {\r\n switch (activeTab) {\r\n default:\r\n return null;\r\n case TEAM_ACTIVE_TAB.ONSHORE_TEAM:\r\n return (\r\n \r\n );\r\n case TEAM_ACTIVE_TAB.FIELD_CREW:\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isAddMode ? (\r\n \r\n \r\n addSelectedUsersToProject(selectedItems)}\r\n >\r\n {`Add (${selectedItems.size})`}\r\n \r\n \r\n ) : null}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {activeTabHandler(activeTab)}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchAddUsersToProject: addUsersToProject,\r\n }),\r\n)(TeamContainer);\r\n","import { useCallback, useMemo } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport {\r\n TASKS_CREATE_TASK_MODE,\r\n TASKS_CREATE_TASK_MODAL_ID,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport TextFieldV2 from 'app/components/form/TextFieldV2';\r\nimport ProjectTaskServiceChips from 'app/components/ProjectTaskServiceChips';\r\nimport CreateTaskModalContainer from 'features/projects/tasks/components/createTask/CreateTaskModalContainer';\r\n\r\nconst ProjectTaskServicesField = ({\r\n label,\r\n input,\r\n projectId,\r\n templateTasks,\r\n ...rest\r\n}) => {\r\n const { value = EMPTY_LIST, name } = input;\r\n\r\n const renderValue = useCallback(\r\n () => (\r\n // wrap the ProjectTaskServiceChips in a Grid to make them wrap on new lines if necessary\r\n \r\n \r\n \r\n ),\r\n [value],\r\n );\r\n\r\n const [_, toggleModal] = useModal(TASKS_CREATE_TASK_MODAL_ID);\r\n\r\n const serviceTemplateTasks = useMemo(\r\n () =>\r\n templateTasks.filter((templateTask) => !!templateTask.get('serviceId')),\r\n [templateTasks],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {EMPTY_LIST.toArray()}\r\n \r\n {/* Since there are currently 1 Task per Service, we can reuse the CreateTaskModalContainer to create \r\n a Task directly instead of adding a Service that will add a Task.\r\n \r\n TODO: Consider adding a proper Service selection modal\r\n */}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProjectTaskServicesField;\r\n","import { Field } from 'redux-form/immutable';\r\n\r\nimport TextField from 'app/components/form/TextField';\r\nimport { EDIT_PROJECT_FORM } from 'features/projects/details/details.constants';\r\nimport ReadOnlyFieldReduxForm from 'app/components/form/redux-form/ReadOnlyFieldReduxForm';\r\n\r\nconst ProjectNumberField = ({\r\n input,\r\n updateProject,\r\n hasPermission,\r\n disabled = false,\r\n}) => {\r\n const { value: displayReferenceNumber } = input;\r\n\r\n if (displayReferenceNumber) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProjectNumberField;\r\n","import { Field } from 'redux-form/immutable';\r\nimport { Switch, FormControlLabel, Grid } from '@material-ui/core';\r\n\r\nimport { EDIT_PROJECT_FORM } from 'features/projects/details/details.constants';\r\nimport ProjectNumberField from 'features/projects/details/components/ProjectNumberField';\r\nimport ReadOnlyFieldReduxForm from 'app/components/form/redux-form/ReadOnlyFieldReduxForm';\r\n\r\nconst ProjectNumberAndSource = ({ hasPermission, onChange, disabled }) => (\r\n \r\n \r\n \r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default ProjectNumberAndSource;\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { useCallback } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Chip, Grid, Typography } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst ProjectDepartmentsField = ({ input, classes, departments }) => {\r\n const { value: projectDepartments = EMPTY_LIST } = input;\r\n\r\n const projectHasDepartment = useCallback(\r\n (departmentId) =>\r\n projectDepartments\r\n .map((department) => department.get('id').toString())\r\n .includes(departmentId),\r\n [projectDepartments],\r\n );\r\n\r\n if (!projectDepartments.size) {\r\n return (\r\n \r\n \r\n No departments currently set...\r\n \r\n \r\n );\r\n }\r\n\r\n return departments\r\n .map((department, departmentId) => (\r\n \r\n \r\n \r\n ))\r\n .valueSeq();\r\n};\r\n\r\nconst styles = () => ({\r\n chipRootDisabled: {\r\n opacity: 0.5,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProjectDepartmentsField);\r\n","import classNames from 'classnames';\r\nimport capitalize from 'lodash/capitalize';\r\nimport { Field } from 'redux-form/immutable';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n CONVERT_SYSTEMS,\r\n CONVERT_MEASURES,\r\n UNITS_BY_CATEGORY,\r\n CUSTOM_UNIT_SYSTEM,\r\n CONVERT_MEASURES_NAMES,\r\n MEASUREMENT_PREFERENCES_FORM,\r\n} from 'app/app.constants';\r\n\r\nimport { getUnitAlias } from 'utils/conversion.util';\r\nimport RadioGroupField from 'app/components/form/RadioGroupField';\r\n\r\nconst styles = () => ({\r\n topContainer: {\r\n paddingBottom: 25,\r\n borderBottom: '1px solid #616161',\r\n },\r\n bottomContainer: {\r\n paddingTop: 25,\r\n },\r\n bottomContainerDisabled: {\r\n opacity: 0.5,\r\n },\r\n});\r\n\r\nconst MeasurementPreferencesForm = ({\r\n name,\r\n classes,\r\n options,\r\n namePrefix,\r\n descriptions,\r\n selectedSystem,\r\n}) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n Measurement Units\r\n \r\n \r\n \r\n {descriptions[selectedSystem]}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {Object.values(CONVERT_SYSTEMS).map((system) => (\r\n \r\n {capitalize(system)}\r\n \r\n ))}\r\n \r\n {Object.values(CONVERT_MEASURES).map((measure) => {\r\n return (\r\n \r\n \r\n {CONVERT_MEASURES_NAMES[measure]}\r\n \r\n \r\n ({\r\n disabled: selectedSystem !== CUSTOM_UNIT_SYSTEM,\r\n value: system,\r\n fullWidth: true,\r\n label: getUnitAlias(unit),\r\n }),\r\n )}\r\n />\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nMeasurementPreferencesForm.defaultProps = {\r\n namePrefix: '',\r\n};\r\n\r\nexport default withStyles(styles)(MeasurementPreferencesForm);\r\n","import { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { DialogActions, Button } from '@material-ui/core';\r\nimport { reduxForm, formValueSelector } from 'redux-form/immutable';\r\n\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { MEASUREMENT_PREFERENCES_FORM } from 'app/app.constants';\r\nimport MeasurementPreferencesForm from 'features/projects/details/components/MeasurementPreferencesForm';\r\n\r\nconst styles = () => ({});\r\n\r\nconst UnitsModalContainer = ({\r\n valid,\r\n title,\r\n onEnter,\r\n modalId,\r\n classes,\r\n options,\r\n submitting,\r\n handleSubmit,\r\n descriptions,\r\n system: selectedSystem,\r\n}) => (\r\n (\r\n \r\n \r\n \r\n Save and close\r\n \r\n \r\n )}\r\n >\r\n \r\n \r\n);\r\n\r\nUnitsModalContainer.defaultProps = {\r\n options: [],\r\n};\r\n\r\nconst mapStateToProps = (state) => {\r\n const selector = formValueSelector(MEASUREMENT_PREFERENCES_FORM.ID);\r\n\r\n return {\r\n system: selector(state, 'system'),\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n null,\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: MEASUREMENT_PREFERENCES_FORM.ID,\r\n })(withStyles(styles)(UnitsModalContainer)),\r\n ),\r\n);\r\n","import moment from 'moment';\r\nimport { compose } from 'redux';\r\nimport { isEqual } from 'lodash';\r\nimport { useDispatch } from 'react-redux';\r\nimport capitalize from 'lodash/capitalize';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Field as FieldFormik, Formik } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useEffect, useState, useCallback } from 'react';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport { reduxForm, Field, change } from 'redux-form/immutable';\r\nimport { EditorState, convertToRaw, convertFromRaw } from 'draft-js';\r\n\r\nimport {\r\n Link,\r\n Grid,\r\n Paper,\r\n MenuItem,\r\n Typography,\r\n IconButton,\r\n} from '@material-ui/core';\r\n\r\nimport { LoadingButton } from 'altus-ui-components';\r\n\r\nimport {\r\n EDIT_PROJECT_FORM,\r\n EDIT_PROJECT_UNITS_MODAL_ID,\r\n} from 'features/projects/details/details.constants';\r\n\r\nimport TextField from 'app/components/form/TextField';\r\nimport { toFacility, toWellbore } from 'utils/route.util';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport { CONVERT_SYSTEMS, CUSTOM_UNIT_SYSTEM, KEYS } from 'app/app.constants';\r\nimport ProjectTaskServicesField from 'app/components/ProjectTaskServicesField';\r\nimport ProjectNumberAndSource from 'features/projects/details/components/ProjectNumberAndSource';\r\nimport DateTimePickerFormik from 'app/components/form/formik/DateTimePickerFormik';\r\nimport ReadOnlyFieldReduxForm from 'app/components/form/redux-form/ReadOnlyFieldReduxForm';\r\nimport ProjectDepartmentsField from 'features/projects/details/components/ProjectDepartmentsField';\r\nimport ProjectUnitsModalContainer from 'features/projects/details/components/ProjectUnitsModalContainer';\r\n\r\n// During preparations for may release, ticket #3627 Requested to temporarily hide this section\r\nconst displayWellcomExternalId = false;\r\n\r\nconst createMomentFromDateArray = (dateArray) => {\r\n var adjustedDateArray = dateArray.slice();\r\n adjustedDateArray[1] -= 1;\r\n const momentDate = moment(adjustedDateArray);\r\n if (!momentDate.isValid()) {\r\n return null;\r\n }\r\n return momentDate.format('YYYY-MM-DDTHH:mm:ss.SSS');\r\n};\r\n\r\nconst ProjectDetailsForm = ({\r\n project,\r\n classes,\r\n projectId,\r\n departments,\r\n toggleModal,\r\n templateTasks,\r\n hasPermission,\r\n updateProject,\r\n updateProjectExternalId,\r\n updateExternalIdDataState,\r\n selectMeasurementPreference,\r\n updateMeasurementPreference,\r\n initializeMeasurementPreferences,\r\n hasCreateTaskPermission,\r\n isArchive,\r\n}) => {\r\n const unitSystem = project.get('unit');\r\n const measurementPreference = project.get('units');\r\n const estimatedStart = project.get('estimatedStart')\r\n ? createMomentFromDateArray(project.get('estimatedStart').toJS())\r\n : null;\r\n const estimatedEnd = project.get('estimatedEnd')\r\n ? createMomentFromDateArray(project.get('estimatedEnd').toJS())\r\n : null;\r\n const [rawObjectiveJson, setRawObjectiveJson] = useState();\r\n const [rawBackgroundJson, setRawBackgroundJson] = useState();\r\n const [rawInternalInformationJson, setRawInternalInformationJson] =\r\n useState();\r\n const dispatch = useDispatch();\r\n const [objectiveEditorState, setObjectiveEditorState] = useState(\r\n EditorState.createEmpty(),\r\n );\r\n const [backgroundEditorState, setBackgroundEditorState] = useState(\r\n EditorState.createEmpty(),\r\n );\r\n const [internalInformationEditorState, setInternalInformationEditorState] =\r\n useState(EditorState.createEmpty());\r\n const [estimatedStartState, setEstimatedStartState] =\r\n useState(estimatedStart);\r\n const [estimatedEndState, setEstimatedEndState] = useState(estimatedEnd);\r\n\r\n const updateContent = useCallback(\r\n (content, setContent, setEditorState, editorState) => {\r\n if (project.get(content) && setContent) {\r\n const rawEditorState = convertToRaw(editorState.getCurrentContent());\r\n if (JSON.stringify(rawEditorState) !== setContent) {\r\n const rawContentState = JSON.parse(project.get(content));\r\n const newEditorState = EditorState.createWithContent(\r\n convertFromRaw(rawContentState),\r\n );\r\n setEditorState(newEditorState);\r\n }\r\n }\r\n },\r\n [project],\r\n );\r\n\r\n const updateValues = (values, key, rawJson, setRawJson, changeValue) => {\r\n const JSONValue = JSON.stringify(\r\n convertToRaw(values[key].getCurrentContent()),\r\n );\r\n\r\n if (!isEqual(JSONValue, project.get(key))) {\r\n setRawJson(JSONValue);\r\n changeValue(JSONValue);\r\n updateProject();\r\n }\r\n };\r\n\r\n const updateDateContent = useCallback(() => {\r\n const estimatedStart = project.get('estimatedStart')\r\n ? createMomentFromDateArray(project.get('estimatedStart').toJS())\r\n : null;\r\n const estimatedEnd = project.get('estimatedEnd')\r\n ? createMomentFromDateArray(project.get('estimatedEnd').toJS())\r\n : null;\r\n setEstimatedStartState(estimatedStart);\r\n setEstimatedEndState(estimatedEnd);\r\n }, [project]);\r\n\r\n useEffect(() => {\r\n updateDateContent();\r\n }, [updateDateContent]);\r\n\r\n const initialFormValues = {\r\n [EDIT_PROJECT_FORM.OBJECTIVE_DESCRIPTION]: objectiveEditorState,\r\n [EDIT_PROJECT_FORM.BACKGROUND]: backgroundEditorState,\r\n [EDIT_PROJECT_FORM.INTERNAL_INFORMATION]: internalInformationEditorState,\r\n [EDIT_PROJECT_FORM.ESTIMATED_START]: estimatedStartState,\r\n [EDIT_PROJECT_FORM.ESTIMATED_END]: estimatedEndState,\r\n };\r\n\r\n const changeBackground = (newBackground) => {\r\n dispatch(change(EDIT_PROJECT_FORM.FORM_ID, 'background', newBackground));\r\n };\r\n\r\n const changeObjective = (newValue) => {\r\n dispatch(change(EDIT_PROJECT_FORM.FORM_ID, 'objective', newValue));\r\n };\r\n\r\n const changeInternalInformation = (newValue) => {\r\n dispatch(\r\n change(EDIT_PROJECT_FORM.FORM_ID, 'internalInformation', newValue),\r\n );\r\n };\r\n\r\n const changeEstimatedStartDate = (newValue) => {\r\n dispatch(change(EDIT_PROJECT_FORM.FORM_ID, 'estimatedStart', newValue));\r\n };\r\n\r\n const onSubmit = (values) => {\r\n const updatedBackground = JSON.stringify(\r\n convertToRaw(values.background.getCurrentContent()),\r\n );\r\n const initialBackground = JSON.stringify(\r\n convertToRaw(initialFormValues.background.getCurrentContent()),\r\n );\r\n if (updatedBackground !== initialBackground) {\r\n updateValues(\r\n values,\r\n 'background',\r\n rawBackgroundJson,\r\n setRawBackgroundJson,\r\n changeBackground,\r\n );\r\n setBackgroundEditorState(values.background);\r\n }\r\n\r\n const updatedObjective = JSON.stringify(\r\n convertToRaw(values.objective.getCurrentContent()),\r\n );\r\n const initialObjective = JSON.stringify(\r\n convertToRaw(initialFormValues.objective.getCurrentContent()),\r\n );\r\n if (updatedObjective !== initialObjective) {\r\n updateValues(\r\n values,\r\n 'objective',\r\n rawObjectiveJson,\r\n setRawObjectiveJson,\r\n changeObjective,\r\n );\r\n setObjectiveEditorState(values.objective);\r\n }\r\n\r\n const updatedInternalInfo = JSON.stringify(\r\n convertToRaw(values.internalInformation.getCurrentContent()),\r\n );\r\n const initialInternalInfo = JSON.stringify(\r\n convertToRaw(initialFormValues.internalInformation.getCurrentContent()),\r\n );\r\n if (updatedInternalInfo !== initialInternalInfo) {\r\n updateValues(\r\n values,\r\n 'internalInformation',\r\n rawInternalInformationJson,\r\n setRawInternalInformationJson,\r\n changeInternalInformation,\r\n );\r\n setInternalInformationEditorState(values.internalInformation);\r\n }\r\n updateDateValues(\r\n values,\r\n 'estimatedStart',\r\n estimatedStartState,\r\n setEstimatedStartState,\r\n changeEstimatedStartDate,\r\n );\r\n };\r\n\r\n const updateDateValues = (values, key, stateValue, setValue, changeValue) => {\r\n if (!values[key]) return;\r\n const momentStateValue = moment(stateValue, 'YYYY-MM-DDTHH:mm:ss.SSS');\r\n const newValue = moment(values[key], 'YYYY/MM/DD HH:mm');\r\n\r\n if (!momentStateValue.isSame(newValue)) {\r\n const formattedNewValue = {\r\n year: newValue.format('YYYY'),\r\n month: newValue.format('MM'),\r\n day: newValue.format('DD'),\r\n hour: newValue.format('HH'),\r\n minute: newValue.format('mm'),\r\n };\r\n\r\n setValue(newValue.format('YYYY-MM-DDTHH:mm:ss.SSS'));\r\n changeValue(formattedNewValue);\r\n updateProject();\r\n }\r\n };\r\n\r\n const [toolbarHeight, setToolbarHeight] = useState(0);\r\n\r\n useEffect(() => {\r\n const newRawObjectiveJson = project.get('objective');\r\n if (!rawObjectiveJson || rawObjectiveJson !== newRawObjectiveJson) {\r\n setRawObjectiveJson(newRawObjectiveJson);\r\n updateContent(\r\n 'objective',\r\n newRawObjectiveJson,\r\n setObjectiveEditorState,\r\n objectiveEditorState,\r\n );\r\n }\r\n\r\n const newRawBackgroundJson = project.get('background');\r\n if (!rawBackgroundJson || rawBackgroundJson !== newRawBackgroundJson) {\r\n setRawBackgroundJson(newRawBackgroundJson);\r\n updateContent(\r\n 'background',\r\n newRawBackgroundJson,\r\n setBackgroundEditorState,\r\n backgroundEditorState,\r\n );\r\n }\r\n\r\n const newRawInternalInformationJson = project.get('internalInformation');\r\n if (\r\n !rawInternalInformationJson ||\r\n rawInternalInformationJson !== newRawInternalInformationJson\r\n ) {\r\n setRawInternalInformationJson(newRawInternalInformationJson);\r\n updateContent(\r\n 'internalInformation',\r\n newRawInternalInformationJson,\r\n setInternalInformationEditorState,\r\n internalInformationEditorState,\r\n );\r\n }\r\n\r\n const handleResize = () => {\r\n const toolbar = document.querySelector('.rdw-editor-toolbar');\r\n if (toolbar) {\r\n const height = toolbar.offsetHeight;\r\n setToolbarHeight(height);\r\n }\r\n };\r\n\r\n handleResize();\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n // eslint-disable-next-line\r\n }, [\r\n project,\r\n rawBackgroundJson,\r\n rawObjectiveJson,\r\n rawInternalInformationJson,\r\n ]);\r\n\r\n const history = useHistory();\r\n\r\n const goBackToProjects = (event) => {\r\n event.preventDefault();\r\n history.push('/projects', { isArchive: true });\r\n };\r\n\r\n return (\r\n <>\r\n {isArchive ? (\r\n \r\n \r\n \r\n \r\n \r\n ARCHIVED PROJECTS\r\n \r\n \r\n ) : null}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {displayWellcomExternalId && (\r\n \r\n \r\n {\r\n if (event.key === KEYS.ENTER && !event.shiftKey) {\r\n event.preventDefault();\r\n updateProjectExternalId(projectId);\r\n }\r\n }}\r\n disabled={updateExternalIdDataState.isLoading()}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n updateProjectExternalId(projectId)}\r\n title=\"Click to look-up project in Wellcom. Clear Wellcom project no and synchronize to remove link\"\r\n >\r\n Synchronize\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n {hasPermission && (\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Department(s)\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n updateMeasurementPreference(values, project.get('id'))\r\n }\r\n onEnter={() =>\r\n initializeMeasurementPreferences(\r\n unitSystem,\r\n measurementPreference,\r\n )\r\n }\r\n descriptions={{\r\n [CUSTOM_UNIT_SYSTEM]: 'Is set to custom units',\r\n [CONVERT_SYSTEMS.METRIC]: 'Is displayed in Metric',\r\n [CONVERT_SYSTEMS.IMPERIAL]: 'Is displayed in Imperial',\r\n }}\r\n options={[\r\n {\r\n value: CUSTOM_UNIT_SYSTEM,\r\n label: `${CUSTOM_UNIT_SYSTEM} (default)`,\r\n },\r\n ...Object.values(CONVERT_SYSTEMS).map((system) => ({\r\n value: system,\r\n label: capitalize(system),\r\n })),\r\n ]}\r\n />\r\n toggleModal(EDIT_PROJECT_UNITS_MODAL_ID),\r\n }}\r\n >\r\n {[\r\n {\r\n value: CUSTOM_UNIT_SYSTEM,\r\n label: CUSTOM_UNIT_SYSTEM,\r\n },\r\n ...Object.values(CONVERT_SYSTEMS).map((system) => ({\r\n value: system,\r\n label: capitalize(system),\r\n })),\r\n ].map(({ value, label }) => (\r\n \r\n {label}\r\n \r\n ))}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2.5),\r\n background: theme.altus.background.panel,\r\n },\r\n chipRootDisabled: {\r\n opacity: 0.5,\r\n },\r\n departmentContainer: {\r\n marginTop: 0,\r\n },\r\n test: {\r\n backgroundColor: theme.palette.error.main,\r\n },\r\n});\r\n\r\nexport default compose(\r\n reduxForm({\r\n form: EDIT_PROJECT_FORM.FORM_ID,\r\n }),\r\n withStyles(styles),\r\n)(ProjectDetailsForm);\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport {\r\n Table,\r\n TableRow,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nimport { RiskMatrix, EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst RiskMatrixComponent = ({ classes, allRisks = EMPTY_LIST }) => {\r\n const theme = useTheme();\r\n const getBackgroundColor = (value) => {\r\n switch (value) {\r\n case 'Red':\r\n return theme.altus.components.RiskMatrix.background.red;\r\n case 'Yellow':\r\n return theme.altus.components.RiskMatrix.background.yellow;\r\n case 'Green':\r\n return theme.altus.components.RiskMatrix.background.green;\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n const getIntersectionNumber = (rowIndex, cellIndex) => {\r\n const consequenceValue = rowIndex + 1;\r\n const probabilityValue = 6 - cellIndex;\r\n\r\n let count = 0;\r\n for (let risk of allRisks) {\r\n if (\r\n risk.get('consequence') === consequenceValue &&\r\n risk.get('probability') === probabilityValue\r\n ) {\r\n count++;\r\n }\r\n }\r\n return count || null;\r\n };\r\n\r\n const ReversedRiskMatrix = [...RiskMatrix];\r\n ReversedRiskMatrix[0] = ['', ...ReversedRiskMatrix[0].slice(1).reverse()];\r\n for (let i = 1; i < ReversedRiskMatrix.length; i++) {\r\n ReversedRiskMatrix[i] = [\r\n ReversedRiskMatrix[i][0],\r\n ...ReversedRiskMatrix[i].slice(1).reverse(),\r\n ];\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n Probability\r\n \r\n \r\n \r\n {ReversedRiskMatrix[0].map((header, index) => {\r\n if (header === 'N/A') {\r\n return ;\r\n }\r\n const [symbol, name] = header.split('-');\r\n const cellClasses = [classes.roundedCell];\r\n cellClasses.push(\r\n classes.myToolbar,\r\n classes.centeredContent,\r\n classes.borderNone,\r\n classes.columnWidth,\r\n );\r\n\r\n if (index === 0) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n {symbol}\r\n
\r\n {name}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n \r\n {ReversedRiskMatrix.slice(1).map((row, rowIndex) => (\r\n \r\n {rowIndex === 0 && (\r\n \r\n Consequence\r\n \r\n )}\r\n {row.map((cell, cellIndex) => {\r\n const cellClasses = [classes.roundedCell];\r\n const [symbol, name] = cell.split('-');\r\n\r\n if (cell === 'N/A')\r\n return (\r\n \r\n );\r\n\r\n if (cellIndex === 0) {\r\n return (\r\n \r\n \r\n {symbol}\r\n
\r\n {name}\r\n
\r\n \r\n );\r\n } else cellClasses.push(classes.coloredCell);\r\n\r\n const number = getIntersectionNumber(rowIndex, cellIndex);\r\n return (\r\n \r\n \r\n \r\n {number || 0}\r\n \r\n \r\n \r\n );\r\n })}\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n};\r\n\r\n// previously defined as\r\n// const styles = (theme) => ({..})\r\n// Removed argument theme due to lint warning\r\nconst styles = (theme) => ({\r\n myToolbar: {\r\n borderRadius: '4px',\r\n backgroundColor: theme.palette.tabs.background.main,\r\n border: 'none',\r\n },\r\n tableSpacing: {\r\n borderSpacing: '6px',\r\n borderCollapse: 'separate',\r\n margin: '0 auto',\r\n },\r\n columnWidth: {\r\n width: '100vw',\r\n },\r\n circle: {\r\n backgroundColor: theme.palette.common.black,\r\n color: theme.palette.common.white,\r\n width: '5vw',\r\n height: '5vw',\r\n maxWidth: '60px',\r\n maxHeight: '60px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n fontSize: '0.9rem',\r\n },\r\n roundedCell: {\r\n borderRadius: '4px',\r\n border: 'none',\r\n },\r\n coloredCell: (props) => ({\r\n backgroundColor: props.color,\r\n }),\r\n centeredContent: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n verticalAlign: 'middle',\r\n },\r\n consequence: {\r\n writingMode: 'vertical-lr',\r\n transform: 'rotate(180deg)',\r\n textAlign: 'center',\r\n verticalAlign: 'middle',\r\n width: '40px',\r\n },\r\n borderNone: {\r\n border: 'none',\r\n },\r\n headerRowSpacing: {\r\n borderSpacing: '0px !important',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(RiskMatrixComponent);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { initialize } from 'redux-form/immutable';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport { Unarchive } from '@material-ui/icons';\r\n\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n Grid,\r\n Button,\r\n Typography,\r\n TableContainer,\r\n Paper,\r\n} from '@material-ui/core';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n submitUpdateProject,\r\n deleteProject,\r\n updateProjectExternalId,\r\n updateProjectMeasurementPreference,\r\n archiveProject,\r\n} from 'features/projects/details/details.actions';\r\n\r\nimport {\r\n DETAILS_ACTIONS,\r\n EDIT_PROJECT_FORM,\r\n} from 'features/projects/details/details.constants';\r\n\r\nimport {\r\n TASK_VIEWS,\r\n TASK_ACTIONS,\r\n} from 'features/projects/tasks/tasks.constants';\r\n\r\nimport {\r\n getActionDataStateFromState,\r\n getSummarizedDataStateFromState,\r\n getAvailableDepartmentsFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport TaskTableChart from 'features/projects/tasks/TaskTableChart';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport { SystemPermission, ProjectPermission } from 'app/app.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport { getTaskTemplates } from 'features/projects/tasks/tasks.selectors';\r\nimport { getAllTasksFromState } from 'features/projects/tasks/tasks.selectors';\r\nimport { toggleModal, initializeMeasurementPreferences } from 'app/app.actions';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\nimport ProjectDetailsForm from 'features/projects/details/components/ProjectDetailsForm';\r\nimport { getAllTasksWithProjects } from 'features/projects/activities/activities.actions';\r\nimport RiskMatrixComponent from 'features/projects/details/projectRisk/RiskMatrixComponent';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst ProjectDetailsContainer = ({\r\n tasks,\r\n classes,\r\n projectId,\r\n dataState,\r\n breadcrumb,\r\n departments,\r\n templateTasks,\r\n dispatchOnLoad,\r\n dispatchOnUnLoad,\r\n dispatchGetTasks,\r\n dispatchCopyTask,\r\n dispatchSortTasks,\r\n dispatchDeleteTask,\r\n dispatchToggleModal,\r\n totalPlannedDuration,\r\n totalElapsedDuration,\r\n dispatchDeleteProject,\r\n dispatchUpdateProject,\r\n dispatchArchiveProject,\r\n updateExternalIdDataState,\r\n dispatchUpdateProjectExternalId,\r\n dispatchUpdateMeasurementPreference,\r\n dispatchInitializeMeasurementPreferences,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const project = useCurrentProject();\r\n const isArchive = project.get('isArchive');\r\n const theme = useTheme();\r\n\r\n const archiveProject = (isArchiveProject) => {\r\n dispatchArchiveProject(projectId, isArchiveProject);\r\n };\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n dispatchGetTasks(projectId);\r\n\r\n return () => dispatchOnUnLoad();\r\n }, [projectId, dispatchOnLoad, dispatchOnUnLoad, dispatchGetTasks]);\r\n\r\n useEffect(() => {\r\n dispatch(initialize(EDIT_PROJECT_FORM.FORM_ID, project));\r\n }, [dispatch, project]);\r\n\r\n const { hasPermission } = useProjectPermissions(\r\n ProjectPermission.EDIT_PROJECT_DETAILS,\r\n );\r\n\r\n const { hasPermission: hasCreateTaskPermission } = useProjectPermissions(\r\n ProjectPermission.CREATE_TASKS,\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n Project details\r\n \r\n \r\n Risks\r\n \r\n \r\n \r\n \r\n \r\n Tasks\r\n \r\n \r\n \r\n
\r\n \r\n {!project.get('isDeleted') && (\r\n \r\n dispatchDeleteProject(project.get('id'))}\r\n >\r\n DELETE PROJECT\r\n \r\n \r\n )}\r\n {isArchive ? (\r\n <>\r\n archiveProject(false)}\r\n color={'primary'}\r\n variant=\"contained\"\r\n >\r\n \r\n RESTORE PROJECT\r\n \r\n \r\n ) : (\r\n <>\r\n archiveProject(true)}\r\n variant=\"contained\"\r\n >\r\n \r\n ARCHIVE PROJECT\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n deleteProjectBtn: {\r\n zIndex: 1,\r\n position: 'absolute',\r\n left: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n contentContainer: {\r\n marginLeft: '17%',\r\n },\r\n paper: {\r\n paddingTop: '4vh',\r\n paddingBottom: '4vh',\r\n paddingRight: '6%',\r\n paddingLeft: '6%',\r\n borderRadius: '0px !important',\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n tasks: getAllTasksFromState(state),\r\n templateTasks: getTaskTemplates(state),\r\n departments: getAvailableDepartmentsFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n DETAILS_ACTIONS.PROJECT_DETAILS_PAGE_LOADED,\r\n DETAILS_ACTIONS.DELETE_PROJECT,\r\n TASK_ACTIONS.COPY_TASK,\r\n TASK_ACTIONS.SORT_TASKS,\r\n TASK_ACTIONS.GET_ALL_TASKS,\r\n TASK_ACTIONS.CONFIRM_DELETE_TASK,\r\n TASK_ACTIONS.PROJECT_TASKS_PAGE_LOADED,\r\n ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n ),\r\n updateExternalIdDataState: getActionDataStateFromState(\r\n state,\r\n DETAILS_ACTIONS.UPDATE_EXTERNAL_ID,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n const dispatchUpdateProject = () => dispatch(submitUpdateProject);\r\n const dispatchToggleModal = (modalId) => dispatch(toggleModal({ modalId }));\r\n\r\n return {\r\n dispatchToggleModal,\r\n dispatchUpdateProject,\r\n dispatchGetTasks: (projectId) =>\r\n dispatch(getAllTasksWithProjects(projectId)),\r\n dispatchOnUnLoad: () => dispatch(onUnload()),\r\n dispatchOnLoad: (projectId) => dispatch(onLoad(projectId)),\r\n dispatchInitializeMeasurementPreferences: (system, preferences) =>\r\n dispatch(initializeMeasurementPreferences(system, preferences)),\r\n dispatchDeleteProject: (projectId) => dispatch(deleteProject(projectId)),\r\n dispatchUpdateMeasurementPreference: (values, projectId) =>\r\n dispatch(updateProjectMeasurementPreference(projectId, values)),\r\n dispatchUpdateProjectExternalId: (projectId) =>\r\n dispatch(updateProjectExternalId(projectId)),\r\n dispatchArchiveProject: (projectId, isArchive) =>\r\n dispatch(archiveProject(projectId, isArchive)),\r\n };\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(ProjectDetailsContainer);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getProjectDocumentsFromState = createSelector(\r\n (state) => state.getIn(['projects', 'documents', 'documents']),\r\n (documents) => documents,\r\n);\r\n\r\nexport const getChecklistsAndProceduresFromState = createSelector(\r\n (state) => state.getIn(['projects', 'documents', 'checklistsAndProcedures']),\r\n (documents) => documents,\r\n);\r\n","import { withStyles } from '@material-ui/core';\r\nimport { TableHeaderCell } from 'altus-ui-components';\r\n\r\nconst DocumentsTableHeaderCell = ({ classes, ...rest }) => (\r\n \r\n);\r\n\r\nconst styles = () => ({\r\n root: {\r\n marginTop: '10px',\r\n marginBottom: '10px',\r\n },\r\n cell: {\r\n width: '100%',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(DocumentsTableHeaderCell);\r\n","import { Field } from 'formik';\r\nimport { useMemo, useCallback } from 'react';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport SaveIcon from '@material-ui/icons/GetApp';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { Grid, MenuItem, IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { EMPTY_MAP, Format, ProjectPermission } from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\nimport DocumentsTableHeaderCell from 'features/projects/documents/newDocumentsContainer/components/DocumentsTableHeaderCell';\r\n\r\nconst DocumentsTable = ({\r\n user,\r\n documents,\r\n deleteFile,\r\n updateFile,\r\n downloadFile,\r\n filteredDocuments,\r\n emptpyFiltering = false,\r\n documentCategories = EMPTY_MAP,\r\n useGlobalFilter = true,\r\n filterApplied,\r\n ...rest\r\n}) => {\r\n const currentDocs =\r\n filteredDocuments.size > 0 && !filterApplied\r\n ? filteredDocuments\r\n : documents;\r\n const documentFiltering =\r\n !emptpyFiltering && !filterApplied ? currentDocs : filteredDocuments;\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 3,\r\n Header: 'Document',\r\n aaccessor: (document) => document.get('fullName', null),\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n {row.original.get('extension')}\r\n \r\n ),\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Category',\r\n accessor: (document) => document.get('categoryName', null),\r\n Cell: () => {\r\n return (\r\n \r\n {documentCategories.valueSeq().map((category) => (\r\n \r\n {category.get('name')}\r\n \r\n ))}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Uploaded',\r\n accessor: (document) =>\r\n formatDate(document.get('created'), Format.time),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Uploaded by',\r\n accessor: (document) => document.getIn(['createdByUser', 'fullName']),\r\n },\r\n {\r\n xs: 2,\r\n id: 'actions',\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n \r\n deleteFile(row.original.get('fileId'))}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n downloadFile(row.original.get('fileId'), row.original)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [documentCategories, deleteFile, downloadFile],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => ,\r\n [updateFile],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DocumentsTable;\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { Grid } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { Field, Formik, Form } from 'formik';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getCurrentUserFromState,\r\n getAllOrganizationsFromState,\r\n getSummarizedDataStateFromState,\r\n getAvailableFileCategoriesFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n onLoad,\r\n updateFile,\r\n deleteFile,\r\n uploadFiles,\r\n downloadFile,\r\n} from 'features/projects/documents/documents.actions';\r\n\r\nimport {\r\n EMPTY_SET,\r\n ProjectPermission,\r\n MAX_UPLOAD_FILE_SIZE,\r\n} from 'app/app.constants';\r\n\r\nimport { setFile } from 'app/app.actions';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport UploadDocumentModal from 'app/components/UploadDocumentModal';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { DOCUMENTS_ACTIONS } from 'features/projects/documents/documents.constants';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport { ALTUS_ORGANIZATION_CODE } from 'app/hooks/useIsInternalCategoryToDisplay/constants';\r\nimport { getProjectDocumentsFromState } from 'features/projects/documents/documents.selectors';\r\nimport DocumentsTable from 'features/projects/documents/newDocumentsContainer/components/DocumentsTable';\r\nimport DocumentsCategoryFilter from 'features/projects/documents/newDocumentsContainer/components/DocumentsCategoryFilter';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport SearchTextFieldFormik from 'app/components/form/formik/SearchTextFieldFormik';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n};\r\n\r\nconst DocumentsContainerNew = ({\r\n classes,\r\n dataState,\r\n projectId,\r\n dispatchOnLoad,\r\n dispatchDropFiles,\r\n dispatchDeleteFile,\r\n dispatchUpdateFile,\r\n dispatchUploadFiles,\r\n dispatchDownloadFile,\r\n}) => {\r\n const [filter, setFilter] = useState(EMPTY_SET);\r\n const [filteredDocuments, setFilteredDocuments] = useState(EMPTY_SET);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const [emtpyFiltering, setEmtpyFiltering] = useState(false);\r\n const [filterApplied, setFilterApplied] = useState(false);\r\n\r\n const { hasPermission: hasUploadDocumentPermission } = useProjectPermissions(\r\n ProjectPermission.UPLOAD_DOCUMENTS,\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n }, [dispatchOnLoad, projectId]);\r\n\r\n const user = useSelector(getCurrentUserFromState);\r\n const documents = useSelector(getProjectDocumentsFromState);\r\n const availableOrganizations = useSelector(getAllOrganizationsFromState);\r\n const documentCategories = useSelector(getAvailableFileCategoriesFromState);\r\n\r\n const applyFilters = useCallback(() => {\r\n setEmtpyFiltering(false);\r\n const filterIds = filter.map((f) => f.get('id'));\r\n const filtered = documents.filter((document) => {\r\n const documentCategory = documentCategories.get(document.get('category'));\r\n return filterIds.includes(documentCategory.get('id'));\r\n });\r\n\r\n if (searchTerm) {\r\n const filteredDocumentsByName =\r\n filtered?.size === 0 ? documents : filtered;\r\n const filteredBySearchTerm = filteredDocumentsByName.filter(\r\n (document) => {\r\n return document\r\n .get('name')\r\n ?.toLowerCase()\r\n ?.includes(searchTerm?.toLowerCase());\r\n },\r\n );\r\n setFilteredDocuments(filteredBySearchTerm);\r\n setEmtpyFiltering(filteredBySearchTerm?.size === 0 ? true : false);\r\n setFilterApplied(true);\r\n return;\r\n }\r\n\r\n setEmtpyFiltering(filtered?.size > 0 ? true : false);\r\n setFilteredDocuments(filtered);\r\n setFilterApplied(false);\r\n }, [filter, documents, searchTerm, documentCategories]);\r\n\r\n const clearFilters = () => {\r\n setFilter(EMPTY_SET);\r\n setFilteredDocuments(EMPTY_SET);\r\n setFilterApplied(false);\r\n };\r\n\r\n const checkIfUserOrgIsAltus = (user, organizations) => {\r\n const currentOrg = Array.from(organizations).find(\r\n (org) => org.get('id') === user.get('organizationId'),\r\n );\r\n\r\n if (currentOrg?.get('code') === ALTUS_ORGANIZATION_CODE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n const downloadFile = useCallback(\r\n (fileId, file) => dispatchDownloadFile(projectId, fileId, file),\r\n [dispatchDownloadFile, projectId],\r\n );\r\n\r\n const deleteFile = useCallback(\r\n (fileId) => dispatchDeleteFile(projectId, fileId),\r\n [dispatchDeleteFile, projectId],\r\n );\r\n\r\n const updateFile = useCallback(\r\n (file) => dispatchUpdateFile(projectId, file.fileId, file),\r\n [dispatchUpdateFile, projectId],\r\n );\r\n\r\n const onDrop = useCallback(\r\n (files) => dispatchDropFiles(files),\r\n [dispatchDropFiles],\r\n );\r\n\r\n const uploadFiles = useCallback(\r\n (files) => dispatchUploadFiles(projectId)(files),\r\n [dispatchUploadFiles, projectId],\r\n );\r\n\r\n const { isDragActive, getRootProps, getInputProps, open, fileRejections } =\r\n useDropzone({\r\n onDrop,\r\n noClick: true,\r\n noKeyboard: true,\r\n maxSize: MAX_UPLOAD_FILE_SIZE,\r\n noDrag: !hasUploadDocumentPermission,\r\n });\r\n\r\n useEffect(() => {\r\n applyFilters();\r\n }, [applyFilters, searchTerm]);\r\n\r\n const onSubmit = (formValues) => {\r\n if (\r\n !formValues[Filters.TEXT_SEARCH] &&\r\n searchTerm &&\r\n !filteredDocuments.size\r\n ) {\r\n setFilterApplied(false);\r\n }\r\n\r\n if (\r\n searchTerm !== formValues[Filters.TEXT_SEARCH] ||\r\n !formValues[Filters.TEXT_SEARCH]\r\n ) {\r\n setSearchTerm(formValues[Filters.TEXT_SEARCH]);\r\n }\r\n };\r\n\r\n const initialValues = {\r\n [Filters.TEXT_SEARCH]: '',\r\n };\r\n\r\n const shouldSubmit = ({ isValid }) => isValid;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n dragOver: {\r\n opacity: '0.3',\r\n border: '5px gray dashed',\r\n },\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n DOCUMENTS_ACTIONS.DOWNLOAD_PROJECT_FILE,\r\n DOCUMENTS_ACTIONS.UPLOAD_PROJECT_FILE,\r\n DOCUMENTS_ACTIONS.UPDATE_PROJECT_FILE,\r\n DOCUMENTS_ACTIONS.DELETE_PROJECT_FILE,\r\n DOCUMENTS_ACTIONS.PROJECT_DOCUMENTS_PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchDropFiles: setFile,\r\n dispatchDeleteFile: deleteFile,\r\n dispatchUpdateFile: updateFile,\r\n dispatchUploadFiles: uploadFiles,\r\n dispatchDownloadFile: downloadFile,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(DocumentsContainerNew);\r\n","import { compose } from 'redux';\r\nimport { isImmutable } from 'immutable';\r\nimport { useMemo, useCallback } from 'react';\r\nimport SaveIcon from '@material-ui/icons/GetApp';\r\nimport OpenInNewIcon from '@material-ui/icons/Launch';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, IconButton, Link } from '@material-ui/core';\r\n\r\nimport { Table, TableRow } from 'altus-ui-components';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport DocumentsTableHeaderCell from 'features/projects/documents/newDocumentsContainer/components/DocumentsTableHeaderCell';\r\n\r\nconst getSubRows = (row) => {\r\n if (isImmutable(row)) {\r\n return row.get('procedures')?.toArray();\r\n }\r\n};\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst ProceduresTable = ({\r\n classes,\r\n procedures = EMPTY_MAP,\r\n filteredDocuments,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 9,\r\n id: 'name',\r\n Header: 'Procedures',\r\n Cell: ({ row }) => {\r\n const document = row.original;\r\n if (!row.canExpand)\r\n return (\r\n \r\n {document.get('name')}\r\n \r\n );\r\n\r\n return {document.get('name')};\r\n },\r\n },\r\n {\r\n id: 'expander',\r\n xs: 3,\r\n disableSortBy: true,\r\n Cell: ({ row }) => {\r\n const procedure = row.original;\r\n if (!row.canExpand)\r\n if (procedure.get('documentLink') === 1) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \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 {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [classes.tableRowRoot],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => {\r\n const procedure = props.row.original;\r\n if (!props.row.canExpand && props.row.subRows?.length === 0) return null;\r\n if (!props.row.canExpand) {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else {\r\n return ;\r\n }\r\n },\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n rowActionCell: {\r\n paddingRght: '10px',\r\n },\r\n mainDiv: {\r\n transform: `rotate(${90}deg)`,\r\n },\r\n tableRowRoot: {\r\n paddingLeft: '20px',\r\n },\r\n link: {\r\n textDecoration: 'none',\r\n cursor: 'pointer',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProceduresTable);\r\n","import {\r\n Grid,\r\n Typography,\r\n FormControlLabel,\r\n Checkbox,\r\n} from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { compose } from 'redux';\r\n\r\nconst ProceduresAndChecklistsFilter = ({\r\n classes,\r\n companyFilters,\r\n serviceFilters,\r\n departmentFilters,\r\n setCompanyId,\r\n procedureTypes,\r\n setProcedureTypes,\r\n departments,\r\n setDepartments,\r\n user,\r\n setAllCompanyFilter,\r\n setAllDepartmentsFilter,\r\n setAllServicesFilter,\r\n services,\r\n setServices,\r\n}) => {\r\n const companyFilterHandler = (filter) => {\r\n setCompanyId(user.get('organizationId'));\r\n setProcedureTypes((current) => {\r\n const index = current.indexOf(filter);\r\n if (index === -1) {\r\n return [...current, filter];\r\n } else {\r\n return [...current.slice(0, index), ...current.slice(index + 1)];\r\n }\r\n });\r\n setServices([]);\r\n };\r\n\r\n const servicesFilterHandler = (filter) => {\r\n setServices((current) => {\r\n const index = current.indexOf(filter);\r\n if (index === -1) {\r\n return [...current, filter];\r\n } else {\r\n return [...current.slice(0, index), ...current.slice(index + 1)];\r\n }\r\n });\r\n setProcedureTypes([]);\r\n };\r\n\r\n const departmentFilterHandler = (filter) => {\r\n setDepartments((current) => {\r\n const index = current.indexOf(filter);\r\n if (index === -1) {\r\n return [...current, filter];\r\n } else {\r\n return [...current.slice(0, index), ...current.slice(index + 1)];\r\n }\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n Filtering options\r\n \r\n \r\n All (Company)}\r\n control={\r\n \r\n }\r\n />\r\n \r\n {companyFilters.map((filter) => {\r\n return (\r\n \r\n {filter.name}}\r\n control={\r\n companyFilterHandler(filter.id)}\r\n checked={procedureTypes.includes(filter.id)}\r\n />\r\n }\r\n />\r\n \r\n );\r\n })}\r\n \r\n All (By services)}\r\n control={\r\n \r\n }\r\n />\r\n \r\n {serviceFilters.map((filter) => {\r\n return (\r\n \r\n {filter.name}}\r\n control={\r\n servicesFilterHandler(filter.id)}\r\n checked={services.includes(filter.id)}\r\n />\r\n }\r\n />\r\n \r\n );\r\n })}\r\n \r\n Filter by departments\r\n \r\n \r\n All}\r\n control={\r\n \r\n }\r\n />\r\n \r\n {departmentFilters.map((filter) => {\r\n return (\r\n \r\n {filter.name}}\r\n control={\r\n departmentFilterHandler(filter.id)}\r\n checked={departments.includes(filter.id)}\r\n />\r\n }\r\n />\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n backgroundColor: theme.palette.table.row.main,\r\n height: '70px',\r\n alignItems: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n container: {\r\n gap: '2px',\r\n },\r\n category: {\r\n backgroundColor: theme.palette.table.row.main,\r\n paddingLeft: theme.spacing(2),\r\n paddingTop: theme.spacing(0.5),\r\n paddingBottom: theme.spacing(0.5),\r\n },\r\n subCategory: {\r\n backgroundColor: theme.palette.table.row.main,\r\n paddingLeft: theme.spacing(4),\r\n paddingTop: theme.spacing(0.5),\r\n paddingBottom: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ProceduresAndChecklistsFilter);\r\n","import { fromJS } from 'immutable';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nexport const mapChecklistsAndProcedures = (documents) => {\r\n if (documents.length === 0) return EMPTY_MAP;\r\n const proceduresAndChecklist = documents;\r\n\r\n const procedures = {\r\n name: 'Procedures',\r\n procedures: Object.values(proceduresAndChecklist).filter(\r\n (procedure) => procedure.procedureType === 1,\r\n ),\r\n };\r\n\r\n const checklists = {\r\n name: 'Checklists',\r\n procedures: Object.values(proceduresAndChecklist).filter(\r\n (procedure) => procedure.procedureType === 2,\r\n ),\r\n };\r\n\r\n const qhse = {\r\n name: 'QHSE',\r\n procedures: Object.values(proceduresAndChecklist).filter(\r\n (procedure) => procedure.procedureType === 3,\r\n ),\r\n };\r\n\r\n return fromJS([procedures, checklists, qhse]);\r\n};\r\n\r\nexport const mergeArrayFilters = (activeFilter, departmentFilters) => {\r\n return fromJS([...new Set([...activeFilter, ...departmentFilters])]);\r\n};\r\n","import { createSelector } from 'reselect';\r\nimport { CHECKLISTS_AND_PROCEDURES_SOURCE } from 'features/projects/documents/documents.constants';\r\n\r\nconst getDocuments = (state) =>\r\n state.getIn(['projects', 'documents', 'checklistsAndProcedures']).toJS();\r\n\r\nexport const getFilteredChecklists = createSelector(\r\n [getDocuments],\r\n (documents) =>\r\n (companyId, procedureTypes, departments, searchTerm, services) => {\r\n let filteredDocuments = documents;\r\n\r\n if (companyId) {\r\n filteredDocuments = filteredDocuments.filter(\r\n (doc) => doc.organizationId === companyId,\r\n );\r\n }\r\n\r\n if (procedureTypes && procedureTypes.length > 0) {\r\n filteredDocuments = filteredDocuments.filter(\r\n (doc) =>\r\n procedureTypes.includes(doc.procedureType) &&\r\n doc?.source !== CHECKLISTS_AND_PROCEDURES_SOURCE.SERVICE,\r\n );\r\n }\r\n\r\n if (departments && departments.length > 0) {\r\n filteredDocuments = filteredDocuments.filter((doc) => {\r\n return doc.procedureDepartments.some((dept) =>\r\n departments.includes(dept),\r\n );\r\n });\r\n }\r\n\r\n if (services && services.length > 0) {\r\n filteredDocuments = filteredDocuments.filter(\r\n (doc) =>\r\n services.includes(doc.procedureType) &&\r\n doc.source === CHECKLISTS_AND_PROCEDURES_SOURCE.SERVICE,\r\n );\r\n }\r\n\r\n if (searchTerm && searchTerm.length > 0) {\r\n // Filter documents by name or keyword\r\n filteredDocuments = filteredDocuments.filter((doc) => {\r\n const nameMatch = doc.name\r\n .toLowerCase()\r\n .includes(searchTerm.toLowerCase());\r\n const keywordMatch = doc.listKeywords.some((keyword) =>\r\n keyword.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n return nameMatch || keywordMatch;\r\n });\r\n }\r\n\r\n return filteredDocuments;\r\n },\r\n);\r\n","import ProceduresTable from './components/ProceduresTable';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { Grid } from '@material-ui/core';\r\nimport ProceduresAndChecklistsFilter from './components/ProceduresAndChecklistsFilter';\r\nimport { useEffect } from 'react';\r\nimport { compose } from 'redux';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport { onLoadChecklistsAndProcedures } from '../documents.actions';\r\nimport {\r\n getAvailableDepartmentsFromState,\r\n getCurrentUserFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport {\r\n CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE,\r\n DOCUMENTS_ACTIONS,\r\n} from '../documents.constants';\r\nimport { mapChecklistsAndProcedures } from './newDocuments.helpers';\r\nimport { useState } from 'react';\r\nimport { getFilteredChecklists } from '../checklistsFilter.selectors';\r\nimport { Field, Formik, Form } from 'formik';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport SearchTextFieldFormik from 'app/components/form/formik/SearchTextFieldFormik';\r\n\r\nexport const Filters = {\r\n TEXT_SEARCH: 'textSearch',\r\n};\r\n\r\nconst ProceduresAndChecklistsContainer = ({\r\n dispatchOnLoad,\r\n dataState,\r\n projectId,\r\n}) => {\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n }, [dispatchOnLoad, projectId]);\r\n\r\n const user = useSelector(getCurrentUserFromState);\r\n\r\n const [companyId, setCompanyId] = useState('');\r\n const [procedureTypes, setProcedureTypes] = useState([]);\r\n const [departments, setDepartments] = useState([]);\r\n const [services, setServices] = useState([]);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n\r\n const setAllCompanyFilter = () => {\r\n if (procedureTypes.length === 3) {\r\n setProcedureTypes([]);\r\n } else {\r\n setProcedureTypes(companyFilters.map((filter) => filter.id));\r\n }\r\n };\r\n\r\n const setAllDepartmentsFilter = () => {\r\n if (departments.length === 4) {\r\n setDepartments([]);\r\n } else {\r\n setDepartments(departmentFilters.map((filter) => filter.id));\r\n }\r\n };\r\n\r\n const setAllServicesFilter = () => {\r\n if (services.length === 3) {\r\n setServices([]);\r\n } else {\r\n setProcedureTypes([]);\r\n setServices(serviceFilters.map((filter) => filter.id));\r\n }\r\n };\r\n\r\n const onSubmit = (formValues) => {\r\n setSearchTerm(formValues[Filters.TEXT_SEARCH]);\r\n };\r\n\r\n const initialValues = {\r\n [Filters.TEXT_SEARCH]: '',\r\n };\r\n\r\n const shouldSubmit = ({ isValid }) => isValid;\r\n\r\n const filteredChecklists = useSelector((state) => {\r\n const filterFn = getFilteredChecklists(state);\r\n return filterFn(\r\n companyId,\r\n procedureTypes,\r\n departments,\r\n searchTerm,\r\n services,\r\n );\r\n });\r\n\r\n const companyFilters = [\r\n {\r\n id: 1,\r\n name: 'Procedures',\r\n source: CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE.COMPANY,\r\n },\r\n {\r\n id: 2,\r\n name: 'Checklists',\r\n source: CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE.COMPANY,\r\n },\r\n {\r\n id: 3,\r\n name: 'QHSE',\r\n source: CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE.COMPANY,\r\n },\r\n ];\r\n\r\n const departmentFiltersMap = useSelector(getAvailableDepartmentsFromState);\r\n\r\n const departmentFilters = departmentFiltersMap\r\n ? departmentFiltersMap\r\n .valueSeq()\r\n .toArray()\r\n .map((item) => item.toJS())\r\n : [];\r\n\r\n const serviceFilters = [\r\n {\r\n id: 1,\r\n name: 'Procedures',\r\n source: CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE.SERVICE,\r\n },\r\n {\r\n id: 2,\r\n name: 'Checklists',\r\n source: CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE.SERVICE,\r\n },\r\n {\r\n id: 3,\r\n name: 'QHSE',\r\n source: CHECKLISTS_AND_PROCEDURES_FILTER_SOURCE.SERVICE,\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n DOCUMENTS_ACTIONS.GET_ALL_CHECKLISTS_AND_PROCEDURES,\r\n DOCUMENTS_ACTIONS.RECEIVE_CHECKLISTS_AND_PROCEDURES,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadChecklistsAndProcedures,\r\n};\r\n\r\nexport default compose(connect(mapStateToProps, mapDispatchToProps))(\r\n ProceduresAndChecklistsContainer,\r\n);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport {\r\n EMPTY_LIST,\r\n RiskConsequenceEnum,\r\n RiskMatrix,\r\n RiskProbabilityEnum,\r\n RiskStateEnum,\r\n} from 'app/app.constants';\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport { toProjectTasks } from 'utils/route.util';\r\nimport { getRichEditorText, sortRisks } from 'utils/app.util';\r\nimport { RiskSectionFormFields } from 'features/projects/components/RiskSectionsTable';\r\n\r\nconst ProjectRiskTableRowDetails = ({\r\n classes,\r\n item = EMPTY_LIST,\r\n projectId,\r\n}) => {\r\n const riskProbabilities = Object.values(RiskProbabilityEnum);\r\n const riskConsequences = Object.values(RiskConsequenceEnum);\r\n const riskState = Object.values(RiskStateEnum);\r\n\r\n const columns = [\r\n {\r\n xs: 0,\r\n id: 'empty',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 10,\r\n id: 'riskDescription',\r\n Header: 'Risk',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return (\r\n {\r\n event.stopPropagation();\r\n }}\r\n >\r\n \r\n {getRichEditorText(task.get('description'))}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 10,\r\n id: 'riskMitigation',\r\n Header: 'Mitigation',\r\n accessor: (row) => getRichEditorText(row?.get('mitigation')),\r\n },\r\n {\r\n xs: 3,\r\n id: 'rating',\r\n Header: 'Rating',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n const consequenceId = task?.get(RiskSectionFormFields.CONSEQUENCE);\r\n const probabilityId = task?.get(RiskSectionFormFields.PROBABILITY);\r\n const color = RiskMatrix[consequenceId][probabilityId] ?? 'red';\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 5,\r\n id: 'consequence',\r\n Header: 'Consequence',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return (\r\n \r\n {\r\n riskConsequences.find(\r\n (risk) => risk.id === task.get('consequence'),\r\n ).name\r\n }\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 5,\r\n id: 'probability',\r\n Header: 'Probability',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return (\r\n \r\n {\r\n riskProbabilities.find(\r\n (risk) => risk.id === task.get('probability'),\r\n ).name\r\n }\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n id: 'state',\r\n Header: 'State',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return (\r\n \r\n \r\n {riskState.find((risk) => risk.id === task.get('state')).name}\r\n \r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n taskTitleLink: {\r\n display: 'inline',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectRiskTableRowDetails);\r\n","import { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { Grid, Collapse } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { TableRow } from 'altus-ui-components';\r\n\r\nimport { invokeIfFunction } from 'utils/app.util';\r\n\r\nconst RiskTableRowExpandable = ({\r\n classes,\r\n renderDetails,\r\n isExpanded: defaultIsExpanded = false,\r\n ...rest\r\n}) => {\r\n const [isExpanded, toggleExpanded] = useToggle(defaultIsExpanded);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {invokeIfFunction(renderDetails, isExpanded)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableRowExpanded: {\r\n marginBottom: 0,\r\n },\r\n detailsRoot: {\r\n background: theme.palette.table.row.main,\r\n },\r\n collapseRoot: {\r\n width: '100%',\r\n },\r\n rootExpanded: {\r\n marginBottom: 2,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(RiskTableRowExpandable);\r\n","import React from 'react';\r\nimport { useCallback } from 'react';\r\nimport ProjectRiskTableRowDetails from 'features/projects/details/projectRisk/ProjectRiskTableRowDetails';\r\nimport RiskTableRowExpandable from 'features/projects/details/projectRisk/RiskTableRowExpandable';\r\n\r\nconst ProjectRiskRow = ({ item, projectId, ...rest }) => {\r\n const renderDetails = useCallback(\r\n (isExpanded) => (\r\n \r\n ),\r\n [item, projectId],\r\n );\r\n\r\n return ;\r\n};\r\n\r\nexport default ProjectRiskRow;\r\n","import { useMemo } from 'react';\r\nimport { useCallback } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nimport { SortableTable, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nimport ProjectRiskRow from 'features/projects/details/projectRisk/ProjectRiskRow';\r\n\r\nconst ProjectRiskByTaskTable = ({ items = EMPTY_LIST, projectId }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 0,\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n xs: 12,\r\n Header: 'Task',\r\n accessor: (task) => task.get('title'),\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n\r\n return (\r\n \r\n {task.get('title')}\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => {\r\n const TableRowComponent = ProjectRiskRow;\r\n return ;\r\n },\r\n [projectId],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n taskTitleLink: {\r\n display: 'inline',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectRiskByTaskTable);\r\n","import { compose } from 'redux';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useCallback, useEffect } from 'react';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport RiskSectionsTable from 'features/projects/components/RiskSectionsTable';\r\nimport {\r\n requestCreateProjectSection,\r\n requestDeleteProjectSection,\r\n requestProjectRiskSections,\r\n requestTaskRiskByProject,\r\n requestUpdateProjectSection,\r\n} from 'features/projects/details/details.actions.js';\r\nimport { useMemo } from 'react';\r\nimport { RISK_TABLE_ACTIONS } from 'features/projects/tasks/task/details/taskDetails.constants';\r\nimport {\r\n createProjectRiskSectionsSelector,\r\n createTaskRiskSectionByProjectSelector,\r\n} from 'features/projects/projects.selectors';\r\nimport ProjectRiskByTaskTable from 'features/projects/details/projectRisk/ProjectRiskByTaskTable';\r\n\r\nconst ProjectRiskContainer = ({\r\n classes,\r\n dataState,\r\n projectId,\r\n dispatchRequestCreateProjectRiskSection,\r\n dispatchRequestUpdateProjectRiskSection,\r\n dispatchRequestDeleteProjectRiskSection,\r\n dispatchRequestProjectRiskSectionsForTaskRisk,\r\n defaultTaskRiskSection,\r\n dispatchRequestTaskRiskSectionsByProject,\r\n isArchive,\r\n}) => {\r\n useEffect(() => {\r\n dispatchRequestProjectRiskSectionsForTaskRisk(projectId);\r\n dispatchRequestTaskRiskSectionsByProject(projectId);\r\n }, [\r\n dispatchRequestProjectRiskSectionsForTaskRisk,\r\n dispatchRequestTaskRiskSectionsByProject,\r\n projectId,\r\n ]);\r\n\r\n const createTaskRiskSection = useCallback(\r\n (risk, formik, callback) =>\r\n dispatchRequestCreateProjectRiskSection(\r\n projectId,\r\n risk,\r\n formik,\r\n callback,\r\n ),\r\n [dispatchRequestCreateProjectRiskSection, projectId],\r\n );\r\n\r\n const updateTaskRiskSection = useCallback(\r\n (risk) => {\r\n dispatchRequestUpdateProjectRiskSection(projectId, risk);\r\n },\r\n [dispatchRequestUpdateProjectRiskSection, projectId],\r\n );\r\n\r\n const deleteTaskRiskSection = useCallback(\r\n (riskId) => dispatchRequestDeleteProjectRiskSection(riskId, projectId),\r\n [dispatchRequestDeleteProjectRiskSection, projectId],\r\n );\r\n\r\n const projectRiskSectionsSelector = useMemo(\r\n () => createProjectRiskSectionsSelector(),\r\n [],\r\n );\r\n const taskRiskSectionsSelector = useMemo(\r\n () => createTaskRiskSectionByProjectSelector(),\r\n [],\r\n );\r\n\r\n const taskRiskSections = useSelector(taskRiskSectionsSelector);\r\n const projectRiskSections = useSelector(projectRiskSectionsSelector);\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n Task Risks\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n dragOver: {\r\n opacity: '0.3',\r\n border: '5px gray dashed',\r\n },\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n RISK_TABLE_ACTIONS.REQUEST_PROJECT_RISK_SECTIONS,\r\n RISK_TABLE_ACTIONS.REQUEST_TASK_RISK_BY_PROJECT,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchRequestCreateProjectRiskSection: requestCreateProjectSection,\r\n dispatchRequestUpdateProjectRiskSection: requestUpdateProjectSection,\r\n dispatchRequestDeleteProjectRiskSection: requestDeleteProjectSection,\r\n dispatchRequestProjectRiskSectionsForTaskRisk: requestProjectRiskSections,\r\n dispatchRequestTaskRiskSectionsByProject: requestTaskRiskByProject,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(ProjectRiskContainer);\r\n","import { Grid, Typography } from '@material-ui/core';\r\n\r\nimport { Alert } from 'altus-ui-components';\r\nimport { ProjectWellboreDetailStatus } from 'app/app.constants';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { orange } from '@material-ui/core/colors';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n root: {\r\n background: orange[600],\r\n padding: '0',\r\n },\r\n [`root-${ProjectWellboreDetailStatus.DRAFT}`]: {\r\n background: orange[600],\r\n height: '3vh',\r\n padding: '0',\r\n },\r\n boldText: {\r\n fontWeight: 'bold',\r\n },\r\n}));\r\n\r\nexport const ArchiveAlert = ({ isArchive = false }) => {\r\n const classes = useStyles();\r\n\r\n if (!isArchive) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Project Archived\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ArchiveAlert;\r\n","import { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { useRequest } from 'altus-hooks';\r\n\r\nimport projectWellboreDetailsService from 'services/projectWellboreDetail.service';\r\nimport { setActiveWellboredetailId } from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\n\r\nconst useLatestProjectWellboreDetailsWithId = (projectId) => {\r\n const dispatch = useDispatch();\r\n const getLatestProjectWellboreDetail = useCallback(\r\n () =>\r\n projectWellboreDetailsService\r\n .getLatestProjectWellboreDetail(projectId)\r\n .then((projectWellboreDetail) => {\r\n dispatch(\r\n setActiveWellboredetailId(\r\n projectWellboreDetail.projectWellboreDetailId,\r\n ),\r\n );\r\n return projectWellboreDetail.projectWellboreDetailId;\r\n }),\r\n [projectId, dispatch],\r\n );\r\n\r\n return useRequest(getLatestProjectWellboreDetail);\r\n};\r\n\r\nexport default useLatestProjectWellboreDetailsWithId;\r\n","import { compose } from 'redux';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\nimport { Grid, Tabs, Tab, withStyles, Divider, Box } from '@material-ui/core';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport ProjectWellboreHeader from 'features/projects/wellbore/ProjectWellboreHeader';\r\nimport { PROJECT_WELLBORE_ACTIVE_TAB } from 'features/equipment/equipment.constants';\r\nimport ProjectWellboreOverview from 'features/projects/wellbore/survey/ProjectWellboreOverview';\r\nimport ProjectWellboreDetailsContainer from 'features/projects/wellbore/details/ProjectWellboreDetailsContainer';\r\nimport { requestProjectWellboreDetails } from 'features/projects/wellbore/details/projectWellboreDetails.actions';\r\nimport useLatestProjectWellboreDetailsWithId from 'features/projects/hooks/useLatestProjectWellboreDetailsWithId';\r\nimport ProjectWellboreSectionsContainer from 'features/projects/wellbore/sections/ProjectWellboreSectionsContainer';\r\nimport ProjectWellboreDetailStatusHeader from 'features/projects/wellbore/details/ProjectWellboreDetailStatusHeader';\r\nimport { getActiveProjectWellboreDetailIdFromState } from 'features/projects/wellbore/details/projectWellboreDetails.selectors';\r\n\r\nconst ProjectWellboreNewContainer = ({ classes, projectId, dataState }) => {\r\n const dispatch = useDispatch();\r\n\r\n const [activeTab, setActiveTab] = useState(\r\n PROJECT_WELLBORE_ACTIVE_TAB.OVERVIEW,\r\n );\r\n const [activeWellboreDetailId, setActiveWellboredetailId] = useState(null);\r\n\r\n const activeWellboreDetailIdFromState = useSelector(\r\n getActiveProjectWellboreDetailIdFromState,\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(requestProjectWellboreDetails(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n useEffect(() => {\r\n if (activeWellboreDetailIdFromState != null) {\r\n setActiveWellboredetailId(activeWellboreDetailIdFromState);\r\n }\r\n }, [activeWellboreDetailIdFromState]);\r\n\r\n const [latestWellboreDetailId = null] =\r\n useLatestProjectWellboreDetailsWithId(projectId);\r\n\r\n const project = useCurrentProject();\r\n\r\n const handleActiveWellboreId = (value) => {\r\n setActiveWellboredetailId(value);\r\n };\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n const activeTabHandler = (activeTab) => {\r\n switch (activeTab) {\r\n default:\r\n return null;\r\n case PROJECT_WELLBORE_ACTIVE_TAB.OVERVIEW:\r\n return ;\r\n case PROJECT_WELLBORE_ACTIVE_TAB.DETAILS:\r\n return (\r\n \r\n );\r\n case PROJECT_WELLBORE_ACTIVE_TAB.SECTIONS:\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTabHandler(activeTab)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n contentContainer: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n box: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n tabsContainer: {\r\n width: '100%',\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n tabPanel: {\r\n flex: 1,\r\n padding: theme.spacing(1),\r\n backgroundColor: 'transparent',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(state),\r\n })),\r\n withStyles(styles),\r\n)(ProjectWellboreNewContainer);\r\n","import { React, useState } from 'react';\r\nimport { compose } from 'redux';\r\nimport { connect, useSelector } from 'react-redux';\r\n\r\nimport { Grid, Tabs, Tab, withStyles, Divider, Box } from '@material-ui/core';\r\n\r\nimport { ProjectRoles } from 'app/app.constants';\r\nimport { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport TeamContainer from 'features/projects/team/TeamContainer';\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getCurrentProjectMemberFromState,\r\n} from 'app/app.selectors';\r\nimport { PROJECT_DETAILS_ACTIVE_TAB } from 'features/equipment/equipment.constants';\r\nimport ProjectDetailsContainer from 'features/projects/details/ProjectDetailsContainer';\r\nimport DocumentsContainerNew from 'features/projects/documents/newDocumentsContainer/DocumentsContainerNew';\r\nimport ProceduresAndChecklistsContainer from 'features/projects/documents/newDocumentsContainer/ProceduresAndChecklistsContainer';\r\nimport ProjectRiskContainer from 'features/projects/details/projectRisk/ProjectRiskContainer';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport ArchiveAlert from 'features/projects/details/components/ArchiveAlert';\r\nimport ProjectWellboreNewContainer from 'features/projects/wellbore/ProjectWellboreNewContainer';\r\n\r\nconst ProjectDetailsDescriptionContainer = ({\r\n classes,\r\n projectId,\r\n dataState,\r\n breadcrumb,\r\n departments,\r\n templateTasks,\r\n dispatchOnLoad,\r\n dispatchOnUnLoad,\r\n dispatchToggleModal,\r\n dispatchDeleteProject,\r\n dispatchUpdateProject,\r\n updateExternalIdDataState,\r\n dispatchUpdateProjectExternalId,\r\n dispatchUpdateMeasurementPreference,\r\n dispatchInitializeMeasurementPreferences,\r\n projectRoles,\r\n dispatchOnUnload,\r\n projectMembersByUserId,\r\n dispatchDeleteProjectMember,\r\n dispatchAssignProjectMemberToRole,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(\r\n PROJECT_DETAILS_ACTIVE_TAB.PROJECT_DETAILS,\r\n );\r\n\r\n const project = useCurrentProject();\r\n const isArchive = project.get('isArchive');\r\n const currentUser = useCurrentUser();\r\n const currnetUserId = currentUser.get('userId');\r\n\r\n const currentProjectMember = useSelector(getCurrentProjectMemberFromState);\r\n const curentProjectUserid = currentProjectMember?.get('userId');\r\n const currentProjectMemberRoles = currentProjectMember?.get('roles');\r\n const isThirdParty =\r\n currentProjectMemberRoles &&\r\n currentProjectMemberRoles.find(\r\n (role) => role === ProjectRoles.THIRD_PARTY,\r\n ) != null;\r\n\r\n const userCanAccessProcedures =\r\n curentProjectUserid &&\r\n curentProjectUserid === currnetUserId &&\r\n !isThirdParty;\r\n \r\n const activeTabHandler = (activeTab) => {\r\n switch (activeTab) {\r\n default:\r\n return null;\r\n case PROJECT_DETAILS_ACTIVE_TAB.WELL:\r\n return ;\r\n case PROJECT_DETAILS_ACTIVE_TAB.PROJECT_DETAILS:\r\n return (\r\n \r\n );\r\n case PROJECT_DETAILS_ACTIVE_TAB.TEAM:\r\n return (\r\n \r\n );\r\n case PROJECT_DETAILS_ACTIVE_TAB.DOCUMENTS:\r\n return (\r\n \r\n );\r\n case PROJECT_DETAILS_ACTIVE_TAB.RISKS:\r\n return (\r\n \r\n );\r\n case PROJECT_DETAILS_ACTIVE_TAB.PROCEDURES_CHECKLISTS:\r\n return (\r\n currentUser.get('isMainVendor') &&\r\n userCanAccessProcedures && (\r\n \r\n )\r\n );\r\n }\r\n };\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {currentUser.get('isMainVendor') &&\r\n userCanAccessProcedures && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTabHandler(activeTab)}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n contentContainer: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n box: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n tabsContainer: {\r\n paddingLeft: '12%',\r\n borderRadius: 3,\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n tabPanel: {\r\n flex: 1,\r\n padding: theme.spacing(1),\r\n backgroundColor: 'transparent',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(state),\r\n })),\r\n withStyles(styles),\r\n)(ProjectDetailsDescriptionContainer);\r\n","import React from 'react';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nconst TaskActivityDrawerHeader = ({ title, toggleDrawer }) => {\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TaskActivityDrawerHeader;\r\n","import React from 'react';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport Counter from 'app/components/Counter';\r\nimport { formatDate, formatDuration } from 'utils/format.util';\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst TaskActivityDrawerContent = ({ classes, activity, displayComments }) => {\r\n const isTimerActive = activity.get('status') === WORK_ITEM_STATUS.STARTED;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {activity.get('startTime') ? (\r\n formatDate(activity.get('startTime'))\r\n ) : (\r\n \r\n {'Not Yet Started'}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {activity.get('startTime') ? (\r\n formatDuration(elapsedTime)}\r\n />\r\n ) : (\r\n \r\n {'No Duration'}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {activity.getIn(['depth', 'value']) ? (\r\n `${activity.getIn(['depth', 'value'])}${activity.getIn([\r\n 'depth',\r\n 'unit',\r\n ])}`\r\n ) : (\r\n \r\n {'N/A'}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {activity.get('description') ? (\r\n \r\n ) : (\r\n \r\n {'No Description'}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {activity.get('parallelActivity') ? (\r\n \r\n ) : (\r\n \r\n {'No Parallel Activity'}\r\n \r\n )}\r\n \r\n \r\n \r\n {displayComments && (\r\n \r\n \r\n \r\n {activity.get('comments') ? (\r\n \r\n ) : (\r\n \r\n {'No Comments'}\r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {'Sub Activities'}\r\n \r\n {activity.get('subActivities').size ? (\r\n activity.get('subActivities').map((subActivity) => (\r\n \r\n \r\n \r\n \r\n {subActivity.get('name')}\r\n \r\n \r\n \r\n \r\n {formatDate(subActivity.get('startTime'))}\r\n \r\n \r\n \r\n \r\n {subActivity.getIn(['depth', 'value']) ? (\r\n \r\n {`${subActivity.getIn([\r\n 'depth',\r\n 'value',\r\n ])}${subActivity.getIn(['depth', 'unit'])}`}\r\n \r\n ) : (\r\n \r\n {'N/A'}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {subActivity.get('description') ? (\r\n \r\n ) : (\r\n \r\n {'No Description'}\r\n \r\n )}\r\n \r\n \r\n \r\n {displayComments && (\r\n \r\n \r\n \r\n {subActivity.get('comments') ? (\r\n \r\n ) : (\r\n \r\n {'No Comments'}\r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n ))\r\n ) : (\r\n \r\n {'No Sub Activities'}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n activityField: {\r\n paddingTop: `${theme.spacing(3)}px`,\r\n },\r\n subActivityBox: {\r\n marginTop: `${theme.spacing(2)}px`,\r\n marginBottom: `${theme.spacing(2)}px`,\r\n border: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n subActivityField: {\r\n padding: `${theme.spacing(1)}px`,\r\n },\r\n disabledText: {\r\n color: theme.palette.secondary.mainLight,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TaskActivityDrawerContent);\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Drawer } from '@material-ui/core';\r\nimport TaskActivityDrawerHeader from 'features/projects/tasks/task/activities/TaskActivityDrawerHeader';\r\nimport TaskActivityDrawerContent from 'features/projects/tasks/task/activities/TaskActivityDrawerContent';\r\n\r\nconst TaskActivityDrawer = ({\r\n isOpen,\r\n classes,\r\n activity,\r\n toggleDrawer,\r\n displayComments,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n background: theme.palette.background.default,\r\n },\r\n drawerHeader: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1000,\r\n background: theme.palette.background.default,\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n drawerContent: {\r\n padding: theme.spacing(2),\r\n overflowY: 'scroll-y',\r\n margin: `0 ${theme.spacing(1)}px 0 ${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(TaskActivityDrawer);\r\n","import { useMemo, useState } from 'react';\r\nimport { Typography, Grid } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport { ActivityDuration } from 'app/components/Counter';\r\nimport { formatDate, formatDuration } from 'utils/format.util';\r\nimport { EMPTY_LIST, WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport ActivityCommentModal from 'features/projects/tasks/task/activities/ActivityCommentModal';\r\nimport TaskActivityDrawer from 'features/projects/tasks/task/activities/TaskActivityDrawer';\r\n\r\nconst TaskActivitiesTableWithDrawer = ({\r\n displayComments,\r\n activities = EMPTY_LIST,\r\n ...rest\r\n}) => {\r\n const [isOpen, toggle] = useToggle();\r\n const [activity, setActivity] = useState(null);\r\n const initialState = useMemo(\r\n () => ({\r\n hiddenColumns: displayComments ? [] : ['comments'],\r\n }),\r\n [displayComments],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'status',\r\n xs: 1,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 9,\r\n Header: 'Activity',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n if (!activity.get('name')) return null;\r\n return (\r\n \r\n \r\n \r\n {activity.get('name')}\r\n \r\n \r\n \r\n \r\n {'•'}\r\n \r\n \r\n \r\n {`${\r\n activity.get('subActivities').size\r\n } sub-activities`}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Started',\r\n accessor: (activity) => formatDate(activity.get('startTime')),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Duration',\r\n Cell: ({ row }) => {\r\n const activity = row.original;\r\n\r\n if (activity.get('isPointInTime')) return null;\r\n\r\n const isTimerActive =\r\n activity.get('status') === WORK_ITEM_STATUS.STARTED;\r\n\r\n return (\r\n formatDuration(elapsedTime)}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n id: 'comments',\r\n Header: ,\r\n Cell: ({ row }) => (\r\n \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 setActivity(activity);\r\n toggle();\r\n }}\r\n {...rest}\r\n />\r\n {activity && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TaskActivitiesTableWithDrawer;\r\n","import { useCallback } from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\n\r\nimport { fromJS } from 'immutable';\r\nimport { formatDate } from 'utils/format.util';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport { useTaskActivities } from 'features/projects/activities/hooks/useTaskActivities';\r\nimport { EditorState, convertFromRaw } from 'draft-js';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport TaskActivitiesTableWithDrawer from 'features/projects/tasks/task/activities/TaskActivitiesTableWithDrawer';\r\n\r\nconst ReportTableRow = ({ item: task, ...rest }) => {\r\n const taskId = task.get('taskId');\r\n\r\n const activities = useTaskActivities(taskId);\r\n\r\n const comments = task.get('comments')\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(task.get('comments'))),\r\n )\r\n : EditorState.createEmpty();\r\n\r\n const { hasPermission: hasReadActivityCommentsPermission } =\r\n useProjectPermissions(ProjectPermission.READ_ACTIVITY_COMMENTS_REPORT);\r\n\r\n const renderDetails = useCallback(\r\n (isDoRender) => {\r\n return isDoRender ? (\r\n \r\n \r\n \r\n \r\n {task.get('comments') && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {task.get('startTime') && (\r\n \r\n \r\n \r\n )}\r\n {task.get('endTime') && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : null;\r\n },\r\n [activities, task, comments, hasReadActivityCommentsPermission],\r\n );\r\n\r\n return ;\r\n};\r\n\r\nexport default ReportTableRow;\r\n\r\nconst arrangeActivities = (activities) => {\r\n if (activities) {\r\n Object.values(activities).forEach((activity) => {\r\n if (!activity.subActivities) activity.subActivities = [];\r\n if (activity.isPointInTime && activity.parentActivityId) {\r\n const parentActivityIndex = Object.values(activities).findIndex(\r\n (act) => act.id === activity.parentActivityId,\r\n );\r\n if (parentActivityIndex !== -1) {\r\n Object.values(activities)[parentActivityIndex]['subActivities'].push(\r\n activity,\r\n );\r\n\r\n delete activities[activity.id];\r\n }\r\n }\r\n });\r\n const sortedData = Object.values(activities).sort(\r\n (a, b) => a.sequence - b.sequence,\r\n );\r\n\r\n sortedData.forEach((item, index) => {\r\n item.sequence = index + 1;\r\n });\r\n return fromJS(sortedData);\r\n }\r\n return null;\r\n};\r\n","import maxBy from 'lodash/maxBy';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, LinearProgress as MuiLinearProgress } from '@material-ui/core';\r\n\r\nimport { formatDuration } from 'utils/format.util';\r\nimport withTooltip from 'app/components/withTooltip';\r\n\r\nconst LinearProgress = withTooltip(MuiLinearProgress);\r\n\r\nconst calculateProgressBarWidth = (duration, maxDuration) => {\r\n const maxDurationSec = maxDuration.asSeconds();\r\n const durationSec = duration.asSeconds();\r\n return maxDurationSec === durationSec\r\n ? 100\r\n : (durationSec / maxDurationSec) * 100;\r\n};\r\n\r\nconst styles = () => ({\r\n progressBar: {\r\n 'cursor': 'pointer',\r\n '&:not(:last-of-type)': {\r\n marginBottom: 4,\r\n },\r\n },\r\n});\r\n\r\nconst DurationComparison = ({ durations, diffDuration, classes }) => {\r\n if (!diffDuration) return null;\r\n\r\n const [maxDuration] = maxBy(durations, ([duration]) => duration.asSeconds());\r\n\r\n return (\r\n <>\r\n {durations.map(([duration, tooltip, barColorPrimary, justify], index) => {\r\n const width = calculateProgressBarWidth(duration, maxDuration);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(DurationComparison);\r\n","import { useMemo, useCallback, useState } from 'react';\r\nimport { Grid, Typography, IconButton } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport ReportTableRow from 'features/projects/report/ReportTableRow';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport DurationComparison from 'features/projects/report/components/DurationComparison';\r\nimport DashboardIcon from 'app/components/Icons/DashboardIcon';\r\nimport ProjectDashboardsDrawer from 'features/projects/dashboard/components/ProjectDashboardsDrawer';\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\n\r\nconst ReportTable = ({\r\n tasks,\r\n classes,\r\n diffDuration,\r\n spentDuration,\r\n formatDuration,\r\n estimatedDuration,\r\n projectId = 0,\r\n project,\r\n}) => {\r\n const checkTaskStatus = (status) =>\r\n status === WORK_ITEM_STATUS.COMPLETED ||\r\n status === WORK_ITEM_STATUS.STARTED ||\r\n status === WORK_ITEM_STATUS.PAUSED ||\r\n status === WORK_ITEM_STATUS.FAILED;\r\n const [isOpen, toggleDrawer] = useToggle();\r\n const [taskID, setTaskID] = useState(0);\r\n\r\n const handleToggle = useCallback(\r\n (event, taskId) => {\r\n toggleDrawer(event);\r\n setTaskID(taskId);\r\n event.stopPropagation();\r\n },\r\n [toggleDrawer],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 1,\r\n id: 'placeholder',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Task',\r\n accessor: (task) => task.get('title'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Time planned',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n const estDuration = estimatedDuration(task);\r\n return (\r\n \r\n \r\n {estDuration ? formatDuration(estDuration) : null}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Time spent',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n const spentTime = spentDuration(task);\r\n return (\r\n \r\n \r\n {spentTime ? formatDuration(spentTime) : null}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Difference',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return (\r\n \r\n \r\n {diffDuration(task) ? formatDuration(diffDuration(task)) : ''}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'comparison',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'dashboard',\r\n Cell: ({ row }) => {\r\n const task = row.original;\r\n return checkTaskStatus(task.get('status')) ? (\r\n \r\n handleToggle(event, task.get('taskId'))}\r\n >\r\n \r\n \r\n \r\n ) : null;\r\n },\r\n },\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [\r\n classes.progressBarDisabled,\r\n classes.progressBarLess,\r\n classes.progressBarMore,\r\n classes.timeDifference,\r\n diffDuration,\r\n estimatedDuration,\r\n formatDuration,\r\n spentDuration,\r\n handleToggle,\r\n ],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n progressBarLess: {\r\n backgroundColor: theme.altus.status.report,\r\n },\r\n progressBarDisabled: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n progressBarMore: {\r\n backgroundColor: theme.palette.error.main,\r\n },\r\n timeDifference: {\r\n color: theme.palette.error.main,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ReportTable);\r\n","import { Grid, IconButton } from '@material-ui/core';\r\nimport PictureAsPdf from '@material-ui/icons/PictureAsPdf';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport function DownloadReportButton({ downloadEndOfJobReport }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nDownloadReportButton.propTypes = { downloadEndOfJobReport: PropTypes.func };\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_LIST, PROJECT_STATUS as ProjectStatus } from 'app/app.constants';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { getTotalElapsedTime } from 'utils/activity.util';\r\nimport { formatDuration, formatDurationDiff } from 'utils/format.util';\r\nimport { TimerType } from 'features/projects/activities/activities.constants';\r\nimport { timerTypeToDisplayName } from 'features/projects/activities/activities.mappers';\r\nimport { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport { downloadEndOfJobReport } from 'features/projects/report/report.actions';\r\n\r\nimport { DownloadReportButton } from 'features/projects/report/components/ReportContainerHeader/components/DownloadReportButton';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { REPORT_ACTIONS } from 'features/projects/report/report.constants';\r\nimport { LoadingOverlay } from 'altus-ui-components';\r\n\r\nconst ReportContainerHeader = ({\r\n totalNpt,\r\n timersByType,\r\n totalElapsedDuration,\r\n totalPlannedDuration,\r\n dispatchDownloadEndOfJobReport,\r\n projectExternalId,\r\n projectStatus,\r\n dataState,\r\n activities = EMPTY_LIST,\r\n}) => {\r\n const totalTimeWait = getTotalElapsedTime(\r\n activities.filter((activity) => activity.get('isWait')),\r\n );\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {Object.values(TimerType).map((timerType) => {\r\n const timers = timersByType[timerType];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n {projectStatus === ProjectStatus.REPORT && (\r\n \r\n dispatchDownloadEndOfJobReport({ projectExternalId })\r\n }\r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n emptyIcon: {\r\n fontSize: 200,\r\n color: theme.palette.action.disabled,\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n REPORT_ACTIONS.PROJECT_REPORT_END_OF_JOB,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchDownloadEndOfJobReport: downloadEndOfJobReport,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(ReportContainerHeader);\r\n","import {\r\n getProjectTimers,\r\n getAllProjectActivities,\r\n} from 'features/projects/activities/activities.actions';\r\n\r\nimport { getAllDepartments } from 'app/app.actions';\r\nimport activitiesService from 'services/activities.service';\r\nimport { getAllTasks } from 'features/projects/tasks/tasks.actions';\r\nimport { REPORT_ACTIONS } from 'features/projects/report/report.constants';\r\nimport { getAllProjectNonProductives } from 'features/projects/npt/npt.actions';\r\nimport reportsService from 'services/reports.service';\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\n\r\nexport const onLoad = (projectId) => (dispatch) => {\r\n dispatch({\r\n type: REPORT_ACTIONS.PROJECT_REPORT_PAGE_LOADED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllTasks(projectId)),\r\n dispatch(getProjectTimers(projectId)),\r\n dispatch(getAllProjectActivities(projectId)),\r\n dispatch(getAllProjectNonProductives(projectId)),\r\n dispatch(getAllDepartments()),\r\n ]),\r\n });\r\n};\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({\r\n type: REPORT_ACTIONS.PROJECT_REPORT_PAGE_UNLOADED,\r\n });\r\n\r\nexport const downloadEndOfJobReport =\r\n ({ projectExternalId }) =>\r\n (dispatch) => {\r\n const payload = reportsService.downloadEndOfJobReport(projectExternalId);\r\n\r\n dispatch({\r\n type: REPORT_ACTIONS.PROJECT_REPORT_END_OF_JOB,\r\n payload,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.ERROR]: 'No report found for this project',\r\n },\r\n });\r\n };\r\n\r\nexport const getTaskActivities = (projectId, taskId) => (dispatch) => {\r\n const payload = activitiesService.allActivitiesForTask(projectId, taskId);\r\n\r\n dispatch({\r\n taskId,\r\n type: REPORT_ACTIONS.PROJECT_REPORT_GET_ACTIVITIES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getProjectNonProductiveTimeFromState = createSelector(\r\n (state) => state.getIn(['projects', 'npt', 'data']),\r\n (npts) => npts,\r\n);\r\n","import moment from 'moment';\r\nimport { compose } from 'redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { useCallback, useEffect, useMemo } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n getTimersByTypeId,\r\n createProjectActivitiesSelector,\r\n} from 'features/projects/activities/activities.selectors';\r\n\r\nimport {\r\n getAllTasksFromState,\r\n getTotalPlannedDuration,\r\n getTotalElapsedDuration,\r\n} from 'features/projects/tasks/tasks.selectors';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { formatDuration } from 'utils/format.util';\r\nimport { durationFromStartAndEndTime } from 'utils/app.util';\r\nimport ReportTable from 'features/projects/report/ReportTable';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { onLoad, onUnload } from 'features/projects/report/report.actions';\r\nimport { REPORT_ACTIONS } from 'features/projects/report/report.constants';\r\nimport { TimerType } from 'features/projects/activities/activities.constants';\r\nimport ReportContainerHeader from 'features/projects/report/components/ReportContainerHeader';\r\nimport { getProjectNonProductiveTimeFromState } from 'features/projects/npt/npt.selectors';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nconst ReportContainer = ({\r\n npts,\r\n tasks,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n totalElapsedDuration,\r\n totalPlannedDuration,\r\n}) => {\r\n useHeader({ subTitle: breadcrumb });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, projectId]);\r\n\r\n const activitiesSelector = useMemo(\r\n () => createProjectActivitiesSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const activities = useSelector(activitiesSelector);\r\n\r\n const project = useCurrentProject();\r\n\r\n const nptTimers = useCallback(() => {\r\n var nptTimeMs = 0;\r\n npts.map((npt) => (nptTimeMs += npt.get('duration').asSeconds()));\r\n return moment.duration(nptTimeMs, 'seconds');\r\n }, [npts]);\r\n\r\n const timersByType = {\r\n [TimerType.TRAC]: useSelector((state) =>\r\n getTimersByTypeId(state, TimerType.TRAC),\r\n ),\r\n };\r\n\r\n const isCompleted = (task) => {\r\n return !!(task.get('startTime') && task.get('endTime'));\r\n };\r\n\r\n const estimatedDuration = (task) => {\r\n return task.get('durationPlanned')\r\n ? moment.duration(task.get('durationPlanned'))\r\n : null;\r\n };\r\n\r\n const spentDuration = useCallback((task) => {\r\n return isCompleted(task)\r\n ? durationFromStartAndEndTime(task.get('startTime'), task.get('endTime'))\r\n : null;\r\n }, []);\r\n\r\n const diffDuration = useCallback(\r\n (task) => {\r\n return isCompleted(task) && estimatedDuration(task)\r\n ? moment.duration(\r\n spentDuration(task).clone().subtract(estimatedDuration(task)).abs(),\r\n )\r\n : null;\r\n },\r\n [spentDuration],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n tasks: getAllTasksFromState(state),\r\n npts: getProjectNonProductiveTimeFromState(state),\r\n totalElapsedDuration: getTotalElapsedDuration(state),\r\n totalPlannedDuration: getTotalPlannedDuration(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n REPORT_ACTIONS.PROJECT_REPORT_PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n emptyIcon: {\r\n fontSize: 200,\r\n color: theme.palette.action.disabled,\r\n },\r\n progressBarLess: {\r\n backgroundColor: theme.altus.status.report,\r\n },\r\n progressBarDisabled: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n progressBarMore: {\r\n backgroundColor: theme.palette.error.main,\r\n },\r\n timeDifference: {\r\n color: theme.palette.error.main,\r\n },\r\n header: {\r\n background: 'transparent',\r\n boxShadow: 'none',\r\n '&:hover': {\r\n background: 'transparent',\r\n },\r\n },\r\n expansionPanelDetailsRoot: {\r\n padding: '15px 24px',\r\n },\r\n paper: {\r\n '&:hover $expandIcon': {\r\n backgroundColor: alpha(theme.palette.common.white, 0.5),\r\n },\r\n },\r\n expandIcon: {},\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(ReportContainer);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\n\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\n\r\nconst NPTTableRow = ({ item, classes, ...rest }) => {\r\n const renderDetails = useCallback(\r\n () => (\r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n {item.get('description') ? (\r\n \r\n ) : (\r\n \r\n N/A\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Departments:\r\n \r\n \r\n
\r\n {item.get('departments').map((dep) => {\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n })}\r\n
    \r\n
    \r\n
    \r\n
    \r\n ),\r\n [item, classes.chip, classes.list],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\nconst styles = (theme) => ({\r\n list: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n listStyle: 'none',\r\n margin: 0,\r\n },\r\n chip: {\r\n margin: theme.spacing(0.5),\r\n },\r\n});\r\nexport default compose(withStyles(styles))(NPTTableRow);\r\n","import { useMemo, useCallback } from 'react';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { IconButton, Link, Grid, Typography } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell, UserAvatar } from 'altus-ui-components';\r\n\r\nimport { Format } from 'app/app.constants';\r\nimport { formatDate, formatDuration } from 'utils/format.util';\r\nimport NPTTableRow from 'features/projects/npt/components/NPTTableRow';\r\nimport { SYNERGY_CASE_URL } from 'features/projects/incidents/incidents.constants';\r\n\r\nconst NPTTable = ({ npts, projectId, editNpt, deleteNpt }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Case Number',\r\n accessor: (npt) => npt.get('caseNumber'),\r\n Cell: ({ row }) => {\r\n const url = SYNERGY_CASE_URL + row.original.get('caseNumber');\r\n return (\r\n \r\n {row.original.get('caseNumber')}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'start',\r\n Header: 'Start time',\r\n accessor: (npt) => npt.get('startTime'),\r\n Cell: ({ value }) => formatDate(value, Format.time_long) || 'N/A',\r\n },\r\n {\r\n xs: 2,\r\n id: 'end',\r\n Header: 'End time',\r\n accessor: (npt) => npt.get('endTime'),\r\n Cell: ({ value }) => formatDate(value, Format.time_long) || 'N/A',\r\n },\r\n {\r\n xs: 3,\r\n id: 'duration',\r\n Header: 'Duration',\r\n accessor: (npt) => npt.get('duration'),\r\n Cell: ({ value }) => formatDuration(value),\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Author',\r\n Cell: ({ row }) => {\r\n const npt = row.original;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {npt.getIn(['author', 'name'])}\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n editNpt(row.index)}>\r\n \r\n \r\n \r\n deleteNpt(\r\n projectId,\r\n row.original.get('projectNonProductiveTimeId'),\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [editNpt, deleteNpt, projectId],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => ,\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\nexport default NPTTable;\r\n","import moment from 'moment/moment';\r\nimport { useCallback } from 'react';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport { reduxForm, Field } from 'redux-form/immutable';\r\nimport { Button, Grid, DialogActions } from '@material-ui/core';\r\n\r\nimport {\r\n addNotification,\r\n NOTIFICATION_VARIANTS,\r\n} from 'altus-redux-middlewares';\r\n\r\nimport {\r\n updateProjectNonProductiveTime,\r\n onEditProjectNonProductiveTimeModalLoaded,\r\n} from 'features/projects/npt/npt.actions';\r\n\r\nimport { toggleModal } from 'app/app.actions';\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport { getFormValuesFromState } from 'app/app.selectors';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { MODAL, NPT_FORM } from 'features/projects/npt/npt.constants';\r\nimport DepartmentSelectField from 'app/components/DepartmentSelectField';\r\nimport DateTimePickerField from 'app/components/form/DateTimePickerField';\r\nimport { getProjectNonProductiveTimeFromState } from 'features/projects/npt/npt.selectors';\r\n\r\n// Moved outside the component to avoid re-renders\r\nconst endTimeAfterStartTime = (value, allValues) => {\r\n const startTime = allValues.get(NPT_FORM.START)?.startOf('minute');\r\n const endTime = value?.startOf('minute');\r\n\r\n if (endTime && startTime && endTime.isSameOrBefore(startTime)) {\r\n return 'End date must be after start date.';\r\n }\r\n return undefined;\r\n};\r\n\r\nconst EditNPTModalContainer = ({\r\n npts,\r\n projectId,\r\n valid,\r\n children,\r\n submitting,\r\n formData,\r\n dispatchOnLoad,\r\n availableDepartments,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const handleSave = useCallback(\r\n (e) => {\r\n e.preventDefault();\r\n const startTime = moment(formData.startTime).startOf('minute');\r\n const endTime = moment(formData.endTime).startOf('minute');\r\n if (startTime.isSameOrAfter(endTime)) {\r\n dispatch(\r\n addNotification({\r\n message: 'End date and time must be after start date and time.',\r\n variant: NOTIFICATION_VARIANTS.ERROR,\r\n }),\r\n );\r\n } else {\r\n dispatch(updateProjectNonProductiveTime(projectId));\r\n toggleModal();\r\n }\r\n },\r\n [formData, dispatch, projectId],\r\n );\r\n\r\n return (\r\n goNext()}\r\n onPrevious={({ goPrevious }) => goPrevious()}\r\n Actions={({ toggleModal }) => (\r\n \r\n \r\n \r\n Save and close\r\n \r\n \r\n )}\r\n >\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n npts: getProjectNonProductiveTimeFromState(state),\r\n formData: getFormValuesFromState(state, NPT_FORM.EDIT_ID),\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n dispatchOnLoad: (npt) =>\r\n dispatch(onEditProjectNonProductiveTimeModalLoaded(npt)),\r\n});\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: NPT_FORM.EDIT_ID,\r\n })(EditNPTModalContainer),\r\n ),\r\n);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useEffect, useState } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n selectProjectNonProductiveTime,\r\n deleteProjectNonProductiveTime,\r\n getAllProjectNonProductives,\r\n onProjectNonProductiveReportUnload,\r\n} from 'features/projects/npt/npt.actions';\r\n\r\nimport {\r\n getActionDataStateFromState,\r\n getAvailableDepartmentsFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport NPTTable from 'features/projects/npt/components/NPTTable';\r\nimport { NPT_ACTIONS } from 'features/projects/npt/npt.constants';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport EditNPTModalContainer from 'features/projects/npt/components/EditNPTModalContainer';\r\nimport { getProjectNonProductiveTimeFromState } from 'features/projects/npt/npt.selectors';\r\n\r\nconst NPTReportContainer = ({\r\n npts,\r\n classes,\r\n project,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n departments,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchSelectNpt,\r\n dispatchDeleteNpt,\r\n}) => {\r\n const [availableDepartments, setAvailableDepartments] = useState(\r\n departments ?? EMPTY_LIST,\r\n );\r\n\r\n useEffect(() => {\r\n const ids = [];\r\n project.get('departments').forEach((dep) => {\r\n ids.push(dep.get('id'));\r\n });\r\n setAvailableDepartments(\r\n departments.filter((department) => ids.includes(department.get('id'))),\r\n );\r\n }, [project, departments]);\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, projectId]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n departments: getAvailableDepartmentsFromState(state),\r\n npts: getProjectNonProductiveTimeFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n NPT_ACTIONS.PROJECT_NON_PRODUCTIVE_TIME_REPORT_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSelectNpt: selectProjectNonProductiveTime,\r\n dispatchDeleteNpt: deleteProjectNonProductiveTime,\r\n dispatchOnLoad: getAllProjectNonProductives,\r\n dispatchOnUnload: onProjectNonProductiveReportUnload,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(NPTReportContainer);\r\n","import Agent from 'infrastructure/agent';\r\nimport lessonsMapper from 'features/projects/lessons/lessons.mappers';\r\n\r\nexport const allLessons = (projectId) =>\r\n Agent.get(`/project/${projectId}/lessons`);\r\n\r\nexport const lessonById = (projectId, lessonId) =>\r\n Agent.get(`/project/${projectId}/lessons/${lessonId}`);\r\n\r\nexport const updateLesson = (projectId, lesson) =>\r\n Agent.put(\r\n `/project/${projectId}/lessons/${lesson.id}`,\r\n lessonsMapper.Lesson.to(lesson),\r\n );\r\n\r\nexport const createLesson = (projectId, lesson) =>\r\n Agent.post(`/project/${projectId}/lessons`, lessonsMapper.Lesson.to(lesson));\r\n\r\nexport const deleteLesson = (projectId, lessonId) =>\r\n Agent.delete(`/project/${projectId}/lessons/${lessonId}`);\r\n\r\nconst lessonsService = {\r\n allLessons,\r\n lessonById,\r\n updateLesson,\r\n createLesson,\r\n deleteLesson,\r\n};\r\n\r\nexport default lessonsService;\r\n","import { useCallback } from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\n\r\nconst LessonTableRow = ({\r\n item,\r\n index,\r\n projectId,\r\n editLesson,\r\n deleteLesson,\r\n ...rest\r\n}) => {\r\n const renderDetails = useCallback(\r\n () => (\r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n {item.get('description') ? (\r\n \r\n ) : (\r\n \r\n N/A\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Recommended actions:\r\n \r\n \r\n {item.getIn(['recommended', 'actions']) ? (\r\n \r\n ) : (\r\n \r\n N/A\r\n \r\n )}\r\n \r\n \r\n \r\n ),\r\n [item],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default LessonTableRow;\r\n","import moment from 'moment';\r\nimport { useMemo, useCallback } from 'react';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { IconButton, Typography, Grid } from '@material-ui/core';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\n\r\nimport { Table, UserAvatar, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport LessonTableRow from 'features/projects/lessons/LessonTableRow';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\n\r\nconst LessonsTable = ({ lessons, projectId, editLesson, deleteLesson }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 3,\r\n Header: 'Title',\r\n accessor: (lesson) => lesson.get('title'),\r\n },\r\n {\r\n xs: 6,\r\n Header: 'Author',\r\n Cell: ({ row }) => {\r\n const lesson = row.original;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {lesson.getIn(['author', 'name'])}\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Created',\r\n accessor: (lesson) => moment(lesson.get('created')).calendar(),\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n \r\n editLesson(row.index)}>\r\n \r\n \r\n \r\n \r\n \r\n deleteLesson(projectId, row.original.get('id'))\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [projectId, editLesson, deleteLesson],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n \r\n ),\r\n [projectId, editLesson, deleteLesson],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default LessonsTable;\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getLessonsFromState = createSelector(\r\n (state) => state.getIn(['projects', 'lessons', 'data']),\r\n (lessons) => lessons,\r\n);\r\n","import { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport { reduxForm, Field } from 'redux-form/immutable';\r\nimport { Button, Grid, DialogActions } from '@material-ui/core';\r\n\r\nimport {\r\n updateLesson,\r\n onEditLessonModalLoaded,\r\n} from 'features/projects/lessons/lessons.actions';\r\n\r\nimport {\r\n MODAL,\r\n EDIT_LESSON_FORM,\r\n} from 'features/projects/lessons/lessons.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { getLessonsFromState } from 'features/projects/lessons/lessons.selectors';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\n\r\nconst EditLessonModalContainer = ({\r\n valid,\r\n lessons,\r\n children,\r\n submitting,\r\n handleSubmit,\r\n dispatchOnLoad,\r\n}) => (\r\n goNext()}\r\n onPrevious={({ goPrevious }) => goPrevious()}\r\n Actions={({ toggleModal }) => (\r\n \r\n \r\n \r\n Save and close\r\n \r\n \r\n )}\r\n >\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n);\r\n\r\nconst mapStateToProps = (state) => ({\r\n lessons: getLessonsFromState(state),\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => ({\r\n onSubmit: () => dispatch(updateLesson(ownProps.project.id)),\r\n dispatchOnLoad: (lesson) => dispatch(onEditLessonModalLoaded(lesson)),\r\n});\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: EDIT_LESSON_FORM.ID,\r\n })(EditLessonModalContainer),\r\n ),\r\n);\r\n","import { initialize } from 'redux-form/immutable';\r\n\r\nimport {\r\n MODAL,\r\n LESSONS_ACTIONS,\r\n EDIT_LESSON_FORM,\r\n CREATE_LESSON_FORM,\r\n} from 'features/projects/lessons/lessons.constants';\r\n\r\nimport { toggleModal } from 'app/app.actions';\r\nimport lessonsService from 'services/lessons.service';\r\nimport lessonsMapper from 'features/projects/lessons/lessons.mappers';\r\nimport { getFormValuesFromState } from 'app/app.selectors';\r\n\r\nexport const selectLesson = (index) => (dispatch) =>\r\n dispatch(toggleModal({ modalId: MODAL.EDIT_LESSON, activeIndex: index }));\r\n\r\nexport const onEditLessonModalLoaded = (lesson) => (dispatch) =>\r\n dispatch(initialize(EDIT_LESSON_FORM.ID, lesson));\r\n\r\nexport const onCreateLessonModalLoaded = () => (dispatch) =>\r\n dispatch(initialize(CREATE_LESSON_FORM.ID, lessonsMapper.Lesson.initial()));\r\n\r\nexport const createLesson = (projectId) => (dispatch, getState) => {\r\n const lesson = getFormValuesFromState(\r\n getState(),\r\n CREATE_LESSON_FORM.ID,\r\n ).toJS();\r\n\r\n const payload = lessonsService\r\n .createLesson(projectId, lesson)\r\n .then((response) => {\r\n dispatch(\r\n toggleModal({\r\n modalId: MODAL.CREATE_LESSON,\r\n }),\r\n );\r\n return response;\r\n });\r\n\r\n dispatch({\r\n type: LESSONS_ACTIONS.CREATE_LESSON,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateLesson = (projectId) => (dispatch, getState) => {\r\n const lesson = getFormValuesFromState(getState(), EDIT_LESSON_FORM.ID).toJS();\r\n\r\n const payload = lessonsService\r\n .updateLesson(projectId, lesson)\r\n .then((response) => {\r\n dispatch(toggleModal({ modalId: MODAL.EDIT_LESSON }));\r\n return response;\r\n });\r\n\r\n dispatch({\r\n lessonId: lesson.id,\r\n type: LESSONS_ACTIONS.UPDATE_LESSON,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onLoad = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: LESSONS_ACTIONS.PROJECT_LESSONS_PAGE_LOADED,\r\n payload: () => lessonsService.allLessons(projectId),\r\n });\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: LESSONS_ACTIONS.PROJECT_LESSONS_PAGE_UNLOADED });\r\n\r\nexport const deleteLesson = (projectId, lessonId) => (dispatch) => {\r\n dispatch({\r\n type: LESSONS_ACTIONS.DELETE_LESSON,\r\n payload: () => lessonsService.deleteLesson(projectId, lessonId),\r\n id: lessonId,\r\n confirmationDialog: {\r\n confirmButtonText: 'Delete',\r\n title: 'Delete lesson',\r\n description: 'Are you sure you want to delete this lesson?',\r\n },\r\n });\r\n};\r\n","import { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport { reduxForm, Field } from 'redux-form/immutable';\r\nimport { Button, Grid, DialogActions } from '@material-ui/core';\r\n\r\nimport {\r\n createLesson,\r\n onCreateLessonModalLoaded,\r\n} from 'features/projects/lessons/lessons.actions';\r\n\r\nimport {\r\n MODAL,\r\n CREATE_LESSON_FORM,\r\n} from 'features/projects/lessons/lessons.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\n\r\nconst CreateLessonModalContainer = ({\r\n valid,\r\n children,\r\n submitting,\r\n handleSubmit,\r\n dispatchOnLoad,\r\n}) => (\r\n (\r\n \r\n \r\n \r\n Create\r\n \r\n \r\n )}\r\n >\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n);\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => ({\r\n dispatchOnLoad: () => dispatch(onCreateLessonModalLoaded()),\r\n onSubmit: () => dispatch(createLesson(ownProps.project.id)),\r\n});\r\n\r\nexport default connect(\r\n null,\r\n mapDispatchToProps,\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: CREATE_LESSON_FORM.ID,\r\n })(CreateLessonModalContainer),\r\n ),\r\n);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n deleteLesson,\r\n selectLesson,\r\n} from 'features/projects/lessons/lessons.actions';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport LessonsTable from 'features/projects/lessons/LessonsTable';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { LESSONS_ACTIONS } from 'features/projects/lessons/lessons.constants';\r\nimport { getLessonsFromState } from 'features/projects/lessons/lessons.selectors';\r\nimport EditLessonModal from 'features/projects/lessons/components/EditLessonModalContainer';\r\nimport CreateLessonModal from 'features/projects/lessons/components/CreateLessonModalContainer';\r\n\r\nconst LessonsContainer = ({\r\n lessons,\r\n classes,\r\n project,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchSelectLesson,\r\n dispatchDeleteLesson,\r\n}) => {\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, projectId]);\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n lessons: getLessonsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n LESSONS_ACTIONS.PROJECT_LESSONS_PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchSelectLesson: selectLesson,\r\n dispatchDeleteLesson: deleteLesson,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(LessonsContainer);\r\n","import Agent from 'infrastructure/agent';\r\nimport IncidentsMapper from 'features/projects/incidents/incidents.mappers';\r\n\r\nexport const allIncidents = (projectId) =>\r\n Agent.get(`/project/${projectId}/incidents`);\r\n\r\nexport const IncidentById = (projectId, IncidentId) =>\r\n Agent.get(`/project/${projectId}/incidents/${IncidentId}`);\r\n\r\nexport const updateIncident = (projectId, incident) =>\r\n Agent.put(\r\n `/project/${projectId}/incidents/${incident.id}`,\r\n IncidentsMapper.Incident.to(incident),\r\n );\r\n\r\nexport const createIncident = (projectId, incident) =>\r\n Agent.post(\r\n `/project/${projectId}/incidents`,\r\n IncidentsMapper.Incident.to(incident),\r\n );\r\n\r\nexport const deleteIncident = (projectId, incidentId) =>\r\n Agent.delete(`/project/${projectId}/incidents/${incidentId}`);\r\n\r\nconst IncidentsService = {\r\n allIncidents,\r\n IncidentById,\r\n updateIncident,\r\n createIncident,\r\n deleteIncident,\r\n};\r\n\r\nexport default IncidentsService;\r\n","import { useCallback } from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport TableRowExpandable from 'app/components/TableRowExpandable';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\n\r\nconst IncidentTableRow = ({ item, ...rest }) => {\r\n const renderDetails = useCallback(\r\n () => (\r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n {item.get('description') ? (\r\n \r\n ) : (\r\n \r\n N/A\r\n \r\n )}\r\n \r\n \r\n \r\n ),\r\n [item],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default IncidentTableRow;\r\n","import moment from 'moment';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { IconButton, Link, Grid, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\n\r\nimport { Table, TableRowActionsCell, UserAvatar } from 'altus-ui-components';\r\n\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { SYNERGY_CASE_URL } from 'features/projects/incidents/incidents.constants';\r\nimport IncidentTableRow from 'features/projects/incidents/IncidentsTableRow';\r\n\r\nconst IncidentsTable = ({\r\n incidents,\r\n projectId,\r\n editIncident,\r\n deleteIncident,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Case Number',\r\n accessor: (incident) => incident.get('caseNumber'),\r\n Cell: ({ row }) => {\r\n const url = SYNERGY_CASE_URL + row.original.get('caseNumber');\r\n return (\r\n \r\n {row.original.get('caseNumber')}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Title',\r\n accessor: (incident) => incident.get('title'),\r\n },\r\n {\r\n xs: 5,\r\n Header: 'Author',\r\n Cell: ({ row }) => {\r\n const incident = row.original;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {incident.getIn(['author', 'name'])}\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n\r\n {\r\n xs: 4,\r\n Header: 'Created',\r\n accessor: (incident) => moment(incident.get('created')).calendar(),\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n \r\n editIncident(row.index)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n deleteIncident(projectId, row.original.get('id'))\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n [editIncident, deleteIncident, projectId],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => ,\r\n [projectId],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default IncidentsTable;\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getIncidentsFromState = createSelector(\r\n (state) => state.getIn(['projects', 'incidents', 'data']),\r\n (incidents) => incidents,\r\n);\r\n","import { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport { reduxForm, Field } from 'redux-form/immutable';\r\nimport { Button, Grid, DialogActions } from '@material-ui/core';\r\n\r\nimport {\r\n updateIncident,\r\n onEditIncidentModalLoaded,\r\n} from 'features/projects/incidents/incidents.actions';\r\n\r\nimport {\r\n MODAL,\r\n EDIT_INCIDENT_FORM,\r\n} from 'features/projects/incidents/incidents.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { getIncidentsFromState } from 'features/projects/incidents/incidents.selectors';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\n\r\nconst EditIncidentModalContainer = ({\r\n valid,\r\n incidents,\r\n children,\r\n submitting,\r\n handleSubmit,\r\n dispatchOnLoad,\r\n}) => (\r\n goNext()}\r\n onPrevious={({ goPrevious }) => goPrevious()}\r\n Actions={({ toggleModal }) => (\r\n \r\n \r\n \r\n Save and close\r\n \r\n \r\n )}\r\n >\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n);\r\n\r\nconst mapStateToProps = (state) => ({\r\n incidents: getIncidentsFromState(state),\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => ({\r\n onSubmit: () => dispatch(updateIncident(ownProps.project.id)),\r\n dispatchOnLoad: (incident) => dispatch(onEditIncidentModalLoaded(incident)),\r\n});\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: EDIT_INCIDENT_FORM.ID,\r\n })(EditIncidentModalContainer),\r\n ),\r\n);\r\n","import { initialize } from 'redux-form/immutable';\r\n\r\nimport {\r\n MODAL,\r\n INCIDENTS_ACTIONS,\r\n EDIT_INCIDENT_FORM,\r\n CREATE_INCIDENT_FORM,\r\n} from 'features/projects/incidents/incidents.constants';\r\n\r\nimport { toggleModal } from 'app/app.actions';\r\nimport incidentsService from 'services/incidents.service';\r\nimport { getFormValuesFromState } from 'app/app.selectors';\r\nimport incidentsMapper from 'features/projects/incidents/incidents.mappers';\r\n\r\nexport const selectIncident = (index) => (dispatch) =>\r\n dispatch(toggleModal({ modalId: MODAL.EDIT_INCIDENT, activeIndex: index }));\r\n\r\nexport const onEditIncidentModalLoaded = (incident) => (dispatch) =>\r\n dispatch(initialize(EDIT_INCIDENT_FORM.ID, incident));\r\n\r\nexport const onCreateIncidentModalLoaded = () => (dispatch) =>\r\n dispatch(\r\n initialize(CREATE_INCIDENT_FORM.ID, incidentsMapper.Incident.initial()),\r\n );\r\n\r\nexport const createIncident = (projectId) => (dispatch, getState) => {\r\n const incident = getFormValuesFromState(\r\n getState(),\r\n CREATE_INCIDENT_FORM.ID,\r\n ).toJS();\r\n\r\n const payload = incidentsService\r\n .createIncident(projectId, incident)\r\n .then((response) => {\r\n dispatch(\r\n toggleModal({\r\n modalId: MODAL.CREATE_INCIDENT,\r\n }),\r\n );\r\n return response;\r\n });\r\n\r\n dispatch({\r\n type: INCIDENTS_ACTIONS.CREATE_INCIDENT,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateIncident = (projectId) => (dispatch, getState) => {\r\n const incident = getFormValuesFromState(\r\n getState(),\r\n EDIT_INCIDENT_FORM.ID,\r\n ).toJS();\r\n\r\n const payload = incidentsService\r\n .updateIncident(projectId, incident)\r\n .then((response) => {\r\n dispatch(toggleModal({ modalId: MODAL.EDIT_INCIDENTS }));\r\n return response;\r\n });\r\n\r\n dispatch({\r\n incidentId: incident.id,\r\n type: INCIDENTS_ACTIONS.UPDATE_INCIDENT,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const onLoad = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: INCIDENTS_ACTIONS.PROJECT_INCIDENTS_PAGE_LOADED,\r\n payload: () => incidentsService.allIncidents(projectId),\r\n });\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: INCIDENTS_ACTIONS.PROJECT_INCIDENTS_PAGE_UNLOADED });\r\n\r\nexport const deleteIncident = (projectId, incidentId) => (dispatch) => {\r\n dispatch({\r\n type: INCIDENTS_ACTIONS.DELETE_INCIDENT,\r\n payload: () => incidentsService.deleteIncident(projectId, incidentId),\r\n id: incidentId,\r\n confirmationDialog: {\r\n confirmButtonText: 'Delete',\r\n title: 'Delete Incident',\r\n description: 'Are you sure you want to delete this Incident?',\r\n },\r\n });\r\n};\r\n","import { connect } from 'react-redux';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport { reduxForm, Field } from 'redux-form/immutable';\r\nimport { Button, Grid, DialogActions } from '@material-ui/core';\r\n\r\nimport {\r\n createIncident,\r\n onCreateIncidentModalLoaded,\r\n} from 'features/projects/incidents/incidents.actions';\r\n\r\nimport {\r\n MODAL,\r\n CREATE_INCIDENT_FORM,\r\n} from 'features/projects/incidents/incidents.constants';\r\n\r\nimport { required } from 'utils/validation.util';\r\nimport TextField from 'app/components/form/TextField';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport EditorReduxForm from 'app/components/form/EditorField';\r\n\r\nconst CreateIncidentModalContainer = ({\r\n valid,\r\n children,\r\n submitting,\r\n handleSubmit,\r\n dispatchOnLoad,\r\n}) => (\r\n (\r\n \r\n \r\n \r\n Create\r\n \r\n \r\n )}\r\n >\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n);\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => ({\r\n dispatchOnLoad: () => dispatch(onCreateIncidentModalLoaded()),\r\n onSubmit: () => dispatch(createIncident(ownProps.project.id)),\r\n});\r\n\r\nexport default connect(\r\n null,\r\n mapDispatchToProps,\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: CREATE_INCIDENT_FORM.ID,\r\n })(CreateIncidentModalContainer),\r\n ),\r\n);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport Launch from '@material-ui/icons/Launch';\r\nimport { Grid, Link } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n onLoad,\r\n onUnload,\r\n deleteIncident,\r\n selectIncident,\r\n} from 'features/projects/incidents/incidents.actions';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport { ProjectPermission } from 'app/app.constants';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport IncidentsTable from 'features/projects/incidents/IncidentsTable';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport { TASK_URLS } from 'features/projects/activities/activities.constants';\r\nimport { INCIDENTS_ACTIONS } from 'features/projects/incidents/incidents.constants';\r\nimport { getIncidentsFromState } from 'features/projects/incidents/incidents.selectors';\r\nimport EditIncidentModal from 'features/projects/incidents/components/EditIncidentModalContainer';\r\nimport CreateIncidentModal from 'features/projects/incidents/components/CreateIncidentModalContainer';\r\n\r\nconst IncidentsContainer = ({\r\n incidents,\r\n classes,\r\n project,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchSelectIncident,\r\n dispatchDeleteIncident,\r\n}) => {\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, projectId]);\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Register incident (synergi)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n incidents: getIncidentsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n INCIDENTS_ACTIONS.PROJECT_INCIDENTS_PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchSelectIncident: selectIncident,\r\n dispatchDeleteIncident: deleteIncident,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(IncidentsContainer);\r\n","import Agent from 'infrastructure/agent';\r\n\r\nexport const GetAssetHistoryByProjectId = (projectId) => { \r\n return Agent.get(`/assetHistory/project/${projectId}`);\r\n};\r\n\r\nconst assetHistoryService = {\r\n GetAssetHistoryByProjectId,\r\n};\r\n\r\nexport default assetHistoryService;\r\n","import { PROJECT_ASSET_TEST_ACTIONS } from 'features/projects/assets/assetTest.constants';\r\nimport assetHistoryService from 'services/assetTest.service';\r\n\r\nexport const onAssetTestLoad = (projectId) => (dispatch) =>\r\n dispatch({\r\n type: PROJECT_ASSET_TEST_ACTIONS.PROJECT_ASSET_TEST_PAGE_LOADED,\r\n payload: () => assetHistoryService.GetAssetHistoryByProjectId(projectId),\r\n });\r\n\r\nexport const onAssetTestUnload = () => (dispatch) =>\r\n dispatch({\r\n type: PROJECT_ASSET_TEST_ACTIONS.PROJECT_ASSET_TEST_PAGE_UNLOADED,\r\n });\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getAssetTestFromState = createSelector(\r\n (state) => state.getIn(['projects', 'assetTests', 'data']),\r\n (assets) => assets,\r\n);\r\n","import React from 'react';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nconst AssetHistoryDrawerHeader = ({ title, toggleDrawer }) => {\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AssetHistoryDrawerHeader;\r\n","import _isNil from 'lodash/isNil';\r\nimport { Grid, Box, Tooltip, Link } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { EditorState, convertFromRaw } from 'draft-js';\r\n\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport {\r\n TOOL_ASSET_EVENTS_ENUM,\r\n TEST_ASSET_RESULT,\r\n TEST_RESULT_TO_TOOLTIP_TITLE,\r\n ASSET_HISTORY_TEST_TYPES_DICT,\r\n} from 'features/equipment/equipment.constants';\r\nimport OrangeIcon from 'assets/Orange.svg';\r\nimport RedIcon from 'assets/Red.svg';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\n\r\nexport const testResultIcons = {\r\n [TEST_ASSET_RESULT.PASS]: GreenIcon,\r\n [TEST_ASSET_RESULT.FAIL]: RedIcon,\r\n [TEST_ASSET_RESULT.WARNING]: OrangeIcon,\r\n};\r\n\r\nconst richText = (item, key) =>\r\n item?.get(key)\r\n ? EditorState.createWithContent(convertFromRaw(JSON.parse(item?.get(key))))\r\n : EditorState.createEmpty();\r\n\r\nconst AssetHistoryTableRowDetails = ({ classes, item }) => {\r\n const bodyRenderHandler = (item) => {\r\n switch (item.get('event')) {\r\n case TOOL_ASSET_EVENTS_ENUM.TASK:\r\n return !item?.get('task') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.RUN:\r\n return !item?.get('task') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.TEST:\r\n return !item?.get('test') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.BOP_TEST:\r\n return !item?.get('bopTest') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORSION_TEST:\r\n return !item?.get('cableTorsionTest') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CONTINUITY_TEST:\r\n return !item?.get('cableContinuityTest') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_WRAP_TEST:\r\n return !item?.get('cableWrapTest') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORTURE_TEST:\r\n return !item?.get('cableTortureTest') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_INSULATION_TEST:\r\n return !item?.get('cableInsulationTest') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.COMPLAINTS:\r\n return !item?.get('complaint') ? null : (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.MAINTENANCE:\r\n return !item?.get('maintenance') ? null : (\r\n \r\n );\r\n default:\r\n <>;\r\n }\r\n };\r\n\r\n const headerRenderHandler = () => {\r\n switch (item.get('event')) {\r\n case TOOL_ASSET_EVENTS_ENUM.TASK:\r\n return ;\r\n case TOOL_ASSET_EVENTS_ENUM.RUN:\r\n return ;\r\n case TOOL_ASSET_EVENTS_ENUM.TEST:\r\n return ;\r\n case TOOL_ASSET_EVENTS_ENUM.BOP_TEST:\r\n return ;\r\n case TOOL_ASSET_EVENTS_ENUM.COMPLAINTS:\r\n return ;\r\n case TOOL_ASSET_EVENTS_ENUM.MAINTENANCE:\r\n return ;\r\n default:\r\n <>;\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n {headerRenderHandler()}\r\n \r\n \r\n {bodyRenderHandler(item)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst TestHeaderRow = () => {\r\n return (\r\n <>\r\n \r\n Result\r\n \r\n \r\n Event Type\r\n \r\n \r\n Comment\r\n \r\n \r\n );\r\n};\r\n\r\nconst MaintenanceAndComplaintHeader = () => {\r\n return (\r\n <>\r\n \r\n Comment\r\n \r\n \r\n );\r\n};\r\n\r\nconst MaintenanceAndComplaintBody = ({ item }) => {\r\n return (\r\n <>\r\n \r\n {}\r\n \r\n \r\n );\r\n};\r\n\r\nconst TestBodyRow = ({ test }) => {\r\n const handleResultIcon = (testResult) => {\r\n return testResultIcons[testResult] || GreenIcon;\r\n };\r\n\r\n const getTooltipTitle = (testResult) => {\r\n return TEST_RESULT_TO_TOOLTIP_TITLE[testResult] || 'Unknown';\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \"Status\r\n \r\n \r\n \r\n {ASSET_HISTORY_TEST_TYPES_DICT[test?.get('testType')]}\r\n \r\n \r\n {}\r\n \r\n \r\n );\r\n};\r\n\r\nconst TaskHeaderRow = ({ task }) => {\r\n return (\r\n <>\r\n \r\n Title\r\n \r\n \r\n Task Type\r\n \r\n \r\n Description\r\n \r\n \r\n Target depth ({task?.getIn(['targetDepth', 'unit'])})\r\n \r\n \r\n );\r\n};\r\n\r\nconst TaskBodyRow = ({ task, projectId }) => {\r\n const cableComments = task?.get('dataAcquisitionCableComments', null);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {task?.get('title')}\r\n \r\n \r\n \r\n {task?.get('taskTypeName')}\r\n \r\n \r\n {}\r\n \r\n \r\n {task?.getIn(['targetDepth', 'roundedValue'])}\r\n \r\n {!_isNil(cableComments) && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.tabs.background.main,\r\n },\r\n expansionPanelDetailsSection: {\r\n paddingLeft: theme.spacing(1.5),\r\n },\r\n expansionPanelDetailsRow: {\r\n paddingLeft: theme.spacing(1.5),\r\n marginBottom: theme.spacing(1.5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AssetHistoryTableRowDetails);\r\n","import { Grid, Tooltip } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport {\r\n ASSET_HISTORY_TEST_TYPES_DICT,\r\n getEventKeyByValue,\r\n} from 'features/equipment/equipment.constants';\r\nimport { toolAssetHistoryEventToString } from 'features/equipment/equipment.helpers';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst TestDetailComponent = ({\r\n assetHistory,\r\n classes,\r\n keyEvent,\r\n projectTitle,\r\n getTooltipTitle,\r\n handleResultIcon,\r\n}) => {\r\n const currentEvent =\r\n keyEvent ?? getEventKeyByValue(assetHistory.get('event'));\r\n\r\n return (\r\n <>\r\n \r\n \r\n {toolAssetHistoryEventToString(assetHistory.get('event'))}\r\n \r\n \r\n \r\n {assetHistory.getIn([currentEvent, 'testType']) ? (\r\n ASSET_HISTORY_TEST_TYPES_DICT[\r\n assetHistory.getIn([currentEvent, 'testType'])\r\n ]\r\n ) : (\r\n <>-\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {assetHistory.getIn([currentEvent, 'result']) ? (\r\n \r\n ) : null}\r\n {getTooltipTitle(assetHistory.getIn([currentEvent, 'result']))}\r\n \r\n
    \r\n \r\n \r\n \r\n {projectTitle}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TestDetailComponent;\r\n","import React from 'react';\r\n\r\nimport { Grid } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { BOP_LEAK_TYPE, BOP_RAM } from 'features/equipment/equipment.constants';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport { RichText } from 'utils/app.util';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nfunction getRamNameById(id) {\r\n const ram = BOP_RAM.find((ram) => ram.id === String(id));\r\n return ram ? ram.name : '-';\r\n}\r\n\r\nfunction getLeakTypeNameById(id) {\r\n const type = BOP_LEAK_TYPE.find((type) => type.id === String(id));\r\n return type ? type.name : '-';\r\n}\r\n\r\nconst BopTestDrawerComponent = ({ assetHistory, classes }) => {\r\n const currentComment = assetHistory.getIn(['bopTest', 'comment']);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {getRamNameById(assetHistory.getIn(['bopTest', 'bopRam']))}\r\n \r\n \r\n \r\n \r\n {currentComment ? (\r\n \r\n ) : (\r\n '-'\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getLeakTypeNameById(\r\n assetHistory.getIn(['bopTest', 'bopLeakType']),\r\n )}\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n marginStrand: {\r\n marginBottom: '2vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(BopTestDrawerComponent);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst Sil2TestDrawerComponent = ({ assetHistory, classes }) => {\r\n const section = assetHistory.getIn(['sil2Test', 'assetBop']);\r\n const bcs = assetHistory.getIn(['sil2Test', 'assetBcs']);\r\n const cabin = assetHistory.getIn(['sil2Test', 'assetCabin']);\r\n\r\n return (\r\n <>\r\n {!assetHistory && !section ? null : (\r\n \r\n \r\n \r\n \r\n \r\n {section.get('serialNumber')}\r\n \r\n \r\n \r\n \r\n {bcs.get('serialNumber')}\r\n \r\n \r\n \r\n \r\n {cabin.get('serialNumber')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {section.get('itemNumber')}\r\n \r\n \r\n \r\n \r\n {bcs.get('itemNumber')}\r\n \r\n \r\n \r\n \r\n {cabin.get('itemNumber')}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n marginStrand: {\r\n marginBottom: '2vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(Sil2TestDrawerComponent);\r\n","import { Grid, Link } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst TaskDetailDrawerComponent = ({ assetHistory }) => {\r\n const currentTask = assetHistory?.get('task');\r\n return (\r\n <>\r\n {currentTask === null ? null : (\r\n <>\r\n \r\n \r\n {currentTask.get('title') ? currentTask.get('title') : <>-}\r\n \r\n \r\n \r\n \r\n {currentTask.get('runNumber') ? (\r\n \r\n {currentTask.get('runNumber')}\r\n \r\n ) : (\r\n <>-\r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TaskDetailDrawerComponent;\r\n","import { Grid } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { toolAssetHistoryEventToString } from 'features/equipment/equipment.helpers';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst MaintenanceDetailComponent = ({\r\n assetHistory,\r\n classes,\r\n projectTitle,\r\n}) => (\r\n <>\r\n \r\n \r\n {toolAssetHistoryEventToString(assetHistory.get('event'))}\r\n \r\n \r\n \r\n \r\n \r\n {projectTitle}\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default MaintenanceDetailComponent;\r\n","import { Grid } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableTorsionDrawerComponent = ({ assetHistory, classes, keyEvent }) => (\r\n <>\r\n \r\n \r\n \r\n {assetHistory.getIn([keyEvent, 'wrap'])}\r\n {assetHistory.get('wrap')}\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CableTorsionDrawerComponent;\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableWrapTestDrawerComponent = ({ assetHistory, classes }) => {\r\n const section = assetHistory.getIn(['cableWrapTest', 'strandsPassed']);\r\n return (\r\n <>\r\n {!assetHistory && !section ? null : (\r\n \r\n \r\n \r\n \r\n {section.get('item1')}\r\n \r\n \r\n \r\n \r\n {section.get('item2')}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n marginStrand: {\r\n marginBottom: '2vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CableWrapTestDrawerComponent);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableTotrtureTestDrawerComponent = ({ assetHistory, classes }) => {\r\n const section = assetHistory.get('cableTortureTest');\r\n return (\r\n <>\r\n {!assetHistory && !section ? null : (\r\n \r\n \r\n \r\n \r\n {section.get('outerArmourDuctilityScore')}\r\n \r\n \r\n \r\n \r\n {section.get('innerArmourDuctilityScore')}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n marginStrand: {\r\n marginBottom: '2vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CableTotrtureTestDrawerComponent);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableContinuityTestDrawerComponent = ({ assetHistory, classes }) => {\r\n const section = assetHistory.get('cableContinuityTest');\r\n return (\r\n <>\r\n {!assetHistory && !section ? null : (\r\n \r\n \r\n {section.get('resistance')} ohm\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n marginStrand: {\r\n marginBottom: '2vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CableContinuityTestDrawerComponent);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableInsulationTestDrawerComponent = ({ assetHistory, classes }) => {\r\n const section = assetHistory.get('cableInsulationTest');\r\n return (\r\n <>\r\n {!assetHistory && !section ? null : (\r\n \r\n \r\n {section.get('resistance')} giga ohm\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n marginStrand: {\r\n marginBottom: '2vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CableInsulationTestDrawerComponent);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableWrapBraidedMonoTestDrawerComponent = ({ assetHistory, classes }) => {\r\n const innerStrand = assetHistory.getIn([\r\n 'cableWrapBraidedMonoTest',\r\n 'innerStrand',\r\n ]);\r\n const outerStrand = assetHistory.getIn([\r\n 'cableWrapBraidedMonoTest',\r\n 'outerStrand',\r\n ]);\r\n\r\n return (\r\n <>\r\n {!assetHistory && !innerStrand ? null : (\r\n \r\n \r\n \r\n \r\n {innerStrand.get('item1')}\r\n \r\n \r\n \r\n \r\n {innerStrand.get('item2')}\r\n \r\n \r\n\r\n \r\n \r\n {outerStrand.get('item1')}\r\n \r\n \r\n \r\n \r\n {outerStrand.get('item2')}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n marginStrand: {\r\n marginBottom: '2vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CableWrapBraidedMonoTestDrawerComponent);\r\n","import { Grid } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableBreakTestDrawerComponent = ({ assetHistory, classes, keyEvent }) => {\r\n const quantity = assetHistory.getIn([keyEvent, 'forceNewtonsQuantity']);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {quantity?.get('roundedValue')} {quantity?.get('unit')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableBreakTestDrawerComponent;\r\n","import { Grid } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableCutMaintenanceDrawerComponent = ({\r\n assetHistory,\r\n classes,\r\n keyEvent,\r\n}) => {\r\n const quantity = assetHistory.getIn([keyEvent, 'distanceQuantity']);\r\n return (\r\n <>\r\n \r\n \r\n \r\n {quantity?.get('roundedValue')} {quantity?.get('unit')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableCutMaintenanceDrawerComponent;\r\n","import { Grid } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableServiceMaintenanceDrawerComponent = ({\r\n assetHistory,\r\n classes,\r\n keyEvent,\r\n}) => {\r\n const lengthQuantity = assetHistory.getIn([keyEvent, 'cableLengthQuantity']);\r\n const ODQuantity = assetHistory.getIn([keyEvent, 'maxODQuantity']);\r\n return (\r\n <>\r\n \r\n \r\n \r\n {lengthQuantity?.get('roundedValue')} {lengthQuantity?.get('unit')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {ODQuantity?.get('roundedValue')} {ODQuantity?.get('unit')}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableServiceMaintenanceDrawerComponent;\r\n","export const drumTypeWhenNoCableSpoolingStorage = 'Storage reel';\r\n","import { useState, useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { searchM3ItemsWithDispatch } from 'features/equipment/equipment.actions';\r\nimport { drumTypeWhenNoCableSpoolingStorage } from 'features/equipment/assets/components/drawer/utils/constants';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableSpoolingMaintenanceDrawerComponent = ({ assetHistory, classes }) => {\r\n const dispatch = useDispatch();\r\n const [drumName, setDrumName] = useState('');\r\n\r\n useEffect(() => {\r\n if (assetHistory.getIn(['cableSpoolingMaintenance', 'drumAssetId'])) {\r\n const itemNumber = assetHistory.getIn(['drumAsset', 'itemNumber']);\r\n dispatch(searchM3ItemsWithDispatch(itemNumber)).then((response) => {\r\n setDrumName(\r\n response.find((m3) => m3.m3ItemNumber === itemNumber).m3ItemName,\r\n );\r\n });\r\n } else {\r\n setDrumName(drumTypeWhenNoCableSpoolingStorage);\r\n }\r\n }, [assetHistory, dispatch]);\r\n return (\r\n <>\r\n \r\n \r\n \r\n {drumName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {assetHistory.getIn(['drumAsset', 'itemNumber']) || '-'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {assetHistory.getIn(['drumAsset', 'serialNumber']) || '-'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableSpoolingMaintenanceDrawerComponent;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport {\r\n getEventKeyByValue,\r\n TEST_RESULT_TO_TOOLTIP_TITLE,\r\n TOOL_ASSET_EVENTS_ENUM,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport { Format } from 'app/app.constants';\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport { extractTimeIn24HourFormatUTC, RichText } from 'utils/app.util';\r\nimport { testResultIcons } from 'features/equipment/assets/components/AssetHistoryTableRowDetails';\r\nimport TestDetailComponent from 'features/equipment/assets/components/drawer/drawer-events/TestDetailComponent';\r\nimport BopTestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/BopTestDrawerComponent';\r\nimport Sil2TestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/Sil2TestDrawerComponent';\r\nimport TaskDetailDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/TaskDetailDrawerComponent';\r\nimport MaintenanceDetailComponent from 'features/equipment/assets/components/drawer/drawer-events/MaintenanceDetailComponent';\r\nimport CableTorsionDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableTorsionDrawerComponent';\r\nimport CableWrapTestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableWrapTestDrawerComponent';\r\nimport CableTortureTestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableTotrtureTestDrawerComponent';\r\nimport CableContinuityTestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableContinuityTestDrawerComponent';\r\nimport CableInsulationTestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableInsulationTestDrawerComponent';\r\nimport CableWrapBraidedMonoTestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableWrapBraidedMonoTestDrawerComponent';\r\nimport CableBreakTestDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableBreakTestDrawerComponent';\r\nimport CableCutMaintenanceDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableCutMaintenanceDrawerComponent';\r\nimport CableServiceMaintenanceDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableServiceMaintenanceDrawerComponent';\r\nimport CableSpoolingMaintenanceDrawerComponent from 'features/equipment/assets/components/drawer/drawer-events/CableSpoolingMaintenanceDrawerComponent';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst AssetHistoryDrawerContent = ({ classes, assetHistory }) => {\r\n const keyEvent = getEventKeyByValue(assetHistory.get('event'));\r\n let projectTitle = '-';\r\n const currentComment = assetHistory.getIn([keyEvent, 'comment']);\r\n const currentDescription = assetHistory.getIn([keyEvent, 'description']);\r\n const cableComments = assetHistory.getIn(\r\n [keyEvent, 'dataAcquisitionCableComments'],\r\n null,\r\n );\r\n\r\n if (assetHistory.get('facilityName') || assetHistory.get('wellboreName')) {\r\n projectTitle = `${assetHistory.get('facilityName')} - ${assetHistory.get(\r\n 'wellboreName',\r\n )}`;\r\n }\r\n\r\n const handleResultIcon = (testResult) => {\r\n return testResultIcons[testResult] || GreenIcon;\r\n };\r\n\r\n const getTooltipTitle = (testResult) => {\r\n return TEST_RESULT_TO_TOOLTIP_TITLE[testResult] || '-';\r\n };\r\n\r\n const renderedComponent = (() => {\r\n switch (assetHistory.get('event')) {\r\n case TOOL_ASSET_EVENTS_ENUM.BOP_TEST:\r\n return ;\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORSION_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_WRAP_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_TORTURE_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CONTINUITY_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_INSULATION_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.SIL2_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_WRAP_BRAIDED_MONO_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_BREAK_TEST:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CUT_MAINTENANCE:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SERVICE_MAINTENANCE:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SPOOLING_MAINTENANCE:\r\n return (\r\n \r\n );\r\n default:\r\n return <>;\r\n }\r\n })();\r\n\r\n const renderedAssetComponent = (() => {\r\n switch (assetHistory.get('event')) {\r\n case TOOL_ASSET_EVENTS_ENUM.MAINTENANCE:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_CUT_MAINTENANCE:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SERVICE_MAINTENANCE:\r\n return (\r\n \r\n );\r\n case TOOL_ASSET_EVENTS_ENUM.CABLE_SPOOLING_MAINTENANCE:\r\n return (\r\n \r\n );\r\n default:\r\n return (\r\n \r\n );\r\n }\r\n })();\r\n\r\n const renderedTaskComponent = (() => {\r\n return (\r\n \r\n );\r\n })();\r\n\r\n return (\r\n <>\r\n \r\n {renderedTaskComponent}\r\n \r\n \r\n {renderedAssetComponent}\r\n \r\n \r\n {renderedComponent}\r\n \r\n \r\n \r\n \r\n \r\n {!assetHistory.get('startDate')\r\n ? '-'\r\n : moment(assetHistory.get('startDate')).format(Format.date)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!assetHistory.get('startDate')\r\n ? '-'\r\n : extractTimeIn24HourFormatUTC(assetHistory.get('startDate'))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {currentComment || currentDescription ? (\r\n \r\n ) : (\r\n '-'\r\n )}\r\n \r\n \r\n \r\n {cableComments && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n activityField: {\r\n paddingTop: `${theme.spacing(3)}px`,\r\n },\r\n subActivityBox: {\r\n marginTop: `${theme.spacing(2)}px`,\r\n marginBottom: `${theme.spacing(2)}px`,\r\n border: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n subActivityField: {\r\n padding: `${theme.spacing(1)}px`,\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n\r\n bottomLabel: {\r\n marginBottom: '4vh',\r\n },\r\n iconStyle: {\r\n height: '2.2vh',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n objectFit: 'contain',\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AssetHistoryDrawerContent);\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Drawer } from '@material-ui/core';\r\nimport AssetHistoryDrawerHeader from 'features/equipment/assets/components/drawer/AssetHistoryDrawerHeader';\r\nimport AssetHistoryDrawerContent from 'features/equipment/assets/components/drawer/AssetHistoryDrawerContent';\r\nimport { toolAssetHistoryEventToString } from 'features/equipment/equipment.helpers';\r\n\r\nconst AssetHistoryDrawer = ({\r\n isOpen,\r\n classes,\r\n assetHistory,\r\n toggleDrawer,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n background: theme.palette.background.default,\r\n },\r\n drawerHeader: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1000,\r\n background: theme.palette.background.default,\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n drawerContent: {\r\n padding: theme.spacing(2),\r\n overflowY: 'scroll-y',\r\n margin: `0 ${theme.spacing(1)}px 0 ${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AssetHistoryDrawer);\r\n","import moment from 'moment';\r\nimport { List, fromJS } from 'immutable';\r\nimport { useMemo, useState } from 'react';\r\nimport { Grid, Link, Tooltip } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport {\r\n getEventKeyByValue,\r\n TEST_RESULT_TO_TOOLTIP_TITLE,\r\n TASK_STATUS_TO_TOOLTIP_TITLE,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport { Format } from 'app/app.constants';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { formatDate } from 'utils/format.util';\r\nimport { extractTimeIn24HourFormatUTC } from 'utils/app.util';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport TableHeaderCellDense from 'app/components/Table/TableHeaderCellDense';\r\nimport { toolAssetHistoryEventToString } from 'features/equipment/equipment.helpers';\r\nimport AssetHistoryDrawer from 'features/equipment/assets/components/drawer/AssetHistoryDrawer';\r\nimport { testResultIcons } from 'features/equipment/assets/components/AssetHistoryTableRowDetails';\r\n\r\nconst handleResultIcon = (testResult) => {\r\n return testResultIcons[testResult] || GreenIcon;\r\n};\r\n\r\nconst getTooltipTitle = (testResult) => {\r\n return TEST_RESULT_TO_TOOLTIP_TITLE[testResult] || '-';\r\n};\r\n\r\nconst getTaskStatusTitle = (testResult) => {\r\n return TASK_STATUS_TO_TOOLTIP_TITLE[testResult] || '-';\r\n};\r\n\r\nconst AssetHistoryTable = ({\r\n searchedAssets,\r\n classes,\r\n assets = EMPTY_MAP,\r\n displayComments,\r\n hiddenColumns = [],\r\n}) => {\r\n const [assetHistory, setAssetHistory] = useState(null);\r\n const [isOpen, toggle] = useToggle();\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expansionIcon',\r\n Header: ,\r\n Cell: () => ,\r\n },\r\n {\r\n id: 'date',\r\n xs: 2,\r\n accessor: (item) => {\r\n if (!item?.get('startDate')) return '-';\r\n const startDate = item.get('startDate');\r\n return `${formatDate(\r\n moment(startDate),\r\n Format.date,\r\n )} ${extractTimeIn24HourFormatUTC(item.get('startDate'))}`;\r\n },\r\n Header: 'Date',\r\n },\r\n {\r\n id: 'event',\r\n xs: 2,\r\n accessor: (item) => toolAssetHistoryEventToString(item.get('event')),\r\n Header: 'Event',\r\n },\r\n {\r\n id: 'project',\r\n xs: 3,\r\n accessor: (item) =>\r\n `${item.get('facilityName')} ${item.get('wellboreName')}`,\r\n Header: 'Project',\r\n Cell: ({ row }) => {\r\n const item = row.original;\r\n let title = '-';\r\n\r\n if (item.get('facilityName') || item.get('wellboreName')) {\r\n title = `${item.get('facilityName')} - ${item.get('wellboreName')}`;\r\n }\r\n\r\n return !item.get('projectId') ? (\r\n <>-\r\n ) : (\r\n \r\n \r\n {title}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'Result',\r\n xs: 3,\r\n Header: 'Result',\r\n accessor: (item) => {\r\n return item?.get(getEventKeyByValue(item.get('event')))?.get('result')\r\n ? item?.get(getEventKeyByValue(item.get('event')))?.get('result')\r\n : item?.get('task')?.get('status');\r\n },\r\n Cell: ({ row }) => {\r\n const currentEvent = row.original.get(\r\n getEventKeyByValue(row.original.get('event')),\r\n );\r\n const currentTask = row.original?.get('task');\r\n\r\n // for event show result and for task status\r\n return (\r\n <>\r\n \r\n {currentEvent.get('result') ? (\r\n \r\n <>\r\n {currentEvent.get('result') ? (\r\n \r\n ) : null}\r\n {getTooltipTitle(currentEvent.get('result'))}\r\n \r\n \r\n ) : currentTask !== null ? (\r\n \r\n <>\r\n {currentTask.get('status') ? (\r\n \r\n \r\n \r\n \r\n \r\n {getTaskStatusTitle(currentTask.get('status'))}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'task',\r\n xs: 2,\r\n accessor: (item) => {\r\n return item?.get('task')?.get('title');\r\n },\r\n Header: 'Task',\r\n Cell: ({ row }) => {\r\n const currentTask = row.original?.get('task');\r\n\r\n return (\r\n <>\r\n {currentTask === null ? null : (\r\n \r\n \r\n {currentTask.get('runNumber') ? (\r\n currentTask.get('runNumber')\r\n ) : (\r\n <>\r\n )}\r\n <> - \r\n {currentTask.get('title') ? (\r\n currentTask.get('title')\r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n },\r\n ],\r\n [classes],\r\n );\r\n var assetsList = searchedAssets\r\n ? List(fromJS(searchedAssets))\r\n : fromJS(assets);\r\n\r\n const visibleColumns = columns.filter(\r\n (column) => !hiddenColumns.includes(column.id),\r\n );\r\n\r\n return (\r\n <>\r\n asset.get('startDate')).reverse()}\r\n columns={visibleColumns}\r\n useGlobalFilter={false}\r\n onItemSorted={() => null}\r\n onRowClick={(asset) => {\r\n setAssetHistory(asset);\r\n toggle();\r\n }}\r\n TableHeaderCellComponent={TableHeaderCellDense}\r\n />\r\n {assetHistory && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n taskTitleLink: {\r\n display: 'inline',\r\n },\r\n iconStyle: {\r\n height: '2.2vh',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n objectFit: 'contain',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AssetHistoryTable);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { PROJECT_ASSET_TEST_ACTIONS } from 'features/projects/assets/assetTest.constants';\r\n\r\nimport {\r\n onAssetTestLoad,\r\n onAssetTestUnload,\r\n} from 'features/projects/assets/assetTest.actions';\r\nimport { getAssetTestFromState } from 'features/projects/assets/assetTest.selectors';\r\n\r\nimport AssetHistoryTable from 'features/equipment/assets/components/AssetHistoryTable';\r\n\r\nconst AssetTestContainer = ({\r\n assetTests = EMPTY_LIST,\r\n classes,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n}) => {\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, projectId]);\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n assetTests: getAssetTestFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n PROJECT_ASSET_TEST_ACTIONS.PROJECT_ASSET_TEST_PAGE_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onAssetTestLoad,\r\n dispatchOnUnload: onAssetTestUnload,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n position: 'absolute',\r\n right: theme.spacing(4),\r\n bottom: theme.spacing(4),\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(AssetTestContainer);\r\n","import { React, useState } from 'react';\r\nimport { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { Grid, Tabs, Tab, withStyles, Divider, Box } from '@material-ui/core';\r\n\r\nimport { PROJECT_LESSON_REPORT_ACTIVE_TAB } from 'features/equipment/equipment.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport ReportContainer from 'features/projects/report/ReportContainer';\r\nimport NPTReportContainer from 'features/projects/npt/NPTReportContainer';\r\nimport LessonsContainer from 'features/projects/lessons/LessonsContainer';\r\nimport IncidentsContainer from 'features/projects/incidents/IncidentsContainer';\r\nimport AssetTestContainer from 'features/projects/assets/AssetTestContainer';\r\n\r\nconst ProjectReportLessonContainer = ({\r\n classes,\r\n lessons,\r\n incidents,\r\n project,\r\n dataState,\r\n projectId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchSelectLesson,\r\n dispatchDeleteLesson,\r\n dispatchSelectIncident,\r\n dispatchDeleteIncident,\r\n tasks,\r\n totalElapsedDuration,\r\n totalPlannedDuration,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(\r\n PROJECT_LESSON_REPORT_ACTIVE_TAB.PROJECT_REPORT,\r\n );\r\n\r\n const activeTabHandler = (activeTab) => {\r\n switch (activeTab) {\r\n default:\r\n return null;\r\n case PROJECT_LESSON_REPORT_ACTIVE_TAB.PROJECT_REPORT:\r\n return (\r\n \r\n );\r\n\r\n case PROJECT_LESSON_REPORT_ACTIVE_TAB.PROJECT_LESSONS:\r\n return (\r\n \r\n );\r\n case PROJECT_LESSON_REPORT_ACTIVE_TAB.PROJECT_INCIDENTS:\r\n return (\r\n \r\n );\r\n case PROJECT_LESSON_REPORT_ACTIVE_TAB.PROJECT_NON_PRODUCTIVE_TIME:\r\n return (\r\n \r\n );\r\n case PROJECT_LESSON_REPORT_ACTIVE_TAB.PROJECT_ASSET_TESTS:\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTabHandler(activeTab)}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n contentContainer: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n box: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n tabsContainer: {\r\n paddingLeft: '12%',\r\n borderRadius: 3,\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n\r\n\r\n tabPanel: {\r\n flex: 1,\r\n padding: theme.spacing(1),\r\n backgroundColor: 'transparent',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getSummarizedDataStateFromState(state),\r\n })),\r\n withStyles(styles),\r\n)(ProjectReportLessonContainer);\r\n","import { useMemo } from 'react';\r\nimport { fromJS } from 'immutable';\r\nimport { useCallback } from 'react';\r\nimport DeleteIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton } from '@material-ui/core';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nimport { cableTypeToString } from 'features/projects/tool/tool.mappers';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst AddedCablesTable = ({\r\n classes,\r\n onRemoveCable,\r\n selectedCables,\r\n onDuplicateItem,\r\n execute = false,\r\n setSelectedCables,\r\n initialState = defaultInitialState,\r\n ...rest\r\n}) => {\r\n const removeCable = useCallback(\r\n (externalGuid) => {\r\n const index = selectedCables.indexOf(\r\n selectedCables.find((cable) => cable.externalGuid === externalGuid),\r\n );\r\n const newNumbers = [\r\n ...selectedCables.slice(0, index),\r\n ...selectedCables.slice(index + 1),\r\n ];\r\n setSelectedCables(newNumbers);\r\n },\r\n [selectedCables, setSelectedCables],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Item no.',\r\n accessor: (cable) =>\r\n cable.get('partNo')\r\n ? cable.get('partNo')\r\n : cable.get('manufacturerPartNo'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Cable',\r\n accessor: (cable) => cable.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Type',\r\n accessor: (cable) => cableTypeToString(cable.get('type')),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Nominal Dia.',\r\n accessor: (cable) =>\r\n `${cable?.getIn(\r\n ['nominalDiameter', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['nominalDiameter', 'unit'])}`,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Weight in Air',\r\n accessor: (cable) => {\r\n const weightKey = cable.get('weight') ? 'weight' : 'weightInAir';\r\n const roundedValue = cable?.getIn([weightKey, 'roundedValue'], null);\r\n const unit = cable?.getIn([weightKey, 'unit']);\r\n return `${roundedValue} ${unit}`;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Stretch',\r\n accessor: (cable) => {\r\n const weightKey = cable.get('stretchCoefficient')\r\n ? 'stretchCoefficient'\r\n : 'stretch';\r\n const roundedValue = cable?.getIn([weightKey, 'roundedValue'], null);\r\n const unit = cable?.getIn([weightKey, 'unit']);\r\n return `${roundedValue} ${unit}`;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Breaking Strength',\r\n accessor: (cable) =>\r\n `${cable?.getIn(['strength', 'roundedValue'], null)} ${cable?.getIn([\r\n 'strength',\r\n 'unit',\r\n ])}`,\r\n },\r\n {\r\n xs: 2,\r\n id: 'action',\r\n Cell: ({ row }) => {\r\n const cable = row.original;\r\n\r\n if (execute === true) return null;\r\n return (\r\n \r\n onDuplicateItem(cable.toJS())}\r\n >\r\n \r\n \r\n {\r\n onRemoveCable(cable);\r\n removeCable(cable.get('externalGuid'));\r\n }}\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [removeCable, onDuplicateItem, onRemoveCable, execute],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AddedCablesTable;\r\n","import { useMemo } from 'react';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { Button, Grid } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\nimport { cableTypeToString } from 'features/projects/tool/tool.mappers';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst AddCablesModalTable = ({\r\n cables,\r\n classes,\r\n onAddCable,\r\n onRemoveCable,\r\n selectedCables,\r\n setSelectedCables,\r\n initialState = defaultInitialState,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Item no.',\r\n accessor: (cable) => cable.get('partNo'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Cable',\r\n accessor: (cable) => cable.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Type',\r\n accessor: (cable) => cableTypeToString(cable.get('type')),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Nominal Dia.',\r\n accessor: (cable) =>\r\n `${cable?.getIn(\r\n ['nominalDiameter', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['nominalDiameter', 'unit'])}`,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Weight in Air',\r\n accessor: (cable) =>\r\n `${cable?.getIn(\r\n ['weightInAir', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['weightInAir', 'unit'])}`,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Stretch',\r\n accessor: (cable) =>\r\n `${cable?.getIn(['stretch', 'roundedValue'], null)} ${cable?.getIn([\r\n 'stretch',\r\n 'unit',\r\n ])}`,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Breaking Strength',\r\n accessor: (cable) =>\r\n `${cable?.getIn(['strength', 'roundedValue'], null)} ${cable?.getIn([\r\n 'strength',\r\n 'unit',\r\n ])}`,\r\n },\r\n {\r\n xs: 2,\r\n id: 'action',\r\n Cell: ({ row }) => {\r\n const cable = row.original;\r\n return (\r\n \r\n onAddCable(cable)}\r\n >\r\n \r\n Add\r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [classes, onAddCable],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AddCablesModalTable;\r\n","import {\r\n Grid,\r\n Button,\r\n Dialog,\r\n Typography,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport AddCablesModalTable from 'features/projects/tasks/task/surfaceEquipment/components/cables/AddCablesModalTable';\r\nimport CablesFilter from 'features/equipment/cables/components/CablesFilter';\r\n\r\nconst AddCablesModal = ({\r\n isOpen,\r\n classes,\r\n onSubmit,\r\n onAddCable,\r\n toggleModal,\r\n onRemoveCable,\r\n initialValues,\r\n selectedCables,\r\n setSelectedCables,\r\n cables = EMPTY_MAP,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Add cable\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AddCablesModal;\r\n","import { compose } from 'redux';\r\nimport { useEffect, useCallback } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\n\r\nimport {\r\n getCablesByProject,\r\n onUnload,\r\n searchCables,\r\n} from 'features/equipment/equipment.actions';\r\nimport { getCablesFromState } from 'features/equipment/equipment.selectors';\r\nimport AddCablesModal from 'features/projects/tasks/task/surfaceEquipment/components/cables/AddCablesModal';\r\nimport { Filters } from 'features/equipment/cables/components/CablesFilter';\r\n\r\nconst defaultFormValues = {\r\n [Filters.TEXT_SEARCH]: EMPTY_STRING,\r\n [Filters.SERIAL_SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst AddCablesModalContainer = ({\r\n isOpen,\r\n classes,\r\n dataState,\r\n onAddCable,\r\n toggleModal,\r\n onRemoveCable,\r\n selectedCables,\r\n dispatchOnUnload,\r\n dispatchOnSearch,\r\n setSelectedCables,\r\n projectId,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const dispatchOnLoad = useCallback(() => {\r\n dispatch(getCablesByProject(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad();\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const handleSearch = useCallback(\r\n (filterValues) => {\r\n dispatchOnSearch({\r\n [Filters.TEXT_SEARCH]: filterValues[Filters.TEXT_SEARCH],\r\n [Filters.SERIAL_SEARCH]: filterValues[Filters.SERIAL_SEARCH],\r\n getByStatus: true, // filter by un/servicable\r\n });\r\n },\r\n [dispatchOnSearch],\r\n );\r\n\r\n const cables = useSelector(getCablesFromState);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(() => ({}), {\r\n dispatchOnUnload: onUnload,\r\n dispatchOnSearch: searchCables,\r\n }),\r\n)(AddCablesModalContainer);\r\n","import { fromJS } from 'immutable';\r\nimport { useMemo, useCallback } from 'react';\r\nimport DeleteIcon from '@material-ui/icons/Close';\r\nimport { IconButton, Grid } from '@material-ui/core';\r\nimport DuplicateIcon from '@material-ui/icons/FileCopy';\r\n\r\nimport { Table } from 'altus-ui-components';\r\n\r\nconst defaultInitialState = {\r\n pageSize: 50,\r\n};\r\n\r\nconst AddedSurfaceEquipmentInPlanningTable = ({\r\n tools,\r\n classes,\r\n execute = false,\r\n onRemoveSurface,\r\n onDuplicateToolItem,\r\n selectedSurfaceEquipment,\r\n setSelectedSurfaceEquipment,\r\n initialState = defaultInitialState,\r\n ...rest\r\n}) => {\r\n const sortTools = useCallback(\r\n () =>\r\n fromJS(selectedSurfaceEquipment).sortBy((tool) =>\r\n tool.get('m3ItemNumber'),\r\n ),\r\n [selectedSurfaceEquipment],\r\n );\r\n\r\n const removeTool = useCallback(\r\n (id) => {\r\n const index = selectedSurfaceEquipment.indexOf(\r\n selectedSurfaceEquipment.find((tool) => tool.externalId === id),\r\n );\r\n const newNumbers = [\r\n ...selectedSurfaceEquipment.slice(0, index),\r\n ...selectedSurfaceEquipment.slice(index + 1),\r\n ];\r\n setSelectedSurfaceEquipment(newNumbers);\r\n },\r\n [selectedSurfaceEquipment, setSelectedSurfaceEquipment],\r\n );\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Item no.',\r\n accessor: (tool) => tool.get('m3ItemNumber'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Name',\r\n accessor: (tool) => tool.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Surface Eq. Group',\r\n accessor: (tool) => tool.getIn(['equipmentGroup', 'name']),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Weight (kg)',\r\n accessor: (tool) =>\r\n tool.get('weight') && tool.get('weight') !== 0\r\n ? tool.get('weight').toFixed(2)\r\n : tool.get('weight_kg') && tool.get('weight_kg') !== 0\r\n ? tool.get('weight_kg').toFixed(2)\r\n : '0.00',\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Height (mm)',\r\n accessor: (tool) =>\r\n tool.get('height') && tool.get('height') !== 0\r\n ? tool.get('height').toFixed(2)\r\n : tool.get('height_mm') && tool.get('height_mm') !== 0\r\n ? tool.get('height_mm').toFixed(2)\r\n : '0.00',\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Length (mm)',\r\n accessor: (tool) =>\r\n tool.get('length') && tool.get('length') !== 0\r\n ? tool.get('length').toFixed(2)\r\n : tool.get('length_mm') && tool.get('length_mm') !== 0\r\n ? tool.get('length_mm').toFixed(2)\r\n : '0.00',\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Width (mm)',\r\n accessor: (tool) =>\r\n tool.get('width') && tool.get('width') !== 0\r\n ? tool.get('width').toFixed(2)\r\n : tool.get('width_mm') && tool.get('width_mm') !== 0\r\n ? tool.get('width_mm').toFixed(2)\r\n : '0.00',\r\n },\r\n {\r\n xs: 2,\r\n id: 'action',\r\n Cell: ({ row }) => {\r\n const tool = row.original;\r\n\r\n if (execute === true) return null;\r\n return (\r\n \r\n onDuplicateToolItem(tool.toJS())}\r\n >\r\n \r\n \r\n {\r\n onRemoveSurface(tool);\r\n removeTool(tool.get('externalId'));\r\n }}\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [removeTool, onDuplicateToolItem, onRemoveSurface, execute],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AddedSurfaceEquipmentInPlanningTable;\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { useState, useCallback } from 'react';\r\nimport { arrayMoveImmutable } from 'array-move';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, Button } from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport {\r\n saveCableToTask,\r\n deleteCableFromTask,\r\n onLoadTaskSurfaceEquipment,\r\n saveSurfaceToTask,\r\n saveSurfaceTemplateToTask,\r\n deleteSurfaceEquipmentFromTask,\r\n} from 'features/projects/tasks/tasks.actions';\r\n\r\nimport {\r\n getTaskFromState,\r\n getTaskCablesFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { TASK_MODALS } from 'features/projects/tasks/task/task.constants';\r\nimport { EQUIPMENT_ACTIONS } from 'features/equipment/equipment.constants';\r\nimport { TASK_SURFACE_EQUIPMENT_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport { getTaskSurfaceEquipmentFromState } from 'features/projects/tasks/tasks.selectors';\r\nimport AddedCablesTable from 'features/projects/tasks/task/surfaceEquipment/components/cables/AddedCablesTable';\r\nimport AddCablesModalContainer from 'features/projects/tasks/task/surfaceEquipment/components/cables/AddCablesModalContainer';\r\nimport AddedSurfaceEquipmentInPlanningTable from 'features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddedSurfaceEquipmentInPlanningTable';\r\nimport AddSurfaceEquipmentInPlanningModalContainer from 'features/projects/tasks/task/surfaceEquipment/components/surfaceEquipment/AddSurfaceEquipmentInPlanningModalContainer';\r\n\r\nconst TaskSurfaceEquipmentContainer = ({\r\n cables,\r\n taskId,\r\n classes,\r\n projectId,\r\n dataState,\r\n dispatchOnLoad,\r\n surfaceEquipmentFromState,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [selectedCables, setSelectedCables] = useState([]);\r\n const [selectedSurfaceEquipment, setSelectedSurfaceEquipment] = useState([]);\r\n\r\n const [isOpenAddCable, toggleModalAddCable] = useModal(\r\n TASK_MODALS.ADD_CABLE_MODAL,\r\n );\r\n\r\n const [isOpenAddSurfaceEquipment, toggleModalAddSurfaceEquipment] = useModal(\r\n TASK_MODALS.SURFACE_EQUIPMENT_MODAL,\r\n );\r\n\r\n useEffect(() => {\r\n if (cables.size) setSelectedCables(cables.toJS());\r\n }, [cables]);\r\n\r\n useEffect(() => {\r\n if (!isNaN(surfaceEquipmentFromState?.size))\r\n setSelectedSurfaceEquipment(surfaceEquipmentFromState.toJS());\r\n }, [surfaceEquipmentFromState]);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId, taskId);\r\n }, [taskId, dispatchOnLoad, projectId]);\r\n\r\n const onSaveCable = useCallback(\r\n (cable) => {\r\n setSelectedCables((prev) => [...prev, cable.toJS()]);\r\n const taskCable = {\r\n taskId,\r\n cableId: cable.get('externalGuid'),\r\n };\r\n dispatch(saveCableToTask(taskCable, projectId, taskId));\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n const onSaveSurfaceEquipment = useCallback(\r\n (tool) => {\r\n setSelectedSurfaceEquipment((prev) => [...prev, tool.toJS()]);\r\n const taskSurfaceTool = {\r\n taskId,\r\n surfaceId: tool.get('externalId'),\r\n };\r\n dispatch(saveSurfaceToTask(taskSurfaceTool, projectId, taskId));\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n const onSaveSurfaceEquipmentTemplate = useCallback(\r\n (template) => {\r\n const taskSurfaceTool = {\r\n taskId,\r\n templateId: template.get('id'),\r\n };\r\n dispatch(saveSurfaceTemplateToTask(taskSurfaceTool, projectId, taskId));\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n const onRemoveCable = useCallback(\r\n (cable) => {\r\n const taskCable = {\r\n TaskCableId: null,\r\n TaskId: taskId,\r\n CableId: cable.get('externalGuid'),\r\n };\r\n dispatch(deleteCableFromTask(taskCable, projectId, taskId));\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n const onRemoveSurface = useCallback(\r\n (tool) => {\r\n const surfaceEquipment = {\r\n taskId: taskId,\r\n surfaceId: tool.get('externalId'),\r\n };\r\n dispatch(\r\n deleteSurfaceEquipmentFromTask(surfaceEquipment, projectId, taskId),\r\n );\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n const onDuplicateItem = useCallback(\r\n (cable) => {\r\n const cables = [...selectedCables];\r\n const cableIndex = cables.indexOf(\r\n cables.find((cableX) => cableX.externalGuid === cable.externalGuid),\r\n );\r\n cables.push(cable);\r\n const lastCableIndex = cables.lastIndexOf(cable);\r\n const newCables = arrayMoveImmutable(\r\n cables,\r\n lastCableIndex,\r\n cableIndex + 1,\r\n );\r\n setSelectedCables(newCables);\r\n const taskCable = {\r\n taskId,\r\n cableId: cable.externalGuid,\r\n };\r\n dispatch(saveCableToTask(taskCable, projectId, taskId));\r\n },\r\n [selectedCables, dispatch, projectId, taskId],\r\n );\r\n\r\n const onDuplicateToolItem = useCallback(\r\n (cable) => {\r\n const tools = [...selectedSurfaceEquipment];\r\n const cableIndex = tools.indexOf(\r\n tools.find((cableX) => cableX.id === cable.id),\r\n );\r\n tools.push(cable);\r\n const lastCableIndex = tools.lastIndexOf(cable);\r\n const newCables = arrayMoveImmutable(\r\n tools,\r\n lastCableIndex,\r\n cableIndex + 1,\r\n );\r\n setSelectedSurfaceEquipment(newCables);\r\n const taskSurfaceTool = {\r\n taskId,\r\n surfaceId: cable.externalId,\r\n };\r\n dispatch(saveSurfaceToTask(taskSurfaceTool, projectId, taskId));\r\n },\r\n [selectedSurfaceEquipment, dispatch, projectId, taskId],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Cables\r\n \r\n \r\n Add cable\r\n \r\n \r\n {selectedCables.length === 0 ? (\r\n \r\n \r\n No cables added.\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n Surface Equipment\r\n \r\n \r\n Add surface equipment\r\n \r\n \r\n {selectedSurfaceEquipment.length === 0 ? (\r\n \r\n \r\n No surface equipment added.\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n emptyEquipment: {\r\n border: `thin solid ${theme.palette.grey[700]}`,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '15vh',\r\n },\r\n equipmentContainer: {\r\n gap: theme.spacing(2.25),\r\n },\r\n actions: {\r\n display: 'flex',\r\n width: '100%',\r\n direction: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n task: getTaskFromState(state),\r\n cables: getTaskCablesFromState(state),\r\n surfaceEquipmentFromState: getTaskSurfaceEquipmentFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.SEARCH_CABLES,\r\n EQUIPMENT_ACTIONS.SEARCH_EQUIPMENT,\r\n EQUIPMENT_ACTIONS.CABLES_LOADED_BY_PROJECTID,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.SAVE_CABLE,\r\n EQUIPMENT_ACTIONS.SURFACE_EQUIPMENT_LOADED,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.PAGE_LOADED,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.DELETE_CABLE,\r\n TASK_SURFACE_EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n EQUIPMENT_ACTIONS.RECEIVE_SURFACE_EQUIPMENT_GROUPS,\r\n EQUIPMENT_ACTIONS.CABLES_LOADED,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadTaskSurfaceEquipment,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(TaskSurfaceEquipmentContainer);\r\n","import { useState, useEffect } from 'react';\r\nimport { DataSource } from '@int/geotoolkit/data/DataSource';\r\nimport { DataTable } from '@int/geotoolkit/data/DataTable';\r\nimport { LogCurveDataSource } from '@int/geotoolkit/welllog/data/LogCurveDataSource';\r\nimport jsonData from './test.json';\r\nimport { LogCurve } from '@int/geotoolkit/welllog/LogCurve';\r\n\r\nclass BindingFunction {\r\n constructor(dataTable) {\r\n this.dataTable = dataTable;\r\n }\r\n\r\n accept(node) {\r\n return node instanceof LogCurve;\r\n }\r\n\r\n bind(node, data) {\r\n if (!(data instanceof DataSource)) {\r\n return;\r\n }\r\n if (node instanceof LogCurve) {\r\n const curve = node;\r\n const id = curve.getName();\r\n const source = data.getCurveSource(id);\r\n if (source != null) {\r\n // console.log(`Binding curve '${id}' with data source`);\r\n curve.setData(source, true, true);\r\n } else {\r\n console.error(`No data source found for curve: ${id}`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nasync function createSimpleDataSource() {\r\n console.log('Creating Simple DataSource...');\r\n\r\n let maxLength = 0;\r\n Object.values(jsonData).forEach((dataArray) => {\r\n if (Array.isArray(dataArray) && dataArray.length > maxLength) {\r\n maxLength = dataArray.length;\r\n }\r\n });\r\n\r\n const depthIncrement = 0.008333333;\r\n const depths = Array.from(\r\n { length: maxLength },\r\n (_, index) => index * depthIncrement,\r\n );\r\n\r\n const columns = [{ name: 'depth', type: 'number' }];\r\n const columnsData = [depths];\r\n\r\n Object.keys(jsonData).forEach((key) => {\r\n columns.push({ name: key, type: 'number' });\r\n const curveData = jsonData[key];\r\n const paddedData = Array.from(\r\n { length: maxLength },\r\n (_, i) => curveData[i] ?? null,\r\n );\r\n columnsData.push(paddedData);\r\n });\r\n\r\n const dataTable = new DataTable({\r\n cols: columns,\r\n colsdata: columnsData,\r\n });\r\n\r\n const dataSource = new DataSource();\r\n dataSource.curveNames = Object.keys(jsonData).filter(\r\n (key) => key !== 'depth',\r\n ); // Expose curve names\r\n\r\n console.log('Data source created with curve names:', dataSource.curveNames);\r\n\r\n dataSource.getCurveSource = function (id) {\r\n const depths = dataTable.getColumnByName('depth');\r\n const values = dataTable.getColumnByName(id);\r\n\r\n if (!depths || !values) {\r\n console.error(`Failed to get data for curve ${id}`);\r\n return null;\r\n }\r\n\r\n return new LogCurveDataSource({\r\n datatable: dataTable,\r\n depths,\r\n values,\r\n name: id,\r\n });\r\n };\r\n\r\n // Define the connect method\r\n dataSource.connect = function (widget) {\r\n const binding = new BindingFunction(dataTable);\r\n const bindingRegistry = widget.getDataBinding();\r\n bindingRegistry.add(binding);\r\n\r\n widget.setData(dataSource);\r\n\r\n const depthColumn = dataTable.getColumnByName('depth');\r\n const rowCount = depthColumn.getLength();\r\n const minDepth = depthColumn.getValue(0);\r\n const maxDepth = depthColumn.getValue(rowCount - 1);\r\n widget.setDepthLimits(minDepth, maxDepth);\r\n };\r\n\r\n return dataSource;\r\n}\r\n\r\nexport function useSimpleDataSource() {\r\n const [dataSource, setDataSource] = useState(null);\r\n\r\n useEffect(\r\n () => {\r\n if (!dataSource) {\r\n // Only initialize if dataSource is null\r\n const loadDataSource = async () => {\r\n const ds = await createSimpleDataSource();\r\n setDataSource(ds);\r\n };\r\n\r\n loadDataSource();\r\n }\r\n\r\n return () => {\r\n if (dataSource) {\r\n dataSource.dispose();\r\n }\r\n };\r\n },\r\n //eslint-disable-next-line\r\n [],\r\n ); // Remove dataSource from the dependency array\r\n\r\n return dataSource;\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { Plot } from '@int/geotoolkit/plot/Plot';\r\nimport { WellLogWidget } from '@int/geotoolkit/welllog/widgets/WellLogWidget';\r\nimport { TrackType } from '@int/geotoolkit/welllog/TrackType';\r\nimport { LogCurve } from '@int/geotoolkit/welllog/LogCurve';\r\nimport { LogData } from '@int/geotoolkit/welllog/data/LogData';\r\nimport { WellBoreNode } from '@int/geotoolkit/schematics/scene/WellBoreNode';\r\nimport { WellBoreData } from '@int/geotoolkit/schematics/data/WellBoreData';\r\nimport { Rect } from '@int/geotoolkit/util/Rect';\r\nimport { CssLayout } from '@int/geotoolkit/layout/CssLayout';\r\nimport { ToolTipRegistry } from '@int/geotoolkit/controls/tooltip/ToolTipRegistry';\r\nimport { Group } from '@int/geotoolkit/scene/Group';\r\nimport schematicData from './helpers/schematic.json';\r\nimport { useSimpleDataSource } from './helpers/SimpleDataSource.js';\r\nimport { ComponentNode } from '@int/geotoolkit/schematics/scene/ComponentNode';\r\n// import { NodeTooltip } from '@int/geotoolkit/controls/tooltip/NodeTooltip';\r\n// import { SchematicsComponentToolTip } from './helpers/SchematicsTooltip';\r\n// import { Selector } from '@int/geotoolkit/selection/Selector';\r\nimport { LogCurveTooltip } from '@int/geotoolkit/welllog/tooltip/LogCurveTooltip';\r\nimport { ComponentNodeTooltip } from '@int/geotoolkit/schematics/tooltip/ComponentNodeTooltip';\r\nimport { ComponentNodeFactoryRegistry } from '@int/geotoolkit/schematics/factory/ComponentNodeFactoryRegistry';\r\n// import { SVGComponentsLoader } from '@int/geotoolkit/schematics/factory/SVGComponentsLoader';\r\n\r\nimport { Text } from '@int/geotoolkit/scene/shapes/Text';\r\nimport { Arrow } from '@int/geotoolkit/scene/shapes/Arrow';\r\nimport { Point } from '@int/geotoolkit/util/Point';\r\nimport { KnownColors } from '@int/geotoolkit/util/ColorUtil';\r\n\r\nconst SCALE_FACTOR = 1.2;\r\n\r\nconst BigData = () => {\r\n const plotRef = useRef(null);\r\n const dataSource = useSimpleDataSource();\r\n const wellLogWidgetRef = useRef(null);\r\n const canvasRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (!dataSource) {\r\n console.log('Data source is not loaded yet.');\r\n return;\r\n }\r\n\r\n const registry = new ComponentNodeFactoryRegistry(true);\r\n\r\n const wellLogWidget = new WellLogWidget({\r\n indextype: 'number',\r\n indexunit: 'ft',\r\n header: { visible: false },\r\n footer: { visible: false },\r\n });\r\n\r\n wellLogWidget.addTrack(TrackType.IndexTrack).setWidth(50);\r\n\r\n // Add curve data with tooltips to the well log widget\r\n // Original log track with curves\r\n const logTrack1 = wellLogWidget\r\n .addTrack(TrackType.LinearTrack)\r\n .setWidth(200);\r\n dataSource.curveNames.forEach((curveName, index) => {\r\n const color = index % 2 === 0 ? 'green' : 'red';\r\n const curve = new LogCurve(new LogData(curveName))\r\n .setLineStyle(color)\r\n .setName(curveName);\r\n logTrack1.addChild(curve);\r\n });\r\n\r\n for (let i = 0; i < 2; i++) {\r\n const duplicateTrack = wellLogWidget\r\n .addTrack(TrackType.LinearTrack)\r\n .setWidth(200);\r\n dataSource.curveNames.forEach((curveName, index) => {\r\n const color = index % 2 === 0 ? 'green' : 'red';\r\n const duplicateCurve = new LogCurve(new LogData(curveName))\r\n .setLineStyle(color)\r\n .setName(curveName);\r\n duplicateTrack.addChild(duplicateCurve);\r\n });\r\n }\r\n\r\n dataSource.connect(wellLogWidget);\r\n wellLogWidget.setDepthScale(10);\r\n wellLogWidget.fitToHeight();\r\n\r\n // Set up WellBoreData and WellBoreNode for the schematic widget\r\n const wellBoreData = new WellBoreData(schematicData);\r\n\r\n const wellBoreNode = new WellBoreNode({\r\n data: wellBoreData,\r\n registry: registry,\r\n });\r\n\r\n const minDepth = Math.min(\r\n ...schematicData.map((item) => item.data.geometry.depth.from),\r\n );\r\n const maxDepth = Math.max(\r\n ...schematicData.map((item) => item.data.geometry.depth.to),\r\n );\r\n\r\n wellBoreNode.setBounds(new Rect(0, minDepth, 0.65, maxDepth - minDepth));\r\n\r\n // Calculate the maximum outer diameter\r\n const maxOuterDiameter = Math.max(\r\n ...schematicData.map(\r\n (component) => component.data.geometry.diameter.outer,\r\n ),\r\n );\r\n\r\n // Create labelsGroup and add labels and arrows based on schematicData\r\n const labelsGroup = new Group();\r\n\r\n // Estimate label height based on font size\r\n const fontSize = 12; // Font size in pixels\r\n const labelHeight = fontSize * 0.9; // Approximate label height with line spacing\r\n const minLabelSpacing = labelHeight; // Minimum spacing between labels\r\n\r\n // Collect label data\r\n const labelData = schematicData.map((component) => {\r\n // eslint-disable-next-line\r\n const { name, data } = component;\r\n const description = data.description;\r\n const geometry = data.geometry;\r\n const depthFrom = geometry.depth.from;\r\n const depthTo = geometry.depth.to;\r\n const midDepth = (depthFrom + depthTo) / 2;\r\n\r\n // Create the label\r\n const label = new Text({\r\n text: description,\r\n align: 'left',\r\n valign: 'middle',\r\n font: `${fontSize}px Arial`,\r\n });\r\n\r\n return {\r\n label,\r\n midDepth,\r\n component,\r\n depthFrom,\r\n depthTo,\r\n };\r\n });\r\n\r\n // Sort labels by midDepth\r\n labelData.sort((a, b) => a.midDepth - b.midDepth);\r\n\r\n let lastLabelY = null;\r\n\r\n // eslint-disable-next-line\r\n labelData.forEach((labelInfo, index) => {\r\n let { label, midDepth } = labelInfo;\r\n\r\n // Adjust label position to prevent overlap\r\n if (lastLabelY !== null && midDepth - lastLabelY < minLabelSpacing) {\r\n midDepth = lastLabelY + minLabelSpacing;\r\n labelInfo.midDepth = midDepth; // Update midDepth in labelInfo\r\n }\r\n\r\n lastLabelY = midDepth;\r\n\r\n // Ensure label stays within depth bounds\r\n if (midDepth - labelHeight / 2 < minDepth) {\r\n midDepth = minDepth + labelHeight / 2;\r\n labelInfo.midDepth = midDepth;\r\n }\r\n // if (midDepth + labelHeight / 2 > maxDepth) {\r\n // midDepth = maxDepth - labelHeight / 2;\r\n // labelInfo.midDepth = midDepth;\r\n // }\r\n\r\n // Set the adjusted position to the label\r\n const xLabel = 0.8;\r\n label.setAnchorX(xLabel);\r\n label.setAnchorY(midDepth);\r\n\r\n // Add the label to labelsGroup\r\n labelsGroup.addChild(label);\r\n\r\n // Compute xComponent based on the component's outer diameter\r\n const componentOuterDiameter =\r\n labelInfo.component.data.geometry.diameter.outer;\r\n const componentHalfWidth =\r\n (componentOuterDiameter / maxOuterDiameter) * 0.325;\r\n const xCenter = 0.325;\r\n const xComponent = xCenter + componentHalfWidth;\r\n\r\n // Create an arrow from the label to the component\r\n const arrow = new Arrow({\r\n from: new Point(xLabel - 0.15, midDepth),\r\n to: new Point(\r\n xComponent,\r\n (labelInfo.depthFrom + labelInfo.depthTo) / 2,\r\n ),\r\n symbolstart: null,\r\n symbolend: null,\r\n linestyle: {\r\n color: KnownColors.Black,\r\n width: 1,\r\n },\r\n });\r\n\r\n labelsGroup.addChild(arrow);\r\n });\r\n\r\n const schematicTrack = wellLogWidget\r\n .addTrack(TrackType.LinearTrack)\r\n .setWidth(350);\r\n\r\n schematicTrack.addChild(wellBoreNode);\r\n schematicTrack.addChild(labelsGroup);\r\n\r\n wellLogWidget.addTrack(TrackType.IndexTrack).setWidth(50);\r\n\r\n // Initialize ToolTipRegistry\r\n const toolTipRegistry = new ToolTipRegistry();\r\n\r\n // Register tooltip for LogCurve\r\n toolTipRegistry.register(\r\n LogCurve.getClassName(),\r\n // eslint-disable-next-line no-template-curly-in-string\r\n new LogCurveTooltip('${name} - Depth: ${depth}'),\r\n );\r\n\r\n // Register tooltip for ComponentNode (schematic components)\r\n toolTipRegistry.register(\r\n ComponentNode.getClassName(),\r\n new ComponentNodeTooltip(),\r\n );\r\n\r\n // Attach the tooltip tool to wellLogWidget and set the registry\r\n const tooltipTool = wellLogWidget.getToolByName('tooltip');\r\n tooltipTool.setRegistry(toolTipRegistry);\r\n tooltipTool.setEnabled(true);\r\n\r\n // Configure the Plot with the WellLogWidget\r\n const plot = new Plot({\r\n canvaselement: canvasRef.current,\r\n root: new Group().setLayout(new CssLayout()).addChild([\r\n wellLogWidget.setLayoutStyle({\r\n left: 0,\r\n top: 0,\r\n width: '100%',\r\n height: '100%',\r\n }),\r\n ]),\r\n });\r\n\r\n wellLogWidget.fitToHeight();\r\n plotRef.current = plot;\r\n wellLogWidgetRef.current = wellLogWidget;\r\n\r\n console.log(\r\n 'Widget and Plot initialized with WellLogWidget and WellBoreNode.',\r\n );\r\n\r\n return () => {\r\n if (plotRef.current) {\r\n plotRef.current.dispose();\r\n }\r\n if (dataSource) {\r\n dataSource.dispose();\r\n }\r\n };\r\n }, [dataSource]);\r\n\r\n const zoomIn = () => {\r\n if (wellLogWidgetRef.current) {\r\n wellLogWidgetRef.current.scale(SCALE_FACTOR);\r\n }\r\n };\r\n\r\n const zoomOut = () => {\r\n if (wellLogWidgetRef.current) {\r\n wellLogWidgetRef.current.scale(1 / SCALE_FACTOR);\r\n }\r\n };\r\n\r\n const zoomToFit = () => {\r\n if (wellLogWidgetRef.current) {\r\n wellLogWidgetRef.current.fitToHeight();\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default BigData;\r\n","import React from 'react';\r\n// import WellLogBasicComponent from './wellLogBasic/WellLogBasicComponent';\r\n// import BigData from './wellLogBasic/WellLogBasicComponent';\r\n// import BigDataTable from './wellLogBasic/WellLogBasicComponentTable';\r\nimport BigDataAndSchematic from './wellLogBasic/WellLogAndSchematicComponent';\r\n\r\nfunction App() {\r\n return (\r\n
    \r\n {/* */}\r\n \r\n {/* */}\r\n
    \r\n );\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nconst CableDetailsTestDrawerHeader = ({ title, toggleDrawer }) => {\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CableDetailsTestDrawerHeader;\r\n","import React from 'react';\r\nimport { Grid, Divider } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\n\r\nimport ReadOnlyField from 'app/components/ReadOnlyField';\r\nimport { formatDate } from 'utils/format.util';\r\nimport { Format } from 'app/app.constants';\r\nimport moment from 'moment';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport { drumTypeWhenNoCableSpoolingStorage } from 'features/equipment/assets/components/drawer/utils/constants';\r\n\r\nconst CustomReadOnlyField = (props) => (\r\n \r\n);\r\n\r\nconst CableTestDetailsDrawerContent = ({\r\n classes,\r\n cableTestDetails,\r\n cableDetail,\r\n exportCableHistory,\r\n}) => {\r\n const dataVerified = cableDetail?.dataVerified\r\n ? moment(cableDetail?.dataVerified)\r\n : '';\r\n\r\n const formatQuantity = (quantity) => {\r\n return quantity?.hasValue\r\n ? `${`${quantity?.roundedValue} ${quantity?.unit}`}`\r\n : '-';\r\n };\r\n\r\n const formatQuantityWithUnit = (quantity, unit) => {\r\n return quantity ? `${`${quantity} ${unit}`}` : '-';\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {cableDetail?.name ?? '-'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableDetail?.nominalDiameter)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {cableDetail?.manufacturer ?? '-'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {cableDetail?.manufacturerPartNo ?? '-'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableDetail?.stretchCoefficient)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableDetail?.strength)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableDetail?.safeWorkingLoad)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableDetail?.weightInAir)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {cableDetail?.dataVerified ? (\r\n <>\r\n YES
    \r\n {formatDate(dataVerified, Format.input)}\r\n \r\n ) : (\r\n 'NO'\r\n )}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {cableDetail?.dataVerified\r\n ? formatDate(dataVerified, Format.time)\r\n : '-'}\r\n \r\n \r\n \r\n
    \r\n\r\n {/* PART 2 */}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {formatQuantity(cableTestDetails?.get('currentCableLength'))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableTestDetails?.get('maxTension'))}\r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableTestDetails?.get('maxDepth'))}\r\n \r\n \r\n \r\n \r\n \r\n {formatQuantity(cableTestDetails?.get('maxOD'))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {cableTestDetails?.get('originalSpoolingDate')\r\n ? formatDate(\r\n moment(cableTestDetails?.get('originalSpoolingDate')),\r\n Format.time,\r\n )\r\n : '-'}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {cableTestDetails?.get('latestSpoolingDate')\r\n ? formatDate(\r\n moment(cableTestDetails?.get('latestSpoolingDate')),\r\n Format.time,\r\n )\r\n : '-'}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {formatQuantityWithUnit(\r\n cableTestDetails?.get('latestCableResistance'),\r\n 'ohm',\r\n )}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {cableTestDetails?.get('totalNumberRuns') ?? '-'}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {cableTestDetails?.get('currentDrumType') ??\r\n drumTypeWhenNoCableSpoolingStorage}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {cableTestDetails?.get('drumSerial')\r\n ? cableTestDetails?.get('drumSerial')\r\n : '-'}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n EXPORT CABLE HISTORY\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n activityField: {\r\n paddingTop: `${theme.spacing(3)}px`,\r\n },\r\n subActivityBox: {\r\n marginTop: `${theme.spacing(2)}px`,\r\n marginBottom: `${theme.spacing(2)}px`,\r\n border: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n subActivityField: {\r\n padding: `${theme.spacing(1)}px`,\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n\r\n bottomLabel: {\r\n marginBottom: '4vh',\r\n },\r\n iconStyle: {\r\n height: '2.2vh',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n objectFit: 'contain',\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n marginIcon: {\r\n marginRight: `${theme.spacing(2)}px`,\r\n },\r\n marginButton: {\r\n marginTop: `${theme.spacing(2)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CableTestDetailsDrawerContent);\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Drawer } from '@material-ui/core';\r\nimport CableTestDetailsHeader from 'features/equipment/assets/components/drawer/cable-drawer/CableTestDetailsDrawerHeader';\r\nimport CableTestDetailsContent from 'features/equipment/assets/components/drawer/cable-drawer/CableTestDetailsDrawerContent';\r\n\r\nconst CableTestDrawerDetails = ({\r\n isOpen,\r\n classes,\r\n cableTestDetails,\r\n toggleDrawer,\r\n cableDetail,\r\n exportCableHistory,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n background: theme.palette.background.default,\r\n },\r\n drawerHeader: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1000,\r\n background: theme.palette.background.default,\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n drawerContent: {\r\n padding: theme.spacing(2),\r\n overflowY: 'scroll-y',\r\n margin: `0 ${theme.spacing(1)}px 0 ${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CableTestDrawerDetails);\r\n","import { compose } from 'redux';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useEffect, useState } from 'react';\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport { BasePage, ModalActions, LoadingButton } from 'altus-ui-components';\r\n\r\nimport Close from '@material-ui/icons/Close';\r\nimport { Field, Formik, Form } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport {\r\n Box,\r\n Grid,\r\n Typography,\r\n IconButton,\r\n InputAdornment,\r\n Link,\r\n} from '@material-ui/core';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport moment from 'moment';\r\n\r\nimport {\r\n ASSET_HISTORY_EQUIPMENT_TYPE,\r\n ASSET_HISTORY_MAINTENANCE_TYPES,\r\n ASSET_HISTORY_TEST_TYPES,\r\n EQUIPMENT_ACTIONS,\r\n EquipmentType,\r\n TEST_RESULT_TO_TOOLTIP_TITLE,\r\n TOOL_ASSET_EVENTS_ENUM,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport RedIcon from 'assets/Red.svg';\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport OrangeIcon from 'assets/Orange.svg';\r\nimport { EMPTY_STRING, EMPTY_MAP } from 'app/app.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport {\r\n exportCableHistory,\r\n onLoadAssetHistory,\r\n loadEquipmentAssets,\r\n} from 'features/equipment/equipment.actions';\r\nimport AssetHistoryTable from 'features/equipment/assets/components/AssetHistoryTable';\r\nimport { MODAL } from 'features/equipment/equipment.constants';\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\nimport { toolAssetHistoryEventToString } from 'features/equipment/equipment.helpers';\r\nimport CableTestDetailsDrawer from 'features/equipment/assets/components/drawer/cable-drawer/CableTestDetailsDrawer';\r\nimport {\r\n getAssetHistoryFromState,\r\n getEquipmentAssetsFromState,\r\n getCableTestDetailsFromState,\r\n} from 'features/equipment/equipment.selectors';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\n\r\nconst statusIcons = {\r\n Template: GreenIcon,\r\n Preliminary: GreenIcon,\r\n 'Config Struct': GreenIcon,\r\n Serviceable: GreenIcon,\r\n 'Svceable Restr': OrangeIcon,\r\n 'Standy By': OrangeIcon,\r\n Spare: OrangeIcon,\r\n Unserviceable: RedIcon,\r\n Incident: RedIcon,\r\n 'Scrap Proposal': RedIcon,\r\n Scrapped: RedIcon,\r\n Renamed: RedIcon,\r\n 'Unknown Status': RedIcon,\r\n 'Invalid Status': RedIcon,\r\n};\r\n\r\nconst FORM_FIELDS = {\r\n SEARCH: 'textSearch',\r\n};\r\n\r\nconst initialFormValues = {\r\n [FORM_FIELDS.SEARCH]: EMPTY_STRING,\r\n};\r\n\r\nconst AssetHistoryContainer = ({\r\n classes,\r\n dataState,\r\n equipmentId,\r\n serialNumber,\r\n assetHistory,\r\n equipmentType,\r\n dispatchOnLoad,\r\n cableTestDetails,\r\n dispatchOnLoadEquipments,\r\n equipmentAsset = EMPTY_MAP,\r\n}) => {\r\n const [searchedAssets, setSearchedAssets] = useState(null);\r\n const [serial, setSerial] = useState(null);\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_ASSET_HISTORY_TEST);\r\n const history = useHistory();\r\n const assetId = assetHistory?.get('events')?.first()?.get('assetId');\r\n const [cableTestDetailsIsOpen, setCableTestDetailsToggle] = useToggle();\r\n const cableDetail = cableTestDetails?.get('cable');\r\n\r\n // Filter test types based on equipment type\r\n const filterTypes = (ASSET_HISTORY_TYPE) => {\r\n let equipmentTypes = [ASSET_HISTORY_EQUIPMENT_TYPE.ALL];\r\n\r\n switch (equipmentType) {\r\n case EquipmentType.CABLE:\r\n equipmentTypes.push(ASSET_HISTORY_EQUIPMENT_TYPE.CABLE);\r\n break;\r\n case EquipmentType.SURFACE:\r\n equipmentTypes.push(ASSET_HISTORY_EQUIPMENT_TYPE.SURFACE);\r\n break;\r\n default:\r\n equipmentTypes.push(\r\n ASSET_HISTORY_EQUIPMENT_TYPE.BHA,\r\n ASSET_HISTORY_EQUIPMENT_TYPE.TOOL,\r\n );\r\n }\r\n\r\n return ASSET_HISTORY_TYPE.filter((item) =>\r\n equipmentTypes.includes(item.equipmentType),\r\n );\r\n };\r\n\r\n const testTypesItems = filterTypes(ASSET_HISTORY_TEST_TYPES);\r\n const maintenanceTypeItems = filterTypes(ASSET_HISTORY_MAINTENANCE_TYPES);\r\n\r\n const formatAndValidateDate = (date) => {\r\n if (!date) {\r\n return '-';\r\n }\r\n const formattedDate = moment(date).format('DD.MM.YYYY');\r\n return formattedDate !== '01.01.0001' ? formattedDate : '-';\r\n };\r\n\r\n const nextMaintenance = formatAndValidateDate(\r\n assetHistory?.get('nextMaintenance'),\r\n );\r\n const lastMaintenance = formatAndValidateDate(\r\n assetHistory?.get('lastMaintenance'),\r\n );\r\n\r\n useHeader({\r\n title: cableDetail\r\n ? `${cableDetail?.manufacturer} - ${cableDetail?.name}`\r\n : null,\r\n subTitle: `Serial No. ${serial ?? serialNumber}`,\r\n });\r\n\r\n const getTypographyStyles = (maintenanceDate) => {\r\n const isDefaultDate = maintenanceDate === '-';\r\n return {\r\n align: isDefaultDate ? 'center' : 'inherit',\r\n style: {\r\n width: '100%',\r\n justifyContent: isDefaultDate ? 'center' : 'inherit',\r\n display: 'flex',\r\n },\r\n };\r\n };\r\n\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleModal();\r\n };\r\n\r\n const goBack = (event) => {\r\n event.preventDefault();\r\n const type =\r\n equipmentType === EquipmentType.SURFACE\r\n ? 'surface'\r\n : equipmentType === EquipmentType.CABLE\r\n ? 'cable'\r\n : 'equipment';\r\n\r\n if (type === 'equipment') {\r\n history.push(`/${type}/${equipmentId}/category/1`, {\r\n isArchive: true,\r\n });\r\n } else {\r\n history.push(`/${type}/${equipmentId}`, {\r\n isArchive: true,\r\n });\r\n }\r\n };\r\n\r\n const deepSearch = (data, keyword) => {\r\n const assets = data.events;\r\n let matchingAssets = [];\r\n\r\n for (let asset of assets) {\r\n const eventDescription = toolAssetHistoryEventToString(asset?.event);\r\n\r\n if (eventDescription?.toLowerCase()?.includes(keyword?.toLowerCase())) {\r\n matchingAssets.push(asset);\r\n continue;\r\n }\r\n\r\n for (let key in asset) {\r\n if (!['task', 'test', 'complaint', 'maintenance'].includes(key)) {\r\n if (\r\n key === 'doneBy' &&\r\n asset?.doneBy?.fullName\r\n ?.toLowerCase()\r\n ?.includes(keyword?.toLowerCase())\r\n ) {\r\n matchingAssets.push(asset);\r\n }\r\n if (\r\n typeof asset[key] === 'string' &&\r\n asset[key]?.toLowerCase()?.includes(keyword?.toLowerCase())\r\n ) {\r\n matchingAssets.push(asset);\r\n break;\r\n } else if (asset[key] === keyword) {\r\n matchingAssets.push(asset);\r\n break;\r\n }\r\n }\r\n\r\n const searchByDates = searchByDate(key, asset, keyword);\r\n\r\n if (searchByDates) {\r\n matchingAssets.push(searchByDates);\r\n }\r\n }\r\n\r\n const searchInTasks =\r\n asset.event === TOOL_ASSET_EVENTS_ENUM.RUN ||\r\n asset.event === TOOL_ASSET_EVENTS_ENUM.TASK;\r\n\r\n let searchArray = [];\r\n if (searchInTasks) {\r\n searchArray = asset.tasks || [];\r\n } else if (asset.event === TOOL_ASSET_EVENTS_ENUM.TEST) {\r\n searchArray = asset.test || [];\r\n\r\n const resultDescription =\r\n TEST_RESULT_TO_TOOLTIP_TITLE[asset?.test?.result];\r\n\r\n if (\r\n resultDescription &&\r\n resultDescription?.toLowerCase()?.includes(keyword.toLowerCase())\r\n ) {\r\n matchingAssets.push(asset);\r\n continue;\r\n }\r\n } else if (asset.event === TOOL_ASSET_EVENTS_ENUM.COMPLAINTS) {\r\n searchArray = asset.complaint || [];\r\n } else if (asset.event === TOOL_ASSET_EVENTS_ENUM.MAINTENANCE) {\r\n searchArray = asset.maintenance || [];\r\n } else {\r\n searchArray = asset.doneBy;\r\n }\r\n\r\n searchArray =\r\n searchArray !== null && searchArray !== undefined\r\n ? Array.isArray(searchArray)\r\n ? searchArray\r\n : [searchArray]\r\n : [];\r\n\r\n for (let item of searchArray) {\r\n for (let key in item) {\r\n if (\r\n typeof item[key] === 'string' &&\r\n item[key].toLowerCase().includes(keyword.toLowerCase())\r\n ) {\r\n if (!matchingAssets.includes(asset)) {\r\n matchingAssets.push(asset);\r\n }\r\n break;\r\n } else if (item[key] === keyword) {\r\n if (!matchingAssets.includes(asset)) {\r\n matchingAssets.push(asset);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return matchingAssets;\r\n };\r\n\r\n const searchByDate = (key, asset, keyword) => {\r\n if (key === 'startDate' || key === 'endDate') {\r\n let assetDate = new Date(asset[key]);\r\n let keywordDate = new Date(keyword);\r\n\r\n if (!isNaN(assetDate.getTime()) && !isNaN(keywordDate.getTime())) {\r\n if (\r\n assetDate.toISOString().split('T')[0] ===\r\n keywordDate.toISOString().split('T')[0]\r\n ) {\r\n return asset;\r\n }\r\n } else if (asset?.[key]?.toLowerCase().includes(keyword?.toLowerCase())) {\r\n return asset;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n useEffect(() => {\r\n // first load all equipment assets\r\n dispatchOnLoadEquipments(equipmentId, equipmentType);\r\n }, [dispatchOnLoadEquipments, equipmentId, equipmentType]);\r\n\r\n useEffect(() => {\r\n // continue loading when fing seral number match\r\n if (\r\n equipmentAsset !== EMPTY_MAP &&\r\n equipmentAsset.get('m3ToolAssets').size > 0\r\n ) {\r\n var item = equipmentAsset\r\n .get('m3ToolAssets')\r\n .find((x) => x.get('decodedSerialNumber') === serialNumber);\r\n if (item !== null) {\r\n setSerial(item.get('serialNumber'));\r\n dispatchOnLoad(equipmentId, equipmentType, item.get('serialNumber'));\r\n }\r\n }\r\n }, [\r\n dispatchOnLoad,\r\n equipmentId,\r\n equipmentType,\r\n serialNumber,\r\n equipmentAsset,\r\n ]);\r\n\r\n const onSubmit = (values) => {\r\n setSearchedAssets(deepSearch(assetHistory.toJS(), values.textSearch));\r\n };\r\n\r\n const dispatch = useDispatch();\r\n\r\n const onExportCableHistory = () => {\r\n dispatch(exportCableHistory(equipmentId, serialNumber));\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Back\r\n \r\n \r\n\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n {\r\n form.setFieldValue(\r\n FORM_FIELDS.SEARCH,\r\n initialFormValues[FORM_FIELDS.SEARCH],\r\n );\r\n setSearchedAssets(null);\r\n }}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n {...formik}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n Asset history\r\n \r\n \r\n openModal()}\r\n >\r\n \r\n \r\n {' '}\r\n ADD EVENT\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Status\r\n \r\n \r\n \r\n \r\n {assetHistory?.get('status') ?? 'Unknown Status'}\r\n \r\n \r\n \r\n \r\n \r\n Total tasks\r\n \r\n \r\n {assetHistory?.get('totalTasks')}\r\n \r\n \r\n \r\n \r\n Total projects\r\n \r\n \r\n {assetHistory?.get('totalProjects')}\r\n \r\n \r\n \r\n \r\n Last maintenance\r\n \r\n \r\n \r\n {lastMaintenance}\r\n \r\n \r\n \r\n \r\n \r\n Next maintenance\r\n \r\n \r\n \r\n {nextMaintenance}\r\n \r\n \r\n \r\n \r\n {equipmentType === ASSET_HISTORY_EQUIPMENT_TYPE.CABLE ? (\r\n \r\n \r\n MORE DETAILS\r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n\r\n \r\n\r\n {cableTestDetails && (\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nconst styles = {\r\n headerItems: {\r\n width: 'fit-content',\r\n },\r\n pageContainer: {\r\n paddingTop: '10px',\r\n },\r\n title: {\r\n marginBottom: '11px',\r\n flexDirection: 'row',\r\n },\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.LOAD_ASSET_HISTORY,\r\n EQUIPMENT_ACTIONS.EXPORT_CABLE_HISTORY,\r\n ),\r\n equipmentAsset: getEquipmentAssetsFromState(state),\r\n assetHistory: getAssetHistoryFromState(state),\r\n cableTestDetails: getCableTestDetailsFromState(state),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadAssetHistory,\r\n dispatchOnLoadEquipments: loadEquipmentAssets,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(AssetHistoryContainer);\r\n","import { compose } from 'redux';\r\nimport { useEffect, useState } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { lighten } from '@material-ui/core/styles';\r\nimport { Grid, Typography, Tabs, Tab, Divider } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { getCable } from 'features/equipment/equipment.actions';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { getCableFromState } from 'features/equipment/equipment.selectors';\r\nimport {\r\n EQUIPMENT_ACTIONS,\r\n EquipmentType,\r\n} from 'features/equipment/equipment.constants';\r\nimport EquipmentAssetsContainer from '../assets/EquipmentAssetsContainer';\r\nimport { onUnloadCable } from 'features/equipment/details/equipmentDetails.actions';\r\nimport { EQUIPMENT_DETAILS_ACTIVE_TABS } from './equipmentDetails.constants';\r\nimport { useHeader } from '../../../app/hooks/useHeader';\r\n\r\nconst CableDetails = ({\r\n equipmentId,\r\n classes,\r\n dataState,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(\r\n EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS,\r\n );\r\n\r\n const headerSubtitleHandler = (activeTab) => {\r\n switch (activeTab) {\r\n case EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS:\r\n return 'Details';\r\n case EQUIPMENT_DETAILS_ACTIVE_TABS.ASSETS:\r\n return 'Assets';\r\n default:\r\n return 'Details';\r\n }\r\n };\r\n\r\n useHeader({\r\n subTitle: headerSubtitleHandler(activeTab),\r\n logoNavigation: '/',\r\n });\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(equipmentId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, equipmentId]);\r\n\r\n const cable = useSelector(getCableFromState);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {activeTab === EQUIPMENT_DETAILS_ACTIVE_TABS.DETAILS && (\r\n \r\n \r\n \r\n \r\n {cable.get('manufacturer')} - {cable.get('name')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Name:\r\n \r\n \r\n {cable.get('name')}\r\n \r\n \r\n \r\n \r\n Manufacturer:\r\n \r\n \r\n \r\n {cable.get('manufacturer')}\r\n \r\n \r\n \r\n \r\n \r\n Manufacturer Part No:\r\n \r\n \r\n \r\n {cable.get('manufacturerPartNo')}\r\n \r\n \r\n \r\n \r\n \r\n Nominal Diameter:\r\n \r\n \r\n {`${cable?.getIn(\r\n ['nominalDiameter', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['nominalDiameter', 'unit'])}`}\r\n \r\n \r\n \r\n \r\n Stretch Coefficient:\r\n \r\n \r\n \r\n {`${cable?.getIn(\r\n ['stretchCoefficient', 'roundedValue'],\r\n null,\r\n )} ${cable?.getIn(['stretchCoefficient', 'unit'])}`}\r\n \r\n \r\n \r\n \r\n \r\n Breaking Strength:\r\n \r\n \r\n {cable.get('strength') ? (\r\n \r\n {cable.getIn(['strength', 'roundedValue'])}{' '}\r\n {cable.getIn(['strength', 'unit'])}\r\n \r\n ) : (\r\n No data\r\n )}\r\n \r\n \r\n \r\n \r\n Safe Working Load:\r\n \r\n \r\n {cable.get('safeWorkingLoad') ? (\r\n \r\n {cable.getIn(['safeWorkingLoad', 'roundedValue'])}{' '}\r\n {cable.getIn(['safeWorkingLoad', 'unit'])}\r\n \r\n ) : (\r\n No data\r\n )}\r\n \r\n \r\n \r\n \r\n Weight In Air:\r\n \r\n \r\n {cable.get('weightInAir') ? (\r\n \r\n {cable.getIn(['weightInAir', 'roundedValue'])}{' '}\r\n {cable.getIn(['weightInAir', 'unit'])}\r\n \r\n ) : (\r\n No data\r\n )}\r\n \r\n \r\n \r\n \r\n Is data verified:\r\n \r\n \r\n \r\n {cable.get('isVerified') ? 'Yes' : 'No'}\r\n \r\n \r\n \r\n {cable.get('isVerified') && (\r\n \r\n \r\n Data verified:\r\n \r\n \r\n {cable.get('dataVerified') ? (\r\n \r\n {cable.get('dataVerified')}\r\n \r\n ) : (\r\n No data\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n {activeTab === EQUIPMENT_DETAILS_ACTIVE_TABS.ASSETS && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'column',\r\n padding: 0,\r\n },\r\n container: {\r\n overflow: 'auto',\r\n padding: theme.spacing(2.25),\r\n },\r\n topContainer: {\r\n flexDirection: 'row',\r\n height: '10%',\r\n },\r\n topText: {\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n bottomContainer: {\r\n dispay: 'flex',\r\n flexDirection: 'row',\r\n height: '90%',\r\n },\r\n bottomText: {\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n borderRadius: 3,\r\n padding: theme.spacing(3),\r\n backgroundColor: lighten(theme.palette.background.paper, 0.1),\r\n },\r\n bottomTextLine: {\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n EQUIPMENT_ACTIONS.LOAD_CABLE,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: getCable,\r\n dispatchOnUnload: onUnloadCable,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(CableDetails);\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport const useAutoScroll = () => {\r\n const [vh, setVh] = useState(window.innerHeight * 0.01);\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setVh(window.innerHeight * 0.01);\r\n };\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, []);\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setVh(window.innerHeight * 0.01);\r\n };\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, [vh]);\r\n const maxHeight = window.innerHeight < 800 ? 45 : 65;\r\n return [maxHeight, vh];\r\n};\r\n","import { Field } from 'formik';\r\nimport { fromJS } from 'immutable';\r\nimport { Grid } from '@material-ui/core';\r\nimport { InputAdornment } from '@material-ui/core';\r\n\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { WELL_TAB_FIELDS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { useAutoScroll } from 'features/projects/tasks/task/dataAcquisition/hooks/useScrollable';\r\nimport { FluidsFormSectionDataAcquistion } from 'app/components/FluidsFormSection';\r\n\r\nconst flowPaths = fromJS([\r\n { id: 1, name: 'Flow Up' },\r\n { id: 2, name: 'Flow Down' },\r\n]);\r\n\r\nconst WellTabContainer = ({\r\n taskId,\r\n projectId,\r\n disabled,\r\n fieldMarginClass,\r\n injectionMediums,\r\n productionMediums,\r\n}) => {\r\n const [maxHeight, vh] = useAutoScroll();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n %,\r\n }}\r\n placeholder=\"0\"\r\n useRoundedValue={true}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n item.get('id')}\r\n getItemName={(item) => item.get('name')}\r\n />\r\n \r\n \r\n item.get('id')}\r\n getItemName={(item) => item.get('name')}\r\n />\r\n \r\n \r\n item.get('id')}\r\n getItemName={(item) => item.get('name')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default WellTabContainer;\r\n","import { Field, ErrorMessage } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport TimeSpanFormik from 'app/components/form/formik/TimeSpanFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { TOOLS_TAB_FIELDS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { useAutoScroll } from 'features/projects/tasks/task/dataAcquisition/hooks/useScrollable';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\n\r\nconst ToolsTabContainer = ({ debrisTypes, fieldMarginClass, disabled }) => {\r\n const [maxHeight, vh] = useAutoScroll();\r\n return (\r\n \r\n \r\n \r\n Caliper\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {(msg) =>
    {msg}
    }\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n Tubing Cut\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Tractor\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {(msg) =>
    {msg}
    }\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Jar\r\n \r\n \r\n \r\n \r\n \r\n \r\n {(msg) =>
    {msg}
    }\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n Clean Out\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {(msg) =>
    {msg}
    }\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n item.get('id')}\r\n getItemName={(item) => item.get('name')}\r\n />\r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\nexport default ToolsTabContainer;\r\n","import { Field } from 'formik';\r\nimport { CABLE_TAB_FIELDS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { useHandleToolbarHeight } from 'features/projects/tasks/hooks/useHandleToolbarHeight';\r\n\r\nexport function CommentsRichText({ disabled } = { disabled: false }) {\r\n const toolbarHeight = useHandleToolbarHeight();\r\n\r\n return (\r\n \r\n {({ form, ...formik }) => {\r\n return (\r\n \r\n );\r\n }}\r\n \r\n );\r\n}\r\n","import { Field } from 'formik';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { CABLE_TAB_FIELDS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { CommentsRichText } from 'features/projects/tasks/task/dataAcquisition/components/CableTabContainer/Components/CommentsRichText';\r\n\r\nconst CableTabContainer = ({ disabled }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default CableTabContainer;\r\n","import taskService from 'services/task.service';\r\n\r\nimport { NOTIFICATION_VARIANTS } from 'app/app.constants';\r\nimport { DATA_ACQUISITION_ACTIONS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport DataAcquisitionMappers from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.mappers';\r\n\r\nexport const getDataAcquisitionForTask = (projectId, taskId) => (dispatch) => {\r\n dispatch(getDataAcquisition(projectId, taskId)).then(() => {\r\n return Promise.all([\r\n dispatch(getDebrisTypes(projectId, taskId)),\r\n dispatch(getGreaseTypes(projectId, taskId)),\r\n dispatch(getGlycolTypes(projectId, taskId)),\r\n dispatch(getFrictionReducerTypes(projectId, taskId)),\r\n dispatch(getInjectionMediums(projectId, taskId)),\r\n dispatch(getProductionMediums(projectId, taskId)),\r\n ]);\r\n });\r\n};\r\n\r\nexport const getDataAcquisition = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getDataAcquisitionForTask(projectId, taskId);\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_DATA_ACQUISITION_BY_TASK,\r\n payload,\r\n taskId,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateDataAcquisition =\r\n (projectId, taskId, values) => (dispatch) => {\r\n const requestObj = DataAcquisitionMappers.DataAcquisition.to(values);\r\n\r\n const payload = taskService\r\n .updateDataAcquisitionForTask(\r\n projectId,\r\n taskId,\r\n requestObj.dataAcquisitionId,\r\n requestObj,\r\n )\r\n .then(() => dispatch(getDataAcquisition(projectId, taskId)));\r\n\r\n dispatch({\r\n taskId: taskId,\r\n payload,\r\n type: DATA_ACQUISITION_ACTIONS.UPDATE_DATA_ACQUISITION,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]:\r\n 'Data Acquisition was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const removeDataAcquisitionForTask = () => (dispatch) => {\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.DELETE_DATA_ACQUISITION,\r\n });\r\n};\r\n\r\nexport const getDebrisTypes = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getDebrisTypes(projectId, taskId);\r\n\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_ALL_DEBRIS_TYPES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getGreaseTypes = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getGreaseTypes(projectId, taskId);\r\n\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_ALL_GREASE_TYPES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getGlycolTypes = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getGlycolTypes(projectId, taskId);\r\n\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_ALL_GLYCOL_TYPES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getFrictionReducerTypes = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getFrictionReducerTypes(projectId, taskId);\r\n\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_ALL_FRICTION_REDUCER_TYPES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getInjectionMediums = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getInjectionMediums(projectId, taskId);\r\n\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_ALL_INJECTION_MEDIUMS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getProductionMediums = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getProductionMediums(projectId, taskId);\r\n\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_ALL_PRODUCTION_MEDIUMS,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const getExplosives = (projectId, taskId) => (dispatch) => {\r\n const payload = taskService.getExplosives(projectId, taskId);\r\n\r\n dispatch({\r\n type: DATA_ACQUISITION_ACTIONS.GET_EXPLOSIVES,\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const updateExplosives = (projectId, taskId, data) => (dispatch) => {\r\n const payload = taskService\r\n .updateExplosives(projectId, taskId, data)\r\n .then(() => dispatch(getExplosives(projectId, taskId)));\r\n\r\n dispatch({\r\n payload,\r\n type: DATA_ACQUISITION_ACTIONS.UPDATE_EXPLOSIVES,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Updating explosives...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'Explosives were successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getDataAcquisitionFromState = createSelector(\r\n (state, taskId) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'dataAcquisition',\r\n 'data',\r\n taskId.toString(),\r\n ]),\r\n (data) => data,\r\n);\r\n\r\nexport const getDebrisTypesFromState = createSelector(\r\n (state) =>\r\n state.getIn(['projects', 'plan', 'task', 'dataAcquisition', 'debrisTypes']),\r\n (debrisTypes) => debrisTypes,\r\n);\r\n\r\nexport const getGreaseTypesFromState = createSelector(\r\n (state) =>\r\n state.getIn(['projects', 'plan', 'task', 'dataAcquisition', 'greaseTypes']),\r\n (greaseTypes) => greaseTypes,\r\n);\r\n\r\nexport const getGlycolTypesFromState = createSelector(\r\n (state) =>\r\n state.getIn(['projects', 'plan', 'task', 'dataAcquisition', 'glycolTypes']),\r\n (glycolTypes) => glycolTypes,\r\n);\r\n\r\nexport const getFrictionReducerTypesFromState = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'dataAcquisition',\r\n 'frictionReducerTypes',\r\n ]),\r\n (frictionReducerTypes) => frictionReducerTypes,\r\n);\r\n\r\nexport const getInjectionMediumsFromState = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'dataAcquisition',\r\n 'injectionMediums',\r\n ]),\r\n (injectionMediums) => injectionMediums,\r\n);\r\n\r\nexport const getProductionMediumsFromState = createSelector(\r\n (state) =>\r\n state.getIn([\r\n 'projects',\r\n 'plan',\r\n 'task',\r\n 'dataAcquisition',\r\n 'productionMediums',\r\n ]),\r\n (productionMediums) => productionMediums,\r\n);\r\n\r\nexport const getExplosivesFromState = createSelector(\r\n (state) =>\r\n state.getIn(['projects', 'plan', 'task', 'dataAcquisition', 'explosives']),\r\n (explosives) => explosives,\r\n);\r\n","import * as Yup from 'yup';\r\n\r\nimport {\r\n WELL_TAB_FIELDS,\r\n TOOLS_TAB_FIELDS,\r\n CABLE_TAB_FIELDS,\r\n EXPLOSIVES_FIELDS,\r\n CONSUMABLES_TAB_FIELDS,\r\n} from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { validateTimeString } from 'utils/app.util';\r\n\r\nconst valueErrorMessage = 'Value must be greater than or equal to 0';\r\nconst formatErrorMessage = 'Must be integer';\r\nconst timeErrorMessage = 'Invalid time format, it should be in format HH:MM';\r\n\r\nexport const validationSchema = Yup.object().shape({\r\n [`${WELL_TAB_FIELDS.WELLHEAD_PRESSURE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.RESERVOIR_PRESSURE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.RESERVOIR_DEPTH}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.CARBON_DIOXIDE}`]: Yup.number().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.HYDROGEN_SULFIDE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.GAS_RATE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.LIQUID_RATE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.INJECTION_RATE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${WELL_TAB_FIELDS.INJECTION_PRODUCTION_VOLUME}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CABLE_TAB_FIELDS.FLOWTUBE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CABLE_TAB_FIELDS.MAX_TENSION}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CABLE_TAB_FIELDS.WEAK_POINT_BUILD}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CABLE_TAB_FIELDS.DISTANCE_WINCH_TO_FIRST_SHAVE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CABLE_TAB_FIELDS.LOWER_WINCH_TO_FIRST_SHAVE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CABLE_TAB_FIELDS.LOWER_TOUPPER_SHEAVE_WHEEL}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.DISTANCE_LOGGED}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.DEPTH_OF_CUT}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.METERS_TRACTORED}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.JARING_STROKES}`]: Yup.number()\r\n .integer('Must be integer')\r\n .nullable()\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${TOOLS_TAB_FIELDS.DEBRIS_VOLUME_COLLECTED}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.NOGO_SIZE}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.DISTANCE_MILLED}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.MILLING_SPEED}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${TOOLS_TAB_FIELDS.ROTATION_SPEED}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [TOOLS_TAB_FIELDS.TIME_LOGGED]: Yup.string()\r\n .nullable()\r\n .notRequired()\r\n .test('is-valid-time', timeErrorMessage, (value) =>\r\n validateTimeString(value, true),\r\n ),\r\n [TOOLS_TAB_FIELDS.TIME_TRACTORED]: Yup.string()\r\n .nullable()\r\n .notRequired()\r\n .test('is-valid-time', timeErrorMessage, (value) =>\r\n validateTimeString(value, true),\r\n ),\r\n [TOOLS_TAB_FIELDS.JARING_TIME]: Yup.string()\r\n .nullable()\r\n .notRequired()\r\n .test('is-valid-time', timeErrorMessage, (value) =>\r\n validateTimeString(value, true),\r\n ),\r\n [`${CONSUMABLES_TAB_FIELDS.GREASE_CONSUMPTION}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CONSUMABLES_TAB_FIELDS.FRICTION_REDUCER_CONSUMPTION}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CONSUMABLES_TAB_FIELDS.GLYCOL_CONSUMPTION}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${CONSUMABLES_TAB_FIELDS.HYDRAULIC_FUID_CONSUMPTION}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n});\r\n\r\nexport const explosivesValidationSchema = Yup.object().shape({\r\n [`${EXPLOSIVES_FIELDS.CONSUMPTION}`]: Yup.object().test(\r\n 'is-valid-value',\r\n valueErrorMessage,\r\n (value) => value.value >= 0,\r\n ),\r\n [`${EXPLOSIVES_FIELDS.CONSUMPTION}`]: Yup.object().test(\r\n 'is-valid-format-value',\r\n formatErrorMessage,\r\n (value) => {\r\n const number = Number(value.value);\r\n return Number.isInteger(number);\r\n },\r\n ),\r\n [`${EXPLOSIVES_FIELDS.BOOSTER_BATCH_NUMBER}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${EXPLOSIVES_FIELDS.CHARGE_BATCH_NUMBER}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${EXPLOSIVES_FIELDS.CORD_BATCH_NUMBER}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${EXPLOSIVES_FIELDS.CUTTER_BATCH_NUMBER}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${EXPLOSIVES_FIELDS.IGNITER_BATCH_NUMBER}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${EXPLOSIVES_FIELDS.NUMBER_OF_BOOSTERS_USED}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${EXPLOSIVES_FIELDS.NUMBER_OF_CHARGERS_USED}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n [`${EXPLOSIVES_FIELDS.NUMBER_OF_IGNITERS_USED}`]: Yup.number()\r\n .nullable()\r\n .integer('Must be integer')\r\n .test('is-valid-value', valueErrorMessage, (value) => value >= 0),\r\n});\r\n","import { Grid } from '@material-ui/core';\r\nimport { Field, Formik, Form } from 'formik';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useEffect, useMemo, useCallback } from 'react';\r\n\r\nimport {\r\n getExplosives,\r\n updateExplosives,\r\n} from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.actions';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport { EXPLOSIVES_FIELDS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { getExplosivesFromState } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.selectors';\r\nimport { explosivesValidationSchema } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.validators';\r\n\r\nconst Explosives = ({ taskId, projectId, disabled }) => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getExplosives(projectId, taskId));\r\n }, [dispatch, projectId, taskId]);\r\n\r\n const explosives = useSelector(getExplosivesFromState);\r\n\r\n const initialValues = useMemo(\r\n () => ({\r\n ...explosives?.toJS(),\r\n }),\r\n [explosives],\r\n );\r\n\r\n const submitExplosivesData = useCallback(\r\n (values) => {\r\n dispatch(updateExplosives(projectId, taskId, values));\r\n },\r\n [dispatch, projectId, taskId],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n \r\n \r\n Explosives\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default Explosives;\r\n","import { compose } from 'redux';\r\n\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field, useFormikContext } from 'formik';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { FrictionReducerTypeEnum } from 'app/app.constants';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport QuantityTextFieldFormik from 'app/components/form/formik/QuantityTextFieldFormik';\r\nimport Explosives from 'features/projects/tasks/task/dataAcquisition/components/Explosives';\r\nimport { CONSUMABLES_TAB_FIELDS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { useAutoScroll } from 'features/projects/tasks/task/dataAcquisition/hooks/useScrollable';\r\n\r\nconst ConsumablesTabContainer = ({\r\n taskId,\r\n disabled,\r\n projectId,\r\n greaseTypes,\r\n glycolTypes,\r\n fieldMarginClass,\r\n frictionReducerTypes,\r\n classes,\r\n}) => {\r\n const { values } = useFormikContext();\r\n const [maxHeight, vh] = useAutoScroll();\r\n const frictionReducerType =\r\n values[CONSUMABLES_TAB_FIELDS.FRICTION_REDUCER_TYPE_ID];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Chemicals\r\n \r\n \r\n \r\n \r\n item.get('id')}\r\n getItemName={(item) => item.get('name')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n item.get('id')}\r\n getItemName={(item) => item.get('name')}\r\n />\r\n {frictionReducerType === FrictionReducerTypeEnum.Other && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n item.get('id')}\r\n getItemName={(item) => item.get('name')}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n container: {\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ConsumablesTabContainer);\r\n","import { CABLE_TAB_FIELDS } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport _ from 'lodash';\r\nimport { editorStateToString } from 'utils/app.util';\r\n\r\nexport const richEditorStateToString = (editorState) => {\r\n return editorState ? editorStateToString(editorState) : null;\r\n};\r\n\r\nconst removeCableCommentsFromDataAcquisitionStructure = (\r\n dataAcquisitionStructure,\r\n) => {\r\n const { [CABLE_TAB_FIELDS.COMMENTS]: cableComments, ...restCurrent } =\r\n dataAcquisitionStructure;\r\n return restCurrent;\r\n};\r\nexport const isEqualRestOfDataAcquisitionStructure = (\r\n currentDataAcquisition,\r\n initialDataAcquisition,\r\n) => {\r\n const restCurrent = removeCableCommentsFromDataAcquisitionStructure(\r\n currentDataAcquisition,\r\n );\r\n const restInitial = removeCableCommentsFromDataAcquisitionStructure(\r\n initialDataAcquisition,\r\n );\r\n\r\n return _.isEqual(restCurrent, restInitial);\r\n};\r\n","import { compose } from 'redux';\r\nimport { Form, Formik } from 'formik';\r\nimport { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Box, Divider, Grid, Tab, Tabs, withStyles } from '@material-ui/core';\r\n\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport { DATA_AQUISITION_ACTIVE_TAB } from 'features/projects/tasks/task/task.constants';\r\nimport WellTabContainer from 'features/projects/tasks/task/dataAcquisition/components/WellTabContainer';\r\nimport ToolsTabContainer from 'features/projects/tasks/task/dataAcquisition/components/ToolsTabContainer';\r\nimport CableTabContainer from 'features/projects/tasks/task/dataAcquisition/components/CableTabContainer';\r\nimport {\r\n CABLE_TAB_FIELDS,\r\n TOOLS_TAB_FIELDS,\r\n} from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport ConsumablesTabContainer from 'features/projects/tasks/task/dataAcquisition/components/ConsumablesTabContainer';\r\nimport { validationSchema } from './dataAcquisition.validators';\r\nimport {\r\n isEqualRestOfDataAcquisitionStructure,\r\n richEditorStateToString,\r\n} from 'features/projects/tasks/task/dataAcquisition/helpers/utils';\r\nimport { EditorState, convertFromRaw, convertToRaw } from 'draft-js';\r\nimport debounce from 'lodash/debounce';\r\n\r\nconst DataAcquisitionContainer = ({\r\n task,\r\n taskId,\r\n classes,\r\n projectId,\r\n debrisTypes,\r\n greaseTypes,\r\n glycolTypes,\r\n dataAcquisition,\r\n injectionMediums,\r\n productionMediums,\r\n frictionReducerTypes,\r\n changeDataAcquisition,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(DATA_AQUISITION_ACTIVE_TAB.WELL);\r\n const [rawCableCommentsJson, setRawCableCommentsJson] = useState();\r\n const [cableCommentsEditorState, setCableCommentsEditorState] = useState(\r\n EditorState.createEmpty(),\r\n );\r\n const [rawToolsDescriptionJson, setRawToolsDescriptionJson] = useState();\r\n const [toolsDescriptionEditorState, setToolsDescriptionEditorState] =\r\n useState(EditorState.createEmpty());\r\n\r\n const updateContent = useCallback(\r\n (content, setContent, setEditorState, editorState) => {\r\n if (dataAcquisition.get(content)?.getCurrentContent() && setContent) {\r\n const rawEditorState = convertToRaw(editorState.getCurrentContent());\r\n if (JSON.stringify(rawEditorState) !== JSON.stringify(setContent)) {\r\n const rawContentState = convertToRaw(\r\n dataAcquisition.get(content).getCurrentContent(),\r\n );\r\n const newEditorState = EditorState.createWithContent(\r\n convertFromRaw(rawContentState),\r\n );\r\n setEditorState(newEditorState);\r\n }\r\n }\r\n },\r\n [dataAcquisition],\r\n );\r\n\r\n const updateValues = (values, key, setRawJson) => {\r\n const JSONValue = JSON.stringify(\r\n convertToRaw(values[key].getCurrentContent()),\r\n );\r\n setRawJson(JSONValue);\r\n };\r\n\r\n useEffect(() => {\r\n const newRawCableCommentsJson = dataAcquisition.get(\r\n CABLE_TAB_FIELDS.COMMENTS,\r\n )\r\n ? convertToRaw(\r\n dataAcquisition.get(CABLE_TAB_FIELDS.COMMENTS).getCurrentContent(),\r\n )\r\n : dataAcquisition.get(CABLE_TAB_FIELDS.COMMENTS);\r\n\r\n if (\r\n dataAcquisition.get(CABLE_TAB_FIELDS.COMMENTS) &&\r\n JSON.stringify(rawCableCommentsJson) !==\r\n JSON.stringify(newRawCableCommentsJson)\r\n ) {\r\n setRawCableCommentsJson(newRawCableCommentsJson);\r\n updateContent(\r\n CABLE_TAB_FIELDS.COMMENTS,\r\n newRawCableCommentsJson,\r\n setCableCommentsEditorState,\r\n cableCommentsEditorState,\r\n );\r\n }\r\n // eslint-disable-next-line\r\n }, [dataAcquisition, rawCableCommentsJson]);\r\n\r\n useEffect(() => {\r\n const newRawToolsDescriptionJson = dataAcquisition.get(\r\n TOOLS_TAB_FIELDS.DESCRIPTION,\r\n )\r\n ? convertToRaw(\r\n dataAcquisition.get(TOOLS_TAB_FIELDS.DESCRIPTION).getCurrentContent(),\r\n )\r\n : dataAcquisition.get(TOOLS_TAB_FIELDS.DESCRIPTION);\r\n\r\n if (\r\n dataAcquisition.get(TOOLS_TAB_FIELDS.DESCRIPTION) &&\r\n JSON.stringify(rawToolsDescriptionJson) !==\r\n JSON.stringify(newRawToolsDescriptionJson)\r\n ) {\r\n setRawToolsDescriptionJson(newRawToolsDescriptionJson);\r\n updateContent(\r\n TOOLS_TAB_FIELDS.DESCRIPTION,\r\n newRawToolsDescriptionJson,\r\n setToolsDescriptionEditorState,\r\n toolsDescriptionEditorState,\r\n );\r\n }\r\n // eslint-disable-next-line\r\n }, [dataAcquisition, rawToolsDescriptionJson]);\r\n\r\n const initialValues = useMemo(() => {\r\n if (dataAcquisition) {\r\n const {\r\n [CABLE_TAB_FIELDS.COMMENTS]: _,\r\n [TOOLS_TAB_FIELDS.DESCRIPTION]: __,\r\n ...restOfDataAcquisitionObject\r\n } = dataAcquisition.toJS();\r\n return {\r\n [CABLE_TAB_FIELDS.COMMENTS]: cableCommentsEditorState,\r\n [TOOLS_TAB_FIELDS.DESCRIPTION]: toolsDescriptionEditorState,\r\n ...restOfDataAcquisitionObject,\r\n };\r\n } else return {};\r\n }, [dataAcquisition, cableCommentsEditorState, toolsDescriptionEditorState]);\r\n\r\n const initialFormValues = useMemo(() => {\r\n return initialValues;\r\n }, [initialValues]);\r\n\r\n // eslint-disable-next-line\r\n const debouncedUpdate = useCallback(\r\n debounce((projectId, taskId, values) => {\r\n changeDataAcquisition(projectId, taskId, values);\r\n }, 500),\r\n [changeDataAcquisition],\r\n );\r\n\r\n const submitDataAcquisition = useCallback(\r\n (values) => {\r\n const currentCableCommentAsString = richEditorStateToString(\r\n values[CABLE_TAB_FIELDS.COMMENTS],\r\n );\r\n const initialCableCommentAsString = richEditorStateToString(\r\n initialFormValues[CABLE_TAB_FIELDS.COMMENTS],\r\n );\r\n const currentToolsDescriptionAsString = richEditorStateToString(\r\n values[TOOLS_TAB_FIELDS.DESCRIPTION],\r\n );\r\n const initialToolsDescriptionAsString = richEditorStateToString(\r\n initialFormValues[TOOLS_TAB_FIELDS.DESCRIPTION],\r\n );\r\n\r\n const isCableCommentsChanged =\r\n currentCableCommentAsString !== initialCableCommentAsString;\r\n const isToolsDescriptionChanged =\r\n currentToolsDescriptionAsString !== initialToolsDescriptionAsString;\r\n\r\n if (isCableCommentsChanged) {\r\n updateValues(\r\n values,\r\n CABLE_TAB_FIELDS.COMMENTS,\r\n setRawCableCommentsJson,\r\n );\r\n setCableCommentsEditorState(values[CABLE_TAB_FIELDS.COMMENTS]);\r\n debouncedUpdate(projectId, taskId, values);\r\n }\r\n if (isToolsDescriptionChanged) {\r\n updateValues(\r\n values,\r\n TOOLS_TAB_FIELDS.DESCRIPTION,\r\n setRawToolsDescriptionJson,\r\n );\r\n setToolsDescriptionEditorState(values[TOOLS_TAB_FIELDS.DESCRIPTION]);\r\n debouncedUpdate(projectId, taskId, values);\r\n }\r\n if (!isEqualRestOfDataAcquisitionStructure(values, initialFormValues)) {\r\n debouncedUpdate(projectId, taskId, values);\r\n }\r\n },\r\n [projectId, taskId, debouncedUpdate, initialFormValues],\r\n );\r\n\r\n const disabled = useMemo(() => {\r\n const taskStatus = task?.get('status');\r\n return taskStatus && taskStatus >= WORK_ITEM_STATUS.COMPLETED;\r\n }, [task]);\r\n\r\n const handleTabs = (_, value) => {\r\n setActiveTab(value);\r\n };\r\n const activeTabHandler = (activeTab) => {\r\n switch (activeTab) {\r\n default:\r\n return null;\r\n case DATA_AQUISITION_ACTIVE_TAB.WELL:\r\n return (\r\n \r\n );\r\n case DATA_AQUISITION_ACTIVE_TAB.CABLE:\r\n return (\r\n \r\n );\r\n case DATA_AQUISITION_ACTIVE_TAB.TOOLS:\r\n return (\r\n \r\n );\r\n case DATA_AQUISITION_ACTIVE_TAB.CONSUMABLES:\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n return (\r\n submitDataAcquisition(values)}\r\n validationSchema={validationSchema}\r\n >\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {activeTabHandler(activeTab)}\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\nconst styles = (theme) => ({\r\n contentContainer: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n box: {\r\n height: '100%',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n },\r\n tabsContainer: {\r\n paddingLeft: '12%',\r\n borderRadius: 3,\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n tabPanel: {\r\n flex: 1,\r\n display: 'block',\r\n padding: theme.spacing(1),\r\n backgroundColor: 'transparent',\r\n },\r\n fieldMargin: {\r\n marginTop: '16px',\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(DataAcquisitionContainer);\r\n","import React, { useEffect } from 'react';\r\nimport { compose } from 'redux';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { reduxForm } from 'redux-form/immutable';\r\nimport DataAcquisitionContainer from 'features/projects/tasks/task/dataAcquisition/DataAcquisitionContainer';\r\nimport {\r\n getDataAcquisitionForTask,\r\n removeDataAcquisitionForTask,\r\n updateDataAcquisition,\r\n} from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.actions';\r\nimport {\r\n getDataAcquisitionFromState,\r\n getDebrisTypesFromState,\r\n getFrictionReducerTypesFromState,\r\n getGlycolTypesFromState,\r\n getGreaseTypesFromState,\r\n getInjectionMediumsFromState,\r\n getProductionMediumsFromState,\r\n} from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.selectors';\r\nimport { DATA_ACQUISITION_FORM } from 'features/projects/tasks/task/dataAcquisition/dataAcquisition.constants';\r\nimport { getActivityTaskByTaskId } from 'features/projects/activities/activities.selectors';\r\n\r\nconst DataAcquisitionDataFetchWrapper = ({\r\n taskId,\r\n projectId,\r\n debrisTypes,\r\n greaseTypes,\r\n glycolTypes,\r\n dataAcquisition,\r\n injectionMediums,\r\n productionMediums,\r\n loadDataAcquisition,\r\n frictionReducerTypes,\r\n changeDataAcquisition,\r\n unloadDataAcquisition,\r\n}) => {\r\n const task = useSelector((state) => getActivityTaskByTaskId(taskId)(state));\r\n\r\n useEffect(() => {\r\n loadDataAcquisition(projectId, taskId);\r\n\r\n return () => unloadDataAcquisition();\r\n }, [projectId, taskId, loadDataAcquisition, unloadDataAcquisition]);\r\n return dataAcquisition && dataAcquisition.size > 0 ? (\r\n \r\n ) : null;\r\n};\r\n\r\nconst mapStateToProps = (state, { taskId }) => ({\r\n dataAcquisition: getDataAcquisitionFromState(state, taskId),\r\n greaseTypes: getGreaseTypesFromState(state),\r\n debrisTypes: getDebrisTypesFromState(state),\r\n glycolTypes: getGlycolTypesFromState(state),\r\n injectionMediums: getInjectionMediumsFromState(state),\r\n productionMediums: getProductionMediumsFromState(state),\r\n frictionReducerTypes: getFrictionReducerTypesFromState(state),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n changeDataAcquisition: updateDataAcquisition,\r\n loadDataAcquisition: getDataAcquisitionForTask,\r\n unloadDataAcquisition: removeDataAcquisitionForTask,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n reduxForm({\r\n form: DATA_ACQUISITION_FORM.EDIT_FORM_ID,\r\n }),\r\n)(DataAcquisitionDataFetchWrapper);\r\n","import { createSelector } from 'utils/app.util';\r\n\r\nexport const getProjectMobilisationTasksFromState = createSelector(\r\n (state) => state.getIn(['entity', 'projectMobilisation', 'tasks']),\r\n (tasks) => tasks,\r\n);\r\n\r\nexport const getStringTestReportsForTaskFromState = createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'projectMobilisation', 'stringTestReportsForTask']),\r\n (reports) => reports,\r\n);\r\n\r\nexport const getStringTestReportEventFromState = createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'projectMobilisation', 'stringTestReportEvent']),\r\n (event) => event,\r\n);\r\n\r\nexport const getstringtesttoolstringitemsFromState = createSelector(\r\n (state) =>\r\n state.getIn(['entity', 'projectMobilisation', 'stringtesttoolstringitems']),\r\n (event) => event,\r\n);\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\n\r\nimport RunNumber from 'features/projects/components/RunNumber';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n taskButton: {\r\n borderColor: theme.palette.divider,\r\n borderRadius: 0,\r\n textTransform: 'none',\r\n marginTop: 2,\r\n padding: theme.spacing(1.4),\r\n border: '1px solid transparent',\r\n cursor: 'pointer',\r\n },\r\n taskButtonSelected: {\r\n borderColor: theme.palette.divider,\r\n backgroundColor: theme.altus.components.Mobilisation.tasksMenu.selected,\r\n borderRadius: 0,\r\n textTransform: 'none',\r\n marginTop: 2,\r\n padding: theme.spacing(1.4),\r\n border: '1px solid transparent',\r\n cursor: 'pointer',\r\n },\r\n }),\r\n);\r\n\r\nconst MobilisationTasksMenuItem = ({\r\n task,\r\n selectedTask,\r\n handleTaskSelection,\r\n}) => {\r\n const classes = useStyles();\r\n return (\r\n {\r\n const values = {\r\n taskId: task.get('taskId'),\r\n externalId: task.get('externalId'),\r\n };\r\n return handleTaskSelection(values);\r\n }}\r\n >\r\n \r\n {task.get('runNumber')}\r\n \r\n \r\n \r\n {task.get('customTitle')}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MobilisationTasksMenuItem;\r\n","import { Grid, Typography } from '@material-ui/core';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport PaperListItem from 'app/components/PaperListItem';\r\nimport MobilisationTasksMenuItem from 'features/projects/mobilisation/MobilisationTasksMenuItem';\r\n\r\nconst MobilisationTasksMenu = ({\r\n selectedTask,\r\n tasks = EMPTY_LIST,\r\n handleTaskSelection,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n Tasks\r\n \r\n \r\n \r\n {tasks.map((task, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MobilisationTasksMenu;\r\n","import moment from 'moment';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { EditorState, convertFromRaw } from 'draft-js';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\n\r\nimport RedIcon from 'assets/Red.svg';\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport OrangeIcon from 'assets/Orange.svg';\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport ProjectUser from 'features/projects/components/ProjectUser';\r\nimport { STRING_TEST_REPORT_EVENT_TYPE_ENUM } from 'features/projects/mobilisation/projectMobilisation.constants';\r\n\r\nconst getStatusString = (eventType) => {\r\n switch (eventType) {\r\n case STRING_TEST_REPORT_EVENT_TYPE_ENUM.PASS:\r\n return 'Pass';\r\n case STRING_TEST_REPORT_EVENT_TYPE_ENUM.WARNING:\r\n return 'Warning';\r\n case STRING_TEST_REPORT_EVENT_TYPE_ENUM.FAIL:\r\n return 'Fail';\r\n default:\r\n return 'Invalid event type';\r\n }\r\n};\r\n\r\nconst getStatusIcon = (eventType) => {\r\n switch (eventType) {\r\n case STRING_TEST_REPORT_EVENT_TYPE_ENUM.PASS:\r\n return GreenIcon;\r\n case STRING_TEST_REPORT_EVENT_TYPE_ENUM.WARNING:\r\n return OrangeIcon;\r\n case STRING_TEST_REPORT_EVENT_TYPE_ENUM.FAIL:\r\n return RedIcon;\r\n default:\r\n return OrangeIcon;\r\n }\r\n};\r\n\r\nconst formatDateString = (dateString) => {\r\n return moment.utc(dateString).format('YYYY/M/D HH:mm');\r\n};\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n root: {\r\n backgroundColor: theme.palette.table.row.main,\r\n marginTop: theme.spacing(1.25),\r\n marginBottom: theme.spacing(1.25),\r\n padding: theme.spacing(2.25),\r\n },\r\n }),\r\n);\r\n\r\nconst StringTestEventContainer = ({ selectedStringTestReport = null }) => {\r\n const classes = useStyles();\r\n\r\n const comments = selectedStringTestReport.get('comment')\r\n ? EditorState.createWithContent(\r\n convertFromRaw(JSON.parse(selectedStringTestReport.get('comment'))),\r\n )\r\n : EditorState.createEmpty();\r\n\r\n if (selectedStringTestReport === null) return null;\r\n return (\r\n \r\n \r\n \r\n Result:\r\n \r\n \r\n {getStatusString(selectedStringTestReport.get('result'))}\r\n \r\n \r\n \r\n \r\n Date: {formatDateString(selectedStringTestReport.get('time'))}\r\n \r\n \r\n \r\n \r\n Comment: \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default StringTestEventContainer;\r\n","import * as yup from 'yup';\r\nimport { convertToRaw } from 'draft-js';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Form, Formik, Field, ErrorMessage } from 'formik';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport { Grid, Dialog, Button, DialogContent } from '@material-ui/core';\r\n\r\nimport { ModalHeader, ModalActions, LoadingButton } from 'altus-ui-components';\r\n\r\nimport {\r\n STRING_TEST_REPORT_EVENT_TYPE_ENUM,\r\n STRING_TEST_REPORT_EVENT_TYPES_LIST,\r\n} from './projectMobilisation.constants';\r\n\r\nimport {\r\n createStringTestReport,\r\n requestFinishStringTestReport,\r\n} from 'features/projects/mobilisation/projectMobilisation.actions';\r\n\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { useViewMode } from 'app/hooks/useViewMode';\r\nimport { getCurrentUserFromState } from 'app/app.selectors';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { Avatar as TooltipAvatar } from 'app/components/withTooltip';\r\nimport TimeSpanFormik from 'app/components/form/formik/TimeSpanFormik';\r\nimport DatePickerFormik from 'app/components/form/formik/DatePickerFormik';\r\nimport { formatDateTimeFromSeconds, validateTimeString } from 'utils/app.util';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n triggerIconRoot: {\r\n height: 45,\r\n width: 45,\r\n marginRight: 10,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n opacity: 0.7,\r\n },\r\n },\r\n gridBackground: {\r\n background: theme.altus.components.ApplicationSidebar.background,\r\n },\r\n gridBackgroundMobile: {\r\n background: theme.altus.components.ApplicationSidebar.background,\r\n position: 'absolute',\r\n bottom: 0,\r\n width: '100%',\r\n },\r\n }),\r\n);\r\n\r\nconst FORM_FIELDS = {\r\n EVENT_TYPE: 'eventTypeEnum',\r\n COMMENT: 'comment',\r\n DATE: 'date',\r\n TIME: 'time',\r\n};\r\n\r\nconst timeErrorMessage = 'Invalid time format, it should be in format HH:MM';\r\n\r\nconst stringTestValidationSchema = yup.object().shape({\r\n [FORM_FIELDS.TIME]: yup\r\n .string()\r\n .required('Required')\r\n .test('is-valid-time', timeErrorMessage, (value) =>\r\n validateTimeString(value),\r\n ),\r\n [FORM_FIELDS.DATE]: yup.string().required('Required'),\r\n});\r\n\r\nconst StringTestEventModalContainer = ({\r\n toggleModal,\r\n isOpen,\r\n stringTestReportEventTypes = STRING_TEST_REPORT_EVENT_TYPES_LIST,\r\n taskId,\r\n projectId,\r\n selectedToolstringId,\r\n secondaryStringTestReports = false,\r\n selectedStringTestReport,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const classes = useStyles();\r\n const isMobile = useViewMode() === 'mobile';\r\n\r\n const user = useSelector(getCurrentUserFromState);\r\n\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n\r\n const initialFormValues = {\r\n [FORM_FIELDS.COMMENT]: EMPTY_STRING,\r\n [FORM_FIELDS.EVENT_TYPE]: STRING_TEST_REPORT_EVENT_TYPE_ENUM.PASS,\r\n [FORM_FIELDS.DATE]: new Date(),\r\n [FORM_FIELDS.TIME]: null,\r\n };\r\n\r\n const convertEditorContentToJson = (editorContent) => {\r\n return editorContent\r\n ? JSON.stringify(convertToRaw(editorContent.getCurrentContent()))\r\n : null;\r\n };\r\n\r\n const handleSubmit = (values) => {\r\n const comment = convertEditorContentToJson(values?.comment);\r\n const eventTypeEnum = parseInt(values.eventTypeEnum);\r\n const timeCreated = formatDateTimeFromSeconds(values.date, values.time);\r\n const userId = user.get('id');\r\n const toolstringId = selectedToolstringId;\r\n\r\n const stringTestReport = {\r\n comment,\r\n result: eventTypeEnum,\r\n time: timeCreated,\r\n userId,\r\n toolstringId,\r\n taskId,\r\n testType: 'StringTest',\r\n isMobilize: true,\r\n };\r\n\r\n const updateDraftReport = {\r\n stringTestId: selectedStringTestReport?.get('stringTestId'),\r\n comment,\r\n result: eventTypeEnum,\r\n time: timeCreated,\r\n userId,\r\n };\r\n\r\n if (secondaryStringTestReports) {\r\n dispatch(\r\n requestFinishStringTestReport(updateDraftReport, taskId, toolstringId),\r\n );\r\n } else {\r\n dispatch(createStringTestReport(projectId, taskId, stringTestReport));\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n {(formik) => {\r\n const { isValid, isSubmitting } = formik;\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {(msg) =>
    {msg}
    }\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    \r\n \r\n \r\n {!user.get('avatar') && user.get('initials')}\r\n \r\n {user.get('name')}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n CANCEL\r\n \r\n \r\n SAVE\r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default StringTestEventModalContainer;\r\n","import moment from 'moment';\r\nimport { compose } from 'redux';\r\nimport Add from '@material-ui/icons/Add';\r\nimport { memo, useCallback, useEffect, useState, useMemo } from 'react';\r\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\r\nimport { useDispatch, useSelector, connect } from 'react-redux';\r\nimport { Grid, Box, Tabs, Tab, Divider } from '@material-ui/core';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\n\r\nimport { useModal } from 'altus-modal';\r\nimport { BasePage } from 'altus-ui-components';\r\n\r\nimport { requestUpdatestringtesttoolstringitem } from 'features/projects/mobilisation/projectMobilisation.actions';\r\nimport {\r\n MODAL,\r\n ACTIONS,\r\n} from 'features/projects/mobilisation/projectMobilisation.constants';\r\n\r\nimport {\r\n createStringTestReport,\r\n requestStringReportsForTask,\r\n requestGetstringtesttoolstringitems,\r\n requestProjectMobilisationTasks,\r\n validatestringtesttoolstringitemsSerialNumbers,\r\n} from 'features/projects/mobilisation/projectMobilisation.actions';\r\n\r\nimport {\r\n getstringtesttoolstringitemsFromState,\r\n getProjectMobilisationTasksFromState,\r\n getStringTestReportsForTaskFromState,\r\n} from 'features/projects/mobilisation/projectMobilisation.selectors';\r\n\r\nimport {\r\n getCurrentUserFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { EMPTY_STRING } from 'app/app.constants';\r\nimport { Button } from 'app/components/withTooltip';\r\nimport MobilisationTasksMenu from 'features/projects/mobilisation/MobilisationTasksMenu';\r\nimport StringTestEventContainer from 'features/projects/mobilisation/StringTestEventContainer';\r\nimport StringTestEventModalContainer from 'features/projects/mobilisation/StringTestEventModalContainer';\r\n\r\nimport { List } from 'immutable';\r\n\r\nimport {\r\n getToolstringFromState,\r\n getToolstringToolsFromState,\r\n getToolstringSectionsFromState,\r\n getTaskByIdFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport {\r\n TOOLSTRING_ACTIONS,\r\n MODAL as ToolstringModal,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { getToolConnectorsFromState } from 'features/projects/tool/tool.selector';\r\n\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\n\r\nimport {\r\n ASSET_HISTORY_EVENT_TYPES,\r\n ASSET_HISTORY_EVENT_TYPES_ITEM,\r\n ASSET_HISTORY_TEST_TYPE,\r\n ASSET_HISTORY_TEST_TYPES,\r\n EquipmentType,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport Icon from '@material-ui/icons/Build';\r\n\r\nimport { NoContentBasePage } from 'altus-ui-components';\r\n\r\nimport TaskToolstringEditorContent from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorContent';\r\n\r\nimport TaskToolstringExportModalContainer from 'features/projects/tasks/task/toolstring/TaskToolstringExportModalContainer';\r\nimport GotoBhaModalModalContainer from 'features/projects/tasks/task/toolstring/GotoBhaEditModalContainer';\r\n\r\nimport {\r\n receiveTaskToolstring,\r\n requestGetTaskToolstring,\r\n requestTaskToolstringSections,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\nimport { requestToolConnectors } from '../tool/tool.actions';\r\nimport toolstringService from 'services/toolstring.service';\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n tabsContainer: {\r\n overflow: 'hidden',\r\n height: 'calc(100% - 20px)',\r\n width: '100vw',\r\n },\r\n basePageChildren: {\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n leftMenu: {\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n },\r\n tab: {\r\n backgroundColor: 'transparent !important',\r\n },\r\n divider: {\r\n marginBottom: theme.spacing(1.25),\r\n },\r\n }),\r\n);\r\nconst checkSerialNumbers = (tools) => {\r\n const isInvalidSerial = (serialNo) =>\r\n serialNo === EMPTY_STRING || serialNo === null;\r\n\r\n return !tools.some(\r\n (tool) =>\r\n (tool.toolAssemblyTools.length > 0 &&\r\n tool.toolAssemblyTools.some(\r\n (subTool) =>\r\n isInvalidSerial(subTool.serialNo) ||\r\n subTool.attachedTools.some((attachedTool) =>\r\n isInvalidSerial(attachedTool.serialNo),\r\n ),\r\n )) ||\r\n (tool.attachedTools.length > 0 &&\r\n tool.attachedTools.some((attachedTool) =>\r\n isInvalidSerial(attachedTool.serialNo),\r\n )) ||\r\n (tool.toolAssemblyTools.length === 0 && isInvalidSerial(tool.serialNo)),\r\n );\r\n};\r\n\r\nconst formatCurrentDateTime = () => {\r\n const currentMoment = moment.utc();\r\n return currentMoment.format('YYYY-MM-DDTHH:mm:ssZ');\r\n};\r\n\r\nconst MobilisationContainer = ({\r\n breadcrumb,\r\n dataState,\r\n projectId,\r\n dispatchGetToolstring,\r\n dispatchToolstringSections,\r\n dispatchRequestToolConnectors,\r\n dispatchUpdatestringtesttoolstringitem,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [activeTab, setActiveTab] = useState(null); // StringTestId\r\n const [selectedTaskExternalId, setSelectedTaskExternalId] = useState(null);\r\n const [selectedTask, setSelectedTask] = useState(null); // TASK ID, NOT WHOLE OBJECT\r\n const [serialNumbersDone, setSerialNumbersDone] = useState(false);\r\n const [selectedToolstringId, setSelectedToolstringId] = useState(null);\r\n const [selectedStringTestReport, setSelectedStringTestReport] =\r\n useState(null);\r\n const hiddenColumns = useMemo(\r\n () => [\r\n 'yieldValue',\r\n 'botC',\r\n 'topC',\r\n 'supplier',\r\n 'hideAssemblySerialNumber',\r\n 'status',\r\n 'actions',\r\n ],\r\n [],\r\n );\r\n const hideSerialNo = 'hideSerialNumbers';\r\n const [isOpen, toggleModal] = useModal(MODAL.ADD_ASSET_HISTORY_BHA);\r\n\r\n const tasks = useSelector(getProjectMobilisationTasksFromState);\r\n const [isToolstringExportModalOpen, toggleToolstringExportModal] = useModal(\r\n ToolstringModal.SIMULATION_EXPORT_MODAL_ID,\r\n );\r\n\r\n const [isRouteBhaEditModalOpen, toggleIsRouteBhaEditModalOpen] = useModal(\r\n MODAL.ROUTE_BHA_EDITOR,\r\n );\r\n\r\n const testTypesItems = List([\r\n ASSET_HISTORY_TEST_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_TEST_TYPE.STRING_TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const assetHistoryEventTypes = List([\r\n ASSET_HISTORY_EVENT_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleModal();\r\n };\r\n\r\n const paddingTopPreview = 0;\r\n const widthSerialColumn = 2;\r\n const isLastInList = useCallback(\r\n (allStringTestReports, selectedStringTestReportItem) => {\r\n const equalValue =\r\n allStringTestReports.last() === selectedStringTestReportItem;\r\n\r\n if (!equalValue && !allStringTestReports?.size) {\r\n return serialNumbersDone;\r\n }\r\n\r\n return equalValue;\r\n },\r\n [serialNumbersDone],\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(requestProjectMobilisationTasks(projectId));\r\n }, [dispatch, projectId]);\r\n\r\n useEffect(() => {\r\n if (selectedToolstringId && selectedTask) {\r\n dispatch(requestStringReportsForTask(selectedTask, selectedToolstringId));\r\n }\r\n }, [selectedToolstringId, dispatch, selectedTask]);\r\n\r\n useEffect(() => {\r\n if (selectedToolstringId) {\r\n dispatch(\r\n requestGetstringtesttoolstringitems(selectedTask, selectedToolstringId),\r\n );\r\n }\r\n }, [dispatch, selectedTask, selectedToolstringId]);\r\n\r\n const user = useSelector(getCurrentUserFromState);\r\n const stringtesttoolstringitems = useSelector(\r\n getstringtesttoolstringitemsFromState,\r\n );\r\n\r\n const stringTestReports = useSelector(getStringTestReportsForTaskFromState);\r\n\r\n useEffect(() => {\r\n if (tasks.size) {\r\n setSelectedTask(tasks.first().get('taskId'));\r\n setSelectedTaskExternalId(tasks.first().get('externalId'));\r\n setSelectedToolstringId(\r\n tasks\r\n .first()\r\n .toJS()\r\n .toolStrings.find((t) => t.isPlanned).toolStringId,\r\n );\r\n }\r\n }, [tasks]);\r\n\r\n useEffect(() => {\r\n if (stringTestReports.size) {\r\n setActiveTab(stringTestReports.last().get('stringTestId'));\r\n setSelectedStringTestReport(stringTestReports.last());\r\n } else {\r\n setSelectedStringTestReport(undefined);\r\n setActiveTab(undefined);\r\n }\r\n }, [stringTestReports]);\r\n\r\n const handleTaskSelection = (value) => {\r\n let toolstringid = tasks\r\n .toJS()\r\n .find((x) => x.taskId === value.taskId)\r\n .toolStrings.find((t) => t.isPlanned).toolStringId;\r\n setSelectedTask(value.taskId);\r\n setSelectedTaskExternalId(value.externalId);\r\n setSelectedToolstringId(toolstringid);\r\n dispatch(requestStringReportsForTask(value.taskId, toolstringid));\r\n\r\n };\r\n\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n setSelectedStringTestReport(\r\n stringTestReports.find((report) => report.get('stringTestId') === value),\r\n );\r\n };\r\n const createDraftStringTestReport = useCallback(() => {\r\n const userId = user.get('id');\r\n const toolstringId = selectedToolstringId;\r\n const taskId = selectedTask;\r\n const timeCreated = formatCurrentDateTime();\r\n\r\n const stringTestReport = {\r\n result: 0,\r\n time: timeCreated,\r\n userId,\r\n toolstringId,\r\n taskId,\r\n testType: 'StringTest',\r\n isMobilize: true,\r\n };\r\n\r\n dispatch(\r\n createStringTestReport(projectId, taskId, stringTestReport, false),\r\n );\r\n }, [dispatch, user, selectedToolstringId, selectedTask, projectId]);\r\n\r\n const validatestringtesttoolstringitemsSerials = useCallback(() => {\r\n const stringtesttoolstringitemsIds = stringtesttoolstringitems\r\n .filter((item) => item.get('stringTestId') === activeTab)\r\n .map((item) => item.get('stringTestToolStringItemId'));\r\n\r\n dispatch(\r\n validatestringtesttoolstringitemsSerialNumbers(\r\n stringtesttoolstringitemsIds.toJS(),\r\n ),\r\n );\r\n }, [dispatch, stringtesttoolstringitems, activeTab]);\r\n\r\n const disabledSerialNumbers = () => {\r\n if (\r\n selectedTaskExternalId === selectedStringTestReport?.get('externalTaskId')\r\n ) {\r\n return selectedStringTestReport?.get('result') === 0 ? false : true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const toolConnectors = useSelector((state) =>\r\n getToolConnectorsFromState(state),\r\n );\r\n\r\n const toolstring = useSelector((state) =>\r\n getToolstringFromState(state, selectedToolstringId),\r\n );\r\n\r\n const toolstringSections = useSelector((state) =>\r\n getToolstringSectionsFromState(state, selectedToolstringId),\r\n );\r\n const toolstringTools = useSelector((state) =>\r\n getToolstringToolsFromState(state, selectedToolstringId, activeTab),\r\n );\r\n const columns = 1;\r\n\r\n const task = useSelector((state) =>\r\n getTaskByIdFromState(state, selectedTask),\r\n );\r\n\r\n useEffect(() => {\r\n setSerialNumbersDone(checkSerialNumbers(toolstringTools.toJS()));\r\n }, [toolstringTools, setSerialNumbersDone]);\r\n\r\n const getPlannedToolstring = useCallback(\r\n () =>\r\n toolstringService\r\n .getPlannedToolstring(projectId, selectedTask, true, activeTab)\r\n .then((toolstring) => {\r\n setSelectedToolstringId(toolstring?.toolStringId);\r\n dispatch(receiveTaskToolstring(projectId, selectedTask, toolstring));\r\n dispatchGetToolstring(\r\n projectId,\r\n selectedTask,\r\n toolstring?.toolStringId,\r\n true,\r\n activeTab,\r\n );\r\n\r\n dispatchToolstringSections(\r\n projectId,\r\n selectedTask,\r\n toolstring?.toolStringId,\r\n true,\r\n activeTab,\r\n );\r\n }),\r\n [\r\n dispatch,\r\n dispatchGetToolstring,\r\n dispatchToolstringSections,\r\n projectId,\r\n selectedTask,\r\n activeTab,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n if (projectId && selectedTask) {\r\n getPlannedToolstring();\r\n }\r\n }, [getPlannedToolstring, projectId, selectedTask]);\r\n\r\n const updatestringtesttoolstringitem = useCallback(\r\n (asset) => {\r\n dispatchUpdatestringtesttoolstringitem(\r\n selectedTask,\r\n selectedToolstringId,\r\n projectId,\r\n asset,\r\n activeTab,\r\n );\r\n },\r\n [\r\n selectedTask,\r\n selectedToolstringId,\r\n dispatchUpdatestringtesttoolstringitem,\r\n projectId,\r\n activeTab,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n dispatchRequestToolConnectors();\r\n }, [dispatchRequestToolConnectors]);\r\n\r\n useEffect(() => {\r\n const taskStatus = task?.get('status');\r\n if (taskStatus && taskStatus >= WORK_ITEM_STATUS.COMPLETED) {\r\n !hiddenColumns.includes(hideSerialNo) && hiddenColumns.push(hideSerialNo);\r\n } else {\r\n hiddenColumns.includes(hideSerialNo) &&\r\n hiddenColumns.splice(hiddenColumns.indexOf(hideSerialNo), 1);\r\n }\r\n }, [hiddenColumns, selectedTask, task]);\r\n const classes = useStyles();\r\n\r\n useHeader({ subTitle: breadcrumb });\r\n\r\n const [eventModal, toggleEventModal] = useModal(\r\n MODAL.STRING_TEST_REPORT_EVENT,\r\n );\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isLastInList(stringTestReports, selectedStringTestReport) ? (\r\n createDraftStringTestReport()}\r\n className={classes.divider}\r\n >\r\n \r\n Add new string test\r\n \r\n ) : null}\r\n \r\n {stringTestReports.size ? (\r\n \r\n \r\n {stringTestReports.map((report, index) => (\r\n \r\n ))}\r\n \r\n \r\n {selectedStringTestReport &&\r\n selectedStringTestReport.get('result') !== 0 ? (\r\n \r\n ) : null}\r\n \r\n ) : null}\r\n \r\n {selectedTask &&\r\n tasks.size &&\r\n !selectedStringTestReport?.get('result') ? (\r\n validatestringtesttoolstringitemsSerials()}\r\n >\r\n \r\n Report string test\r\n \r\n ) : null}\r\n \r\n \r\n {selectedTask ? (\r\n <>\r\n \r\n {!toolstringTools ? (\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_SECTIONS,\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TOOLS,\r\n TOOLSTRING_ACTIONS.DOWNLOAD_TOOLSTRING_PDF_REPORT,\r\n TOOLSTRING_ACTIONS.REQUEST_UPDATE_SERIAL_NUMBERS_FROM_TASK,\r\n TASK_ACTIONS.GET_ALL_TASKS,\r\n ACTIONS.CREATE_STRING_TEST_REPORT,\r\n ACTIONS.REQUEST_STRING_TEST_REPORT_EVENT,\r\n ACTIONS.REQUEST_PROJECT_MOBILISATION_TASKS,\r\n ACTIONS.RECEIVE_PROJECT_MOBILISATION_TASKS,\r\n ACTIONS.REQUEST_STRING_TEST_REPORTS_FOR_TASK,\r\n ACTIONS.RECEIVE_STRING_TEST_REPORTS_FOR_TASK,\r\n ACTIONS.RECEIVE_PROJECT_MOBILISATION_TOOLSTRINGS,\r\n ),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n dispatchGetToolstring: requestGetTaskToolstring,\r\n dispatchToolstringSections: requestTaskToolstringSections,\r\n dispatchUpdatestringtesttoolstringitem: requestUpdatestringtesttoolstringitem,\r\n dispatchRequestToolConnectors: requestToolConnectors,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n memo,\r\n)(MobilisationContainer);\r\n","import Agent from 'infrastructure/agent';\r\nimport { saveFile } from 'utils/app.util';\r\n\r\n// M3\r\nconst refreshToolsWithM3Items = (projectId, taskId) =>\r\n Agent.get(`/project/${projectId}/tasks/${taskId}/toolstrings/refreshM3Data`);\r\n\r\nconst getField = (fieldId) => Agent.get(`/Field/${fieldId}/organization`);\r\n\r\nconst getAllDocuments = (fieldId) => Agent.get(`/Field/${fieldId}/files`);\r\n\r\nconst deleteFile = (fieldId, fieldFileId) =>\r\n Agent.delete(`/field/${fieldId}/files/${fieldFileId}`);\r\n\r\nconst downloadFile = async (fieldId, fieldFileId) => {\r\n const [file, filename] = await Agent.file.get(\r\n `/field/${fieldId}/files/${fieldFileId}/download`,\r\n );\r\n return saveFile(file, filename);\r\n};\r\n\r\nconst uploadFile = (fieldId, file, meta) =>\r\n Agent.file.post(`/field/${fieldId}/files`, file, meta);\r\n\r\nconst updateFile = (fieldId, fieldFileId, file) =>\r\n Agent.put(`/field/${fieldId}/files/${fieldFileId}`, file);\r\n\r\nconst fieldService = {\r\n refreshToolsWithM3Items,\r\n getField,\r\n getAllDocuments,\r\n deleteFile,\r\n downloadFile,\r\n uploadFile,\r\n updateFile,\r\n};\r\n\r\nexport default fieldService;\r\n","import fieldService from 'services/field.service';\r\nimport { FIELDS_ACTIONS } from 'features/fields/fields.constants';\r\n\r\nexport const onLoadFieldWithOrganizations = (fieldId) => (dispatch) => {\r\n return dispatch(getFieldWithOrganizations(fieldId));\r\n};\r\n\r\nexport const getFieldWithOrganizations = (fieldId) => (dispatch) => {\r\n dispatch({\r\n type: FIELDS_ACTIONS.GET_FIELDS_WITH_ORGANIZATIONS,\r\n payload: () => fieldService.getField(fieldId),\r\n });\r\n};\r\n\r\nexport const onUnloadPage = () => (dispatch) => {\r\n dispatch({ type: FIELDS_ACTIONS.FIELD_WITH_ORGANIZATIONS_PAGE_UNLOADED });\r\n };\r\n","import { EMPTY_MAP } from 'app/app.constants';\r\nimport { createSelector } from 'utils/app.util';\r\n\r\nexport const getFieldWithOrganizationsFromState = (fieldId) =>\r\n createSelector(\r\n (state) => state.getIn(['entity', 'field']),\r\n (fields) => {\r\n if (!fieldId || !fields) {\r\n return EMPTY_MAP;\r\n }\r\n\r\n return fields?.get(fieldId.toString());\r\n },\r\n );\r\n\r\nexport const getFieldDocumentsFromState = createSelector(\r\n (state) => state.getIn(['entity', 'fieldDocuments']),\r\n (documents) => documents,\r\n);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n IMPORT_SOURCE,\r\n getStatusById,\r\n getImportSourceById,\r\n} from 'features/fields/fields.constants';\r\n\r\nconst FieldInfoContent = ({ classes, displayDataText, field }) => {\r\n const [externalSourceId, setExternalSourceId] = useState(null);\r\n const [externalSourceShortName, setExternalSourceShortName] = useState(null);\r\n\r\n useEffect(() => {\r\n if (field && field.get('importSource')) {\r\n switch (field.get('importSource')) {\r\n case IMPORT_SOURCE.NPD.id:\r\n setExternalSourceId(field.get('npdFieldId'));\r\n setExternalSourceShortName(IMPORT_SOURCE.NPD.description);\r\n break;\r\n case IMPORT_SOURCE.OGA.id:\r\n setExternalSourceId(field.get('ogaFieldId'));\r\n setExternalSourceShortName(IMPORT_SOURCE.OGA.description);\r\n break;\r\n case IMPORT_SOURCE.API.id:\r\n setExternalSourceId(field.get('apiFieldId'));\r\n setExternalSourceShortName(IMPORT_SOURCE.API.description);\r\n break;\r\n default:\r\n setExternalSourceId(null);\r\n setExternalSourceShortName(null);\r\n break;\r\n }\r\n }\r\n }, [field]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n Field Information\r\n \r\n \r\n \r\n \r\n \r\n Name\r\n \r\n \r\n \r\n {displayDataText(field.get('name'))}\r\n \r\n \r\n \r\n \r\n \r\n Status\r\n \r\n \r\n \r\n {getStatusById(field.get('status'))}\r\n \r\n \r\n \r\n {/* conditionally show Npd, Oga or Api Field Id based on import source */}\r\n {externalSourceId && (\r\n \r\n \r\n \r\n {externalSourceShortName} Field Id\r\n \r\n \r\n \r\n \r\n {displayDataText(externalSourceId)}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n Import source\r\n \r\n \r\n \r\n {getImportSourceById(field.get('importSource'))}\r\n \r\n \r\n \r\n \r\n \r\n Country code Iso 3166\r\n \r\n \r\n \r\n {displayDataText(field.get('countryCodeIso3166'))}\r\n \r\n \r\n \r\n \r\n \r\n Organizations\r\n \r\n \r\n {field.get('organizations')?.size\r\n ? field\r\n .get('organizations')\r\n .map((organization) => (\r\n \r\n {displayDataText(organization.get('displayName'))}\r\n \r\n ))\r\n : '-'}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.palette.tabs.background.light,\r\n },\r\n fieldInfo: {\r\n fontSize: '2rem',\r\n },\r\n bottomText: {\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n borderRadius: 3,\r\n padding: theme.spacing(3),\r\n },\r\n bottomTextLine: {\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingTop: theme.spacing(2),\r\n borderBottom: `2px dotted ${theme.palette.secondary.main}`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(FieldInfoContent);\r\n","import { compose } from 'redux';\r\nimport { useMemo } from 'react';\r\nimport moment from 'moment';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { IconButton, Typography, Grid } from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { Format, EMPTY_LIST } from 'app/app.constants';\r\nimport WellboreTableRow from 'features/wells/components/WellboreTableRow';\r\n\r\nconst WellDetailsTable = ({\r\n classes,\r\n wellboresByField = EMPTY_LIST,\r\n ...rest\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'placeholder',\r\n Header: ,\r\n Cell: ,\r\n },\r\n {\r\n xs: 2,\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: (well) => well.get('name'),\r\n Cell: ({ value }) => {\r\n return value;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'lastProject',\r\n Header: 'Last Project',\r\n accessor: (well) => well.get('lastProject'),\r\n Cell: ({ row, value }) => {\r\n return (\r\n \r\n {!row.original.get('isWell')\r\n ? value\r\n ? moment(value).format(Format.date)\r\n : '-'\r\n : ''}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'mainObjective',\r\n Header: 'Main Obj. (Last Project)',\r\n accessor: (well) => well.get('lastMainOjectiveProject'),\r\n Cell: ({ row, value }) => {\r\n return (\r\n \r\n {!row.original.get('isWell') ? (value ? value : '-') : ''}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'riskScore',\r\n Header: 'Risk Score',\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n {!row.original.get('isWell') ? '-' : ''}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'reLog',\r\n Header: 'Suggested Integrity Re-Log',\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n {!row.original.get('isWell') ? '-' : ''}\r\n \r\n );\r\n },\r\n },\r\n {\r\n id: 'expander',\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return null;\r\n\r\n return (\r\n \r\n {row.isExpanded ? : }\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 Wells\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n width: '100%',\r\n padding: theme.spacing(3),\r\n marginLeft: theme.spacing(3),\r\n backgroundColor: theme.palette.tabs.background.light,\r\n },\r\n wellInfo: {\r\n fontSize: '2rem',\r\n paddingBottom: theme.spacing(2),\r\n },\r\n surveyUploadedDescription: {\r\n color: theme.palette.secondary.mainLight,\r\n },\r\n wellHeader: {\r\n color: theme.palette.common.white,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(WellDetailsTable);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { Grid, Typography } from '@material-ui/core';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\n\r\nimport { FIELDS_ACTIONS } from 'features/fields/fields.constants';\r\nimport {\r\n onLoadFieldWithOrganizations,\r\n onUnloadPage,\r\n} from 'features/fields/field.action';\r\n\r\nimport { getFieldWithOrganizationsFromState } from 'features/fields/field.selectors';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport FieldInfoContent from 'features/fields/overview/FieldInfoContent';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport WellDetailsTable from 'features/fields/overview/WellDetailsTable';\r\nimport ProjectsByStatus from 'features/projects/components/ProjectsByStatus';\r\n\r\nconst getWellboreSubRows = (row) => {\r\n if (row.original) return;\r\n\r\n return row.get('wellbores', EMPTY_LIST)?.valueSeq();\r\n};\r\n\r\nconst FieldOverviewContainer = ({\r\n fieldId,\r\n classes,\r\n dataState,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n}) => {\r\n useHeader({\r\n title: '',\r\n subTitle: 'Field Overview',\r\n logoNavigation: '/wells',\r\n });\r\n const displayDataText = (data) => {\r\n if (dataState.isLoading()) {\r\n return 'Loading...';\r\n }\r\n\r\n if (!data || data === undefined) {\r\n return 'No Data';\r\n } else {\r\n return data;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(fieldId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [dispatchOnLoad, dispatchOnUnload, fieldId]);\r\n\r\n const field = useSelector(getFieldWithOrganizationsFromState(fieldId));\r\n\r\n return (\r\n \r\n \r\n \r\n {field ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Project History\r\n \r\n \r\n {!field.get('projects')?.size ? (\r\n \r\n No projects...\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n ) : (\r\n No field details available.\r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n FIELDS_ACTIONS.GET_FIELDS_WITH_ORGANIZATIONS,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoadFieldWithOrganizations,\r\n dispatchOnUnload: onUnloadPage,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'column',\r\n padding: 0,\r\n },\r\n container: {\r\n flexDirection: 'column',\r\n overflow: 'auto',\r\n padding: theme.spacing(2.25),\r\n },\r\n content: {\r\n height: 'fit-content',\r\n flexDirection: 'row',\r\n },\r\n bottomContainer: {\r\n dispay: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n },\r\n projectsContainer: {\r\n width: '100%',\r\n padding: theme.spacing(3),\r\n marginTop: theme.spacing(3),\r\n backgroundColor: theme.palette.tabs.background.light,\r\n },\r\n projects: {\r\n fontSize: '2rem',\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(FieldOverviewContainer);\r\n","import { Switch } from 'react-router-dom';\r\n\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport NavigationAppBar from 'app/components/NavigationAppBar';\r\n\r\nconst FieldRoutingContainer = ({ routes }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default FieldRoutingContainer;\r\n","import { getAllFileCategories, toggleModal } from 'app/app.actions';\r\nimport { NOTIFICATION_VARIANTS, MODAL } from 'app/app.constants';\r\nimport { FIELDS_ACTIONS } from './fields.constants';\r\nimport fieldService from 'services/field.service';\r\n\r\nexport const onLoad = (fieldId) => (dispatch) =>\r\n dispatch({\r\n type: FIELDS_ACTIONS.FIELD_DOCUMENTS_PAGE_LOADED,\r\n payload: () =>\r\n Promise.all([\r\n dispatch(getAllFileCategories()),\r\n fieldService\r\n .getAllDocuments(fieldId)\r\n .then((files) => dispatch(receiveProjectFiles(files))),\r\n ]),\r\n });\r\n\r\nexport const onUnload = () => (dispatch) =>\r\n dispatch({ type: FIELDS_ACTIONS.FIELD_DOCUMENTS_PAGE_UNLOADED });\r\n\r\nexport const deleteFile = (fieldId, fieldFileId) => (dispatch) => {\r\n dispatch({\r\n fieldFileId,\r\n type: FIELDS_ACTIONS.DELETE_FIELD_DOCUMENT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: 'Deleting...',\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'The file was successfully deleted',\r\n },\r\n confirmationDialog: {\r\n title: 'Delete document',\r\n confirmButtonText: 'Delete',\r\n description: 'Are you sure you want to delete this document?',\r\n },\r\n payload: () => fieldService.deleteFile(fieldId, fieldFileId),\r\n });\r\n};\r\n\r\nexport const downloadFile = (fieldId, fieldFileId, file) => (dispatch) => {\r\n const payload = fieldService.downloadFile(fieldId, fieldFileId);\r\n\r\n dispatch({\r\n fieldFileId,\r\n type: FIELDS_ACTIONS.DOWNLOAD_FIELD_DOCUMENT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.INFO]: `Downloading ${file.get('name')}...`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const uploadFiles =\r\n (fieldId) => (dispatch) => (uploadDocumentFormValues) => {\r\n const { files } = uploadDocumentFormValues.toJS();\r\n\r\n const payload = Promise.all(\r\n files.map(({ file, meta }) =>\r\n fieldService\r\n .uploadFile(fieldId, file, meta)\r\n .then((projectFile) => dispatch(receiveProjectFile(projectFile))),\r\n ),\r\n ).then((response) => {\r\n dispatch(toggleModal({ modalId: MODAL.UPLOAD_FILE }));\r\n return response;\r\n });\r\n\r\n dispatch({\r\n type: FIELDS_ACTIONS.UPLOAD_FIELD_DOCUMENT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: `The ${\r\n files.length > 1 ? 'files' : 'file'\r\n } ${files.length > 1 ? 'were' : 'was'} successfully uploaded`,\r\n },\r\n payload,\r\n });\r\n\r\n return payload;\r\n };\r\n\r\nexport const uploadFileModalOnUnload = () => (dispatch) =>\r\n dispatch({ type: FIELDS_ACTIONS.UPLOAD_FIELD_DOCUMENT_MODAL_UNLOADED });\r\n\r\nexport const updateFile = (fieldId, fieldFileId, file) => (dispatch) => {\r\n const payload = fieldService\r\n .updateFile(fieldId, fieldFileId, file)\r\n .then((projectFile) => receiveProjectFile(projectFile));\r\n\r\n dispatch({\r\n payload,\r\n fieldFileId,\r\n type: FIELDS_ACTIONS.UPDATE_FIELD_DOCUMENT,\r\n notification: {\r\n [NOTIFICATION_VARIANTS.SUCCESS]: 'File was successfully updated',\r\n },\r\n });\r\n\r\n return payload;\r\n};\r\n\r\nexport const receiveProjectFiles = (fieldFiles) => ({\r\n payload: fieldFiles,\r\n type: FIELDS_ACTIONS.GET_FIELD_DOCUMENTS,\r\n});\r\n\r\nexport const receiveProjectFile = (fieldFile) => ({\r\n payload: fieldFile,\r\n type: FIELDS_ACTIONS.GET_FIELD_DOCUMENT,\r\n});\r\n","import { Field } from 'formik';\r\nimport { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Collection } from 'immutable';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport SaveIcon from '@material-ui/icons/GetApp';\r\nimport { useMemo, memo, useCallback } from 'react';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport {\r\n IconButton,\r\n InputAdornment,\r\n Link,\r\n Typography,\r\n} from '@material-ui/core';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport { required } from 'utils/validation.util';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { EMPTY_MAP, Format, ProjectPermission } from 'app/app.constants';\r\nimport EditableTableRowFormik from 'app/components/form/formik/EditableTableRowFormik';\r\nimport TableRowTextFieldFormik from 'app/components/form/formik/TableRowTextFieldFormik';\r\n\r\nconst FieldDocumentsTable = ({\r\n fieldId,\r\n updateFile,\r\n deleteFile,\r\n downloadFile,\r\n noItemsMessage,\r\n documents = EMPTY_MAP,\r\n hasUploadDocumentPermission,\r\n downloadWellboreFile,\r\n downloadProjectFile,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 5,\r\n Header: 'Name',\r\n accessor: (document) => document.get('name', null),\r\n Cell: ({ row, value }) => {\r\n if (!hasUploadDocumentPermission) return value;\r\n\r\n return !row.original.get('projectId') &&\r\n !row.original.get('wellboreId') ? (\r\n \r\n {row.original.get('extension')}\r\n \r\n ),\r\n }}\r\n />\r\n ) : (\r\n \r\n {row.original.get('fullName')}\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Category',\r\n accessor: (document) => document.get('categoryName', null),\r\n Cell: ({ value }) => {\r\n return {value};\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Source',\r\n accessor: (document) => document.get('projectId', null),\r\n Cell: ({ row }) => {\r\n return row.original.get('projectId') ? (\r\n \r\n {`Project ${row.original.get('projectId')}`}\r\n \r\n ) : !row.original.get('projectId') &&\r\n row.original.get('wellboreId') ? (\r\n \r\n {`Wellbore ${row.original.get('wellboreId')}`}\r\n \r\n ) : null;\r\n },\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Uploaded',\r\n accessor: (document) =>\r\n formatDate(document.get('created'), Format.time),\r\n },\r\n {\r\n id: 'actions',\r\n disableSortBy: true,\r\n Header: ,\r\n Footer: ,\r\n Cell: ({ row }) => (\r\n \r\n {!row.original.get('projectId') &&\r\n !row.original.get('wellboreId') && (\r\n \r\n deleteFile(row.original.get('fileId'))}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n {!row.original.get('projectId') &&\r\n !row.original.get('wellboreId') ? (\r\n \r\n downloadFile(row.original.get('fileId'), row.original)\r\n }\r\n >\r\n \r\n \r\n ) : row.original.get('projectId') ? (\r\n \r\n downloadProjectFile(\r\n row.original.get('projectId'),\r\n row.original.get('fileId'),\r\n row.original,\r\n )\r\n }\r\n >\r\n \r\n \r\n ) : (\r\n \r\n downloadWellboreFile(\r\n row.original.get('wellboreId'),\r\n row.original.get('fileId'),\r\n row.original,\r\n )\r\n }\r\n >\r\n \r\n \r\n )}\r\n \r\n {!row.original.get('projectId') &&\r\n !row.original.get('wellboreId') && (\r\n \r\n \r\n \r\n )}\r\n \r\n ),\r\n },\r\n ],\r\n [\r\n deleteFile,\r\n downloadFile,\r\n hasUploadDocumentPermission,\r\n fieldId,\r\n downloadProjectFile,\r\n downloadWellboreFile,\r\n ],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => ,\r\n [updateFile],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nFieldDocumentsTable.propTypes = {\r\n documents: PropTypes.instanceOf(Collection),\r\n};\r\n\r\nexport default compose(memo)(FieldDocumentsTable);\r\n","import { compose } from 'redux';\r\nimport { useEffect, useCallback, useMemo, useState } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Grid } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport {\r\n getSummarizedDataStateFromState,\r\n getAvailableFileCategoriesFromState,\r\n getCurrentUserFromState,\r\n getAllOrganizationsFromState,\r\n} from 'app/app.selectors';\r\nimport {\r\n EMPTY_SET,\r\n ProjectPermission,\r\n MAX_UPLOAD_FILE_SIZE,\r\n} from 'app/app.constants';\r\nimport { FIELDS_ACTIONS } from 'features/fields/fields.constants';\r\nimport {\r\n deleteFile,\r\n downloadFile,\r\n onLoad,\r\n onUnload,\r\n updateFile,\r\n uploadFiles,\r\n} from 'features/fields/fieldDocuments.actions';\r\nimport { setFile } from 'app/app.actions';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { Fab } from 'app/components/withTooltip';\r\nimport UploadDocumentModal from 'app/components/UploadDocumentModal';\r\nimport HasProjectPermission from 'app/components/HasProjectPermission';\r\nimport { useProjectPermissions } from 'app/hooks/authorization/useProjectPermissions';\r\nimport { getFieldDocumentsFromState } from 'features/fields/field.selectors';\r\nimport FieldDocumentsTable from 'features/fields/documents/FieldDocumentsTable';\r\nimport { DOCUMENTS_ACTIONS } from 'features/projects/documents/documents.constants';\r\nimport { WELLBORE_FILE_ACTIONS } from 'features/wells/wellboreFiles.constants';\r\nimport { downloadFile as downloadProjectFile } from 'features/projects/documents/documents.actions';\r\nimport { downloadFile as downloadWellboreFile } from 'features/wells/wellboreFiles.actions';\r\nimport DocumentsCategoryFilter from 'features/projects/documents/newDocumentsContainer/components/DocumentsCategoryFilter';\r\nimport { ALTUS_ORGANIZATION_CODE } from 'app/hooks/useIsInternalCategoryToDisplay/constants';\r\n\r\nconst FieldDocumentsContainer = ({\r\n classes,\r\n dataState,\r\n fieldId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchDropFiles,\r\n dispatchDeleteFile,\r\n dispatchUpdateFile,\r\n dispatchUploadFiles,\r\n dispatchDownloadFile,\r\n dispatchDownloadWellboreFile,\r\n dispatchDownloadProjectFile,\r\n}) => {\r\n useHeader({ subTitle: breadcrumb });\r\n\r\n const user = useSelector(getCurrentUserFromState);\r\n const availableOrganizations = useSelector(getAllOrganizationsFromState);\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(fieldId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [fieldId, dispatchOnLoad, dispatchOnUnload]);\r\n\r\n const { hasPermission: hasUploadDocumentPermission } = useProjectPermissions(\r\n ProjectPermission.UPLOAD_DOCUMENTS,\r\n );\r\n\r\n const [filter, setFilter] = useState(EMPTY_SET);\r\n const [filterApplied, setFilterApplied] = useState(false);\r\n\r\n const documents = useSelector(getFieldDocumentsFromState);\r\n const documentCategories = useSelector(getAvailableFileCategoriesFromState);\r\n\r\n const filteredDocuments = useMemo(() => {\r\n if (filter.isEmpty()) return documents;\r\n\r\n return documents.filter((document) => {\r\n const documentCategory = documentCategories.get(document.get('category'));\r\n\r\n return filter.includes(documentCategory);\r\n });\r\n }, [filter, documents, documentCategories]);\r\n\r\n useEffect(() => {\r\n if (filteredDocuments?.isEmpty()) {\r\n setFilter(EMPTY_SET);\r\n }\r\n\r\n // clear filter if deleting the last document to prevent a filter being active when no documents match it\r\n }, [filteredDocuments]);\r\n\r\n const downloadFile = useCallback(\r\n (fieldFileId, file) => dispatchDownloadFile(fieldId, fieldFileId, file),\r\n [fieldId, dispatchDownloadFile],\r\n );\r\n\r\n const downloadWellboreFile = useCallback(\r\n (wellboreId, wellboreFileId, wellboreFile) =>\r\n dispatchDownloadWellboreFile(\r\n wellboreId,\r\n wellboreFileId,\r\n wellboreFile,\r\n fieldId,\r\n ),\r\n [dispatchDownloadWellboreFile, fieldId],\r\n );\r\n\r\n const downloadProjectFile = useCallback(\r\n (projectId, fileId, file) =>\r\n dispatchDownloadProjectFile(projectId, fileId, file),\r\n [dispatchDownloadProjectFile],\r\n );\r\n\r\n const deleteFile = useCallback(\r\n (fieldFileId) => dispatchDeleteFile(fieldId, fieldFileId),\r\n [fieldId, dispatchDeleteFile],\r\n );\r\n\r\n const updateFile = useCallback(\r\n (file) => dispatchUpdateFile(fieldId, file.fieldFileId, file),\r\n [fieldId, dispatchUpdateFile],\r\n );\r\n\r\n const uploadFiles = useCallback(\r\n (files) => dispatchUploadFiles(fieldId)(files),\r\n [fieldId, dispatchUploadFiles],\r\n );\r\n\r\n const onDrop = useCallback(\r\n (files) => dispatchDropFiles(files),\r\n [dispatchDropFiles],\r\n );\r\n\r\n const clearFilters = () => {\r\n setFilter(EMPTY_SET);\r\n setFilterApplied(false);\r\n };\r\n\r\n const { isDragActive, getRootProps, getInputProps, open, fileRejections } =\r\n useDropzone({\r\n onDrop,\r\n noClick: true,\r\n noKeyboard: true,\r\n maxSize: MAX_UPLOAD_FILE_SIZE,\r\n noDrag: !hasUploadDocumentPermission,\r\n });\r\n\r\n const checkIfUserOrgIsAltus = (user, organizations) => {\r\n const currentOrg = Array.from(organizations).find(\r\n (org) => org.get('id') === user.get('organizationId'),\r\n );\r\n\r\n if (currentOrg?.get('code') === ALTUS_ORGANIZATION_CODE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n FIELDS_ACTIONS.DOWNLOAD_FIELD_DOCUMENT,\r\n FIELDS_ACTIONS.UPDATE_FIELD_DOCUMENT,\r\n FIELDS_ACTIONS.UPDATE_FIELD_DOCUMENT,\r\n FIELDS_ACTIONS.DELETE_FIELD_DOCUMENT,\r\n FIELDS_ACTIONS.FIELD_DOCUMENTS_PAGE_LOADED,\r\n WELLBORE_FILE_ACTIONS.DOWNLOAD_WELLBORE_FILE,\r\n DOCUMENTS_ACTIONS.DOWNLOAD_PROJECT_FILE,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchDropFiles: setFile,\r\n dispatchDeleteFile: deleteFile,\r\n dispatchUpdateFile: updateFile,\r\n dispatchUploadFiles: uploadFiles,\r\n dispatchDownloadFile: downloadFile,\r\n dispatchDownloadWellboreFile: downloadWellboreFile,\r\n dispatchDownloadProjectFile: downloadProjectFile,\r\n};\r\n\r\nconst styles = (theme) => ({\r\n create: {\r\n zIndex: 2,\r\n position: 'absolute',\r\n bottom: theme.spacing(4),\r\n right: theme.spacing(4),\r\n },\r\n dragOver: {\r\n opacity: '0.3',\r\n border: '5px gray dashed',\r\n },\r\n basePageChildren: {\r\n flexDirection: 'row',\r\n paddingTop: theme.spacing(2.25),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(FieldDocumentsContainer);\r\n","import { useLocation } from 'react-router';\r\nimport routePaths from 'app/routePaths';\r\nimport { BasePageHeader } from 'altus-ui-components';\r\nimport { NavTabsContainer } from 'altus-ui-components';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\n\r\nconst IntegrityManagementContainer = ({ Icon, breadcrumb, routes }) => {\r\n const location = useLocation();\r\n\r\n const newRoutes = [\r\n routePaths.settings.integrity.new,\r\n routePaths.settings.integrity.newRule,\r\n routePaths.settings.integrity.newCategory,\r\n ];\r\n\r\n const isAddNewRoute = newRoutes.includes(location.pathname);\r\n\r\n return (\r\n <>\r\n {!isAddNewRoute && }\r\n {!isAddNewRoute && }\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IntegrityManagementContainer;\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Typography, Box } from '@material-ui/core';\r\n\r\nconst RiskScoreCard = ({ score, date, classes }) => {\r\n return (\r\n <>\r\n \r\n Risk Score: {score}\r\n \r\n \r\n Date: {date}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n bottomLine: {\r\n borderBottomWidth: theme.spacing(0.1),\r\n borderBottomStyle: 'solid',\r\n borderBottomColor: theme.palette.secondary.mainLight,\r\n marginBottom: theme.spacing(1),\r\n },\r\n riskScore: {\r\n margin: theme.spacing(1),\r\n marginTop: theme.spacing(3),\r\n },\r\n date: {\r\n color: theme.palette.secondary.light,\r\n margin: theme.spacing(1),\r\n marginBottom: theme.spacing(3),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(RiskScoreCard);\r\n","import React from 'react';\r\n\r\nimport { Container } from '@material-ui/core';\r\nimport RiskScoreCard from './RiskScoreCard';\r\nimport moment from 'moment';\r\nimport { Format } from 'app/app.constants';\r\n\r\nconst RiskMatrixHistoryDrawerContent = ({ riskTrendScores }) => {\r\n return (\r\n <>\r\n \r\n {riskTrendScores.reverse().map((risk) => {\r\n const date = moment(risk.totalScoreDate).format(Format.date_dayfirst);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RiskMatrixHistoryDrawerContent;\r\n","import React from 'react';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nconst RiskMatrixHistoryDrawerHeader = ({ toggleDrawer }) => {\r\n return (\r\n \r\n \r\n \r\n History\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RiskMatrixHistoryDrawerHeader;\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Drawer, CircularProgress, Typography } from '@material-ui/core';\r\n\r\nimport { getIntegrityManagementWellRiskScoresTrendState } from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport { loadIntegrityManagementRiskTrendScoresForWell } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\nimport RiskMatrixHistoryDrawerContent from 'features/wells/integrity/history/RiskMatrixHistoryDrawerContent';\r\nimport RiskMatrixHistoryDrawerHeader from 'features/wells/integrity/history/RiskMatrixHistoryDrawerHeader';\r\n\r\nconst RiskMatrixHistoryDrawer = ({\r\n isOpen,\r\n toggleDrawer,\r\n classes,\r\n dispatchLoadIntegrityRiskScoreTrendForWell,\r\n riskTrendScores,\r\n externalWellboreId,\r\n}) => {\r\n useEffect(() => {\r\n if (externalWellboreId) {\r\n dispatchLoadIntegrityRiskScoreTrendForWell(externalWellboreId);\r\n }\r\n }, [dispatchLoadIntegrityRiskScoreTrendForWell, externalWellboreId]);\r\n\r\n useEffect(() => {\r\n if (riskTrendScores && riskTrendScores.size > 0) {\r\n }\r\n }, [riskTrendScores]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {riskTrendScores ? (\r\n riskTrendScores.size > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n History Not Available\r\n \r\n \r\n )\r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n background: theme.palette.background.default,\r\n },\r\n drawerHeader: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1000,\r\n background: theme.palette.background.default,\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n drawerContent: {\r\n overflowY: 'scroll-y',\r\n },\r\n circularProgress: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { externalWellboreId }) => {\r\n if (!externalWellboreId) {\r\n return { riskTrendScores: null };\r\n }\r\n return {\r\n riskTrendScores: getIntegrityManagementWellRiskScoresTrendState(\r\n state,\r\n externalWellboreId,\r\n ),\r\n };\r\n },\r\n {\r\n dispatchLoadIntegrityRiskScoreTrendForWell:\r\n loadIntegrityManagementRiskTrendScoresForWell,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(RiskMatrixHistoryDrawer);\r\n","import { useLocation } from 'react-router';\r\nimport { BasePageHeader } from 'altus-ui-components';\r\nimport { NavTabsContainer } from 'altus-ui-components';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport { Grid, Button } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport HistoryIcon from '@material-ui/icons/Restore';\r\nimport RiskMatrixHistoryDrawer from './history/RiskMatrixHistoryDrawer';\r\nimport { useToggle } from 'altus-hooks';\r\nimport { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport { loadIntegrityManagementIntegritiesForWell } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\n\r\nconst WellboreIntegrityContainer = ({\r\n Icon,\r\n breadcrumb,\r\n routes,\r\n classes,\r\n wellboreId,\r\n dispatchLoadIntegrityManagementForWell,\r\n}) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n const [externalWellboreId, setExternalWellboreId] = useState(null);\r\n const [showHistoryDrawer, toggleHistoryDrawer] = useToggle();\r\n const location = useLocation();\r\n const hideTabs =\r\n location.pathname.includes('attachments') ||\r\n location.pathname.includes('history');\r\n\r\n useEffect(() => {\r\n if (wellbore.get('externalWellboreExternalId')) {\r\n dispatchLoadIntegrityManagementForWell(\r\n wellbore.get('externalWellboreExternalId'),\r\n );\r\n setExternalWellboreId(wellbore.get('externalWellboreExternalId'));\r\n }\r\n }, [dispatchLoadIntegrityManagementForWell, wellbore]);\r\n\r\n return (\r\n <>\r\n {!hideTabs && (\r\n \r\n \r\n \r\n \r\n \r\n {showHistoryDrawer && (\r\n \r\n )}\r\n toggleHistoryDrawer()}\r\n >\r\n \r\n History\r\n \r\n \r\n \r\n )}\r\n {!hideTabs && }\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n },\r\n historyButton: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.lighter,\r\n color: theme.palette.secondary.dark,\r\n '&:hover': {\r\n backgroundColor: theme.palette.secondary.light,\r\n color: theme.palette.common.white,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(() => {}, {\r\n dispatchLoadIntegrityManagementForWell:\r\n loadIntegrityManagementIntegritiesForWell,\r\n }),\r\n withStyles(styles),\r\n)(WellboreIntegrityContainer);\r\n","import { Link } from 'react-router-dom';\r\nimport { Grid, Button, Typography } from '@material-ui/core';\r\n\r\nimport routePaths from 'app/routePaths';\r\n\r\nconst AddIntegrityHeader = ({ title }) => {\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AddIntegrityHeader;\r\n","import * as Yup from 'yup';\r\nimport isNil from 'lodash/isNil';\r\nimport { useFormikContext } from 'formik';\r\nimport React, { useMemo, useState, useCallback, useEffect } from 'react';\r\n\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { Table } from 'altus-ui-components';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport TextField from 'app/components/form/TextFieldV2';\r\nimport { IntegrityForm } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\n\r\nconst totalWeightSchema = Yup.number().test(\r\n 'total-weight',\r\n 'Total weight needs to be exactly 100%',\r\n (total) => Math.abs(total - 100) < 0.000001,\r\n);\r\n\r\n// flatten this list of integrities to only show the categories under parentId\r\nconst IntegritiesTableWeight = ({\r\n classes,\r\n integrities,\r\n setIntegrities,\r\n integrityType,\r\n}) => {\r\n // for total error\r\n const [error, setError] = useState('');\r\n\r\n const { setFieldValue } = useFormikContext();\r\n\r\n useEffect(() => {\r\n if (integrityType) {\r\n setFieldValue([IntegrityForm.INTEGRITY_TYPE], integrityType);\r\n }\r\n // eslint-disable-next-line\r\n }, [integrityType]);\r\n\r\n const validateTotalWeight = useCallback((integrities) => {\r\n const totalWeight = integrities.reduce(\r\n (acc, integrity) => acc + (integrity.weight || 0),\r\n 0,\r\n );\r\n\r\n try {\r\n totalWeightSchema.validateSync(totalWeight.toFixed(2));\r\n setError(''); // Clear any error if valid\r\n } catch (validationError) {\r\n setError(validationError.message); // Set specific error message\r\n }\r\n\r\n // moved these lines here to solve the Submit button activation issue\r\n // set formik fields\r\n setFieldValue([IntegrityForm.RELATED_INTEGRITIES], integrities);\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const updateWeightValueOnBlur = useCallback(\r\n (integrityId, newWeight) => {\r\n // update\r\n const updatedIntegrities = integrities.map((integrity) =>\r\n integrity.integrityId === integrityId\r\n ? { ...integrity, weight: parseFloat(newWeight) || 0 }\r\n : integrity,\r\n );\r\n setIntegrities(updatedIntegrities);\r\n validateTotalWeight(updatedIntegrities);\r\n\r\n // new integrity weight\r\n if (isNil(integrityId)) {\r\n setFieldValue([IntegrityForm.WEIGHT], newWeight);\r\n }\r\n },\r\n [integrities, setIntegrities, validateTotalWeight, setFieldValue],\r\n );\r\n\r\n const totalWeight = useMemo(() => {\r\n return integrities?.reduce(\r\n (acc, integrity) => acc + (integrity.weight || 0),\r\n 0,\r\n );\r\n }, [integrities]);\r\n\r\n useEffect(() => {\r\n validateTotalWeight(integrities);\r\n }, [integrities, validateTotalWeight]);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 9,\r\n id: 'name',\r\n accessor: (integrity) => integrity.title,\r\n },\r\n {\r\n xs: 3,\r\n id: 'edit',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n // Local state for input value\r\n const [localWeight, setLocalWeight] = useState(integrity.weight || 0);\r\n\r\n return (\r\n \r\n \r\n setLocalWeight(e.target.value)}\r\n onBlur={() =>\r\n updateWeightValueOnBlur(integrity.integrityId, localWeight)\r\n }\r\n inputProps={{\r\n min: 0,\r\n max: 100,\r\n step: '0.01', // Allow decimals\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === '-' || e.key === 'e' || e.key === 'E') {\r\n e.preventDefault();\r\n }\r\n }}\r\n className={classes.root}\r\n />\r\n \r\n \r\n % {/* Append percentage sign */}\r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [updateWeightValueOnBlur, classes],\r\n );\r\n\r\n return (\r\n \r\n {error && (\r\n \r\n {error} {`Current total weight ${totalWeight.toFixed(2)} %`}\r\n \r\n )}\r\n\r\n {/* Table */}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Total Weight:\r\n \r\n \r\n \r\n \r\n {totalWeight.toFixed(2)}%\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n errorText: {\r\n color: theme.palette.error.main,\r\n marginTop: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegritiesTableWeight);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport IntegritiesTableWeight from 'features/settings/integrityManagement/integrities/IntegritiesTableWeight';\r\n\r\nconst IntegrityWeightContainer = ({\r\n integrities,\r\n setIntegrities,\r\n integrityType,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default IntegrityWeightContainer;\r\n","import { useMemo, useEffect } from 'react';\r\nimport isNil from 'lodash/isNil';\r\nimport { useFormikContext } from 'formik';\r\n\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nimport { Table } from 'altus-ui-components';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport {\r\n INTEGRITY_TYPE_SELECTOR,\r\n IntegrityForm as IntegrityFormFields,\r\n RULE_TYPES_ENUM,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\n\r\nconst getSubRows = (row, integrityType) => {\r\n if (row?.integrityDetailType === RULE_TYPES_ENUM.RULE_PICKLIST) return;\r\n let subRows;\r\n if (integrityType === INTEGRITY_TYPE_SELECTOR.RULE) {\r\n subRows = [...(row.categories || []), ...(row.details || [])];\r\n } else {\r\n subRows = [...(row.categories || [])];\r\n }\r\n\r\n // Check if any item in subRows also contains nested categories or details\r\n subRows.forEach((subRow) => {\r\n subRow.subRows = getSubRows(subRow);\r\n });\r\n return subRows.length > 0 ? subRows : undefined;\r\n};\r\n\r\nconst IntegritiesTableLocation = ({\r\n parentId, // id of the parent category\r\n integrities,\r\n setParentId,\r\n integrityType,\r\n}) => {\r\n const { setFieldValue } = useFormikContext();\r\n\r\n useEffect(() => {\r\n setFieldValue([IntegrityFormFields.PARENT_ID], parentId);\r\n }, [parentId, setFieldValue]);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n id: 'expander',\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return null;\r\n\r\n return (\r\n \r\n {row.isExpanded ? : }\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 9,\r\n Header: '',\r\n id: 'name',\r\n accessor: (category) => category.title,\r\n Cell: ({ row, value }) => (\r\n \r\n {value}\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n id: 'add',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n // hide if selection of position was made\r\n if (!isNil(parentId) || !integrity.integrityType) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {/* try putting it into a formik field OR create a hidden one */}\r\n setParentId(integrity.integrityId)}\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 2,\r\n id: 'remove',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (!isNil(integrity.integrityId)) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n setParentId(null)}>\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [parentId, setParentId],\r\n );\r\n\r\n const buildExpandedState = (items, expanded = {}, parentIndex = '') => {\r\n items.forEach((item, index) => {\r\n const rowIndex = parentIndex ? `${parentIndex}.${index}` : `${index}`;\r\n expanded[rowIndex] = true;\r\n\r\n const subRows = getSubRows(item);\r\n if (subRows) {\r\n buildExpandedState(subRows, expanded, rowIndex);\r\n }\r\n });\r\n return expanded;\r\n };\r\n\r\n const initialState = useMemo(() => {\r\n const expandedRows = buildExpandedState(integrities || []);\r\n return { expanded: expandedRows };\r\n // eslint-disable-next-line\r\n }, [integrities]);\r\n\r\n return (\r\n getSubRows(row, integrityType)}\r\n items={integrities || EMPTY_LIST}\r\n columns={columns}\r\n useGlobalFilter={false}\r\n noItemsMessage=\"There are no integrities for this organization.\"\r\n initialState={initialState} // Added the initialState prop to set expanded rows\r\n />\r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegritiesTableLocation);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport IntegritiesTableLocation from 'features/settings/integrityManagement/integrities/IntegritiesTableLocation';\r\n\r\nconst IntegrityLocationContainer = ({\r\n integrities,\r\n parentId,\r\n setParentId,\r\n integrityType,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default IntegrityLocationContainer;\r\n","// Generic MultiStepForm Component\r\nimport React, { useState } from 'react';\r\nimport {\r\n Stepper,\r\n Step,\r\n StepLabel,\r\n Button,\r\n Grid,\r\n MenuItem,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport { Formik, Form } from 'formik';\r\nimport {\r\n IntegrityForm,\r\n INTEGRITY_TYPE_SELECTOR,\r\n} from '../helpers/integrityManagement.constants';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\n\r\nconst MultiStepForm = ({\r\n initialValues,\r\n validationSchemas,\r\n onSubmit,\r\n renderStepContent,\r\n classes,\r\n integrityType,\r\n setIntegrityType,\r\n isEdit = false,\r\n isParentIdSet,\r\n submitForm,\r\n}) => {\r\n const steps = ['Information', 'Location', 'Weight'];\r\n const [activeStep, setActiveStep] = useState(0);\r\n const isLastStep = activeStep === steps.length - 1;\r\n\r\n const handleNext = (values, actions) => {\r\n if (isLastStep) {\r\n onSubmit(values);\r\n } else {\r\n setActiveStep((prevStep) => prevStep + 1);\r\n actions.setTouched({});\r\n }\r\n actions.setSubmitting(false);\r\n };\r\n\r\n const handleBack = () => {\r\n setActiveStep((prevStep) => prevStep - 1);\r\n };\r\n\r\n return (\r\n \r\n \r\n {({ isValid, isSubmitting, dirty }) => (\r\n
    \r\n \r\n {steps.map((label) => (\r\n \r\n {label}\r\n \r\n ))}\r\n \r\n {/* Disable selection when editiing */}\r\n {activeStep === 0 && !isEdit && (\r\n \r\n setIntegrityType(e.target.value)}\r\n fullWidth\r\n >\r\n Rule\r\n \r\n Category\r\n \r\n \r\n \r\n )}\r\n\r\n {renderStepContent(activeStep)}\r\n\r\n \r\n \r\n \r\n {isLastStep ? (isEdit ? 'Update' : 'Submit') : 'Next'}\r\n \r\n \r\n
    \r\n )}\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default MultiStepForm;\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field } from 'formik';\r\nimport RadioGroupFieldFormik from 'app/components/form/formik/RadioGroupFieldFormik';\r\nimport {\r\n BOOLEAN_DATA_VALUES_ENUM,\r\n IntegrityForm,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\n\r\nconst BooleanRuleDataFormComponent = () => {\r\n const options = [BOOLEAN_DATA_VALUES_ENUM.YES, BOOLEAN_DATA_VALUES_ENUM.NO];\r\n\r\n return (\r\n \r\n \r\n {({ form, ...formik }) => {\r\n formik.field.onChange = (e) => {\r\n form.setFieldValue(IntegrityForm.VALUE, Number(e.target.value));\r\n };\r\n return (\r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default BooleanRuleDataFormComponent;\r\n","import TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport React from 'react';\r\nimport { IntegrityForm } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field } from 'formik';\r\n\r\nconst NumericRuleDataFormComponent = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NumericRuleDataFormComponent;\r\n","import React, { useEffect } from 'react';\r\nimport { IntegrityForm } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useFormikContext, Field } from 'formik';\r\n\r\nconst GeographyRuleDataFormComponent = () => {\r\n const { setFieldValue } = useFormikContext();\r\n\r\n useEffect(() => {\r\n // Set SRID value once on mount\r\n setFieldValue(`${IntegrityForm.VALUE}.${IntegrityForm.SRID}`, 4326);\r\n }, [setFieldValue]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default GeographyRuleDataFormComponent;\r\n","import React from 'react';\r\nimport { IntegrityForm } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field } from 'formik';\r\nimport DateTimePickerFormik from 'app/components/form/formik/DateTimePickerFormik';\r\n\r\nconst TimeRuleDataFormComponent = () => {\r\n return (\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TimeRuleDataFormComponent;\r\n","import React from 'react';\r\nimport { FieldArray, Field } from 'formik';\r\nimport {\r\n TextField,\r\n Button,\r\n Grid,\r\n IconButton,\r\n MenuItem,\r\n} from '@material-ui/core';\r\nimport CancelIcon from '@material-ui/icons/Cancel';\r\nimport { IntegrityForm as FormFields } from '../helpers/integrityManagement.constants';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst PicklistOptionsFormComponent = ({ classes }) => {\r\n return (\r\n \r\n \r\n {({ push, remove, form }) => (\r\n \r\n {form.values[FormFields.PICKLIST_OPTIONS].map((_option, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {[...Array(11).keys()].map((value) => (\r\n \r\n {value}\r\n \r\n ))}\r\n \r\n \r\n \r\n remove(index)}>\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n push({ title: '', score: '' })}\r\n className={classes.addButton}\r\n >\r\n + Picklist Option\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n addButton: {\r\n color: theme.palette.primary.newLight,\r\n },\r\n pickListContainer: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(PicklistOptionsFormComponent);\r\n","import React from 'react';\r\nimport { IntegrityForm as FormFields } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useFormikContext } from 'formik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { List } from 'immutable';\r\n\r\nconst SelectPicklistOptionComponent = () => {\r\n const { values } = useFormikContext();\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n const picklistObject = values[FormFields.PICKLIST_OPTIONS];\r\n const items = picklistObject.map((picklist) => ({\r\n id: picklist.integrityDetailId,\r\n code: picklist.integrityId,\r\n name: picklist.title,\r\n }));\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SelectPicklistOptionComponent;\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport { Field, useFormikContext } from 'formik';\r\nimport {\r\n IntegrityForm as FormFields,\r\n RULE_TYPES_ENUM,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport SwitchFormik from 'app/components/form/formik/SwitchFormik';\r\nimport BooleanRuleDataFormComponent from 'features/settings/integrityManagement/rules/BooleanRuleDataFormComponent';\r\nimport NumericRuleDataFormComponent from 'features/settings/integrityManagement/rules/NumericRuleDataFormComponent';\r\nimport GeographyRuleDataFormComponent from 'features/settings/integrityManagement/rules/GeographyRuleDataFormComponent';\r\nimport TimeRuleDataFormComponent from 'features/settings/integrityManagement/rules/TimeRuleDataFormComponent';\r\nimport React from 'react';\r\nimport PicklistOptionsFormComponent from 'features/settings/integrityManagement/rules/PicklistOptionsFormComponent';\r\nimport SelectPicklistOptionComponent from './SelectPicklistOptionComponent';\r\nimport { useEffect } from 'react';\r\n\r\nconst DefaultRuleValueWrapper = ({ isFromWell = false }) => {\r\n const { values } = useFormikContext();\r\n const selectedRuleType = values[FormFields.RULE_TYPE];\r\n const defaultValueCheck = values[FormFields.DEFAULT_VALUE_CHECKED];\r\n\r\n useEffect(\r\n () => {\r\n if (!defaultValueCheck) values[FormFields.VALUE] = null;\r\n },\r\n // eslint-disable-next-line\r\n [defaultValueCheck],\r\n );\r\n\r\n const ruleTypeComponents = React.useMemo(\r\n () => ({\r\n [RULE_TYPES_ENUM.RULE_BOOL]: {\r\n CustomComponent: BooleanRuleDataFormComponent,\r\n },\r\n [RULE_TYPES_ENUM.RULE_DOUBLE]: {\r\n CustomComponent: NumericRuleDataFormComponent,\r\n },\r\n [RULE_TYPES_ENUM.RULE_GEOGRAPHY]: {\r\n CustomComponent: GeographyRuleDataFormComponent,\r\n },\r\n [RULE_TYPES_ENUM.RULE_TIME]: {\r\n CustomComponent: TimeRuleDataFormComponent,\r\n },\r\n [RULE_TYPES_ENUM.RULE_PICKLIST]: {\r\n CustomComponent: isFromWell\r\n ? SelectPicklistOptionComponent\r\n : PicklistOptionsFormComponent,\r\n },\r\n }),\r\n // eslint-disable-next-line\r\n [],\r\n );\r\n\r\n const SelectedComponent = ruleTypeComponents[selectedRuleType] || {\r\n CustomComponent: () => null,\r\n };\r\n return (\r\n <>\r\n {Number(selectedRuleType) !== RULE_TYPES_ENUM.RULE_PICKLIST && (\r\n \r\n {!isFromWell && (\r\n \r\n {({ form, ...formik }) => {\r\n formik.field.onChange = (e) => {\r\n form.setFieldValue(\r\n FormFields.DEFAULT_VALUE_CHECKED,\r\n Number(e.target.checked),\r\n );\r\n };\r\n return (\r\n <>\r\n \r\n Default Value\r\n \r\n );\r\n }}\r\n \r\n )}\r\n \r\n )}\r\n {defaultValueCheck ||\r\n Number(selectedRuleType) === RULE_TYPES_ENUM.RULE_PICKLIST ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default DefaultRuleValueWrapper;\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field, useFormikContext } from 'formik';\r\n\r\nimport {\r\n INTEGRITY_MANAGEMENT_RULE_TYPES,\r\n IntegrityForm as FormFields,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport DefaultRuleValueWrapper from 'features/settings/integrityManagement/rules/DefaultRuleValueWrapper';\r\n\r\nconst IntegrityRuleInformationContainer = ({\r\n integrityManagementRuleTypes = INTEGRITY_MANAGEMENT_RULE_TYPES,\r\n onTitleChange,\r\n}) => {\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const handleTitleChange = (event) => {\r\n const newTitle = event.target.value;\r\n\r\n setFieldValue(FormFields.TITLE, newTitle);\r\n onTitleChange(newTitle);\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IntegrityRuleInformationContainer;\r\n","import React from 'react';\r\nimport { IntegrityForm as FormFields } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field, useFormikContext } from 'formik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nconst IntegrityCategoryInformationContainer = ({ onTitleChange }) => {\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const handleTitleChange = (event) => {\r\n const newTitle = event.target.value;\r\n\r\n setFieldValue(FormFields.TITLE, newTitle);\r\n onTitleChange(newTitle);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IntegrityCategoryInformationContainer;\r\n","import * as yup from 'yup';\r\nimport moment from 'moment';\r\n\r\nimport {\r\n IntegrityForm,\r\n RULE_TYPES_ENUM,\r\n INTEGRITY_TYPE_ENUM,\r\n} from './integrityManagement.constants';\r\n\r\nexport const IntegrityRulesYupValidator = [\r\n // validate information\r\n yup.object().shape({\r\n [IntegrityForm.TITLE]: yup.string().required('Rule Title is required'), // always required\r\n\r\n // validate integrity type sel.\r\n [IntegrityForm.INTEGRITY_TYPE]: yup\r\n .number()\r\n .required('Integrity Type is required'), // Ensure INTEGRITY_TYPE exists\r\n\r\n // if it is a rule validate that it is selected as well\r\n [IntegrityForm.RULE_TYPE]: yup\r\n .string()\r\n .nullable() // Allow the field to be nullable\r\n .when(IntegrityForm.INTEGRITY_TYPE, {\r\n is: (integrityType) =>\r\n integrityType === Number(INTEGRITY_TYPE_ENUM.RULE), // Validate RULE_TYPE only when INTEGRITY_TYPE is 'RULE'\r\n then: yup\r\n .string()\r\n .required('Rule Type is required')\r\n .test(\r\n 'not-null',\r\n 'Rule Type must not be null or empty',\r\n (value) => value != null && value.trim() !== '',\r\n ), // Check for non-null/empty\r\n otherwise: yup.string().notRequired(),\r\n }),\r\n\r\n // validate picklist\r\n [IntegrityForm.PICKLIST_OPTIONS]: yup\r\n .array()\r\n .when([IntegrityForm.RULE_TYPE, IntegrityForm.INTEGRITY_TYPE], {\r\n is: (ruleType, integrityType) =>\r\n Number(ruleType) === Number(RULE_TYPES_ENUM.RULE_PICKLIST) &&\r\n Number(integrityType) === Number(INTEGRITY_TYPE_ENUM.RULE),\r\n then: yup\r\n .array()\r\n .of(\r\n yup.object().shape({\r\n title: yup.string().required('Picklist Title is required'),\r\n score: yup\r\n .number()\r\n .required('Picklist Score is required')\r\n .min(0, 'Score must be at least 0')\r\n .max(10, 'Score must not exceed 10'),\r\n }),\r\n )\r\n .min(1, 'At least one valid Picklist Option is required')\r\n .test(\r\n 'non-empty-object',\r\n 'Each Picklist Option must have a title and score',\r\n (options) =>\r\n options.every(\r\n (option) => option.title && option.score !== undefined,\r\n ),\r\n ),\r\n otherwise: yup.array().notRequired(), // Skip validation if conditions aren't met\r\n }),\r\n\r\n // validate datetime\r\n [IntegrityForm.VALUE]: yup\r\n .string()\r\n .nullable() // Allow the field to be nullable\r\n .when(\r\n [\r\n IntegrityForm.RULE_TYPE,\r\n IntegrityForm.INTEGRITY_TYPE,\r\n IntegrityForm.DEFAULT_VALUE_CHECKED,\r\n ],\r\n {\r\n is: (ruleType, integrityType, defaultValueChecked) =>\r\n Number(ruleType) === Number(RULE_TYPES_ENUM.RULE_TIME) &&\r\n Number(integrityType) === Number(INTEGRITY_TYPE_ENUM.RULE) &&\r\n defaultValueChecked,\r\n then: yup\r\n .string()\r\n .required('Date and time are required')\r\n .test('valid-date', 'Invalid date format', (value) => {\r\n return moment(value, 'YYYY/MM/DD HH:mm', true).isValid();\r\n }),\r\n otherwise: yup.string().notRequired(),\r\n },\r\n ),\r\n\r\n [IntegrityForm.VALUE]: yup\r\n .object()\r\n .nullable() // Allow the field to be nullable\r\n .when(\r\n [\r\n IntegrityForm.RULE_TYPE,\r\n IntegrityForm.INTEGRITY_TYPE,\r\n IntegrityForm.DEFAULT_VALUE_CHECKED,\r\n ],\r\n {\r\n is: (ruleType, integrityType, defaultValueChecked) =>\r\n Number(ruleType) === Number(RULE_TYPES_ENUM.RULE_GEOGRAPHY) &&\r\n Number(integrityType) === Number(INTEGRITY_TYPE_ENUM.RULE) &&\r\n defaultValueChecked,\r\n then: yup\r\n .object()\r\n .shape({\r\n [IntegrityForm.LATITUDE]: yup\r\n .string()\r\n .required('Latitude is required'),\r\n [IntegrityForm.LONGITUDE]: yup\r\n .string()\r\n .required('Longitude is required'),\r\n })\r\n .required(''),\r\n otherwise: yup.object().notRequired(),\r\n },\r\n ),\r\n }),\r\n\r\n // validate location\r\n yup.object().shape({\r\n [IntegrityForm.PARENT_ID]: yup.string().required('Location is required'),\r\n }),\r\n\r\n // validate weight\r\n yup.object().shape({\r\n [IntegrityForm.WEIGHT]: yup\r\n .number()\r\n .positive('Weight must be a positive number')\r\n .required('Weight is required'),\r\n }),\r\n];\r\n\r\nexport const IntegrityCategoriesYupValidator = [\r\n // validate information\r\n yup.object().shape({\r\n [IntegrityForm.TITLE]: yup.string().required('Title is required'),\r\n }),\r\n // validate location\r\n yup.object().shape({\r\n [IntegrityForm.PARENT_ID]: yup.string().required('Location is required'),\r\n }),\r\n // validate weight\r\n yup.object().shape({\r\n // we need to check is all in the same category weighting 100 % this will include new category\r\n [IntegrityForm.RELATED_INTEGRITIES]: yup\r\n .mixed()\r\n .test('total-weight', 'Total weight needs to be exactly 100%', (list) => {\r\n // Sum weights in the Immutable.js List\r\n const totalWeight = list?.reduce(\r\n (sum, item) => sum + (item.weight || 0),\r\n 0,\r\n );\r\n return Math.abs(totalWeight - 100) < 0.000001;\r\n }),\r\n }),\r\n];\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport { connect } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport { useDispatch } from 'react-redux';\r\nimport React, { useState, useEffect } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport IntegrityWeightContainer from 'features/settings/integrityManagement/integrities/IntegrityWeightContainer';\r\nimport IntegrityLocationContainer from 'features/settings/integrityManagement/integrities/IntegrityLocationContainer';\r\nimport {\r\n addNewIntegrityManagementIntegrity,\r\n updateIntegrityManagementIntegrity,\r\n loadIntegrityManagementIntegrities,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\nimport {\r\n IntegrityForm as IntegrityFormFields,\r\n INTEGRITY_MANAGEMENT_ACTIONS,\r\n INTEGRITY_TYPE_SELECTOR,\r\n RULE_TYPES_ENUM,\r\n RISK_PRINCIPLE_TYPES,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\n\r\nimport { getIntegrityManagementIntegritiesFromStateByRiskPrinciple } from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport MultiStepForm from 'features/settings/integrityManagement/integrities/MultiStepForm';\r\nimport IntegrityRuleInformationContainer from 'features/settings/integrityManagement/integrities/IntegrityRuleInformationContainer';\r\nimport IntegrityCategoryInformationContainer from 'features/settings/integrityManagement/integrities/IntegrityCategoryInformationContainer';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nimport {\r\n hasEmptyIdItem,\r\n addItemToCategory,\r\n removeEmptyIdItems,\r\n removeItemsByIntegrityId,\r\n getCombinedTopLevelEntries,\r\n updateTitleForNullId,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.collections';\r\nimport {\r\n IntegrityRulesYupValidator,\r\n IntegrityCategoriesYupValidator,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.validations';\r\nimport routePaths from 'app/routePaths';\r\n\r\n// this is a temporary solution to test is it working it will be unified with AddRuleOrCategoryContainer\r\nconst AddIntegrityContent = ({\r\n classes,\r\n editIntegrity,\r\n filteredIntegrities,\r\n dispatchLoadIntegrityManagementIntegrities,\r\n riskPrincipleType,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const [parentId, setParentId] = useState(null);\r\n const [newCategory, setNewCategory] = useState(null);\r\n const [integrities, setIntegrities] = useState(EMPTY_LIST);\r\n const [parentCategoriesAndDetials, setParentCategoriesAndDetails] =\r\n useState(EMPTY_LIST);\r\n const [integrityType, setIntegrityType] = useState(null);\r\n const [validationSchemas, setValidationSchemas] = useState(\r\n IntegrityRulesYupValidator,\r\n );\r\n const [submitForm, setSubmitForm] = useState(false);\r\n\r\n const initialFormValues = {\r\n [IntegrityFormFields.TITLE]: '',\r\n [IntegrityFormFields.PARENT_ID]: '',\r\n [IntegrityFormFields.WEIGHT]: 0,\r\n [IntegrityFormFields.SCORE]: null,\r\n [IntegrityFormFields.RULE_TYPE]: null,\r\n [IntegrityFormFields.DEFAULT_VALUE_CHECKED]: true,\r\n [IntegrityFormFields.VALUE]: null,\r\n [IntegrityFormFields.PICKLIST_OPTIONS]: [{ title: '', score: '' }],\r\n [IntegrityFormFields.RELATED_INTEGRITIES]: [],\r\n [IntegrityFormFields.INTEGRITY_TYPE]: INTEGRITY_TYPE_SELECTOR.RULE,\r\n };\r\n\r\n const [formInitialValues, setFormInitialValues] = useState(initialFormValues);\r\n\r\n useEffect(() => {\r\n if (integrityType === INTEGRITY_TYPE_SELECTOR.RULE) {\r\n setValidationSchemas(IntegrityRulesYupValidator);\r\n } else if (integrityType === INTEGRITY_TYPE_SELECTOR.CATEGORY) {\r\n setValidationSchemas(IntegrityCategoriesYupValidator);\r\n }\r\n // eslint-disable-next-line\r\n }, [integrityType]);\r\n\r\n // sooo we will use empty id to dinstinguish for now we can change the approach or generate new one\r\n const setParentIdAndFilterParentCategories = (\r\n newParentId,\r\n initialIntegrity = null,\r\n ) => {\r\n // set states\r\n setParentId(newParentId);\r\n\r\n var newIntegrities = integrities.map((item) => cloneDeep(item));\r\n\r\n // if it is not null/undefined add new item\r\n if (!isNil(newParentId)) {\r\n const newIntegrityObj = {\r\n ...newCategory,\r\n [IntegrityFormFields.INTEGRITY_ID]: null,\r\n [IntegrityFormFields.TITLE]: !isNil(initialIntegrity)\r\n ? initialIntegrity[IntegrityFormFields.TITLE]\r\n : newCategory[IntegrityFormFields.TITLE],\r\n [IntegrityFormFields.PARENT_ID]: newParentId,\r\n [IntegrityFormFields.WEIGHT]: !isNil(initialIntegrity)\r\n ? initialIntegrity[IntegrityFormFields.WEIGHT]\r\n : newCategory[IntegrityFormFields.WEIGHT],\r\n };\r\n setNewCategory(newIntegrityObj);\r\n\r\n // first add new item i.e. category on specified position\r\n addItemToCategory(newIntegrities, newParentId, newIntegrityObj);\r\n\r\n // then flatten the data we want to send to weight table\r\n let adjustedCategoriesAndDetails = getCombinedTopLevelEntries(\r\n newIntegrities,\r\n newParentId,\r\n );\r\n setParentCategoriesAndDetails(adjustedCategoriesAndDetails);\r\n } else {\r\n if (hasEmptyIdItem(integrities)) {\r\n newIntegrities = removeEmptyIdItems(integrities);\r\n }\r\n setParentCategoriesAndDetails(EMPTY_LIST);\r\n }\r\n setIntegrities(newIntegrities);\r\n };\r\n\r\n useEffect(() => {\r\n dispatchLoadIntegrityManagementIntegrities();\r\n }, [dispatchLoadIntegrityManagementIntegrities]);\r\n\r\n useEffect(() => {\r\n if (!filteredIntegrities.isEmpty()) {\r\n // for edit function\r\n if (!isNil(editIntegrity)) {\r\n const filteredIntegritiesWithoutEditIntegrity =\r\n removeItemsByIntegrityId(\r\n filteredIntegrities,\r\n editIntegrity.integrityId,\r\n );\r\n setIntegrities(filteredIntegritiesWithoutEditIntegrity);\r\n } // for adding\r\n else {\r\n setIntegrities(filteredIntegrities);\r\n }\r\n }\r\n }, [filteredIntegrities, editIntegrity]);\r\n\r\n // for validation\r\n const handleTitleChange = (newTitle) => {\r\n if (isNil(newCategory)) {\r\n setNewCategory({\r\n [IntegrityFormFields.INTEGRITY_ID]: null,\r\n [IntegrityFormFields.TITLE]: newTitle,\r\n [IntegrityFormFields.PARENT_ID]: '',\r\n [IntegrityFormFields.WEIGHT]: 0,\r\n });\r\n } else {\r\n const integrityCopy = cloneDeep(newCategory);\r\n integrityCopy[IntegrityFormFields.TITLE] = newTitle;\r\n setNewCategory(integrityCopy);\r\n\r\n // location is already set\r\n if (!isNil(parentId)) {\r\n var updatedIntegrities = updateTitleForNullId(integrities, newTitle);\r\n var updatedParentCategoriesAndDetails = updateTitleForNullId(\r\n parentCategoriesAndDetials,\r\n newTitle,\r\n );\r\n\r\n // set the state man\r\n setIntegrities(updatedIntegrities);\r\n setParentCategoriesAndDetails(updatedParentCategoriesAndDetails);\r\n }\r\n }\r\n };\r\n\r\n // mapping inital data for editing\r\n const mapInitialDataToFormValues = (initialData) => {\r\n if (isNil(initialData) || integrities.isEmpty()) return initialFormValues;\r\n\r\n // set is it a rule or category\r\n setIntegrityType(\r\n initialData.integrityType === INTEGRITY_TYPE_SELECTOR.CATEGORY\r\n ? INTEGRITY_TYPE_SELECTOR.CATEGORY\r\n : INTEGRITY_TYPE_SELECTOR.RULE,\r\n );\r\n\r\n // set title to prepare new object\r\n const initialIntegrity = {\r\n [IntegrityFormFields.INTEGRITY_ID]: null,\r\n [IntegrityFormFields.TITLE]: initialData.title || '',\r\n [IntegrityFormFields.PARENT_ID]: initialData.parentId || '',\r\n [IntegrityFormFields.WEIGHT]: initialData.weight || 0,\r\n [IntegrityFormFields.SCORE]: initialData.score || null,\r\n [IntegrityFormFields.PICKLIST_OPTIONS]: [{ title: '', score: '' }],\r\n [IntegrityFormFields.INTEGRITY_TYPE]:\r\n initialData.integrityType || INTEGRITY_TYPE_SELECTOR.RULE,\r\n };\r\n\r\n // functionallity only for the rules\r\n if (!initialData.integrityType && initialData.integrityDetailType) {\r\n // to get this we need to see the rule type if any\r\n initialIntegrity[IntegrityFormFields.RULE_TYPE] =\r\n initialData.integrityDetailType;\r\n\r\n // not sure in picklist option type\r\n initialIntegrity[IntegrityFormFields.DEFAULT_VALUE_CHECKED] =\r\n !isNil(initialData.value) ?? false;\r\n\r\n if (initialData.integrityDetailType === RULE_TYPES_ENUM.RULE_BOOL) {\r\n // just converting to 0 and 1 instead of bool\r\n initialIntegrity[IntegrityFormFields.VALUE] = isNil(initialData.value)\r\n ? null\r\n : Number(initialData.value);\r\n }\r\n // this is only for picklist\r\n else if (\r\n initialData.integrityDetailType === RULE_TYPES_ENUM.RULE_PICKLIST\r\n ) {\r\n initialIntegrity[IntegrityFormFields.PICKLIST_OPTIONS] =\r\n initialData.details.length === 0\r\n ? [{ id: '', title: '', score: '' }]\r\n : initialData.details.map(({ integrityId, title, score }) => ({\r\n id: integrityId,\r\n title,\r\n score,\r\n }));\r\n\r\n initialIntegrity[IntegrityFormFields.DEFAULT_VALUE_CHECKED] = true;\r\n\r\n initialIntegrity[IntegrityFormFields.VALUE] = null;\r\n }\r\n // for everything else\r\n else {\r\n initialIntegrity[IntegrityFormFields.DEFAULT_VALUE_CHECKED] =\r\n !isNil(initialData.value) ?? false;\r\n\r\n initialIntegrity[IntegrityFormFields.VALUE] = initialData.value || null;\r\n }\r\n }\r\n\r\n // this fill perform the preparation for tables - location and weight\r\n setParentIdAndFilterParentCategories(\r\n initialData.parentId,\r\n initialIntegrity,\r\n );\r\n\r\n return initialIntegrity;\r\n };\r\n\r\n useEffect(() => {\r\n if (\r\n editIntegrity &&\r\n !filteredIntegrities.isEmpty() &&\r\n !integrities.isEmpty()\r\n ) {\r\n const updatedValues = mapInitialDataToFormValues(editIntegrity);\r\n setFormInitialValues(updatedValues);\r\n } else {\r\n setFormInitialValues(initialFormValues); // Reset to initial values if not editing\r\n }\r\n // eslint-disable-next-line\r\n }, [editIntegrity, filteredIntegrities]);\r\n\r\n const getStepContent = (step) => {\r\n switch (step) {\r\n case 0:\r\n if (integrityType === INTEGRITY_TYPE_SELECTOR.RULE) {\r\n return (\r\n \r\n );\r\n } else if (integrityType === INTEGRITY_TYPE_SELECTOR.CATEGORY) {\r\n return (\r\n \r\n );\r\n }\r\n break;\r\n case 1:\r\n return (\r\n \r\n );\r\n case 2:\r\n return (\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n // we need to send a list in the end\r\n const handleSubmitForm = (formValues) => {\r\n if (parentId) {\r\n // check is this the first category to be added on this level\r\n setSubmitForm((prevFormState) => !prevFormState);\r\n if (\r\n parentCategoriesAndDetials ||\r\n parentCategoriesAndDetials !== EMPTY_LIST\r\n ) {\r\n // remove the id null one here\r\n const relatedIntegrities = parentCategoriesAndDetials\r\n .filter((item) => !isNil(item.integrityId))\r\n .map((item) => {\r\n return item.integrityType === INTEGRITY_TYPE_SELECTOR.CATEGORY\r\n ? {\r\n integrityId: item.integrityId,\r\n weight: String(item.weight), // TODO check does it must be string\r\n }\r\n : {\r\n integrityId: item.integrityId,\r\n integrityDetailId: item.integrityDetailId,\r\n weight: String(item.weight),\r\n };\r\n })\r\n .toJS();\r\n // returnn only id and weight\r\n formValues[IntegrityFormFields.RELATED_INTEGRITIES] =\r\n relatedIntegrities;\r\n }\r\n\r\n const createOrUpdate = async () => {\r\n if (isNil(editIntegrity)) {\r\n await dispatch(addNewIntegrityManagementIntegrity(formValues));\r\n } else {\r\n formValues[IntegrityFormFields.INTEGRITY_ID] =\r\n editIntegrity.integrityId;\r\n await dispatch(updateIntegrityManagementIntegrity(formValues));\r\n }\r\n\r\n riskPrincipleType === RISK_PRINCIPLE_TYPES.WELL_CONSEQUENCE\r\n ? history.push(routePaths.settings.integrity.consequence)\r\n : history.push(routePaths.settings.integrity.root);\r\n\r\n setSubmitForm((prevFormState) => !prevFormState);\r\n };\r\n\r\n // create or update\r\n createOrUpdate();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n gridBackground: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'flex-end',\r\n justifyContent: 'flex-end',\r\n width: '100%',\r\n },\r\n gridBackgroundMobile: {\r\n position: 'absolute',\r\n bottom: 0,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n },\r\n backButtonIcon: {\r\n color: theme.palette.primary.newLight,\r\n width: '90%',\r\n height: '90%',\r\n },\r\n statusHeader: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n paddingLeft: theme.spacing(2),\r\n paddingTop: theme.spacing(2),\r\n },\r\n containedButton: {\r\n minHeight: theme.spacing(8),\r\n minWidth: theme.spacing(20),\r\n marginBottom: theme.spacing(2),\r\n },\r\n containedButtonGrey: {\r\n minHeight: theme.spacing(8),\r\n minWidth: theme.spacing(20),\r\n marginBottom: theme.spacing(2),\r\n backgroundColor: theme.palette.secondary.lighter,\r\n color: theme.palette.secondary.dark,\r\n },\r\n stepper: {\r\n backgroundColor: '#303030', // TODO check what color is this in theme\r\n },\r\n bottomButtonContainer: {\r\n paddingTop: theme.spacing(4),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state, { riskPrincipleType }) => ({\r\n filteredIntegrities:\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple(\r\n state,\r\n riskPrincipleType,\r\n ),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES,\r\n ),\r\n }),\r\n {\r\n dispatchLoadIntegrityManagementIntegrities:\r\n loadIntegrityManagementIntegrities,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(AddIntegrityContent);\r\n","import React from 'react';\r\nimport { Grid, Box } from '@material-ui/core';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { RISK_PRINCIPLE_TYPES } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport AddIntegrityHeader from 'features/settings/integrityManagement/integrities/AddIntegrityHeader';\r\nimport AddIntegrityContent from 'features/settings/integrityManagement/integrities/AddIntegrityContent';\r\n\r\nconst AddIntegrityContainer = () => {\r\n const location = useLocation();\r\n const {\r\n riskPrincipleType = RISK_PRINCIPLE_TYPES.LIKELIHOOD_OF_FAILURE,\r\n editIntegrity = undefined,\r\n } = location.state || {};\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AddIntegrityContainer;\r\n","import { Link } from 'react-router-dom';\r\n\r\nimport { Grid } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { Button } from 'app/components/withTooltip';\r\n\r\nconst IntegrityActions = ({ classes, riskPrincipleType }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegrityActions);\r\n","import { useMemo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\nimport { Grid, Typography, IconButton } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport {\r\n RULE_TYPES_ENUM,\r\n getRuleTypeString,\r\n INTEGRITY_TYPE_ENUM,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\n\r\nconst getSubRows = (row) => {\r\n const subRows = [...(row.categories || []), ...(row.details || [])];\r\n\r\n // Check if any item in subRows also contains nested categories or details\r\n subRows.forEach((subRow) => {\r\n subRow.subRows = getSubRows(subRow);\r\n });\r\n\r\n const picklistSubRow = subRows.filter(\r\n (row) =>\r\n row.score && row.integrityDetailType === RULE_TYPES_ENUM.RULE_PICKLIST,\r\n );\r\n\r\n return !picklistSubRow.length && subRows.length > 0 ? subRows : undefined;\r\n};\r\n\r\nconst IntegritiesTable = ({\r\n integrities,\r\n deleteIntegrity,\r\n riskPrincipleType,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 2,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (integrity) => integrity.title,\r\n Cell: ({ row, value }) => (\r\n \r\n {value}\r\n \r\n ),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Weight',\r\n accessor: (integrity) => integrity.weight,\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (!integrity) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {`${integrity.weight}%` || '-'}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Type',\r\n accessor: (integrity) => integrity.integrityType,\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n // only rules have integrityDetailType\r\n if (!integrity || !integrity.integrityDetailType) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {getRuleTypeString(integrity.integrityDetailType) || '-'}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'edit',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (\r\n !integrity &&\r\n (!integrity.integrityType || !integrity.integrityRuleType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n integrity.integrityType &&\r\n integrity.integrityType === INTEGRITY_TYPE_ENUM.RISK_PRINCIPLE\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'delete',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (\r\n !integrity &&\r\n (!integrity.integrityType || !integrity.integrityRuleType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n integrity.integrityType &&\r\n integrity.integrityType === INTEGRITY_TYPE_ENUM.RISK_PRINCIPLE\r\n ) {\r\n return null;\r\n }\r\n\r\n // when calling deleteIntegrity check if there are any underlying categories and or rules - create a popup as well\r\n\r\n return (\r\n \r\n \r\n deleteIntegrity(\r\n integrity.integrityId,\r\n integrity.integrityType,\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n // eslint-disable-next-line\r\n [deleteIntegrity],\r\n );\r\n\r\n const buildExpandedState = (items, expanded = {}, parentIndex = '') => {\r\n items.forEach((item, index) => {\r\n const rowIndex = parentIndex ? `${parentIndex}.${index}` : `${index}`;\r\n expanded[rowIndex] = true;\r\n\r\n const subRows = getSubRows(item);\r\n if (subRows) {\r\n buildExpandedState(subRows, expanded, rowIndex);\r\n }\r\n });\r\n return expanded;\r\n };\r\n\r\n const initialState = useMemo(() => {\r\n const expandedRows = buildExpandedState(integrities || []);\r\n return { expanded: expandedRows };\r\n // eslint-disable-next-line\r\n }, [integrities]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegritiesTable);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n getIntegrityManagementIntegritiesFromState,\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport {\r\n INTEGRITY_TYPE_ENUM,\r\n RISK_PRINCIPLE_TYPES,\r\n INTEGRITY_MANAGEMENT_ACTIONS,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport {\r\n deleteIntegrityManagementIntegrity,\r\n loadIntegrityManagementIntegrities,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\nimport { Grid } from '@material-ui/core';\r\nimport IntegrityActions from 'features/settings/integrityManagement/integrities/IntegrityActions';\r\nimport IntegritiesTable from 'features/settings/integrityManagement/integrities/IntegritiesTable';\r\nimport routePaths from 'app/routePaths';\r\n\r\nconst RiskPrincipleContainer = ({\r\n classes,\r\n dataState,\r\n riskPrincipleType,\r\n filteredIntegrities,\r\n dispatchLoadIntegrityManagementIntegrities,\r\n dispatchDeleteIntegrityManagementIntegrity,\r\n}) => {\r\n useEffect(() => {\r\n dispatchLoadIntegrityManagementIntegrities();\r\n }, [dispatchLoadIntegrityManagementIntegrities]);\r\n\r\n const deleteIntegrity = (integrityId, integrityType) => {\r\n if (integrityType !== INTEGRITY_TYPE_ENUM.RISK_PRINCIPLE) {\r\n dispatchDeleteIntegrityManagementIntegrity(integrityId);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableContainer: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const { location } = ownProps;\r\n\r\n // Determine riskPrincipleType based on location.pathname\r\n let riskPrincipleType = null;\r\n if (location?.pathname?.includes(routePaths.settings.integrity.consequence)) {\r\n riskPrincipleType = RISK_PRINCIPLE_TYPES.WELL_CONSEQUENCE;\r\n } else {\r\n riskPrincipleType = RISK_PRINCIPLE_TYPES.LIKELIHOOD_OF_FAILURE;\r\n }\r\n\r\n return {\r\n riskPrincipleType, // Add to props\r\n filteredIntegrities:\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple(\r\n state,\r\n riskPrincipleType,\r\n ),\r\n integrities: getIntegrityManagementIntegritiesFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES,\r\n INTEGRITY_MANAGEMENT_ACTIONS.DELETE_INTEGRITY_MANAGEMENT_INTEGRITY,\r\n ),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n dispatchLoadIntegrityManagementIntegrities:\r\n loadIntegrityManagementIntegrities,\r\n dispatchDeleteIntegrityManagementIntegrity:\r\n deleteIntegrityManagementIntegrity,\r\n};\r\n\r\nexport default compose(\r\n withRouter,\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(RiskPrincipleContainer);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field } from 'formik';\r\nimport RadioGroupFieldFormik from 'app/components/form/formik/RadioGroupFieldFormik';\r\nimport {\r\n BOOLEAN_DATA_VALUES_ENUM,\r\n IntegrityForm,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { useFormikContext } from 'formik';\r\nimport { useEffect } from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useRef } from 'react';\r\nimport { debounce } from 'lodash';\r\n\r\nconst BooleanRuleDataFormComponent = ({ classes, updateValue }) => {\r\n const { values } = useFormikContext();\r\n const isFirstRender = useRef(true);\r\n const previousValue = useRef(values[IntegrityForm.VALUE]);\r\n\r\n const options = [BOOLEAN_DATA_VALUES_ENUM.YES, BOOLEAN_DATA_VALUES_ENUM.NO];\r\n\r\n const debouncedUpdateValue = useRef(\r\n debounce((newValues) => {\r\n updateValue(newValues);\r\n }, 500),\r\n ).current;\r\n\r\n useEffect(() => {\r\n if (isFirstRender.current) {\r\n isFirstRender.current = false;\r\n return;\r\n }\r\n\r\n if (previousValue.current !== values[IntegrityForm.VALUE]) {\r\n previousValue.current = values[IntegrityForm.VALUE];\r\n debouncedUpdateValue(values);\r\n }\r\n // eslint-disable-next-line\r\n }, [values]);\r\n\r\n return (\r\n \r\n \r\n {({ form, ...formik }) => {\r\n formik.field.onChange = (e) => {\r\n form.setFieldValue(IntegrityForm.VALUE, Number(e.target.value));\r\n };\r\n return (\r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n group: {\r\n display: 'flow',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(BooleanRuleDataFormComponent);\r\n","import React, { useEffect } from 'react';\r\nimport { IntegrityForm } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useFormikContext, Field } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst GeographyRuleDataFormComponent = ({ classes }) => {\r\n const { values, setFieldValue } = useFormikContext();\r\n\r\n useEffect(() => {\r\n setFieldValue(IntegrityForm.VALUE, {\r\n lat: values.value.x,\r\n long: values.value.y,\r\n });\r\n // eslint-disable-next-line\r\n }, [setFieldValue]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n gridStyle: {\r\n display: 'flex',\r\n },\r\n fieldStyle: {\r\n marginRight: theme.spacing(0.5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(GeographyRuleDataFormComponent);\r\n","import TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport React from 'react';\r\nimport { IntegrityForm } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Field } from 'formik';\r\nimport { useEffect } from 'react';\r\nimport { useFormikContext } from 'formik';\r\nimport { debounce } from 'lodash';\r\nimport { useMemo } from 'react';\r\n\r\nconst NumericRuleDataFormComponent = ({ updateValue, integrity }) => {\r\n const { values } = useFormikContext();\r\n\r\n const debouncedUpdateValue = useMemo(() => {\r\n return debounce((newValues) => {\r\n updateValue(newValues);\r\n }, 500);\r\n }, [updateValue]);\r\n\r\n useEffect(() => {\r\n if (integrity.value !== values.value && values.value.length !== 0)\r\n debouncedUpdateValue(values);\r\n\r\n // eslint-disable-next-line\r\n }, [values]);\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NumericRuleDataFormComponent;\r\n","import React from 'react';\r\nimport { IntegrityForm as FormFields } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useFormikContext } from 'formik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { List } from 'immutable';\r\nimport { useEffect } from 'react';\r\n\r\nconst SelectPicklistOptionComponent = ({ updateValue, integrity, xs = 6 }) => {\r\n const { values } = useFormikContext();\r\n const getId = (item) => item.id;\r\n const getName = (item) => item.name;\r\n const picklistObject = values[FormFields.PICKLIST_OPTIONS];\r\n const items = picklistObject.map((picklist) => ({\r\n id: picklist.integrityDetailId,\r\n code: picklist.integrityId,\r\n name: picklist.title,\r\n }));\r\n\r\n useEffect(() => {\r\n if (integrity.value.id !== values.value) updateValue(values);\r\n // eslint-disable-next-line\r\n }, [values]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SelectPicklistOptionComponent;\r\n","import React, { useEffect } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Field, useFormikContext } from 'formik';\r\nimport DateTimePickerFormik from 'app/components/form/formik/DateTimePickerFormik';\r\nimport { IntegrityForm } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { debounce } from 'lodash';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n dateTimePicker: {\r\n marginBottom: theme.spacing(0),\r\n },\r\n}));\r\n\r\nconst TimeRuleDataFormComponent = ({ integrity, updateValue, xs = 6 }) => {\r\n const classes = useStyles();\r\n const { values } = useFormikContext();\r\n\r\n const isValidDateFormat = (dateStr) => {\r\n const dateRegex = /^\\d{4}\\/\\d{2}\\/\\d{2} \\d{2}:\\d{2}$/;\r\n return dateRegex.test(dateStr);\r\n };\r\n\r\n const debouncedUpdateValue = debounce((newValues) => {\r\n if (isValidDateFormat(newValues.value)) {\r\n updateValue(newValues);\r\n }\r\n }, 500);\r\n\r\n useEffect(() => {\r\n if (integrity.value !== values.value) debouncedUpdateValue(values);\r\n // eslint-disable-next-line\r\n }, [values]);\r\n\r\n return (\r\n \r\n \r\n {({ form, ...formik }) => (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TimeRuleDataFormComponent;\r\n","import React from 'react';\r\n\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nimport BooleanRuleDataFormComponent from 'features/wells/components/BooleanRuleDataFormComponent';\r\nimport GeographyRuleDataFormComponent from 'features/wells/components/GeographyRuleDataFormComponent';\r\nimport NumericRuleDataFormComponent from 'features/wells/components/NumericRuleDataFormComponent';\r\nimport SelectPicklistOptionComponent from 'features/wells/components/SelectPicklistOptionComponent';\r\nimport TimeRuleDataFormComponent from 'features/wells/components/TimeRuleDataFormComponent';\r\n\r\nimport { Formik } from 'formik';\r\n\r\nimport {\r\n IntegrityForm as RuleFormFields,\r\n RULE_TYPES_ENUM,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\n\r\nimport * as Yup from 'yup';\r\nimport { isNil } from 'lodash';\r\nimport { useDispatch } from 'react-redux';\r\nimport { addNewIntegrityManagementWellData } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\n\r\nimport EditIcon from '@material-ui/icons/Create';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst WellTableValueComponent = ({\r\n classes,\r\n wellboreId,\r\n integrity,\r\n currentlyEditingId,\r\n setCurrentlyEditingId,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const isEditing = currentlyEditingId === integrity.integrityId;\r\n\r\n const getXsValue = (ruleType) => {\r\n switch (ruleType) {\r\n case RULE_TYPES_ENUM.RULE_PICKLIST:\r\n return 11;\r\n case RULE_TYPES_ENUM.RULE_TIME:\r\n return 11;\r\n default:\r\n return 7;\r\n }\r\n };\r\n\r\n const xsValue = getXsValue(integrity.integrityDetailType);\r\n const updateValue = (values) => {\r\n dispatch(addNewIntegrityManagementWellData(wellboreId, values, () => { }));\r\n };\r\n\r\n const FormSchema = Yup.object().shape({\r\n [RuleFormFields.VALUE]: Yup.mixed()\r\n .nullable()\r\n .when(RuleFormFields.RULE_TYPE, {\r\n is: RULE_TYPES_ENUM.RULE_DOUBLE,\r\n then: Yup.number().required('Numeric value is required'),\r\n otherwise: Yup.mixed().when(RuleFormFields.RULE_TYPE, {\r\n is: RULE_TYPES_ENUM.RULE_GEOGRAPHY,\r\n then: Yup.object({\r\n x: Yup.number().required('Longitude is required'),\r\n y: Yup.number().required('Latitude is required'),\r\n }).nullable(),\r\n otherwise: Yup.mixed().when(RuleFormFields.RULE_TYPE, {\r\n is: RULE_TYPES_ENUM.PICK_LIST,\r\n then: Yup.number().required('Pick list selection is required'),\r\n otherwise: Yup.string().required('Required').nullable(),\r\n }),\r\n }),\r\n }),\r\n });\r\n\r\n const displayValueByType = () => {\r\n if (integrity.integrityDetailType === RULE_TYPES_ENUM.RULE_GEOGRAPHY) {\r\n return `${integrity?.value?.x}, ${integrity?.value?.y}`;\r\n }\r\n if (integrity.integrityDetailType === RULE_TYPES_ENUM.RULE_BOOL) {\r\n if (integrity.value === true) {\r\n return 'Yes';\r\n }\r\n if (integrity.value === false) {\r\n return 'No';\r\n }\r\n }\r\n if (integrity.integrityDetailType === RULE_TYPES_ENUM.RULE_PICKLIST) {\r\n if (integrity.details && Array.isArray(integrity.details)) {\r\n const selectedId = integrity.value.id;\r\n const selectedDetail = integrity.details.find(\r\n (detail) => detail.integrityDetailId === selectedId,\r\n );\r\n if (selectedDetail) {\r\n return selectedDetail?.title;\r\n }\r\n return null;\r\n }\r\n }\r\n return integrity.value !== undefined && integrity.value !== null\r\n ? integrity.value.toString()\r\n : '';\r\n };\r\n\r\n const displayValue = displayValueByType();\r\n\r\n const initialFormValues = {\r\n [RuleFormFields.TITLE]: integrity.title,\r\n [RuleFormFields.INTEGRITY_ID]: integrity.integrityId,\r\n [RuleFormFields.RULE_TYPE]: integrity.integrityDetailType,\r\n [RuleFormFields.DEFAULT_VALUE_CHECKED]: true,\r\n [RuleFormFields.VALUE]:\r\n integrity.integrityDetailType === RULE_TYPES_ENUM.RULE_PICKLIST\r\n ? integrity.value?.id\r\n : integrity.integrityDetailType === RULE_TYPES_ENUM.RULE_BOOL\r\n ? isNil(integrity.value)\r\n ? null\r\n : Number(integrity.value)\r\n : integrity.value,\r\n [RuleFormFields.PICKLIST_OPTIONS]: integrity.details,\r\n };\r\n\r\n const ruleTypeComponents = {\r\n [RULE_TYPES_ENUM.RULE_BOOL]: BooleanRuleDataFormComponent,\r\n [RULE_TYPES_ENUM.RULE_DOUBLE]: NumericRuleDataFormComponent,\r\n [RULE_TYPES_ENUM.RULE_GEOGRAPHY]: GeographyRuleDataFormComponent,\r\n [RULE_TYPES_ENUM.RULE_TIME]: TimeRuleDataFormComponent,\r\n [RULE_TYPES_ENUM.RULE_PICKLIST]: SelectPicklistOptionComponent,\r\n };\r\n\r\n const SelectedComponent =\r\n ruleTypeComponents[initialFormValues[RuleFormFields.RULE_TYPE]] ||\r\n (() => null);\r\n\r\n if (!isEditing) {\r\n return (\r\n \r\n \r\n {displayValue}\r\n \r\n \r\n {\r\n setCurrentlyEditingId(integrity.integrityId);\r\n }}\r\n size=\"small\"\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n {\r\n updateValue(values);\r\n setCurrentlyEditingId(null);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {({ handleSubmit, resetForm, dirty }) => (\r\n
    \r\n \r\n \r\n { }}\r\n integrity={integrity}\r\n manualSave={true}\r\n xs={xsValue}\r\n paddingTop={0}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {\r\n resetForm();\r\n setCurrentlyEditingId(null);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n },\r\n viewContainer: {\r\n width: '100%',\r\n },\r\n viewTextContainer: {\r\n width: '90%',\r\n },\r\n text: {\r\n whiteSpace: 'normal',\r\n wordBreak: 'break-word',\r\n },\r\n editIconContainer: {\r\n width: '10%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n },\r\n formContainer: {\r\n width: '100%',\r\n },\r\n fieldContainer: {\r\n width: '80%',\r\n },\r\n actionButtonsContainer: {\r\n width: '20%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n marginBottom: theme.spacing(0.5),\r\n },\r\n});\r\n\r\n\r\nexport default withStyles(styles)(WellTableValueComponent);","import { useMemo, useState, useEffect } from 'react';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport { Grid, Typography, IconButton } from '@material-ui/core';\r\nimport ChevronRight from '@material-ui/icons/ChevronRight';\r\n\r\nimport { IconButton as NavigationIconButton } from 'app/components/withNavigation';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { INTEGRITY_TYPE_ENUM } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { toIntegrityAttachment } from 'utils/route.util';\r\nimport { List } from 'immutable';\r\nimport { toArray } from 'lodash';\r\nimport { useCallback } from 'react';\r\nimport { ArrowBack } from '@material-ui/icons';\r\nimport { Breadcrumbs, Button } from '@material-ui/core';\r\nimport WellTableValueComponent from 'features/wells/integrity/WellTableValueComponent';\r\n\r\nconst WellIntegrityTable = ({\r\n integrities,\r\n wellboreId,\r\n fieldId,\r\n externalWellboreId,\r\n classes,\r\n title,\r\n}) => {\r\n const [currentlyEditingId, setCurrentlyEditingId] = useState(null);\r\n const [pageHistory, setPageHistory] = useState([]);\r\n const [rows, setRows] = useState(List());\r\n const [breadCrumps, setBreadCrumps] = useState([\r\n title\r\n .toLowerCase()\r\n .match(\r\n /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g,\r\n )\r\n .map((x) => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase())\r\n .join(' '),\r\n ]);\r\n\r\n const nextPage = useCallback((row) => {\r\n let position = row.original.position;\r\n let title = row.original.title;\r\n setPageHistory((prevPageHistory) => [...prevPageHistory, position]);\r\n setBreadCrumps((prevBreadCrumpsHistory) => [\r\n ...prevBreadCrumpsHistory,\r\n title,\r\n ]);\r\n }, []);\r\n\r\n const goTo = (index) => {\r\n setBreadCrumps((prevBreadCrumpsHistory) =>\r\n prevBreadCrumpsHistory.slice(0, index + 1),\r\n );\r\n setPageHistory((prevPageHistory) => prevPageHistory.slice(0, index + 1));\r\n };\r\n\r\n const goBack = () => {\r\n if (pageHistory.length > 1) {\r\n setPageHistory((prevPageHistory) => prevPageHistory.slice(0, -1));\r\n setBreadCrumps((prevBreadCrumpsHistory) =>\r\n prevBreadCrumpsHistory.slice(0, -1),\r\n );\r\n }\r\n };\r\n\r\n const getTableRows = (integritiesList, index, currentIntegrity) => {\r\n if (pageHistory.length > index) {\r\n currentIntegrity = integritiesList[pageHistory[index]];\r\n index = index + 1;\r\n integritiesList = currentIntegrity?.categories;\r\n }\r\n if (pageHistory.length === index) {\r\n let integritiesListCategories = currentIntegrity?.categories.map(\r\n (category, i) => {\r\n return { ...category, position: i };\r\n },\r\n );\r\n return { ...currentIntegrity, categories: integritiesListCategories };\r\n }\r\n\r\n return getTableRows(integritiesList, index, currentIntegrity);\r\n };\r\n\r\n useEffect(\r\n () => {\r\n if (pageHistory.length === 0) {\r\n setPageHistory([...pageHistory, 0]);\r\n }\r\n if (integrities.size > 0 && pageHistory.length > 0) {\r\n let rows = getTableRows(toArray(integrities), 0, {});\r\n setRows(List([...(rows.categories || []), ...(rows.details || [])]));\r\n }\r\n },\r\n // eslint-disable-next-line\r\n [integrities, pageHistory],\r\n );\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 1,\r\n disableSortBy: true,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n if (!row.canExpand) return ;\r\n\r\n return (\r\n \r\n \r\n {row.isExpanded ? : }\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Name',\r\n accessor: (integrity) => integrity.title,\r\n },\r\n {\r\n xs: 5,\r\n Header: 'Value',\r\n accessor: (integrity) => integrity.integrityType,\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (\r\n !integrity &&\r\n (!integrity.integrityType || !integrity.integrityRuleType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n integrity.integrityType &&\r\n (integrity.integrityType === INTEGRITY_TYPE_ENUM.RISK_PRINCIPLE ||\r\n integrity.integrityType === INTEGRITY_TYPE_ENUM.CATEGORY)\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n\r\n {\r\n xs: 2,\r\n id: 'documents',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (\r\n !integrity &&\r\n (!integrity.integrityType || !integrity.integrityRuleType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n integrity.integrityType &&\r\n (integrity.integrityType === INTEGRITY_TYPE_ENUM.RISK_PRINCIPLE ||\r\n integrity.integrityType === INTEGRITY_TYPE_ENUM.CATEGORY)\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n ({integrity.noOfAttachments ?? 0})\r\n \r\n );\r\n },\r\n },\r\n {\r\n xs: 1,\r\n id: 'show',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (\r\n !integrity &&\r\n (!integrity.integrityType || !integrity.integrityRuleType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n integrity.integrityType &&\r\n integrity.integrityType === INTEGRITY_TYPE_ENUM.CATEGORY\r\n ) {\r\n return (\r\n \r\n nextPage(row)}>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (integrity.integrityDetailType && integrity.integrityDetailId) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return null;\r\n },\r\n },\r\n ],\r\n // eslint-disable-next-line\r\n [currentlyEditingId],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n }\r\n onClick={goBack}\r\n disabled={pageHistory.length <= 1} // Disable if there's no page to go back to\r\n >\r\n Back\r\n \r\n \r\n \r\n {/* Breadcrumbs */}\r\n {breadCrumps.length > 1 && (\r\n \r\n {breadCrumps.map((crumb, index) => (\r\n goTo(index)}\r\n >\r\n {crumb}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n backButtonGrid: {\r\n marginBottom: theme.spacing(2),\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n breadcrumbItem: {\r\n textDecoration: 'underline',\r\n cursor: 'pointer',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(WellIntegrityTable);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n getIntegrityManagementIntegritiesFromState,\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport {\r\n INTEGRITY_MANAGEMENT_ACTIONS,\r\n RISK_PRINCIPLE_TYPES,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { loadIntegrityManagementIntegritiesForWell } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\n\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport WellIntegrityTable from 'features/wells/integrity/WellIntegrityTable';\r\nimport { useState } from 'react';\r\nimport IntegrityRiskMatrix from 'features/wells/integrity/IntegrityRiskMatrix';\r\nimport { calculateFinalScore } from 'features/settings/integrityManagement/helpers/integrityManagement.collections';\r\n\r\n// TODO make a single component for well consequence and likelihood\r\nconst WellLikelihoodOfFailureContainer = ({\r\n classes,\r\n fieldId,\r\n dataState,\r\n wellboreId,\r\n filteredIntegrities,\r\n integrities,\r\n dispatchLoadIntegrityManagementForWell,\r\n}) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n const [externalWellboreId, setExternalWellboreId] = useState(null);\r\n const [finalScore, setFinalScore] = useState(0);\r\n\r\n useEffect(() => {\r\n if (wellbore.get('externalWellboreExternalId')) {\r\n dispatchLoadIntegrityManagementForWell(\r\n wellbore.get('externalWellboreExternalId'),\r\n );\r\n setExternalWellboreId(wellbore.get('externalWellboreExternalId'));\r\n }\r\n }, [dispatchLoadIntegrityManagementForWell, wellbore]);\r\n\r\n useEffect(() => {\r\n setFinalScore(calculateFinalScore(integrities, wellbore));\r\n }, [integrities, wellbore]);\r\n\r\n return (\r\n \r\n \r\n {externalWellboreId && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableContainer: {\r\n padding: theme.spacing(2),\r\n },\r\n matrix: {\r\n background: theme.palette.tabs.background.light,\r\n padding: theme.spacing(4),\r\n marginLeft: theme.spacing(2),\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-around',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n filteredIntegrities:\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple(\r\n state,\r\n RISK_PRINCIPLE_TYPES.LIKELIHOOD_OF_FAILURE,\r\n ),\r\n integrities: getIntegrityManagementIntegritiesFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL,\r\n ),\r\n }),\r\n {\r\n dispatchLoadIntegrityManagementForWell:\r\n loadIntegrityManagementIntegritiesForWell,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(WellLikelihoodOfFailureContainer);\r\n","import { compose } from 'redux';\r\nimport { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n getIntegrityManagementIntegritiesFromState,\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport {\r\n INTEGRITY_MANAGEMENT_ACTIONS,\r\n RISK_PRINCIPLE_TYPES,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { loadIntegrityManagementIntegritiesForWell } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\n\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport WellIntegrityTable from 'features/wells/integrity/WellIntegrityTable';\r\nimport IntegrityRiskMatrix from 'features/wells/integrity/IntegrityRiskMatrix';\r\nimport { calculateFinalScore } from 'features/settings/integrityManagement/helpers/integrityManagement.collections';\r\n\r\nconst WellConsequenceContainer = ({\r\n classes,\r\n dataState,\r\n fieldId,\r\n wellboreId,\r\n filteredIntegrities,\r\n integrities,\r\n dispatchLoadIntegrityManagementForWell,\r\n}) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n const [externalWellboreId, setExternalWellboreId] = useState(null);\r\n const [finalScore, setFinalScore] = useState(0);\r\n\r\n useEffect(() => {\r\n if (wellbore.get('externalWellboreExternalId')) {\r\n dispatchLoadIntegrityManagementForWell(\r\n wellbore.get('externalWellboreExternalId'),\r\n );\r\n setExternalWellboreId(wellbore.get('externalWellboreExternalId'));\r\n }\r\n }, [dispatchLoadIntegrityManagementForWell, wellbore]);\r\n\r\n useEffect(() => {\r\n setFinalScore(calculateFinalScore(integrities, wellbore));\r\n }, [integrities, wellbore]);\r\n\r\n return (\r\n \r\n \r\n {externalWellboreId && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableContainer: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n matrix: {\r\n background: theme.palette.tabs.background.light,\r\n padding: theme.spacing(4),\r\n marginLeft: theme.spacing(2),\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-around',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n filteredIntegrities:\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple(\r\n state,\r\n RISK_PRINCIPLE_TYPES.WELL_CONSEQUENCE,\r\n ),\r\n integrities: getIntegrityManagementIntegritiesFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL,\r\n ),\r\n }),\r\n {\r\n dispatchLoadIntegrityManagementForWell:\r\n loadIntegrityManagementIntegritiesForWell,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(WellConsequenceContainer);\r\n","import moment from 'moment';\r\nimport { useMemo } from 'react';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\nimport { IconButton } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport PreviewIcon from '@material-ui/icons/Visibility';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport { ATTACHMENTS_DATE_FORMAT } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\n\r\nconst IntegrityAttachmentsTable = ({\r\n attachments,\r\n setIsLoading,\r\n handlePreviewAttachment,\r\n}) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 6,\r\n Header: 'Document',\r\n accessor: (attachment) => attachment.fileName,\r\n },\r\n {\r\n xs: 3,\r\n Header: 'Logged date',\r\n accessor: (attachment) =>\r\n moment(attachment.reportedDate).format(ATTACHMENTS_DATE_FORMAT),\r\n },\r\n {\r\n xs: 3,\r\n id: 'edit',\r\n Cell: ({ row }) => {\r\n const integrity = row.original;\r\n\r\n if (\r\n !integrity &&\r\n (!integrity.integrityType || !integrity.integrityRuleType)\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {\r\n setIsLoading(true);\r\n handlePreviewAttachment(row.original);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n // eslint-disable-next-line\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.grey[700],\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegrityAttachmentsTable);\r\n","import React from 'react';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nconst UploadIntegrityAttachmentDrawerHeader = ({\r\n toggleDrawer,\r\n isSubmitting,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n Add file to rule\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default UploadIntegrityAttachmentDrawerHeader;\r\n","import { KeyboardDatePicker } from '@material-ui/pickers';\r\n\r\nimport { Format } from 'app/app.constants';\r\n\r\nconst DatePickerField = ({\r\n input,\r\n format,\r\n DatePickerProps,\r\n inputVariant,\r\n margin,\r\n meta,\r\n hideFormatHelperText = false,\r\n}) => {\r\n const { onChange, value } = input;\r\n\r\n const helperText = meta.error\r\n ? meta.error\r\n : hideFormatHelperText\r\n ? ''\r\n : format;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nDatePickerField.defaultProps = {\r\n margin: 'normal',\r\n format: Format.date,\r\n inputVariant: 'standard',\r\n};\r\n\r\nexport default DatePickerField;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport * as yup from 'yup';\r\nimport {\r\n Box,\r\n Tab,\r\n Tabs,\r\n Grid,\r\n List,\r\n Button,\r\n Divider,\r\n IconButton,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n Typography,\r\n Checkbox,\r\n Collapse,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport CommentIcon from '@material-ui/icons/Comment';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { EMPTY_LIST, MAX_UPLOAD_FILE_SIZE, Format } from 'app/app.constants';\r\nimport TextField from 'app/components/form/TextFieldV2';\r\nimport {\r\n ATTACHMENTS_DATE_FORMAT,\r\n INTEGRITY_ATTACHMENT_FILES_TABS,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport DatePickerField from 'app/components/form/DatePickerField';\r\nimport VisibilityIcon from '@material-ui/icons/Visibility';\r\nimport { useDispatch } from 'react-redux';\r\nimport {\r\n previewIntegrityManagementProjectDocument,\r\n previewIntegrityManagementWellboreDocument,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\nimport LoadingDimmer from 'app/components/LoadingDimmer';\r\n\r\nconst UploadIntegrityAttachmentDrawerContent = ({\r\n classes,\r\n toggleDrawer,\r\n projectFiles,\r\n wellboreFiles,\r\n handleUpdateAttachments,\r\n isSubmitting,\r\n setIsSubmitting,\r\n fieldId,\r\n}) => {\r\n const [activeTab, setActiveTab] = useState(\r\n INTEGRITY_ATTACHMENT_FILES_TABS.WELL,\r\n );\r\n\r\n const [newWellboreFiles, setNewWellboreFiles] = useState(EMPTY_LIST);\r\n const [newProjectFiles, setNewProjectFiles] = useState(EMPTY_LIST);\r\n const [uploadedFiles, setUploadedFiles] = useState([]);\r\n const [previewFile, setFile] = useState({\r\n id: '',\r\n filePath: '',\r\n fileType: '',\r\n });\r\n const [isLoading, setIsLoading] = useState(false);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n setNewWellboreFiles(wellboreFiles);\r\n }, [wellboreFiles]);\r\n\r\n useEffect(() => {\r\n setNewProjectFiles(projectFiles);\r\n }, [projectFiles]);\r\n\r\n const handleWellboreFilesCheckboxToggle = (externalId) => {\r\n setNewWellboreFiles((prev) =>\r\n prev.map((file) =>\r\n file.externalId === externalId\r\n ? { ...file, isChecked: !file.isChecked }\r\n : file,\r\n ),\r\n );\r\n };\r\n\r\n const handleProjectFilesCheckboxToggle = (projectId, externalId) => {\r\n setNewProjectFiles((prev) =>\r\n prev.updateIn([projectId], (files) =>\r\n files.map((file) =>\r\n file.externalId === externalId\r\n ? { ...file, isChecked: !file.isChecked }\r\n : file,\r\n ),\r\n ),\r\n );\r\n };\r\n\r\n // for running update of the attachments\r\n const submitUpdatedAttachments = () => {\r\n setIsSubmitting(true);\r\n const attachments = [];\r\n\r\n // get attachments from project\r\n if (!newProjectFiles.isEmpty()) {\r\n var projectAttachments = newProjectFiles\r\n .valueSeq()\r\n .flatMap((group) => group.filter((item) => item.isChecked))\r\n .toJS();\r\n if (projectAttachments && projectAttachments.length > 0) {\r\n attachments.push(...projectAttachments);\r\n }\r\n }\r\n\r\n // get attachments from well\r\n if (!newWellboreFiles.isEmpty()) {\r\n var wellboreAttachments = newWellboreFiles\r\n .filter((file) => file.isChecked === true)\r\n .toJS();\r\n if (wellboreAttachments && wellboreAttachments.length > 0) {\r\n attachments.push(...wellboreAttachments);\r\n }\r\n }\r\n\r\n handleUpdateAttachments(attachments, uploadedFiles);\r\n };\r\n\r\n // for tabz on file selection\r\n const handleTabs = (event, value) => {\r\n setActiveTab(value);\r\n };\r\n\r\n // for toggle on the list items for projects\r\n const [expand, setExpand] = useState({});\r\n\r\n const handleToggle = (projectId) => {\r\n setExpand((prev) => ({ ...prev, [projectId]: !prev[projectId] }));\r\n };\r\n\r\n // for dropzone upload\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop: (acceptedFiles) => {\r\n setUploadedFiles((prevFiles) => [\r\n ...prevFiles,\r\n ...acceptedFiles.map((file) => ({\r\n id: uuidv4(),\r\n name: file.name,\r\n reportingDate: moment(), // default\r\n content: file,\r\n })),\r\n ]);\r\n },\r\n disabled: isSubmitting,\r\n noClick: false,\r\n noKeyboard: true,\r\n maxSize: MAX_UPLOAD_FILE_SIZE,\r\n });\r\n\r\n const handleRemoveFile = (fileId) => {\r\n setUploadedFiles((prevFiles) =>\r\n prevFiles.filter((file) => file.id !== fileId),\r\n );\r\n };\r\n\r\n const [editRowId, setEditRowId] = useState(null); // which row (by ID) is currently in edit mode\r\n const [editingValues, setEditingValues] = useState({\r\n name: '',\r\n reportingDate: '',\r\n });\r\n\r\n // -- Inline edit: Start editing a particular row --\r\n const handleStartEdit = (file) => {\r\n setEditRowId(file.id);\r\n setEditingValues({\r\n name: file.name,\r\n reportingDate: moment(file.reportingDate),\r\n });\r\n };\r\n\r\n const handleEditChange = (field, value) => {\r\n setEditingValues((prev) => ({ ...prev, [field]: value }));\r\n\r\n if (field === 'reportingDate') {\r\n const newDate = moment(value);\r\n if (newDate.isValid()) {\r\n setEditingErrors((prev) => ({ ...prev, reportingDate: '' }));\r\n }\r\n }\r\n };\r\n\r\n const [editingErrors, setEditingErrors] = useState({\r\n name: '',\r\n reportingDate: '',\r\n });\r\n\r\n const handleSaveRow = async (fileId) => {\r\n try {\r\n // Validate the current editingValues using our schema\r\n await fileSchema.validate(editingValues, { abortEarly: false });\r\n\r\n // If no errors, update the file in uploadedFiles\r\n setUploadedFiles((prevFiles) =>\r\n prevFiles.map((file) => {\r\n if (file.id === fileId) {\r\n return {\r\n ...file,\r\n name: editingValues.name,\r\n reportingDate: editingValues.reportingDate,\r\n };\r\n }\r\n return file;\r\n }),\r\n );\r\n\r\n // Exit edit mode\r\n setEditRowId(null);\r\n } catch (err) {\r\n // If validation fails, Yup throws an error with `inner` containing each error\r\n if (err.inner) {\r\n const newErrors = { name: '', reportingDate: '' };\r\n err.inner.forEach((validationError) => {\r\n if (validationError.path === 'name') {\r\n newErrors.name = validationError.message;\r\n }\r\n if (validationError.path === 'reportingDate') {\r\n newErrors.reportingDate = validationError.message;\r\n }\r\n });\r\n setEditingErrors(newErrors);\r\n }\r\n }\r\n };\r\n\r\n const fileSchema = yup.object().shape({\r\n name: yup.string().required('Document name is required'),\r\n reportingDate: yup\r\n .date()\r\n .required('Reported date is required')\r\n .typeError('Must be a valid date'),\r\n });\r\n\r\n const handlePreviewChange = (item) => {\r\n if (item.externalId === previewFile.id) {\r\n setFile({\r\n id: '',\r\n filePath: '',\r\n fileType: '',\r\n });\r\n setIsLoading(false);\r\n } else if (item.projectId && item.fileId) {\r\n dispatch(\r\n previewIntegrityManagementProjectDocument(item.projectId, item.fileId),\r\n ).then((response) => {\r\n setFile({\r\n id: item.externalId,\r\n filePath: response.previewUrl,\r\n fileType: item.extension?.replace('.', ''),\r\n });\r\n setIsLoading(false);\r\n });\r\n } else if (fieldId && item.wellboreId && !item.projectId) {\r\n dispatch(\r\n previewIntegrityManagementWellboreDocument(\r\n fieldId,\r\n item.wellboreId,\r\n item.fileId,\r\n ),\r\n ).then((response) => {\r\n setFile({\r\n id: item.externalId,\r\n filePath: response.previewUrl,\r\n fileType: item.extension?.replace('.', ''),\r\n });\r\n setIsLoading(false);\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n Drag and drop the file here or\r\n \r\n }\r\n sx={{ textTransform: 'uppercase', fontWeight: 'bold' }}\r\n >\r\n Upload File\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {uploadedFiles.length ? 'Document' : null}\r\n \r\n \r\n {uploadedFiles.length ? 'Reported Date' : null}\r\n \r\n \r\n \r\n \r\n \r\n {uploadedFiles.map((file) => {\r\n const isEditing = editRowId === file.id;\r\n return (\r\n \r\n \r\n {isEditing ? (\r\n \r\n handleEditChange('name', e.target.value)\r\n }\r\n error={!!editingErrors.name}\r\n helperText={editingErrors.name}\r\n />\r\n ) : (\r\n file.name\r\n )}\r\n \r\n \r\n {isEditing ? (\r\n {\r\n const newDate = moment(date);\r\n handleEditChange('reportingDate', newDate);\r\n\r\n if (newDate.isValid()) {\r\n setEditingErrors((prev) => ({\r\n ...prev,\r\n reportingDate: '',\r\n }));\r\n }\r\n },\r\n }}\r\n meta={{\r\n error: editingErrors.reportingDate,\r\n }}\r\n format={Format.date_dayfirst}\r\n hideFormatHelperText={true}\r\n />\r\n ) : file.reportingDate ? (\r\n moment(file.reportingDate).format(\r\n Format.date_dayfirst,\r\n )\r\n ) : (\r\n 'N/A'\r\n )}\r\n \r\n \r\n \r\n {isEditing ? (\r\n handleSaveRow(file.id)}\r\n color=\"primary\"\r\n >\r\n \r\n \r\n ) : (\r\n handleStartEdit(file)}>\r\n \r\n \r\n )}\r\n handleRemoveFile(file.id)}>\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeTab === INTEGRITY_ATTACHMENT_FILES_TABS.WELL && (\r\n \r\n \r\n {newWellboreFiles.map((item) => {\r\n const labelId = `checkbox-list-label-${item.externalId}`;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n disablePadding\r\n >\r\n \r\n \r\n handleWellboreFilesCheckboxToggle(item.externalId)\r\n }\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n \r\n \r\n \r\n {\r\n setIsLoading(true);\r\n handlePreviewChange(item);\r\n }}\r\n />\r\n \r\n \r\n \r\n {isLoading && (\r\n \r\n \r\n \r\n )}\r\n {previewFile.id === item.externalId && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n \r\n )}\r\n {activeTab === INTEGRITY_ATTACHMENT_FILES_TABS.PROJECT && (\r\n \r\n \r\n {newProjectFiles.entrySeq().map(([projectId, files]) => (\r\n \r\n {/* Parent Item */}\r\n handleToggle(projectId)}>\r\n \r\n {expand[projectId] ? : }\r\n \r\n\r\n {/* Collapsible Nested List of fajlz */}\r\n \r\n \r\n {(files.toJS ? files.toJS() : files).map((file) => {\r\n const labelId = `checkbox-list-label-${projectId}-${file.externalId}`;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n sx={{ pl: 4 }} // Indentation for nested items\r\n >\r\n \r\n \r\n handleProjectFilesCheckboxToggle(\r\n projectId,\r\n file.externalId,\r\n )\r\n }\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n \r\n \r\n \r\n {\r\n setIsLoading(true);\r\n handlePreviewChange(file);\r\n }}\r\n />\r\n \r\n \r\n \r\n {isLoading && (\r\n \r\n \r\n \r\n )}\r\n {previewFile.id === file.externalId && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n documentPreview: {\r\n border: `${theme.spacing(0.125)}px solid`,\r\n resize: 'vertical',\r\n overflow: 'auto',\r\n height: theme.spacing(50),\r\n },\r\n dropzone: {\r\n border: '2px dashed grey',\r\n borderRadius: '8px',\r\n padding: '20px',\r\n textAlign: 'center',\r\n backgroundColor: '#3e4246',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n borderColor: theme.palette.primary.main,\r\n },\r\n },\r\n dragActive: {\r\n borderColor: theme.palette.primary.main,\r\n },\r\n saveIcon: {\r\n marginLeft: 'auto',\r\n },\r\n previewIcon: {\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(UploadIntegrityAttachmentDrawerContent);\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Drawer } from '@material-ui/core';\r\nimport UploadIntegrityAttachmentDrawerHeader from 'features/wells/integrity/attachments/upload/UploadIntegrityAttachmentDrawerHeader';\r\nimport UploadIntegrityAttachmentDrawerContent from 'features/wells/integrity/attachments/upload/UploadIntegrityAttachmentDrawerContent';\r\n\r\nconst UploadIntegrityAttachmentDrawer = ({\r\n isOpen,\r\n classes,\r\n attachments,\r\n toggleDrawer,\r\n projectFiles,\r\n wellboreFiles,\r\n handleUpdateAttachments,\r\n isSubmitting,\r\n setIsSubmitting,\r\n fieldId,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n background: theme.palette.background.default,\r\n },\r\n drawerHeader: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1000,\r\n background: theme.palette.background.default,\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n drawerContent: {\r\n padding: theme.spacing(2),\r\n overflowY: 'scroll-y',\r\n margin: `0 ${theme.spacing(1)}px 0 ${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(UploadIntegrityAttachmentDrawer);\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport LoadingDimmer from 'app/components/LoadingDimmer';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nconst IntegrityAttachmentsPreview = ({\r\n classes,\r\n selectedAttachment,\r\n isLoading,\r\n resetPreviewState,\r\n}) => {\r\n return (\r\n <>\r\n {isLoading && (\r\n \r\n \r\n \r\n )}\r\n {selectedAttachment.id && (\r\n <>\r\n \r\n \r\n \r\n {selectedAttachment.fileName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n header: {\r\n background: theme.palette.table.row.main,\r\n },\r\n title: {\r\n padding: theme.spacing(2),\r\n },\r\n closeIcon: {\r\n padding: theme.spacing(2),\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegrityAttachmentsPreview);\r\n","import React from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\n\r\nconst IntegrityFilterAttachmentDrawerHeader = () => {\r\n return (\r\n \r\n \r\n \r\n Filter\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IntegrityFilterAttachmentDrawerHeader;\r\n","import React, { useState, useEffect } from 'react';\r\nimport {\r\n Grid,\r\n List,\r\n Button,\r\n Divider,\r\n ListItem,\r\n Checkbox,\r\n Collapse,\r\n Typography,\r\n ListItemIcon,\r\n ListItemText,\r\n} from '@material-ui/core';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { DEFAULT_ATTACHMENT_FILTERS } from 'features/wells/integrity/IntegrityAttachmentsContainer';\r\n\r\nconst IntegrityFilterAttachmentDrawerContent = ({\r\n classes,\r\n toggleDrawer,\r\n filters,\r\n setFilters,\r\n}) => {\r\n const [newFilters, setNewFilters] = useState(DEFAULT_ATTACHMENT_FILTERS);\r\n\r\n useEffect(() => {\r\n setNewFilters(filters);\r\n }, [filters]);\r\n\r\n // for running update of the filters\r\n const submitAttachmentsFilters = () => {\r\n setFilters(newFilters);\r\n toggleDrawer();\r\n };\r\n\r\n const cancelFilters = () => {\r\n setFilters(filters); // reset to current filters\r\n toggleDrawer();\r\n };\r\n\r\n const handleToggleFileType = (key) => {\r\n setNewFilters((prev) => ({\r\n ...prev,\r\n fileTypes: {\r\n ...prev.fileTypes,\r\n [key]: !prev.fileTypes[key],\r\n },\r\n }));\r\n };\r\n\r\n const handleToggleYear = (year) => {\r\n setNewFilters((prev) => {\r\n const yearData = prev.years[year];\r\n const allMonthsSelected = !yearData.isSelected;\r\n const updatedMonths = Object.keys(yearData.months).reduce(\r\n (acc, month) => ({\r\n ...acc,\r\n [month]: allMonthsSelected,\r\n }),\r\n {},\r\n );\r\n\r\n return {\r\n ...prev,\r\n years: {\r\n ...prev.years,\r\n [year]: {\r\n ...yearData,\r\n isSelected: allMonthsSelected,\r\n months: updatedMonths,\r\n },\r\n },\r\n };\r\n });\r\n };\r\n\r\n const handleToggleMonth = (year, month) => {\r\n setNewFilters((prev) => {\r\n const yearData = prev.years[year];\r\n const updatedMonths = {\r\n ...yearData.months,\r\n [month]: !yearData.months[month],\r\n };\r\n\r\n const allMonthsSelected = Object.values(updatedMonths).every(\r\n (selected) => selected,\r\n );\r\n\r\n return {\r\n ...prev,\r\n years: {\r\n ...prev.years,\r\n [year]: {\r\n ...yearData,\r\n isSelected: allMonthsSelected,\r\n months: updatedMonths,\r\n },\r\n },\r\n };\r\n });\r\n };\r\n\r\n const handleExpandYear = (year) => {\r\n setNewFilters((prev) => ({\r\n ...prev,\r\n years: {\r\n ...prev.years,\r\n [year]: {\r\n ...prev.years[year],\r\n isExpanded: !prev.years[year].isExpanded,\r\n },\r\n },\r\n }));\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {/* Document type filterz */}\r\n \r\n \r\n \r\n Document Format\r\n \r\n {Object.keys(newFilters.fileTypes).map((type) => (\r\n \r\n \r\n handleToggleFileType(type)}\r\n />\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n {/* Date filterz */}\r\n \r\n \r\n \r\n Date\r\n \r\n {Object.keys(newFilters.years).map((year) => (\r\n \r\n handleExpandYear(year)}>\r\n \r\n selected,\r\n )\r\n }\r\n onChange={() => handleToggleYear(year)}\r\n className={classes.indeterminate}\r\n />\r\n \r\n \r\n {newFilters.years[year].isExpanded ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {Object.keys(newFilters.years[year].months).map((month) => (\r\n \r\n \r\n handleToggleMonth(year, month)}\r\n />\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n {/* Action Buttons */}\r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n activityField: {\r\n paddingTop: `${theme.spacing(3)}px`,\r\n },\r\n subActivityBox: {\r\n marginTop: `${theme.spacing(2)}px`,\r\n marginBottom: `${theme.spacing(2)}px`,\r\n border: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n subActivityField: {\r\n padding: `${theme.spacing(1)}px`,\r\n },\r\n marginLabel: {\r\n marginTop: '4vh',\r\n },\r\n\r\n bottomLabel: {\r\n marginBottom: '4vh',\r\n },\r\n iconStyle: {\r\n height: '2.2vh',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n objectFit: 'contain',\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n paperMargin: {\r\n marginTop: '4vh',\r\n },\r\n closeIcon: {\r\n marginLeft: 'auto',\r\n },\r\n indeterminate: {\r\n '&.MuiCheckbox-indeterminate': {\r\n color: theme.palette.primary.main, // Set the indeterminate color to primary\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegrityFilterAttachmentDrawerContent);\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Drawer } from '@material-ui/core';\r\nimport IntegrityFilterAttachmentDrawerHeader from 'features/wells/integrity/attachments/filter/IntegrityFilterAttachmentDrawerHeader';\r\nimport IntegrityFilterAttachmentDrawerContent from 'features/wells/integrity/attachments/filter/IntegrityFilterAttachmentDrawerContent';\r\n\r\nconst IntegrityFilterAttachmentDrawer = ({\r\n isOpen,\r\n classes,\r\n attachments,\r\n toggleDrawer,\r\n filters,\r\n setFilters,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n background: theme.palette.background.default,\r\n },\r\n drawerHeader: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1000,\r\n background: theme.palette.background.default,\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: `2px solid ${theme.palette.table.row.hover}`,\r\n },\r\n drawerContent: {\r\n padding: theme.spacing(2),\r\n overflowY: 'scroll-y',\r\n margin: `0 ${theme.spacing(1)}px 0 ${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(IntegrityFilterAttachmentDrawer);\r\n","import { compose } from 'redux';\r\nimport isNil from 'lodash/isNil';\r\nimport { useEffect, useCallback, useRef } from 'react';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport { CircularProgress } from '@material-ui/core/index';\r\nimport PlusIcon from '@material-ui/icons/Add';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport DoneIcon from '@material-ui/icons/Done';\r\nimport { green } from '@material-ui/core/colors';\r\nimport FilterList from '@material-ui/icons/FilterList';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, Button, Box } from '@material-ui/core';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n getIntegrityManagementAvailableFilesState,\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple,\r\n getIntegrityManagementWellIntegrityAttachmentsFromState,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport {\r\n INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM,\r\n INTEGRITY_MANAGEMENT_ACTIONS,\r\n RISK_PRINCIPLE_TYPES,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport {\r\n loadIntegrityManagementAvailableFiles,\r\n loadIntegrityManagementIntegritiesForWell,\r\n loadIntegrityManagementWellIntegrityAttachments,\r\n previewIntegrityManagementProjectDocument,\r\n previewIntegrityManagementWellboreDocument,\r\n updateIntegrityManagementWellAttachments,\r\n uploadAndUpdateIntegrityManagementWellAttachments,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\n\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport { useState } from 'react';\r\nimport IntegrityAttachmentsTable from 'features/wells/integrity/attachments/IntegrityAttachmentsTable';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport UploadIntegrityAttachmentDrawer from 'features/wells/integrity/attachments/upload/UploadIntegrityAttachmentDrawer';\r\nimport IntegrityAttachmentsPreview from 'features/wells/integrity/attachments/IntegrityAttachmentPreview';\r\nimport IntegrityFilterAttachmentDrawer from 'features/wells/integrity/attachments/filter/IntegrityFilterAttachmentDrawer';\r\n\r\nexport const DEFAULT_ATTACHMENT_FILTERS = {\r\n fileTypes: {},\r\n years: {},\r\n};\r\n\r\nconst IntegrityAttachmentsContainer = ({\r\n classes,\r\n dataState,\r\n wellboreId,\r\n integrityId,\r\n attachments,\r\n availableFiles,\r\n dispatchLoadWellIntegrityAttachments,\r\n dispatchLoadIntegrityManagementForWell,\r\n dispatchUpdateWellIntegrityAttachments,\r\n dispatchLoadWellIntegrityAvailableFiles,\r\n dispatchUploadAndUpdateWellIntegrityAttachments,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [isOpen, toggle] = useToggle();\r\n const [isFilterOpen, toggleFilterDrawer] = useToggle();\r\n const { wellbore } = useWellbore(wellboreId);\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [externalWellboreId, setExternalWellboreId] = useState(null);\r\n const [selectedAttachment, setSelectedAttachment] = useState({\r\n id: '',\r\n fileName: '',\r\n filePath: '',\r\n fileType: '',\r\n });\r\n\r\n const [wellboreFiles, setWellboreFiles] = useState(EMPTY_LIST);\r\n const [projectFiles, setProjectFiles] = useState(EMPTY_LIST);\r\n const availableFilesForPreviewRef = useRef(EMPTY_LIST);\r\n\r\n useEffect(\r\n () => {\r\n if (wellbore.get('externalWellboreExternalId')) {\r\n dispatchLoadIntegrityManagementForWell(\r\n wellbore.get('externalWellboreExternalId'),\r\n );\r\n setExternalWellboreId(wellbore.get('externalWellboreExternalId'));\r\n\r\n if (integrityId) {\r\n dispatchLoadWellIntegrityAttachments(\r\n wellbore.get('externalWellboreExternalId'),\r\n integrityId,\r\n );\r\n dispatchLoadWellIntegrityAvailableFiles(\r\n wellbore.get('externalWellboreExternalId'),\r\n );\r\n }\r\n }\r\n }, // eslint-disable-next-line\r\n [wellbore, integrityId],\r\n );\r\n\r\n useEffect(() => {\r\n if (availableFiles && availableFiles !== EMPTY_LIST) {\r\n availableFilesForPreviewRef.current = availableFiles;\r\n if (attachments && attachments !== EMPTY_LIST) {\r\n const attachmentsExternalIds = attachments.map(\r\n (item) => item.externalFileId,\r\n );\r\n\r\n const wellboreList = availableFiles\r\n .filter((item) => item.wellboreId !== null)\r\n .map((item) => ({\r\n ...item,\r\n isChecked: attachmentsExternalIds.includes(item.externalId),\r\n fileSource: INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM.WELL,\r\n }));\r\n\r\n setWellboreFiles(wellboreList);\r\n\r\n const projectList = availableFiles\r\n .filter((item) => item.projectId && item.projectId !== 0) // Filter valid items\r\n .map((item) => ({\r\n ...item,\r\n isChecked: attachmentsExternalIds.includes(item.externalId),\r\n fileSource: INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM.PROJECT,\r\n }))\r\n .groupBy((item) => item.projectId); // Group by `projectId`\r\n\r\n setProjectFiles(projectList);\r\n }\r\n // this is for the case we have an empty well integrity rule - with no attachments at all\r\n else {\r\n const wellboreList = availableFiles\r\n .filter((item) => item.wellboreId !== null)\r\n .map((item) => ({\r\n ...item,\r\n isChecked: false,\r\n fileSource: INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM.WELL,\r\n }));\r\n\r\n setWellboreFiles(wellboreList);\r\n\r\n const projectList = availableFiles\r\n .filter((item) => item.projectId && item.projectId !== 0) // Filter items with projectId - those are from project\r\n .map((item) => ({\r\n ...item,\r\n isChecked: false,\r\n fileSource: INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM.PROJECT,\r\n }))\r\n .groupBy((item) => item.projectId); // Group by `projectId`\r\n\r\n setProjectFiles(projectList);\r\n }\r\n }\r\n }, [availableFiles, attachments]);\r\n\r\n const handleUpdateAttachments = (newAttachments, newFiles) => {\r\n setSelectedAttachment({\r\n id: '',\r\n filePath: '',\r\n fileName: '',\r\n fileType: '',\r\n });\r\n // if there are any files call update of the files\r\n if (newFiles.length > 0) {\r\n dispatchUploadAndUpdateWellIntegrityAttachments(\r\n externalWellboreId,\r\n integrityId,\r\n newAttachments,\r\n newFiles,\r\n toggle,\r\n );\r\n } else {\r\n dispatchUpdateWellIntegrityAttachments(\r\n externalWellboreId,\r\n integrityId,\r\n newAttachments,\r\n toggle,\r\n );\r\n }\r\n };\r\n\r\n // dispatch will close the modal, enable editing on repopen\r\n useEffect(() => {\r\n if (!isOpen) {\r\n setIsSubmitting(false);\r\n }\r\n }, [isOpen]);\r\n\r\n // attachment filters\r\n const [filteredAttachments, setFilteredAttachments] = useState(EMPTY_LIST);\r\n const [filters, setFilters] = useState(DEFAULT_ATTACHMENT_FILTERS);\r\n\r\n useEffect(\r\n () => {\r\n const updateFilteredAttachments = () => {\r\n const { fileTypes, years } = filters;\r\n\r\n const newFilteredAttachments = attachments.filter((attachment) => {\r\n const fileType = attachment.fileType;\r\n const reportedDate = attachment.reportedDate;\r\n\r\n const date = new Date(reportedDate);\r\n const year = date.getFullYear();\r\n const month = date.toLocaleString('default', { month: 'long' });\r\n\r\n // Filtering logic:\r\n // 1. Include the attachment if its fileType is selected.\r\n // 2. Check if the month is explicitly selected in the year's `months`.\r\n\r\n const isFileTypeSelected = fileTypes[fileType];\r\n const isMonthSelected = years[year]?.months[month];\r\n\r\n // Include only if all conditions are true\r\n return isFileTypeSelected && isMonthSelected;\r\n });\r\n\r\n setFilteredAttachments(newFilteredAttachments);\r\n };\r\n\r\n if (filters !== DEFAULT_ATTACHMENT_FILTERS) {\r\n updateFilteredAttachments();\r\n }\r\n },\r\n // eslint-disable-next-line\r\n [filters],\r\n );\r\n\r\n useEffect(() => {\r\n const initializeFilters = () => {\r\n const fileTypes = {};\r\n const years = {};\r\n\r\n // Extract unique fileTypes and group dates\r\n attachments.forEach((attachment) => {\r\n const { fileType, reportedDate } = attachment;\r\n\r\n // Initialize fileType filters\r\n if (!fileTypes[fileType]) {\r\n fileTypes[fileType] = true; // Default to true since all filters should be on by default\r\n }\r\n\r\n // Group reportedDate by year and month\r\n const date = new Date(reportedDate);\r\n const year = date.getFullYear();\r\n const month = date.toLocaleString('default', { month: 'long' });\r\n\r\n if (!years[year]) {\r\n years[year] = {\r\n isSelected: true, // Default to true since all filters should be on by default\r\n months: {},\r\n };\r\n }\r\n\r\n if (!years[year].months[month]) {\r\n years[year].months[month] = true; // Default to true since all filters should be on by default\r\n }\r\n });\r\n\r\n setFilters({ fileTypes, years });\r\n };\r\n\r\n initializeFilters();\r\n setFilteredAttachments(attachments);\r\n }, [attachments]);\r\n\r\n const handlePreviewAttachment = useCallback(\r\n (attachment) => {\r\n if (attachment.externalFileId === selectedAttachment.id) {\r\n setSelectedAttachment({\r\n id: '',\r\n filePath: '',\r\n fileName: '',\r\n fileType: '',\r\n });\r\n setIsLoading(false);\r\n } else if (\r\n attachment.fileSource === INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM.PROJECT\r\n ) {\r\n const file = availableFilesForPreviewRef.current.find(\r\n (projectfile) => attachment.externalFileId === projectfile.externalId,\r\n );\r\n dispatch(\r\n previewIntegrityManagementProjectDocument(\r\n file.projectId,\r\n file.fileId,\r\n ),\r\n ).then((response) => {\r\n setSelectedAttachment({\r\n id: file.externalId,\r\n filePath: response.previewUrl,\r\n fileName: file.fullName,\r\n fileType: file.extension?.replace('.', ''),\r\n });\r\n setIsLoading(false);\r\n });\r\n } else if (\r\n attachment.fileSource === INTEGIRTY_ATTACHMENT_SOURCE_TYPE_ENUM.WELL\r\n ) {\r\n const file = availableFilesForPreviewRef.current.find(\r\n (wellborefile) =>\r\n attachment.externalFileId === wellborefile.externalId,\r\n );\r\n dispatch(\r\n previewIntegrityManagementWellboreDocument(\r\n wellbore?.get('fieldId'),\r\n file.wellboreId,\r\n file.fileId,\r\n ),\r\n ).then((response) => {\r\n setSelectedAttachment({\r\n id: file.externalId,\r\n filePath: response.previewUrl,\r\n fileName: file.fullName,\r\n fileType: file.extension?.replace('.', ''),\r\n });\r\n setIsLoading(false);\r\n });\r\n }\r\n },\r\n [availableFilesForPreviewRef, dispatch, selectedAttachment.id, wellbore],\r\n );\r\n\r\n const resetPreviewState = () => {\r\n setSelectedAttachment({\r\n id: '',\r\n filePath: '',\r\n fileName: '',\r\n fileType: '',\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n {externalWellboreId && (\r\n \r\n \r\n \r\n \r\n \r\n {attachments?.size > 0 && (\r\n \r\n \r\n \r\n {'Rule compliant. Document(s) uploaded'}\r\n \r\n \r\n )}\r\n {attachments?.size === 0 && (\r\n \r\n \r\n {'Rule not compliant. Document(s) missing'}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Upload document\r\n \r\n \r\n \r\n {attachments && attachments !== EMPTY_LIST && (\r\n \r\n \r\n \r\n {'Supporting document(s)'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Filter\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {attachments &&\r\n attachments !== EMPTY_LIST &&\r\n availableFiles !== EMPTY_LIST ? (\r\n \r\n ) : (\r\n attachments !== EMPTY_LIST && (\r\n \r\n \r\n \r\n )\r\n )}\r\n \r\n \r\n \r\n {!isNil(selectedAttachment.id) && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n tableContainer: {\r\n padding: theme.spacing(2),\r\n height: '100%',\r\n },\r\n preview: {\r\n padding: theme.spacing(1),\r\n marginLeft: theme.spacing(2),\r\n height: '100%',\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-around',\r\n alignItems: 'flex-start',\r\n },\r\n successIcon: {\r\n color: green[600],\r\n marginRight: theme.spacing(1),\r\n },\r\n statusText: {\r\n padding: theme.spacing(2),\r\n },\r\n transparentButton: {\r\n backgroundColor: 'transparent',\r\n boxShadow: 'none',\r\n color: 'inherit',\r\n },\r\n circularProgress: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n actionButton: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n filteredIntegrities:\r\n getIntegrityManagementIntegritiesFromStateByRiskPrinciple(\r\n state,\r\n RISK_PRINCIPLE_TYPES.LIKELIHOOD_OF_FAILURE,\r\n ),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_INTEGRITIES_FOR_WELL,\r\n ),\r\n attachments: getIntegrityManagementWellIntegrityAttachmentsFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_ATTACHMENTS,\r\n ),\r\n availableFiles: getIntegrityManagementAvailableFilesState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_ALL_INTEGRITY_MANAGEMENT_AVAILABLE_FILES,\r\n ),\r\n }),\r\n {\r\n dispatchLoadIntegrityManagementForWell:\r\n loadIntegrityManagementIntegritiesForWell,\r\n dispatchLoadWellIntegrityAttachments:\r\n loadIntegrityManagementWellIntegrityAttachments,\r\n dispatchLoadWellIntegrityAvailableFiles:\r\n loadIntegrityManagementAvailableFiles,\r\n dispatchUpdateWellIntegrityAttachments:\r\n updateIntegrityManagementWellAttachments,\r\n dispatchUploadAndUpdateWellIntegrityAttachments:\r\n uploadAndUpdateIntegrityManagementWellAttachments,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(IntegrityAttachmentsContainer);\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { Plot } from '@int/geotoolkit/plot/Plot';\r\nimport { WellLogWidget } from '@int/geotoolkit/welllog/widgets/WellLogWidget';\r\nimport { TrackType } from '@int/geotoolkit/welllog/TrackType';\r\nimport { LogCurve } from '@int/geotoolkit/welllog/LogCurve';\r\nimport { LogData } from '@int/geotoolkit/welllog/data/LogData';\r\nimport { CompositeSchematicsWidget } from '@int/geotoolkit/schematics/widgets/CompositeSchematicsWidget';\r\nimport { ProportionalWidthStrategy } from '@int/geotoolkit/deviation/ProportionalWidthStrategy';\r\nimport { PiecewiseTransformer } from '@int/geotoolkit/deviation/PiecewiseTransformer';\r\nimport { Group } from '@int/geotoolkit/scene/Group';\r\nimport { CssLayout } from '@int/geotoolkit/layout/CssLayout';\r\nimport schematicData from './wellLogBasic/helpers/schematic.json';\r\nimport { useSimpleDataSource } from './wellLogBasic/helpers/SimpleDataSource.js';\r\n\r\nconst SCALE_FACTOR = 1.2;\r\n\r\nconst TestingContainerWellLogAndCompositeSchematic = () => {\r\n const plotRef = useRef(null);\r\n const dataSource = useSimpleDataSource();\r\n const wellLogWidgetRef = useRef(null);\r\n const schematicWidgetRef = useRef(null);\r\n const canvasRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (!dataSource) {\r\n console.log('Data source is not loaded yet.');\r\n return;\r\n }\r\n\r\n // Initialize WellLogWidget\r\n const wellLogWidget = new WellLogWidget({\r\n indextype: 'number',\r\n indexunit: 'ft',\r\n header: { visible: false },\r\n footer: { visible: false },\r\n });\r\n\r\n wellLogWidget.addTrack(TrackType.IndexTrack).setWidth(50);\r\n\r\n const logTrack1 = wellLogWidget\r\n .addTrack(TrackType.LinearTrack)\r\n .setWidth(200);\r\n\r\n dataSource.curveNames.forEach((curveName, index) => {\r\n const color = index % 2 === 0 ? 'green' : 'red';\r\n const curve = new LogCurve(new LogData(curveName))\r\n .setLineStyle(color)\r\n .setName(curveName);\r\n logTrack1.addChild(curve);\r\n });\r\n\r\n for (let i = 0; i < 2; i++) {\r\n const duplicateTrack = wellLogWidget\r\n .addTrack(TrackType.LinearTrack)\r\n .setWidth(200);\r\n dataSource.curveNames.forEach((curveName, index) => {\r\n const color = index % 2 === 0 ? 'green' : 'red';\r\n const duplicateCurve = new LogCurve(new LogData(curveName))\r\n .setLineStyle(color)\r\n .setName(curveName);\r\n duplicateTrack.addChild(duplicateCurve);\r\n });\r\n }\r\n\r\n dataSource.connect(wellLogWidget);\r\n wellLogWidget.setDepthScale(10);\r\n wellLogWidget.fitToHeight();\r\n\r\n // Initialize CompositeSchematicsWidget\r\n const DEFAULT_STRATEGY_OPTIONS = {\r\n maxwidth: 250,\r\n minwidth: 30,\r\n widthscale: 20,\r\n };\r\n const TRANSFORMER = new PiecewiseTransformer({\r\n trackwidthstrategy: new ProportionalWidthStrategy(\r\n DEFAULT_STRATEGY_OPTIONS,\r\n ),\r\n });\r\n\r\n const schematicWidget = new CompositeSchematicsWidget({\r\n gap: {\r\n top: { visible: false, resizable: false, size: '0' },\r\n left: { visible: true, resizable: false, size: '30px' },\r\n right: { visible: true, resizable: false, size: '250px' },\r\n bottom: { visible: false, resizable: false, size: '0' },\r\n },\r\n deviation: {\r\n transformer: TRANSFORMER,\r\n trackwidth: 350,\r\n offset: 0,\r\n },\r\n data: { elements: schematicData },\r\n });\r\n\r\n // Configure Plot\r\n const plot = new Plot({\r\n canvaselement: canvasRef.current,\r\n root: new Group().setLayout(new CssLayout()).addChild([\r\n wellLogWidget.setLayoutStyle({\r\n left: 0,\r\n top: 0,\r\n width: '50%',\r\n height: '100%',\r\n }),\r\n schematicWidget.setLayoutStyle({\r\n left: '50%',\r\n top: 0,\r\n width: '50%',\r\n height: '100%',\r\n }),\r\n ]),\r\n });\r\n\r\n plotRef.current = plot;\r\n wellLogWidgetRef.current = wellLogWidget;\r\n schematicWidgetRef.current = schematicWidget;\r\n\r\n console.log(\r\n 'Widget and Plot initialized with WellLogWidget and CompositeSchematicsWidget.',\r\n );\r\n\r\n return () => {\r\n if (plotRef.current) {\r\n plotRef.current.dispose();\r\n }\r\n if (dataSource) {\r\n dataSource.dispose();\r\n }\r\n };\r\n }, [dataSource]);\r\n\r\n const synchronizeZoom = (scaleFactor) => {\r\n if (wellLogWidgetRef.current && schematicWidgetRef.current) {\r\n // Scale the WellLogWidget\r\n wellLogWidgetRef.current.scale(scaleFactor);\r\n\r\n // Scale the CompositeSchematicsWidget using scaleModel\r\n schematicWidgetRef.current.scaleModel(scaleFactor, scaleFactor, 0, 0);\r\n }\r\n };\r\n\r\n const zoomIn = () => synchronizeZoom(SCALE_FACTOR);\r\n const zoomOut = () => synchronizeZoom(1 / SCALE_FACTOR);\r\n const zoomToFit = () => {\r\n if (wellLogWidgetRef.current && schematicWidgetRef.current) {\r\n // Fit WellLogWidget to height\r\n wellLogWidgetRef.current.fitToHeight();\r\n\r\n // Fit CompositeSchematicsWidget to bounds\r\n schematicWidgetRef.current.fitToBounds();\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default TestingContainerWellLogAndCompositeSchematic;\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { Plot } from '@int/geotoolkit3d/Plot';\r\nimport { Grid } from '@int/geotoolkit3d/scene/grid/Grid';\r\nimport { TrajectoryTube } from '@int/geotoolkit3d/scene/well/TrajectoryTube';\r\nimport { Vector3 } from 'three';\r\nimport { DefaultColorProvider } from '@int/geotoolkit/util/DefaultColorProvider';\r\n\r\nconst X_SCALE = 1;\r\nconst Y_SCALE = 1;\r\nconst Z_SCALE = 2.2;\r\nconst CAMERA_DISTANCE = -30000;\r\nconst TUBE_RADIUS = 50;\r\n\r\n// Define a color provider for the gradient\r\nconst COLOR_PROVIDER = new DefaultColorProvider({\r\n values: [0, 5, 10, 15, 20],\r\n colors: ['blue', 'cyan', 'green', 'yellow', 'red'],\r\n});\r\n\r\nconst generateOrderedWellData = (depth, steps) => {\r\n const data = {\r\n x: [],\r\n y: [],\r\n z: [],\r\n values: [],\r\n };\r\n\r\n const stepSize = depth / steps;\r\n\r\n for (let i = 0; i <= steps; i++) {\r\n data.x.push(0); // No deviation in X\r\n data.y.push(0); // No deviation in Y\r\n data.z.push(-i * stepSize); // Depth\r\n\r\n const progressionValue = (i / steps) * 20; // Map depth to 0–20 range\r\n const smudgedValue = progressionValue + (Math.random() - 0.5) * 2;\r\n data.values.push(smudgedValue);\r\n }\r\n\r\n return data;\r\n};\r\n\r\nconst wellData1 = generateOrderedWellData(5000, 500);\r\nconst wellData2 = generateOrderedWellData(5000, 500);\r\nconst wellData3 = generateOrderedWellData(5000, 500);\r\n\r\nconst WellScene = ({ wellData }) => {\r\n const containerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n // Set camera position\r\n const camera = new Vector3(0, 0, -2500);\r\n\r\n // Create plot\r\n const plot = new Plot({\r\n container: containerRef.current,\r\n camera: {\r\n position: camera.clone().add(new Vector3(0, CAMERA_DISTANCE, 1000)),\r\n lookAt: camera.clone(),\r\n },\r\n scale: new Vector3(X_SCALE, Y_SCALE, Z_SCALE),\r\n });\r\n\r\n // Add grid\r\n const grid = new Grid({\r\n start: new Vector3(-1000, -1000, -5000),\r\n end: new Vector3(1000, 1000, 0),\r\n modelStart: new Vector3(-1000, -1000, -5000),\r\n modelEnd: new Vector3(1000, 1000, 0),\r\n });\r\n plot.getRoot().add(grid);\r\n\r\n // Add trajectory tube\r\n const trajectoryTube = new TrajectoryTube({\r\n data: [\r\n {\r\n x: wellData.x,\r\n y: wellData.y,\r\n z: wellData.z,\r\n values: wellData.values,\r\n },\r\n ],\r\n colorProvider: COLOR_PROVIDER,\r\n radius: TUBE_RADIUS,\r\n segments: 32,\r\n });\r\n plot.getRoot().add(trajectoryTube);\r\n\r\n return () => {\r\n plot.dispose();\r\n };\r\n }, [wellData]);\r\n\r\n return
    ;\r\n};\r\n\r\nconst Well3DVisualization = () => {\r\n return (\r\n \r\n {/* Render three separate scenes */}\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default Well3DVisualization;\r\n","import React from 'react';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nconst SchematicDrawerHeader = ({ classes, title, closeDrawer }) => {\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default SchematicDrawerHeader;\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Button, Grid, Drawer } from '@material-ui/core';\r\nimport SchematicDrawerHeader from './SchematicDrawerHeader';\r\n\r\nconst SchematicDrawer = ({ children, classes, isOpen, onClose }) => {\r\n return (\r\n \r\n \r\n
    {children}
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n overflow: 'clip',\r\n background: theme.palette.background.default,\r\n },\r\n padding: {\r\n padding: theme.spacing(2),\r\n },\r\n footer: {\r\n marginTop: 'auto',\r\n backgroundColor: '#222222',\r\n padding: '16px 24px',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SchematicDrawer);\r\n","import { useRef, useEffect } from 'react';\r\nimport { Plot } from '@int/geotoolkit/plot/Plot';\r\nimport { WellBoreNode } from '@int/geotoolkit/schematics/scene/WellBoreNode';\r\nimport { WellBoreData } from '@int/geotoolkit/schematics/data/WellBoreData';\r\nimport { CompositeSchematicsWidget } from '@int/geotoolkit/schematics/widgets/CompositeSchematicsWidget';\r\nimport wellBoreNodeLatestData from './helpers/wellBoreNodeLatestData.json';\r\nimport { FillStyle } from '@int/geotoolkit/attributes/FillStyle';\r\n// import { WellBoreWithLabels } from '@int/geotoolkit/schematics/scene/WellBoreWithLabels';\r\n// import { from } from '@int/geotoolkit/selection/from';\r\nimport { ViewMode } from '@int/geotoolkit/schematics/scene/WellBoreNode';\r\nimport { Group } from '@int/geotoolkit/scene/Group';\r\nimport { Rectangle } from '@int/geotoolkit/scene/shapes/Rectangle';\r\nimport { CssLayout } from '@int/geotoolkit/layout/CssLayout';\r\nimport { Layer } from '@int/geotoolkit/scene/Layer';\r\nimport { Events as SelectionEvents } from '@int/geotoolkit/controls/tools/Selection';\r\nimport { ComponentNode } from '@int/geotoolkit/schematics/scene/ComponentNode';\r\n// import { DataTable } from '@int/geotoolkit/data/DataTable';\r\n// import { DataTableAdapter } from '@int/geotoolkit/widgets/data/DataTableAdapter';\r\n// import { TableView } from '@int/geotoolkit/widgets/TableView';\r\n// import { Dimension } from '@int/geotoolkit/util/Dimension';\r\nimport { LineStyle } from '@int/geotoolkit/attributes/LineStyle';\r\n// import { ComponentUtils } from '@int/geotoolkit/schematics/utils/ComponentUtils';\r\nimport { Rect } from '@int/geotoolkit/util/Rect';\r\nimport { ComponentNodeFactoryRegistry } from '@int/geotoolkit/schematics/factory/ComponentNodeFactoryRegistry';\r\nimport { WellLogWidget } from '@int/geotoolkit/welllog/widgets/WellLogWidget';\r\nimport { LogAbstractVisual } from '@int/geotoolkit/welllog/LogAbstractVisual';\r\nimport { TrackType } from '@int/geotoolkit/welllog/TrackType';\r\n// import { HeaderType } from '@int/geotoolkit/welllog/header/LogAxisVisualHeader';\r\nimport { BasePage } from 'altus-ui-components';\r\n// import { required } from 'utils/validation.util';\r\n\r\nimport {\r\n // Table,\r\n // TableRow,\r\n // TableBody,\r\n // TableCell,\r\n // Typography,\r\n // Fab,\r\n // IconButton,\r\n Button,\r\n} from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\n// import makeStyles from '@material-ui/styles/makeStyles';\r\n\r\n// import { CssStyle } from '@int/geotoolkit/css/CssStyle';\r\nimport './wellBoreStyleLatest.css';\r\n// import SimpleTable from './table';\r\nimport SchematicDrawer from './SchematicDrawer';\r\nimport { useState } from 'react';\r\nimport { Field, Formik, Form } from 'formik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\n// import TextAreaField from 'app/components/form/TextAreaField';\r\n// import TextField from 'app/components/form/TextField';\r\nimport { fromJS } from 'immutable';\r\nimport Agent from 'infrastructure/agent';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n// import TextAreaFieldFormik from 'app/components/form/formik/TextAreaFieldFormik';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\n\r\nlet leftRectangle, rightRectangle;\r\n\r\nconst items = [\r\n 'anchor catcher',\r\n 'bent sub',\r\n 'blast joint',\r\n 'blind pipe',\r\n 'bridge plug',\r\n 'casing brush',\r\n 'casing cutter closed',\r\n 'casing cutter open',\r\n 'casing',\r\n 'cement plug',\r\n 'cement',\r\n 'chemical injection mandrel',\r\n 'choke',\r\n 'circulating sleeve',\r\n 'circulating string',\r\n 'corod',\r\n 'crossover enlarging',\r\n 'crossover reducing',\r\n 'crossover',\r\n 'cuttings',\r\n 'default',\r\n 'downhole choke',\r\n 'drill collar',\r\n 'drill pipe',\r\n 'dual tubing hanger',\r\n 'electric submersible pump',\r\n 'expandable sand screen',\r\n 'expansion joint.2',\r\n 'expansion joint',\r\n 'external packer',\r\n 'float sub',\r\n 'flow coupling',\r\n 'gas anchor',\r\n 'gas lift dummy',\r\n 'gas lift mandrel',\r\n 'gravel pack crossover',\r\n 'gravel pack extension',\r\n 'gravel pack screen',\r\n 'heavy weight drill pipe',\r\n 'hole opener',\r\n 'holefill',\r\n 'hydraulic packer',\r\n 'jar',\r\n 'jet pump',\r\n 'landing collar',\r\n 'landing nipple',\r\n 'liner hanger',\r\n 'liner',\r\n 'locator sub',\r\n 'mandrel',\r\n 'mud motor',\r\n 'mule shoe',\r\n 'nipple',\r\n 'nogo nipple',\r\n 'on-off tool',\r\n 'open hole',\r\n 'packer dual',\r\n 'packer.blue',\r\n 'packer',\r\n 'pdc drill bit',\r\n 'perforated liner',\r\n 'perforated tubing.2',\r\n 'perforated tubing',\r\n 'perforating guns',\r\n 'perforation',\r\n 'plug',\r\n 'polished nipple',\r\n 'polished rod',\r\n 'pony rod',\r\n 'port collar',\r\n 'production packer',\r\n 'profile nipple',\r\n 'progressive cavity pump',\r\n 'pump barrel',\r\n 'pump',\r\n 'pup joint',\r\n 'reamer',\r\n 'reentry guide',\r\n 'rod pump.2',\r\n 'rod pump',\r\n 'rod.green',\r\n 'safety valve closed',\r\n 'safety valve open',\r\n 'sand control screen',\r\n 'scssv 1 sub',\r\n 'scssvsub',\r\n 'seal assembly.2',\r\n 'seal assembly',\r\n 'seal bore receptacle',\r\n 'seating nipple',\r\n 'shear tool',\r\n 'side pocket mandrel.2',\r\n 'side pocket mandrel',\r\n 'sinker bar',\r\n 'sliding sleeve.2',\r\n 'sliding sleeve',\r\n 'slotted liner',\r\n 'spiral drill collar',\r\n 'ssv closed',\r\n 'ssv open',\r\n 'stabilizer',\r\n 'subsurface safety valve closed',\r\n 'subsurface safety valve open',\r\n 'sucker rod pump.cutaway',\r\n 'sucker rod pump',\r\n 'sucker rod',\r\n 'tail joint',\r\n 'tail pipe',\r\n 'tool',\r\n 'tricone drill bit',\r\n 'tubing anchor',\r\n 'tubing hanger',\r\n 'tubing.gold',\r\n 'tubing.green',\r\n 'tubing.grey',\r\n 'tubing.red',\r\n 'tubing',\r\n 'valve closed',\r\n 'valve open',\r\n 'valve',\r\n 'wellhead',\r\n 'wireline guide.2',\r\n 'wireline guide',\r\n 'yblock',\r\n 'extras/crossover.grey',\r\n 'extras/drill bit.1',\r\n 'extras/drill bit.2',\r\n 'extras/drill bit.3',\r\n 'extras/drill bit.4',\r\n 'extras/gas lift mandrel.grey',\r\n 'extras/hole opener.1',\r\n 'extras/hole opener.2',\r\n 'extras/hole opener.3',\r\n 'extras/reamer.1',\r\n 'extras/reamer.2',\r\n 'extras/reamer.3',\r\n 'extras/tricone drill bit.grey',\r\n 'deprecated/cement_w_gradient',\r\n 'deprecated/drill bit.2',\r\n 'deprecated/drill bit.3',\r\n 'deprecated/float collar',\r\n 'deprecated/hollowareafill',\r\n 'deprecated/jet pump.ORIGINAL',\r\n 'deprecated/liner slotted',\r\n 'deprecated/liner',\r\n 'deprecated/mule shoe.2',\r\n 'deprecated/mule shoe',\r\n 'deprecated/old_perf',\r\n 'deprecated/perforation',\r\n 'deprecated/pump barrel.ORIGINAL',\r\n 'deprecated/rod pump',\r\n 'deprecated/sliding sleeve.2.ORIGINAL',\r\n 'deprecated/spiral drill collar',\r\n 'deprecated/sq',\r\n 'deprecated/ssv closed',\r\n 'deprecated/ssv open',\r\n 'deprecated/tricone drill bit.old',\r\n 'deprecated/tub_valid',\r\n 'animated/drill bit',\r\n 'animated/spiral drill collar',\r\n];\r\n\r\nconst getGeometryProperty = (geometry, propertyName) => {\r\n if (Array.isArray(geometry)) {\r\n geometry = geometry[0];\r\n }\r\n return geometry[propertyName];\r\n};\r\n\r\n// const registerSchematicComponents = (data) => {\r\n// const components = wellBoreNodeLatestData.map((component) => {\r\n// const { name, data: componentData } = component;\r\n// const { depth, diameter } = componentData.geometry;\r\n// const { from, to } = depth;\r\n// const { outer, inner } = diameter;\r\n\r\n// data.addComponent(name, {\r\n// geometry: {\r\n// depth: { from, to },\r\n// diameter: { outer, inner },\r\n// },\r\n// });\r\n// return JSON.parse(\r\n// JSON.stringify(data.getProperties()['elements'].slice(-1)[0]),\r\n// );\r\n// });\r\n// return components;\r\n// };\r\n\r\nconst highlightComponentNode = (\r\n componentNode,\r\n wellBoreNode,\r\n highlightLayer,\r\n) => {\r\n if (componentNode === undefined) {\r\n return;\r\n }\r\n let bounds = componentNode.getBounds();\r\n const diameters = getGeometryProperty(\r\n componentNode.getData()['geometry'],\r\n 'diameter',\r\n );\r\n\r\n if (diameters['inner'] === undefined) {\r\n bounds = wellBoreNode.getSceneTransform().transform(bounds);\r\n bounds = highlightLayer.getSceneTransform().inverseTransform(bounds);\r\n leftRectangle.setBounds(bounds);\r\n leftRectangle.setVisible(true);\r\n } else {\r\n const width = (diameters['outer'] - diameters['inner']) / 2;\r\n let leftBounds = new Rect(\r\n bounds.getLeft(),\r\n bounds.getTop(),\r\n bounds.getLeft() + width,\r\n bounds.getTop() + bounds.getHeight(),\r\n );\r\n let rightBounds = new Rect(\r\n bounds.getRight() - width,\r\n bounds.getTop(),\r\n bounds.getRight(),\r\n bounds.getTop() + bounds.getHeight(),\r\n );\r\n leftBounds = wellBoreNode.getSceneTransform().transform(leftBounds);\r\n leftBounds = highlightLayer\r\n .getSceneTransform()\r\n .inverseTransform(leftBounds);\r\n rightBounds = wellBoreNode.getSceneTransform().transform(rightBounds);\r\n rightBounds = highlightLayer\r\n .getSceneTransform()\r\n .inverseTransform(rightBounds);\r\n leftRectangle.setBounds(leftBounds);\r\n rightRectangle.setBounds(rightBounds);\r\n leftRectangle.setVisible(true);\r\n rightRectangle.setVisible(true);\r\n }\r\n};\r\n\r\nconst createWellLogWidget = function (wellBoreNode, geometryBounds) {\r\n const widget = new WellLogWidget({\r\n header: { visible: false },\r\n footer: { visible: false },\r\n border: { visible: false },\r\n horizontalscrollable: false,\r\n verticalscrollable: false,\r\n nodefilter: (node) =>\r\n node instanceof LogAbstractVisual || node instanceof WellBoreNode,\r\n tools: {\r\n cursortracking: {\r\n tooltip: {\r\n enabled: true,\r\n },\r\n },\r\n },\r\n }).setDepthLimits(geometryBounds.getTop(), geometryBounds.getBottom());\r\n widget\r\n .addTrack(TrackType.AnnotationTrack)\r\n .setWidth(400)\r\n .addChild([wellBoreNode]);\r\n return widget;\r\n};\r\n\r\n// const createSchematicRegistry = function () {\r\n// return new ComponentNodeFactoryRegistry(false)\r\n// .setFactory('tubing', (data) => new NodeTubingBW(data))\r\n// .setFactory('packer', (data) => new NodePackerBW(data))\r\n// .setFactory('cement', (data) => new NodeCementBW(data))\r\n// .setFactory('perforation', (data) => new NodePerforationBW(data))\r\n// .setFactory('casing', (data) => new NodeCasingBW(data));\r\n// };\r\n\r\n// const createWellBoreData = () => {\r\n// return new WellBoreData(wellBoreData);\r\n// };\r\n\r\n// const createSchematicTable = (components) => {\r\n// const rows = [];\r\n// components.forEach((component) => {\r\n// const geom = component['data']['geometry'];\r\n// rows.push([\r\n// component.name,\r\n// ComponentUtils.getDepthFrom(geom),\r\n// ComponentUtils.getDepthTo(geom),\r\n// ComponentUtils.getOuterDiameter(geom),\r\n// ComponentUtils.getInnerDiameter(geom) || 0,\r\n// ]);\r\n// });\r\n// const dataTable = new DataTable({\r\n// cols: [\r\n// { name: 'Type', type: 'string' },\r\n// { name: 'Depth (from)', type: 'number' },\r\n// { name: 'Depth (to)', type: 'number' },\r\n// { name: 'Outer Radius', type: 'number' },\r\n// { name: 'Inner Radius', type: 'number' },\r\n// ],\r\n// rowsdata: rows,\r\n// });\r\n// const bridge = new DataTableAdapter({\r\n// datatable: dataTable,\r\n// });\r\n\r\n// return new TableView({\r\n// horizontalscroll: 'floating',\r\n// verticalscroll: 'floating',\r\n// cols: 4,\r\n// defaultcellsize: new Dimension(80, 30),\r\n// highlightcolumnfillstyle: FillStyle.Empty,\r\n// }).setData(bridge);\r\n// };\r\n\r\nconst options = {\r\n data: new WellBoreData(wellBoreNodeLatestData),\r\n wellborenode: {\r\n viewmode: ViewMode.Compressed,\r\n trackwidth: 200,\r\n },\r\n legend: {\r\n offset: { x: -10, y: 10 },\r\n width: 250,\r\n height: 300,\r\n visible: true,\r\n },\r\n gap: {\r\n horizontal: {\r\n left: 10,\r\n },\r\n },\r\n // north: { title: { text: 'Schematic 2D Well Bore' } },\r\n // gap: {\r\n // top: {\r\n // visible: false,\r\n // resizable: false,\r\n // size: '0',\r\n // },\r\n // left: {\r\n // visible: true,\r\n // resizable: false,\r\n // size: '30px',\r\n // },\r\n // right: {\r\n // visible: true,\r\n // resizable: false,\r\n // size: '30px',\r\n // },\r\n // bottom: {\r\n // visible: false,\r\n // resizable: false,\r\n // size: '0',\r\n // },\r\n // },\r\n // annotationssizes: {\r\n // south: 0,\r\n // west: 0\r\n // },\r\n // data: {\r\n // elements: createWellBoreData()\r\n // },\r\n // tools: {\r\n // rubberbandzoom: {\r\n // mode: 'Free',\r\n // linestyle: 'red',\r\n // },\r\n // },\r\n east: [],\r\n west: [],\r\n south: [],\r\n // center: {axis:{visible:false}, transformations: {dx: 0,\r\n // dy: 0,\r\n // xx: 0,\r\n // xy: 0,\r\n // yx: 0,\r\n // yy: 0,}},\r\n // none: [],\r\n // northeast: [],\r\n southwest: [],\r\n northwest: [],\r\n // border: null,\r\n // annotationitemswrap:false,\r\n // animationstyle: null,\r\n // clipping: false,\r\n // overlays: []\r\n};\r\n\r\nconst WellBoreSchematic = ({ classes }) => {\r\n const [dataState, setDataState] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const canvasRef = useRef();\r\n const schematicWidgetRef = useRef();\r\n const wellBoreNodeRef = useRef();\r\n const higlightRef = useRef();\r\n // const classes = useStyles();\r\n\r\n const schematicWidget = new CompositeSchematicsWidget(options);\r\n schematicWidgetRef.current = schematicWidget;\r\n\r\n // const handleClick = (index) => {\r\n // if (wellBoreNodeRef.current && higlightRef.current) {\r\n // leftRectangle.setVisible(false);\r\n // rightRectangle.setVisible(false);\r\n // const componentNode = wellBoreNodeRef.current.getComponents().toArray()[\r\n // index\r\n // ];\r\n // highlightComponentNode(\r\n // componentNode,\r\n // wellBoreNodeRef.current,\r\n // higlightRef.current,\r\n // );\r\n // }\r\n // };\r\n\r\n useEffect(() => {\r\n Agent.get('/wellbore/5446/schematic').then((data) => {\r\n function compareNumbers(a, b) {\r\n return (\r\n a.data.geometry.depth.from.value - b.data.geometry.depth.from.value\r\n );\r\n }\r\n const [_first, ...rest] = data.components;\r\n setDataState(rest.sort(compareNumbers));\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (canvasRef.current && dataState != null) {\r\n // const wellBoreNode = new WellBoreNode({\r\n // data: new WellBoreData(wellBoreNodeLatestData),\r\n // });\r\n const mappedData = dataState.map(({ name, data }) => {\r\n const { description, geometry } = data;\r\n const { depth, diameter } = geometry;\r\n return {\r\n name,\r\n data: {\r\n description,\r\n geometry: {\r\n depth: {\r\n from: depth.from.value,\r\n to: depth.to.value,\r\n },\r\n diameter: {\r\n outer: diameter.outer.value,\r\n inner: diameter.inner.value,\r\n },\r\n },\r\n },\r\n };\r\n });\r\n\r\n const registry = new ComponentNodeFactoryRegistry(true);\r\n const wellBoreData = new WellBoreData([\r\n ...mappedData,\r\n // dataState[1],\r\n // {\r\n // name: 'tubing',\r\n // data: {\r\n // description: 'Head',\r\n // geometry: {\r\n // depth: {\r\n // from: -10,\r\n // to: 1000,\r\n // },\r\n // diameter: {\r\n // outer: 8,\r\n // inner: 0,\r\n // },\r\n // },\r\n // },\r\n // },\r\n // {\r\n // name: 'crossover',\r\n // data: {\r\n // description: 'Crossover',\r\n // geometry: {\r\n // depth: {\r\n // from: 0,\r\n // to: 50,\r\n // },\r\n // diameter: {\r\n // outer: 8,\r\n // inner: 0,\r\n // },\r\n // },\r\n // },\r\n // },\r\n ]);\r\n // const wellBoreData = new WellBoreData(wellBoreNodeLatestData);\r\n // const components = wellBoreData.getProperties()['elements'];\r\n const geometryBounds = wellBoreData.getGeometryBounds();\r\n const wellBoreNode = new WellBoreNode({\r\n data: wellBoreData,\r\n viewmode: ViewMode.Compressed,\r\n registry,\r\n }).setBounds(\r\n new Rect(0.2, geometryBounds.getTop(), 0.8, geometryBounds.getBottom()),\r\n );\r\n\r\n wellBoreNodeRef.current = wellBoreNode;\r\n const wellLogWidget = createWellLogWidget(wellBoreNode, geometryBounds);\r\n // const plot = new Plot({\r\n // canvaselement: canvasRef.current,\r\n // root: schematicWidget,\r\n // });\r\n // const schematicComponents = schematicWidget.getData().getProperties()[\r\n // 'elements'\r\n // ];\r\n // const schematicTable = createSchematicTable(components);\r\n const group = new Group({ automodellimitsmode: false })\r\n .setLayout(new CssLayout())\r\n .addChild(\r\n wellLogWidget.setLayoutStyle({\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n width: 400,\r\n }),\r\n // wellBoreNode.setLayoutStyle({\r\n // top: 0,\r\n // right: 0,\r\n // bottom: '50%',\r\n // width: 700,\r\n // }),\r\n );\r\n const plot = new Plot({\r\n canvaselement: canvasRef.current,\r\n root: group,\r\n });\r\n\r\n wellBoreNode.setProperties({ border: null });\r\n // wellBoreNode.setFillStyle(new FillStyle('yellow'));\r\n wellBoreNode.setProperties({\r\n linestyle: { color: 'transparent', width: 0 },\r\n });\r\n wellLogWidget.fitToHeight();\r\n wellLogWidget.setProperties({ border: { visible: false } });\r\n // wellLogWidget.setFillStyle(new FillStyle('green'));\r\n wellLogWidget.setProperties({\r\n linestyle: { color: 'transparent', width: 0 },\r\n });\r\n group.setProperties({ border: null });\r\n // group.setFillStyle(new FillStyle('red'));\r\n group.setProperties({\r\n linestyle: { color: '#303030', width: 2 },\r\n });\r\n\r\n // const wellBoreNode = from(schematicWidget.getModel()).where((node) => {\r\n // return node instanceof WellBoreNode;\r\n // });\r\n // Create highlighting layer\r\n const highlight = new Layer();\r\n higlightRef.current = highlight;\r\n\r\n const highlightLineStyle = new LineStyle('transparent');\r\n const highlightFillStyle = new FillStyle('rgba(255, 255, 255, 0.36)');\r\n leftRectangle = new Rectangle({\r\n linestyle: highlightLineStyle,\r\n fillstyle: highlightFillStyle,\r\n visible: false,\r\n });\r\n rightRectangle = new Rectangle({\r\n linestyle: highlightLineStyle,\r\n fillstyle: highlightFillStyle,\r\n visible: false,\r\n });\r\n highlight.addChild([leftRectangle, rightRectangle]);\r\n wellLogWidget.getTrackContainer().addLayer(highlight);\r\n\r\n const selectionOff = () => {\r\n // Remove table row highlight:\r\n // schematicTable.setActiveRow(null);\r\n\r\n // Remove schematics node highlight:\r\n leftRectangle.setVisible(false);\r\n rightRectangle.setVisible(false);\r\n };\r\n\r\n // Add table listener:\r\n // schematicTable\r\n // .getToolByName('TableViewSelection')\r\n // .on(SelectionEvents.onPick, () => {\r\n // leftRectangle.setVisible(false);\r\n // rightRectangle.setVisible(false);\r\n\r\n // const index = schematicTable.getActiveRows()[0];\r\n // const componentNode = wellBoreNode.getComponents().toArray()[index];\r\n // highlightComponentNode(componentNode, wellBoreNode, highlight);\r\n // });\r\n\r\n wellLogWidget\r\n .getToolByName('pick')\r\n .setNodeFilter((nodes) =>\r\n nodes.filter((node) => node instanceof ComponentNode),\r\n )\r\n // Add wellbore node click listener:\r\n .on(SelectionEvents.onPick, (evt, sender, eventArgs) => {\r\n selectionOff();\r\n\r\n // New selection / highlight:\r\n const nodes = eventArgs.getSelection();\r\n if (nodes && nodes.length > 0) {\r\n const componentNode = nodes[nodes.length - 1];\r\n // Highlight schematics node:\r\n highlightComponentNode(componentNode, wellBoreNode, highlight);\r\n // Highlight table row:\r\n // const id = componentNode.getId();\r\n // let index = -1;\r\n // for (let i = 0; i < components.length; ++i) {\r\n // if (components[i].data.id === id) {\r\n // index = i;\r\n // break;\r\n // }\r\n // }\r\n // schematicTable.setActiveRow(index);\r\n }\r\n });\r\n\r\n // const ctx = canvasRef.current.getContext('2d');\r\n // plot.getRoot().setName('IME');\r\n // plot\r\n // .getCanvas().border= null\r\n // console.log('PLOT CANVAS', plot.getRoot().getProperties());\r\n\r\n // schematicWidget.getProperties()\r\n // schematicWidget\r\n // .getChildren((node) => node.getCssClasses())\r\n // .a.forEach((node,index) => {\r\n // node.setCssClass(\".NEKIID\")\r\n // console.log('NAME', node.getProperties());\r\n // if (index === 1) {\r\n // node.getChildren().a[0].setProperties({fillstyle: 'red',linestyle: \"red\",visible:false})\r\n // // node.setProperties({'border': null})\r\n // }\r\n // // console.log(\"NAME\", node.getModel())\r\n // });\r\n // console.log(\r\n // 'WIDGET CSS',\r\n // schematicWidget.getChildren((node) => node.getCssClasses()),\r\n // );\r\n\r\n // const wellBoreWithLabels = from(schematicWidget.getModel())\r\n // .where((node) => {\r\n // return node instanceof WellBoreWithLabels;\r\n // })\r\n // .selectFirst();\r\n // wellBoreWithLabels.setProperties({\r\n // 'labeling': {\r\n // 'labelshape': new SymbolLabelShape({'painter': CirclePainter})\r\n // }\r\n // });\r\n // const css = `.Grid {\r\n // htg-major-tickvisible: false;\r\n // vtg-major-tickvisible: false;\r\n // htg-minor-tickvisible: false;\r\n // vtg-minor-tickvisible: false;\r\n // }`;\r\n // schematicWidget.setCss(new CssStyle({ css: css }));\r\n // schematicWidget.setProperties({ border: null });\r\n // schematicWidget.setFillStyle(new FillStyle('#303030'));\r\n // schematicWidget.setProperties({\r\n // linestyle: { color: 'transparent', width: 0 },\r\n // });\r\n // wellLogWidget.setProperties({\r\n // border: {\r\n // visible: false,\r\n // borders: { left: false, right: false, bottom: false, top: false },\r\n // color: 'red',\r\n // },\r\n // track: {\r\n // border: {\r\n // visible: false,\r\n // },\r\n // },\r\n // });\r\n // console.log(\r\n // 'SCHEMATIC WIDGET PROPERTIES',\r\n // wellLogWidget.getProperties(),\r\n // wellBoreNode.getProperties(),\r\n // schematicWidget.getData().getProperties()['elements'],\r\n // schematicWidget.getSelectedComponentNodes(),\r\n // from(schematicWidget.getModel()).where((node) => {\r\n // return node instanceof WellBoreWithLabels;\r\n // }),\r\n // from(schematicWidget.getModel()).where((node) => {\r\n // return node instanceof WellBoreNode;\r\n // }),\r\n // );\r\n return () => {\r\n plot.dispose();\r\n };\r\n }\r\n }, [dataState]);\r\n\r\n return (\r\n \r\n
    \r\n {/*
    */}\r\n {/* {\r\n schematicWidgetRef.current.zoomIn();\r\n handleClick();\r\n }}\r\n >\r\n Zoom\r\n \r\n {\r\n schematicWidgetRef.current.fitToBounds();\r\n }}\r\n >\r\n Zoom to fit\r\n */}\r\n {/*
    */}\r\n {/* */}\r\n \r\n
    \r\n setIsOpen(true)}\r\n >\r\n \r\n Add\r\n \r\n {/* */}\r\n
    \r\n setIsOpen(false)}>\r\n {\r\n const a = {\r\n name: values.component,\r\n description: values.description,\r\n depthFrom: {\r\n value: values.startDepth,\r\n unit: 'm',\r\n },\r\n depthTo: {\r\n value: values.endDepth,\r\n unit: 'm',\r\n },\r\n outerDiameter: {\r\n value: values.outerDiameter,\r\n unit: 'm',\r\n },\r\n innerDiameter: {\r\n value: values.innerDiameter,\r\n unit: 'm',\r\n },\r\n };\r\n Agent.post('/wellbore/5446/schematic/1/component/create', a).then(\r\n () => {\r\n setIsOpen(false);\r\n Agent.get('/wellbore/5446/schematic').then((data) => {\r\n const [_first, ...rest] = data.components;\r\n setDataState(rest);\r\n });\r\n },\r\n );\r\n }}\r\n initialValues={{}}\r\n >\r\n {() => {\r\n return (\r\n
    \r\n componentName}\r\n getItemName={(componentName) => componentName}\r\n />\r\n \r\n {/* console.log(e.target.value)}\r\n /> */}\r\n
    \r\n console.log(e.target.value)}\r\n />\r\n {/* console.log(e.target.value)}\r\n // value={localWeight}\r\n // inputProps={{\r\n // step: '0.01'\r\n // }}\r\n label=\"Start Depth\"\r\n input={{ defaultValue: '', name: 'startDepth' }}\r\n /> */}\r\n console.log(e.target.value)}\r\n component={TextFieldFormik}\r\n />\r\n {/* console.log(e.target.value)}\r\n label=\"End Depth\"\r\n input={{ defaultValue: '', name: 'endDepth' }}\r\n /> */}\r\n
    \r\n
    \r\n console.log(e.target.value)}\r\n component={TextFieldFormik}\r\n />\r\n {/* console.log(e.target.value)}\r\n label=\"Inner Diameter\"\r\n input={{ defaultValue: '', name: 'innerDiameter' }}\r\n /> */}\r\n console.log(e.target.value)}\r\n component={TextFieldFormik}\r\n />\r\n {/* console.log(e.target.value)}\r\n label=\"Outer Diameter\"\r\n input={{ defaultValue: '', name: 'outerDiameter' }}\r\n /> */}\r\n
    \r\n {/* \r\n AAAAAA\r\n */}\r\n \r\n );\r\n }}\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n fieldWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n field: {\r\n width: '48%',\r\n },\r\n textArea: {\r\n backgroundColor: '#303030',\r\n },\r\n button: {\r\n marginBottom: '10px',\r\n alignSelf: 'flex-end',\r\n },\r\n wrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(WellBoreSchematic);\r\n","import { useCallback, useMemo } from 'react';\r\nimport { Table, TableRow, TableRowActionsCell } from 'altus-ui-components';\r\nimport { IconButton } from '@material-ui/core';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { fromJS } from 'immutable';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { formatValue } from 'utils/format.util';\r\n\r\nconst SchematicTable = ({\r\n onRowClick,\r\n data,\r\n onEdit,\r\n onDelete,\r\n lengthUnit,\r\n widthUnit,\r\n isEdit,\r\n}) => {\r\n const columns = useMemo(() => {\r\n const columns = [\r\n {\r\n xs: 2,\r\n Header: 'Name',\r\n accessor: (schematicComponent) => schematicComponent.get('name'),\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Description',\r\n accessor: (schematicComponent) => schematicComponent.get('description'),\r\n },\r\n {\r\n xs: 2,\r\n Header: `Start Depth (${lengthUnit})`,\r\n accessor: (schematicComponent) =>\r\n formatValue(schematicComponent.get('from'), '', 0.01),\r\n },\r\n {\r\n xs: 2,\r\n Header: `End Depth (${lengthUnit})`,\r\n accessor: (schematicComponent) =>\r\n formatValue(schematicComponent.get('to'), '', 0.01),\r\n },\r\n {\r\n xs: 2,\r\n Header: `Inner Diameter (${widthUnit})`,\r\n accessor: (schematicComponent) =>\r\n formatValue(schematicComponent.get('inner'), '', 0.01),\r\n },\r\n {\r\n xs: 2,\r\n Header: `Outer Diameter (${widthUnit})`,\r\n accessor: (schematicComponent) =>\r\n formatValue(schematicComponent.get('outer'), '', 0.01),\r\n },\r\n {\r\n id: 'actions',\r\n Header: ,\r\n Cell: ({ row }) => {\r\n return (\r\n \r\n onEdit(row.index)}>\r\n \r\n \r\n\r\n onDelete(row.index)}>\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ];\r\n\r\n if (!isEdit) {\r\n columns.pop();\r\n }\r\n\r\n return columns;\r\n }, [onEdit, onDelete, lengthUnit, widthUnit, isEdit]);\r\n\r\n const mappedData = data?.map(({ name, data }) => {\r\n const { description, geometry } = data;\r\n const { depth, diameter } = geometry;\r\n return {\r\n name,\r\n description,\r\n from: depth.from,\r\n to: depth.to,\r\n inner: diameter.inner,\r\n outer: diameter.outer,\r\n };\r\n });\r\n\r\n const renderTableRowComponent = useCallback(\r\n (props) => (\r\n onRowClick(props.row.index)}\r\n />\r\n ),\r\n //eslint-disable-next-line\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SchematicTable;\r\n","import React from 'react';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { Grid, IconButton, Typography } from '@material-ui/core';\r\n\r\nconst SchematicDrawerHeader = ({ classes, title, closeDrawer }) => {\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default SchematicDrawerHeader;\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Button, Grid, Drawer } from '@material-ui/core';\r\nimport SchematicDrawerHeader from 'features/wells/schematics/components/SchematicDrawerHeader';\r\nimport { formID } from 'features/wells/schematics/helpers/constants';\r\n\r\nconst SchematicDrawer = ({ children, classes, isOpen, onClose }) => {\r\n return (\r\n \r\n \r\n
    {children}
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n overflow: 'clip',\r\n background: theme.palette.background.default,\r\n },\r\n padding: {\r\n padding: theme.spacing(2),\r\n },\r\n footer: {\r\n marginTop: 'auto',\r\n backgroundColor: theme.palette.secondary.dark,\r\n padding: '16px 24px',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SchematicDrawer);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport startCase from 'lodash/startCase';\r\n\r\nconst DropdownOption = ({ element, classes }) => {\r\n // const svgDataBase64 = element.get('svgDataBase64');\r\n const name = element.get('name');\r\n return (\r\n \r\n {/* */}\r\n {startCase(name)}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n svgImage: {\r\n width: theme.spacing(4),\r\n height: theme.spacing(4),\r\n marginRight: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(DropdownOption);\r\n","// import { useEffect, useState } from 'react';\r\nimport { Field } from 'formik';\r\nimport { fromJS } from 'immutable';\r\nimport TextFieldFormik from 'app/components/form/formik/TextFieldFormik';\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid } from '@material-ui/core';\r\nimport DropdownOption from 'features/wells/schematics/components/DropdownOption';\r\nimport { SCHEMATIC_FORM_VALUES } from 'features/wells/schematics/helpers/constants';\r\nimport { startCase } from 'lodash';\r\n\r\nconst SchematicFormFeilds = ({\r\n classes,\r\n allElements,\r\n lengthUnit,\r\n widthUnit,\r\n}) => {\r\n // const { values } = useFormikContext();\r\n // const [selectedComponent, setSelectedComponent] = useState({\r\n // image: '',\r\n // display: false,\r\n // });\r\n\r\n // useEffect(() => {\r\n // if (values[SCHEMATIC_FORM_VALUES.COMPONENT]) {\r\n // const selectedComponentImage = allElements.find(\r\n // (element) => element.name === values[SCHEMATIC_FORM_VALUES.COMPONENT],\r\n // );\r\n // setSelectedComponent({\r\n // display: true,\r\n // image: selectedComponentImage.svgDataBase64,\r\n // });\r\n // }\r\n // // eslint-disable-next-line\r\n // }, [values[SCHEMATIC_FORM_VALUES.COMPONENT]]);\r\n\r\n return (\r\n \r\n \r\n element.get('name')}\r\n getItemName={(element) => }\r\n displayEmpty={false}\r\n SelectProps={{\r\n renderValue: (selected) => startCase(selected),\r\n }}\r\n />\r\n \r\n {/* */}\r\n \r\n \r\n \r\n {/* {selectedComponent.display && (\r\n \r\n \r\n \r\n )} */}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nconst styles = (theme) => ({\r\n fieldWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n textfieldLabel: {\r\n '& .MuiInputLabel-outlined.MuiInputLabel-shrink': {\r\n background: theme.palette.background.default,\r\n },\r\n '& .MuiOutlinedInput-root': {\r\n textarea: {\r\n minHeight: theme.spacing(4),\r\n },\r\n },\r\n },\r\n\r\n field: {\r\n padding: theme.spacing(1),\r\n },\r\n svgImage: {\r\n width: theme.spacing(12),\r\n height: theme.spacing(12),\r\n marginRight: theme.spacing(1),\r\n },\r\n svgImageGrid: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SchematicFormFeilds);\r\n","import { Formik, Form } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n formDataMapper,\r\n getFormSchema,\r\n} from 'features/wells/schematics/helpers/utils';\r\nimport { formID } from 'features/wells/schematics/helpers/constants';\r\nimport SchematicFormFeilds from 'features/wells/schematics/components/SchematicFormFeilds';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst SchematicForm = ({\r\n handleSubmit,\r\n initialValues,\r\n allElements,\r\n lengthUnit,\r\n widthUnit,\r\n}) => {\r\n return (\r\n {\r\n const mappedData = formDataMapper(values, lengthUnit, widthUnit);\r\n handleSubmit(mappedData);\r\n }}\r\n initialValues={initialValues ?? {}}\r\n validationSchema={getFormSchema()}\r\n >\r\n {() => (\r\n
    \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n fieldWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n textfieldLabel: {\r\n '& .MuiInputLabel-outlined.MuiInputLabel-shrink': {\r\n background: theme.palette.background.default,\r\n },\r\n },\r\n field: {\r\n padding: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SchematicForm);\r\n","import {\r\n Grid,\r\n Dialog,\r\n DialogContent,\r\n DialogActions,\r\n Typography,\r\n Button,\r\n} from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst SchematicModal = ({\r\n classes,\r\n componentName,\r\n isOpen,\r\n onCancel,\r\n onDelete,\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Delete component?\r\n \r\n \r\n \r\n \r\n \r\n Are you sure you want to delete the {componentName}? This action\r\n is irreversible.\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n header: {\r\n padding: theme.spacing(3),\r\n },\r\n content: {\r\n padding: `0px ${theme.spacing(3)}px`,\r\n paddingBottom: theme.spacing(3),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SchematicModal);\r\n","import { Formik, Form, Field } from 'formik';\r\nimport { Button, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { EditorState, ContentState, convertFromRaw } from 'draft-js';\r\n\r\nimport { SCHEMATIC_COMMENT_FORM_VALUES } from 'features/wells/schematics/helpers/constants';\r\nimport EditorFormik from 'app/components/form/formik/EditorFormik';\r\nimport { useState } from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nconst SchematicCommentForm = ({\r\n handleSubmit,\r\n initialValues,\r\n isEdit,\r\n isFetching,\r\n classes,\r\n}) => {\r\n const getEditorContent = (content) => {\r\n return content\r\n ? EditorState.createWithContent(ContentState.createFromText(content))\r\n : EditorState.createEmpty();\r\n };\r\n const { comment } = initialValues;\r\n const [editorState, setEditorState] = useState(getEditorContent(comment));\r\n const [plainText, setPlainText] = useState(comment || '');\r\n\r\n const formatEditorValue = (value) => {\r\n if (value instanceof EditorState) {\r\n return value;\r\n }\r\n return EditorState.createWithContent(\r\n ContentState.createFromText(plainText),\r\n );\r\n };\r\n\r\n const placeCursorAtEnd = (editorState) => {\r\n const contentState = editorState.getCurrentContent();\r\n const lastBlock = contentState.getBlockMap().last();\r\n if (!lastBlock) return editorState;\r\n\r\n const key = lastBlock.getKey();\r\n const length = lastBlock.getLength();\r\n const newSelection = editorState.getSelection().merge({\r\n anchorKey: key,\r\n anchorOffset: length,\r\n focusKey: key,\r\n focusOffset: length,\r\n hasFocus: true,\r\n });\r\n\r\n return EditorState.forceSelection(editorState, newSelection);\r\n };\r\n\r\n const handleEditorChange = (newEditorState) => {\r\n const newPlainText = convertFromRaw(newEditorState).getPlainText();\r\n setEditorState((prevState) => placeCursorAtEnd(prevState));\r\n setPlainText(newPlainText);\r\n };\r\n\r\n const handleEditorFocus = () => {\r\n setTimeout(() => {\r\n setEditorState((prevState) => placeCursorAtEnd(prevState));\r\n }, 10);\r\n };\r\n\r\n useEffect(() => {\r\n setPlainText(comment || '');\r\n setEditorState(getEditorContent(comment));\r\n }, [comment]);\r\n\r\n return (\r\n {\r\n handleSubmit(\r\n values[SCHEMATIC_COMMENT_FORM_VALUES.COMMENT]\r\n .getCurrentContent()\r\n .getPlainText(),\r\n );\r\n }}\r\n initialValues={{\r\n [SCHEMATIC_COMMENT_FORM_VALUES.COMMENT]: editorState,\r\n }}\r\n >\r\n {() => (\r\n
    \r\n \r\n \r\n \r\n {isEdit ? (\r\n \r\n \r\n {}}\r\n color=\"primary\"\r\n variant=\"contained\"\r\n type=\"submit\"\r\n >\r\n Save version\r\n \r\n \r\n ) : null}\r\n
    \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n form: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n buttonsWrapper: {\r\n alignSelf: 'flex-end',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n textfieldLabel: {\r\n '& .MuiInputLabel-outlined.MuiInputLabel-shrink': {\r\n background: theme.palette.background.default,\r\n },\r\n },\r\n textEditorWrapper: {\r\n '& .public-DraftStyleDefault-block': {\r\n marginTop: 0,\r\n },\r\n height: '180px',\r\n paddingBottom: '28px',\r\n overflowY: 'none',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SchematicCommentForm);\r\n","import { Formik, Form } from 'formik';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport SelectTextFieldFormik from 'app/components/form/formik/SelectTextFieldFormik';\r\nimport { SCHEMATIC_VERSION_FORM_VALUES } from 'features/wells/schematics/helpers/constants';\r\nimport { fromJS } from 'immutable';\r\nimport moment from 'moment';\r\nimport { Format } from 'app/app.constants';\r\n\r\nconst SchematicVersionForm = ({\r\n versionsList,\r\n onChange,\r\n selectedSchematicVersion,\r\n classes,\r\n}) => {\r\n const getItemName = (element) =>\r\n moment(element).format(`${Format.date_dayfirst}, hh:mm A`);\r\n\r\n if (versionsList.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {() => (\r\n
    \r\n Version:\r\n element}\r\n getItemName={getItemName}\r\n displayEmpty={false}\r\n SelectProps={{\r\n onChange,\r\n value: selectedSchematicVersion,\r\n }}\r\n />\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n form: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n field: {\r\n paddingLeft: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(SchematicVersionForm);\r\n","import { useState, useRef, useEffect } from 'react';\r\n\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Button, Grid, Typography } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { useTheme, alpha } from '@material-ui/core/styles';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\n\r\nimport { Plot } from '@int/geotoolkit/plot/Plot';\r\nimport { WellBoreNode } from '@int/geotoolkit/schematics/scene/WellBoreNode';\r\nimport { WellBoreData } from '@int/geotoolkit/schematics/data/WellBoreData';\r\nimport { FillStyle } from '@int/geotoolkit/attributes/FillStyle';\r\nimport { ViewMode } from '@int/geotoolkit/schematics/scene/WellBoreNode';\r\nimport { Group } from '@int/geotoolkit/scene/Group';\r\nimport { Rectangle } from '@int/geotoolkit/scene/shapes/Rectangle';\r\nimport { CssLayout } from '@int/geotoolkit/layout/CssLayout';\r\nimport { Layer } from '@int/geotoolkit/scene/Layer';\r\nimport { Events as SelectionEvents } from '@int/geotoolkit/controls/tools/Selection';\r\nimport { ComponentNode } from '@int/geotoolkit/schematics/scene/ComponentNode';\r\nimport { LineStyle } from '@int/geotoolkit/attributes/LineStyle';\r\nimport { Rect } from '@int/geotoolkit/util/Rect';\r\nimport { ComponentNodeFactoryRegistry } from '@int/geotoolkit/schematics/factory/ComponentNodeFactoryRegistry';\r\n\r\nimport SchematicTable from 'features/wells/schematics/components/SchematicTable';\r\nimport SchematicDrawer from 'features/wells/schematics/components/SchematicDrawer';\r\nimport SchematicForm from 'features/wells/schematics/components/SchematicForm';\r\nimport SchematicModal from 'features/wells/schematics/components/SchematicModal';\r\nimport SchematicCommentForm from 'features/wells/schematics/components/SchematicCommentForm';\r\nimport SchematicVersionForm from 'features/wells/schematics/components/SchematicVersionForm';\r\n\r\nimport {\r\n createWellLogWidget,\r\n highlightComponentNode,\r\n initialFormValueMapper,\r\n leftRectangle,\r\n rightRectangle,\r\n setLeftRectangle,\r\n setRightRectangle,\r\n} from 'features/wells/schematics/helpers/utils';\r\n\r\nimport 'features/wells/schematics/components/wellBoreStyleLatest.css';\r\n\r\nconst WellBoreSchematic = ({\r\n classes,\r\n comment,\r\n data,\r\n versionsList,\r\n allElements,\r\n units,\r\n selectedSchematicVersion,\r\n isEdit,\r\n isFetching,\r\n handleSelectChange,\r\n handleSubmit,\r\n handleVersionFormSubmit,\r\n handleDelete,\r\n}) => {\r\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const [rowIndex, setRowIndex] = useState(null);\r\n const [editMode, setEditMode] = useState(false);\r\n const canvasRef = useRef();\r\n const wellBoreNodeRef = useRef();\r\n const higlightRef = useRef();\r\n const theme = useTheme();\r\n const hasData = data !== undefined && data !== null && data.length !== 0;\r\n const initialValues =\r\n data && data.length !== 0 && rowIndex !== null\r\n ? initialFormValueMapper(data[rowIndex])\r\n : null;\r\n const white = theme.palette.common.white;\r\n const grey = theme.palette.tabs.background.main;\r\n const { length, width } = units;\r\n const shouldShowButtons = isEdit && editMode;\r\n\r\n const submitCallback = () => {\r\n setRowIndex(null);\r\n setIsDrawerOpen(false);\r\n };\r\n\r\n const deleteCallback = () => {\r\n setRowIndex(null);\r\n setIsModalOpen(false);\r\n };\r\n\r\n const formSubmit = (formState) => {\r\n handleSubmit(formState, submitCallback, rowIndex);\r\n };\r\n\r\n const onEdit = (rowIndex) => {\r\n setRowIndex(rowIndex);\r\n setIsDrawerOpen(true);\r\n };\r\n\r\n const onDelete = (rowIndex) => {\r\n setRowIndex(rowIndex);\r\n setIsModalOpen(true);\r\n };\r\n\r\n const onDeleteConfirm = () => {\r\n handleDelete(rowIndex, deleteCallback);\r\n };\r\n\r\n const onCancelConfirm = () => {\r\n setIsModalOpen(false);\r\n setRowIndex(null);\r\n };\r\n\r\n const onSchematicVersionChange = (event) => {\r\n setEditMode(false);\r\n handleSelectChange(event.target.value);\r\n };\r\n\r\n const handleClick = (index) => {\r\n if (wellBoreNodeRef.current && higlightRef.current) {\r\n leftRectangle.setVisible(false);\r\n rightRectangle.setVisible(false);\r\n const componentNode = wellBoreNodeRef.current.getComponents().toArray()[\r\n index\r\n ];\r\n highlightComponentNode(\r\n componentNode,\r\n wellBoreNodeRef.current,\r\n higlightRef.current,\r\n );\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (canvasRef.current && data != null) {\r\n const registry = new ComponentNodeFactoryRegistry(true);\r\n const wellBoreData = new WellBoreData({\r\n elements: data,\r\n units: {\r\n depth: length,\r\n value: width,\r\n },\r\n });\r\n const geometryBounds = wellBoreData.getGeometryBounds();\r\n const wellBoreNode = new WellBoreNode({\r\n data: wellBoreData,\r\n viewmode: ViewMode.Regular,\r\n registry,\r\n }).setBounds(\r\n new Rect(0.2, geometryBounds.getTop(), 0.8, geometryBounds.getBottom()),\r\n );\r\n\r\n wellBoreNodeRef.current = wellBoreNode;\r\n const wellLogWidget = createWellLogWidget(wellBoreNode, geometryBounds);\r\n\r\n const group = new Group({ automodellimitsmode: false })\r\n .setLayout(new CssLayout())\r\n .addChild(\r\n wellLogWidget.setLayoutStyle({\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n width: 400,\r\n }),\r\n );\r\n const plot = new Plot({\r\n canvaselement: canvasRef.current,\r\n root: group,\r\n });\r\n\r\n group.setProperties({ border: null });\r\n group.setProperties({\r\n linestyle: { color: grey, width: 2 },\r\n });\r\n wellBoreNode.setProperties({ border: null });\r\n wellBoreNode.setProperties({\r\n linestyle: { color: 'transparent', width: 0 },\r\n });\r\n wellLogWidget.fitToHeight();\r\n\r\n const highlight = new Layer();\r\n higlightRef.current = highlight;\r\n\r\n const highlightLineStyle = new LineStyle('transparent');\r\n const highlightFillStyle = new FillStyle(alpha(white, 0.36));\r\n setLeftRectangle(\r\n new Rectangle({\r\n linestyle: highlightLineStyle,\r\n fillstyle: highlightFillStyle,\r\n visible: false,\r\n }),\r\n );\r\n setRightRectangle(\r\n new Rectangle({\r\n linestyle: highlightLineStyle,\r\n fillstyle: highlightFillStyle,\r\n visible: false,\r\n }),\r\n );\r\n highlight.addChild([leftRectangle, rightRectangle]);\r\n wellLogWidget.getTrackContainer().addLayer(highlight);\r\n\r\n const selectionOff = () => {\r\n leftRectangle.setVisible(false);\r\n rightRectangle.setVisible(false);\r\n };\r\n\r\n wellLogWidget\r\n .getToolByName('pick')\r\n .setNodeFilter((nodes) =>\r\n nodes.filter((node) => node instanceof ComponentNode),\r\n )\r\n // Add wellbore node click listener:\r\n .on(SelectionEvents.onPick, (_evt, _sender, eventArgs) => {\r\n selectionOff();\r\n\r\n // New selection / highlight:\r\n const nodes = eventArgs.getSelection();\r\n if (nodes && nodes.length > 0) {\r\n const componentNode = nodes[nodes.length - 1];\r\n // Highlight schematics node:\r\n highlightComponentNode(componentNode, wellBoreNode, highlight);\r\n }\r\n });\r\n\r\n return () => {\r\n plot.dispose();\r\n };\r\n }\r\n }, [data, white, grey, length, width]);\r\n\r\n return (\r\n
    \r\n \r\n {hasData ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n No Schematic version is added yet\r\n \r\n \r\n )}\r\n \r\n \r\n
    \r\n
    \r\n \r\n {shouldShowButtons ? (\r\n setIsDrawerOpen(true)}\r\n >\r\n \r\n Add\r\n \r\n ) : null}\r\n {isEdit && !editMode ? (\r\n setEditMode(true)}\r\n >\r\n \r\n Edit Schematic\r\n \r\n ) : null}\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n {\r\n setIsDrawerOpen(false);\r\n setRowIndex(null);\r\n }}\r\n >\r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n emptyStateWrapper: {\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n },\r\n emptyStateColor: {\r\n color: theme.palette.secondary.light,\r\n },\r\n warningIcon: {\r\n fontSize: theme.typography.h2.fontSize,\r\n paddingBottom: theme.spacing(2),\r\n },\r\n wrapper: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n tableWrapper: { maxHeight: '70%', overflowY: 'auto' },\r\n versionFormWrapper: {\r\n display: 'flex',\r\n aligntems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n versionCommentFormWrapper: { marginTop: 'auto', flexBasis: 'auto' },\r\n button: {\r\n marginBottom: theme.spacing(2),\r\n marginLeft: 'auto',\r\n },\r\n editButton: {\r\n display: 'flex',\r\n padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n whiteSpace: 'nowrap',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(WellBoreSchematic);\r\n","import { useState, useEffect } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\n\r\nimport {\r\n createNewSchematicVersion,\r\n createSchematicComponent,\r\n deleteSchematicComponent,\r\n fetchSchematicData,\r\n updateSchematicComponent,\r\n} from 'features/wells/wellbore.actions';\r\nimport { loadAllElementsList } from 'features/wells/wellbore.actions.js';\r\n\r\nimport { selectSchematicData } from 'features/wells/wellbore.selectors';\r\nimport { getCurrentClientSelectedUom } from 'app/app.selectors';\r\nimport { getAllElementsList } from 'features/wells/wellbore.selectors';\r\nimport { getUnitsOfMeasurePreference } from 'features/equipment/equipment.selectors';\r\n\r\nimport { BasePage } from 'altus-ui-components';\r\nimport WellBoreSchematic from 'features/wells/schematics/components/WellBoreSchematic';\r\nimport {\r\n newSchematicVersionComponentsMapper,\r\n schematicUoM,\r\n} from 'features/wells/schematics//helpers/utils';\r\nimport { UNIT_OF_MEASURE } from 'features/equipment/equipment.constants';\r\n\r\nconst SchematicContainer = ({\r\n intData,\r\n dispatchFetchSchematicData,\r\n dispatchCreateSchematicComponent,\r\n dispatchUpdateSchematicComponent,\r\n dispatchDeleteSchematicComponent,\r\n dispatchLoadAllElements,\r\n dispatchCreateNewSchematicVersion,\r\n allElements,\r\n wellboreId,\r\n}) => {\r\n const [selectedSchematicVersion, setSelectedSchematicVersion] = useState('');\r\n const { data, error, isFetching } = intData;\r\n const hasIds = wellboreId;\r\n const measurePreferences = useSelector(getCurrentClientSelectedUom);\r\n const unitsOfMeasurePreference = useSelector(getUnitsOfMeasurePreference);\r\n const selectUoMPreference =\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.IMPERIAL ||\r\n unitsOfMeasurePreference === UNIT_OF_MEASURE.METRIC\r\n ? unitsOfMeasurePreference\r\n : measurePreferences?.length;\r\n const UoM = schematicUoM(selectUoMPreference);\r\n const hasData = data !== undefined && data !== null && data.length !== 0;\r\n const versionsList =\r\n hasData && data[0]?.validFrom\r\n ? data.map((version) => version.validFrom)\r\n : [];\r\n const selectedSchematicVersionIndex = versionsList.indexOf(\r\n selectedSchematicVersion,\r\n );\r\n const isEdit =\r\n versionsList.length === 0 ||\r\n selectedSchematicVersionIndex === versionsList.length - 1;\r\n\r\n const schematicVersionComponentsData =\r\n hasData && selectedSchematicVersionIndex >= 0\r\n ? data[selectedSchematicVersionIndex].components\r\n : [];\r\n\r\n const componentsData =\r\n hasData && selectedSchematicVersionIndex < 0\r\n ? data[0].components\r\n : schematicVersionComponentsData;\r\n\r\n const versionComment =\r\n hasData && selectedSchematicVersionIndex >= 0\r\n ? data[selectedSchematicVersionIndex].comment\r\n : '';\r\n\r\n const handleSelectChange = (value) => setSelectedSchematicVersion(value);\r\n const handleSubmit = (formState, callback, componentIndex) => {\r\n const isEditMode = componentIndex !== null && componentIndex >= 0;\r\n if (isEditMode) {\r\n return dispatchUpdateSchematicComponent(\r\n formState,\r\n callback,\r\n componentIndex,\r\n );\r\n }\r\n dispatchCreateSchematicComponent(formState, callback);\r\n };\r\n const handleDelete = (componentIndex, callback) => {\r\n return dispatchDeleteSchematicComponent(componentIndex, callback);\r\n };\r\n\r\n const handleVersionFormSubmit = (comment) => {\r\n dispatchCreateNewSchematicVersion(wellboreId, {\r\n comment,\r\n components: newSchematicVersionComponentsMapper(\r\n componentsData,\r\n UoM.length,\r\n UoM.width,\r\n ),\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n dispatchLoadAllElements();\r\n }, [dispatchLoadAllElements]);\r\n\r\n useEffect(() => {\r\n if (hasIds) {\r\n dispatchFetchSchematicData(wellboreId);\r\n }\r\n }, [dispatchFetchSchematicData, hasIds, wellboreId]);\r\n\r\n useEffect(() => {\r\n if (hasData) {\r\n setSelectedSchematicVersion(data[data.length - 1].validFrom);\r\n }\r\n }, [hasData, data, setSelectedSchematicVersion]);\r\n\r\n if (error) {\r\n //will display proper component\r\n return 'Error ocured.';\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default connect(\r\n (state) => ({\r\n intData: selectSchematicData(state),\r\n allElements: getAllElementsList(state),\r\n }),\r\n {\r\n dispatchFetchSchematicData: fetchSchematicData,\r\n dispatchLoadAllElements: loadAllElementsList,\r\n dispatchCreateSchematicComponent: createSchematicComponent,\r\n dispatchUpdateSchematicComponent: updateSchematicComponent,\r\n dispatchDeleteSchematicComponent: deleteSchematicComponent,\r\n dispatchCreateNewSchematicVersion: createNewSchematicVersion,\r\n },\r\n)(SchematicContainer);\r\n","import { NavTabsContainer } from 'altus-ui-components';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport { toRiskManagement } from 'utils/route.util';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { useHistory } from 'react-router-dom';\r\nimport BackButton from 'app/components/BackButton';\r\nimport { useTheme } from '@material-ui/core/styles';\r\nimport { useLocation } from 'react-router';\r\nimport { useEffect } from 'react';\r\nimport { getIntegrityRuleDetails } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\nimport { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport { getSelectedIntegrityRule } from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\n\r\nconst IntegrityDetailsContainer = ({\r\n routes,\r\n fieldId,\r\n wellboreId,\r\n dispatchGetRuleDetails,\r\n integrityId,\r\n selectedRule,\r\n}) => {\r\n const history = useHistory();\r\n const theme = useTheme();\r\n const location = useLocation();\r\n const showTabs =\r\n location.pathname.includes('attachments') ||\r\n location.pathname.includes('history');\r\n\r\n useEffect(() => {\r\n if (integrityId) dispatchGetRuleDetails(integrityId);\r\n }, [integrityId, dispatchGetRuleDetails]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n history.push(toRiskManagement(fieldId, wellboreId))}\r\n />\r\n \r\n \r\n \r\n {selectedRule && selectedRule.title}\r\n \r\n \r\n \r\n {showTabs && }\r\n {}\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n selectedRule: getSelectedIntegrityRule(state),\r\n }),\r\n {\r\n dispatchGetRuleDetails: getIntegrityRuleDetails,\r\n },\r\n ),\r\n)(IntegrityDetailsContainer);\r\n","import React, { useMemo } from 'react';\r\nimport moment from 'moment';\r\nimport { Table } from 'altus-ui-components';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport LoopIcon from '@material-ui/icons/Loop';\r\nimport NoteAddIcon from '@material-ui/icons/NoteAdd';\r\nimport { Avatar as TooltipAvatar } from 'app/components/withTooltip';\r\nimport {\r\n ATTACHMENTS_DATE_FORMAT,\r\n TRAIL_SOURCE_ENUM,\r\n} from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst IntegrityDetailsHistoryTable = ({ history }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n disableSortBy: true,\r\n Cell: ({ row }) => {\r\n const trail = row.original;\r\n\r\n switch (trail.source) {\r\n case TRAIL_SOURCE_ENUM.CREATED:\r\n return (\r\n \r\n \r\n \r\n );\r\n case TRAIL_SOURCE_ENUM.RULE:\r\n return (\r\n \r\n \r\n \r\n );\r\n case TRAIL_SOURCE_ENUM.UPLOADED:\r\n case TRAIL_SOURCE_ENUM.ATTACHED:\r\n case TRAIL_SOURCE_ENUM.UNATTACHED:\r\n return (\r\n \r\n \r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n },\r\n },\r\n {\r\n xs: 6,\r\n Header: 'Rule Change',\r\n accessor: (history) => history.currentValue,\r\n Cell: ({ row }) => {\r\n const trail = row.original;\r\n\r\n switch (trail.source) {\r\n case TRAIL_SOURCE_ENUM.RULE:\r\n return trail.oldValue ? (\r\n \r\n {`Rule Value changed from ${trail.oldValue} to ${trail.currentValue}`}\r\n \r\n ) : (\r\n \r\n {`Rule Value changed to ${trail.currentValue}`}\r\n \r\n );\r\n case TRAIL_SOURCE_ENUM.UPLOADED:\r\n return (\r\n {`${trail.currentValue} was uploaded`}\r\n );\r\n case TRAIL_SOURCE_ENUM.ATTACHED:\r\n return (\r\n {`${trail.currentValue} was attached`}\r\n );\r\n case TRAIL_SOURCE_ENUM.UNATTACHED:\r\n return (\r\n \r\n {`${trail.currentValue} was unattached`}\r\n \r\n );\r\n default:\r\n return (\r\n {`Rule ${trail.currentValue} created.`}\r\n );\r\n }\r\n },\r\n },\r\n {\r\n xs: 4,\r\n Header: 'Done By',\r\n accessor: (history) => history.user?.fullName,\r\n Cell: ({ row }) => {\r\n const user = row.original.user;\r\n\r\n return user ? (\r\n \r\n \r\n \r\n {!user.avatar && user.initials}\r\n \r\n \r\n \r\n {user.fullName}\r\n \r\n \r\n ) : null;\r\n },\r\n },\r\n\r\n {\r\n xs: 2,\r\n id: 'date',\r\n Header: 'Date Changed',\r\n accessor: (history) =>\r\n moment(history.dateChanged).format(ATTACHMENTS_DATE_FORMAT),\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default IntegrityDetailsHistoryTable;\r\n","import React, { useEffect } from 'react';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { getIntegrityManagementWellIntegrityHistoryFromState } from 'features/settings/integrityManagement/helpers/integrityManagement.selectors';\r\nimport { INTEGRITY_MANAGEMENT_ACTIONS } from 'features/settings/integrityManagement/helpers/integrityManagement.constants';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport { loadIntegrityManagementWellIntegrityHistory } from 'features/settings/integrityManagement/helpers/integrityManagement.actions';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport IntegrityDetailsHistoryTable from 'features/wells/integrity/integrityDetails/history/IntegrityDetailsHistoryTable';\r\n\r\nconst IntegrityDetailsHistoryContainer = ({\r\n classes,\r\n wellboreId,\r\n integrityId,\r\n history,\r\n dispatchLoadWellIntegrityHistory,\r\n}) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n\r\n useEffect(() => {\r\n if (wellbore.get('externalWellboreExternalId') && integrityId)\r\n dispatchLoadWellIntegrityHistory(\r\n wellbore.get('externalWellboreExternalId'),\r\n integrityId,\r\n );\r\n }, [wellbore, integrityId, dispatchLoadWellIntegrityHistory]);\r\n\r\n return (\r\n \r\n {history && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n historyTable: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_HISTORY,\r\n ),\r\n history: getIntegrityManagementWellIntegrityHistoryFromState(\r\n state,\r\n INTEGRITY_MANAGEMENT_ACTIONS.GET_INTEGRITY_MANAGEMENT_WELL_INTEGRITY_HISTORY,\r\n ),\r\n }),\r\n {\r\n dispatchLoadWellIntegrityHistory:\r\n loadIntegrityManagementWellIntegrityHistory,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(IntegrityDetailsHistoryContainer);\r\n","import React from 'react';\r\nimport { Grid, Typography, Button } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport DownloadIcon from '@material-ui/icons/GetApp';\r\n\r\nconst AddLogFilesDrawerTemplateSection = ({ classes }) => {\r\n return (\r\n <>\r\n \r\n Step 1: Download\r\n \r\n\r\n \r\n \r\n \r\n TEMPLATE\r\n \r\n \r\n Please download this Excel template to fill out the log file{' '}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n buttonContainer: {\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n },\r\n textStyle: {\r\n marginTop: theme.spacing(2),\r\n color: theme.palette.secondary.light,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AddLogFilesDrawerTemplateSection);\r\n","import React, { useState } from 'react';\r\nimport { Grid, Typography, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport moment from 'moment';\r\nimport { MAX_UPLOAD_FILE_SIZE } from 'app/app.constants';\r\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\r\n\r\nconst AddLogFilesDrawerUploadSection = ({ classes, isSubmitting }) => {\r\n const [uploadedFiles, setUploadedFiles] = useState([]);\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop: (acceptedFiles) => {\r\n setUploadedFiles((prevFiles) => [\r\n ...prevFiles,\r\n ...acceptedFiles.map((file) => ({\r\n id: uuidv4(),\r\n name: file.name,\r\n reportingDate: moment(), // default\r\n content: file,\r\n })),\r\n ]);\r\n },\r\n disabled: isSubmitting,\r\n noClick: false,\r\n noKeyboard: true,\r\n maxSize: MAX_UPLOAD_FILE_SIZE,\r\n });\r\n\r\n return (\r\n <>\r\n \r\n Step 2: Upload\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Click to upload or\r\n drag and drop the file\r\n \r\n \r\n Only Excel spreadsheets are supported. (max. 3MB)\r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n uploadContainer: {\r\n padding: theme.spacing(2),\r\n margin: theme.spacing(2),\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n border: '2px dashed grey',\r\n cursor: 'pointer',\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n },\r\n textStyle: {\r\n marginTop: theme.spacing(2),\r\n color: theme.palette.secondary.light,\r\n },\r\n uploadText: {\r\n color: theme.palette.action.selected,\r\n textDecoration: 'underline',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AddLogFilesDrawerUploadSection);\r\n","import React from 'react';\r\nimport { Grid, Drawer, Button } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport AddLogFilesDrawerTemplateSection from 'features/wells/corrosion/components/AddLogFilesDrawerTemplateSection';\r\nimport AddLogFilesDrawerUploadSection from 'features/wells/corrosion/components/AddLogFilesDrawerUploadSection';\r\nimport { Divider } from '@material-ui/core/';\r\n\r\nconst AddLogFileDrawer = ({ isOpen, toggleDrawer, classes }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n\r\n \r\n Save\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerPaper: {\r\n width: '30%',\r\n minWidth: 300,\r\n background: theme.palette.background.default,\r\n },\r\n circularProgress: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n sectionContainer: {\r\n padding: theme.spacing(2),\r\n },\r\n mainContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n drawerFooter: {\r\n position: 'fixed',\r\n bottom: 0,\r\n textAlign: 'center',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n right: 0,\r\n backgroundColor: theme.palette.secondary.dark,\r\n width: '30%',\r\n },\r\n drawerButton: {\r\n margin: theme.spacing(2),\r\n color: theme.palette.common.white,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(AddLogFileDrawer);\r\n","import { useLocation } from 'react-router';\r\nimport { BasePageHeader } from 'altus-ui-components';\r\nimport { NavTabsContainer } from 'altus-ui-components';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport { Button, Tab } from '@material-ui/core';\r\nimport AddLogFileDrawer from 'features/wells/corrosion/components/AddLogFileDrawer';\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nconst CorrosionContainer = ({ Icon, breadcrumb, routes, classes }) => {\r\n const location = useLocation();\r\n const hideAddButton = location && location.pathname.includes('comparelogs');\r\n const [showAddLogFile, toggleAddLogFile] = useToggle();\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!hideAddButton && (\r\n \r\n \r\n Add Log File\r\n \r\n )}\r\n \r\n \r\n {showAddLogFile && (\r\n <>\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n navContainer: {\r\n marginBottom: theme.spacing(3),\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CorrosionContainer);\r\n","import { useMemo } from 'react';\r\nimport { Table } from 'altus-ui-components';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst LogFilesTable = ({ logFiles }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 5,\r\n Header: 'File Name',\r\n accessor: (log) => log.title,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Service Provider',\r\n accessor: (log) => log.serviceprovider,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Tool',\r\n accessor: (log) => log.tool,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Log Date',\r\n accessor: (log) => log.logdate,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Uploaded By',\r\n accessor: (log) => log.serviceprovider,\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LogFilesTable;\r\n","import { Grid } from '@material-ui/core';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport LogFilesTable from 'features/wells/corrosion/components/LogFilesTable';\r\n\r\nconst LogFilesContainer = ({ wellboreId }) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n\r\n return (\r\n <>\r\n \r\n {wellbore?.get('externalWellboreExternalId') && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LogFilesContainer;\r\n","export const COMPARE_CORROSION_LOGS_FILTERS = {\r\n JOINTS: 'joints',\r\n LOGS: 'logs',\r\n CLASS: 'class',\r\n DIRECTION: 'direction',\r\n};\r\n\r\nexport const COMPARE_CORROSION_LOGS_FILTERS_LABELS = {\r\n JOINTS: 'by Joint',\r\n LOGS: 'by Logs',\r\n CLASS: 'by Class',\r\n DIRECTION: 'by Direction',\r\n};\r\n\r\nexport const MAX_NUMBER_OF_FILES_ALLOWED = 2;\r\n","import React from 'react';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Field, Formik } from 'formik';\r\nimport { Grid, TextField, MenuItem, Button } from '@material-ui/core';\r\nimport {\r\n COMPARE_CORROSION_LOGS_FILTERS,\r\n COMPARE_CORROSION_LOGS_FILTERS_LABELS,\r\n} from 'features/wells/corrosion/helpers/corrosionlogs.constants';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport CheckBox from '@material-ui/icons/CheckBox';\r\nimport CheckBoxOutlineBlank from '@material-ui/icons/CheckBoxOutlineBlank';\r\n\r\nconst CompareLogsFilters = ({ classes }) => {\r\n const initialFormValues = {\r\n [COMPARE_CORROSION_LOGS_FILTERS.LOGS]: EMPTY_LIST,\r\n [COMPARE_CORROSION_LOGS_FILTERS.JOINTS]: EMPTY_LIST,\r\n [COMPARE_CORROSION_LOGS_FILTERS.DIRECTION]: EMPTY_LIST,\r\n [COMPARE_CORROSION_LOGS_FILTERS.CLASS]: EMPTY_LIST,\r\n };\r\n\r\n return (\r\n {\r\n return;\r\n }}\r\n >\r\n {({ handleSubmit, setFieldValue }) => (\r\n
    \r\n \r\n {Object.entries(COMPARE_CORROSION_LOGS_FILTERS).map(\r\n ([key, value]) => (\r\n \r\n \r\n {({ field }) => (\r\n setFieldValue(value, e.target.value)}\r\n SelectProps={{\r\n multiple: true,\r\n renderValue: (selected) => selected.join(', '),\r\n }}\r\n >\r\n \r\n Option1\r\n \r\n \r\n Option2\r\n \r\n \r\n Option3\r\n \r\n \r\n )}\r\n \r\n \r\n ),\r\n )}\r\n \r\n \r\n Reset All\r\n \r\n \r\n Apply\r\n \r\n \r\n \r\n
    \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n filterContainer: {},\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n padding: theme.spacing(1),\r\n },\r\n buttons: {\r\n marginLeft: theme.spacing(2),\r\n width: '20%',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CompareLogsFilters);\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport CompareLogsFilters from 'features/wells/corrosion/components/CompareLogsFilters';\r\nimport { NavTabsContainer } from 'altus-ui-components';\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst CompareLogsContainer = ({ routes, classes }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n navContainer: {\r\n marginBottom: theme.spacing(3),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CompareLogsContainer);\r\n","import React from 'react';\r\nimport Highcharts from 'highcharts';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport { Card, CardContent, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst CompareLogsBarChartContainer = ({ classes }) => {\r\n const theme = useTheme();\r\n const options = {\r\n chart: {\r\n type: 'bar',\r\n backgroundColor: theme.palette.background.paper,\r\n height: theme.spacing(70),\r\n },\r\n title: {\r\n text: 'CORROSION LOG RESULTS',\r\n style: { color: theme.palette.common.white },\r\n },\r\n xAxis: {\r\n categories: ['1', '9', '16', '23', '35', '36', '37', '49'],\r\n title: {\r\n text: 'Joints',\r\n style: { color: theme.palette.common.white },\r\n },\r\n labels: { style: { color: theme.palette.common.white } },\r\n },\r\n yAxis: {\r\n min: 0,\r\n max: 100,\r\n title: {\r\n text: 'Maximum Corrosion Depth',\r\n style: { color: theme.palette.common.white },\r\n },\r\n labels: {\r\n format: '{value}%',\r\n style: { color: theme.palette.common.white },\r\n },\r\n gridLineColor: theme.palette.background.default,\r\n opposite: true,\r\n },\r\n tooltip: {\r\n formatter: function () {\r\n return `\r\n Joint: ${this.point.joint}
    \r\n Year: ${this.point.year}
    \r\n Depth: ${this.point.depth}m
    \r\n Max Depth: ${this.point.y}%
    \r\n Class: ${this.point.class}
    \r\n Position: ${this.point.position}
    \r\n Direction: ${this.point.direction}
    \r\n Total Metal Loss: ${this.point.loss}\r\n `;\r\n },\r\n },\r\n legend: {\r\n itemStyle: { color: theme.palette.common.white },\r\n },\r\n series: [\r\n {\r\n name: 'CorrosionData_2013',\r\n color: 'violet',\r\n data: [\r\n {\r\n y: 10,\r\n joint: 1,\r\n year: 2013,\r\n depth: 50,\r\n class: 'A',\r\n position: 12,\r\n direction: 'N',\r\n loss: 20,\r\n },\r\n {\r\n y: 40,\r\n joint: 9,\r\n year: 2013,\r\n depth: 70,\r\n class: 'B',\r\n position: 14,\r\n direction: 'E',\r\n loss: 45,\r\n },\r\n {\r\n y: 60,\r\n joint: 16,\r\n year: 2013,\r\n depth: 100,\r\n class: 'F',\r\n position: 28,\r\n direction: 'D',\r\n loss: 99,\r\n },\r\n {\r\n y: 75,\r\n joint: 23,\r\n year: 2013,\r\n depth: 80,\r\n class: 'D',\r\n position: 32,\r\n direction: 'W',\r\n loss: 65,\r\n },\r\n {\r\n y: 90,\r\n joint: 35,\r\n year: 2013,\r\n depth: 120,\r\n class: 'B',\r\n position: 42,\r\n direction: 'S',\r\n loss: 85,\r\n },\r\n {\r\n y: 85,\r\n joint: 36,\r\n year: 2013,\r\n depth: 110,\r\n class: 'C',\r\n position: 39,\r\n direction: 'E',\r\n loss: 77,\r\n },\r\n {\r\n y: 88,\r\n joint: 37,\r\n year: 2013,\r\n depth: 115,\r\n class: 'E',\r\n position: 41,\r\n direction: 'N',\r\n loss: 80,\r\n },\r\n {\r\n y: 92,\r\n joint: 49,\r\n year: 2013,\r\n depth: 130,\r\n class: 'A',\r\n position: 50,\r\n direction: 'W',\r\n loss: 95,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'CorrosionData_2022',\r\n color: 'orange',\r\n data: [\r\n { y: 12 },\r\n { y: 45 },\r\n { y: 70 },\r\n { y: 80 },\r\n { y: 95 },\r\n { y: 90 },\r\n { y: 93 },\r\n { y: 96 },\r\n ],\r\n },\r\n ],\r\n credits: { enabled: false },\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n card: {\r\n backgroundColor: theme.palette.grey.dark,\r\n width: '100%',\r\n },\r\n\r\n cardContainer: {\r\n padding: theme.spacing(2),\r\n },\r\n graphContainer: {\r\n width: '100%',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CompareLogsBarChartContainer);\r\n","import { EMPTY_LIST } from 'app/app.constants';\r\nimport { useMemo } from 'react';\r\nimport { Table } from 'altus-ui-components';\r\n\r\nconst ComparisionFileTableComponent = ({ logs }) => {\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 2,\r\n Header: 'Joint',\r\n accessor: (log) => log.joint,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Start Log Depth',\r\n accessor: (log) => log.startlogdepth,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Class',\r\n accessor: (log) => log.class,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Max Penetration',\r\n accessor: (log) => log.maxpenetration,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Max ML Position',\r\n accessor: (log) => log.maxmlposition,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Direction',\r\n accessor: (log) => log.direction,\r\n },\r\n {\r\n xs: 2,\r\n Header: 'Total Metal Loss',\r\n accessor: (log) => log.totalmetalloss,\r\n },\r\n ],\r\n [],\r\n );\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ComparisionFileTableComponent;\r\n","import { Card, CardContent, Typography, Grid, Box } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nconst ComparisionFileDetailComponent = ({ classes }) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n log_file_2013.xls\r\n \r\n\r\n \r\n \r\n \r\n \r\n Log Date\r\n \r\n 25.06 2013\r\n \r\n \r\n \r\n \r\n \r\n Total Metal Loss\r\n \r\n 187%\r\n \r\n \r\n \r\n \r\n \r\n Tool\r\n \r\n HRVRT\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n cardContainer: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n detailCard: {\r\n backgroundColor: theme.palette.secondary.main,\r\n padding: theme.spacing(1),\r\n borderRadius: theme.spacing(1),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ComparisionFileDetailComponent);\r\n","import ComparisionFileTableComponent from 'features/wells/corrosion/components/ComparisonFileTableComponent';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { MAX_NUMBER_OF_FILES_ALLOWED } from 'features/wells/corrosion/helpers/corrosionlogs.constants';\r\nimport ComparisionFileDetailComponent from 'features/wells/corrosion/components/ComparisionFileDetailComponent';\r\n\r\nconst CompareLogsTableContainer = ({ classes }) => {\r\n return (\r\n <>\r\n \r\n {Array.from({ length: MAX_NUMBER_OF_FILES_ALLOWED }, () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n logsContainer: {\r\n padding: theme.spacing(3),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(CompareLogsTableContainer);\r\n","import Settings from '@material-ui/icons/Settings';\r\nimport Integrity from '@material-ui/icons/PermDataSetting';\r\nimport PeopleIcon from '@material-ui/icons/People';\r\nimport VerifiedUser from '@material-ui/icons/VerifiedUser';\r\n\r\nimport { BasePage, OverviewContainer } from 'altus-ui-components';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { cheetahJobSourceToString } from 'mappers';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport { CheetahJobSource } from 'features/projects/dashboard/dashboard.constants';\r\n\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\n\r\nimport DashboardContainer from 'features/projects/dashboard/DashboardContainer';\r\nimport ProjectDashboardContainer from 'features/projects/dashboard/ProjectDashboardContainer';\r\nimport SimulationDashboardContainer from 'features/projects/dashboard/components/dashboards/SimulationDashboardContainer';\r\n\r\nimport UserAccessContainer from 'features/settings/userAccess/UserAccessContainer';\r\nimport SettingsOverviewContainer from 'features/settings/SettingsOverviewContainer';\r\nimport AccessRolesContainer from 'features/settings/accessRoles/AccessRolesContainer';\r\nimport ProjectRoleOverview from 'features/settings/accessRoles/projectRoles/ProjectRoleOverview';\r\nimport ProjectRoleContainer from 'features/settings/accessRoles/projectRoles/ProjectRoleContainer';\r\nimport ProjectRolesContainer from 'features/settings/accessRoles/projectRoles/ProjectRolesContainer';\r\nimport ProjectRoleBreadcrumb from 'features/settings/accessRoles/projectRoles/ProjectRoleBreadcrumb';\r\nimport ProjectRoleAccessRights from 'features/settings/accessRoles/projectRoles/ProjectRoleAccessRights';\r\n\r\nimport SystemRoutesContainer from 'app/components/SystemRoutesContainer';\r\nimport SystemRoleUsers from 'features/settings/accessRoles/systemRoles/SystemRoleUsers';\r\nimport SystemRoleOverview from 'features/settings/accessRoles/systemRoles/SystemRoleOverview';\r\nimport SystemRoleContainer from 'features/settings/accessRoles/systemRoles/SystemRoleContainer';\r\nimport SystemRoleBreadcrumb from 'features/settings/accessRoles/systemRoles/SystemRoleBreadcrumb';\r\nimport SystemRolesContainer from 'features/settings/accessRoles/systemRoles/SystemRolesContainer';\r\nimport SystemRoleAccessRights from 'features/settings/accessRoles/systemRoles/SystemRoleAccessRights';\r\n\r\nimport TaskDetailsContainer from 'features/projects/tasks/task/details/TaskDetailsContainer';\r\nimport TaskActivitiesContainer from 'features/projects/tasks/task/activities/TaskActivitiesContainer';\r\nimport TaskSimulationsContainer from 'features/projects/tasks/task/simulation/TaskSimulationsContainer';\r\nimport TaskToolstringsContainer from 'features/projects/tasks/task/toolstring/TaskToolstringsContainer';\r\nimport TaskSimulationContainer from 'features/projects/tasks/task/simulation/components/TaskSimulationContainer';\r\nimport TaskToolstringContainer from 'features/projects/tasks/task/toolstring/components/TaskToolstringContainer';\r\nimport TaskToolstringEditorContainer from 'features/projects/tasks/task/toolstring/components/edit/TaskToolstringEditorContainer';\r\n\r\nimport WellboreContainer from 'features/wells/WellboreContainer';\r\nimport WellEventsContainer from 'features/wells/events/WellEventsContainer';\r\nimport WellboreBreadcrumb from 'features/projects/components/WellboreBreadcrumb';\r\nimport WellOverviewContainer from 'features/wells/overview/WellOverviewContainer';\r\nimport WellboreFilesContainer from 'features/wells/components/WellboreFilesContainer';\r\nimport WellboreDetailsContainer from 'features/wells/details/WellboreDetailsContainer';\r\nimport WellboreSectionsContainer from 'features/wells/sections/WellboreSectionsContainer';\r\nimport WellboreElementsContainer from 'features/wells/elements/WellboreElementsContainer';\r\n\r\nimport TaskSimulationFluidsContainer from 'features/projects/tasks/task/simulation/fluids/TaskSimulationFluidsContainer';\r\nimport TaskSimulationCommentContainer from 'features/projects/tasks/task/simulation/components/TaskSimulationCommentContainer';\r\nimport TaskSimulationOptionsContainer from 'features/projects/tasks/task/simulation/components/TaskSimulationOptionsContainer';\r\nimport TaskSimulationParametersContainer from 'features/projects/tasks/task/simulation/parameters/TaskSimulationParametersContainer';\r\nimport TaskSimulationTemperatureContainer from 'features/projects/tasks/task/simulation/components/TaskSimulationTemperatureContainer';\r\nimport TaskSimulationWellboreSectionsContainer from 'features/projects/tasks/task/simulation/components/TaskSimulationWellboreSectionsContainer';\r\nimport TaskSimulationDynamicToolParametersContainer from 'features/projects/tasks/task/simulation/dynamicToolParameters/TaskSimulationDynamicToolParametersContainer';\r\n\r\nimport TasksContainer from 'features/projects/tasks/TasksContainer';\r\nimport TaskContainer from 'features/projects/tasks/task/TaskContainer';\r\nimport EventsContainer from 'features/projects/events/EventsContainer';\r\nimport TaskBreadcrumb from 'features/projects/components/TaskBreadcrumb';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\nimport ProjectBreadcrumb from 'features/projects/components/ProjectBreadcrumb';\r\nimport FacilityDocumentsContainer from 'features/facilities/documents/FacilityDocumentsContainer';\r\nimport ProjectWellboreContainer from 'features/projects/wellbore/ProjectWellboreContainer';\r\nimport ProjectWellboreOverview from 'features/projects/wellbore/survey/ProjectWellboreOverview';\r\nimport ProjectWellboreDetailsContainer from 'features/projects/wellbore/details/ProjectWellboreDetailsContainer';\r\nimport ProjectWellboreSectionsContainer from 'features/projects/wellbore/sections/ProjectWellboreSectionsContainer';\r\nimport ProjectWellboreDetailFormContainer from 'features/projects/wellbore/details/ProjectWellboreDetailFormContainer';\r\n\r\nimport ExecutionRootContainer from 'features/projects/execution/ExecutionRootContainer';\r\nimport ExecutionIndexContainer from 'features/projects/execution/ExecutionIndexContainer';\r\nimport ExecutionSimulationContainer from 'features/projects/execution/tabs/simulation/ExecutionSimulationContainer';\r\nimport ExecutionSimulationIndexContainer from 'features/projects/execution/tabs/simulation/ExecutionSimulationIndexContainer';\r\nimport ExecutionSurfaceEquipmentContainer from 'features/projects/execution/tabs/surfaceequipment/ExecutionSurfaceEquipmentContainer';\r\nimport ExecutionActivitiesContainer from 'features/projects/execution/tabs/activities/ExecutionActivitiesContainer';\r\nimport ExecutionToolStringContainer from 'features/projects/execution/tabs/toolstring/ExecutionToolStringContainer';\r\n\r\nimport OperationsContainer from 'features/operations/OperationsContainer';\r\nimport OperationsOverviewContainer from 'features/operations/OperationsOverviewContainer';\r\n\r\nimport DataExchangeBasePage from 'features/data-exchange/DataExchangeBasePage';\r\nimport DataExchangeIcon from 'app/components/ApplicationHeader/DataExchangeIcon';\r\nimport DataExchangeContainer from 'features/data-exchange/DataExchangeContainer';\r\nimport ArchivedWinchContainer from 'features/data-exchange/winch/ArchivedWinchContainer';\r\nimport AvailableWinchContainer from 'features/data-exchange/winch/AvailableWinchContainer';\r\nimport LiveProjectContainer from 'features/data-exchange/live-projects/LiveProjectContainer';\r\nimport ArchivedWarriorContainer from 'features/data-exchange/warrior/ArchivedWarriorContainer';\r\nimport AvailableWarriorContainer from 'features/data-exchange/warrior/AvailableWarriorContainer';\r\nimport ConfigurationWinchContainer from 'features/data-exchange/winch/ConfigurationWinchContainer';\r\nimport ArchivedCheetahJobsContainer from 'features/data-exchange/cheetah/ArchivedCheetahContainer';\r\nimport AvailableCheetahJobsContainer from 'features/data-exchange/cheetah/AvailableCheetahContainer';\r\nimport CheetahJobCurvesContainer from 'features/data-exchange/live-projects/CheetahJobCurvesContainer';\r\nimport LiveProjectOverviewContainer from 'features/data-exchange/live-projects/LiveProjectOverviewContainer';\r\nimport {\r\n ArchivedLiveProjectsPaginatedContainer,\r\n AvailableLiveProjectsPaginatedContainer,\r\n} from 'features/data-exchange/live-projects/LiveProjectsPaginated';\r\n\r\nimport FacilitiesContainer from 'features/facilities/FacilitiesContainer';\r\nimport FacilitiesProjects from 'features/facilities/projects/FacilitiesProjects';\r\nimport FacilityContainer from 'features/wells/FacilityContainer';\r\nimport FacilityOverview from 'features/facilities/overview/FacilityOverview';\r\nimport FacilityDetailsContainer from 'features/facilities/details/FacilityDetailsContainer';\r\n\r\nimport EquipmentContainer from 'features/equipment/EquipmentContainer';\r\nimport EquipmentRoutingContainer from 'features/equipment/EquipmentRoutingContainer';\r\nimport EquipmentDetailsContainer from 'features/equipment/details/EquipmentDetailsContainer';\r\nimport ToolProjectHistoryContainer from 'features/equipment/projectHistory/ToolProjectHistoryContainer';\r\nimport SurfaceEquipmentDetails from 'features/equipment/details/SurfaceEquipmentDetails';\r\nimport ProjectDetailsDescriptionContainer from 'features/projects/details/components/ProjectDetailsDescriptionContainer';\r\nimport ProjectReportLessonContainer from 'features/projects/components/ProjectReportLessonContainer';\r\nimport TaskSurfaceEquipmentContainer from 'features/projects/tasks/task/surfaceEquipment/TaskSurfaceEquipmentContainer';\r\nimport TestingContainer from 'features/testing/TestingContainer';\r\nimport AssetHistoryContainer from 'features/equipment/assets/AssetHistoryContainer';\r\nimport CableDetails from 'features/equipment/details/CableDetails';\r\nimport DataAcquisitionDataFetchWrapper from 'features/projects/tasks/task/dataAcquisition/DataAcquisitionDataFetchWrapper';\r\nimport { EquipmentType } from '../features/equipment/equipment.constants';\r\nimport MobilisationContainer from 'features/projects/mobilisation/MobilisationContainer';\r\nimport FieldOverviewContainer from 'features/fields/overview/FieldOverviewContainer';\r\nimport FieldRoutingContainer from 'features/fields/FieldRoutingContainer';\r\nimport FieldDocumentsContainer from 'features/fields/documents/FieldDocumentsContainer';\r\n\r\nimport IntegrityManagementContainer from 'features/settings/integrityManagement/IntegrityManagementContainer';\r\nimport WellboreIntegrityContainer from 'features/wells/integrity/WellboreIntegrityContainer';\r\n// Commented these tabs as per #10829\r\n// import RiskAlertCenterContainer from 'features/wells/integrity/RiskAlertCenterContainer';\r\n// import CompareRiskDataContainer from 'features/wells/integrity/CompareRiskDataContainer';\r\nimport AddIntegrityContainer from 'features/settings/integrityManagement/integrities/AddIntegrityContainer';\r\nimport RiskPrincipleContainer from 'features/settings/integrityManagement/integrities/RiskPrincipleContainer';\r\nimport WellLikelihoodOfFailureContainer from 'features/wells/integrity/WellLikelihoodOfFailureContainer';\r\nimport WellConsequenceContainer from 'features/wells/integrity/WellConsequenceContainer';\r\nimport IntegrityAttachmentsContainer from 'features/wells/integrity/IntegrityAttachmentsContainer';\r\nimport TestingContainerWellLogAndCompositeSchematic from 'features/testing/TestingContainerWellLogAndCompositeSchematic';\r\nimport Well3DVisualization from 'features/testing/TestingContainer3DComponent';\r\nimport WellBoreSchematicLatest from 'features/testing/wellLogBasic/WellBoreSchematicLatest';\r\nimport SchematicContainer from 'features/wells/schematics/';\r\nimport IntegrityDetailsContainer from 'features/wells/integrity/integrityDetails/IntegrityDetailsContainer';\r\nimport IntegrityDetailsHistoryContainer from 'features/wells/integrity/integrityDetails/history/IntegrityDetailsHistoryContainer';\r\nimport CorrosionContainer from 'features/wells/corrosion/CorrosionContainer';\r\nimport LogFilesContainer from 'features/wells/corrosion/LogFilesContainer';\r\nimport CompareLogsContainer from 'features/wells/corrosion/CompareLogsContainer';\r\nimport CompareLogsBarChartContainer from 'features/wells/corrosion/CompareLogsBarChartContainer';\r\nimport CompareLogsTableContainer from 'features/wells/corrosion/CompareLogsTableContainer';\r\n\r\n// TODO: Replace BasePages with proper components\r\nexport const dataExchangeRoutes = [\r\n {\r\n hidden: true,\r\n Icon: DataExchangeIcon,\r\n breadcrumb: 'Data Exchange',\r\n component: DataExchangeContainer,\r\n path: routePaths.dataExchange.root,\r\n systemPermissions: [SystemPermission.DATA_EXCHANGE],\r\n routes: [\r\n {\r\n exact: true,\r\n hidden: true,\r\n component: OverviewContainer,\r\n path: routePaths.dataExchange.root,\r\n },\r\n {\r\n path: routePaths.dataExchange.cheetah.root,\r\n breadcrumb: 'Cheetah',\r\n component: DataExchangeBasePage,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Available',\r\n path: routePaths.dataExchange.cheetah.root,\r\n component: AvailableCheetahJobsContainer,\r\n },\r\n {\r\n breadcrumb: 'Archived',\r\n path: routePaths.dataExchange.cheetah.archived,\r\n component: ArchivedCheetahJobsContainer,\r\n },\r\n ],\r\n },\r\n {\r\n path: routePaths.dataExchange.winch.root,\r\n breadcrumb: 'Winch',\r\n component: DataExchangeBasePage,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Available',\r\n path: routePaths.dataExchange.winch.root,\r\n component: AvailableWinchContainer,\r\n },\r\n {\r\n breadcrumb: 'Archived',\r\n path: routePaths.dataExchange.winch.archived,\r\n component: ArchivedWinchContainer,\r\n },\r\n {\r\n breadcrumb: 'Configuration',\r\n path: routePaths.dataExchange.winch.configuration,\r\n component: ConfigurationWinchContainer,\r\n },\r\n ],\r\n },\r\n {\r\n path: routePaths.dataExchange.warrior.root,\r\n breadcrumb: 'Warrior',\r\n component: DataExchangeBasePage,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Available',\r\n path: routePaths.dataExchange.warrior.root,\r\n component: AvailableWarriorContainer,\r\n },\r\n {\r\n breadcrumb: 'Archived',\r\n path: routePaths.dataExchange.warrior.archived,\r\n component: ArchivedWarriorContainer,\r\n },\r\n ],\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: ProjectBreadcrumb,\r\n component: LiveProjectContainer,\r\n path: routePaths.dataExchange.liveProjects.project.root,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Overview',\r\n path: routePaths.dataExchange.liveProjects.project.root,\r\n component: LiveProjectOverviewContainer,\r\n },\r\n {\r\n breadcrumb: 'Master Data',\r\n path: routePaths.dataExchange.liveProjects.project.masterData,\r\n component: ({ breadcrumb }) => (\r\n Not yet implemented\r\n ),\r\n },\r\n {\r\n breadcrumb: cheetahJobSourceToString(CheetahJobSource.CHEETAH),\r\n path: routePaths.dataExchange.liveProjects.project.cheetah.match,\r\n component: CheetahJobCurvesContainer,\r\n source: CheetahJobSource.CHEETAH,\r\n },\r\n {\r\n breadcrumb: cheetahJobSourceToString(CheetahJobSource.SM_LOCATION),\r\n path: routePaths.dataExchange.liveProjects.project.winch.match,\r\n component: CheetahJobCurvesContainer,\r\n source: CheetahJobSource.SM_LOCATION,\r\n },\r\n {\r\n breadcrumb: cheetahJobSourceToString(CheetahJobSource.WARRIOR),\r\n path: routePaths.dataExchange.liveProjects.project.warrior.match,\r\n component: CheetahJobCurvesContainer,\r\n source: CheetahJobSource.WARRIOR,\r\n },\r\n ],\r\n },\r\n {\r\n path: routePaths.dataExchange.liveProjects.root,\r\n breadcrumb: 'Live Projects',\r\n component: DataExchangeBasePage,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Available',\r\n path: routePaths.dataExchange.liveProjects.root,\r\n component: AvailableLiveProjectsPaginatedContainer,\r\n },\r\n {\r\n breadcrumb: 'Archived',\r\n path: routePaths.dataExchange.liveProjects.archived,\r\n component: ArchivedLiveProjectsPaginatedContainer,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const settingsRoutes = [\r\n {\r\n hidden: true,\r\n breadcrumb: 'Settings',\r\n path: routePaths.settings.root,\r\n Icon: Settings,\r\n component: SystemRoutesContainer,\r\n routes: [\r\n {\r\n exact: true,\r\n hidden: true,\r\n path: routePaths.settings.root,\r\n Icon: Settings,\r\n component: SettingsOverviewContainer,\r\n },\r\n {\r\n breadcrumbDisabled: true,\r\n breadcrumb: 'Access Roles',\r\n path: '/v2/settings/access-roles',\r\n Icon: VerifiedUser,\r\n component: AccessRolesContainer,\r\n systemPermissions: [\r\n SystemPermission.MANAGE_SYSTEM_ROLES,\r\n SystemPermission.MANAGE_PROJECT_ROLES,\r\n ],\r\n routes: [\r\n {\r\n breadcrumbDisabled: true,\r\n path: '/v2/settings/access-roles/system',\r\n breadcrumb: 'System',\r\n component: SystemRolesContainer,\r\n systemPermissions: SystemPermission.MANAGE_SYSTEM_ROLES,\r\n routes: [\r\n {\r\n breadcrumb: SystemRoleBreadcrumb,\r\n path: '/v2/settings/access-roles/system/:systemRoleId',\r\n component: SystemRoleContainer,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Overview',\r\n path: '/v2/settings/access-roles/system/:systemRoleId',\r\n component: SystemRoleOverview,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Access Rights',\r\n path: '/v2/settings/access-roles/system/:systemRoleId/access-rights',\r\n component: SystemRoleAccessRights,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Users',\r\n path: '/v2/settings/access-roles/system/:systemRoleId/users',\r\n component: SystemRoleUsers,\r\n systemPermissions: SystemPermission.MANAGE_USER_ACCESS,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n breadcrumbDisabled: true,\r\n path: '/v2/settings/access-roles/project',\r\n breadcrumb: 'Project',\r\n component: ProjectRolesContainer,\r\n systemPermissions: SystemPermission.MANAGE_PROJECT_ROLES,\r\n routes: [\r\n {\r\n breadcrumb: ProjectRoleBreadcrumb,\r\n path: '/v2/settings/access-roles/project/:projectRoleId',\r\n component: ProjectRoleContainer,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Overview',\r\n path: '/v2/settings/access-roles/project/:projectRoleId',\r\n component: ProjectRoleOverview,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Access Rights',\r\n path: '/v2/settings/access-roles/project/:projectRoleId/access-rights',\r\n component: ProjectRoleAccessRights,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n breadcrumb: 'User Access',\r\n path: '/v2/settings/user-access',\r\n Icon: PeopleIcon,\r\n component: UserAccessContainer,\r\n systemPermissions: SystemPermission.MANAGE_USER_ACCESS,\r\n },\r\n {\r\n breadcrumb: 'Integrity Management',\r\n path: `${routePaths.settings.root}/integrity`,\r\n Icon: Integrity,\r\n component: IntegrityManagementContainer,\r\n systemPermissions: SystemPermission.INTEGRITY_RULES_MANAGEMENT,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Likelihood of Failure',\r\n path: routePaths.settings.integrity.root,\r\n component: RiskPrincipleContainer,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Well Consequence',\r\n path: routePaths.settings.integrity.consequence,\r\n component: RiskPrincipleContainer,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Add or edit integrity',\r\n hidden: true,\r\n path: routePaths.settings.integrity.new,\r\n component: AddIntegrityContainer,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const simulationDashboardRoutes = [\r\n {\r\n hidden: true,\r\n breadcrumb: 'Simulation dashboard',\r\n path: routePaths.dashboard.simulation,\r\n component: SimulationDashboardContainer,\r\n },\r\n];\r\n\r\nexport const dashboardRoutes = [\r\n {\r\n path: routePaths.dashboard.root,\r\n component: DashboardContainer,\r\n routes: [\r\n ...simulationDashboardRoutes,\r\n {\r\n path: routePaths.dashboard.index,\r\n component: ProjectDashboardContainer,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const projectWellDetailsRoutes = [\r\n {\r\n path: routePaths.projectWellbore.index,\r\n breadcrumb: 'Well',\r\n component: ProjectWellboreContainer,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Survey',\r\n path: routePaths.projectWellbore.index,\r\n component: ProjectWellboreOverview,\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: 'Details',\r\n path: routePaths.projectWellbore.details.index,\r\n component: ProjectWellboreDetailFormContainer,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Details',\r\n path: routePaths.projectWellbore.details.match,\r\n component: ProjectWellboreDetailsContainer,\r\n },\r\n {\r\n breadcrumb: 'Sections',\r\n path: routePaths.projectWellbore.sections,\r\n component: ProjectWellboreSectionsContainer,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const projectDetailsRoutes = [\r\n {\r\n exact: true,\r\n path: routePaths.details,\r\n breadcrumb: 'Details',\r\n component: ProjectDetailsDescriptionContainer,\r\n },\r\n];\r\n\r\nexport const taskRoutes = [\r\n {\r\n exact: true,\r\n breadcrumb: 'Task',\r\n path: routePaths.plan.task.index,\r\n component: TaskDetailsContainer,\r\n },\r\n {\r\n breadcrumb: 'Surface Equipment',\r\n component: TaskSurfaceEquipmentContainer,\r\n path: routePaths.plan.task.surfaceEquipment,\r\n },\r\n {\r\n subSurfaceRoute: true,\r\n breadcrumb: 'BHA',\r\n component: TaskToolstringsContainer,\r\n path: routePaths.plan.task.toolstring.match,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'BHA',\r\n component: TaskToolstringContainer,\r\n path: routePaths.plan.task.toolstring.index,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'BHA',\r\n path: routePaths.plan.task.toolstring.edit,\r\n component: TaskToolstringEditorContainer,\r\n },\r\n ],\r\n },\r\n {\r\n subSurfaceRoute: true,\r\n breadcrumb: 'Simulation',\r\n component: TaskSimulationsContainer,\r\n path: routePaths.plan.task.simulation.match,\r\n routes: [\r\n {\r\n breadcrumb: 'Simulation',\r\n component: TaskSimulationContainer,\r\n path: routePaths.plan.task.simulation.index,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Basic project options',\r\n component: TaskSimulationOptionsContainer,\r\n path: routePaths.plan.task.simulation.index,\r\n },\r\n {\r\n breadcrumb: 'Well Sections',\r\n component: TaskSimulationWellboreSectionsContainer,\r\n path: routePaths.plan.task.simulation.sections,\r\n },\r\n {\r\n breadcrumb: 'Sim. Parameters',\r\n component: TaskSimulationParametersContainer,\r\n path: routePaths.plan.task.simulation.parameters,\r\n },\r\n {\r\n breadcrumb: 'Temperature',\r\n component: TaskSimulationTemperatureContainer,\r\n path: routePaths.plan.task.simulation.temperature,\r\n },\r\n {\r\n breadcrumb: 'Fluids',\r\n component: TaskSimulationFluidsContainer,\r\n path: routePaths.plan.task.simulation.fluids.match,\r\n },\r\n {\r\n breadcrumb: 'Comment',\r\n component: TaskSimulationCommentContainer,\r\n path: routePaths.plan.task.simulation.comment,\r\n },\r\n {\r\n breadcrumb: 'Tool Parameters',\r\n component: TaskSimulationDynamicToolParametersContainer,\r\n path: routePaths.plan.task.simulation.toolParameters,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n breadcrumb: 'Activities',\r\n component: TaskActivitiesContainer,\r\n path: routePaths.plan.task.activities,\r\n },\r\n];\r\n\r\nexport const wellsRoutes = [\r\n {\r\n path: '/wells',\r\n breadcrumb: 'Wells',\r\n },\r\n {\r\n hidden: true, // do not display in navigation menu\r\n breadcrumb: 'Wells',\r\n path: '/field/:fieldId/wells',\r\n component: RoutesContainer,\r\n routes: [\r\n {\r\n exact: true,\r\n path: '/field/:fieldId/wells',\r\n redirectTo: '/wells',\r\n },\r\n {\r\n breadcrumb: WellboreBreadcrumb,\r\n component: WellboreContainer,\r\n path: routePaths.wells.index,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Overview',\r\n component: WellOverviewContainer,\r\n path: routePaths.wells.index,\r\n },\r\n {\r\n breadcrumb: 'Details',\r\n component: WellboreDetailsContainer,\r\n path: routePaths.wells.details,\r\n },\r\n {\r\n breadcrumb: 'Sections',\r\n component: WellboreSectionsContainer,\r\n path: routePaths.wells.sections,\r\n },\r\n {\r\n breadcrumb: 'Elements',\r\n component: WellboreElementsContainer,\r\n path: routePaths.wells.elements,\r\n },\r\n {\r\n breadcrumb: 'Schematic',\r\n component: SchematicContainer,\r\n path: routePaths.wells.schematic,\r\n permission: SystemPermission.SCHEMATICS_EDITOR,\r\n systemPermissions: [SystemPermission.SCHEMATICS_EDITOR],\r\n },\r\n {\r\n breadcrumb: 'Risk Management',\r\n component: WellboreIntegrityContainer,\r\n path: routePaths.wells.integrity.root,\r\n permission: SystemPermission.WELL_ACCESS_ONLY, // why is this well access only?\r\n systemPermissions: [SystemPermission.WELL_ACCESS_ONLY],\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Likelihood of Failure',\r\n path: routePaths.wells.integrity.root,\r\n component: WellLikelihoodOfFailureContainer,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Well Consequence',\r\n path: routePaths.wells.integrity.consequence,\r\n component: WellConsequenceContainer,\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: 'Integrity Rule Details',\r\n path: routePaths.wells.integrity.details.root,\r\n component: IntegrityDetailsContainer,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Documents',\r\n path: routePaths.wells.integrity.details.attachments,\r\n component: IntegrityAttachmentsContainer,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'History',\r\n path: routePaths.wells.integrity.details.history,\r\n component: IntegrityDetailsHistoryContainer,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n // Commented this tab as per #10829\r\n // {\r\n // breadcrumb: 'Risk Alert Center',\r\n // component: RiskAlertCenterContainer,\r\n // path: routePaths.wells.alert,\r\n // permission: SystemPermission.WELL_ACCESS_ONLY,\r\n // systemPermissions: [SystemPermission.WELL_ACCESS_ONLY],\r\n // },\r\n {\r\n breadcrumb: 'Corrosion',\r\n component: CorrosionContainer,\r\n path: routePaths.wells.corrosion.root,\r\n permission: SystemPermission.WELL_ACCESS_ONLY,\r\n systemPermissions: [SystemPermission.WELL_ACCESS_ONLY],\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Log Files',\r\n path: routePaths.wells.corrosion.root,\r\n component: LogFilesContainer,\r\n },\r\n {\r\n breadcrumb: 'Compare Logs',\r\n component: CompareLogsContainer,\r\n path: routePaths.wells.corrosion.comparelogs.root,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Tabular Data',\r\n path: routePaths.wells.corrosion.comparelogs.tabulardata,\r\n component: CompareLogsTableContainer,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Bar chart',\r\n path: routePaths.wells.corrosion.comparelogs.barchart,\r\n component: CompareLogsBarChartContainer,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n // Commented this tab as per #10829\r\n // {\r\n // breadcrumb: 'Compare Risk Data',\r\n // component: CompareRiskDataContainer,\r\n // path: routePaths.wells.compare,\r\n // permission: SystemPermission.WELL_ACCESS_ONLY,\r\n // systemPermissions: [SystemPermission.WELL_ACCESS_ONLY],\r\n // },\r\n {\r\n breadcrumb: 'Documents',\r\n component: WellboreFilesContainer,\r\n path: routePaths.wells.files,\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: 'Events',\r\n component: WellEventsContainer,\r\n path: routePaths.wells.events,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const operationsRoutes = [\r\n {\r\n exact: true,\r\n breadcrumb: 'Live Operations',\r\n component: OperationsContainer,\r\n path: routePaths.operations.root,\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: 'Live Dashboards',\r\n component: OperationsOverviewContainer,\r\n path: `${routePaths.operations.dashboards}/:projectId`,\r\n },\r\n];\r\n\r\nexport const equipmentRoutes = [\r\n {\r\n exact: true,\r\n breadcrumb: 'Equipment',\r\n path: routePaths.equipment.root,\r\n component: EquipmentContainer,\r\n permission: SystemPermission.EQUIPMENT_TAB_VIEW,\r\n systemPermissions: [SystemPermission.EQUIPMENT_TAB_VIEW],\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: '',\r\n component: (props) => (\r\n \r\n ),\r\n path: routePaths.equipment.assetHistory,\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: 'Equipment',\r\n path: routePaths.equipment.root,\r\n component: RoutesContainer,\r\n systemPermissions: [SystemPermission.EQUIPMENT_TAB_VIEW],\r\n routes: [\r\n {\r\n breadcrumb: 'Equipment',\r\n component: EquipmentRoutingContainer,\r\n path: routePaths.equipment.index,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Details/Assets',\r\n component: EquipmentDetailsContainer,\r\n path: routePaths.equipment.index,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Project History',\r\n component: ToolProjectHistoryContainer,\r\n path: routePaths.equipment.projectHistory,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const cableEquipmentRoutes = [\r\n {\r\n hidden: true,\r\n breadcrumb: 'Cable Equipment',\r\n path: routePaths.cable.root,\r\n component: RoutesContainer,\r\n systemPermissions: [SystemPermission.EQUIPMENT_TAB_VIEW],\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Details/Assets',\r\n component: CableDetails,\r\n path: routePaths.cable.index,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Asset History',\r\n path: routePaths.cable.assetHistory,\r\n component: (props) => (\r\n \r\n ),\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const surfaceEquipmentRoutes = [\r\n {\r\n hidden: true,\r\n breadcrumb: 'Surface Equipment',\r\n path: routePaths.surfaceEquipment.root,\r\n component: RoutesContainer,\r\n systemPermissions: [SystemPermission.EQUIPMENT_TAB_VIEW],\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Details/Assets',\r\n component: SurfaceEquipmentDetails,\r\n path: routePaths.surfaceEquipment.index,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Asset History',\r\n path: routePaths.surfaceEquipment.assetHistory,\r\n component: (props) => (\r\n \r\n ),\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const facilitiesRoutes = [\r\n {\r\n exact: true,\r\n breadcrumb: 'Facilities',\r\n path: routePaths.facilities.root,\r\n component: FacilitiesContainer,\r\n },\r\n {\r\n hidden: true,\r\n breadcrumb: 'Facilities',\r\n path: '/facilities/:facilityId',\r\n component: RoutesContainer,\r\n routes: [\r\n {\r\n breadcrumb: 'Facilities',\r\n component: FacilityContainer,\r\n path: routePaths.facilities.index,\r\n systemPermissions: [SystemPermission.MANAGE_WELLS],\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Overview',\r\n component: FacilityOverview,\r\n path: routePaths.facilities.index,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Details',\r\n component: FacilityDetailsContainer,\r\n path: routePaths.facilities.details,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Documents',\r\n component: FacilityDocumentsContainer,\r\n path: routePaths.facilities.documents,\r\n },\r\n {\r\n breadcrumb: 'Project History',\r\n component: FacilitiesProjects,\r\n path: routePaths.facilities.projectHistory,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const fieldRoutes = [\r\n {\r\n hidden: true,\r\n breadcrumb: 'Field',\r\n path: routePaths.field.root,\r\n component: RoutesContainer,\r\n routes: [\r\n {\r\n breadcrumb: 'Equipment',\r\n component: FieldRoutingContainer,\r\n path: routePaths.field.index,\r\n routes: [\r\n {\r\n exact: true,\r\n breadcrumb: 'Overview',\r\n component: FieldOverviewContainer,\r\n path: routePaths.field.index,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Documents',\r\n component: FieldDocumentsContainer,\r\n path: routePaths.field.document,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const projectExecutionRoutes = [\r\n {\r\n path: routePaths.execution.match,\r\n breadcrumb: 'Execute',\r\n component: ExecutionRootContainer,\r\n routes: [\r\n {\r\n path: routePaths.execution.index,\r\n hidden: true,\r\n exact: true,\r\n index: true,\r\n breadcrumb: 'Index - No Tasks',\r\n component: ExecutionIndexContainer,\r\n },\r\n {\r\n exact: true,\r\n path: routePaths.execution.tabs.activities,\r\n breadcrumb: 'Activities',\r\n component: ExecutionActivitiesContainer,\r\n },\r\n {\r\n exact: true,\r\n path: routePaths.execution.tabs.surfaceEquipment,\r\n breadcrumb: 'Surface Equipment',\r\n component: ExecutionSurfaceEquipmentContainer,\r\n },\r\n {\r\n exact: true,\r\n path: routePaths.execution.tabs.toolstring,\r\n breadcrumb: 'BHA',\r\n component: ExecutionToolStringContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.match,\r\n breadcrumb: 'Simulation',\r\n component: ExecutionSimulationContainer,\r\n routes: [\r\n {\r\n path: routePaths.execution.tabs.simulation.index,\r\n hidden: true,\r\n exact: true,\r\n index: true,\r\n breadcrumb: 'Index - No Simulations',\r\n component: ExecutionSimulationIndexContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.tabs.options,\r\n exact: true,\r\n breadcrumb: 'Basic project options',\r\n component: TaskSimulationOptionsContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.tabs.sections,\r\n exact: true,\r\n breadcrumb: 'Well Sections',\r\n component: TaskSimulationWellboreSectionsContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.tabs.parameters,\r\n exact: true,\r\n breadcrumb: 'Sim. Parameters',\r\n component: TaskSimulationParametersContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.tabs.temperature,\r\n exact: true,\r\n breadcrumb: 'Temperature',\r\n component: TaskSimulationTemperatureContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.tabs.fluids.match,\r\n exact: true,\r\n breadcrumb: 'Fluids',\r\n component: TaskSimulationFluidsContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.tabs.comment,\r\n exact: true,\r\n breadcrumb: 'Comment',\r\n component: TaskSimulationCommentContainer,\r\n },\r\n {\r\n path: routePaths.execution.tabs.simulation.tabs.toolParameters,\r\n exact: true,\r\n breadcrumb: 'Tool Parameters',\r\n component: TaskSimulationDynamicToolParametersContainer,\r\n },\r\n ],\r\n },\r\n\r\n {\r\n breadcrumb: 'Data Acquisition',\r\n component: DataAcquisitionDataFetchWrapper,\r\n path: routePaths.execution.tabs.dataAcquisition,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const projectSubRoutes = [\r\n ...projectDetailsRoutes,\r\n // ...projectWellDetailsRoutes,\r\n ...projectExecutionRoutes,\r\n {\r\n path: routePaths.plan.index,\r\n component: ProjectRoutesContainer,\r\n routes: [\r\n {\r\n exact: true,\r\n path: routePaths.plan.index,\r\n breadcrumb: 'Plan',\r\n component: TasksContainer,\r\n },\r\n {\r\n path: routePaths.plan.task.match,\r\n breadcrumb: TaskBreadcrumb,\r\n component: TaskContainer,\r\n routes: taskRoutes,\r\n },\r\n ],\r\n },\r\n // {\r\n // path: routePaths.execute.match,\r\n // breadcrumb: 'Execute',\r\n // component: ExecuteContainer,\r\n // projectPermissions: ProjectPermission.EXECUTE,\r\n // },\r\n {\r\n path: routePaths.mobilize,\r\n breadcrumb: 'String Tests',\r\n component: MobilisationContainer,\r\n },\r\n {\r\n path: routePaths.report,\r\n breadcrumb: 'Report',\r\n component: ProjectReportLessonContainer,\r\n },\r\n {\r\n path: routePaths.report,\r\n breadcrumb: 'Report',\r\n component: ProjectReportLessonContainer,\r\n },\r\n {\r\n path: routePaths.events,\r\n breadcrumb: 'Events',\r\n component: EventsContainer,\r\n },\r\n];\r\n\r\nexport const projectRoutes = [\r\n {\r\n breadcrumb: 'Projects',\r\n path: '/projects',\r\n routes: [\r\n {\r\n exact: true,\r\n path: '/projects/:projectId',\r\n breadcrumb: ProjectBreadcrumb,\r\n routes: projectSubRoutes,\r\n },\r\n ],\r\n },\r\n];\r\n\r\n//** Commenting the INT routes to hide the trial expiration popup */\r\n\r\nexport const testingRoute = [\r\n {\r\n exact: true,\r\n breadcrumb: 'Sandbox',\r\n path: '/testing',\r\n component: TestingContainer,\r\n sandbox: true,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Sandbox 2',\r\n path: '/testing-welllogschematic',\r\n component: TestingContainerWellLogAndCompositeSchematic,\r\n sandbox: true,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Sandbox 3',\r\n path: '/testing-3dcomponent',\r\n component: Well3DVisualization,\r\n sandbox: true,\r\n },\r\n {\r\n exact: true,\r\n breadcrumb: 'Sandbox 4',\r\n path: '/testing-scheme',\r\n component: WellBoreSchematicLatest,\r\n sandbox: true,\r\n },\r\n];\r\n\r\nconst routes = [\r\n ...operationsRoutes,\r\n ...projectRoutes,\r\n ...facilitiesRoutes,\r\n ...wellsRoutes,\r\n ...settingsRoutes,\r\n ...equipmentRoutes,\r\n ...surfaceEquipmentRoutes,\r\n ...cableEquipmentRoutes,\r\n ...dataExchangeRoutes,\r\n ...testingRoute,\r\n ...fieldRoutes,\r\n];\r\n\r\nexport default routes;\r\n","import _ from 'lodash';\r\nimport { compose } from 'redux';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport Info from '@material-ui/icons/Info';\r\nimport PieChart from '@material-ui/icons/PieChart';\r\nimport { createElement, PureComponent } from 'react';\r\nimport CategoryIcon from '@material-ui/icons/Category';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { generatePath, Link, matchPath } from 'react-router-dom';\r\nimport PlayCircleFilled from '@material-ui/icons/PlayCircleFilled';\r\nimport FormatListBulleted from '@material-ui/icons/FormatListBulleted';\r\n\r\nimport {\r\n Fab,\r\n Step,\r\n Stepper,\r\n StepLabel,\r\n Typography,\r\n IconButton,\r\n StepConnector,\r\n} from '@material-ui/core';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { PROJECT_STATUS, ProjectPermission } from 'app/app.constants';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\n\r\nclass ProjectSteps extends PureComponent {\r\n renderStepper = (routes) => {\r\n const { pathname, classes, projectId } = this.props;\r\n\r\n return (\r\n \r\n }\r\n >\r\n {routes.map((route) => {\r\n const { exact, Icon, path, disabled, title } = route;\r\n\r\n const url = generatePath(path, { projectId });\r\n\r\n const matchesPath = !!matchPath(pathname, {\r\n path,\r\n exact,\r\n });\r\n\r\n return (\r\n \r\n \r\n createElement(\r\n matchesPath ? Fab : IconButton,\r\n {\r\n disabled,\r\n className: classes.stepButton,\r\n to: disabled ? undefined : url,\r\n component: disabled ? undefined : Link,\r\n color: matchesPath ? 'primary' : 'default',\r\n },\r\n ,\r\n )\r\n }\r\n optional={\r\n \r\n {_.capitalize(title)}\r\n \r\n }\r\n />\r\n \r\n );\r\n })}\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { projectStatus } = this.props;\r\n\r\n const status = projectStatus.get('status');\r\n\r\n const projectRoutes = [\r\n {\r\n exact: true,\r\n Icon: Info,\r\n path: routePaths.details,\r\n title: 'Project Details',\r\n },\r\n {\r\n Icon: FormatListBulleted,\r\n path: routePaths.plan.index,\r\n title: 'Plan',\r\n },\r\n {\r\n Icon: CategoryIcon,\r\n title: 'Mobilize',\r\n path: routePaths.mobilize,\r\n },\r\n // {\r\n // Icon: PlayCircleFilled,\r\n // path: routePaths.execute.match,\r\n // title: 'Execute',\r\n // projectPermissions: ProjectPermission.EXECUTE,\r\n // },\r\n {\r\n Icon: PlayCircleFilled,\r\n path: '/projects/:projectId/execution',\r\n title: 'Execute',\r\n projectPermissions: ProjectPermission.EXECUTE,\r\n },\r\n {\r\n Icon: PieChart,\r\n path: routePaths.report,\r\n title: 'Report',\r\n disabled: status < PROJECT_STATUS.EXECUTE,\r\n },\r\n ];\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n stepConnectorAlternativeLabel: {\r\n top: '50%',\r\n padding: `${theme.spacing(0.5)}px ${theme.spacing(1)}px`,\r\n },\r\n stepDisabled: {\r\n color: 'red',\r\n cursor: 'pointer',\r\n pointerEvents: 'none',\r\n },\r\n stepButton: {\r\n width: theme.spacing(6),\r\n height: theme.spacing(6),\r\n },\r\n stepperRoot: {\r\n zIndex: 1,\r\n width: '100%',\r\n display: 'flex',\r\n textAlign: 'center',\r\n alignItems: 'center',\r\n backgroundColor: theme.altus.background.navigation,\r\n padding: `${theme.spacing(1.5)}px ${theme.spacing(15)}px`,\r\n },\r\n stepConnectorLine: {\r\n opacity: 0.5,\r\n border: `thin solid ${theme.palette.grey[700]}`,\r\n },\r\n stepLabelLabel: {\r\n '&$stepLabelAlternativeLabel': {\r\n marginTop: theme.spacing(0.25),\r\n },\r\n },\r\n stepLabelAlternativeLabel: {}, // needed to make stepLabelLabel work\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n projectStatus: getExecuteStatusFromState(state),\r\n })),\r\n withStyles(styles),\r\n)(ProjectSteps);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { useEffect, useCallback } from 'react';\r\n\r\nimport { BasePage, RouteContainer } from 'altus-ui-components';\r\n\r\nimport {\r\n getProjectResources,\r\n projectPagesOnUnload,\r\n resetProjectResources,\r\n} from 'features/projects/projects.actions';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { projectSubRoutes } from 'app/routes';\r\nimport { markProjectAsSeen } from 'app/app.actions';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport ProjectSteps from 'features/projects/components/ProjectSteps';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\n\r\nconst stepperRoutes = [\r\n {\r\n path: routePaths.plan.task.match,\r\n component: null,\r\n },\r\n {\r\n path: routePaths.events,\r\n component: null,\r\n },\r\n];\r\n\r\nconst ProjectContainer = ({\r\n projectId,\r\n dataState,\r\n dispatchOnUnload,\r\n dispatchProjectSeen,\r\n dispatchGetProjectResources,\r\n dispatchResetProjectResources,\r\n}) => {\r\n useEffect(() => {\r\n dispatchResetProjectResources();\r\n dispatchProjectSeen(projectId);\r\n dispatchGetProjectResources(projectId);\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n dispatchProjectSeen(projectId);\r\n dispatchResetProjectResources();\r\n };\r\n }, [\r\n projectId,\r\n dispatchOnUnload,\r\n dispatchProjectSeen,\r\n dispatchGetProjectResources,\r\n dispatchResetProjectResources,\r\n ]);\r\n\r\n const renderProjectRoutes = useCallback(() => {\r\n if (!dataState.requested || dataState.isLoading()) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return ;\r\n }, [dataState]);\r\n\r\n return (\r\n <>\r\n {renderProjectRoutes()}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getActionDataStateFromState(\r\n state,\r\n PROJECTS_ACTIONS.GET_PROJECT_RESOURCES,\r\n ),\r\n }),\r\n {\r\n dispatchOnUnload: projectPagesOnUnload,\r\n dispatchProjectSeen: markProjectAsSeen,\r\n dispatchGetProjectResources: getProjectResources,\r\n dispatchResetProjectResources: resetProjectResources,\r\n },\r\n ),\r\n)(ProjectContainer);\r\n","import classNames from 'classnames';\r\nimport { createElement } from 'react';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { Fab as MuiFab, IconButton as MuiIconButton } from '@material-ui/core';\r\n\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport withNavigation from 'app/components/withNavigation';\r\n\r\nconst Fab = withNavigation(MuiFab);\r\nconst IconButton = withNavigation(MuiIconButton);\r\n\r\nconst MenuIcon = ({\r\n page,\r\n Icon,\r\n classes,\r\n subPage,\r\n previousPage,\r\n defaultPreviousPage,\r\n ...rest\r\n}) => {\r\n if (!page) {\r\n return (\r\n
    \r\n \r\n {Icon}\r\n \r\n
    \r\n );\r\n }\r\n\r\n const { id, to } = page;\r\n\r\n return (\r\n
    \r\n {createElement(\r\n subPage === id ? Fab : IconButton,\r\n {\r\n to:\r\n subPage === id\r\n ? previousPage\r\n ? previousPage\r\n : defaultPreviousPage\r\n : to,\r\n className: classNames(classes.topMenuIcon, {\r\n [classes.topMenuButton]: subPage === id,\r\n }),\r\n color: subPage === id ? 'primary' : 'default',\r\n ...rest,\r\n },\r\n subPage === id ? : Icon,\r\n )}\r\n
    \r\n );\r\n};\r\n\r\nconst styles = {\r\n topMenuIcon: {\r\n marginRight: 5,\r\n },\r\n topMenuButton: {\r\n height: 48,\r\n width: 48,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(MenuIcon);\r\n","import defer from 'lodash/defer';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Field } from 'redux-form/immutable';\r\nimport toJSComponent from 'with-immutable-props-to-js';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { MuiThemeProvider } from '@material-ui/core/styles';\r\nimport { reduxForm, formValueSelector } from 'redux-form/immutable';\r\n\r\nimport {\r\n Tab,\r\n Tabs,\r\n Grid,\r\n Switch,\r\n Button,\r\n FormLabel,\r\n Typography,\r\n FormControl,\r\n DialogActions,\r\n FormControlLabel,\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n MODAL,\r\n THEMES,\r\n USER_PREFERENCES_FORM,\r\n MEASUREMENT_PREFERENCES_FORM,\r\n} from 'app/app.constants';\r\n\r\nimport themes from 'layout/themes';\r\nimport LoadingButton from 'app/components/LoadingButton';\r\nimport { getCurrentThemeFromState } from 'app/app.selectors';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport { updateUserPreferences, setTheme } from 'app/app.actions';\r\nimport MeasurementPreferencesForm from 'features/projects/details/components/MeasurementPreferencesForm';\r\n\r\nconst USER_PREFERENCES = {\r\n GENERAL: 1,\r\n UNITS: 2,\r\n};\r\n\r\nclass UserPreferencesModalContainer extends PureComponent {\r\n state = {\r\n tab: USER_PREFERENCES.UNITS,\r\n };\r\n\r\n render() {\r\n const {\r\n theme,\r\n valid,\r\n title,\r\n onEnter,\r\n classes,\r\n options,\r\n submitting,\r\n handleSubmit,\r\n descriptions,\r\n dispatchSetTheme,\r\n system: selectedSystem,\r\n } = this.props;\r\n\r\n return (\r\n \r\n (\r\n \r\n \r\n \r\n Save and close\r\n \r\n \r\n )}\r\n >\r\n this.setState({ tab: value })}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {this.state.tab === USER_PREFERENCES.UNITS && (\r\n \r\n )}\r\n \r\n \r\n {this.state.tab === USER_PREFERENCES.GENERAL && (\r\n
    \r\n \r\n \r\n Notifications\r\n \r\n (\r\n \r\n )}\r\n />\r\n }\r\n label={\r\n \r\n Receive daily updates on changes in your projects\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n Theme (beta)\r\n \r\n {\r\n defer(() => dispatchSetTheme(value));\r\n }}\r\n name={USER_PREFERENCES_FORM.THEME}\r\n component={({ input }) => (\r\n \r\n input.onChange(\r\n value ? THEMES.LIGHT : THEMES.DARK,\r\n )\r\n }\r\n />\r\n )}\r\n />\r\n }\r\n label={\r\n \r\n Light mode\r\n \r\n }\r\n />\r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nUserPreferencesModalContainer.defaultProps = {\r\n options: [],\r\n};\r\n\r\nconst styles = (theme) => ({\r\n modalContent: {\r\n padding: 0,\r\n },\r\n content: {\r\n padding: theme.spacing(4),\r\n },\r\n form: {\r\n width: '100%',\r\n },\r\n labelPlacementStart: {\r\n marginLeft: 0,\r\n },\r\n formControlLabelRoot: {\r\n justifyContent: 'space-between',\r\n },\r\n switchBase: {\r\n height: theme.spacing(4),\r\n },\r\n});\r\n\r\nexport default connect(\r\n (state) => {\r\n const selector = formValueSelector(USER_PREFERENCES_FORM.ID);\r\n\r\n return {\r\n theme: getCurrentThemeFromState(state),\r\n system: selector(state, USER_PREFERENCES_FORM.SYSTEM),\r\n };\r\n },\r\n {\r\n dispatchSetTheme: setTheme,\r\n onSubmit: updateUserPreferences,\r\n },\r\n)(\r\n toJSComponent(\r\n reduxForm({\r\n form: USER_PREFERENCES_FORM.ID,\r\n })(withStyles(styles)(UserPreferencesModalContainer)),\r\n ),\r\n);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport capitalize from 'lodash/capitalize';\r\nimport Settings from '@material-ui/icons/Settings';\r\nimport ExitToApp from '@material-ui/icons/ExitToApp';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\nimport DescriptionOutlined from '@material-ui/icons/DescriptionOutlined';\r\nimport { Grid, MenuItem, ListItemText, ListItemIcon } from '@material-ui/core';\r\n\r\nimport {\r\n MODAL,\r\n CONVERT_SYSTEMS,\r\n CUSTOM_UNIT_SYSTEM,\r\n USE_PROJECT_DEFAULT_UNIT_SYSTEM,\r\n} from 'app/app.constants';\r\n\r\nimport { toChangeLog, toLogout } from 'utils/route.util';\r\nimport { invokeIfFunction } from 'utils/app.util';\r\nimport DropdownMenu from 'app/components/DropdownMenu';\r\nimport { changeUser } from 'features/login/login.actions';\r\nimport withNavigation from 'app/components/withNavigation';\r\nimport { getCurrentUserFromState } from 'app/app.selectors';\r\nimport { Avatar as TooltipAvatar } from 'app/components/withTooltip';\r\nimport { toggleModal, initializeUserPreferences } from 'app/app.actions';\r\nimport UserPreferencesModalContainer from 'app/components/UserPreferencesModalContainer';\r\n\r\nconst NavigationMenuItem = withNavigation(MenuItem);\r\n\r\nconst Avatar = ({ user, classes, onClick }) => (\r\n \r\n {!user.get('avatar') && user.get('initials')}\r\n \r\n);\r\n\r\nconst UserMenuContainer = ({\r\n user,\r\n Icon,\r\n classes,\r\n hideUsername,\r\n dispatchChangeUser,\r\n dispatchToggleModal,\r\n dispatchInitializeUserPreferences,\r\n}) => {\r\n if (!user || (!user.get('avatar') && !user.get('initials'))) {\r\n return null;\r\n }\r\n\r\n const avatar = ;\r\n const triggerIcon = Icon ? (\r\n \r\n ) : (\r\n avatar\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {[\r\n {\r\n text: user.get('name').split(' ')[0],\r\n Icon: avatar,\r\n disabled: true,\r\n hidden: hideUsername,\r\n },\r\n {\r\n text: 'Preferences',\r\n Icon: ,\r\n onClick: () =>\r\n dispatchToggleModal({\r\n modalId: MODAL.EDIT_USER_PREFERENCES,\r\n }),\r\n },\r\n {\r\n text: 'Change user',\r\n Icon: ,\r\n onClick: dispatchChangeUser,\r\n },\r\n {\r\n text: 'Changelog',\r\n Icon: ,\r\n to: toChangeLog(),\r\n },\r\n {\r\n text: 'Log out',\r\n Icon: ,\r\n to: toLogout(),\r\n },\r\n ]\r\n .filter((x) => !x.hidden)\r\n .map((item) => {\r\n const { text, Icon, disabled, onClick, to } = item;\r\n\r\n return (\r\n invokeIfFunction(onClick)}\r\n >\r\n \r\n \r\n {text}\r\n \r\n \r\n {Icon}\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n dispatchInitializeUserPreferences(\r\n user.get('unit'),\r\n user.get('units'),\r\n user.get('preferences'),\r\n )\r\n }\r\n descriptions={{\r\n [USE_PROJECT_DEFAULT_UNIT_SYSTEM]:\r\n 'Is the same as specified on projects',\r\n [CUSTOM_UNIT_SYSTEM]:\r\n 'Is displayed in customized units defined by you',\r\n [CONVERT_SYSTEMS.METRIC]: 'Is displayed in Metric, just to you',\r\n [CONVERT_SYSTEMS.IMPERIAL]: 'Is displayed in Imperial, just to you',\r\n }}\r\n options={[\r\n {\r\n value: USE_PROJECT_DEFAULT_UNIT_SYSTEM,\r\n label: USE_PROJECT_DEFAULT_UNIT_SYSTEM,\r\n },\r\n {\r\n value: CUSTOM_UNIT_SYSTEM,\r\n label: CUSTOM_UNIT_SYSTEM,\r\n },\r\n ...Object.values(CONVERT_SYSTEMS).map((system) => ({\r\n value: system,\r\n label: capitalize(system),\r\n })),\r\n ]}\r\n />\r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n triggerIconRoot: {\r\n height: 40,\r\n width: 40,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n opacity: 0.7,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n user: getCurrentUserFromState(state),\r\n }),\r\n {\r\n dispatchChangeUser: changeUser,\r\n dispatchToggleModal: toggleModal,\r\n dispatchInitializeUserPreferences: initializeUserPreferences,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(UserMenuContainer);\r\n","import { compose } from 'redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useSelector } from 'react-redux';\r\nimport FlashOn from '@material-ui/icons/FlashOn';\r\nimport { Switch, Route } from 'react-router-dom';\r\n\r\nimport {\r\n getCurrentSubPage,\r\n getApplicationHeaderFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport { toWellbore } from 'utils/route.util';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport routePaths, { pages } from 'app/routePaths';\r\nimport BackButton from 'app/components/BackButton';\r\nimport useWellbore from 'features/wells/hooks/useWellbore';\r\nimport MenuIcon from 'app/components/ApplicationHeader/MenuIcon';\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport { SystemPermission } from 'app/app.constants';\r\n\r\nconst WellboreHeader = ({ fieldId, wellboreId }) => {\r\n const { wellbore } = useWellbore(wellboreId);\r\n\r\n const subPage = useSelector(getCurrentSubPage);\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n\r\n const logoNavigation = applicationHeader.get('logoNavigation');\r\n\r\n const defaultPreviousPage = toWellbore(fieldId, wellboreId);\r\n\r\n const wellboreName = wellbore.get('name') ?? '';\r\n const fieldName = wellbore.get('fieldName') ?? '';\r\n\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n useHeader({\r\n logoNavigation: routePaths.wells.root,\r\n title: `${fieldName} - ${wellboreName}`,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n previousPage={defaultPreviousPage}\r\n defaultPreviousPage={defaultPreviousPage}\r\n page={{\r\n id: pages.wells.events,\r\n to: toWellbore(fieldId, wellboreId, routePaths.wells.events),\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose()(WellboreHeader);\r\n","import routePaths from 'app/routePaths';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\n\r\nconst useProjectHeader = () => {\r\n const project = useSelector(getCurrentProject);\r\n\r\n const title = project.get('fullTitle');\r\n\r\n useHeader({\r\n title,\r\n logoNavigation: routePaths.projects,\r\n });\r\n};\r\n\r\nexport default useProjectHeader;\r\n","export const getTaskPageTitle = (currentTask, tasks) => {\r\n const sequence =\r\n tasks.findIndex((task) => currentTask?.get('id') === task.get('id')) + 1;\r\n\r\n return sequence > 0\r\n ? `${currentTask.get('title')} (${sequence}/${tasks.size})`\r\n : undefined;\r\n};\r\n\r\nexport const getPreviousNextTask = (tasks, currentTaskId) => {\r\n return [-1, +1].map((sequence) => {\r\n const currentTaskIndex = tasks.findIndex(\r\n (task) => task.get('id').toString() === currentTaskId.toString(),\r\n );\r\n\r\n if (currentTaskIndex + sequence < 0) return null;\r\n\r\n return tasks.get(currentTaskIndex + sequence);\r\n });\r\n};\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport Close from '@material-ui/icons/Close';\r\nimport { Fab as MuiFab } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRight from '@material-ui/icons/ChevronRight';\r\n\r\nimport withNavigation, {\r\n IconButton as NavigationIconButton,\r\n} from 'app/components/withNavigation';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { toProjectTasks } from 'utils/route.util';\r\nimport BackButton from 'app/components/BackButton';\r\nimport useProjectHeader from 'app/hooks/useProjectHeader';\r\nimport { getPreviousNextTask, getTaskPageTitle } from 'utils/tasks.util';\r\nimport { getAllTasksFromState } from 'features/projects/tasks/tasks.selectors';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\nimport { getTaskFromState } from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nconst NavigationFab = withNavigation(MuiFab);\r\n\r\nconst TaskHeader = ({\r\n task,\r\n tasks,\r\n taskId,\r\n classes,\r\n projectId,\r\n page: taskSubPage,\r\n}) => {\r\n useProjectHeader();\r\n\r\n const defaultPreviousPage = toProjectTasks(projectId);\r\n\r\n const [previousTask, nextTask] = getPreviousNextTask(tasks, taskId);\r\n\r\n useHeader({\r\n subTitle: getTaskPageTitle(task, tasks),\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {previousTask && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {nextTask && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n title: {\r\n overflow: 'hidden',\r\n padding: `0 ${theme.spacing(2)}px`,\r\n },\r\n});\r\n\r\nexport default compose(\r\n withStyles(styles),\r\n connect((state) => ({\r\n task: getTaskFromState(state),\r\n tasks: getAllTasksFromState(state),\r\n })),\r\n)(TaskHeader);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport ArrowBack from '@material-ui/icons/ArrowBackIos';\r\n\r\nimport history from 'infrastructure/history';\r\n\r\nconst ApplicationHeaderBackButton = ({ classes }) => (\r\n history.goBack()}\r\n className={classes.arrowBackIcon}\r\n />\r\n);\r\n\r\nconst styles = (theme) => ({\r\n arrowBackIcon: {\r\n marginLeft: theme.spacing(1), // same spacing as the Logo\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ApplicationHeaderBackButton);\r\n","import { Grid } from '@material-ui/core';\r\nimport { useSelector } from 'react-redux';\r\nimport { Route, Switch } from 'react-router';\r\nimport Settings from '@material-ui/icons/Settings';\r\nimport { MobileView, BrowserView, isDesktop } from 'react-device-detect';\r\n\r\nimport { Logo } from 'altus-ui-components';\r\n\r\nimport { getApplicationHeaderFromState } from 'app/app.selectors';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport MenuIcon from 'app/components/ApplicationHeader/MenuIcon';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\nimport ApplicationHeaderBackButton from 'app/components/ApplicationHeader/ApplicationHeaderBackButton';\r\n\r\nconst OperationsHeader = () => {\r\n const currentUser = useCurrentUser();\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n\r\n const logoNavigation = applicationHeader.get('logoNavigation');\r\n\r\n useHeader({\r\n logoNavigation: routePaths.operations.root,\r\n title: isDesktop && currentUser?.get('organizationName'),\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n to={routePaths.settings.root}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n match || isDesktop ? : null\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default OperationsHeader;\r\n","import { useMemo } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport FlashOn from '@material-ui/icons/FlashOn';\r\nimport { Grid, IconButton } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Switch, Route, generatePath } from 'react-router-dom';\r\n\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport {\r\n getCurrentSubPage,\r\n getApplicationHeaderFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport routePaths, { pages } from 'app/routePaths';\r\nimport BackButton from 'app/components/BackButton';\r\nimport { toProjectDetails } from 'utils/route.util';\r\nimport { PUBLIC_ASSETS_URL, SystemPermission } from 'app/app.constants';\r\nimport ProjectHelmet from 'app/components/ProjectHelmet';\r\nimport useProjectHeader from 'app/hooks/useProjectHeader';\r\nimport DashboardIcon from 'app/components/Icons/DashboardIcon';\r\nimport MenuIcon from 'app/components/ApplicationHeader/MenuIcon';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport ProjectStatusText from 'features/projects/components/ProjectStatusText';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ProjectLinearProgress from 'features/projects/components/ProjectLinearProgress';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport ProjectDashboardsDrawer from 'features/projects/dashboard/components/ProjectDashboardsDrawer';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\n\r\nconst ProjectHeader = ({ projectId, classes }) => {\r\n useProjectHeader();\r\n\r\n const project = useCurrentProject();\r\n const subPage = useSelector(getCurrentSubPage);\r\n const projectStatus = useSelector(getExecuteStatusFromState);\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n const logoNavigation = applicationHeader.get('logoNavigation');\r\n\r\n const defaultPreviousPage = toProjectDetails(projectId);\r\n\r\n const [isOpen, toggleDrawer] = useToggle();\r\n\r\n const routes = useMemo(\r\n () =>\r\n [\r\n {\r\n title: 'Events',\r\n subPage: pages.events,\r\n path: routePaths.events,\r\n key: routePaths.events,\r\n Icon: ,\r\n },\r\n {\r\n title: 'Teams',\r\n key: 'teams',\r\n render: () => (\r\n \r\n \r\n \r\n ),\r\n hidden: !project.get('teamUrl'),\r\n },\r\n ].filter((route) => !route.hidden),\r\n [project, classes],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {routes.map((route) => {\r\n const {\r\n path,\r\n key,\r\n Icon,\r\n subPage: routeSubPage,\r\n render,\r\n } = route;\r\n\r\n if (render)\r\n return (\r\n \r\n {render()}\r\n \r\n );\r\n\r\n const url = generatePath(path, { projectId });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n teamImage: {\r\n height: theme.spacing(3),\r\n width: theme.spacing(3),\r\n },\r\n teamButton: {\r\n marginRight: 5,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectHeader);\r\n","import { compose } from 'redux';\r\nimport { useEffect } from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport { useSelector, connect } from 'react-redux';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { toFacility } from 'utils/route.util';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport BackButton from 'app/components/BackButton';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\n\r\nimport {\r\n getApplicationHeaderFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\n\r\nimport { getFacilityById } from 'features/facilities/facilities.actions';\r\nimport { FACILITIES_ACTIONS } from 'features/facilities/facilities.constants';\r\nimport { getFacilityByIdFromState } from 'features/facilities/facilities.selectors';\r\n\r\nconst FacilityHeader = ({ facilityId, dispatchOnLoad }) => {\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n\r\n const logoNavigation = applicationHeader.get('logoNavigation');\r\n\r\n const defaultPreviousPage = toFacility(facilityId);\r\n\r\n const facility = useSelector(getFacilityByIdFromState);\r\n\r\n useHeader({\r\n title: facility === EMPTY_MAP ? '' : `${facility.get('name')}`,\r\n logoNavigation: routePaths.facilities.root,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(facilityId);\r\n }, [dispatchOnLoad, facilityId]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n FACILITIES_ACTIONS.GET_FACILITY_BY_ID,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: getFacilityById,\r\n },\r\n ),\r\n)(FacilityHeader);\r\n","import { Grid } from '@material-ui/core';\r\nimport { useSelector } from 'react-redux';\r\nimport { Switch, Route } from 'react-router-dom';\r\n\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\n\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\n\r\nimport { getToolFromState } from 'features/equipment/equipment.selectors';\r\n\r\nconst EquipmentDetailsHeader = () => {\r\n const onClick = () => window.close();\r\n\r\n const tool = useSelector(getToolFromState);\r\n\r\n useHeader({\r\n title: tool === EMPTY_MAP ? '' : `${tool.get('name')}`,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EquipmentDetailsHeader;\r\n","import { compose } from 'redux';\r\nimport { useLocation } from 'react-router';\r\nimport { useEffect, useCallback } from 'react';\r\nimport Settings from '@material-ui/icons/Settings';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, TextField, MenuItem } from '@material-ui/core';\r\n\r\nimport {\r\n getClientOrganizationsFromState,\r\n getCurrentClientOrganizationIdFromState,\r\n} from 'app/app.selectors';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport {\r\n loadOrganizations,\r\n setCurrentClientOrganization,\r\n} from 'app/app.actions';\r\nimport MenuIcon from 'app/components/ApplicationHeader/MenuIcon';\r\nimport HasSystemPermission from 'app/components/HasSystemPermission';\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport DataExchangeIcon from 'app/components/ApplicationHeader/DataExchangeIcon';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\n\r\nconst HomeApplicationHeader = ({ classes }) => {\r\n const { pathname } = useLocation();\r\n const dispatch = useDispatch();\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n useEffect(() => {\r\n dispatch(loadOrganizations());\r\n }, [dispatch]);\r\n\r\n const currentUser = useCurrentUser();\r\n const clientOrganizations = useSelector(getClientOrganizationsFromState);\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n const handleOnClientFilterChange = useCallback(\r\n ({ target }) => dispatch(setCurrentClientOrganization(target.value)),\r\n [dispatch],\r\n );\r\n\r\n useHeader({\r\n logoNavigation: pathname,\r\n title: currentUser?.get('organizationName'),\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {currentUser.get('isMainVendor') && (\r\n \r\n \r\n \r\n All\r\n \r\n {clientOrganizations.valueSeq().map((clientOrganization) => (\r\n \r\n \r\n {clientOrganization.get('name')}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n to={routePaths.dataExchange.root}\r\n />\r\n \r\n \r\n \r\n \r\n }\r\n to={routePaths.settings.root}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n clientLogo: {\r\n height: '30px',\r\n width: '30px',\r\n paddingRight: `${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(HomeApplicationHeader);\r\n","import { compose } from 'redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { getApplicationHeaderFromState } from 'app/app.selectors';\r\n\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ApplicationHeaderBase from 'app/components/ApplicationHeader/ApplicationHeaderBase';\r\nimport ApplicationHeaderTitle from 'app/components/ApplicationHeader/ApplicationHeaderTitle';\r\nimport { useSystemPermissions } from 'app/hooks/authorization/useSystemPermissions';\r\nimport { SystemPermission } from 'app/app.constants';\r\nimport routePaths from 'app/routePaths';\r\n\r\nconst DefaultApplicationHeader = () => {\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n const { userPermissions } = useSystemPermissions();\r\n\r\n const logoNavigation = applicationHeader.get('logoNavigation');\r\n\r\n useHeader({\r\n logoNavigation: '/',\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose()(DefaultApplicationHeader);\r\n","import { useMemo } from 'react';\r\n\r\nimport { RouteContainer } from 'altus-ui-components';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport WellboreHeader from 'features/wells/WellboreHeader';\r\nimport TaskHeader from 'features/projects/tasks/task/TaskHeader';\r\nimport OperationsHeader from 'features/operations/OperationsHeader';\r\nimport ProjectHeader from 'features/projects/components/ProjectHeader';\r\nimport FacilityHeader from 'features/facilities/components/FacilityHeader';\r\nimport EquipmentDetailsHeader from 'features/equipment/details/EquipmentDetailsHeader';\r\nimport HomeApplicationHeader from 'app/components/ApplicationHeader/HomeApplicationHeader';\r\nimport DefaultApplicationHeader from 'app/components/ApplicationHeader/DefaultApplicationHeader';\r\n\r\nconst ApplicationHeaderContainer = () => {\r\n const routes = useMemo(\r\n () => [\r\n {\r\n path: routePaths.plan.task.match,\r\n component: TaskHeader,\r\n },\r\n {\r\n path: routePaths.project,\r\n component: ProjectHeader,\r\n },\r\n {\r\n path: routePaths.wells.index,\r\n component: WellboreHeader,\r\n },\r\n {\r\n path: routePaths.facilities.index,\r\n component: FacilityHeader,\r\n },\r\n {\r\n path: routePaths.equipment.index,\r\n component: EquipmentDetailsHeader,\r\n },\r\n {\r\n path: routePaths.login,\r\n component: null,\r\n },\r\n {\r\n path: [routePaths.operations.dashboards],\r\n component: OperationsHeader,\r\n },\r\n {\r\n path: [\r\n routePaths.projects,\r\n routePaths.wells.root,\r\n routePaths.operations.root,\r\n routePaths.facilities.root,\r\n routePaths.equipment.root,\r\n ],\r\n component: HomeApplicationHeader,\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ApplicationHeaderContainer;\r\n","import React, { useEffect, memo } from 'react';\r\nimport ReactMarkdown from 'react-markdown';\r\nimport { Grid } from '@material-ui/core';\r\nimport { APP_ACTIONS, EUROPE_MAP_CENTER_COORDS } from 'app/app.constants';\r\nimport GoogleMap from 'app/components/GoogleMap';\r\nimport { BasePage, LoadingOverlay } from 'altus-ui-components';\r\nimport { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { isDesktop } from 'react-device-detect';\r\nimport { useCurrentUser } from 'app/hooks/useCurrentUser';\r\nimport { fetchChangeLog } from 'app/app.actions';\r\nimport useDataState from 'app/hooks/useDataState';\r\nimport { getChangeLog } from 'app/app.selectors';\r\nimport PropTypes from 'prop-types';\r\n\r\nfunction ChangeLog({ classes, dispatchFetchChangeLog, markdown }) {\r\n const currentUser = useCurrentUser();\r\n useHeader({\r\n title: isDesktop && currentUser?.get('organizationName'),\r\n subTitle: 'Changelog',\r\n });\r\n useEffect(() => dispatchFetchChangeLog(), [dispatchFetchChangeLog]);\r\n const loadingState = useDataState([APP_ACTIONS.INITIATE_FETCH_CHANGE_LOG]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {loadingState.received && (\r\n \r\n \r\n \r\n {markdown}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n\r\nChangeLog.propTypes = {\r\n dispatchFetchChangeLog: PropTypes.func.isRequired,\r\n styles: PropTypes.shape({\r\n basePageChildren: PropTypes.shape({\r\n padding: PropTypes.number,\r\n }),\r\n content: PropTypes.shape({\r\n top: PropTypes.number,\r\n bottom: PropTypes.number,\r\n overflow: PropTypes.string,\r\n position: PropTypes.string,\r\n }),\r\n }),\r\n markdown: PropTypes.string,\r\n};\r\n\r\nconst styles = () => ({\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n content: {\r\n top: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n markdown: getChangeLog(state),\r\n }),\r\n {\r\n dispatchFetchChangeLog: fetchChangeLog,\r\n },\r\n ),\r\n memo,\r\n withStyles(styles),\r\n)(ChangeLog);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { HeaderBase } from 'altus-ui-components';\r\n\r\nconst MobileApplicationHeaderBase = ({ classes, children }) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nconst styles = (theme) => ({\r\n headerBaseRoot: {\r\n background: theme.altus.background.header,\r\n padding: `${theme.spacing(0.75)}px ${theme.spacing(1)}px`,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MobileApplicationHeaderBase);\r\n","import { useEffect, memo, useCallback, useState, useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n getCurrentClientOrganizationIdFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\nimport { getProjectsFromState } from 'features/projects/projects.selectors';\r\nimport { getFieldsFromState } from 'features/wells/wellbore.selectors';\r\nimport { Grid } from 'app/components/withTooltip';\r\nimport ProjectsByStatus from 'features/projects/components/ProjectsByStatus';\r\nimport {\r\n onLoad,\r\n onUnload,\r\n updateFilter,\r\n} from 'features/projects/projects.actions';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport { PROJECT_STATUS } from 'app/app.constants';\r\nimport { Filters } from 'features/projects/components/ProjectFilter';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\n\r\nconst allStatuses = [\r\n // PROJECT_STATUS.PLAN,\r\n // PROJECT_STATUS.REPORT,\r\n PROJECT_STATUS.EXECUTE,\r\n];\r\n\r\nconst MobileProjectsListContainer = ({\r\n classes,\r\n dataState,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchUpdateFilter,\r\n isDrawer = false,\r\n toggleProjectsList,\r\n}) => {\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n const filter = useMemo(\r\n () => ({\r\n [Filters.PROJECT_STATUS]: '',\r\n [Filters.FACILITY_ID]: '',\r\n [Filters.TEXT_SEARCH]: '',\r\n [Filters.GET_LOCATIONS]: true,\r\n [Filters.IS_ARCHIVE]: false,\r\n [Filters.PROJECT_STATUSES]: allStatuses,\r\n [Filters.GANTT_VIEW]: false,\r\n }),\r\n [],\r\n );\r\n\r\n const updateProjectFilter = useCallback(\r\n (newSelected) => {\r\n const { Plan, Report, Execute } = newSelected;\r\n let selectedStatus = [];\r\n\r\n if (!Plan && !Report && !Execute) {\r\n filter[Filters.PROJECT_STATUSES] = allStatuses;\r\n setCurrentFilter(filter);\r\n dispatchUpdateFilter(filter);\r\n return;\r\n }\r\n\r\n if (Plan) selectedStatus.push(PROJECT_STATUS.PLAN);\r\n if (Report) selectedStatus.push(PROJECT_STATUS.REPORT);\r\n if (Execute) selectedStatus.push(PROJECT_STATUS.EXECUTE);\r\n\r\n filter[Filters.PROJECT_STATUSES] = selectedStatus;\r\n setCurrentFilter(filter);\r\n dispatchUpdateFilter(filter);\r\n },\r\n [dispatchUpdateFilter, filter],\r\n );\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(currentClientOrganizationId);\r\n updateProjectFilter({});\r\n\r\n return () => {\r\n dispatchOnUnload();\r\n };\r\n }, [\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n currentClientOrganizationId,\r\n updateProjectFilter,\r\n ]);\r\n\r\n const [_currentFilter, setCurrentFilter] = useState();\r\n const currentFields = useSelector(getFieldsFromState);\r\n const currentProjects = useSelector(getProjectsFromState);\r\n\r\n const [_fields, setFields] = useState(currentFields);\r\n const [projects, setProjects] = useState(currentProjects);\r\n\r\n useEffect(() => {\r\n setFields(currentFields);\r\n setProjects(currentProjects);\r\n }, [currentFields, currentProjects, projects]);\r\n\r\n const renderProjectsTable = useCallback(() => {\r\n if (!projects.size && dataState.isLoading()) return null;\r\n\r\n if (!projects.size) {\r\n return (\r\n \r\n No projects available\r\n \r\n );\r\n }\r\n return (\r\n \r\n );\r\n }, [projects, dataState, toggleProjectsList]);\r\n\r\n return (\r\n \r\n {renderProjectsTable()}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n basePageDrawer: {\r\n minHeight: '100vh',\r\n height: '100%',\r\n padding: 0,\r\n paddingBottom: theme.spacing(6),\r\n },\r\n content: {\r\n top: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n PROJECTS_ACTIONS.PROJECTS_PAGE_LOADED,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: onLoad,\r\n dispatchOnUnload: onUnload,\r\n dispatchUpdateFilter: updateFilter,\r\n },\r\n ),\r\n memo,\r\n withStyles(styles),\r\n)(MobileProjectsListContainer);\r\n","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport MobileProjectsListContainer from 'app/components/Mobile/MobileProjectsListContainer';\r\nimport MobileDrawerBase from 'app/components/Mobile/MobileDrawerBase';\r\n\r\nconst MobileProjectListDrawer = ({ projectsListOpen, toggleProjectsList }) => {\r\n return (\r\n \r\n \r\n Select Project\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MobileProjectListDrawer;\r\n","import React from 'react';\r\nimport {\r\n SwipeableDrawer as Drawer,\r\n Grid,\r\n Typography,\r\n Divider,\r\n MenuItem,\r\n // Chip,\r\n ListItemText,\r\n ListItemIcon,\r\n} from '@material-ui/core';\r\nimport { styled } from '@material-ui/styles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { IconButton } from 'app/components/withTooltip';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport withNavigation from 'app/components/withNavigation';\r\n// import { invokeIfFunction } from 'utils/app.util';\r\nimport { toLogout, toPrivacyPolicy } from 'utils/route.util';\r\nimport ExitToApp from '@material-ui/icons/ExitToApp';\r\nimport NavigationLink from 'app/components/NavigationLink';\r\nimport { alpha } from '@material-ui/core/styles';\r\n\r\nconst NavigationMenuItem = withNavigation(MenuItem);\r\n\r\nconst StyledBox = styled('div')(({ theme }) => ({\r\n backgroundColor: theme.mobile.Drawer.background.main,\r\n minHeight: '100%',\r\n minWidth: '90%',\r\n}));\r\n\r\nconst MobileUserMenuDrawer = ({ classes, open, toggleOpen, user, avatar }) => {\r\n return (\r\n toggleOpen(false)}\r\n disableSwipeToOpen={true}\r\n variant=\"temporary\"\r\n ModalProps={{\r\n keepMounted: false,\r\n }}\r\n PaperProps={{\r\n square: false,\r\n style: {\r\n overflow: 'hidden',\r\n backgroundColor: 'transparent',\r\n borderRadius: '25px 0 0 25px',\r\n minHeight: '100%',\r\n minWidth: '90%',\r\n },\r\n }}\r\n >\r\n \r\n \r\n \r\n toggleOpen(false)}\r\n aria-label=\"Close\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {avatar(user, classes)}\r\n \r\n \r\n \r\n {user.get('name')}\r\n \r\n {user.get('title') && (\r\n \r\n {user.get('name')}\r\n \r\n )}\r\n \r\n \r\n {user.get('mail')}\r\n \r\n \r\n \r\n \r\n \r\n {/* {[\r\n {\r\n text: 'Unit Preferences',\r\n Icon: (\r\n \r\n ),\r\n },\r\n ]\r\n .filter((x) => !x.hidden)\r\n .map((item) => {\r\n const { text, Icon, disabled, onClick, to } = item;\r\n\r\n return (\r\n <>\r\n invokeIfFunction(onClick)}\r\n >\r\n \r\n \r\n \r\n {text}\r\n \r\n \r\n \r\n {Icon}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })} */}\r\n {\r\n event.stopPropagation();\r\n }}\r\n >\r\n Privacy Policy\r\n \r\n \r\n \r\n \r\n \r\n {}\r\n \r\n \r\n \r\n {'Log Out'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n triggerIconRoot: {\r\n height: 70,\r\n width: 70,\r\n cursor: 'pointer',\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n closeIcon: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: theme.spacing(1),\r\n },\r\n nameContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: theme.spacing(2),\r\n },\r\n userDetails: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n padding: theme.spacing(1),\r\n },\r\n navMenuItem: {\r\n padding: theme.spacing(2),\r\n paddingLeft: theme.spacing(1),\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n logout: {\r\n position: 'absolute',\r\n bottom: 0,\r\n backgroundColor: theme.mobile.Drawer.background.dark,\r\n width: '100%',\r\n },\r\n privacyPolicy: {\r\n color: theme.palette.common.white,\r\n position: 'absolute',\r\n bottom: theme.spacing(12),\r\n left: theme.spacing(2),\r\n },\r\n //remove this once we have the preferences feature\r\n chip: {\r\n height: 27,\r\n backgroundColor: alpha(theme.palette.common.white, 0.16),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MobileUserMenuDrawer);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { initializeUserPreferences } from 'app/app.actions';\r\nimport { getCurrentUserFromState } from 'app/app.selectors';\r\nimport { Avatar as TooltipAvatar } from 'app/components/withTooltip';\r\nimport { useState } from 'react';\r\nimport MobileUserMenuDrawer from 'app/components/ApplicationHeader/Mobile/MobileUserMenuDrawer';\r\n\r\nconst Avatar = ({ user, classes, onClick }) => (\r\n \r\n {!user.get('avatar') && user.get('initials')}\r\n \r\n);\r\n\r\nconst MobileUserMenuContainer = ({ user, classes }) => {\r\n const [toggleMenuDrawer, setToggleMenuDrawer] = useState(false);\r\n if (!user || (!user.get('avatar') && !user.get('initials'))) {\r\n return null;\r\n }\r\n\r\n const toggleDrawer = (toggleState = false) => {\r\n setToggleMenuDrawer(toggleState);\r\n };\r\n\r\n const setAvatar = (avatarUser = user, avatarClasses = classes) => {\r\n return ;\r\n };\r\n\r\n return (\r\n <>\r\n toggleDrawer(true)}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n triggerIconRoot: {\r\n height: 40,\r\n width: 40,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n opacity: 0.7,\r\n },\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n user: getCurrentUserFromState(state),\r\n }),\r\n {\r\n dispatchInitializeUserPreferences: initializeUserPreferences,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(MobileUserMenuContainer);\r\n","import React from 'react';\r\nimport { Grid, Typography, LinearProgress } from '@material-ui/core';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport { useState } from 'react';\r\nimport { useEffect } from 'react';\r\nimport routePaths from 'app/routePaths';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport MobileApplicationHeaderBase from 'app/components/ApplicationHeader/Mobile/MobileApplicationHeaderBase';\r\nimport { projectStatusToString } from 'features/projects/projects.mappers';\r\nimport MobileProjectListDrawer from 'app/components/Mobile/MobileProjectListDrawer';\r\nimport { useSelector } from 'react-redux';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport MobileUserMenuContainer from 'app/components/ApplicationHeader/Mobile/MobileUserMenuContainer';\r\n\r\nconst MobileProjectHeader = () => {\r\n const [status, setStatus] = useState();\r\n const [projectsListOpen, setProjectsListOpen] = useState(false);\r\n const project = useCurrentProject();\r\n const projectStatus = useSelector(getExecuteStatusFromState);\r\n const title = project.get('title');\r\n const progress = projectStatus.get('progress');\r\n useHeader({\r\n title,\r\n logoNavigation: routePaths.details,\r\n });\r\n useEffect(() => {\r\n if (project.get('status')) {\r\n setStatus(projectStatusToString(project.get('status')));\r\n }\r\n }, [project]);\r\n\r\n const toggleProjectsList = (isOpen) => {\r\n setProjectsListOpen(isOpen);\r\n };\r\n return (\r\n <>\r\n \r\n \r\n {project.get('id') && (\r\n toggleProjectsList(true)}\r\n >\r\n \r\n \r\n {`${project.get('projectNumber')} ${project.get('title')}`}\r\n \r\n \r\n \r\n \r\n {`${project.get('fieldName')} • ${project.get(\r\n 'wellboreName',\r\n )} • ${status}`}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MobileProjectHeader;\r\n","import React from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport routePaths from 'app/routePaths';\r\nimport MobileApplicationHeaderBase from 'app/components/ApplicationHeader/Mobile/MobileApplicationHeaderBase';\r\nimport MobileUserMenuContainer from 'app/components/ApplicationHeader/Mobile/MobileUserMenuContainer';\r\n\r\nconst MobileProjectsListHeader = ({ breadcrumb }) => {\r\n useHeader({\r\n title: breadcrumb,\r\n logoNavigation: routePaths.projects,\r\n });\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {'Select Project'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MobileProjectsListHeader;\r\n","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport routePaths from 'app/routePaths';\r\nimport MobileApplicationHeaderBase from 'app/components/ApplicationHeader/Mobile/MobileApplicationHeaderBase';\r\nimport { useHistory } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nconst MobilePrivacyPolicyHeader = () => {\r\n let history = useHistory();\r\n useHeader({\r\n title: 'Privacy Policy',\r\n logoNavigation: routePaths.projects,\r\n });\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n history.goBack()} color=\"primary\" />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MobilePrivacyPolicyHeader;\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\nimport MobileApplicationHeaderBase from 'app/components/ApplicationHeader/Mobile/MobileApplicationHeaderBase';\r\nimport MobileUserMenuContainer from 'app/components/ApplicationHeader/Mobile/MobileUserMenuContainer';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nconst DefaultMobileAppHeader = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose()(DefaultMobileAppHeader);\r\n","import { compose } from 'redux';\r\nimport { RouteContainer } from 'altus-ui-components';\r\nimport routePaths from 'app/routePaths';\r\nimport MobileProjectHeader from 'app/components/ApplicationHeader/Mobile/MobileProjectHeader';\r\nimport MobileProjectsListHeader from 'app/components/ApplicationHeader/Mobile/MobileProjectsListHeader';\r\nimport MobilePrivacyPolicyHeader from 'app/components/ApplicationHeader/Mobile/MobilePrivacyPolicyHeader';\r\nimport DefaultMobileAppHeader from 'app/components/ApplicationHeader/Mobile/DefaultMobileAppHeader';\r\n\r\nconst MobileApplicationHeader = () => {\r\n const routes = [\r\n {\r\n path: routePaths.details,\r\n component: MobileProjectHeader,\r\n },\r\n {\r\n path: '/projects/:projectId/status',\r\n component: MobileProjectHeader,\r\n },\r\n {\r\n path: '/projects/:projectId/execution',\r\n component: MobileProjectHeader,\r\n },\r\n {\r\n path: '/projects/:projectId/execution/:taskId/:section',\r\n component: MobileProjectHeader,\r\n },\r\n {\r\n path: routePaths.wells.index,\r\n // component: WellboreHeader,\r\n },\r\n {\r\n path: routePaths.facilities.index,\r\n // component: FacilityHeader,\r\n },\r\n {\r\n path: routePaths.login,\r\n component: null,\r\n },\r\n {\r\n path: routePaths.privacyPolicy,\r\n component: MobilePrivacyPolicyHeader,\r\n },\r\n {\r\n path: [routePaths.projects],\r\n component: MobileProjectsListHeader,\r\n },\r\n ];\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default compose()(MobileApplicationHeader);\r\n","import React from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Button } from 'app/components/withNavigation';\r\nimport ChevronRight from '@material-ui/icons/ChevronRight';\r\nimport { toMobileProjectStatus } from 'utils/route.util';\r\n\r\nconst ProjectStatusOverviewContainer = ({ classes, status, projectId }) => {\r\n return (\r\n \r\n \r\n \r\n Project Status\r\n \r\n \r\n \r\n \r\n \r\n \r\n {status.getIn(['current', 'taskNumber'])}.{' '}\r\n {status.getIn(['current', 'task', 'customTitle'])}\r\n \r\n \r\n \r\n \r\n {status.getIn(['current', 'activity', 'name'])}\r\n \r\n \r\n \r\n \r\n \r\n Status\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(4),\r\n },\r\n durationContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-evenly',\r\n marginTop: theme.spacing(2),\r\n },\r\n durationItem: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n buttonIcon: {\r\n marginLeft: theme.spacing(1),\r\n padding: theme.spacing(0),\r\n },\r\n statusButton: {\r\n paddingRight: theme.spacing(1),\r\n paddingLeft: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectStatusOverviewContainer);\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport {\r\n getActionDataStateFromState,\r\n getAvailableDepartmentsFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport { getAllTasks } from 'features/projects/activities/activities.actions';\r\nimport {\r\n onLoad,\r\n onUnload,\r\n submitUpdateProject,\r\n} from 'features/projects/details/details.actions';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport {\r\n getAllTasksFromState,\r\n getTaskTemplates,\r\n} from 'features/projects/tasks/tasks.selectors';\r\nimport { useEffect } from 'react';\r\nimport { toggleModal } from 'app/app.actions';\r\nimport { DETAILS_ACTIONS } from 'features/projects/details/details.constants';\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport { ACTIVITIES_ACTIONS } from 'features/projects/activities/activities.constants';\r\n// import ProjectCategoriesContainer from 'features/mobile/projects/project/ProjectCategoriesContainer';\r\nimport useCurrentProject from 'features/projects/hooks/useCurrentProject';\r\nimport { getProjectResources } from 'features/projects/projects.actions';\r\nimport { PROJECTS_ACTIONS } from 'features/projects/projects.constants';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport ProjectStatusOverviewContainer from 'features/mobile/projects/project/ProjectStatusOverviewContainer';\r\nimport { Divider } from '@material-ui/core';\r\nimport { requestProjectWellboreSections } from 'features/projects/wellbore/sections/projectWellboreSection.actions';\r\nimport { PROJECT_STATUS } from 'app/app.constants';\r\n\r\nconst MobileProjectOverviewContainer = ({\r\n classes,\r\n projectId,\r\n breadcrumb,\r\n dispatchOnLoad,\r\n dispatchOnUnLoad,\r\n dispatchGetTasks,\r\n dispatchGetProjectResources,\r\n dispatchRequestProjectWellboreSections,\r\n}) => {\r\n useHeader({\r\n subTitle: breadcrumb,\r\n });\r\n\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n dispatchGetTasks(projectId);\r\n dispatchGetProjectResources(projectId);\r\n dispatchRequestProjectWellboreSections(projectId);\r\n\r\n return () => dispatchOnUnLoad();\r\n }, [\r\n projectId,\r\n dispatchOnLoad,\r\n dispatchOnUnLoad,\r\n dispatchGetTasks,\r\n dispatchGetProjectResources,\r\n dispatchRequestProjectWellboreSections,\r\n ]);\r\n const project = useCurrentProject();\r\n const projectStatus = useSelector(getExecuteStatusFromState);\r\n\r\n const dataState = useSelector((state) =>\r\n getSummarizedDataStateFromState(state),\r\n );\r\n\r\n return (\r\n \r\n
    \r\n {project.get('status') === PROJECT_STATUS.EXECUTE && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n {/* */}\r\n
    \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n content: {\r\n padding: theme.spacing(2),\r\n },\r\n divider: {\r\n marginBottom: theme.spacing(2),\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n tasks: getAllTasksFromState(state),\r\n templateTasks: getTaskTemplates(state),\r\n departments: getAvailableDepartmentsFromState(state),\r\n dataState: getActionDataStateFromState(\r\n state,\r\n DETAILS_ACTIONS.PROJECT_DETAILS_PAGE_LOADED,\r\n TASK_ACTIONS.GET_ALL_TASKS,\r\n ACTIVITIES_ACTIONS.GET_TASK_ACTIVITIES,\r\n PROJECTS_ACTIONS.GET_PROJECT_RESOURCES,\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n const dispatchUpdateProject = () => dispatch(submitUpdateProject);\r\n const dispatchToggleModal = (modalId) => dispatch(toggleModal({ modalId }));\r\n\r\n return {\r\n dispatchToggleModal,\r\n dispatchUpdateProject,\r\n dispatchGetTasks: (projectId) => dispatch(getAllTasks(projectId)),\r\n dispatchOnUnLoad: () => dispatch(onUnload()),\r\n dispatchOnLoad: (projectId) => dispatch(onLoad(projectId)),\r\n dispatchGetProjectResources: (projectId) =>\r\n dispatch(getProjectResources(projectId)),\r\n dispatchRequestProjectWellboreSections: requestProjectWellboreSections,\r\n };\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(MobileProjectOverviewContainer);\r\n","import React from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n// import { toProjectDetails } from 'utils/route.util';\r\nimport { useSelector } from 'react-redux';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\n// import MobileBackButton from 'app/components/Mobile/MobileBackButton';\r\n\r\nconst ProjectStatusHeader = ({\r\n classes,\r\n // projectId,\r\n}) => {\r\n // const defaultPreviousPage = toProjectDetails(projectId);\r\n const status = useSelector(getExecuteStatusFromState);\r\n return (\r\n \r\n {/* \r\n \r\n \r\n \r\n */}\r\n \r\n \r\n \r\n Project Status\r\n \r\n \r\n \r\n \r\n {status.getIn(['current', 'taskNumber'])}.{' '}\r\n {status.getIn(['current', 'task', 'customTitle'])}\r\n \r\n \r\n {/* */}\r\n {status.getIn(['current', 'activity', 'name']) && (\r\n \r\n \r\n {`${status.getIn([\r\n 'current',\r\n 'activity',\r\n 'name',\r\n ])} - ${status.getIn(['current', 'activity', 'code'])}`}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n },\r\n nameContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n },\r\n statusHeader: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'left',\r\n justifyContent: 'flex-start',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n backButton: {\r\n width: '100%',\r\n height: '100%',\r\n padding: theme.spacing(0),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectStatusHeader);\r\n","import { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport Speed from '@material-ui/icons/Speed';\r\nimport Depth from '@material-ui/icons/Height';\r\nimport Tension from '@material-ui/icons/CompareArrows';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst ProjectStatusOperationValues = ({ classes, operation }) => {\r\n const theme = useTheme();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Speed\r\n \r\n \r\n \r\n \r\n {operation.speed.value\r\n ? `${operation.speed.roundedValue} ${operation.speed.unit}`\r\n : 'N/A'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Depth\r\n \r\n \r\n \r\n \r\n {operation.depth.value\r\n ? `${operation.depth.roundedValue} ${operation.depth.unit}`\r\n : 'N/A'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Tension\r\n \r\n \r\n \r\n \r\n {operation.tension.value\r\n ? `${operation.tension.roundedValue} ${operation.tension.unit}`\r\n : 'N/A'}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n row: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-around',\r\n padding: theme.spacing(1),\r\n },\r\n operationContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-evenly',\r\n paddingBottom: theme.spacing(2),\r\n opacity: '100%',\r\n zIndex: 3,\r\n },\r\n operationValues: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectStatusOperationValues);\r\n","import moment from 'moment';\r\nimport { formatDuration, formatDurationDiff } from 'utils/format.util';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography, Divider } from '@material-ui/core';\r\nimport { durationFromStartAndEndTime } from 'utils/app.util';\r\nimport { useCallback } from 'react';\r\n\r\nconst ProjectStatusDurationValues = ({ classes, projectStatus }) => {\r\n const estimatedDuration = (task) => {\r\n return task?.get('durationPlanned')\r\n ? moment.duration(task.get('durationPlanned'))\r\n : null;\r\n };\r\n\r\n const taskStartTime = (task) => {\r\n return task?.get('startTime')\r\n ? moment.duration(task.get('startTime'))\r\n : null;\r\n };\r\n const spentDuration = useCallback((task) => {\r\n return durationFromStartAndEndTime(task?.get('startTime'), moment());\r\n }, []);\r\n\r\n const diffDuration = useCallback(\r\n (task) => {\r\n return estimatedDuration(task)\r\n ? moment.duration(\r\n spentDuration(task).clone().subtract(estimatedDuration(task)).abs(),\r\n )\r\n : null;\r\n },\r\n [spentDuration],\r\n );\r\n const compareDurations = (task) => {\r\n const estDuration = estimatedDuration(task);\r\n const spntDuration = spentDuration(task);\r\n\r\n if (!estDuration || !spntDuration) return null; // Handle cases where durations are not available\r\n\r\n const estDurationMs = estDuration.asMilliseconds();\r\n const spntDurationMs = spntDuration.asMilliseconds();\r\n\r\n if (spntDurationMs > estDurationMs) {\r\n return classes.timeDifferenceMore;\r\n } else if (spntDurationMs <= estDurationMs) {\r\n return classes.timeDifferenceLess;\r\n }\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n Time Planned\r\n \r\n \r\n \r\n \r\n {estimatedDuration(projectStatus?.getIn(['current', 'task']))\r\n ? formatDuration(\r\n estimatedDuration(projectStatus?.getIn(['current', 'task'])),\r\n )\r\n : 'N/A'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Time Spent\r\n \r\n \r\n \r\n \r\n {taskStartTime(projectStatus?.getIn(['current', 'task']))\r\n ? formatDurationDiff(\r\n taskStartTime(projectStatus?.getIn(['current', 'task'])),\r\n moment.duration(moment()),\r\n )\r\n : 'N/A'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Difference\r\n \r\n \r\n \r\n \r\n {diffDuration(projectStatus?.getIn(['current', 'task']))\r\n ? formatDuration(\r\n diffDuration(projectStatus?.getIn(['current', 'task'])),\r\n )\r\n : 'N/A'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n durationContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-evenly',\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n backgroundColor: theme.mobile.Background.dark,\r\n opacity: '100%',\r\n zIndex: 3,\r\n },\r\n durationItem: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n timeDifferenceMore: {\r\n color: theme.palette.error.main,\r\n },\r\n timeDifferenceLess: {\r\n color: theme.palette.success.main,\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ProjectStatusDurationValues);\r\n","import { useState, useEffect, useMemo } from 'react';\r\nimport { compose } from 'redux';\r\nimport { Grid, Divider } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ProjectStatusHeader from 'features/mobile/projects/project/ProjectStatusHeader';\r\nimport { useSelector, connect } from 'react-redux';\r\nimport {\r\n getCurrentProjectWellboreFromState,\r\n getCurrentProjectWellboreTrajectoryFromState,\r\n} from 'features/projects/wellbore/projectWellbore.selectors';\r\nimport {\r\n getCurrentClientOrganizationIdFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\nimport { PROJECT_WELLBORE_ACTIONS } from 'features/projects/wellbore/projectWellbore.constants';\r\nimport { ACTIONS } from 'features/projects/wellbore/sections/projectWellboreSection.constants';\r\nimport {\r\n projectWellboreOnLoad,\r\n syncProjectWellboreTrajectoryWithLatest,\r\n} from 'features/projects/wellbore/projectWellbore.actions';\r\nimport { getProjectStatusLite } from 'features/projects/activities/activities.actions';\r\nimport { requestProjectWellboreSections } from 'features/projects/wellbore/sections/projectWellboreSection.actions';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport {\r\n createProjectWellboreSectionsSelector,\r\n getCurrentProject,\r\n} from 'features/projects/projects.selectors';\r\nimport ProjectWellboreTrajectory3DView from 'features/projects/wellbore/survey/ProjectWellboreTrajectory3DView';\r\nimport useLatestProjectWellboreDetail from 'features/projects/hooks/useLatestProjectWellboreDetails';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport { searchOnlineOperations } from 'features/operations/operations.actions';\r\nimport { initialFilters } from 'features/operations/components/OperationFilter';\r\nimport { getOperationsFromState } from 'features/operations/operations.selectors';\r\nimport ProjectStatusOperationValues from 'features/mobile/projects/project/ProjectStatusOperationValues';\r\nimport ProjectStatusDurationValues from 'features/mobile/projects/project/ProjectStatusDurationValues';\r\nimport { onLoad } from 'features/projects/details/details.actions';\r\n\r\nconst ProjectStatusContainer = ({\r\n classes,\r\n projectId,\r\n dispatchOnLoad,\r\n dataState,\r\n wellbore = EMPTY_MAP,\r\n trajectory = EMPTY_MAP,\r\n operations,\r\n dispatchGetProjectStatus,\r\n dispatchRequestProjectWellboreSections,\r\n dispatchSearchOperations,\r\n dispatchOnProjectLoad,\r\n}) => {\r\n const [operation, setOperation] = useState();\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n\r\n useEffect(() => {\r\n const updatedFilters = {\r\n ...initialFilters,\r\n organizationId: currentClientOrganizationId,\r\n };\r\n\r\n dispatchSearchOperations(updatedFilters);\r\n }, [currentClientOrganizationId, dispatchSearchOperations]);\r\n\r\n useEffect(() => {\r\n if (operations.size > 0) {\r\n const projectOp = operations.toJS()[projectId];\r\n setOperation(projectOp);\r\n }\r\n }, [operations, projectId]);\r\n\r\n useEffect(() => {\r\n dispatchRequestProjectWellboreSections(projectId);\r\n }, [projectId, dispatchRequestProjectWellboreSections]);\r\n\r\n useEffect(() => {\r\n dispatchOnProjectLoad(projectId);\r\n }, [projectId, dispatchOnProjectLoad]);\r\n\r\n const [wellboreId, setWellboreId] = useState();\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n }, [projectId, dispatchOnLoad]);\r\n\r\n useEffect(() => {\r\n // Fetch status again if trajectory changes, in case we need to ask/stop asking for confirmation before updating again.\r\n dispatchGetProjectStatus(projectId);\r\n }, [projectId, trajectory, dispatchGetProjectStatus]);\r\n\r\n const projectStatus = useSelector(getExecuteStatusFromState);\r\n\r\n const [latestWellboreDetail = EMPTY_MAP] =\r\n useLatestProjectWellboreDetail(projectId);\r\n\r\n useEffect(() => {\r\n if (latestWellboreDetail.get('wellboreId'))\r\n setWellboreId(latestWellboreDetail.get('wellboreId'));\r\n }, [latestWellboreDetail]);\r\n\r\n const projectWellboreSectionsSelector = useMemo(\r\n () => createProjectWellboreSectionsSelector(projectId),\r\n [projectId],\r\n );\r\n\r\n const wellboreSections = useSelector(projectWellboreSectionsSelector);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {operation && (\r\n \r\n \r\n \r\n )}\r\n \r\n {wellboreId && (\r\n <>\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n flexDirection: 'column',\r\n padding: theme.spacing(0),\r\n backgroundColor: theme.mobile.Background.main,\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(4),\r\n },\r\n divider: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n project: getCurrentProject(state),\r\n wellbore: getCurrentProjectWellboreFromState(state),\r\n trajectory: getCurrentProjectWellboreTrajectoryFromState(state),\r\n operations: getOperationsFromState(state),\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n PROJECT_WELLBORE_ACTIONS.PROJECT_WELLBORE_ON_LOAD,\r\n ACTIONS.REQUEST_PROJECT_WELLBORE_SECTIONS,\r\n ),\r\n }),\r\n {\r\n dispatchOnLoad: projectWellboreOnLoad,\r\n dispatchGetProjectStatus: getProjectStatusLite,\r\n dispatchSyncProjectWellboreTrajectoryWithLatest:\r\n syncProjectWellboreTrajectoryWithLatest,\r\n dispatchRequestProjectWellboreSections: requestProjectWellboreSections,\r\n dispatchSearchOperations: searchOnlineOperations,\r\n dispatchOnProjectLoad: onLoad,\r\n },\r\n ),\r\n withStyles(styles),\r\n)(ProjectStatusContainer);\r\n","import { useMemo, useCallback } from 'react';\r\nimport { Typography, Grid, LinearProgress } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport { formatQuantity } from 'utils/format.util';\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport { WORK_ITEM_STATUS } from 'app/app.constants';\r\nimport { useSelector } from 'react-redux';\r\nimport { getExecuteStatusFromState } from 'features/projects/activities/activities.selectors';\r\nimport { toExecutionSection } from 'utils/route.util';\r\nimport { Button as NavigationButton } from 'app/components/withNavigation';\r\n\r\nconst ExecuteTasksList = ({ tasks, classes, projectId }) => {\r\n const projectStatus = useSelector(getExecuteStatusFromState);\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 2,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const status = row.original.get('status');\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => {\r\n return (\r\n {\r\n event.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {item.get('runNumber')}. {item.get('title')}\r\n \r\n \r\n \r\n \r\n {`TD: ${formatQuantity(\r\n item.get('targetDepth'),\r\n )} • Est. Duration: ${item.get('estimated')}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {item.get('status') === WORK_ITEM_STATUS.STARTED && (\r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n [classes, projectStatus, projectId],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => {\r\n return {\r\n fontMedium: {\r\n fontSize: 'medium',\r\n },\r\n fontSmaller: {\r\n fontSize: 'smaller',\r\n },\r\n rowSize: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n height: theme.spacing(10),\r\n marginTop: theme.spacing(0.5),\r\n padding: theme.spacing(2),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: theme.palette.table.row.main,\r\n },\r\n taskContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n button: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'flex-start',\r\n padding: theme.spacing(0),\r\n textTransform: 'none',\r\n },\r\n };\r\n};\r\n\r\nexport default withStyles(styles)(ExecuteTasksList);\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\nimport { BasePage } from 'altus-ui-components';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport {\r\n getCurrentClientOrganizationIdFromState,\r\n getSummarizedDataStateFromState,\r\n} from 'app/app.selectors';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { useHeader } from 'app/hooks/useHeader';\r\nimport { getCurrentProject } from 'features/projects/projects.selectors';\r\nimport {\r\n getAllTasksFromState,\r\n getTaskTemplates,\r\n} from 'features/projects/tasks/tasks.selectors';\r\nimport { useEffect } from 'react';\r\nimport { TASK_ACTIONS } from 'features/projects/tasks/tasks.constants';\r\nimport { getAllTasks } from 'features/projects/activities/activities.actions';\r\nimport { tasksContainerOnUnload } from 'features/projects/tasks/tasks.actions';\r\nimport ExecuteTasksList from 'features/mobile/projects/execute/ExecuteTasksList';\r\nimport { onLoad } from 'features/projects/details/details.actions';\r\nimport {\r\n getProjectResources,\r\n onLoad as onStatusLoad,\r\n} from 'features/projects/projects.actions';\r\n\r\nconst MobileProjectExecuteContainer = ({\r\n tasks,\r\n classes,\r\n project,\r\n dataState,\r\n projectId,\r\n dispatchOnLoad,\r\n dispatchOnLoadStatus,\r\n dispatchGetProjectResources,\r\n dispatchOnUnload,\r\n dispatchGetTasks,\r\n dispatchCopyTask,\r\n dispatchSortTasks,\r\n dispatchDeleteTask,\r\n totalElapsedDuration,\r\n totalPlannedDuration,\r\n}) => {\r\n const currentClientOrganizationId = useSelector(\r\n getCurrentClientOrganizationIdFromState,\r\n );\r\n useEffect(() => {\r\n dispatchOnLoad(projectId);\r\n dispatchGetTasks(projectId);\r\n dispatchOnLoadStatus(currentClientOrganizationId);\r\n dispatchGetProjectResources(projectId);\r\n\r\n return () => dispatchOnUnload();\r\n }, [\r\n projectId,\r\n dispatchGetTasks,\r\n dispatchOnLoad,\r\n dispatchOnUnload,\r\n dispatchOnLoadStatus,\r\n currentClientOrganizationId,\r\n dispatchGetProjectResources,\r\n ]);\r\n\r\n useHeader({\r\n subTitle: `Execution ${tasks?.size ? `(${tasks?.size})` : ''}`,\r\n });\r\n\r\n return (\r\n \r\n
    \r\n \r\n Tasks\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n basePageChildren: {\r\n padding: 0,\r\n },\r\n content: {\r\n padding: theme.spacing(2),\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => ({\r\n project: getCurrentProject(state),\r\n tasks: getAllTasksFromState(state),\r\n templateTasks: getTaskTemplates(state),\r\n dataState: getSummarizedDataStateFromState(state, TASK_ACTIONS.GET_ALL_TASKS),\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n dispatchGetTasks: (projectId) => dispatch(getAllTasks(projectId)),\r\n dispatchOnUnload: tasksContainerOnUnload,\r\n dispatchOnLoad: (projectId) => dispatch(onLoad(projectId)),\r\n dispatchOnLoadStatus: onStatusLoad,\r\n dispatchGetProjectResources: (projectId) =>\r\n dispatch(getProjectResources(projectId)),\r\n };\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n)(MobileProjectExecuteContainer);\r\n","import withStyles from '@material-ui/styles/withStyles';\r\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\r\n\r\nimport { Button as NavigationButton } from 'app/components/withNavigation';\r\n\r\nconst MobileBackButton = ({ to, classes, children, ...rest }) => (\r\n \r\n \r\n {children}\r\n \r\n);\r\n\r\nconst styles = {\r\n backButtonIcon: {\r\n marginRight: 5,\r\n width: '60%',\r\n height: '60%',\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(MobileBackButton);\r\n","import React from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { toExecutionSection } from 'utils/route.util';\r\nimport MobileBackButton from 'app/components/Mobile/MobileBackButton';\r\n\r\nconst ExecutionDetailsHeader = ({ classes, projectId, task }) => {\r\n const defaultPreviousPage = toExecutionSection(projectId);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {`${task.get('runNumber')}. ${task.get(\r\n 'customTitle',\r\n )}`}\r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n flexBasis: '0',\r\n },\r\n nameContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n },\r\n statusHeader: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'left',\r\n justifyContent: 'center',\r\n },\r\n backButton: {\r\n padding: theme.spacing(0),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(ExecutionDetailsHeader);\r\n","import { useMemo, useCallback, useEffect } from 'react';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n// import ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\n\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\n\r\nimport WorkItemStatus from 'features/projects/components/WorkItemStatus';\r\nimport { EMPTY_MAP } from 'app/app.constants';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createTaskActivitiesSelector } from 'features/projects/activities/activities.selectors';\r\n// import { toExecutionSection } from 'utils/route.util';\r\n// import { Button as NavigationButton } from 'app/components/withNavigation';\r\nimport { getTaskActivities } from 'features/projects/activities/activities.actions';\r\n\r\nconst MobileExecutionActivities = ({ classes, projectId, taskId }) => {\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(getTaskActivities(projectId, taskId));\r\n }, [taskId, dispatch, projectId]);\r\n const activitiesSelector = useMemo(\r\n () => createTaskActivitiesSelector(taskId),\r\n [taskId],\r\n );\r\n\r\n const taskActivities = useSelector(activitiesSelector);\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 2,\r\n Header: ,\r\n Cell: ({ row }) => {\r\n const status = row.original.get('status');\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item, ...rest }) => {\r\n return (\r\n // {\r\n // event.stopPropagation();\r\n // }}\r\n // >\r\n \r\n \r\n \r\n {item.get('isWait') ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {item.getIn(['type', 'name'])}\r\n \r\n \r\n \r\n \r\n {`Est. Duration: ${item.get('estimatedTime')}`}\r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n // \r\n );\r\n },\r\n [\r\n classes,\r\n // projectId,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => {\r\n return {\r\n fontMedium: {\r\n fontSize: 'medium',\r\n },\r\n fontSmaller: {\r\n fontSize: 'smaller',\r\n },\r\n rowSize: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n height: theme.spacing(10),\r\n marginTop: theme.spacing(0.5),\r\n padding: theme.spacing(2),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: theme.palette.background.default,\r\n },\r\n taskContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n button: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'flex-start',\r\n padding: theme.spacing(0),\r\n },\r\n };\r\n};\r\n\r\nexport default withStyles(styles)(MobileExecutionActivities);\r\n","import toJSComponent from 'with-immutable-props-to-js';\r\nimport SerialNumberRegisteredIcon from 'assets/TaskCompletedIcon.svg';\r\nimport NoSerialNumberIcon from 'assets/task_planned.svg';\r\n\r\nconst ToolstringSerialNumberStatus = ({ serialNumber }) => {\r\n if (!serialNumber) {\r\n return \"Serial;\r\n } else {\r\n return (\r\n \"Serial\r\n );\r\n }\r\n};\r\n\r\nexport default toJSComponent(ToolstringSerialNumberStatus);\r\n","import { useMemo } from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Field, Formik } from 'formik';\r\nimport AutoSaveFormik from 'app/components/form/formik/AutoSaveFormik';\r\nimport TableRowAutocompleteTextFieldFormik from 'app/components/form/formik/TableRowAutocompleteTextFieldFormik';\r\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\r\nimport { TASK_URLS } from 'features/projects/activities/activities.constants';\r\n\r\nconst MobileToolstringDrawerContent = ({\r\n classes,\r\n tool,\r\n onSubmit,\r\n timeout = 1500,\r\n isStringVerified,\r\n}) => {\r\n const initialValues = useMemo(() => tool.toJS(), [tool]);\r\n return (\r\n \r\n \r\n \r\n {tool.get('name')}\r\n \r\n \r\n \r\n {'Item No.: '} {`#${tool.get('m3ItemNumber')}`}\r\n {' • Serial No.: '} {`${initialValues['serialNo'] || ''}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {'Acc Length:'}{' '}\r\n {`${tool.getIn(['accumulatedLength', 'roundedValue']) || ''} ${\r\n tool.getIn(['accumulatedLength', 'unit']) || ''\r\n }`}\r\n \r\n \r\n {'Length: '}{' '}\r\n {`${tool.getIn(['length', 'roundedValue'])} ${tool.getIn([\r\n 'length',\r\n 'unit',\r\n ])}`}\r\n \r\n \r\n {'Weight: '}{' '}\r\n {`${tool.getIn(['weight', 'roundedValue'])} ${tool.getIn([\r\n 'weight',\r\n 'unit',\r\n ])}`}\r\n \r\n \r\n {'Outer Diameter: '}{' '}\r\n {`${tool.getIn(['outerDiameter', 'roundedValue'])} ${tool.getIn([\r\n 'outerDiameter',\r\n 'unit',\r\n ])}`}\r\n \r\n \r\n \r\n {!isStringVerified && (\r\n \r\n \r\n \r\n {'Register Serial Number'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Add Complaint\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n drawerContent: {\r\n fontSize: theme.typography.pxToRem(12),\r\n padding: theme.spacing(3),\r\n },\r\n drawerTitle: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n },\r\n container: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n marginTop: theme.spacing(3),\r\n },\r\n drawerToolDetails: {\r\n paddingTop: theme.spacing(2),\r\n },\r\n addComplaint: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-end',\r\n paddingBottom: theme.spacing(4),\r\n paddingTop: theme.spacing(2),\r\n },\r\n addComplaintUrl: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n color: theme.palette.primary.light,\r\n textDecoration: 'underline',\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MobileToolstringDrawerContent);\r\n","import { useState, useMemo, useCallback } from 'react';\r\nimport GroupWorkIcon from '@material-ui/icons/GroupWork';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport LinkIcon from '@material-ui/icons/Link';\r\nimport { useToggle } from 'altus-hooks';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { EMPTY_LIST, EMPTY_MAP } from 'app/app.constants';\r\nimport ToolstringSerialNumberStatus from 'features/mobile/projects/execute/taskToolstring/ToolstringSerialNumberStatus';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\nimport { ToolType } from 'features/projects/tool/tool.constants';\r\nimport MobileDrawerBase from 'app/components/Mobile/MobileDrawerBase';\r\nimport MobileToolstringDrawerContent from 'features/mobile/projects/execute/taskToolstring/MobileToolstringDrawerContent';\r\n\r\nexport const getToolTypeIcon = (tool) => {\r\n const type = tool.get('type');\r\n switch (type) {\r\n case ToolType.ASSEMBLY:\r\n return ;\r\n case ToolType.TOOL:\r\n return tool.get('attachedTools').size > 0 ? : null;\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst MobileToolstringListContiner = ({\r\n classes,\r\n toolstringTools = EMPTY_LIST,\r\n updateItemProperties,\r\n assets = EMPTY_LIST,\r\n isStringVerified = false,\r\n}) => {\r\n const [isExpanded, toggleExpanded] = useToggle(false);\r\n const [currentTool, setCurrentTool] = useState(EMPTY_MAP);\r\n const toggleDrawer = (tool) => {\r\n setCurrentTool(tool);\r\n toggleExpanded();\r\n };\r\n\r\n const getSerialNoString = (serialNo, itemNo = 0) => {\r\n if (!isStringVerified) return `• Serial No.: ${serialNo || ''}`;\r\n else {\r\n const assetSerialNo = assets\r\n .find((asset) => asset.get('itemNumber') === itemNo)\r\n ?.get('serialNumber');\r\n return `• Serial No.: ${assetSerialNo || ''}`;\r\n }\r\n };\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 2,\r\n Cell: ({ row }) => {\r\n const serialNo = row.original.get('serialNo');\r\n row.isExpanded = row.canExpand ? true : null;\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const createRow = (tool, isSubRow = false) => (\r\n \r\n tool.get('type') !== ToolType.ASSEMBLY ? toggleDrawer(tool) : null\r\n }\r\n >\r\n \r\n {!isSubRow && (\r\n \r\n {getToolTypeIcon(tool)}\r\n \r\n )}\r\n {!isStringVerified && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {tool.get('name')}\r\n \r\n \r\n \r\n \r\n {`Item No.: ${\r\n tool.get('m3ItemNumber') ? `#${tool.get('m3ItemNumber')}` : ''\r\n } ${\r\n (tool.get('type') !== ToolType.ASSEMBLY &&\r\n getSerialNoString(\r\n tool.get('serialNo'),\r\n tool.get('m3ItemNumber'),\r\n )) ||\r\n ''\r\n }`}\r\n \r\n \r\n \r\n \r\n {tool.get('type') !== ToolType.ASSEMBLY && }\r\n \r\n \r\n \r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item }) => {\r\n switch (item.get('type')) {\r\n case ToolType.TOOL:\r\n return (\r\n \r\n {createRow(item)}\r\n {item.get('attachedTools').size > 0\r\n ? item.get('attachedTools').map((tool) => createRow(tool, true))\r\n : null}\r\n \r\n );\r\n case ToolType.ASSEMBLY:\r\n return (\r\n \r\n {createRow(item)}\r\n {item\r\n .get('toolAssemblyTools')\r\n .map((tool) => createRow(tool, true))}\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n },\r\n // eslint-disable-next-line\r\n [classes],\r\n );\r\n\r\n return (\r\n <>\r\n {!isStringVerified && (\r\n \r\n \r\n {'Register serial numbers for all tools.'}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => {\r\n return {\r\n fontMedium: {\r\n fontSize: 'medium',\r\n },\r\n fontSmaller: {\r\n fontSize: 'smaller',\r\n },\r\n darkBackground: {\r\n background: theme.palette.background.default,\r\n marginTop: theme.spacing(0.5),\r\n },\r\n rowSize: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n height: theme.spacing(15),\r\n marginTop: theme.spacing(0.5),\r\n padding: theme.spacing(2),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: theme.palette.background.default,\r\n },\r\n subRowSize: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n height: theme.spacing(15),\r\n marginTop: theme.spacing(0.5),\r\n padding: theme.spacing(2),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: theme.palette.background.paper,\r\n marginLeft: theme.spacing(4),\r\n },\r\n taskContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n button: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'flex-start',\r\n padding: theme.spacing(0),\r\n },\r\n registerText: {\r\n paddingLeft: theme.spacing(2),\r\n },\r\n };\r\n};\r\n\r\nexport default withStyles(styles)(MobileToolstringListContiner);\r\n","import { compose } from 'redux';\r\nimport PropTypes from 'prop-types';\r\nimport { memo, Fragment } from 'react';\r\nimport { Iterable, fromJS } from 'immutable';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\nimport ToolImageContainer from 'features/projects/tool/components/ToolImageContainer';\r\nimport ToolstringPreviewEmpty from 'features/projects/tasks/task/toolstring/components/ToolstringPreviewEmpty';\r\nimport { getToolTypeIcon } from 'features/mobile/projects/execute/taskToolstring/MobileToolstringListContiner';\r\n\r\nconst MobileToolstringPreview = ({\r\n classes,\r\n toolstringSections = EMPTY_LIST,\r\n}) => {\r\n if (!toolstringSections.size) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {toolstringSections.valueSeq().map((toolstringSection, sectionIndex) => {\r\n const itemsInSection = toolstringSection.get('items');\r\n\r\n let flatItems = [];\r\n itemsInSection.forEach((item) => {\r\n const assemblyTools = item.get('toolAssemblyTools');\r\n if (assemblyTools && assemblyTools.size > 0) {\r\n assemblyTools.forEach((assemblyItem) => {\r\n flatItems.push(\r\n assemblyItem.set(\r\n 'parentToolstringItemId',\r\n item.get('toolstringItemId'),\r\n ),\r\n );\r\n });\r\n } else {\r\n flatItems.push(item.set('isTopLevel', true));\r\n }\r\n });\r\n flatItems = fromJS(flatItems);\r\n\r\n const maxLength = flatItems\r\n .maxBy((item) => item.getIn(['length', 'roundedValue']))\r\n .getIn(['length', 'roundedValue']);\r\n\r\n let sumRatios = 0;\r\n const itemsWithInitialRatios = flatItems.map((item) => {\r\n const lengthValue = item.getIn(['length', 'roundedValue']);\r\n const ratio = (lengthValue / maxLength) * 100;\r\n sumRatios += ratio;\r\n return item.set('initialRatio', ratio);\r\n });\r\n\r\n const totalRatio = 100;\r\n const itemsWithRatioFlat = itemsWithInitialRatios.map((item) => {\r\n const initialRatio = item.get('initialRatio');\r\n const adjustedRatio = (initialRatio / sumRatios) * totalRatio;\r\n return item.set('ratio', adjustedRatio).delete('initialRatio');\r\n });\r\n\r\n const updatedItemsInSection = itemsInSection.map((topLevelItem) => {\r\n const topLevelItemId = topLevelItem.get('toolstringItemId');\r\n let updatedTopLevelItem = itemsWithRatioFlat.find(\r\n (flatItem) =>\r\n flatItem.get('toolstringItemId') === topLevelItemId &&\r\n flatItem.get('isTopLevel'),\r\n );\r\n updatedTopLevelItem = updatedTopLevelItem\r\n ? updatedTopLevelItem\r\n : topLevelItem;\r\n\r\n if (\r\n topLevelItem.get('toolAssemblyTools') &&\r\n topLevelItem.get('toolAssemblyTools').size > 0\r\n ) {\r\n const updatedAssemblyTools = topLevelItem\r\n .get('toolAssemblyTools')\r\n .map((assemblyItem) => {\r\n const assemblyItemId = assemblyItem.get('toolAssemblyToolId');\r\n const updatedAssemblyItem = itemsWithRatioFlat.find(\r\n (flatItem) =>\r\n flatItem.get('toolAssemblyToolId') === assemblyItemId,\r\n );\r\n return updatedAssemblyItem\r\n ? updatedAssemblyItem\r\n .delete('parentToolstringItemId')\r\n .delete('isTopLevel')\r\n : assemblyItem;\r\n });\r\n return updatedTopLevelItem.set(\r\n 'toolAssemblyTools',\r\n updatedAssemblyTools,\r\n );\r\n } else {\r\n return updatedTopLevelItem;\r\n }\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n {updatedItemsInSection.map((toolstringItem, index) => {\r\n if (\r\n toolstringItem.get('toolAssemblyTools') &&\r\n toolstringItem.get('toolAssemblyTools').size\r\n ) {\r\n const tools = toolstringItem.get('toolAssemblyTools');\r\n return (\r\n <>\r\n
    \r\n
    \r\n {getToolTypeIcon(toolstringItem)}\r\n \r\n {toolstringItem.get('name')}\r\n \r\n
    \r\n
    \r\n {tools.map((tool, toolIndex) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {' '}\r\n {tool.get('name')}{' '}\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getToolTypeIcon(toolstringItem)}\r\n \r\n \r\n \r\n {' '}\r\n {toolstringItem.get('name')}{' '}\r\n \r\n {toolstringItem.get('attachedTools')?.size > 0 && (\r\n \r\n {toolstringItem.get('attachedTools')?.size}\r\n {' item(s)'}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n })}\r\n
    \r\n {}\r\n \r\n
    \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n overflow: 'hidden',\r\n },\r\n image: {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& > img': {\r\n objectFit: 'contain',\r\n },\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-evenly',\r\n alignItems: 'center',\r\n },\r\n sectionContainer: {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n paddingTop: theme.spacing(3.5),\r\n },\r\n sectionLengthText: {\r\n color: theme.altus.components.ToolstringPreview.lengthSection.main,\r\n },\r\n toolImage: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n toolAssembly: {\r\n position: 'relative',\r\n },\r\n assemblyHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n position: 'absolute',\r\n top: -theme.spacing(3.5),\r\n right: theme.spacing(3.5),\r\n marginBottom: theme.spacing(1),\r\n },\r\n assemblyName: {\r\n paddingLeft: theme.spacing(1),\r\n },\r\n toolContainer: {\r\n position: 'relative',\r\n },\r\n verticalLine: {\r\n transform: 'translateX(50%)',\r\n width: '2px',\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n smallFont: {\r\n fontSize: '0.7rem',\r\n },\r\n});\r\n\r\nMobileToolstringPreview.propTypes = {\r\n toolstringSections: PropTypes.instanceOf(Iterable),\r\n};\r\n\r\nexport default compose(memo, withStyles(styles))(MobileToolstringPreview);\r\n","import React from 'react';\r\nimport { SwipeableDrawer as Drawer, Grid } from '@material-ui/core';\r\nimport { styled } from '@material-ui/styles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { IconButton } from 'app/components/withTooltip';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport MobileToolstringPreview from 'features/mobile/projects/execute/taskToolstring/MobileToolstringPreview';\r\n\r\nconst StyledBox = styled('div')(({ theme }) => ({\r\n backgroundColor: theme.mobile.Drawer.background.main,\r\n minHeight: '100%',\r\n minWidth: '98%',\r\n overflowY: 'auto',\r\n}));\r\n\r\nconst MobileToolImageDrawer = ({\r\n classes,\r\n toolstringSections,\r\n open,\r\n toggleOpen,\r\n}) => {\r\n return (\r\n toggleOpen(false)}\r\n disableSwipeToOpen={true}\r\n variant=\"temporary\"\r\n ModalProps={{\r\n keepMounted: false,\r\n }}\r\n PaperProps={{\r\n square: false,\r\n style: {\r\n overflow: 'auto',\r\n backgroundColor: 'transparent',\r\n borderRadius: '25px 0 0 0',\r\n minHeight: '100%',\r\n maxWidth: '98%',\r\n },\r\n }}\r\n >\r\n \r\n \r\n \r\n toggleOpen(false)}\r\n aria-label=\"Close\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n closeIcon: {\r\n position: 'fixed',\r\n right: 0,\r\n zIndex: 1,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: theme.spacing(1),\r\n backgroundColor: theme.mobile.Drawer.background.main,\r\n },\r\n toolstringPreview: {\r\n height: '100%',\r\n },\r\n toolstringContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n paddingTop: theme.spacing(5),\r\n paddingBottom: theme.spacing(5),\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MobileToolImageDrawer);\r\n","import { useState } from 'react';\r\nimport { Grid, Button } from '@material-ui/core';\r\nimport ImageFilled from '@material-ui/icons/Image';\r\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport MobileToolImageDrawer from 'features/mobile/projects/execute/taskToolstring/MobileToolImageDrawer';\r\n\r\nconst MobileToolstringActionsContainer = ({\r\n classes,\r\n toolstringSections,\r\n validateToolstringSerialNumbers,\r\n}) => {\r\n const [toolImageDrawerIsOpen, toggleToolImageDrawer] = useState(false);\r\n return (\r\n \r\n \r\n }\r\n onClick={() => toggleToolImageDrawer(true)}\r\n >\r\n {'Drawing'}\r\n \r\n \r\n \r\n }\r\n onClick={() => validateToolstringSerialNumbers()}\r\n >\r\n {'Verify BHA'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => {\r\n return {\r\n outlinedButton: {\r\n color: theme.palette.primary.newLight,\r\n borderColor: theme.palette.primary.newLight,\r\n minHeight: theme.spacing(8),\r\n marginBottom: theme.spacing(2),\r\n },\r\n containedButton: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.secondary.contrastText,\r\n minHeight: theme.spacing(8),\r\n marginBottom: theme.spacing(2),\r\n },\r\n };\r\n};\r\n\r\nexport default withStyles(styles)(MobileToolstringActionsContainer);\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogContent from '@material-ui/core/DialogContent';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n backgroundColor: theme.palette.background['paper-elevation-2'],\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.mobile.Dialog.buttons.close.main,\r\n },\r\n});\r\n\r\nconst DialogTitle = withStyles(styles)((props) => {\r\n const { children, classes, onClose, ...other } = props;\r\n return (\r\n \r\n {children}\r\n {onClose ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n});\r\n\r\nconst DialogContent = withStyles((theme) => ({\r\n root: {\r\n padding: theme.spacing(3),\r\n backgroundColor: theme.mobile.Dialog.content.background.main,\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogButton = withStyles((theme) => ({\r\n root: {\r\n marginTop: theme.spacing(2),\r\n padding: theme.spacing(2),\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.secondary.contrastText,\r\n },\r\n}))(Button);\r\n\r\nconst MobileDialogBase = ({\r\n open,\r\n toggleModal,\r\n title,\r\n content,\r\n buttonText,\r\n buttonAction,\r\n displayCloseIcon = true,\r\n}) => {\r\n return (\r\n \r\n \r\n {title}\r\n \r\n \r\n {content}\r\n \r\n {buttonText}\r\n \r\n \r\n {/* \r\n */}\r\n \r\n );\r\n};\r\n\r\nexport default MobileDialogBase;\r\n","import moment from 'moment';\r\nimport { useMemo, useState } from 'react';\r\nimport { compose } from 'redux';\r\n\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Tooltip } from '@material-ui/core';\r\nimport { Table } from 'altus-ui-components';\r\nimport { useToggle } from 'altus-hooks';\r\n\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport OrangeIcon from 'assets/Orange.svg';\r\nimport RedIcon from 'assets/Red.svg';\r\nimport {\r\n getAssetTestNameById,\r\n TEST_ASSET_RESULT,\r\n TEST_RESULT_TO_TOOLTIP_TITLE,\r\n} from 'features/equipment/equipment.constants';\r\n\r\nimport { Format } from 'app/app.constants';\r\nimport { formatDate } from 'utils/format.util';\r\nimport { extractTimeIn24HourFormat } from 'utils/app.util';\r\nimport AssetHistoryDrawer from 'features/equipment/assets/components/drawer/AssetHistoryDrawer';\r\n\r\nexport const testResultIcons = {\r\n [TEST_ASSET_RESULT.PASS]: GreenIcon,\r\n [TEST_ASSET_RESULT.FAIL]: RedIcon,\r\n [TEST_ASSET_RESULT.WARNING]: OrangeIcon,\r\n};\r\n\r\nconst handleResultIcon = (testResult) => {\r\n return testResultIcons[testResult] || GreenIcon;\r\n};\r\n\r\nconst getTooltipTitle = (testResult) => {\r\n return TEST_RESULT_TO_TOOLTIP_TITLE[testResult] || 'Unknown';\r\n};\r\n\r\nconst AssetTestTable = ({ assetTests, displayComments }) => {\r\n const [assetHistory, setAssetHistory] = useState(null);\r\n const [isOpen, toggle] = useToggle();\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n xs: 3,\r\n id: 'event',\r\n Header: 'Test',\r\n accessor: (assetTest) => assetTest?.get('testType'),\r\n Cell: ({ value }) => <>{getAssetTestNameById(value)},\r\n },\r\n {\r\n xs: 3,\r\n id: 'result',\r\n Header: 'Result',\r\n accessor: (assetTest) => assetTest?.get('result'),\r\n Cell: ({ value }) => {\r\n const title = getTooltipTitle(value);\r\n return (\r\n \r\n
    \r\n \r\n {title}\r\n
    \r\n
    \r\n );\r\n },\r\n },\r\n {\r\n xs: 3,\r\n id: 'date',\r\n Header: 'Date',\r\n accessor: (item) => {\r\n if (!item?.get('startDate')) return '-';\r\n const startDate = item.get('startDate');\r\n return `${formatDate(\r\n moment(startDate),\r\n Format.date,\r\n )} ${extractTimeIn24HourFormat(item.get('startDate'))}`;\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n return (\r\n <>\r\n asset.get('startDate')).reverse()}\r\n columns={columns}\r\n useGlobalFilter={false}\r\n noItemsMessage={'No items...'}\r\n onRowClick={(asset) => {\r\n setAssetHistory(asset);\r\n toggle();\r\n }}\r\n />\r\n {assetHistory && (\r\n \r\n )}\r\n \r\n );\r\n};\r\nconst styles = (theme) => ({\r\n root: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n listStyle: 'none',\r\n margin: 0,\r\n },\r\n chip: {\r\n margin: theme.spacing(0.5),\r\n },\r\n editorClass: {\r\n width: '100%',\r\n paddingLeft: '10px',\r\n border: '1px solid #595959',\r\n borderRadius: '4px',\r\n fontSize: '1rem',\r\n flex: '1 1 auto',\r\n '& .DraftEditor-root': {\r\n display: 'flex',\r\n },\r\n },\r\n});\r\nexport default compose(withStyles(styles))(AssetTestTable);\r\n","import React from 'react';\r\nimport moment from 'moment';\r\n\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport { EMPTY_LIST, Format } from 'app/app.constants';\r\nimport { TEST_RESULT_TO_TOOLTIP_TITLE } from 'features/equipment/equipment.constants';\r\n\r\nimport { styled } from '@material-ui/styles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport DateIcon from '@material-ui/icons/CalendarToday';\r\nimport { IconButton } from 'app/components/withTooltip';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Avatar as TooltipAvatar } from 'app/components/withTooltip';\r\nimport { SwipeableDrawer as Drawer, Grid, Typography } from '@material-ui/core';\r\n\r\nimport EditorStateViewer from 'app/components/EditorStateViewer';\r\nimport { testResultIcons } from 'features/projects/assets/AssetTestTable';\r\nimport MobileToolstringListContiner from 'features/mobile/projects/execute/taskToolstring/MobileToolstringListContiner';\r\n\r\nimport { formatDate } from 'utils/format.util';\r\nimport { extractTimeFromDate, RichText } from 'utils/app.util';\r\n\r\nconst StyledBox = styled('div')(({ theme }) => ({\r\n backgroundColor: theme.mobile.Drawer.background.main,\r\n minHeight: '100%',\r\n minWidth: '100%',\r\n overflowY: 'auto',\r\n}));\r\n\r\nconst handleResultIcon = (testResult) => {\r\n return testResultIcons[testResult] || GreenIcon;\r\n};\r\n\r\nconst getTooltipTitle = (testResult) => {\r\n return TEST_RESULT_TO_TOOLTIP_TITLE[testResult] || 'Unknown';\r\n};\r\n\r\nconst userInitials = (fullName) => {\r\n const nameParts = fullName.split(',').map(function (name) {\r\n return name.trim();\r\n });\r\n\r\n const correctOrderName = `${nameParts[1]} ${nameParts[0]}`;\r\n\r\n const initials = correctOrderName\r\n .split(' ')\r\n .map(function (name) {\r\n return name[0];\r\n })\r\n .join('');\r\n\r\n return initials;\r\n};\r\n\r\nconst Avatar = ({ user, classes, onClick }) => (\r\n \r\n {!user.get('avatar') && userInitials(user.get('fullName'))}\r\n \r\n);\r\n\r\nconst setAvatar = (avatarUser, avatarClasses) => {\r\n return ;\r\n};\r\n\r\nconst MobileStringVerificationDrawerContainer = ({\r\n classes,\r\n open,\r\n toggleOpen,\r\n stringVerification,\r\n toolstringTools = EMPTY_LIST,\r\n}) => {\r\n const time = stringVerification?.getIn(['stringTestResult', 'time']);\r\n return (\r\n toggleOpen(false)}\r\n disableSwipeToOpen={true}\r\n variant=\"temporary\"\r\n ModalProps={{\r\n keepMounted: false,\r\n }}\r\n PaperProps={{\r\n square: false,\r\n style: {\r\n overflow: 'auto',\r\n backgroundColor: 'transparent',\r\n minHeight: '100%',\r\n minWidth: '100%',\r\n },\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {`String Verification ${stringVerification.getIn([\r\n 'stringTestResult',\r\n 'sequence',\r\n ])}`}\r\n \r\n \r\n\r\n \r\n toggleOpen(false)}\r\n aria-label=\"Close\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {'Result'}\r\n \r\n \r\n \r\n \r\n {getTooltipTitle(\r\n stringVerification.getIn(['stringTestResult', 'result']),\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {setAvatar(\r\n stringVerification.getIn(['stringTestResult', 'user']),\r\n classes,\r\n )}\r\n \r\n \r\n \r\n \r\n {'Verified by'}\r\n \r\n \r\n \r\n \r\n {stringVerification.getIn([\r\n 'stringTestResult',\r\n 'user',\r\n 'fullName',\r\n ])}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {'Date'}\r\n \r\n \r\n \r\n \r\n {`${formatDate(\r\n moment(time),\r\n Format.date_dayfirst,\r\n )}, ${extractTimeFromDate(time)}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {'Comment'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n minWidth: '100%',\r\n },\r\n closeIcon: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: theme.spacing(1),\r\n },\r\n resultContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(1),\r\n paddingTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n background: theme.palette.background.default,\r\n },\r\n resultRow: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n resultContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n },\r\n content: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n fontLarge: {\r\n fontSize: 'x-large',\r\n },\r\n triggerIconRoot: {\r\n height: 30,\r\n width: 30,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n opacity: 0.7,\r\n },\r\n },\r\n});\r\n\r\nexport default withStyles(styles)(MobileStringVerificationDrawerContainer);\r\n","import { useMemo, useCallback, useState } from 'react';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { Table, TableRowActionsCell } from 'altus-ui-components';\r\nimport { testResultIcons } from 'features/equipment/assets/components/AssetHistoryTableRowDetails';\r\nimport GreenIcon from 'assets/Green.svg';\r\nimport { useToggle } from 'altus-hooks';\r\nimport MobileStringVerificationDrawerContainer from 'features/mobile/projects/execute/taskToolstring/MobileStringVerificationDrawerContainer';\r\nimport { EMPTY_LIST } from 'app/app.constants';\r\n\r\nconst handleResultIcon = (testResult) => {\r\n return testResultIcons[testResult] || GreenIcon;\r\n};\r\n\r\nconst MobileStringVerificationList = ({\r\n classes,\r\n stringVerificationResults,\r\n toolstringTools = EMPTY_LIST,\r\n}) => {\r\n const [isDrawerOpen, toggleDrawerOpen] = useToggle(false);\r\n const [selectedResult, setSelectedResult] = useState(EMPTY_LIST);\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n id: 'expander',\r\n xs: 2,\r\n Cell: ({ row }) => {\r\n const result = row.original;\r\n return (\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ],\r\n [],\r\n );\r\n\r\n const createRow = (result) => (\r\n {\r\n setSelectedResult(result);\r\n toggleDrawerOpen();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`String Verification ${result.getIn([\r\n 'stringTestResult',\r\n 'sequence',\r\n ])}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n const renderTableRowComponent = useCallback(\r\n ({ item }) => {\r\n return createRow(item);\r\n },\r\n // eslint-disable-next-line\r\n [classes],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => {\r\n return {\r\n fontMedium: {\r\n fontSize: 'medium',\r\n },\r\n rowSize: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n marginTop: theme.spacing(0.5),\r\n padding: theme.spacing(2),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: `${theme.palette.primary.newLight}26`,\r\n },\r\n content: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n };\r\n};\r\n\r\nexport default withStyles(styles)(MobileStringVerificationList);\r\n","import { compose } from 'redux';\r\nimport { memo, useState, useEffect, useCallback } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\nimport Icon from '@material-ui/icons/Build';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport { Box, Grid, Typography, CircularProgress } from '@material-ui/core';\r\n\r\nimport {\r\n getToolstringToolsFromState,\r\n getToolstringSectionsFromState,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.selectors';\r\n\r\nimport {\r\n receiveTaskToolstring,\r\n requestGetTaskToolstring,\r\n requestSortToolstringTools,\r\n requestTaskToolstringSections,\r\n requestUpdateNotPlannedToolstringItem,\r\n} from 'features/projects/tasks/task/toolstring/toolstring.actions';\r\n\r\nimport { TOOLSTRING_ACTIONS } from 'features/projects/tasks/task/toolstring/toolstring.constants';\r\n\r\nimport toolstringService from 'services/toolstring.service';\r\nimport { getSummarizedDataStateFromState } from 'app/app.selectors';\r\nimport {\r\n getStringVerificationsForToolstring,\r\n validateToolStringSerialNumbersForMobile,\r\n} from 'features/equipment/equipment.actions';\r\nimport MobileToolstringActionsContainer from 'features/mobile/projects/execute/taskToolstring/MobileToolstringActionsContainer';\r\nimport MobileToolstringListContiner from './MobileToolstringListContiner';\r\nimport { MissingSerialNoModal } from 'features/projects/tool/tool.constants';\r\nimport { useModal } from 'altus-modal';\r\nimport MobileDialogBase from 'app/components/Mobile/Dialog/MobileDialogBase';\r\nimport {\r\n ASSET_HISTORY_EVENT_TYPES,\r\n ASSET_HISTORY_EVENT_TYPES_ITEM,\r\n ASSET_HISTORY_TEST_TYPE,\r\n ASSET_HISTORY_TEST_TYPES,\r\n EquipmentType,\r\n MODAL,\r\n} from 'features/equipment/equipment.constants';\r\nimport CreateAssetHistoryModalContainer from 'features/equipment/assets/components/CreateAssetHistoryModalContainer';\r\nimport { List, fromJS } from 'immutable';\r\nimport groupBy from 'lodash/groupBy';\r\nimport MobileStringVerificationList from 'features/mobile/projects/execute/taskToolstring/MobileStringVerificationList';\r\n\r\nconst MobileExecutionBHATabContainer = ({\r\n taskId,\r\n projectId,\r\n dataState,\r\n classes,\r\n toolstringId,\r\n toolstringTools,\r\n toolstringSections,\r\n dispatchGetToolstring,\r\n dispatchToolstringSections,\r\n dispatchUpdateToolstringItem,\r\n dispatchGetStringVerificationsForToolstring,\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [toolStringId, setToolStringId] = useState();\r\n const [stringVerificationResults, setStringVerificationResults] =\r\n useState(null);\r\n const [open, toggleModal] = useModal(MODAL.MISSING_SERIAL_NUMBER);\r\n const [isOpen, toggleAssetHistoryModal] = useModal(\r\n MODAL.ADD_ASSET_HISTORY_BHA,\r\n );\r\n const openModal = (event) => {\r\n event?.preventDefault();\r\n toggleAssetHistoryModal();\r\n };\r\n toolstringId = toolStringId;\r\n toolstringSections = useSelector((state) =>\r\n getToolstringSectionsFromState(state, toolStringId),\r\n );\r\n toolstringTools = useSelector((state) =>\r\n getToolstringToolsFromState(state, toolStringId),\r\n );\r\n\r\n const assetHistoryEventTypes = List([\r\n ASSET_HISTORY_EVENT_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_EVENT_TYPES_ITEM.TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const testTypesItems = List([\r\n ASSET_HISTORY_TEST_TYPES.find(\r\n (item) => item.id === String(ASSET_HISTORY_TEST_TYPE.STRING_TEST),\r\n ),\r\n ]).filter((item) => item);\r\n\r\n const isLoading = dataState?.isLoading();\r\n\r\n const getPlannedToolstring = useCallback(\r\n () =>\r\n toolstringService\r\n .getPlannedToolstring(projectId, taskId)\r\n .then((toolstring) => {\r\n setToolStringId(toolstring?.toolStringId);\r\n dispatch(receiveTaskToolstring(projectId, taskId, toolstring));\r\n dispatchToolstringSections(\r\n projectId,\r\n taskId,\r\n toolstring?.toolStringId,\r\n );\r\n dispatchGetToolstring(projectId, taskId, toolstring?.toolStringId);\r\n }),\r\n [\r\n dispatch,\r\n dispatchGetToolstring,\r\n dispatchToolstringSections,\r\n projectId,\r\n taskId,\r\n ],\r\n );\r\n\r\n const validateToolstringSerialNumbers = () => {\r\n dispatch(validateToolStringSerialNumbersForMobile(toolstringId));\r\n };\r\n\r\n useEffect(() => {\r\n getPlannedToolstring(projectId, taskId);\r\n }, [getPlannedToolstring, projectId, taskId]);\r\n\r\n useEffect(() => {\r\n dispatchGetStringVerificationsForToolstring(taskId, toolStringId).then(\r\n (response) => {\r\n if (response && !isOpen) {\r\n const results = transformData(\r\n groupBy(\r\n response,\r\n (verificationResult) =>\r\n verificationResult.stringTest.stringTestId,\r\n ),\r\n );\r\n setStringVerificationResults(results);\r\n }\r\n },\r\n );\r\n }, [\r\n dispatchGetStringVerificationsForToolstring,\r\n taskId,\r\n toolStringId,\r\n isOpen,\r\n ]);\r\n\r\n const transformData = (data) => {\r\n const result = {};\r\n let sequenceCounter = 1;\r\n\r\n for (const key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n const items = data[key];\r\n const stringTestResult = {\r\n ...items[0].stringTest,\r\n sequence: sequenceCounter++,\r\n };\r\n const assets = items.map((item) => item.asset);\r\n\r\n result[key] = {\r\n stringTestResult: stringTestResult,\r\n assets: assets,\r\n };\r\n }\r\n }\r\n\r\n return fromJS(Object.values(result));\r\n };\r\n\r\n const updateItemProperties = useCallback(\r\n (toolstringItem) => {\r\n dispatchUpdateToolstringItem(\r\n projectId,\r\n taskId,\r\n toolstringId,\r\n toolstringItem,\r\n );\r\n },\r\n [projectId, taskId, toolstringId, dispatchUpdateToolstringItem],\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {!toolstringTools || !toolstringTools.size ? (\r\n \r\n \r\n \r\n {Icon && (\r\n \r\n \r\n \r\n )}\r\n \r\n {'Tool String'}\r\n \r\n \r\n \r\n {'No tool string has been planned for this task.'}\r\n \r\n \r\n \r\n \r\n \r\n ) : isLoading ? (\r\n \r\n \r\n \r\n \r\n \r\n Loading...\r\n \r\n \r\n ) : (\r\n <>\r\n {stringVerificationResults && stringVerificationResults.size > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => {\r\n return {\r\n root: {\r\n padding: 0,\r\n },\r\n fontMedium: {\r\n fontSize: 'medium',\r\n },\r\n fontSmaller: {\r\n fontSize: 'smaller',\r\n },\r\n rowSize: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n height: theme.spacing(10),\r\n marginTop: theme.spacing(0.5),\r\n padding: theme.spacing(2),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: theme.palette.table.row.main,\r\n },\r\n taskContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n paddingLeft: theme.spacing(2),\r\n },\r\n button: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'flex-start',\r\n padding: theme.spacing(0),\r\n },\r\n container: {\r\n padding: theme.spacing(6),\r\n },\r\n icon: {\r\n fontSize: theme.spacing(8),\r\n },\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n dataState: getSummarizedDataStateFromState(\r\n state,\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n TOOLSTRING_ACTIONS.REQUEST_TOOLSTRING_SECTIONS,\r\n TOOLSTRING_ACTIONS.REQUEST_GET_TOOLSTRING_FOR_TASK,\r\n TOOLSTRING_ACTIONS.REQUEST_SORT_TOOLSTRING_TOOLS,\r\n ),\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n dispatchGetToolstring: requestGetTaskToolstring,\r\n dispatchSortToolstringTools: requestSortToolstringTools,\r\n dispatchToolstringSections: requestTaskToolstringSections,\r\n dispatchUpdateToolstringItem: requestUpdateNotPlannedToolstringItem,\r\n dispatchGetStringVerificationsForToolstring:\r\n getStringVerificationsForToolstring,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n withStyles(styles),\r\n memo,\r\n)(MobileExecutionBHATabContainer);\r\n","import { MOBILE_TASK_VIEWS } from 'features/projects/tasks/tasks.constants';\r\nimport { useState } from 'react';\r\nimport { AppBar, Box, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport { Tabs, Tab } from 'altus-ui-components';\r\nimport MobileExecutionActivities from 'features/mobile/projects/execute/taskActivities/MobileExecutionActivities';\r\nimport MobileExecutionBHATabContainer from '../taskToolstring/MobileExecutionBHATabContainer';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\nconst MobileExecutionDetails = ({\r\n classes,\r\n defaultView = MOBILE_TASK_VIEWS.ACTIVITIES,\r\n task,\r\n projectId,\r\n}) => {\r\n const theme = useTheme();\r\n const [selectedView, setSelectedView] = useState(defaultView);\r\n const toggleViewChange = (_event, newValue) => {\r\n setSelectedView(newValue);\r\n };\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst TabPanel = (props) => {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n
    \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n !route.sandbox)}\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n appLoaded: getApplicationLoadedFromState(state),\r\n })),\r\n)(AppContainer);\r\n","import { compose } from 'redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport useBreadcrumbs from 'use-react-router-breadcrumbs';\r\n\r\nimport { BreadcrumbHeader as BreadcrumbHeaderBase } from 'altus-ui-components';\r\n\r\nimport routes from 'app/routes';\r\nimport routePaths from 'app/routePaths';\r\n\r\nconst BreadcrumbHeader = ({ classes }) => {\r\n const breadcrumbs = useBreadcrumbs(routes, {\r\n disableDefaults: true,\r\n excludePaths: [\r\n routePaths.root,\r\n routePaths.dataExchange.liveProjects.project.winch.index,\r\n routePaths.dataExchange.liveProjects.project.cheetah.index,\r\n routePaths.dataExchange.liveProjects.project.warrior.index,\r\n ],\r\n });\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst styles = (theme) => ({\r\n header: {\r\n backgroundColor: 'transparent',\r\n },\r\n breadcrumbText: {\r\n color: theme.palette.primary.contrastText,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(BreadcrumbHeader);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { PureComponent } from 'react';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { UserAvatar } from 'altus-ui-components';\r\n\r\nimport { getCurrentUserFromState } from 'app/app.selectors';\r\n\r\nclass ApplicationSidebarTopContent extends PureComponent {\r\n render() {\r\n const { classes, currentUser } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {currentUser.get('name')}\r\n \r\n \r\n {currentUser.getIn(['organization', 'name'])}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst styles = (theme) => ({\r\n sidebarTopContainer: {\r\n textAlign: 'center',\r\n margin: theme.spacing(2),\r\n },\r\n employeeName: {\r\n fontWeight: theme.typography.fontWeightMedium,\r\n },\r\n employeeOrganizationName: {\r\n fontSize: '0.7rem',\r\n },\r\n userAvatar: {\r\n margin: `${theme.spacing(1)}px 0`,\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n currentUser: getCurrentUserFromState(state),\r\n })),\r\n withStyles(styles),\r\n)(ApplicationSidebarTopContent);\r\n","import { compose } from 'redux';\r\nimport { useCallback } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\n\r\nimport { ApplicationSidebar as ApplicationSidebarCore } from 'altus-ui-components';\r\n\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport { getApplicationHeaderFromState } from 'app/app.selectors';\r\nimport LogoAndAppTitle from 'app/components/ApplicationHeader/LogoAndAppTitle';\r\nimport UserMenuContainer from 'app/components/ApplicationHeader/UserMenuContainer';\r\nimport ApplicationSidebarTopContent from 'app/components/ApplicationHeader/ApplicationSidebarTopContent';\r\n\r\nconst ApplicationSidebar = ({ routes, classes }) => {\r\n const applicationHeader = useSelector(getApplicationHeaderFromState);\r\n\r\n const renderHeader = useCallback(\r\n () => ,\r\n [applicationHeader],\r\n );\r\n\r\n const renderTopContent = useCallback(\r\n () => ,\r\n [],\r\n );\r\n\r\n const renderBottomContent = useCallback(\r\n () => (\r\n \r\n ),\r\n [classes],\r\n );\r\n\r\n const renderApplicationSidebar = useCallback(\r\n (routes) => (\r\n \r\n ),\r\n [renderHeader, renderTopContent, renderBottomContent],\r\n );\r\n\r\n return ;\r\n};\r\n\r\nconst styles = (theme) => ({\r\n userMenuIcon: {\r\n color: theme.palette.secondary.contrastText,\r\n },\r\n});\r\n\r\nexport default compose(withStyles(styles))(ApplicationSidebar);\r\n","import { compose } from 'redux';\r\nimport { useMemo, memo } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Grid } from '@material-ui/core';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\n\r\nimport { LoadingDataState } from 'altus-datastate';\r\nimport { ApplicationBaseContent } from 'altus-ui-components';\r\n\r\nimport { APP_ACTIONS } from 'app/app.constants';\r\nimport RoutesContainer from 'app/components/RoutesContainer';\r\nimport BreadcrumbHeader from 'app/components/BreadcrumbHeader';\r\nimport { getActionDataStateFromState } from 'app/app.selectors';\r\nimport ApplicationSidebar from 'app/components/ApplicationHeader/ApplicationSidebar';\r\n\r\nconst renderBreadcrumbs = () => ;\r\n\r\nconst ApplicationSidebarContainer = ({\r\n routes,\r\n classes,\r\n dataState = LoadingDataState,\r\n}) => {\r\n const baseContentClasses = useMemo(\r\n () => ({\r\n scrollContainer: classes.applicationBaseContentScrollContainer,\r\n }),\r\n [classes],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = () => ({\r\n applicationBaseContentScrollContainer: {\r\n overflow: 'hidden',\r\n },\r\n});\r\n\r\nexport default compose(\r\n connect((state) => ({\r\n dataState: getActionDataStateFromState(state, APP_ACTIONS.GET_CURRENT_USER),\r\n })),\r\n memo,\r\n withStyles(styles),\r\n)(ApplicationSidebarContainer);\r\n","import { Switch } from 'react-router-dom';\r\n\r\nimport {\r\n settingsRoutes,\r\n dashboardRoutes,\r\n dataExchangeRoutes,\r\n} from 'app/routes';\r\n\r\nimport routePaths from 'app/routePaths';\r\nimport ApplicationSidebarContainer from 'app/ApplicationSidebarContainer';\r\nimport ProjectRoutesContainer from 'app/components/ProjectRoutesContainer';\r\n\r\nconst AppContainerV2 = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default AppContainerV2;\r\n","import { toRoot } from 'utils/route.util';\r\nimport Home from '@material-ui/icons/Home';\r\nimport Button from '@material-ui/core/Button';\r\nimport Refresh from '@material-ui/icons/Refresh';\r\nimport { IN_DEV, MODAL } from 'app/app.constants';\r\nimport withStyles from '@material-ui/styles/withStyles';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport ModalContainer from 'app/components/Modal/ModalContainer';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\n\r\nconst AppFailure = ({ classes, errorMessage }) => {\r\n return (\r\n (\r\n \r\n \r\n \r\n Home\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n )}\r\n >\r\n {IN_DEV && (\r\n \r\n {errorMessage}\r\n \r\n )}\r\n {!IN_DEV && (\r\n <>\r\n Sorry ...\r\n It's not you.\r\n It's us\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n rightIcon: {\r\n marginLeft: 10,\r\n },\r\n leftIcon: {\r\n marginRight: 10,\r\n },\r\n backdrop: {\r\n background: undefined,\r\n },\r\n};\r\n\r\nexport default withStyles(styles)(AppFailure);\r\n","import { compose } from 'redux';\r\nimport { Box } from '@material-ui/core';\r\nimport withTheme from '@material-ui/styles/withTheme';\r\n\r\nimport config from 'infrastructure/config/index';\r\nimport { ENVIRONMENTS as Environments } from 'app/app.constants';\r\n\r\nconst ApplicationEnvironmentTopbar = ({ theme }) => {\r\n switch (config.environmentName) {\r\n case Environments.PRD:\r\n return null;\r\n default:\r\n return (\r\n \r\n );\r\n }\r\n};\r\n\r\nexport default compose(withTheme)(ApplicationEnvironmentTopbar);\r\n","import { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { memo, useEffect } from 'react';\r\nimport { Route, Switch, useLocation } from 'react-router-dom';\r\nimport {\r\n ApplicationBase,\r\n ConfirmationDialog,\r\n ErrorBoundary,\r\n NotificationContainer,\r\n} from 'altus-ui-components';\r\nimport {\r\n getCurrentThemeFromState,\r\n getCurrentUserFromState,\r\n} from 'app/app.selectors';\r\nimport themes from 'layout/themes';\r\nimport routePaths from 'app/routePaths';\r\nimport AppContainer from 'app/AppContainer';\r\nimport {\r\n APP_NAME,\r\n APP_VERSION,\r\n APP_VERSION_STORAGE_KEY,\r\n ERROR_CODE_WINDOW_POP_UP_DISABLED,\r\n} from 'app/app.constants';\r\nimport AppContainerV2 from 'app/AppContainerV2';\r\nimport authSingleton from 'services/auth.service';\r\nimport AppFailure from 'app/components/AppFailure';\r\nimport { acquireToken, deleteMsalFromLocalStorage } from 'utils/app.util';\r\nimport {\r\n autoLogin,\r\n saveRedirectPath,\r\n newAppVersionNotification,\r\n onLoad,\r\n setApplicationFailure,\r\n} from 'app/app.actions';\r\nimport ApplicationEnvironmentTopbar from 'app/components/ApplicationHeader/ApplicationEnvironmentTopbar';\r\nimport { isMobile } from 'react-device-detect';\r\nimport { toLogin } from 'utils/route.util';\r\n\r\nconst renderErrorContent = (error) => (\r\n \r\n);\r\n\r\nconst ApplicationRoot = ({\r\n theme,\r\n dispatchSaveRedirectPath,\r\n dispatchOnLoad,\r\n dispatchAutoLogin,\r\n dispatchSetApplicationFailure,\r\n dispatchNewAppVersionNotification,\r\n}) => {\r\n const location = useLocation();\r\n const saveIncomingPath = () => dispatchSaveRedirectPath(location.pathname);\r\n useEffect(\r\n () => {\r\n const IsPopupAllowed = (ex) =>\r\n ex.errorCode !== ERROR_CODE_WINDOW_POP_UP_DISABLED;\r\n\r\n async function authenticate() {\r\n const msalInstance = await authSingleton.getMsalInstance();\r\n const isOriginRootPath = window.location.pathname === routePaths.root;\r\n\r\n acquireToken(msalInstance, saveIncomingPath)\r\n .then((resp) => {\r\n msalInstance.setActiveAccount(resp.account);\r\n dispatchAutoLogin();\r\n })\r\n .then(() => {\r\n const previousAppVersion = localStorage.getItem(\r\n APP_VERSION_STORAGE_KEY,\r\n );\r\n if (\r\n !isMobile &&\r\n (!previousAppVersion || previousAppVersion !== APP_VERSION)\r\n ) {\r\n dispatchNewAppVersionNotification();\r\n }\r\n })\r\n .catch((ex) => {\r\n console.error('Exception caught in AppRoot login chain', ex);\r\n deleteMsalFromLocalStorage();\r\n if (IsPopupAllowed(ex) && isOriginRootPath) {\r\n window.location = toLogin();\r\n } else {\r\n dispatchOnLoad();\r\n }\r\n });\r\n }\r\n\r\n authenticate();\r\n }, // eslint-disable-next-line\r\n [dispatchOnLoad, dispatchAutoLogin, dispatchNewAppVersionNotification],\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default compose(\r\n connect(\r\n (state) => ({\r\n theme: getCurrentThemeFromState(state),\r\n currentUser: getCurrentUserFromState(state),\r\n }),\r\n {\r\n dispatchSaveRedirectPath: saveRedirectPath,\r\n dispatchOnLoad: onLoad,\r\n dispatchAutoLogin: autoLogin,\r\n dispatchSetApplicationFailure: setApplicationFailure,\r\n dispatchNewAppVersionNotification: newAppVersionNotification,\r\n },\r\n ),\r\n memo,\r\n)(ApplicationRoot);\r\n","import HighchartsBoost from 'highcharts/modules/boost';\r\nimport HighchartsMore from 'highcharts/highcharts-more.js';\r\nimport HighchartsExporting from 'highcharts/modules/exporting';\r\nimport HighchartsSolidGauge from 'highcharts/modules/solid-gauge.js';\r\nimport HighchartsNoDataToDisplay from 'highcharts/modules/no-data-to-display';\r\n\r\nimport highchartsTheme from 'layout/highcharts.theme';\r\n\r\nexport const initializeHighcharts = (highcharts) => {\r\n // initialize modules\r\n HighchartsMore(highcharts);\r\n HighchartsExporting(highcharts);\r\n HighchartsSolidGauge(highcharts);\r\n HighchartsNoDataToDisplay(highcharts);\r\n\r\n // Note: Boost should be the last module included because it overrides standard Highcharts functionality\r\n HighchartsBoost(highcharts);\r\n\r\n // set default options from theme\r\n highcharts.setOptions(highchartsTheme);\r\n};\r\n","import { useLocation } from 'react-router-dom';\r\nimport { useEffect } from 'react';\r\nimport routePaths from 'app/routePaths';\r\n\r\nconst LocationProvider = ({ children, setGlobalLocation }) => {\r\n const location = useLocation();\r\n\r\n useEffect(() => {\r\n // Whenever the location changes, update the global location state\r\n if (\r\n location.pathname !== routePaths.login &&\r\n location.pathname !== routePaths.root\r\n )\r\n setGlobalLocation(location.pathname);\r\n }, [location, setGlobalLocation]);\r\n\r\n return children;\r\n};\r\n\r\nexport default LocationProvider;\r\n","import 'typeface-roboto';\r\nimport moment from 'moment';\r\nimport ReactDOM from 'react-dom';\r\nimport Highcharts from 'highcharts';\r\nimport { Provider } from 'react-redux';\r\nimport MomentUtils from '@date-io/moment';\r\nimport Highstock from 'highcharts/highstock';\r\nimport momentDurationFormat from 'moment-duration-format';\r\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\r\nimport { ConnectedRouter } from 'connected-react-router/immutable';\r\n\r\nimport 'index.scss';\r\nimport store from 'infrastructure/store';\r\nimport history from 'infrastructure/history';\r\nimport ApplicationRoot from 'app/ApplicationRoot';\r\nimport appInsights from 'infrastructure/appInsights';\r\nimport { registerServiceWorker } from 'utils/app.util';\r\nimport { initializeHighcharts } from 'utils/highcharts.util';\r\nimport LocationProvider from 'infrastructure/LocationProvider';\r\nimport { setGlobalLocation } from 'app/app.actions';\r\n\r\nif (appInsights) {\r\n appInsights.loadAppInsights();\r\n}\r\n\r\n//Add moment.duration to moment\r\nmomentDurationFormat(moment);\r\n\r\ninitializeHighcharts(Highcharts);\r\ninitializeHighcharts(Highstock);\r\n\r\nregisterServiceWorker();\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n store.dispatch(setGlobalLocation(path))}\r\n >\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'),\r\n);\r\n"],"sourceRoot":""}